From 3a2c7d8133d589e61ca301012069dc8b20466145 Mon Sep 17 00:00:00 2001 From: Shyamjith Palakkandy Date: Fri, 4 Sep 2026 14:02:05 +0530 Subject: [PATCH 1/7] Add GitHub Actions workflow for GitHub Pages deployment This workflow automates the deployment of static content to GitHub Pages upon pushes to the main branch or manual triggers. --- .github/workflows/static.yml | 43 ++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/workflows/static.yml diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml new file mode 100644 index 000000000..460f78200 --- /dev/null +++ b/.github/workflows/static.yml @@ -0,0 +1,43 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy static content to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ["main"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Pages + uses: actions/configure-pages@v5 + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + # Upload entire repository + path: '.' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v5 From 79c10d4c53b1c71323cd6233c7646fd5e5c279e6 Mon Sep 17 00:00:00 2001 From: Shyamjith Palakkandy Date: Fri, 4 Sep 2026 14:13:39 +0530 Subject: [PATCH 2/7] Delete .github/workflows/static.yml --- .github/workflows/static.yml | 43 ------------------------------------ 1 file changed, 43 deletions(-) delete mode 100644 .github/workflows/static.yml diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml deleted file mode 100644 index 460f78200..000000000 --- a/.github/workflows/static.yml +++ /dev/null @@ -1,43 +0,0 @@ -# Simple workflow for deploying static content to GitHub Pages -name: Deploy static content to Pages - -on: - # Runs on pushes targeting the default branch - push: - branches: ["main"] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: "pages" - cancel-in-progress: false - -jobs: - # Single deploy job since we're just deploying - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Pages - uses: actions/configure-pages@v5 - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - # Upload entire repository - path: '.' - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v5 From 6c6f12445e584af725903cbda3f25d96b7317063 Mon Sep 17 00:00:00 2001 From: Soubhik BIswas Date: Mon, 7 Sep 2026 09:43:23 +0530 Subject: [PATCH 3/7] added base nhcx documentation and api reference --- catalogue/openapi/nhcx/v1/nhcx-biometric.yaml | 255 +++++ catalogue/openapi/nhcx/v1/nhcx-gateway.yaml | 148 +++ .../openapi/nhcx/v1/nhcx-participant.yaml | 480 ++++++++++ catalogue/openapi/nhcx/v1/nhcx-usecases.yaml | 881 ++++++++++++++++++ site/docs/nhcx/v1/api/index.md | 50 +- .../v1/api/nhcx-biometric/_category_.json | 4 + .../nhcx/v1/api/nhcx-gateway/_category_.json | 4 + .../v1/api/nhcx-participant/_category_.json | 4 + .../nhcx/v1/api/nhcx-usecases/_category_.json | 4 + site/docs/nhcx/v1/building-a-payer/README.md | 6 + .../nhcx/v1/building-a-payer/_category_.json | 4 + .../building-a-payer/adjudicating-claims.md | 85 ++ .../adjudicating-preauthorisation.md | 100 ++ .../nhcx/v1/building-a-payer/checklist.md | 97 ++ .../building-a-payer/eligibility-response.md | 91 ++ site/docs/nhcx/v1/building-a-payer/index.md | 117 +++ .../payment-notice-and-communication.md | 95 ++ .../v1/building-a-payer/policies-and-plans.md | 75 ++ .../docs/nhcx/v1/building-a-payer/ui-guide.md | 182 ++++ .../nhcx/v1/building-a-provider/README.md | 7 + .../v1/building-a-provider/_category_.json | 4 + .../nhcx/v1/building-a-provider/checklist.md | 101 ++ .../discharge-and-claim.md | 87 ++ .../docs/nhcx/v1/building-a-provider/index.md | 126 +++ .../v1/building-a-provider/insurance-plan.md | 90 ++ .../payment-and-communication.md | 99 ++ .../v1/building-a-provider/pmjay-provider.md | 172 ++++ .../building-a-provider/pmjay-sandbox-run.md | 191 ++++ .../building-a-provider/preauthorisation.md | 114 +++ .../registration-and-eligibility.md | 137 +++ .../nhcx/v1/building-a-provider/ui-guide.md | 224 +++++ .../docs/nhcx/v1/concepts/claim-settlement.md | 91 ++ site/docs/nhcx/v1/concepts/index.md | 69 +- .../nhcx/v1/concepts/jwe-status-and-errors.md | 191 ++++ .../concepts/nhcx-way-of-claim-settlement.md | 177 ++++ site/docs/nhcx/v1/concepts/pmjay-on-nhcx.md | 92 ++ .../nhcx/v1/concepts/pmjay-scheme-rules.md | 69 ++ site/docs/nhcx/v1/concepts/what-nhcx-is.md | 103 ++ site/docs/nhcx/v1/exchanges/README.md | 8 + site/docs/nhcx/v1/exchanges/_category_.json | 4 + site/docs/nhcx/v1/exchanges/index.md | 50 + .../docs/nhcx/v1/exchanges/pmjay-use-cases.md | 334 +++++++ site/docs/nhcx/v1/exchanges/use-cases.md | 291 ++++++ site/docs/nhcx/v1/exchanges/workflow-codes.md | 232 +++++ .../nhcx/v1/fhir-reference/_category_.json | 4 + .../fhir-reference/bundles-and-conventions.md | 98 ++ .../cancel-reprocess-and-shortfall.md | 142 +++ .../fhir-reference/claim-query-and-answer.md | 122 +++ .../nhcx/v1/fhir-reference/claim-request.md | 172 ++++ .../nhcx/v1/fhir-reference/claim-response.md | 113 +++ .../v1/fhir-reference/codes-and-value-sets.md | 188 ++++ .../nhcx/v1/fhir-reference/communication.md | 129 +++ .../coverage-eligibility-request.md | 87 ++ .../coverage-eligibility-response.md | 117 +++ .../fhir-reference/insurance-plan-request.md | 87 ++ .../insurance-plan-response-coverage-based.md | 81 ++ .../insurance-plan-response-package-based.md | 171 ++++ .../fhir-reference/insurance-plan-response.md | 84 ++ .../payment-notice-and-acknowledgement.md | 117 +++ .../preauthorisation-enhancement.md | 120 +++ .../preauthorisation-query-and-answer.md | 135 +++ .../preauthorisation-request.md | 121 +++ .../preauthorisation-response.md | 126 +++ .../predetermination-status-and-search.md | 81 ++ .../nhcx/v1/fhir-reference/sample-bundles.md | 157 ++++ .../nhcx/v1/getting-started/_category_.json | 5 +- .../building-and-sending-a-jwe.md | 145 +++ .../finding-participants-and-policies.md | 172 ++++ .../docs/nhcx/v1/getting-started/glossary.mdx | 10 +- site/docs/nhcx/v1/getting-started/index.mdx | 98 ++ .../nhcx/v1/getting-started/nhcx-adapter.md | 259 +++++ .../nhcx/v1/getting-started/nhcx-glossary.md | 102 ++ .../v1/getting-started/participant-record.md | 140 +++ .../getting-started/receiving-a-callback.md | 163 ++++ .../getting-started/recipient-certificate.md | 58 ++ .../nhcx/v1/getting-started/session-token.md | 87 ++ .../v1/getting-started/your-certificate.md | 60 ++ site/docs/nhcx/v1/index.md | 131 +-- site/docs/nhcx/v1/reference/README.md | 11 +- site/docs/nhcx/v1/registries/index.md | 53 +- .../registries/participants-and-policies.md | 156 ++++ site/src/data/reference-links.json | 16 + site/static/agent-setup/prompt.md | 10 +- 83 files changed, 9695 insertions(+), 178 deletions(-) create mode 100644 catalogue/openapi/nhcx/v1/nhcx-biometric.yaml create mode 100644 catalogue/openapi/nhcx/v1/nhcx-gateway.yaml create mode 100644 catalogue/openapi/nhcx/v1/nhcx-participant.yaml create mode 100644 catalogue/openapi/nhcx/v1/nhcx-usecases.yaml create mode 100644 site/docs/nhcx/v1/api/nhcx-biometric/_category_.json create mode 100644 site/docs/nhcx/v1/api/nhcx-gateway/_category_.json create mode 100644 site/docs/nhcx/v1/api/nhcx-participant/_category_.json create mode 100644 site/docs/nhcx/v1/api/nhcx-usecases/_category_.json create mode 100644 site/docs/nhcx/v1/building-a-payer/README.md create mode 100644 site/docs/nhcx/v1/building-a-payer/_category_.json create mode 100644 site/docs/nhcx/v1/building-a-payer/adjudicating-claims.md create mode 100644 site/docs/nhcx/v1/building-a-payer/adjudicating-preauthorisation.md create mode 100644 site/docs/nhcx/v1/building-a-payer/checklist.md create mode 100644 site/docs/nhcx/v1/building-a-payer/eligibility-response.md create mode 100644 site/docs/nhcx/v1/building-a-payer/index.md create mode 100644 site/docs/nhcx/v1/building-a-payer/payment-notice-and-communication.md create mode 100644 site/docs/nhcx/v1/building-a-payer/policies-and-plans.md create mode 100644 site/docs/nhcx/v1/building-a-payer/ui-guide.md create mode 100644 site/docs/nhcx/v1/building-a-provider/README.md create mode 100644 site/docs/nhcx/v1/building-a-provider/_category_.json create mode 100644 site/docs/nhcx/v1/building-a-provider/checklist.md create mode 100644 site/docs/nhcx/v1/building-a-provider/discharge-and-claim.md create mode 100644 site/docs/nhcx/v1/building-a-provider/index.md create mode 100644 site/docs/nhcx/v1/building-a-provider/insurance-plan.md create mode 100644 site/docs/nhcx/v1/building-a-provider/payment-and-communication.md create mode 100644 site/docs/nhcx/v1/building-a-provider/pmjay-provider.md create mode 100644 site/docs/nhcx/v1/building-a-provider/pmjay-sandbox-run.md create mode 100644 site/docs/nhcx/v1/building-a-provider/preauthorisation.md create mode 100644 site/docs/nhcx/v1/building-a-provider/registration-and-eligibility.md create mode 100644 site/docs/nhcx/v1/building-a-provider/ui-guide.md create mode 100644 site/docs/nhcx/v1/concepts/claim-settlement.md create mode 100644 site/docs/nhcx/v1/concepts/jwe-status-and-errors.md create mode 100644 site/docs/nhcx/v1/concepts/nhcx-way-of-claim-settlement.md create mode 100644 site/docs/nhcx/v1/concepts/pmjay-on-nhcx.md create mode 100644 site/docs/nhcx/v1/concepts/pmjay-scheme-rules.md create mode 100644 site/docs/nhcx/v1/concepts/what-nhcx-is.md create mode 100644 site/docs/nhcx/v1/exchanges/README.md create mode 100644 site/docs/nhcx/v1/exchanges/_category_.json create mode 100644 site/docs/nhcx/v1/exchanges/index.md create mode 100644 site/docs/nhcx/v1/exchanges/pmjay-use-cases.md create mode 100644 site/docs/nhcx/v1/exchanges/use-cases.md create mode 100644 site/docs/nhcx/v1/exchanges/workflow-codes.md create mode 100644 site/docs/nhcx/v1/fhir-reference/_category_.json create mode 100644 site/docs/nhcx/v1/fhir-reference/bundles-and-conventions.md create mode 100644 site/docs/nhcx/v1/fhir-reference/cancel-reprocess-and-shortfall.md create mode 100644 site/docs/nhcx/v1/fhir-reference/claim-query-and-answer.md create mode 100644 site/docs/nhcx/v1/fhir-reference/claim-request.md create mode 100644 site/docs/nhcx/v1/fhir-reference/claim-response.md create mode 100644 site/docs/nhcx/v1/fhir-reference/codes-and-value-sets.md create mode 100644 site/docs/nhcx/v1/fhir-reference/communication.md create mode 100644 site/docs/nhcx/v1/fhir-reference/coverage-eligibility-request.md create mode 100644 site/docs/nhcx/v1/fhir-reference/coverage-eligibility-response.md create mode 100644 site/docs/nhcx/v1/fhir-reference/insurance-plan-request.md create mode 100644 site/docs/nhcx/v1/fhir-reference/insurance-plan-response-coverage-based.md create mode 100644 site/docs/nhcx/v1/fhir-reference/insurance-plan-response-package-based.md create mode 100644 site/docs/nhcx/v1/fhir-reference/insurance-plan-response.md create mode 100644 site/docs/nhcx/v1/fhir-reference/payment-notice-and-acknowledgement.md create mode 100644 site/docs/nhcx/v1/fhir-reference/preauthorisation-enhancement.md create mode 100644 site/docs/nhcx/v1/fhir-reference/preauthorisation-query-and-answer.md create mode 100644 site/docs/nhcx/v1/fhir-reference/preauthorisation-request.md create mode 100644 site/docs/nhcx/v1/fhir-reference/preauthorisation-response.md create mode 100644 site/docs/nhcx/v1/fhir-reference/predetermination-status-and-search.md create mode 100644 site/docs/nhcx/v1/fhir-reference/sample-bundles.md create mode 100644 site/docs/nhcx/v1/getting-started/building-and-sending-a-jwe.md create mode 100644 site/docs/nhcx/v1/getting-started/finding-participants-and-policies.md create mode 100644 site/docs/nhcx/v1/getting-started/index.mdx create mode 100644 site/docs/nhcx/v1/getting-started/nhcx-adapter.md create mode 100644 site/docs/nhcx/v1/getting-started/nhcx-glossary.md create mode 100644 site/docs/nhcx/v1/getting-started/participant-record.md create mode 100644 site/docs/nhcx/v1/getting-started/receiving-a-callback.md create mode 100644 site/docs/nhcx/v1/getting-started/recipient-certificate.md create mode 100644 site/docs/nhcx/v1/getting-started/session-token.md create mode 100644 site/docs/nhcx/v1/getting-started/your-certificate.md create mode 100644 site/docs/nhcx/v1/registries/participants-and-policies.md diff --git a/catalogue/openapi/nhcx/v1/nhcx-biometric.yaml b/catalogue/openapi/nhcx/v1/nhcx-biometric.yaml new file mode 100644 index 000000000..d59cc821c --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-biometric.yaml @@ -0,0 +1,255 @@ +openapi: 3.1.1 +info: + title: NHCX biometric authentication + version: abdm-v3 + summary: The PMJAY beneficiary authentication APIs, outside the NHCX message set. + description: > + PMJAY requires the beneficiary to be verified biometrically at + registration and again at discharge. These calls are not NHCX exchanges: + they carry no JWE, no FHIR bundle and no workflow code, and they read + `Authorization` rather than `bearer_auth`. They are a separate API a + PMJAY integrator must implement alongside the claim exchanges. + + + On success the system holds a user token valid for 30 minutes, with a + refresh token. That token rides in the header of the eligibility check + and the preauthorisation, and a fresh authentication is required at + discharge for the claim. + + + Build all three methods. Fingerprint and iris are an init-then-verify + pair on the biometric service. Face is a separate flow on the ABDM proxy: + initiate, show the patient a QR code to scan in the ABHA app, poll until + the capture completes, then verify with the Aadhaar number encrypted + under the key the portal supplies. + + + Where biometrics are not possible, the scheme's authentication consent + questionnaire stands in. The one case with no fallback is a cyclic + procedure, where a live capture is required at every visit. + contact: + name: NHCX integration support + url: https://hcxsbx.abdm.gov.in/#/documents + email: hcx.integration@nha.gov.in + x-abdm-gateway: nhcx + x-abdm-module: biometric + x-abdm-phase: 1 + x-abdm-roles: [provider] +x-abdm-sources: + - file: NHCX-site/hmisdocuments/Biometric Authentication APIs Postman Collection.zip + role: upstream + status: not-yet-hashed + note: ABHA-Proxy collection, 3 requests. + - file: NHCX-site/hmisdocuments/FaceAuth Postman Collection.zip + role: upstream + status: not-yet-hashed + note: FaceAuth collection, 3 requests. +servers: + - url: https://apisbx.abdm.gov.in + description: Sandbox. The two flows sit under different path prefixes on the same host. +tags: + - name: Fingerprint and iris + description: The init-then-verify pair, under /hcx/abha/biometric. + - name: Face + description: The QR-and-poll flow, under /pmjay/sbxhcx/abdmproxy/abha/biometric. +paths: + /hcx/abha/biometric/auth/init: + post: + operationId: nhcx_biometric_auth_init + tags: [Fingerprint and iris] + summary: Start a biometric authentication + description: > + Opens an authentication transaction against the beneficiary's ABHA + number and returns a transaction id the verify call quotes back. + `authMode` picks the method. + parameters: + - {name: process, in: header, required: true, description: "The stage this authentication is for, for example Discharge on a cyclic visit.", schema: {type: string}} + - {name: payerid, in: header, required: true, description: The scheme payer's participant code., schema: {type: string}} + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [scope, loginId, authMode] + properties: + scope: + type: array + items: {type: string} + description: "`[abha-login, aadhaar-bio-verify]`, or the face or iris equivalent." + loginHint: {type: string, example: abha-number} + loginId: {type: string, description: The beneficiary's ABHA number.} + otpSystem: {type: string, example: aadhaar} + authMode: + type: string + enum: [FINGERPRINT, IRIS, FACE_AUTH] + example: + scope: [abha-login, aadhaar-bio-verify] + loginHint: abha-number + loginId: 91-XXXX-XXXX-0302 + otpSystem: aadhaar + authMode: FINGERPRINT + responses: + "200": + description: A transaction id to quote on the verify call. + /hcx/abha/biometric/auth/verify: + post: + operationId: nhcx_biometric_auth_verify + tags: [Fingerprint and iris] + summary: Verify the captured biometric + description: > + Sends the captured PID block against the transaction opened by init. + On success the response carries the user token that rides on the + eligibility check and the preauthorisation. + parameters: + - {name: process, in: header, required: true, schema: {type: string}} + - {name: payerid, in: header, required: true, schema: {type: string}} + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [scope, authData, authMode] + properties: + scope: {type: array, items: {type: string}} + authMode: {type: string, enum: [FINGERPRINT, IRIS, FACE_AUTH]} + authData: + type: object + properties: + authMethods: + type: array + items: {type: string, enum: [bio, iris, face, otp]} + bio: + type: object + properties: + txnId: {type: string, format: uuid} + fingerPrintAuthPid: {type: string} + iris: + type: object + properties: + txnId: {type: string, format: uuid} + irisAuthPid: {type: string} + face: + type: object + properties: + txnId: {type: string, format: uuid} + faceAuthPid: {type: string} + otp: + type: object + properties: + txnId: {type: string, format: uuid} + otpValue: {type: string} + responses: + "200": + description: A user token valid for 30 minutes, with a refresh token. + /hcx/abha/biometric/auth/refresh/token: + get: + operationId: nhcx_biometric_auth_refresh_token + tags: [Fingerprint and iris] + summary: Refresh the user token + description: > + Extends the 30 minute user token through a long transaction. A + refresh token is not accepted in place of a live capture on a cyclic + procedure's per-visit authentication; only for the final claim. + parameters: + - {name: R-token, in: header, required: true, description: The refresh token from the verify call., schema: {type: string}} + - {name: TIMESTAMP, in: header, required: true, schema: {type: string}} + - {name: REQUEST-ID, in: header, required: true, schema: {type: string, format: uuid}} + - {name: payerid, in: header, required: true, schema: {type: string}} + - {name: process, in: header, required: true, schema: {type: string}} + responses: + "200": + description: A refreshed user token. + /pmjay/sbxhcx/abdmproxy/abha/biometric/faceauth/init: + post: + operationId: nhcx_biometric_faceauth_init + tags: [Face] + summary: Start a face authentication + description: > + Opens the face flow and returns a transaction id. The patient then + scans a QR code in the ABHA app; the capture is collected by polling + the PID endpoint below. + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [scope] + properties: + scope: + type: array + items: {type: string} + example: + scope: [abha-enrol, face-auth] + responses: + "200": + description: A transaction id for the capture and verify calls. + /pmjay/sbxhcx/abdmproxy/abha/biometric/capture/pid: + post: + operationId: nhcx_biometric_faceauth_capture_pid + tags: [Face] + summary: Poll for the captured face PID + description: > + Polled after init until the patient has completed the capture in the + ABHA app. Returns the PID block the verify call sends. + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [txnId] + properties: + txnId: {type: string, format: uuid} + responses: + "200": + description: The captured PID, once the patient has completed the scan. + /pmjay/sbxhcx/abdmproxy/abha/biometric/v2/auth/verify: + post: + operationId: nhcx_biometric_faceauth_verify + tags: [Face] + summary: Verify a face capture against Aadhaar + description: > + Completes the face flow. The `aadhaar` field is the beneficiary's + Aadhaar number encrypted under the public key the portal supplies, + not the twelve digits in the clear. Do not log it, do not display it, + and do not validate it as a number. + parameters: + - {name: payerid, in: header, required: true, schema: {type: string}} + - {name: process, in: header, required: true, schema: {type: string}} + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [authData] + properties: + authData: + type: object + properties: + authMethods: + type: array + items: {type: string, enum: [face_auth]} + face: + type: object + properties: + txnId: {type: string, format: uuid} + aadhaar: + type: string + description: The Aadhaar number encrypted under the portal's public key. + responses: + "200": + description: A user token valid for 30 minutes, with a refresh token. +components: + securitySchemes: + Authorization: + type: http + scheme: bearer + description: > + The ABDM session token. Note that these endpoints read + `Authorization`, where the NHCX message endpoints read `bearer_auth`. +security: + - Authorization: [] diff --git a/catalogue/openapi/nhcx/v1/nhcx-gateway.yaml b/catalogue/openapi/nhcx/v1/nhcx-gateway.yaml new file mode 100644 index 000000000..9ca0ddaa1 --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-gateway.yaml @@ -0,0 +1,148 @@ +openapi: 3.1.1 +info: + title: NHCX session token + version: abdm-v3 + summary: The ABDM session token every NHCX call carries. + description: > + NHCX does not issue its own credentials. Every call to the participant + service, the use case endpoints and the biometric proxy carries a bearer + token minted by the ABDM gateway from the client ID and secret an + integrator already holds from Milestone 1. + + + The token is short lived and the published documents disagree on how + short, quoting five minutes, twenty minutes and a hundred minutes in + different places. Build for the strictest: refresh on a timer, and treat + any 401 as "fetch a new token and retry once" rather than as a failure. + contact: + name: NHCX integration support + url: https://hcxsbx.abdm.gov.in/#/documents + email: hcx.integration@nha.gov.in + x-abdm-gateway: nhcx + x-abdm-module: gateway + x-abdm-phase: 1 + x-abdm-roles: [provider, payer, tpa] +x-abdm-sources: + - url: https://hcxsbx.abdm.gov.in/#/documents + role: upstream + status: not-yet-hashed + note: > + Authenticating with NHCX, and NHCX FAQs v1.2 items 2, 3 and 20. The + sessions call has no Postman collection of its own on the portal; the + shape here is the ABDM gateway v3 sessions call as used against the + sandbox on 5 and 6 September 2026. +servers: + - url: https://dev.abdm.gov.in + description: Sandbox ABDM gateway +tags: + - name: Sessions + description: Minting and refreshing the bearer token. +paths: + /api/hiecm/gateway/v3/sessions: + post: + operationId: nhcx_sessions_create + tags: [Sessions] + summary: Mint a session token from client credentials + description: > + Exchanges the Milestone 1 client ID and secret for a bearer token. + The token goes on every later NHCX call in the `bearer_auth` header, + with the word `Bearer` and a space in front of it. + + + An older address, `/gateway/v0.5/sessions`, appears throughout the + portal's earlier documents. It takes the client ID and secret alone, + without the three headers below and without `grantType`, and returns + the same body. Treat it as superseded. + security: [] + parameters: + - name: REQUEST-ID + in: header + required: true + description: A fresh UUID generated for every call. Sending the same one twice is refused. + schema: + type: string + format: uuid + example: 607f0d74-0913-4345-afd0-70123442eb64 + - name: TIMESTAMP + in: header + required: true + description: > + Current time in UTC, ISO 8601 with milliseconds and a trailing Z. + A drifted clock is refused, so take the time from the system. + schema: + type: string + example: "2026-09-04T06:15:51.975Z" + - name: X-CM-ID + in: header + required: true + description: The environment. `sbx` on the sandbox, lowercase. + schema: + type: string + example: sbx + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [clientId, clientSecret, grantType] + properties: + clientId: + type: string + description: The ABDM sandbox client ID from Milestone 1. + clientSecret: + type: string + description: The matching client secret. Never log it. + grantType: + type: string + const: client_credentials + description: > + Required on the v3 address. The older v0.5 address omitted + it, which is why a request copied from an old sample is + rejected here. + example: + clientId: "" + clientSecret: "" + grantType: client_credentials + responses: + "200": + description: A token, with its lifetime in seconds. + content: + application/json: + schema: + type: object + properties: + accessToken: {type: string} + expiresIn: {type: integer, description: Lifetime in seconds.} + refreshToken: {type: string} + refreshTokenIn: {type: integer} + tokenType: {type: string, example: bearer} + example: + accessToken: eyJhbGciOiJSUzI1NiIs... + expiresIn: 300 + refreshTokenIn: 300 + refreshToken: eyJhbGciOiJSUzI1NiIs... + tokenType: bearer + "401": + description: > + Wrong client ID or secret, or Milestone 1 is not complete. + content: + application/json: + schema: + type: object + properties: + code: {type: string} + message: {type: string} +components: + securitySchemes: + bearer_auth: + type: apiKey + in: header + name: bearer_auth + description: > + The session token, prefixed with `Bearer ` and a space. Note the + header name: NHCX's own endpoints read `bearer_auth`, not + `Authorization`. The biometric endpoints read `Authorization` + instead, and the safe course is to send both with the same value. +security: + - bearer_auth: [] diff --git a/catalogue/openapi/nhcx/v1/nhcx-participant.yaml b/catalogue/openapi/nhcx/v1/nhcx-participant.yaml new file mode 100644 index 000000000..80566a26c --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-participant.yaml @@ -0,0 +1,480 @@ +openapi: 3.1.1 +info: + title: NHCX participant service + version: abdm-v3 + summary: Registering on the exchange, finding who to send to, and linking policies. + description: > + The registry half of NHCX. None of these calls carries a FHIR bundle and + none of them is encrypted: they are how a participant joins the network, + how participants find and address each other, and how a payer links a + policy to the beneficiary who holds it. + + + Sandbox and production differ. Sandbox is one call each way. Production + adds a one-time passcode to the registered mobile number at every step, + so nobody can register a hospital they do not control, and the two + confirmation calls are GETs. + contact: + name: NHCX integration support + url: https://hcxsbx.abdm.gov.in/#/documents + email: hcx.integration@nha.gov.in + x-abdm-gateway: nhcx + x-abdm-module: participant + x-abdm-phase: 1 + x-abdm-roles: [provider, payer, tpa] +x-abdm-sources: + - file: NHCX-site/documents/AWS(Sandbox) NHCX-OnBoarding APIs Postman Collection.zip + role: upstream + status: not-yet-hashed + note: SANDBOX_NHCX-OnBoarding APIs, 2 requests. + - file: NHCX-site/documents/AWS(PROD) NHCX-OnBoarding APIs Postman Collection.zip + role: upstream + status: not-yet-hashed + note: PROD_NHCX-OnBoarding APIs, 4 requests. + - file: NHCX-site/documents/AWS(Sandbox) PARTICIPANT SERVICE APIs Postman Collection.zip + role: upstream + status: not-yet-hashed + note: SANDBOX-Participant_APIs, 5 requests. + - url: https://hcxsbx.abdm.gov.in/participanthcxservice/swagger-ui/index.html + role: upstream + status: not-yet-fetched + note: NHA's own Swagger for this service, live on the sandbox portal. +servers: + - url: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice + description: Sandbox participant service + - url: https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice + description: Production participant service +tags: + - name: Onboarding + description: Creating and updating the participant record that is your identity on the exchange. + - name: Discovery + description: Finding the participant a message goes to, and the key to seal it with. + - name: Policy linking + description: The payer side. Linking a policy to the ABHA number that will be used to find it. +paths: + /participant/create: + post: + operationId: nhcx_participant_create_sandbox + tags: [Onboarding] + summary: Create a participant record (sandbox) + description: > + Creates your identity on the sandbox exchange in one call, with no + passcode step. The response carries the participant code that becomes + `x-hcx-sender_code` on everything you send from then on. A hospital + group creates one participant per facility, each with its own HFR ID, + using the same credentials. + parameters: + - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} + - {name: source, in: header, required: false, description: "Set to `internal` on the sandbox.", schema: {type: string}} + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [linked_registry_codes, registryid, roles, primaryMobile, encryption_cert] + properties: + linked_registry_codes: + type: array + items: {type: string, enum: ["10001", "10002", "10003", "10004"]} + description: "Which registry vouches for you. 10001 HFR, 10002 NIN, 10003 ROHINI, 10004 payer registry." + registryid: + type: string + description: On the sandbox, your ABDM client ID. In production, the HFR ID for a hospital or the IRDAI ID for a payer. + participant_name: {type: string} + scheme_code: {type: string, example: PMJAY} + state: {type: string} + district: {type: string} + roles: + type: array + items: {type: string, enum: ["10001","10002","10003","10004","10005","10006","10007","10008","10009"]} + description: > + 10001 provider, 10002 payer, 10003 TPA, 10004 regulator, + 10005 research, 10006 insurance marketplace, 10007 scheme + sponsor, 10008 another exchange, 10009 patient app. + primaryEmail: {type: string, format: email} + phone: {type: array, items: {type: string}} + primaryMobile: {type: string, description: Must be the number on the HFR record, or for a payer the one NHA holds.} + signing_cert_path: {type: string, description: Optional. Leave empty.} + encryption_cert: + type: string + description: Your X.509 certificate as a single base64 string. It begins `LS0tLS1CRUdJTi`. + endpoint_url: + type: string + description: > + The base of your callback server, sometimes called the + bridge URL. A domain name over HTTPS, hosted in India. The + exchange appends the callback path to it. + example: + linked_registry_codes: ["10001"] + registryid: "" + participant_name: Test Hospital + scheme_code: PMJAY + state: Haryana + district: Panchkula + roles: ["10001"] + primaryEmail: integration@hospital.example + phone: ["01123456789"] + primaryMobile: "9876543210" + signing_cert_path: "" + encryption_cert: "" + endpoint_url: https://nhcx.hospital.example + responses: + "200": + description: The participant code, which is your address on the exchange. + content: + application/json: + schema: + type: object + properties: + participant_code: {type: string, example: 1000004446@hcx} + /participant/update: + post: + operationId: nhcx_participant_update_sandbox + tags: [Onboarding] + summary: Update a participant record (sandbox) + description: > + The same shape as create, keyed on the participant code. Used to + change the encryption certificate or the callback address. + parameters: + - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [participant_code] + properties: + participant_code: {type: string, example: 1000004446@hcx} + participant_name: {type: string} + scheme_code: {type: string} + roles: {type: array, items: {type: string}} + primaryEmail: {type: string, format: email} + phone: {type: array, items: {type: string}} + primaryMobile: {type: string} + endpoint_url: {type: string} + signing_cert_path: {type: string} + encryption_cert: {type: string} + responses: + "200": {description: The record is updated.} + /v2/participant/create: + post: + operationId: nhcx_participant_create_production + tags: [Onboarding] + summary: Create a participant record (production, step 1 of 4) + description: > + Production onboarding is four calls. This is the first. It returns a + participant ID and a transaction ID, and sends a passcode to the + registered mobile number. The participant exists but is pending until + the passcode is confirmed. Passcodes and transaction IDs last 24 + hours; lose one and you repeat the step. + parameters: + - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [registrytype, registryid, role, mobilenumber, email] + properties: + registrytype: {type: string, enum: ["10001","10002","10003","10004"]} + registryid: + type: string + description: > + The HFR ID for a provider. For a payer or TPA the IRDAI + registry ID, sent without leading zeros, so 0123 becomes 123. + role: {type: array, items: {type: string}} + endpoint_url: {type: string, description: May be left empty here and set at the configure step.} + mobilenumber: {type: string, description: Must match the number on the HFR record exactly.} + email: {type: string, format: email} + example: + registrytype: "10001" + registryid: "" + role: ["10001"] + endpoint_url: "" + mobilenumber: "" + email: integration@hospital.example + responses: + "200": + description: A participant ID and a transaction ID. A passcode is sent to the mobile number. + content: + application/json: + schema: + type: object + properties: + participantid: {type: string} + transactionid: {type: string} + /validate: + get: + operationId: nhcx_participant_validate_create + tags: [Onboarding] + summary: Confirm the create passcode (production, step 2 of 4) + description: > + Confirms the passcode sent by the create call and makes the + participant active. Note the method: both confirmation calls are + GETs, not POSTs. + parameters: + - {name: transactionId, in: query, required: true, schema: {type: string}} + - {name: passcode, in: query, required: true, schema: {type: string}} + - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} + responses: + "200": {description: The participant is active.} + /v2/participant/update: + post: + operationId: nhcx_participant_update_production + tags: [Onboarding] + summary: Configure certificate and callback (production, step 3 of 4) + description: > + Sends the encryption certificate and the callback address. A second + transaction ID and passcode arrive on the registered mobile. + parameters: + - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [participantcode] + properties: + participantcode: {type: string, example: 12345678934@hcx} + encryptioncert: {type: string, description: The X.509 certificate as a single base64 string.} + endpointurl: {type: string, description: The bridge URL the exchange will call back on.} + responses: + "200": + description: A second transaction ID, pending its passcode. + content: + application/json: + schema: + type: object + properties: + transactionid: {type: string} + /update/validate: + get: + operationId: nhcx_participant_validate_update + tags: [Onboarding] + summary: Confirm the update passcode (production, step 4 of 4) + description: The certificate and address go live. The exchange can now reach you. + parameters: + - {name: transactionId, in: query, required: true, schema: {type: string}} + - {name: passcode, in: query, required: true, schema: {type: string}} + - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} + responses: + "200": {description: The certificate and callback address are live.} + /v2/update/cert: + post: + operationId: nhcx_participant_update_certificate + tags: [Onboarding] + summary: Replace only the encryption certificate (production) + description: > + A shorter path that skips the passcode, for the yearly key rotation + NHA recommends. Not present in the Postman collection; documented on + the onboarding page. + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [participantId, certificate] + properties: + participantId: {type: string} + certificate: {type: string, description: The new X.509 certificate, base64 encoded.} + responses: + "200": {description: The certificate is replaced.} + /fetch/participants/list: + post: + operationId: nhcx_participant_list + tags: [Discovery] + summary: List participants by role + description: > + How a hospital system builds its list of payers, and how a payer + finds hospitals. The list is not searchable by name on the server + side: fetch it, filter by name in your own code, and cache it for the + day, because it changes rarely. + parameters: + - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} + - {name: X-CM-ID, in: header, required: false, schema: {type: string, example: sbx}} + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [role] + properties: + role: {type: string, enum: [PAYER, PROVIDER, TPA]} + fromdate: {type: string, description: "Registration date lower bound, dd/MM/yyyy only.", example: 01/04/2021} + todate: {type: string, description: "Registration date upper bound, dd/MM/yyyy only.", example: 31/03/2027} + entitytype: {type: string, description: "Optional. `Gov` narrows to government schemes; omit for everyone."} + responses: + "200": + description: Participant records, each with its code, name, roles and entity type. + /fetch/certs: + post: + operationId: nhcx_participant_fetch_certificate + tags: [Discovery] + summary: Fetch a participant's public key + description: > + Returns the key material to seal a message for that participant, as + PEM text. Usually a full X.509 certificate; for a participant who + registered a bare key, an SPKI public key instead. Try the + certificate import first and fall back to the key. The handbook's + rule of thumb is that anything under about 400 bytes is a bare key. + + + Fetch against the `processingid` from the policy lookup, not the + insurer's `payerid`. Cache by participant code for 24 hours. + parameters: + - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [participantid] + properties: + participantid: {type: string, example: 1000003538@hcx} + responses: + "200": + description: > + Key material in PEM text. None of the published sources gives the + JSON envelope it arrives in, so inspect one response before + writing the parser. + /participant/get/policies: + post: + operationId: nhcx_participant_get_policies + tags: [Discovery] + summary: Look up a beneficiary's policies + description: > + Given something that identifies the patient, returns every policy + linked to them. The three identifier types are not equal: try + `AbhaNumber` first, then `MemberId`, then `MobileNo`, and stop at the + first that returns a policy. + + + What comes back decides the address on every later envelope. + `processingid` is the recipient, not `payerid`. Pointing at `payerid` + is the portal's seventh most common mistake. + parameters: + - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [identifiertype, identifiervalue] + properties: + identifiertype: {type: string, enum: [AbhaNumber, MemberId, MobileNo]} + identifiervalue: {type: string, description: "The ABHA number without hyphens, the member ID, or the mobile number."} + example: + identifiertype: AbhaNumber + identifiervalue: "91123456781234" + responses: + "200": + description: One entry per policy. + content: + application/json: + schema: + type: object + properties: + policies: + type: array + items: + type: object + properties: + payerid: {type: string, description: The insurer's participant code. Goes inside the bundle as the insurer.} + processingid: {type: string, description: Who processes claims for this policy. This is the recipient on the envelope.} + memberid: {type: string, description: Identifies the beneficiary in eligibility and claim bundles.} + productid: {type: string, description: The product code, used to fetch the insurance plan.} + productname: {type: string, description: Human readable.} + example: + policies: + - payerid: 1518@hcx + processingid: 1000000109@hcx + memberid: MD5SLS4X5 + productid: PMJAY/HP/S/G + productname: PMJAY Himachal Pradesh + /participant/link/abha/policy: + post: + operationId: nhcx_participant_link_abha_policy + tags: [Policy linking] + summary: Link a policy to an ABHA number + description: > + The payer's half, performed when the policy is written or renewed. It + is what makes the beneficiary findable by ABHA number at the point of + care. Only the participants named as `payerid` or `processingid` may + change the link later, and the exchange checks the caller's token + against them, so the linking job must run under the same credentials + that created the participant. + parameters: + - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [requestid, payerid, processingid, memberid, policies] + properties: + requestid: {type: string, format: uuid} + abhanumber: {type: string, description: The policy holder's ABHA number, without hyphens.} + mobilenumber: {type: string} + memberid: {type: string, description: The policy holder ID.} + payerid: {type: string, description: The insurer's own participant code. Every insurer has one, even when it works through a TPA.} + processingid: {type: string, description: The TPA's participant code, or the insurer's own if it processes its own claims.} + policies: + type: array + items: + type: object + properties: + productid: {type: string} + productname: {type: string} + responses: + "200": {description: The policy is linked.} + /participant/delink/abha/policy: + post: + operationId: nhcx_participant_delink_abha_policy + tags: [Policy linking] + summary: Remove a policy link + description: > + Only products already on the link can be removed; naming one that is + not there returns "There is no policies with requested details". The + commonest reason to de-link is a change of TPA, and there is no edit + call, so plan that as a batch job. + parameters: + - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [requestid, payerid, processingid, memberid, policies] + properties: + requestid: {type: string, format: uuid} + payerid: {type: string} + processingid: {type: string} + memberid: {type: string} + policies: + type: array + items: + type: object + properties: + productid: {type: string} + productname: {type: string} + responses: + "200": {description: The link is removed.} +components: + securitySchemes: + bearer_auth: + type: apiKey + in: header + name: bearer_auth + description: The ABDM session token, prefixed with `Bearer ` and a space. +security: + - bearer_auth: [] diff --git a/catalogue/openapi/nhcx/v1/nhcx-usecases.yaml b/catalogue/openapi/nhcx/v1/nhcx-usecases.yaml new file mode 100644 index 000000000..477df16b2 --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-usecases.yaml @@ -0,0 +1,881 @@ +openapi: 3.1.1 +info: + title: NHCX use case endpoints + version: abdm-v3 + summary: The ten claim exchanges, each an action endpoint and its callback. + description: > + Every substantive NHCX exchange is an asynchronous pair. The initiator + posts a sealed message to an action endpoint and gets a receipt. The + responder does its work, then posts the outcome to the matching `on_` + endpoint, and the exchange delivers it to the initiator's registered + bridge URL. + + + Every request body on this service is the same one-field object carrying + a JWE. The exchange reads only the protected header, which is why every + operation below shares one request schema: what separates a + preauthorisation from an enhancement is the workflow code in that header, + not the path and not the body. + + + The `on_` paths appear twice in an integration. You POST to them here to + deliver your answer, and the exchange POSTs the same shape to your own + bridge URL to deliver someone else's. The webhooks section describes that + second half. + contact: + name: NHCX integration support + url: https://hcxsbx.abdm.gov.in/#/documents + email: hcx.integration@nha.gov.in + x-abdm-gateway: nhcx + x-abdm-module: usecases + x-abdm-phase: 1 + x-abdm-roles: [provider, payer, tpa, regulator] +x-abdm-sources: + - file: NHCX-site/documents/AWS(Sandbox) NHCX USECASE Postman Collection.zip + role: upstream + status: not-yet-hashed + note: AWS(Sandbox)-NHCX USECASE POSTMAN COLLECTION, 20 requests. + - url: https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications + role: upstream + status: not-yet-fetched + note: > + NHA publishes a Swagger UI per service on the sandbox portal, one each + for coverage eligibility, preauth, claim, communication, payment, + status, task, search, insurance plan and subscription. The portal warns + that for use case payloads its value-set sheets and code snippets are + the authority rather than the Swagger. + - url: https://hcxsbx.abdm.gov.in/#/documents + role: upstream + status: not-yet-hashed + note: Workflow Status Sheets (18 Aug 2026), for the codes named on each operation. +servers: + - url: https://apisbx.abdm.gov.in/hcx + description: Sandbox use case endpoints +tags: + - name: Coverage eligibility + description: Is this policy in force, what does it cover, and what will a package need. + - name: Insurance plan + description: The policy as data, fetched once per policy and cached. + - name: Preauthorisation + description: Approval before treatment, and the cycle of enhancement, resubmission and query around it. + - name: Claim + description: The request for payment at discharge, and its adjudication. + - name: Task + description: Cancel, reprocess and shortfall, told apart by the Task's code. + - name: Communication + description: The payer's channel for alerts, grievances and changes. + - name: Search + description: Claim lookup by a provider, a regulator or a scheme sponsor. + - name: Predetermination + description: What the payer would pay, without committing anyone. + - name: Payment + description: Notices as money moves, and the provider's acknowledgement. + - name: Status + description: The state of a request already triggered. +paths: + /v1/coverageeligibility/check: + post: + operationId: nhcx_coverageeligibility_check + tags: [Coverage eligibility] + summary: "Coverage eligibility: send the request" + description: > + Ask whether a policy is in force, what it covers, and what a package will need. `purpose` decides which of the four questions is being asked: validation, discovery, benefits or auth-requirements. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: none listed. The check sits alongside registration, code 10, and admission, code 11. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/coverageeligibility/on_check: + post: + operationId: nhcx_coverageeligibility_on_check + tags: [Coverage eligibility] + summary: "Coverage eligibility: deliver the answer" + description: > + Answer an eligibility check with a CoverageEligibilityResponse. The payer may instead answer with a forward instruction, asking the exchange to pass the same request to another payer. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: none listed. The check sits alongside registration, code 10, and admission, code 11. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/insuranceplan/request: + post: + operationId: nhcx_insuranceplan_request + tags: [Insurance plan] + summary: "Insurance plan: send the request" + description: > + Ask a payer for the plan behind a policy. The body is a Task with code `poll`, keyed on policy number and provider ID. Sent once per policy the hospital handles, not once per patient. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: none listed. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/insuranceplan/on_request: + post: + operationId: nhcx_insuranceplan_on_request + tags: [Insurance plan] + summary: "Insurance plan: deliver the answer" + description: > + Answer with the insurance plan, scoped to the requesting provider's empanelment. A scheme plan is package-based and can run to 21 MB; a private insurer's is coverage-based. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: none listed. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/preauth/submit: + post: + operationId: nhcx_preauth_submit + tags: [Preauthorisation] + summary: "Preauthorisation: send the request" + description: > + Submit a preauthorisation, a resubmission, an enhancement, or an answer to a query. All four carry the same Claim bundle with `use` set to `preauthorization`; the workflow code in the header is what tells them apart. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: 12 new, 121 resubmission, 13 enhancement, 19 a query answer under PMJAY; the payer answers 20 received, 21 approved, 23 rejected, 24 queried. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/preauth/on_submit: + post: + operationId: nhcx_preauth_on_submit + tags: [Preauthorisation] + summary: "Preauthorisation: deliver the answer" + description: > + Return the adjudicated preauthorisation as a ClaimResponse. Read `outcome` and the adjudication reason together: `complete` alone means approved or rejected. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: 12 new, 121 resubmission, 13 enhancement, 19 a query answer under PMJAY; the payer answers 20 received, 21 approved, 23 rejected, 24 queried. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/claim/submit: + post: + operationId: nhcx_claim_submit + tags: [Claim] + summary: "Claim: send the request" + description: > + Submit the claim at discharge, or a provisional discharge submission, or an answer to a query on a claim. The same Claim resource as the preauthorisation with `use` switched to `claim`. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: 15 the claim, 151 a query answer, 14 a provisional discharge submission; the payer answers 25 received, 26 approved, 27 queried, 28 in process, 29 forwarded, 291 denied. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/claim/on_submit: + post: + operationId: nhcx_claim_on_submit + tags: [Claim] + summary: "Claim: deliver the answer" + description: > + Return the adjudicated claim. Several interim answers may arrive on one correlation ID before the final one; only the final carries `response.complete`. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: 15 the claim, 151 a query answer, 14 a provisional discharge submission; the payer answers 25 received, 26 approved, 27 queried, 28 in process, 29 forwarded, 291 denied. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/task/submit: + post: + operationId: nhcx_task_submit + tags: [Task] + summary: "Task: send the request" + description: > + One endpoint, several jobs, told apart by the Task's code and reason. Cancel a preauthorisation, reprocess a rejected claim, or claim a shortfall on a partly paid one. A supporting document is mandatory on a reprocess. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: PC01 cancel, 36 reprocess or shortfall; the payer answers 251 acknowledged, 252 approved, 253 rejected, 254 queried, PC02 cancellation done. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/task/on_submit: + post: + operationId: nhcx_task_on_submit + tags: [Task] + summary: "Task: deliver the answer" + description: > + Answer a Task with a Task whose output references a ClaimResponse, read by the same parser as any other decision. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: PC01 cancel, 36 reprocess or shortfall; the payer answers 251 acknowledged, 252 approved, 253 rejected, 254 queried, PC02 cancellation done. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/communication/request: + post: + operationId: nhcx_communication_request + tags: [Communication] + summary: "Communication: send the request" + description: > + The payer's asynchronous channel to the provider. Raise a turnaround-time alert, pass on a grievance, announce a wallet or policy change, ask for information outside a formal query, or acknowledge an arbitration request. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: as carried on the payer's request. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/communication/on_request: + post: + operationId: nhcx_communication_on_request + tags: [Communication] + summary: "Communication: deliver the answer" + description: > + Acknowledge or answer a communication. Send the acknowledgement within the 30 second window whether or not the underlying issue is resolved. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: as carried on the payer's request. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/search/submit: + post: + operationId: nhcx_search_submit + tags: [Search] + summary: "Search: send the request" + description: > + Search claim information across payers. A provider may search only its own cases; a regulator or scheme sponsor may search any. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: none listed. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/search/on_submit: + post: + operationId: nhcx_search_on_submit + tags: [Search] + summary: "Search: deliver the answer" + description: > + Answer a search with the matching ClaimResponse resources. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: none listed. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/predetermination/submit: + post: + operationId: nhcx_predetermination_submit + tags: [Predetermination] + summary: "Predetermination: send the request" + description: > + Ask what the payer would pay for a proposed course of treatment, without committing the provider to deliver it and without reserving a benefit. Reuses the Claim bundle with `use` set to `predetermination`. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: none listed. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/predetermination/on_submit: + post: + operationId: nhcx_predetermination_on_submit + tags: [Predetermination] + summary: "Predetermination: deliver the answer" + description: > + Answer with what the payer would approve. Defined by the specification and never observed in a published payload. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: none listed. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/paymentnotice/request: + post: + operationId: nhcx_paymentnotice_request + tags: [Payment] + summary: "Payment: send the request" + description: > + Tell the provider that money has moved against an approved claim. Three notices can arrive for one case as the transfer progresses, and only the last carries the bank reference. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: 30 initiated, 31 processed, 33 settled; 17 for the acknowledgement. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/paymentnotice/on_request: + post: + operationId: nhcx_paymentnotice_on_request + tags: [Payment] + summary: "Payment: deliver the answer" + description: > + Acknowledge a payment notice. The portal's Payment document puts the acknowledgement here; the PMJAY handbook puts it on /v1/task/submit. Confirm which the payer expects. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: 30 initiated, 31 processed, 33 settled; 17 for the acknowledgement. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/status: + post: + operationId: nhcx_status_check + tags: [Status] + summary: "Status: ask where a request has got to" + description: > + Ask the exchange for the state of a request already triggered, so neither side has to infer what happened from silence. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: none listed. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. + /v1/on_status: + post: + operationId: nhcx_status_on_check + tags: [Status] + summary: "Status: deliver the state" + description: > + Deliver the state of a request back to whoever asked for it. + + + The body is one JSON object with a single `payload` field carrying the + JWE. The exchange answers `202 Accepted` with a receipt; the decision + arrives later on the matching callback. + + + Workflow codes: none listed. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JWERequest' + responses: + "202": + description: Accepted and queued for the recipient. This is not the decision. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + "400": + description: The envelope failed validation. Nothing about the sealed bundle shows up here. + "401": + description: The token is missing, malformed or expired. Fetch a new one and retry once. +webhooks: + delivery: + post: + operationId: nhcx_webhook_delivery + summary: The exchange delivers a message to your bridge URL + description: > + The exchange POSTs to your registered `endpoint_url` plus the path of + the exchange concerned, so a preauthorisation decision arrives at + `/v1/preauth/on_submit`. Build one handler and route by + path. + + + Answer within 30 seconds with `202` and the receipt, then process. + Anything slower, including a slow `200`, is read as a failed delivery + and retried up to five times before the correlation ID is retired. + + + Two body shapes arrive. `JWEPayload` carries a sealed bundle. + `ProtocolResponse` carries a refusal, with the `x-hcx-` fields in the + clear and the reason in `x-hcx-error_details`. + + + The exchange signs its calls to you with a JWT in the authorisation + header. No published source gives the public key to verify against, + an address to fetch it from, or the name of the header it arrives in, + so build the check and treat a missing key as a deliberate, logged, + temporary state rather than a silent default. + requestBody: + required: true + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/JWERequest' + - $ref: '#/components/schemas/ProtocolResponse' + responses: + "202": + description: Required. Anything else is treated as a failed delivery. + content: + application/json: + schema: + $ref: '#/components/schemas/Receipt' + error: + post: + operationId: nhcx_webhook_error + summary: The exchange reports a message it could not deliver + description: > + Every participant must host `/v1/error`. The exchange calls it to + report a request that could not be delivered after five attempts. + Without it, a sender never learns that its request died. + + + This is the one path that carries neither of the two usual shapes. It + has no `payload` and no `x-hcx-` fields: what arrives is a plain JSON + report whose field names are not published. Store it whole rather + than parsing it against a fixed schema, and still answer `202`. + requestBody: + required: true + content: + application/json: + schema: + type: object + description: An unpublished report shape. Store it whole. + additionalProperties: true + responses: + "202": + description: Required, even though the body is not a shape you recognise. +components: + securitySchemes: + bearer_auth: + type: apiKey + in: header + name: bearer_auth + description: The ABDM session token, prefixed with `Bearer ` and a space. + schemas: + JWERequest: + type: object + required: [payload] + properties: + type: + type: string + const: JWEPayload + description: Present on a delivery to your bridge URL. Not sent on a call to the gateway. + payload: + type: string + description: > + The message as a JWE in compact serialisation: five base64url + parts joined by dots. The protected header carries the `x-hcx-` + routing fields in the clear; the FHIR bundle is sealed with the + recipient's public key and the exchange cannot read it. + + + Use `alg` `RSA-OAEP-256` with `enc` `A256GCM`. One protocol page + says `RSA-OAEP`; the handbook, the samples and the Postman bodies + all say `-256`. + + + The header fields are `x-hcx-sender_code`, + `x-hcx-recipient_code`, `x-hcx-api_call_id`, `x-hcx-request_id`, + `x-hcx-correlation_id`, `x-hcx-workflow_id`, `x-hcx-timestamp`, + `x-hcx-status` and `x-hcx-ben-abha-id`. + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIi.... + ProtocolResponse: + type: object + description: > + A refusal delivered in the clear, when the recipient could not + decrypt the bundle or the bundle failed validation. + required: [type] + properties: + type: + type: string + const: ProtocolResponse + x-hcx-sender_code: {type: string} + x-hcx-recipient_code: {type: string} + x-hcx-api_call_id: {type: string, format: uuid} + x-hcx-correlation_id: {type: string, format: uuid} + x-hcx-workflow_id: {type: string} + x-hcx-timestamp: {type: string} + x-hcx-status: + type: string + const: response.error + x-hcx-entity-type: {type: string} + x-hcx-error_details: + type: object + properties: + code: {type: string} + message: {type: string} + trace: {type: string} + Receipt: + type: object + description: > + The acknowledgement both the exchange and your own callback return. + It says the message was taken in. It is never the decision. + properties: + timestamp: {type: string} + api_call_id: {type: string, format: uuid} + correlation_id: {type: string, format: uuid} + result: + type: object + properties: + sender_code: {type: string} + recipient_code: {type: string} + entity_type: {type: string, example: preauth} + protocol_status: + type: string + enum: [request.queued, request.dispatched, request.error] + error: + type: object + properties: + code: {type: string} + message: {type: string} + example: + timestamp: 04/09/2026 11:46:35:120 + api_call_id: a1b2c3d4-e5f6-4890-abcd-ef1234567890 + correlation_id: 11223344-5566-4788-99aa-bbccddeeff00 + result: + sender_code: 1000004446@hcx + recipient_code: 1000003538@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" +security: + - bearer_auth: [] diff --git a/site/docs/nhcx/v1/api/index.md b/site/docs/nhcx/v1/api/index.md index 3528f5e27..a415b68ed 100644 --- a/site/docs/nhcx/v1/api/index.md +++ b/site/docs/nhcx/v1/api/index.md @@ -1,13 +1,49 @@ --- -title: NHCX API reference -sidebar_label: API reference -description: What is published for the NHCX gateway today. +title: API references +sidebar_label: All endpoints +sidebar_position: 1 +description: Every operation published for this gateway, module by module. verification: unverified -source: NHCX__NHCX-Website_DocumentDetails.md +source: the published OpenAPI specifications +generated: true --- -# NHCX API reference +# API references -No specification is published here for NHCX, and no endpoint on this gateway has been documented here yet. +Every endpoint below is generated from the specification that declares it. Each one has its own page with the headers, the body and a request you can send. + +This page lists every module, including any that the role you have chosen does not use. The sidebar shows only yours. + +## NHCX biometric authentication + +6 endpoints across 2 use cases: Fingerprint and iris, Face. Each endpoint has its own page in the sidebar. + +[Read the whole specification](/reference/nhcx-biometric) + +## NHCX session token + +1 endpoint across 1 use case: Sessions. Each endpoint has its own page in the sidebar. + +[Read the whole specification](/reference/nhcx-gateway) + +## NHCX participant service + +12 endpoints across 3 use cases: Onboarding, Discovery, Policy linking. Each endpoint has its own page in the sidebar. + +[Read the whole specification](/reference/nhcx-participant) + +## NHCX use case endpoints + +22 endpoints across 11 use cases: Coverage eligibility, Insurance plan, Preauthorisation, Claim, Task, Communication, Search, Predetermination, Payment, Status, Endpoints. Each endpoint has its own page in the sidebar. + +[Read the whole specification](/reference/nhcx-usecases) + +## Callbacks with no documented trigger + +2 callbacks are declared at module level with no call named against them. Which call produces each one is not documented, so this page does not say. + +| Module | Method | Arrives at | What it carries | +| --- | --- | --- | --- | +| NHCX use case endpoints | POST | [`delivery`](/docs/nhcx/v1/api/nhcx-usecases/endpoints/nhcx-webhook-delivery) | The exchange delivers a message to your bridge URL | +| NHCX use case endpoints | POST | [`error`](/docs/nhcx/v1/api/nhcx-usecases/endpoints/nhcx-webhook-error) | The exchange reports a message it could not deliver | -[The NHCX introduction](/docs/nhcx/v1) lists what the documentation set covers, so you can see what exists and where it lives. diff --git a/site/docs/nhcx/v1/api/nhcx-biometric/_category_.json b/site/docs/nhcx/v1/api/nhcx-biometric/_category_.json new file mode 100644 index 000000000..b0cc3412a --- /dev/null +++ b/site/docs/nhcx/v1/api/nhcx-biometric/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "NHCX biometric authentication", + "position": 2 +} diff --git a/site/docs/nhcx/v1/api/nhcx-gateway/_category_.json b/site/docs/nhcx/v1/api/nhcx-gateway/_category_.json new file mode 100644 index 000000000..da8c9bb52 --- /dev/null +++ b/site/docs/nhcx/v1/api/nhcx-gateway/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "NHCX session token", + "position": 3 +} diff --git a/site/docs/nhcx/v1/api/nhcx-participant/_category_.json b/site/docs/nhcx/v1/api/nhcx-participant/_category_.json new file mode 100644 index 000000000..cefa78f5f --- /dev/null +++ b/site/docs/nhcx/v1/api/nhcx-participant/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "NHCX participant service", + "position": 4 +} diff --git a/site/docs/nhcx/v1/api/nhcx-usecases/_category_.json b/site/docs/nhcx/v1/api/nhcx-usecases/_category_.json new file mode 100644 index 000000000..e82ff249e --- /dev/null +++ b/site/docs/nhcx/v1/api/nhcx-usecases/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "NHCX use case endpoints", + "position": 5 +} diff --git a/site/docs/nhcx/v1/building-a-payer/README.md b/site/docs/nhcx/v1/building-a-payer/README.md new file mode 100644 index 000000000..c12863a6d --- /dev/null +++ b/site/docs/nhcx/v1/building-a-payer/README.md @@ -0,0 +1,6 @@ +# Building a payer + +The insurer, scheme or TPA side: the queues, the callbacks to host, the answers +to build, the screens each desk works from, and the sandbox exit checklist. + +Order pages with `sidebar_position` in the frontmatter. diff --git a/site/docs/nhcx/v1/building-a-payer/_category_.json b/site/docs/nhcx/v1/building-a-payer/_category_.json new file mode 100644 index 000000000..7351372b5 --- /dev/null +++ b/site/docs/nhcx/v1/building-a-payer/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Building a payer", + "position": 6 +} diff --git a/site/docs/nhcx/v1/building-a-payer/adjudicating-claims.md b/site/docs/nhcx/v1/building-a-payer/adjudicating-claims.md new file mode 100644 index 000000000..1e5476e07 --- /dev/null +++ b/site/docs/nhcx/v1/building-a-payer/adjudicating-claims.md @@ -0,0 +1,85 @@ +--- +title: Adjudicating claims +sidebar_label: Adjudicating claims +description: The claim queue against the approved preauthorisation, the denial codes, appeals, and answering a regulator's search. +verification: unverified +source: NHCX Integration Handbook §9, §10; Claim (NHA); NHCX-PMJAY-HMIS Integration Guide §4, §8.5; NHCX FAQs v1.2 §22, §23; Standard Error Codes, Claim; NHCX Requests and Responses, Reprocess and Search sheets, denial codes; access-control page +sidebar_position: 5 +--- + +# Adjudicating claims + +The claim is where money is decided. The payer receives the finalised bill and the full document set, and checks them against the approved preauthorisation and the discharge evidence. It then issues a decision that, once final, cannot be reopened except through the appeal Task. + +## In short + +- The claim is opened against the approved preauthorisation, with the difference highlighted. +- Two interim states are not decisions: in process, and forwarded. +- A rejection closes the claim number. Nothing further arrives against it except a Task. +- Appeals arrive as a Task on workflow 36 and are answered with a `ClaimResponse` inside it. + +## What the adjudicator sees + +The claim queue, opened against the approved preauthorisation, side by side: what was approved, what is now claimed, and the difference highlighted. The discharge type and stage, the dates, the discharge summary as a record, the bill, the post-operative evidence. The four evaluation dimensions the handbook names, as a checklist: within cover and limits, clinically appropriate, documents complete and consistent, amounts within package rates and financial rules. + +Actions: approve, approve at a reduced amount with a note per item, query, reject with a denial code. And two interim states that are not decisions: in process, and forwarded to another entity. + +## What the system hosts + +``` +/v1/claim/submit answer on /v1/claim/on_submit +``` + +Workflow 15 is the claim; 151 is an answer to your query. Under PMJAY there is no separate discharge submission; the claim asserts the discharge and carries its details. On the general network a provisional discharge submission (14) may arrive first, answered with 261, 262 or 263. + +Acknowledge receipt with 25 and `response.partial`. A claim may receive several interim answers before the final one; each is `response.partial` on the same correlation ID, and only the final carries `response.complete`. + +## Validate before queueing + +- An approved preauthorisation exists for the case number; no claim already raised against it. +- Every item, implant and investigation on the claim was on the preauthorisation, was not rejected there, and is not claimed at a higher quantity. +- Registration, admission, surgery and discharge dates present and well-formed; a discharge stage present, from the allowed set. +- Amount within the preauthorisation's approved amount and the wallet. +- Under PMJAY, the discharge biometric token. For a LAMA or DAMA before surgery, only `LM100`, with a quantity equal to the stay. For a death, a death date. For a newborn, the parent's card and the child's documents. + +## What goes in the answer + +The same `ClaimResponse` as for preauthorisation with `use = claim`. + +| Decision | `outcome` | `adjudication.reason` | Workflow | +| :---- | :---- | :---- | :---- | +| Approved | `complete` | `approved` | 26 | +| Approved, reduced | `partial` | `approved` | 26, with `processNote` | +| Queried | `partial` | `queried` | 27 | +| In process | `partial` | | 28 | +| Forwarded | `partial` | | 29 | +| Rejected | `complete` | `cancelled` | 291 | + +A rejection closes the claim number. Nothing further arrives against it except a Task. Use the scheme's denial codes so the provider's appeal screen can show a reason. Less than 24 hours of hospitalisation, package reserved for public hospitals, incomplete documents after multiple queries, bed category misrepresented. Then outside scope of cover, fraudulent, package does not match diagnosis, hospital not empanelled for the specialty, and the rest of the `ClaimError` list. + +Each final approval carries the totals accounts will pay from: submitted, eligible, benefit, tax deducted, incentive, patient-liable. Those figures reappear on the payment notice; keep them consistent. + +## The arithmetic on every final approval + +Accounts pays from these figures and the provider reconciles against them, so they have to agree with the payment notice that follows. + +| Category | What it is | +| :---- | :---- | +| `submitted` | What the hospital asked for, per item and in total | +| `eligible` | What is within cover before deductions | +| `copay` | The patient's share. Zero under PMJAY, which is fully cashless | +| `benefit` | What you will pay. This is the number the provider shows as approved | + +Then at claim level, the tax deducted, any incentive, and the patient-liable amount where the scheme has them. The payment notice's `TDS` and `Payment` lines should sum to the approved amount here; a provider that finds they do not will raise a query or a shortfall. + +## Appeals + +Rejections and shortfalls come back as a `Task` on `/v1/task/submit`, workflow 36, code `reprocess`, reason `claimrejected` or `partialpayment`, with a document attached and, for a shortfall, the amount. Route both to the Claim Review Committee. + +Acknowledge with 37, then answer on `/v1/task/on_submit` with a `Task` whose `status` is `completed` and whose output references a `ClaimResponse` inside the same bundle. The `ClaimResponse` is read by the provider's ordinary parser, so build it with the same outcome and reason fields: 252 approved, 253 rejected, 254 queried. + +Under PMJAY the payer enforces four rules. One appeal per claim. A shortfall claim only after payment 33 has been sent and acknowledged. The amount never above the difference. The Committee's decision final, with no shortfall claim allowed after it. A cancellation Task, code `cancel`, is answered with PC02 and refused once payment has begun. + +## Search + +Regulators, and the scheme sponsor, can search claims across payers with a `Task` of code `search` on `/v1/search/submit`. Answer on `/v1/search/on_submit` with the matching `ClaimResponse`s. A provider may only search its own cases; a regulator may search any. diff --git a/site/docs/nhcx/v1/building-a-payer/adjudicating-preauthorisation.md b/site/docs/nhcx/v1/building-a-payer/adjudicating-preauthorisation.md new file mode 100644 index 000000000..defeb2524 --- /dev/null +++ b/site/docs/nhcx/v1/building-a-payer/adjudicating-preauthorisation.md @@ -0,0 +1,100 @@ +--- +title: Adjudicating preauthorisation +sidebar_label: Adjudicating preauthorisation +description: "The preauthorisation queue: what the adjudicator sees, what to validate on arrival, and how a decision becomes a ClaimResponse." +verification: unverified +source: NHCX Integration Handbook §8; Preauthorization (NHA); NHCX-PMJAY-HMIS Integration Guide §3, §8.4; Standard Error Codes, Preauth; NHCX Requests and Responses, adjudication and denial codes, form codes; NHCX Dummy Payer Implementation +sidebar_position: 4 +--- + +# Adjudicating preauthorisation + +The preauthorisation queue is where a payer's clinical judgement meets the exchange. The system's job is to get a case in front of the right doctor with everything they need, and to turn their decision into a `ClaimResponse`. It also enforces the sequencing rules that keep one case from becoming several. + +## In short + +- Order the queue by turnaround time remaining, because TAT-based auto-approval pays for cases nobody reached. +- Acknowledge receipt at once with code 20 so the provider knows the case is queued. +- Validate on arrival and refuse with a protocol response rather than spending a doctor's time. +- Two plan rules let a case skip the queue. Log which one fired. +- Set `outcome` and the adjudication reason together: the provider reads them as a pair. + +## What the adjudicator sees + +A queue, ordered by turnaround-time remaining, because a scheme with TAT-based auto-approval pays for every case the doctor does not reach in time. Opening a case shows: + +- The beneficiary, the policy, the wallet balance now and after this request. +- Diagnosis, packages with rates and add-ons, care team, dates. +- Every document, structured ones rendered as records rather than opened as files, and the STG questionnaire answers beside the package they belong to. +- The plan's flags for each package: auto-approvable, enhanceable, reserved, standalone. +- History on the case: earlier preauthorisations, enhancements, queries and answers. + +Four actions: approve, approve at a reduced amount with a note, query, reject with a reason from the scheme's denial list. Item by item, then a total. + +## What the system hosts + +``` +/v1/preauth/submit answer on /v1/preauth/on_submit +``` + +The workflow code says which kind of request it is: 12 new, 121 resubmission, 13 enhancement, 19 an answer to your query. Acknowledge receipt at once with code 20 and `response.partial`, so the provider knows it is in the queue. + +## Validate before queueing + +The reference payer's preauthorisation errors are the checklist. Run them on arrival and refuse with a protocol response rather than wasting a doctor's time: + +- Amount above zero and within the wallet balance. +- Specialty code and display, package code and display, exactly as the plan has them; quantity at least one; net above zero. +- Registration and admission dates present and well-formed. +- Sequencing. No case already in progress for this number. An enhancement or resubmission only where an approved record exists. A new preauthorisation refused where an approved one exists. No preauthorisation once a claim is raised, and nothing at all on a cancelled case. +- One active preauthorisation per beneficiary across all hospitals; tell the provider which hospital holds it. +- Every STG questionnaire the plan demands answered; a biometric token or the consent questionnaire present. +- Under PMJAY, `LM100` never on a preauthorisation; investigations mandatory for private hospitals; newborn cases with date of birth, gender and documents, and within six years. + +## Deciding automatically + +Two rules let a case skip the queue, and both come from the plan: + +- **Auto-approve** when this is the first preauthorisation for the case and every package carries `ApprovalNotRequired`. +- **TAT approve** when the policy allows it and no doctor has acted within the configured window. + +Log which rule fired. The provider sees an approval; the audit sees why. + +## What goes in the answer + +A collection bundle with the `ClaimResponse`, the `Patient`, the `Coverage` and the `Organization`s. `use = preauthorization`. The provider reads `outcome` and the adjudication reason together, so set both deliberately. + +| Decision | `outcome` | `adjudication.reason` | Workflow | Also set | +| :---- | :---- | :---- | :---- | :---- | +| Approved | `complete` | `approved` | 21 | `preAuthRef`, every item's four amounts equal | +| Approved, reduced | `partial` | `approved` | 21 | `processNote` explaining the reduction, linked from the item by `noteNumber` | +| Queried | `partial` | `queried` | 24 | Query text; totals zero; `eligpercent` zero | +| Rejected | `complete` | `cancelled` | 23 | `disposition` and the denial code | +| Enhancement approved or denied | as above | | 22 or 231 | | + +Per item, four adjudication lines: `submitted`, `eligible`, `copay` (zero under PMJAY), `benefit`. Totals at the claim level with the same categories, plus tax, incentive and patient-liable amounts where the scheme has them. + +The `preAuthRef` you issue is what the provider will quote on the claim. Make it unique and durable. + +## What the provider reads from your answer + +Three fields on the response decide what the hospital's screen shows, and getting them wrong misstates the decision rather than failing loudly. + +| What you set | What the provider does with it | +| :---- | :---- | +| `outcome` plus the adjudication reason | Reads them as a pair. `complete` alone means approved or rejected, so the reason is the difference | +| The `benefit` adjudication, per item and at claim level | Shows it as the approved amount. The `submitted` category alongside is what was asked for, and showing that as the decision is the classic provider-side error | +| `processNote`, linked from the item by `noteNumber` | Shows it verbatim as the reduction reason | +| `preAuthRef` | Quotes it on the claim. Make it unique and durable | + +Note what the published PMJAY responses do **not** carry: no `ClaimResponse.request` pointing back at the `Claim`, no `ClaimResponse.type`, and no `preAuthRef` at all. The case number in `identifier[0].value` is what actually travels forward. If your system issues a real `preAuthRef`, you are ahead of the samples, and you should say so to integrators rather than assume they read it. + +## Writing a query + +Under PMJAY the query travels in `item.adjudication.reason.coding.display` as a pipe-delimited audit trail, `USER~datetime~type~comment~trust`, with multiple entries separated by `|`. The provider shows the comment. Keep it specific: name the document or the clarification, and the package it concerns. A vague query costs a full round trip and a day of TAT. + +Under PMJAY the provider answers on the same endpoint with code 19. On the general network a payer may instead raise a Communication with reason `additionalinfo`; the provider answers on the communication endpoint. Do not use both for the same question. + +## Approval letters + +The value set includes form codes for letters: `preauthapproval`, `preauthdenial`, and later `claimapproval`, `claimdenial`, `dischargeapproval`. Where the scheme issues them, attach the letter as a `DocumentReference` referenced from the response. diff --git a/site/docs/nhcx/v1/building-a-payer/checklist.md b/site/docs/nhcx/v1/building-a-payer/checklist.md new file mode 100644 index 000000000..614f0a3a7 --- /dev/null +++ b/site/docs/nhcx/v1/building-a-payer/checklist.md @@ -0,0 +1,97 @@ +--- +title: Payer sandbox checklist +sidebar_label: Payer checklist +description: The fifteen use cases a payer demonstrates to leave the sandbox, the four validations on every response, and where payers go wrong. +verification: unverified +source: NHCX Payer Side Use Cases, Sandbox Exit Process; NHCX-PMJAY-HMIS Test Cases; Sample FHIR bundles; Standard Error Codes; Guidelines for Participant Onboarding, payer onboarding +sidebar_position: 8 +--- + +# Payer sandbox checklist +What a payer has to demonstrate to leave the sandbox, the validations the certification checks on every response, and how to test without a real provider. + +## In short + +- NHA's payer exit process names fifteen use cases, plus `/v1/error` and, for a scheme, biometric validation. +- Four validations are checked on every answering use case. +- There is no dummy provider on the sandbox: build the calling half yourself and point it at your own code. +- The commonest payer mistakes are a missing adjudication reason and an unversioned rate change. + +## The sandbox exit list + +NHA's payer exit process names fifteen use cases. + +| | Use case | Call | Host | +| :---- | :---- | :---- | :---- | +| 1 | Link ABHA with policy | `/participant/link/abha/policy` | | +| 2 | Get policy | `/participant/get/policies` | | +| 3 | De-link ABHA from policy | `/participant/delink/abha/policy` | | +| 4 | Get participant list | `/fetch/participants/list` | | +| 5 | Get public key | `/fetch/certs` | | +| 6 | Get auth token | `/get/session` | | +| 7 | Respond to coverage eligibility | `/v1/coverageeligibility/on_check` | `/v1/coverageeligibility/check` | +| 8 | Respond to insurance plan request | `/v1/insuranceplan/on_request` | `/v1/insuranceplan/request` | +| 9 | Respond to preauthorisation | `/v1/preauth/on_submit` | `/v1/preauth/submit` | +| 10 | Raise communication request | `/v1/communication/request` | `/v1/communication/on_request` | +| 11 | Respond to claim | `/v1/claim/on_submit` | `/v1/claim/submit` | +| 12 | Respond to search | `/v1/search/on_submit` | `/v1/search/submit` | +| 13 | Send payment notice | `/v1/paymentnotice/request` | `/v1/paymentnotice/on_request` | +| 14 | Respond to task request | `/v1/task/on_submit` | `/v1/task/submit` | +| 15 | Get status | `/v1/status` | `/v1/on_status` | + +Plus `/v1/error` and, where the payer is a scheme, the biometric token validation. + +## The four validations on every response + +The checklist repeats them for every answering use case, so the certification will check them on every one: + +1. Payload validates against the NRCeS profiles. +2. `api_call_id` and `correlation_id` are different values. +3. `correlation_id` matches the request being answered. +4. `recipient_code` equals the request's `sender_code`. + +And each answer is prepared one of two ways: a sealed bundle when the request was processed, or a protocol response when it could not be opened or failed validation. + +## Testing without a provider + +There is no dummy provider on the sandbox. The practical route is to build the provider's calling half from Getting Started and the provider section, point it at your own participant code, and drive your queues from it. The 22 sample bundles on the portal give you real PMJAY-shaped requests to feed in: every eligibility purpose, a preauthorisation and its query answer, an enhancement, a cancellation, a claim and its query answer. + +Scenarios to cover, from the test matrix and the FAQ: + +- Eligibility for each purpose; a beneficiary with an exhausted family wallet; a hospital not authorised for the policy. +- Preauthorisation: auto-approve on flags, TAT approve, manual approve, reduce with a note, query and receive the answer, reject with a denial code; enhancement approved and denied; resubmission; cancel before and after payment. +- Claim: approve, reduce, query, in process, forward, reject; each discharge type; `LM100` before surgery. +- Appeal after rejection; shortfall after partial payment, refused before 33; the Committee's answer inside a Task. +- Payment 30, 31, 33 with UTR and TDS; the acknowledgement; a return payment. +- Communication for each reason; the acknowledgement. +- Unspecified, cyclic with per-visit biometrics, newborn and twins, implants within maximums. +- Duplicate requests on one correlation ID; a request while another is in progress; a malformed bundle answered with a protocol response. + +## Where payers go wrong + +- Answering with `outcome = complete` and no adjudication reason, so the provider cannot tell approval from rejection. +- Reusing the request's `api_call_id` as the response's. +- Sending business refusals in the envelope, where the exchange logs them, instead of inside the sealed response. +- Rates changed in the plan master without a version bump, so every provider's next claim looks tampered. +- Sending 33 before the bank has confirmed, which opens the shortfall window early. +- TAT auto-approval firing because the queue was not ordered by time remaining. + +## Exchanges this documentation does not cover + +The workflow sheet defines several families that no NHA document describes beyond their codes. They exist on the network, a participant may receive one, and none is covered here: + +- **Final bill.** 45 submitted, 46 approved, 47 queried, 181 query answered, 491 denied. A settlement stage between claim and payment in schemes that use it. +- **Reimbursement claims.** R15, R151, R26, R27, R28, R291, R122, R252 to R254. The member-reimbursement lifecycle, mirroring the cashless one. +- **Discharge correction.** DC01, DC02. Amending a discharge already submitted. +- **Preauthorisation arbitration.** 41, 42. An appeal against a preauthorisation decision, distinct from claim arbitration. +- **Wallet upgrade.** 34, 35. **Fraud alert.** 38, 39. **Grievance.** G11, G12, G13. Each has its own code pair, although the handbook routes wallet and grievance through the communication channel instead. +- **Claim document query.** 161, and 16 for a preauthorisation resubmission, both in the value set without further description. + +Treat an incoming code from these families as one to log and escalate rather than one to ignore. + +## Before going live + +- Enrolment through the NHA or IRDAI portal with the payer or TPA role, the IRDAI registry ID without leading zeros, and the production certificate and callback address. +- Every policy linked with the correct processor. +- The plan master versioned and published for every empanelled hospital. +- FHIR bundles validated by NRCeS; internal demo; HTC demo. diff --git a/site/docs/nhcx/v1/building-a-payer/eligibility-response.md b/site/docs/nhcx/v1/building-a-payer/eligibility-response.md new file mode 100644 index 000000000..7f21d4464 --- /dev/null +++ b/site/docs/nhcx/v1/building-a-payer/eligibility-response.md @@ -0,0 +1,91 @@ +--- +title: Eligibility response +sidebar_label: Eligibility response +description: "The one exchange to answer without a human: four purposes, four answers, and what to validate before looking at coverage." +verification: unverified +source: Coverage Eligibility (NHA); Insurance Plan Implementation Guide, CoverageEligibility; NHCX Integration Handbook §7; NHCX-PMJAY-HMIS Integration Guide §8.3; Standard Error Codes, Coverage and Payer; NHCX Payer Side Use Cases, Sandbox Exit Process +sidebar_position: 3 +--- + +# Eligibility response + +The eligibility check is the one exchange a payer should answer without a human. It is asked at every registration and before every submission, and a provider that waits on it is a front desk that waits. + +## In short + +- The one exchange a payer should answer without a human. +- Four purposes, four answers: validation, discovery, benefits, and auth-requirements. +- Auth-requirements saves the most rework downstream, because it drives the provider's document checklist. +- Business refusals go inside the sealed response; protocol refusals go in the envelope. + +## What the system hosts + +``` +/v1/coverageeligibility/check answer on /v1/coverageeligibility/on_check +``` + +Read `CoverageEligibilityRequest.purpose` and answer accordingly. Four purposes, four answers. + +| Purpose | The question | What to return | +| :---- | :---- | :---- | +| `validation` | Is this coverage in force, and what is left? | `inforce`, and one benefit entry per wallet with allowed (balance) and used money | +| `discovery` | What coverages does this beneficiary have with you? | Every active coverage, so the provider can pick a policy code | +| `benefits` | For these packages, what is covered? | Per item: excluded or not, benefit type, allowed money, including stratification amounts | +| `auth-requirements` | For these packages, is preauthorisation required and what must come with it? | Per item: `authorizationRequired`, and `authorizationSupporting` listing every mandatory document and questionnaire by code | + +Auth-requirements is the one that saves the most rework downstream. The `MAND` codes it returns are what the provider's document checklist is built from; the more precise they are, the fewer queries the adjudicator raises later. + +## What to validate first + +The reference payer refuses, with a named error, before it looks at coverage: + +- An invalid purpose, or an invalid identifier. +- Multiple beneficiary records for one identifier. +- No hospital configuration, or a hospital not authorised for the policy. +- Items or stratifications it has no master data for. +- A quantity below one, an unknown payer ID, or a duplicate reference ID. Each becomes a protocol response with `response.error`, and each is cheaper to catch here than at preauthorisation. + +Under PMJAY, also validate the biometric user token in the header. A request with neither a valid token nor the matching authentication-consent questionnaire response is not evidence of presence, and the payer's own error codes distinguish the two cases. + +## What the four answers actually carry + +The published samples show how much the four purposes differ. Only one of them carries money. + +| Purpose | `insurance[].item[]` | Carries money | Carries `authorizationRequired` | +| :---- | :---- | :---- | :---- | +| `validation` | One item per wallet | Yes: `allowedMoney` and `usedMoney` | Yes | +| `discovery` | Every active coverage | No | No | +| `benefits` | One item per package asked about | Per package | Per package | +| `auth-requirements` | One item per package asked about | Per package | Yes, with `authorizationSupporting` | + +The two money fields are a subtraction the provider has to make. A published sample carries 463,730 allowed against 36,270 used on a 500,000 family wallet, and the plan's `generalCost` reconciles with it exactly. Send both figures; do not send only the balance. + +**One warning about the auth-requirements answer.** It is specified to return the mandatory documents, and the one published sample does not. That sample carries no benefit detail and no supporting-information requirements, and is indistinguishable from the plain benefits answer. A provider building its checklist from your answer alone will show an empty checklist. Populate `authorizationSupporting` properly, with the `MAND` codes and a display, and you save the adjudicator a query per case. + +## What goes in the answer + +A collection bundle: the `CoverageEligibilityResponse`, the `Patient` as the payer knows them, the `Coverage`, and the `Organization`s. + +| Element | Set it to | +| :---- | :---- | +| `status` | `active` | +| `purpose` | Echo the request's | +| `outcome` | `complete` | +| `disposition` | One sentence a desk can read: "Policy is currently in-force" | +| `request` | Reference back to the request | +| `insurance.coverage` | The coverage found | +| `insurance.inforce` | `true` or `false` | +| `insurance.item[]` | Per wallet for validation; per package for benefits and auth-requirements | +| `item.benefit[].allowedMoney`, `usedMoney` | Balance and consumption | +| `item.authorizationRequired` | Whether preauthorisation is needed | +| `item.authorizationSupporting[]` | The mandatory document and questionnaire codes, with a display and a text saying whether pre or post | + +Business refusals, "not a covered member", "policy expired", "coverage insufficient", go inside the sealed response as a `PAYR-10xx` reason, not in the envelope; the exchange never sees them. Protocol refusals go in the envelope. + +## The forward instruction + +A payer that receives a request for a coverage it does not hold may answer with a forward instruction, asking the exchange to deliver the same request to another payer. Build it only if you will actually use it; most payers answer "not a covered member" instead. + +## What to log + +Every eligibility answer is a promise the provider will rely on when it registers the patient. Keep the request, the answer, the wallet figures at that moment and the plan version they came from, so that when a claim arrives against them, the adjudicator sees what was said. diff --git a/site/docs/nhcx/v1/building-a-payer/index.md b/site/docs/nhcx/v1/building-a-payer/index.md new file mode 100644 index 000000000..643d7e252 --- /dev/null +++ b/site/docs/nhcx/v1/building-a-payer/index.md @@ -0,0 +1,117 @@ +--- +title: Building a payer +sidebar_label: Building a payer +description: "The insurer, TPA or scheme side: the queues each role works, what the system hosts, and the rules every answer obeys." +verification: unverified +source: NHCX Payer Side Use Cases, Sandbox Exit Process; NHCX-PMJAY-HMIS Integration Guide §3, §4; Insurance Plan Implementation Guide, payer responsibilities; NHCX Dummy Payer Implementation; NHCX Integration Handbook §8 to §12 +sidebar_position: 1 +--- + +# Building a payer +A payer system is the insurer's, TPA's or scheme's side of the exchange. Where a provider mostly calls and waits, a payer mostly hosts and answers: it receives eligibility checks, plan requests, preauthorisations and claims, decides, and sends the decision back. It initiates only three things of its own: policy links, payment notices, and communications. + +This section assumes the base framework from Getting Started: token, participant record with the payer role, own key, and a callback endpoint that opens messages. A payer's "callback" endpoints are the `check`, `request` and `submit` sides that providers call. + +## In short + +- Where a provider mostly calls and waits, a payer mostly hosts and answers. +- It initiates only three things of its own: policy links, payment notices, and communications. +- Four validations are checked on every response the payer sends, and the certification tests them. +- Keep the policy master, the versioned plan master, every case as a state machine, and every raw message. + +## What the payer's staff see + +Under PMJAY the decisions are taken by named roles: the Preauthorisation Processing Doctor at admission, the Claim Processing Doctor at settlement, the Claim Review Committee on appeal, and accounts on payment. A payer UI is a set of work queues for those roles. + +| Screen | Who | What they do | Exchange behind it | +| :---- | :---- | :---- | :---- | +| Policy admin | Operations | Link and de-link beneficiaries to products; name the processor | Link and de-link ABHA | +| Plan configuration | Scheme team | Maintain specialties, packages, rates, add-ons, flags, documents, questionnaires | Insurance plan response | +| Eligibility | System | Answer automatically from policy and wallet data | Coverage eligibility response | +| Preauth queue | PPD | Open a case, see items and documents, approve, reduce, query or reject | Preauthorisation response | +| Claim queue | CPD | Same, against the approved preauthorisation and the discharge evidence | Claim response | +| Query composer | PPD, CPD | Write the query the provider will see | Queried response | +| Appeals | CRC | Reprocess and shortfall requests | Task response | +| Payment run | Accounts | Initiate, process and settle; record UTR and deductions | Payment notice | +| Communications | Any | TAT alerts, grievances, wallet and policy changes | Communication request | + +```mermaid +flowchart LR + classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 + classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 + E[Eligibility auto-answer] --> P[Preauth queue] + P --> Q[Query composer] + Q --> P + P --> C[Claim queue] + C --> Q + C --> M[Payment run] + C -. appeal .-> A[Appeals] + A --> M + class E,P,Q,C,M,A payer +``` + +## What the system hosts and calls + +From the Overview's catalogue, a payer hosts the C-series callbacks and calls the shared A-series plus three of its own. + +Hosts, as the receiving half of each exchange: + +``` +/v1/coverageeligibility/check answer on /v1/coverageeligibility/on_check +/v1/insuranceplan/request answer on /v1/insuranceplan/on_request +/v1/preauth/submit answer on /v1/preauth/on_submit +/v1/claim/submit answer on /v1/claim/on_submit +/v1/task/submit answer on /v1/task/on_submit +/v1/search/submit answer on /v1/search/on_submit +/v1/communication/on_request the provider's acknowledgement +/v1/paymentnotice/on_request the provider's acknowledgement +/v1/on_status, /v1/error +``` + +Calls of its own: + +``` +/participant/link/abha/policy, /participant/delink/abha/policy +/v1/paymentnotice/request +/v1/communication/request +``` + +## The rules for every answer + +The payer exit checklist states four validations on every response a payer sends, and the sandbox certification checks them: + +1. The payload validates against the NRCeS profiles. +2. `api_call_id` and `correlation_id` on the response are different values. +3. `correlation_id` on the response matches the request being answered. The checklist says the request's `api_call_id`; the protocol page says the request's `correlation_id`. Confirm which the gateway pairs on before the demo. +4. `recipient_code` on the response equals the `sender_code` of the request. + +And the status word: `response.complete` for a final answer, `response.partial` for an interim one or a query, `response.error` with a protocol response when the request could not be opened or failed validation. The exit checklist names the type field on a good answer `JWEPayloadResponse`; the sandbox collection uses `JWEPayload`. Accept both when reading, and confirm which to send. + +## Build it in this order + +A payer's work is mostly hosting, and the hosting has a dependency order of its own. + +| Order | Build | Because | +| :---- | :---- | :---- | +| 1 | The base framework, and the four validations on every response | Nothing you send is accepted without them, and certification checks them on every use case | +| 2 | Policy linking | Until a policy is linked, no provider can find the beneficiary and nothing else is reachable | +| 3 | The eligibility answer, by rule | Asked at every registration. A provider waiting on it is a front desk waiting | +| 4 | The insurance plan response | It drives every provider screen, so its correctness decides how many malformed requests you receive | +| 5 | The preauthorisation queue and its response | The first exchange needing a human | +| 6 | The claim queue and its response | Reuses the same `ClaimResponse` shape | +| 7 | Payment notices, all three | The provider cannot close a case without 33 | +| 8 | Communication, and the Task answer for appeals | Needed for sandbox exit | + +Getting 4 right early pays for itself. Most of what a provider sends wrong, it sends wrong because your plan did not tell it otherwise. + +## What the system must keep + +- The policy master: beneficiaries, products, wallets, family limits, and which participant processes each policy. +- The plan master, versioned, because a rate change with no version bump looks like tampering from the provider's side. +- Every case as a state machine driven by what the payer itself sent: received, queried, approved, rejected, claimed, in process, settled, appealed. +- Every raw message received and sent, with its correlation ID, because arbitration is settled on the record. +- Adjudication detail per item: submitted, eligible, co-pay, benefit, and the reason, because that is what a `ClaimResponse` is made of. + +The chapters that follow take each queue in turn, chapter 07 turns them into the screens each desk works from, and chapter 08 is the checklist you have to demonstrate to leave the sandbox. diff --git a/site/docs/nhcx/v1/building-a-payer/payment-notice-and-communication.md b/site/docs/nhcx/v1/building-a-payer/payment-notice-and-communication.md new file mode 100644 index 000000000..c6be38030 --- /dev/null +++ b/site/docs/nhcx/v1/building-a-payer/payment-notice-and-communication.md @@ -0,0 +1,95 @@ +--- +title: Payment notice and communication +sidebar_label: Payment notice and communication +description: "The two exchanges a payer starts: three payment notices as money moves, and the communication channel with its six reasons." +verification: unverified +source: NHCX Integration Handbook §11, §12; Payment (NHA); NHCX Payer Side Use Cases, Sandbox Exit Process; NHCX Notification Integration; NHCX Requests and Responses, payment type and task output values; Workflow Status Sheets +sidebar_position: 6 +--- + +# Payment notice and communication + +The two exchanges a payer starts. Payment tells the provider money has moved; communication tells the provider something has changed or is wanted. + +## In short + +- Payment tells the provider money has moved; communication tells it something has changed or is wanted. +- Three notices per claim as the money moves, each with its own correlation ID. Send 33 only on bank confirmation. +- The provider will check that net plus deductions equals the approved amount. +- The acknowledgement confirms receipt, not agreement. + +## Payment notices + +### What accounts do + +A payment run screen, built from approved claims: select the claims, initiate the transfer, and record the bank's confirmation and UTR as it comes back. Each stage becomes a notice. Deductions, TDS and any scheme adjustments are entered per claim, and the net is what the bank receives. + +### What the system calls + +``` +POST /v1/paymentnotice/request workflows 30, 31, 33 +receive /v1/paymentnotice/on_request the provider's acknowledgement, workflow 17 +``` + +Three notices per claim as the money moves: 30 initiated, 31 processed by the bank, 33 settled with the UTR. Each is a separate message with its own correlation ID. Send 33 only when the bank has confirmed; under PMJAY it is the gate that lets the provider raise a shortfall claim. + +### What goes in the bundle + +A collection bundle: a `Task` with code `deliver` and an input referencing the notice, a `PaymentNotice`, a `PaymentReconciliation`, and the two `Organization`s. + +| Resource | Key elements | +| :---- | :---- | +| `Task` | `status = requested`, `intent = order`, `code = deliver`, `requester` the payer, `owner` the provider, `input[0].valueReference` the PaymentNotice | +| `PaymentNotice` | Claim number as identifier of type `CLN`, `recipient` the provider, `amount` the net, `paymentStatus` `paid` or `cleared`, `payment` referencing the reconciliation | +| `PaymentReconciliation` | Same claim number, `paymentDate`, `paymentAmount` net, `paymentIdentifier` of type `UTR` carrying the bank reference, `detail[]` with one line per money type: `TDS`, `Payment`, and any of `approvedamount`, `claimedamount`, `servicetax`, `advance`, `recovered`, `penality` | + +The provider will check that net plus deductions equals the approved amount. Make it so. + +### The acknowledgement + +Arrives as a `Task` with `status = completed`, code `status`, and an output whose value is `paymentack`, with the claim number as a second output. It confirms receipt, not agreement. Record it against the claim and consider the payment lifecycle closed once the acknowledgement of 33 is in. + +A return payment, where money has to come back, has its own codes: RP1 intimation, RP2 acknowledged, RP3 failed. + +## Communication requests + +### What the user does + +A composer, usually opened from a case: choose the reason, write the message, set a priority, send. Some are generated by the system rather than a person. A TAT alert when a provider has not answered a query within the window, a wallet update when a beneficiary's balance changes, a policy change when the plan master is versioned. + +### What the system calls + +``` +POST /v1/communication/request +receive /v1/communication/on_request the provider's acknowledgement +``` + +Reasons, on `Task.reasonCode`: `tatquery`, `grievance`, `walletupdate`, `policychange`, `additionalinfo`, `claimArbitration`. The last is sent automatically when an appeal Task is received, so the provider knows it is in the Committee's queue. + +On the general network, `additionalinfo` is how a payer asks for documents outside a formal query. Under PMJAY, document queries go through the queried `ClaimResponse` instead, and this channel is for the other five. + +### What goes in the bundle + +A collection bundle of three parts: + +- A `Task` with code `poll`, `intent = proposal`, `reasonCode` set, and an input of type `include` referencing a `Communication`. +- The `Communication`, with the case number as identifier, `status = completed`, a `category` (reminder, notification, instruction, questionnaire), a `priority` (routine, urgent, asap, stat), a `topic` (progress-update for anything about a live case), and the payload. +- The two `Organization`s, payer first. + +The acknowledgement comes back as the same shape with the provider `Organization` first and the same correlation ID. It means received, not resolved; track resolution in the case, not in the exchange. + +## What a provider does with each notice + +Sending all three matters more than it looks, because the provider's case state and its shortfall window both hang off them. + +| Workflow | What you have done | What the provider does | +| :---- | :---- | :---- | +| 30 | Initiated the transfer | Shows the case as payment started. Does not close it | +| 31 | The bank has processed it | Updates the same panel. Still does not close it | +| 33 | The bank has confirmed settlement, and you send the UTR | Marks the case settled, reconciles the UTR against the bank statement, and acknowledges | + +Send 33 only when the bank has actually confirmed. Under PMJAY the acknowledgement of 33 is the gate that opens the provider's shortfall window, so sending it early opens that window against a payment that has not landed. + +## Notifying the beneficiary + +Where a beneficiary's app has subscribed, the exchange itself pushes a human-readable message on each event: "Preauthorisation approved for Rs. 50,000, valid until…". The payer does nothing extra; its normal responses feed it. The payer's own notifications carry workflow N01. diff --git a/site/docs/nhcx/v1/building-a-payer/policies-and-plans.md b/site/docs/nhcx/v1/building-a-payer/policies-and-plans.md new file mode 100644 index 000000000..f325412bf --- /dev/null +++ b/site/docs/nhcx/v1/building-a-payer/policies-and-plans.md @@ -0,0 +1,75 @@ +--- +title: Policies and plans +sidebar_label: Policies and plans +description: Linking beneficiaries to policies so providers can find them, and publishing the plan that drives every provider screen. +verification: unverified +source: Policy Linking and De-Linking Process; Insurance Plan Implementation Guide; NHCX Integration Handbook §6; Standard Error Codes, Insurance Plan; NHCX Payer Side Use Cases, Sandbox Exit Process +sidebar_position: 2 +--- + +# Policies and plans + +Before a payer can answer a single claim question, two things have to be true on the network: the beneficiary has to be findable, and the policy has to be readable as data. The first is linking. The second is the insurance plan. + +## In short + +- Two things must be true before a payer can answer a claim question: the beneficiary is findable, and the policy is readable as data. +- The processor is the decision that matters. Get it wrong and every provider sends the case to the wrong place. +- A change of TPA is a batch de-link and re-link. There is no edit call. +- The plan response is scoped to the requesting provider, which is a validation as much as a filter. +- Every plan change bumps a version, and a `policychange` communication tells providers to refresh. + +## Linking beneficiaries + +### What the user does + +A policy-admin screen. When a policy is written or renewed, the operator records the holder's ABHA number, mobile and member ID against the products on the policy, and names who will process claims for it. In most payers this should be automatic from the policy system, with the screen kept for corrections. + +The processor is the decision that matters. An insurer that adjudicates its own claims names itself. One that uses a TPA names the TPA's participant code. Get it wrong and every provider will send the case to the wrong place. + +### What the system calls + +``` +POST /participant/link/abha/policy +POST /participant/delink/abha/policy +``` + +Bodies and rules are in Getting Started. Two operational points. Only the participants named as payer or processor on the link can change it, and the exchange checks the caller's token against them. So the linking job must run under the same credentials that created the participant. And a change of TPA is a batch: de-link every affected policy with the old processor, link again with the new; there is no edit. + +## Publishing the plan + +### What the scheme team does + +A plan-configuration screen that maintains, per policy and per empanelled hospital: + +- The specialties, and the packages under each with their rate. +- The add-ons allowed, meaning implants, bed-category stratification, high-end medicines and investigations, with their maximums. +- The flags that govern each package. +- The mandatory documents at policy and package level, and the questionnaires. Every change bumps a version. + +The flags are the scheme's rules made machine-readable, and the provider's screen is built from them. The set the handbook lists is government-reserved, auto-approval, enhancement allowed, scheduled TAT approval, quantity allowed and day care. Then implant applicable and maximum implants, stratification allowed and maximum, standalone, parent procedure, unspecified, and cyclic with maximum cycles. Then LAMA/DAMA procedure and its stages, procedure type (surgical, medical, conservative), length of stay, and GST. + +### What the system hosts + +``` +/v1/insuranceplan/request answer on /v1/insuranceplan/on_request +``` + +The request is a `Task` with code `poll` and inputs `policyNumber` and `providerId`. The answer is scoped to that provider: only the specialties and packages its empanelment allows. That scoping is a validation as much as a filter. The payer's own error codes reject a policy not allowed for the hospital, a renewal code that does not match, a policy with no specialty configured, and an HFR ID it has no enrolment for. + +Answer with a collection bundle: one `InsurancePlan`, the `Organization`s, and one `Questionnaire` per requirement. The reference sample carries 2,215 questionnaires and is 21 MB; that is what a real PMJAY plan looks like. Build the bundle from the plan master, never by hand. + +### The two shapes + +The Insurance Plan guide gives two ways to structure benefits, and a payer picks one per plan. + +**Package-based**, the PMJAY shape: `plan → specificCost → category → benefit → cost → qualifiers`. Specialty is the category, package is the benefit, the rate is the cost, and add-ons are qualifiers on the cost. Claim conditions, exclusions and document requirements hang off the plan as extensions. + +**Coverage-based**, the private-insurer shape: `coverage → benefit → limit`. Coverage types such as in-patient, benefits such as ICU charges and room rent, and a limit per benefit with its own conditions and required documents. + +Element tables for both are in the FHIR Reference. + +### Keeping it honest + +- Refresh is the provider's job, but a `policychange` communication from the payer is what tells providers to do it early. Send one whenever a rate or package changes. +- Concurrency: a second plan request while the first is still being answered is refused by the reference payer with a wait-and-retry error. Design the request handler to be idempotent per correlation ID. diff --git a/site/docs/nhcx/v1/building-a-payer/ui-guide.md b/site/docs/nhcx/v1/building-a-payer/ui-guide.md new file mode 100644 index 000000000..e3247eac4 --- /dev/null +++ b/site/docs/nhcx/v1/building-a-payer/ui-guide.md @@ -0,0 +1,182 @@ +--- +title: Payer UI guide +sidebar_label: Payer UI guide +description: "The payer screens queue by queue: who works each one, what they decide, and how that decision becomes a message." +verification: unverified +source: NHCX-PMJAY-HMIS Integration Guide §3, §4, roles and adjudication process; NHCX Integration Handbook §6.6, §8, §9, §10, §11, §12; NHCX Payer Side Use Cases, Sandbox Exit Process; Insurance Plan Implementation Guide, payer responsibilities; Standard Error Codes +sidebar_position: 7 +--- + +# Payer UI guide + +A payer system is operated from queues. Cases arrive, sit until a person or a rule acts on them, and leave with a decision. This chapter describes those queues and the screens around them, who works each one, what they see, what they decide, and how the decision becomes a message. It follows the same order as the rest of the section. + +Two rules run through every screen. + +**A decision is not made until it is sent.** The adjudicator's action on screen produces a response that goes to the exchange. The case state changes when the receipt comes back, not when the button is clicked. The screen shows the difference. + +**The payer never types what the provider sent.** Amounts submitted, items, documents, dates and biometric evidence are shown as received and are not editable. What the payer adds is the decision, the eligible and approved amounts, the reason, and the note. + +## In short + +- A payer system is operated from queues: cases arrive, wait for a person or a rule, and leave with a decision. +- A decision is not made until it is sent, and the screen shows the difference. +- The payer never types what the provider sent. What it adds is the decision, the amounts, the reason and the note. +- Ten flows, from policy admin through to the case audit trail. +- The audit trail is the screen arbitration is settled on. + +## Who works which queue + +```mermaid +flowchart LR + IN[Inbound messages] --> E[Eligibility: answered by rule] + IN --> PQ[Preauth queue] + IN --> CQ[Claim queue] + IN --> AQ[Appeals queue] + PQ --> PPD[Preauthorisation doctor] + CQ --> CPD[Claim doctor] + AQ --> CRC[Review committee] + CPD --> PAY[Payment run: accounts] + CRC --> PAY + OPS[Operations] --> POL[Policy admin] + OPS --> PLAN[Plan configuration] + ANY[Any desk] --> COM[Communications] +``` + +| Screen | Role | Input | Output message | +| :---- | :---- | :---- | :---- | +| Policy admin | Operations | Holder identifiers, products, processor | Link, de-link | +| Plan configuration | Scheme team | Specialties, packages, rates, flags, documents, questionnaires, version | Insurance plan response | +| Eligibility monitor | System, watched by support | None | Eligibility response | +| Preauth queue | Preauthorisation doctor | Decision per item, note, query text | Preauthorisation response | +| Claim queue | Claim doctor | Decision per item, note, query text | Claim response | +| Appeals | Review committee | Decision | Task response | +| Payment run | Accounts | Claims to pay, deductions, bank confirmation | Payment notices | +| Communications | Any desk | Reason, message, priority | Communication request | +| Case audit | Anyone | None | None | + +## Flow 1: policy admin + +**Screen.** A search by member, ABHA or mobile, showing the holder's linked products and who processes each. Link and de-link actions, and a bulk tool for moving every policy from one processor to another. + +**What the UI enforces.** The processor field is a pick from the payer's own participants, never typed. A de-link names only products already on the link. A change of processor is a batch with a preview of how many policies it will touch. Because only the two participants on a link may change it, the screen must run under the credentials that created the participant, and should say so when a change is refused. + +**Data flow.** Policy system writes a policy; a job links it on the exchange; the screen shows the exchange's record, not the policy system's, so a link that failed is visible. + +## Flow 2: plan configuration + +**Screen.** A tree: policy, specialty, package. Per package: the rate, the add-ons allowed with their maximums, the flags, the documents required at preauthorisation and at claim, and the questionnaires attached. A version stamp on the plan with a publish action that bumps it. A per-hospital view showing what an empanelled hospital will receive. + +**What the UI enforces.** A rate change without publishing is shown as pending, because an unpublished rate is exactly what makes a provider's next claim look tampered with. Every flag is a control, not a text field. The per-hospital preview is what the plan response will actually contain, generated from the same master. + +```mermaid +sequenceDiagram + participant T as Scheme team + participant S as Plan screen + participant M as Plan master + participant B as Backend + participant X as NHCX + participant H as Hospital + T->>S: change a rate, add a flag + S->>M: save as pending + T->>S: publish + S->>M: new version + B->>X: communication, reason policychange + X->>H: hospitals refresh their plan + H->>X: plan request + X->>B: request for this hospital + B->>M: build plan for this hospital's empanelment + B->>X: sealed plan response, current version +``` + +## Flow 3: eligibility + +No screen for the decision; it is answered by rule from the policy master and the wallet. What operations needs is a monitor: volume by hospital, refusals by reason, and the requests that failed validation with the payer's own error code. That is how a hospital sending a malformed request gets told which field. The monitor should also show the requests answered with "not a covered member" by hospital, because a spike there is a linking problem on the payer's side, not the hospital's. + +## Flow 4: the preauthorisation queue + +**Screen.** A queue ordered by turnaround time remaining, with cases that a rule will auto-approve marked so the doctor can skip them. Opening a case shows, in the payer's order: beneficiary and wallet before and after, diagnosis, and packages with rate, add-ons and the plan's flags. Then care team and dates, documents rendered as records with questionnaires beside the package they belong to, and the case history. + +**The decision panel.** Per item: approve, approve at a lower amount with a note, query, reject with a reason picked from the scheme's preauthorisation denial list. Then a claim-level decision that the system derives from the items and the doctor confirms. + +**What the UI enforces.** A reduction needs a note. A rejection needs a reason code. A query needs text and names the item. The eligible and approved amounts are computed from the items and shown, not typed. Under PMJAY the biometric or consent evidence is shown as a badge on the case before anything else. + +```mermaid +stateDiagram-v2 + [*] --> Received: request validated + Received --> AutoApproved: rule fires + Received --> InQueue: needs a doctor + InQueue --> Deciding: opened + Deciding --> Approved: approve + Deciding --> Reduced: approve at lower amount + Deciding --> Queried: query sent + Deciding --> Rejected: reject with reason + Queried --> Answered: provider replies + Answered --> InQueue + InQueue --> TATApproved: window lapsed +``` + +The doctor sees InQueue cases ordered by how long until TATApproved fires. Get that ordering wrong and the window lapses on cases nobody has looked at. + +## Flow 5: writing a query + +**Screen.** A composer opened from an item or from the whole case. Under PMJAY the text becomes the pipe-delimited audit trail the provider will see, so the composer shows the comment field prominently and fills user, time and type itself. A picker of the documents the plan lists, so the doctor asks for a named document rather than "more documents". + +**What the UI enforces.** A query cannot be sent empty. On the general network the query goes out as a communication with reason additional information; under PMJAY as a queried response on the case. The composer knows which and the doctor does not have to. + +## Flow 6: the claim queue + +**Screen.** The claim opened side by side with the approved preauthorisation, differences highlighted: items added, quantities changed, amounts above approval. Discharge type and stage, dates, discharge summary as a record, bill, post-operative evidence. The four checks the handbook names shown as a checklist the doctor ticks: within cover and limits, clinically appropriate, documents complete and consistent, within package rates. + +**The decision panel.** As for preauthorisation, with two interim actions that are not decisions: mark in process, forward to another entity. And the claim denial list rather than the preauthorisation one. + +**What the UI enforces.** Nothing above the approved amount is approvable without a reduction note. A rejection shows the doctor that it closes the case permanently and that the provider's only route is appeal. Under PMJAY a LAMA or DAMA claim before surgery is shown with the stay line only and the approved packages struck through. + +## Flow 7: appeals + +**Screen.** A committee queue of reprocess and shortfall requests, each opened against the original claim, its decision, its payment, and the document the provider attached. Decision: uphold, revise with amounts, reject. A note that the decision is final and closes the case to further appeal. + +**What the UI enforces.** A shortfall request that arrived before the settlement notice was acknowledged is shown as premature and is not adjudicated. A second appeal on a case already decided is shown as refused. The decision goes out as a Task carrying a claim response, and the screen shows it as sent only on receipt. + +## Flow 8: the payment run + +**Screen.** Approved claims not yet paid, selectable into a run. Per claim: approved amount, deductions itemised (tax deducted at source and any scheme adjustment), net. Actions: initiate, then record the bank's confirmation and UTR. Each action becomes a notice to the provider; the screen shows the three notices per claim and whether the provider acknowledged each. + +**What the UI enforces.** Net plus deductions equals the approved amount, or the run does not proceed. The settlement notice is sent only when the bank confirmation is entered, because under PMJAY that notice opens the provider's shortfall window. A failed transfer is recorded as a rejected notice, not left silent. + +```mermaid +sequenceDiagram + participant A as Accounts + participant S as Payment screen + participant B as Backend + participant X as NHCX + participant H as Hospital + A->>S: select approved claims, enter deductions + S->>S: net + deductions = approved? + A->>S: initiate + B->>X: payment notice, initiated + X->>H: notice + H->>X: acknowledgement + X->>B: acknowledged + A->>S: bank confirms, enter UTR + B->>X: payment notice, settled, with UTR + X->>H: notice + H->>X: acknowledgement + B-->>S: claim closed +``` + +## Flow 9: communications + +**Screen.** A composer with a reason picker: information request, turnaround alert, grievance, wallet change, policy change, arbitration acknowledgement. Message, priority, and the case it concerns. Most of these should be generated by the system rather than a person. A turnaround alert when a query has gone unanswered past the window, a wallet change when a balance moves, a policy change on every plan publish, an arbitration acknowledgement when an appeal arrives. + +**What the UI enforces.** A message about a case carries the case number. Priority is a pick, and only a fraud or safety message may be marked as the highest. The acknowledgement from the provider is shown against each message; it means received, and the screen says so. + +## Flow 10: the case audit trail + +**Screen.** Every case, every message in and out, in order, with the correlation ID, the workflow code, the status word, the raw message and its decrypted content, and who acted on the payer's side. Read only. Exportable. + +This is the screen arbitration is settled on, and every other screen is a view over the same record. Build it early. + +## Errors the adjudicator should see + +A request refused by validation never reaches the queue. It should still reach a support view with the payer's own error code and the hospital that sent it, so that a hospital repeatedly sending a wrong package code can be told. The queues themselves show only cases that passed validation; the doctor's time is for decisions, not for malformed messages. diff --git a/site/docs/nhcx/v1/building-a-provider/README.md b/site/docs/nhcx/v1/building-a-provider/README.md new file mode 100644 index 000000000..32d9f35fd --- /dev/null +++ b/site/docs/nhcx/v1/building-a-provider/README.md @@ -0,0 +1,7 @@ +# Building a provider + +The hospital side of the exchange, screen by screen and call by call. Generic +flow first (02 to 06), PMJAY differences in one page (07), then the UI guide, +the sandbox exit checklist, and the record of a live PMJAY sandbox run. + +Order pages with `sidebar_position` in the frontmatter. diff --git a/site/docs/nhcx/v1/building-a-provider/_category_.json b/site/docs/nhcx/v1/building-a-provider/_category_.json new file mode 100644 index 000000000..c0a591e06 --- /dev/null +++ b/site/docs/nhcx/v1/building-a-provider/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Building a provider", + "position": 5 +} diff --git a/site/docs/nhcx/v1/building-a-provider/checklist.md b/site/docs/nhcx/v1/building-a-provider/checklist.md new file mode 100644 index 000000000..5d14b06c3 --- /dev/null +++ b/site/docs/nhcx/v1/building-a-provider/checklist.md @@ -0,0 +1,101 @@ +--- +title: Provider sandbox checklist +sidebar_label: Provider checklist +description: The thirteen use cases a provider demonstrates to leave the sandbox, what to test first, and where the first week goes wrong. +verification: unverified +source: NHCX Provider Side Use Cases, Sandbox Exit Process; NHCX-PMJAY-HMIS Test Cases; Common Mistakes while implementing through NHCX; NHCX Dummy Payer Implementation; NHCX Guide for Providers; PMJAY Hospital Migration to HMIS via NHCX +sidebar_position: 9 +--- + +# Provider sandbox checklist +What a provider has to demonstrate to leave the sandbox, what to test before asking, and where the first week's failures come from. + +## In short + +- NHA's provider exit process names thirteen use cases, each demonstrated against the dummy payer. +- `/v1/error` is not on the list but is required, and carries neither of the two usual body shapes. +- Test the unhappy paths: duplicate callbacks, unknown correlation IDs, protocol responses, token expiry mid-flow. +- Several workflow-code families exist that no NHA document describes. Log and escalate them rather than ignoring them. + +## The sandbox exit list + +NHA's provider exit process names thirteen use cases. Each must be shown working against the dummy payer in the internal demo, then the HTC demo. + +| | Use case | Call | Host | +| :---- | :---- | :---- | :---- | +| 1 | Get participant list | `/fetch/participants/list` | | +| 2 | Get policy | `/participant/get/policies` | | +| 3 | Get public key | `/fetch/certs` | | +| 4 | Get auth token | `/get/session` | | +| 5 | Check coverage eligibility | `/v1/coverageeligibility/check` | `/v1/coverageeligibility/on_check` | +| 6 | Request insurance plan | `/v1/insuranceplan/request` | `/v1/insuranceplan/on_request` | +| 7 | Preauthorisation submission | `/v1/preauth/submit` | `/v1/preauth/on_submit` | +| 8 | Respond to communication request | `/v1/communication/on_request` | `/v1/communication/request` | +| 9 | Claim submission | `/v1/claim/submit` | `/v1/claim/on_submit` | +| 10 | Claim search | `/v1/search/submit` | `/v1/search/on_submit` | +| 11 | Acknowledge payment notice | `/v1/paymentnotice/on_request` | `/v1/paymentnotice/request` | +| 12 | Reprocess or cancel | `/v1/task/submit` | `/v1/task/on_submit` | +| 13 | Get status | `/v1/status` | `/v1/on_status` | + +Every callback must accept both a `JWEPayload` and a `ProtocolResponse`, and answer with the 202 receipt within 30 seconds. `/v1/error` is not on the list but is required. It is the one path that carries neither of those two shapes: it takes a plain JSON report of an undeliverable request, and must still be answered `202`. + +## Scenarios to test before the demo + +For any payer: + +- Registration; a policy not in force; a limit exhausted. +- Preauthorisation: approve, reduce with a note, query via communication and the answer, reject; enhancement; resubmission; cancel. +- Provisional discharge submission approved, rejected and queried; final claim: approve, reduce, query, in process, forwarded, reject. +- Reprocess after rejection and after a reduced approval; the Task answer parsed as a ClaimResponse. +- Payment 30, 31, 33 and the acknowledgement; a communication of each reason. +- A callback that arrives twice; a callback with an unknown correlation ID; a protocol response. +- Token expiry mid-flow; certificate rotation on the payer side. + +For PMJAY, from the test matrix and the FAQ, in addition: + +- Biometric registration in each of the three modes; the consent fallback; token refresh and expiry. +- Wallet update; registration cancelled. +- Preauthorisation with an implant, with a stratification, with an STG questionnaire; auto-approval on flags; a query answered on the preauthorisation endpoint. +- Discharge in each of the four modes, and the amount calculation for each; `LM100` before surgery. +- Shortfall after partial payment, refused before 33; the Committee path. +- Unspecified procedure; cyclic procedure across several visits; a newborn on the parent's card; twins. + +Under PMJAY, add biometric authentication in all three modes and structured health-information types to the exit list, and expect the PMJAY team demo as an extra step. + +The dummy payer's `process/request` hook drives approve, reject and query on demand; `paymentNotice/init` drives a payment notice. + +## Where the first week goes wrong + +Roughly in the order the portal's own support list has them. Two entries below are reworded from experience rather than quoted, so treat the portal's list as the authority if the two differ: + +1. Wrong status word on a leg of the message. +2. No `/v1/error` endpoint. +3. Callback answering with something other than 202 and the receipt. +4. Envelope headers missing or malformed. +5. Registry ID inside the bundle not matching the participant record. +6. `Accept: application/json` missing. +7. Sending to `payerid` instead of `processingid`. +8. Reusing a correlation ID after an error. +9. Retrying a `401` with the same token. +10. Package code or display not matching the plan, character for character. + +## Exchanges this documentation does not cover + +The workflow sheet defines several families that no NHA document describes beyond their codes. They exist on the network, a participant may receive one, and none is covered here: + +- **Final bill.** 45 submitted, 46 approved, 47 queried, 181 query answered, 491 denied. A settlement stage between claim and payment in schemes that use it. +- **Reimbursement claims.** R15, R151, R26, R27, R28, R291, R122, R252 to R254. The member-reimbursement lifecycle, mirroring the cashless one. +- **Discharge correction.** DC01, DC02. Amending a discharge already submitted. +- **Preauthorisation arbitration.** 41, 42. An appeal against a preauthorisation decision, distinct from claim arbitration. +- **Wallet upgrade.** 34, 35. **Fraud alert.** 38, 39. **Grievance.** G11, G12, G13. Each has its own code pair, although the handbook routes wallet and grievance through the communication channel instead. +- **Claim document query.** 161, and 16 for a preauthorisation resubmission, both in the value set without further description. + +Treat an incoming code from these families as one to log and escalate rather than one to ignore. + +## Before going live + +- FHIR bundles emailed for NRCeS validation and passed. +- Internal demo with NHA, then HTC demo. +- Production participant created through the passcode flow; certificate and callback URL registered; own certificate fetched back and checked. +- Under PMJAY, the HEM-to-participant mapping ticket raised, and staff briefed that in-flight TMS cases finish in TMS; see chapter 07. +- A pilot on a few real cases before switching the whole hospital. diff --git a/site/docs/nhcx/v1/building-a-provider/discharge-and-claim.md b/site/docs/nhcx/v1/building-a-provider/discharge-and-claim.md new file mode 100644 index 000000000..d48063dd7 --- /dev/null +++ b/site/docs/nhcx/v1/building-a-provider/discharge-and-claim.md @@ -0,0 +1,87 @@ +--- +title: Discharge and claim +sidebar_label: Discharge and claim +description: The provisional discharge submission and the final claim, the four dates they carry, and what to do after a decision. +verification: unverified +source: NHCX Integration Handbook §9, §10; Claim (NHA); Workflow Status Sheets; NHCX Requests and Responses, Reprocess sheet and value sets; Standard Error Codes, Claim +sidebar_position: 5 +--- + +# Discharge and claim + +On the general network the claim is two submissions. A provisional one goes before the patient leaves, so the payer can object while corrections are still cheap. The final one goes after discharge, with the finalised bill, and is the one adjudicated for settlement. Both are the same `Claim` resource with `use = claim`, told apart by workflow code. + +## In short + +- On the general network the claim is two submissions: a provisional one before the patient leaves, then the final one. +- Both are the same `Claim` resource with `use = claim`, told apart by workflow code. +- Supporting-info dates grow from two to four, plus the discharge status, and two forms of those dates exist. +- The claim amount may not exceed the preauthorisation's approved amount. +- Adjudication closes the decision; settlement on code 33 closes the money. + +## What the user does + +**Discharge.** The user records the discharge type, from the NRCeS set: to home, to mortuary, left against medical advice, discharged against medical advice. Discharge date, and surgery date where there was one. The documents available at this point are attached and the provisional submission goes. + +**Final claim.** After the payer's answer to the provisional submission, the finance section: hospital bill number and date, the bill itself, the amount claimed. Post-operative evidence and anything the payer flagged on the provisional review are attached. The claim amount may not exceed the preauthorisation's approved amount; enforce it before submit. + +## What the system calls + +``` +POST /v1/claim/submit workflow 15, the final claim +callback /v1/claim/on_submit +``` + +The provisional discharge submission carries workflow 14 and the same `Claim` bundle. The workflow sheet defines the code and the handbook describes the stage, but neither names the endpoint it travels on; `/v1/claim/submit` is the natural home, and the sample bundles do not include one. Confirm with the payer before building the provisional step. + +Same recipient, same reference as the preauthorisation, a new correlation ID each time. The handbook's advice is to build the claim from the preauthorisation bundle. Same diagnosis and procedures unless treatment deviated, estimated amounts replaced with the bill, the full document set added, and the `preAuthRef` from the approval carried in. + +## What goes in the bundle + +The same `Claim` as the preauthorisation with `use = claim`. That single field is the difference the payer keys on. What changes in practice: + +- Supporting-info dates grow from two to four, plus the discharge status: + +| Field | Category | Code | +| :---- | :---- | :---- | +| Registration date | `OTH` | `EDT` | +| Admission date | `ADMD`, or `ONS` | `ADDD` | +| Surgery date | `SURD`, or `ONS` | `ADDD`, or `PSP` | +| Discharge date | `DSCHD`, or `ONS` | `ADDD`, or `DSDE` | +| Discharge status | `DIS` | `DTH`, `DTM`, `LAMA` or `DAMA` | +| Death date, if `DTM` | `ONS` | `DTM` | + +**Two forms exist for those three dates and they are not interchangeable.** The payer's own error codes describe the `ONS` form with distinct codes per date. Every one of the twenty-two published sample bundles uses the other: category `ADMD`, `SURD` or `DSCHD`, all three carrying the code `ADDD`, so the category is what tells them apart and the code is noise. Send what the samples send, keep the `ONS` form behind a switch, and settle it with your payer before certification. The Codes and Value Sets chapter sets out both. + +- The discharge summary as a document under category `HDS`. +- The bill under category `MB`, and the remaining mandatory documents the plan lists for claim rather than preauthorisation. + +## Reading the answers + +The provisional submission is answered with 261 approved, 262 rejected or 263 queried. A rejection here means fix and resend before the final claim; nothing is closed. + +The final claim uses the same decision table as preauthorisation, with two additions. The payer may send several interim answers on the same correlation ID before a final one: `28` in process, `29` forwarded, each with `response.partial`. Keep listening until `response.complete`. And a rejection, `291` with reason `cancelled`, closes the claim permanently; nothing further can be submitted against that claim number except a Task. + +The claim is only closed once payment code 33 arrives with a UTR. Adjudication closes the decision; settlement closes the money. + +## What the payer checks on a claim + +On top of the preauthorisation checks, a claim is refused for these. + +| Check | Why it exists | +| :---- | :---- | +| An approved preauthorisation exists for the case number | `ERR-PYR-CLM-007` under PMJAY, where the claim goes out under the pre-authorisation's number rather than a number of its own | +| No claim already raised against it | One case, one claim | +| Every item was on the preauthorisation, was not rejected there, and is not claimed at a higher quantity | The claim cannot grow past what was approved | +| The discharge status and the discharge date are present | They are what tell the payer the episode ended, and when. The gateway checks for them before the payer sees the bundle | +| The amount is within the approved amount and the wallet | Enforce it before enabling submit | +| Under PMJAY, the discharge biometric token or the discharge consent questionnaire | `PAYR-1363` names the missing form | + +## After a decision + +| Situation | What the user does | What the system sends | +| :---- | :---- | :---- | +| Query | Attaches what was asked, replies from the inbox | Communication response, or claim bundle with workflow 151 where the payer takes it there | +| Rejected or reduced | Appeals, with a document | Task, code `reprocess`, workflow 36 | + +The Task names the case by claim number and carries a reason: `claimrejected` for a rejection, `partialpayment` for a shortfall, and the value set also allows `erroneousclaim`. The payer's answer comes on `/v1/task/on_submit` as a Task wrapping a `ClaimResponse`, read with the same parser as any other: 252 approved, 253 rejected, 254 queried. Map the payer's denial reasons, `ClaimError-1` onward, into the appeal screen so the user sees why before deciding whether to appeal. diff --git a/site/docs/nhcx/v1/building-a-provider/index.md b/site/docs/nhcx/v1/building-a-provider/index.md new file mode 100644 index 000000000..a3cae1d45 --- /dev/null +++ b/site/docs/nhcx/v1/building-a-provider/index.md @@ -0,0 +1,126 @@ +--- +title: Building a provider +sidebar_label: Building a provider +description: "The hospital's side of the exchange: the screens, the calls behind each one, and what a provider integration has to keep." +verification: unverified +source: NHCX Integration Handbook, Chapters I to III and §5; NHCX APIs to be called based on scenario; NHCX Provider Side Use Cases, Sandbox Exit Process +sidebar_position: 1 +--- + +# Building a provider +A provider system is the hospital's side of the exchange. It takes a patient from the front desk to a settled claim without anyone leaving the HMIS. It does that by making a fixed set of calls to the exchange and hosting a fixed set of callbacks for the payer's answers. + +This section assumes the base framework from Getting Started is working: you have a token, a participant record, your own key, and a callback endpoint that opens messages. Everything here is what goes on top. + +Chapters 02 to 06 describe the flow as NHCX defines it for any payer. PMJAY runs the same endpoints with different rules around them; those rules are collected in chapter 07 so the generic flow stays readable and the scheme's additions are in one place. Chapter 08 turns all of it into screens, for whoever is designing the hospital's interface rather than its integration. Chapter 09 is the checklist you have to demonstrate to leave the sandbox. + +## In short + +- A provider system takes a patient from the front desk to a settled claim without leaving the HMIS. +- A handful of screens map one to one onto exchange calls, which decides where each API is called from. +- It is as much a data model as an API client: persist every correlation ID, every raw callback, and the plan version used. +- Two rulebooks shape what you may send: the insurance plan, then the eligibility response. + +## What the hospital sees + +The user-facing shape is a handful of screens that map one-to-one onto exchange calls. The mapping is worth fixing early, because it decides where each API is called from. + +| Screen | What the user does | Exchange call behind it | +| :---- | :---- | :---- | +| Patient search | Finds the beneficiary by ABHA, member ID or mobile; picks the payer | Participant list, policy lookup | +| Registration | Confirms cover and sees the remaining limit | Coverage eligibility, purpose validation | +| Treatment plan | Picks the service or package, sees what is covered and what documents are required | Insurance plan (cached), eligibility with purpose benefits and auth-requirements | +| Preauthorisation | Fills clinical and financial sections, attaches documents, submits | Preauthorisation submit | +| Enhancement | Adds procedures or days against an approved case | Preauthorisation submit, enhancement code | +| Query inbox | Reads a payer request for more, attaches what was asked, replies | Communication request and response | +| Discharge | Records discharge and sends a provisional claim before the patient leaves | Claim submit, discharge code | +| Claim | Confirms the final bill, submits | Claim submit | +| Reprocess | Appeals a rejection or a reduced approval | Task submit | +| Payments | Sees notices, UTR and deductions; acknowledges | Payment notice callback, acknowledgement | +| Case status | One line per case with its current state | Driven by callbacks and status check | + +```mermaid +flowchart LR + classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 + classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 + S[Patient search] --> R[Registration] + R --> T[Treatment plan] + T --> P[Preauthorisation] + P --> Q[Query inbox] + Q --> P + P --> E[Enhancement] + E --> P + P --> D[Discharge] + D --> C[Claim] + C --> Q + C --> M[Payments] + C -. rejected or short .-> X[Reprocess] + class S,R,T,P,Q,E,D,C,M,X provider +``` + +## What the system calls + +From the Overview's use-case catalogue, a provider calls the B-series and the shared A-series, and hosts the callbacks for each. In sequence for one admission: + +1. `/fetch/participants/list` and `/participant/get/policies`, to find the payer and the policy. +2. `/v1/insuranceplan/request`, once per policy, refreshed on a schedule. +3. `/v1/coverageeligibility/check`, at registration and again before each submission. +4. `/v1/preauth/submit`, for the first request and every follow-up on it. +5. `/v1/claim/submit`, for the provisional discharge submission, the final claim, and query answers. +6. `/v1/task/submit`, to cancel a preauthorisation or appeal a claim. +7. `/v1/status`, whenever a case has gone quiet. + +And hosts `on_check`, `on_request`, `on_submit` for each of those, plus `/v1/communication/request`, `/v1/paymentnotice/request`, `/v1/on_status` and `/v1/error`. + +## What the system must keep + +A provider integration is as much a data model as an API client. Persist, per case: + +- The payer's participant code, the processor code, member ID, product and policy number from the lookups. +- Every correlation ID sent, with the workflow code and what it was for, so callbacks can be matched. +- Every raw callback as received, before it is interpreted. +- The case state, derived from callbacks. The handbook's mapping is a good starting point: approved, partially approved, pending on a query, rejected, cancelled, and then settled once payment code 33 arrives. +- The insurance plan, versioned, with the version used on each submission. + +## Build it in this order + +The exchanges depend on each other, and building them out of order means testing against answers you cannot yet get. + +| Order | Build | Because | +| :---- | :---- | :---- | +| 1 | The base framework from Getting Started | Nothing below works without a token, a key, a participant record and a callback that answers | +| 2 | Participant list and policy lookup | They produce the processor code every later message is addressed to | +| 3 | Coverage eligibility, purpose validation | The cheapest exchange to get right, and the one that proves the whole round trip | +| 4 | Insurance plan, cached | The treatment screen is built from it, and preauthorisation validation depends on it | +| 5 | Preauthorisation, then its query answer | The first bundle with clinical content, and the one payers scrutinise hardest | +| 6 | Claim, then its query answer | Reuses the preauthorisation bundle with one field changed | +| 7 | Payment notice and acknowledgement | Closes the case, and under PMJAY gates the shortfall | +| 8 | Task: cancel and reprocess | Needed for sandbox exit, rarely needed on day one | + +Chapter 09 is the checklist you demonstrate to leave the sandbox, and it names all thirteen use cases NHA asks for. + +## Error families, and which desk they belong to + +Errors arrive from two places and they go to two different people. + +| Family | Where it arrives | Who acts | +| :---- | :---- | :---- | +| `PAYR-10xx`, `PAYR-11xx` | Inside the sealed response | The desk. Show the payer's own sentence | +| `PAYR-102x` structural block | Inside the sealed response | The integration team. It means an id or sequence is missing, not a wrong value | +| `ClaimError-n`, `PreauthError-n` | Inside the sealed response, on a denial | The desk, on the appeal screen, so the user sees why before deciding to appeal | +| `ERR-PYR-CLM-007` | Inside the sealed response | The integration team. The claim was sent under the wrong case number | +| Protocol response, `response.error` | On the callback, in the clear | The integration team. The message could not be opened | +| `NHCX-1010` | From the exchange | The integration team. A verdict was sent after the correlation was retired | + +A protocol response is never a claims-desk problem. Route it away from the queue and toward whoever owns the integration. + +## Where the rules live + +Two rulebooks shape what a provider may send, consulted in this order: + +1. **The insurance plan** says what the policy covers, at what limits, with which documents required. +2. **The eligibility response** says whether this patient is covered right now, how much remains, and which of the plan's requirements apply to the services chosen. + +A scheme adds a third: its own rules for how a case is built. For PMJAY those are chapter 07. diff --git a/site/docs/nhcx/v1/building-a-provider/insurance-plan.md b/site/docs/nhcx/v1/building-a-provider/insurance-plan.md new file mode 100644 index 000000000..cc37a1b89 --- /dev/null +++ b/site/docs/nhcx/v1/building-a-provider/insurance-plan.md @@ -0,0 +1,90 @@ +--- +title: Insurance plan +sidebar_label: Insurance plan +description: Fetching the policy as data, caching it with a version stamp, and building the treatment screen from the payer's own rules. +verification: unverified +source: "NHCX Integration Handbook §6; Insurance Plan Implementation Guide; NHCX FAQs v1.2 #15" +sidebar_position: 3 +--- + +# Insurance plan + +The plan is the policy as data. It tells the hospital system what a policy covers, at what limits, under what conditions, and with which documents. So the treatment screen is built from the payer's own rules rather than from a PDF someone once read. Nothing on that screen should be typed in by hand if the plan already knows it. + +## In short + +- The plan is the policy as data, and the treatment screen is built from it rather than from a PDF. +- The user never asks for it. It is fetched per policy, cached, and refreshed on a `policychange` communication. +- Plans come in two shapes: coverage-based for private insurers, package-based for schemes. +- Store it as data with a version stamp, and record which version each submission used. + +## What the user does + +The user never asks for the plan. It is fetched in the background and the treatment screen is built from it. + +**Choose what is being treated.** The specialties, services or packages offered are the ones the plan lists for this hospital. Nothing else is shown. + +**See the terms.** The limit for each benefit, any waiting period or exclusion that applies, and whether preauthorisation is required for it. + +**See the requirements** as a checklist: the documents the plan lists as mandatory at policy level and per benefit, and any questionnaire the payer attaches to a benefit. Render the questionnaire from the plan's Questionnaire resource rather than hard-coding it. + +## What the system calls + +``` +POST /v1/insuranceplan/request Task, code poll, inputs policyNumber and providerId +callback /v1/insuranceplan/on_request +``` + +Fetch once per policy the hospital deals with, and refresh on a schedule and whenever a payer communication with reason `policychange` arrives. The handbook's guidance is to fetch at registration or admission, before treatment planning, and alongside eligibility. + +## What comes back, and how to store it + +A collection bundle with one `InsurancePlan`, the `Organization`s, and one `Questionnaire` per requirement. + +**Two shapes exist, and they are not layout variants.** A payer picks one per product, and which one arrives decides how the treatment screen works. A system that handles both needs two code paths behind one screen. + +| | Package-based | Coverage-based | +| :---- | :---- | :---- | +| Sent by | Government schemes. PMJAY throughout | Private insurers and their TPAs | +| Structure | `plan → specificCost → category → benefit → cost`, with the rules on `coverage[]` alongside | `coverage → benefit → limit` | +| The unit | A named package at a fixed all-inclusive rate | A benefit with a money cap, such as ICU charges or room rent | +| What the user picks | A specialty, then a package. The rate is fixed and not editable | A service, then bills against it | +| Where the amount comes from | The plan's `Procedure` or `Stratification` cost line | The hospital's own bill, checked against the benefit limit | +| Rules arrive as | Sixteen `Claim-Condition` flags per package | `benefit.requirement` strings such as "Pre-authorisation required" | +| What blocks submission | A code or display differing from the plan, character for character | An amount over the limit, or a missing mandatory document | +| Sampled | Yes, one 21 MB payload | No sample in the published corpus | + +Chapter 07 covers what the package flags do. The FHIR Reference has a chapter for each shape. + +### Storing it + +Store the plan as data, not as a blob. Both shapes need the same five things pulled out and indexed. + +| What to extract | Package-based | Coverage-based | +| :---- | :---- | :---- | +| The pickable list | Specialties from `coverage[].type`, packages from `benefit[]` | Cover types from `coverage[].type`, services from `benefit[]` | +| The money | `specificCost` cost lines, joined to the rules on the package code | `benefit.limit[].value` | +| The rules | The sixteen flags per package | The `requirement` string | +| The document checklist | `Claim-SupportingInfoRequirement`, package level plus plan level | The benefit's required documents | +| The forms | `Questionnaire` resources the requirements point at | As published by the insurer | + +A scheme plan is large. The published PMJAY plan is 21 MB with 2,217 entries, and it cannot be handled by a naive JSON parser inside a request-response cycle. Stream it, or parse it once on a worker and store the result. + +Store the plan as data, not as a blob: benefits with their limits or rates, the conditions and exclusions from the plan's extensions, the document requirements, and the questionnaire URLs. Keep a version stamp on every stored plan, and record which version each submission used. A rate that changed on the payer's side without a refresh on yours is the commonest cause of a reduced approval. + +## What to validate before submitting + +The plan is also the first line of validation, run on the server, not only in the browser: + +- Codes and displays exactly as the plan has them, character for character, **including its misspellings**. The published PMJAY plan carries `Opthalmology` and `Transegender Procedure`, and a preauthorisation whose display differs from the plan's is rejected on the display. +- Amounts within the benefit's limit; quantities within what the plan allows. +- Every document the plan marks mandatory attached before submit is enabled. +- Under a package plan, implant and stratification counts within their maxima, and a standalone package with nothing else beside it. + +A base rate of zero is not an error. In the published plan, package `MG004A` has a base limit of 0 INR and stratification limits of 1,800 to 4,500, meaning the payable amount is decided entirely by the bed category chosen. Do not treat 0 as missing data, and do not submit a zero-value item line. + +## When the plan goes stale + +Refresh on a `policychange` communication, on whatever periodic schedule operations accepts, and before treatment planning if the cached copy has no version stamp. The FRD says weekly; the scenario sheet says every fifteen days. Under PMJAY an outdated tariff version causes a rate mismatch and automatic rejection on suspicion of tampering. + +Stamp the cache with the plan's scheme revision, and record on every preauthorisation and claim which revision it was built against. A rate that changed on the payer's side without a refresh on yours is the commonest cause of a reduced approval. The revision stamp is what turns that into a diagnosable event rather than a mystery. diff --git a/site/docs/nhcx/v1/building-a-provider/payment-and-communication.md b/site/docs/nhcx/v1/building-a-provider/payment-and-communication.md new file mode 100644 index 000000000..37383a496 --- /dev/null +++ b/site/docs/nhcx/v1/building-a-provider/payment-and-communication.md @@ -0,0 +1,99 @@ +--- +title: Payment and communication +sidebar_label: Payment and communication +description: "The two exchanges the payer starts: payment notices with the UTR, and the communication inbox with its six reasons." +verification: unverified +source: NHCX Integration Handbook §11, §12; Payment (NHA); NHCX Provider Side Use Cases, Sandbox Exit Process; NHCX Requests and Responses, payment type and task output values +sidebar_position: 6 +--- + +# Payment and communication + +Two exchanges arrive unasked. The payer initiates both, and the provider's job is to receive, act, and acknowledge. + +## In short + +- Two exchanges arrive unasked, both started by the payer. +- Three payment notices can arrive per claim. Only 33 carries the UTR, and only 33 means settled. +- The communication inbox switches on `Task.reasonCode`, with six reasons going to different desks. +- Build the `additionalinfo` path first: it is the query channel on the general network. + +## Payment notices + +### What the user sees + +A payments screen, per case, showing the sequence as it happens: initiated, processed, settled. On settlement, the UTR number, the gross amount, the TDS and other deductions, and the net. A button to acknowledge. Reconciliation staff will match the UTR against the bank statement, so print it as text they can read and select. Copyable means a copy control next to the printed value, not the value tucked inside an input box in its place. + +### What the system hosts + +``` +callback /v1/paymentnotice/request workflows 30, 31, 33 +``` + +Three notices can arrive for one claim, and each is a fresh delivery to acknowledge: 30 when the payer initiates, 31 when the bank processes, 33 when it settles. Only 33 carries the UTR. Mark the case settled on 33, not before. + +### What comes in + +A collection bundle: a `Task` with code `deliver` wrapping a `PaymentNotice` and a `PaymentReconciliation`, plus the two `Organization`s. + +- `PaymentNotice.amount` is the net paid; `paymentStatus` is `paid` or `cleared`. +- `PaymentReconciliation.paymentIdentifier.value` is the UTR. +- `PaymentReconciliation.detail[]` itemises the money: one line with type `TDS`, one with type `Payment`, and any others the payer uses (approved amount, service tax, advance, recovered, penalty). Net plus deductions should equal the approved amount; if it does not, flag it. + +### The acknowledgement + +A `Task` with `status = completed`, code `status`, and an output of type `status` whose value is `paymentack`, plus the claim number as a second output. Workflow 17. Send it to the payer. + +Where it goes is stated two ways on the portal: the Payment document and exit checklist say `/v1/paymentnotice/on_request`; the handbook says `/v1/task/submit`. Build to send to `on_request` and make the path configurable per payer. + +## Communication requests + +### What the user sees + +An inbox. Each message has a reason, a priority and a body, and needs a different response. A request for additional information needs documents attached; this is how a payer asks for more on a case. A turnaround-time alert goes to the claims desk to chase. A grievance needs a reply and possibly a corrective action. A benefit update should refresh the balance shown on the case. A policy change should trigger a plan refresh. An arbitration acknowledgement just tells the desk the appeal has been received. + +### What the system hosts + +``` +callback /v1/communication/request +reply /v1/communication/on_request +``` + +Switch on `Task.reasonCode`: `additionalinfo`, `tatquery`, `grievance`, `walletupdate`, `policychange`, `claimArbitration`. Build the `additionalinfo` path first; it is the query channel on the general network. Then `tatquery`, which the handbook reports as the most common reason in live traffic. + +### What comes in, and what goes back + +A collection bundle: a `Task` with code `poll` and an input of type `include` pointing at a `Communication`, plus the `Organization`s. On the `Communication`: `category` (reminder, notification, instruction or questionnaire), `priority` (routine, urgent, asap, stat), `topic` (usually progress-update), and the case reference as its identifier. + +The answer is the same bundle shape sent back with the same correlation ID, the provider `Organization` first, and `Task.status = completed`. For a plain acknowledgement, send it within the 30-second window regardless of whether the underlying issue is resolved. For an `additionalinfo` request, the answer carries the requested documents as well. + +## What to reconcile + +The reconciliation is what accounts works from, so store its lines rather than only the net. + +| Line type | What it is | +| :---- | :---- | +| `Payment` | The net amount the bank moved | +| `TDS` | Tax deducted at source | +| `approvedamount`, `claimedamount` | What was granted and what was asked | +| `servicetax`, `advance`, `recovered`, `penality` | Other adjustments the payer applies. Note the spelling of the last one; it is the payer's | + +Net plus deductions should equal the approved amount. When it does not, flag it rather than silently accepting the difference, because that is the only place a short payment shows up before the shortfall window opens. + +A return payment, where money has to come back, has its own codes: RP1 intimation, RP2 acknowledged, RP3 failed. + +## Two acknowledgements, and they are different things + +The screen should not confuse them, and neither should the code. + +| | Transport acknowledgement | Business acknowledgement | +| :---- | :---- | :---- | +| What it is | The `202` and receipt your callback returns | A `Task` on workflow 17 sent back to the payer | +| When | Automatically, within 30 seconds of the notice arriving | When the notice has been recorded against the claim | +| Who sees it | Nobody. It is protocol | The desk, as a button and a sent state | +| What it means | The message was taken in | The provider has recorded the payment | +| What happens without it | The exchange retries five times, then retires the correlation ID | Under PMJAY, the shortfall window never opens | + +## Notifications for patients + +If the hospital also runs a patient app, it can subscribe on the beneficiary's behalf and receive the same events as human-readable messages. That is a separate participant role, covered under the E-series in the Overview. diff --git a/site/docs/nhcx/v1/building-a-provider/pmjay-provider.md b/site/docs/nhcx/v1/building-a-provider/pmjay-provider.md new file mode 100644 index 000000000..1523b2a7a --- /dev/null +++ b/site/docs/nhcx/v1/building-a-provider/pmjay-provider.md @@ -0,0 +1,172 @@ +--- +title: PMJAY provider +sidebar_label: PMJAY provider +description: "Everything a PMJAY integration adds to the generic flow: biometrics, package flags, structured documents and scheme cases." +verification: unverified +source: NHCX-PMJAY-HMIS Integration Guide §5.2, §8; NHCX PMJAY Integration Handbook §6.6, §8, §9; NHCX FAQs v1.2 §22 to §29; Biometric Authentication Implementation Steps; NHCX APIs to be called based on scenario; PMJAY Hospital Migration to HMIS via NHCX; Standard Error Codes, Preauth and Claim +sidebar_position: 7 +--- + +# PMJAY provider + +The chapters before this one describe the flow NHCX defines for any payer. When the payer is PMJAY the endpoints do not change, but the rules around every screen do. This chapter collects them, in the same order as the generic chapters, so that a hospital building for the scheme reads the generic chapter for the shape and this one for the differences. + +The Overview's PMJAY chapters explain why these rules exist. This chapter is about what to build. + +## In short + +- The endpoints do not change under PMJAY. The rules around every screen do. +- Biometric verification is mandatory at registration and discharge, with a consent questionnaire as the fallback. +- The plan is package-based and large, and its flags drive what the treatment screen may offer. +- Queries arrive inside the queried `ClaimResponse`, not on the communication channel. +- There is no discharge submission: raising the claim asserts the discharge. + +## What changes, in one table + +| Generic flow | Under PMJAY | +| :---- | :---- | +| Patient found by ABHA, member ID or mobile | Also by Ayushman ID; a member card is shown; the patient is biometrically verified before registration | +| Plan is coverage-based or package-based | Always package-based, with flags on every package that drive the screen | +| Documents are attached as scans | Clinical documents must be structured ABDM health-information types | +| Payer queries arrive as a communication request | Payer queries arrive inside the queried `ClaimResponse`; the answer goes on the preauthorisation or claim endpoint | +| Provisional discharge submission, then final claim | No discharge submission; the claim asserts the discharge and carries its details | +| Appeal once the decision arrives | Reprocess after rejection at once; shortfall only after payment 33 is acknowledged; each once; the Committee is final | +| Communication channel carries document requests | Communication channel carries TAT alerts, grievances, wallet and policy changes, arbitration acknowledgements; never document queries | +| Go live when production credentials arrive | Go live when NHA maps the hospital's HEM ID to its participant ID; in-flight TMS cases finish in TMS | + +## Registration + +**Search** by Ayushman ID, mobile or ABHA. Show the member card once found. + +**Verify the patient biometrically** before registering. Build all three methods, fingerprint, iris and face; any may be the one that works for a given patient, and the scheme requires all three to be available. Fingerprint and iris are an init-then-verify pair. Face is a separate flow: initiate, show a QR code the patient scans in the ABHA app, poll until capture completes, verify with the Aadhaar number encrypted under the key the portal supplies. + +On success the system holds a **user token**, valid 30 minutes, with a refresh token. It goes in the header of the eligibility check and the preauthorisation. Refresh it automatically through the transaction; if it lapses, authenticate again. A fresh authentication is required at discharge, and that token rides on the claim. It need not use the same method as the preauthorisation; a case authenticated by fingerprint at admission can be authenticated by face at discharge. And where biometrics fail at discharge, the discharge authentication-consent questionnaire from the plan stands in, exactly as at registration. + +**Where biometrics are not possible**, capture the Aadhaar exemption consent, signed by patient and hospital representative, as a document on the record, and answer the authentication-consent questionnaire. There are two of them and they come from different places: the one for a preauthorisation arrives in the coverage eligibility response with purpose auth-requirements, the one for discharge is in the insurance plan. The payer refuses a request that has neither a valid biometric token nor the matching consent response, and names which is missing. The FRD adds that the exemption undertaking is submitted to the payer at claim time. The consent has a prescribed format that the payer's fraud engine checks. The one case with no fallback is a cyclic procedure, where live biometrics are required at every step. + +**Applicability.** Biometric verification applies to beneficiaries whose ABHA is linked to their PMJAY card; others follow the scheme's existing KYC. + +**Cover.** Eligibility with purpose validation returns the wallet: one benefit entry per wallet, allowed and used. The whole family shares one annual limit; show what remains, and refuse registration when it is exhausted. + +**Capture** communication address, care plan and attendant details, and upload the authentication consent. + +## Insurance plan + +Package-based, and large: the reference response is 21 MB with over two thousand questionnaires. Store it as data, versioned. + +**The flags drive the screen.** Every package carries claim-condition flags, and the treatment screen must obey them: + +| Flag | What the screen does | +| :---- | :---- | +| `GovtReserved` | Hide from private hospitals | +| `ApprovalNotRequired` | Tell the user the case will auto-approve if it is the first preauthorisation and every package has it | +| `ScheduledTATApproval` | Tell the user the payer's silence within the window means approval | +| `EnhancementAllowed` | Only these packages may be added during an enhancement | +| `QuantityAllowed` | Cap the quantity field | +| `ImplantApplicable`, `MaximumImplantsAllowed`, `MultipleImplantsAllowed` | Show the implant picker, with its limits | +| `StratificationAllowed`, `MaximumStratificationAllowed`, `MultipleStratificationAllowed` | Show the bed-category picker, with its limits | +| `Standalone` | Refuse any other package alongside it | +| `ParentProcedure` | Require one of the listed parents | +| `Unspecified` | Free-text name and free-entry amount, validated on the server against the wallet | +| `CyclicProcedure`, `MaximumCyclesAllowed` | Ask the number of cycles, capped | +| `LamaDamaProcedure`, `DischargeStagesLamaDamaProcedure` | Offer only on the matching discharge | +| `IsDayCare`, `Procedure Type` | Day-care handling; medical and surgical packages cannot be combined, and one medical package per episode | +| `los` | Maximum length of stay for the package; bounds the days claimed, including the `LM100` day count | +| `gst_applicable`, `gst_percentage` | Whether tax applies to the package, and at what rate | +| `incentive_applicable` | Whether a hospital incentive applies | +| `ip_op_flag` | In-patient or out-patient | +| `rules_yn` | Whether further rules attach to the package | + +That table is the specification. The one published plan payload carries sixteen of these flags and not the rest: `Standalone`, `Unspecified`, `LamaDamaProcedure`, `los`, the tax pair, `incentive_applicable`, `ip_op_flag` and `rules_yn` appear nowhere in it. Do not read that as proof they are unused, because the sample is one scheme's plan at one moment. Read it as a warning to code defensively. Treat a missing flag as absent rather than as false, and confirm with the payer which of these its plan publishes before building a screen that depends on one. + +There is a second trap in the same payload, and it will cost a day if you meet it unprepared. The flags and the money live in two different places. The claim-condition flags, the document requirements and the rate limits hang off the plan's coverage benefits, while the costs hang off the plan's own cost list. Both structures carry the same package codes, and neither is complete on its own, so building the treatment screen means joining them on the package code. The Insurance Plan Response chapter in the FHIR Reference sets out both shapes. + +**Refresh** weekly per the FRD, or every fifteen days per the scenario sheet, and immediately on renewal, amendment or a `policychange` communication. An outdated tariff version causes a rate mismatch and automatic rejection on suspicion of tampering; keep the version on every submission. + +**Add-ons** come from the package's cost qualifiers: implant, stratification, high-end medicine, investigation, each with its own code from the plan master, each a separate item on the bundle. + +## Preauthorisation + +The four sections of the generic form, with these additions: + +- Medical information comes from the HMIS record as structured documents: general findings, personal and family history. +- The STG questionnaire for each package is rendered from the plan and answered here; a missing response for a package that demands one is refused by name. +- Documents and questionnaires required for preauthorisation are those the eligibility call with purpose auth-requirements returns. The rest are mandatory at claim. +- Amounts are the plan's rates and are not editable, except on an unspecified package. +- A preauthorisation cannot be raised more than one day before admission. +- The biometric user token, or the consent questionnaire, must be present. +- `LM100` is never valid here. + +**Structured documents.** Clinical evidence travels as ABDM health-information types: a `DocumentReference` whose `attachment.data` is a base64 FHIR bundle with content type `application/json` or `application/fhir+json`, under categories `DIA`, `HDS`, `CD` or `INF`, sent as a reference. Scans go under `POI`, `POA`, `DOB`, `DEF`, `FIR` or `ATT` as attachments. One document per item, 2 MB each, 20 MB for the bundle. + +**Auto-approval** applies when this is the first preauthorisation for the case and every package carries `ApprovalNotRequired`, or when the policy allows turnaround-time approval and the payer has not acted in its window. Show the user which rule applied. + +**Queries arrive inside the response.** A queried `ClaimResponse`, workflow 24, carries the query text in `item.adjudication.reason.coding.display` as a pipe-delimited audit trail, `USER~datetime~type~comment~trust`. Parse it as a string and show the comment. The answer is the same preauthorisation bundle, new correlation ID, original reference, workflow 19, on `/v1/preauth/submit`. Not a communication response, and not a resubmission. + +**Enhancement** (13): only against an approved case, only after the previous request has closed, only for packages flagged enhanceable, unlimited until discharge within the wallet. **Resubmission** (121): revises an approved or rejected case for a different amount or package, and voids everything before it. **Cancel** (PC01): allowed until the claim is raised and refused once payment has started. + +**Server-side checks** the payer will make and the screen should make first: + +- Amount above zero and within the wallet. +- Specialty and package codes and displays exactly as the plan has them. +- Quantity at least one. +- Registration and admission dates present. +- One active preauthorisation per beneficiary across all hospitals. +- Investigations, mandatory for private hospitals. +- Newborn cases with date of birth, gender and documents, within six years. + +## Discharge and claim + +**There is no discharge submission.** Raising the claim asserts the discharge, so workflow 14 is not used and the discharge details ride on the claim. + +**Discharge type** is one of the four, and each has a questionnaire in the plan found by title (Death, Life, LAMA, DAMA). Authenticate the patient again here. Download the feedback form, hand it over, and upload it back. Under `DIS` the value is the stage. The gateway's own rejection message lists three, Before Surgery, During Surgery and After Surgery; the FAQ lists two, Before and After, and says the transmitted value must stay within the NRCeS set. Send what the payer's validation accepts and confirm before building. The value is sent for medical cases as well as surgical ones. A death also sends the death date under `ONS` / `DTM`. + +**LAMA or DAMA before surgery** voids every approved item. The claim carries the single line `LM100` with quantity equal to the days admitted, and for LAMA the bed category with its duration. After surgery the surgery items stand and `LM100` is not used. Two sources disagree on the middle case. The FAQ says `LM100` applies only before surgery. The payer's own error message says it is mandated when the patient is discharged after or during surgery under LAMA or DAMA. Confirm before building. + +**The claim** is built from the preauthorisation with `use = claim`, four dates plus discharge status, the discharge summary as a structured document, the bill, the discharge questionnaire response, and the discharge-stage biometric token in the header. Amount within the preauthorisation's approved amount. The documents mandatory at claim are the plan's list less those already sent at preauthorisation. + +**Queries** on a claim arrive and are answered the same way as on a preauthorisation, with workflow 151 on `/v1/claim/submit`. + +**After the decision**, two Tasks, both on `/v1/task/submit` with workflow 36, code `reprocess`, and a document attached: + +| | Reprocess | Shortfall | +| :---- | :---- | :---- | +| When | Claim rejected outright | Claim paid, but short | +| Reason | `claimrejected` | `partialpayment` | +| Amount | None | The difference, never more | +| Gate | None; raise on rejection | Payment notice 33 received, verified, and acknowledged with 17 | +| Times | Once | Once | +| Decided by | Claim Review Committee, final | Claim Review Committee, final | + +They do not chain; a shortfall cannot follow a Committee decision. The claim number in the Task is the preauthorisation number the hospital generated. + +## Scheme cases that change the bundle + +Five situations the treatment screen has to recognise before it builds anything. The Overview's PMJAY Scheme Rules chapter explains each; this is what the provider system does. + +- **Unspecified procedure.** Offer the specialty's unspecified package (prefix plus 215) only within the treating specialty, with a free-text name and amount, and validate the amount on the server. It is a single line item with nothing else beside it. Auth-requirements is still required, and the item code is `U100`. +- **Cyclic procedure.** Ask the cycles, capped by the plan. Take live biometrics at preauthorisation, at every visit with process type Discharge, and at claim. Enforce the 24-hour rolling gap between visits, and record each visit as a numbered structured document with start and end time. One claim goes after the last cycle, and payment comes only for captured cycles. A change of hospital means discharge and a new preauthorisation. +- **Medical package.** One per episode; never alongside a surgical package. +- **Newborn.** Used while the baby has no member ID of its own. Parent's card and wallet, with the parent as primary `Patient` and the child as a linked `Patient` with `link.type = refer`. Date of birth, gender and proof of birth under `DOB` as `BCF` or `DCB` are all mandatory. Twins are two preauthorisations. Bill as "Baby of" the parent with an attachment. A child older than that and under six draws on the parent's wallet as an ordinary case, without the linked-child construct. +- **Implants and stratification.** Separate items with the plan's codes, within the package's maximums; only where the flags allow. + +## Payment and communication + +The payment flow is the generic one. Two scheme points: the acknowledgement of 33 is the gate on a shortfall claim, and the `TDS` and `Payment` lines on the reconciliation should sum to the approved amount. + +The communication channel never carries a document query under PMJAY. It carries `tatquery`, which the handbook reports as the most common reason in live PMJAY traffic, `grievance`, `walletupdate`, `policychange`, and `claimArbitration` when an appeal has been received. Host it regardless. + +## Verified in the sandbox + +The next chapter, PMJAY Sandbox Run, records what the SHA HP sandbox actually did with these rules on 5 and 6 September 2026, from eligibility through to an approved claim. Its findings change what is written above in six places: + +- The item needs a FHIR element id, and every supporting-info entry a sequence. +- The practitioner needs an `HPIN` identifier. +- The item's category is the master's specialty code. +- The consent questionnaires that stand in for biometrics are the **plan's**, found by title in the master. +- The claim goes out under the pre-authorisation's number and bills the package alone. +- Documents must be PDF, JPEG, PNG or FHIR JSON. The Payer Service that adjudicates a case, the case id it insists on, and the roles a claim actually walked are described there as well. + +## Going live + +The sandbox journey adds a PMJAY team demo to the internal and HTC demos, and the exit form. In production, after the participant is created and configured, the hospital raises a ticket with its HEM ID from TMS and its NHCX participant ID. NHA maps them by hand, and that mapping is the switch. Preauthorisations and claims raised before it finish in TMS; everything after goes through the HMIS. Plan for both running at once, and brief the desk. diff --git a/site/docs/nhcx/v1/building-a-provider/pmjay-sandbox-run.md b/site/docs/nhcx/v1/building-a-provider/pmjay-sandbox-run.md new file mode 100644 index 000000000..19e6e811f --- /dev/null +++ b/site/docs/nhcx/v1/building-a-provider/pmjay-sandbox-run.md @@ -0,0 +1,191 @@ +--- +title: PMJAY sandbox run +sidebar_label: PMJAY sandbox run +description: What the SHA HP sandbox actually accepted and refused over two days in September 2026, and what each refusal turned out to mean. +verification: verified +source: "the SHCX sandbox run of 5 and 6 September 2026 against `apisbx.abdm.gov.in` and `apisbeta.nha.gov.in`, recorded in the NHCX Adapter's ledger and the provider's exchange ledger; NHCX Payer Service API Workflow Guide for External Integrators; NHCX PMJAY Integration Handbook §4.1 and Appendix A (error codes); Sample FHIR bundles, `preauth/preauth_request.txt`; `apps/reference/provider`, validated with the HL7 validator against ndhm.in 6.5.0" +sidebar_position: 10 +--- + +# PMJAY sandbox run + +Everything before this chapter was written from NHA's documents. This chapter is written from a run against the live NHCX sandbox on 5 and 6 September 2026. In it: the provider participant `1000003463@hcx`, the SHA HP payer `1518@hcx`, the beneficiary `MD5SLS4X5`, the SHA's package master, and the NHCX Payer Service that adjudicates a PMJAY case. It records what the SHA actually accepted and refused, in the order a hospital meets it, and what each refusal turned out to mean. Where this chapter and an earlier one disagree, this one is the evidence. + +On the second day the whole journey went through, over the live sandbox. A pre-authorisation raised in the provider application was accepted, approved at PPD-Trust, enhanced, discharged, claimed, and walked through the claim roles to approval. Nine refusals were met and settled on the way, and each is written up below in the order it arrives. + +## In short + +- Written from a live run against the SHA HP sandbox on 5 and 6 September 2026, end to end to an approved claim. +- Nine refusals were met and settled. Where this page and an earlier one disagree, this one is the evidence. +- `PAYR-1027` is structural: the item needs a FHIR element id, not a different package code. +- A PMJAY case is not decided over NHCX. The integrator drives it through the Payer Service by role. +- The claim goes out under the pre-authorisation's number and bills the package alone. + +## The run in one table + +| Step | Call | What the SHA answered | Where the shape lives | +| :---- | :---- | :---- | :---- | +| Policy search | registry `/participant/get/policies` | The member's cover: `PMJAY for Himachal`, policy `PMJAY/HP/S/G` | | +| Discovery, validation, benefits, auth-requirements | `/v1/coverageeligibility/check` | Answered every time, purpose by purpose; validation says `active` to 2 April 2028 | `apps/reference/provider/coverage/*` | +| Package master | `/v1/insuranceplan/request`, plan Task | `PAYR-1401` for `PMJAY/CH/S/G`; the full master, 1,053 packages, for `PMJAY/HP/S/G` | `apps/reference/provider/insurance` | +| Preauthorisation | `/v1/preauth/submit`, workflow 12 | `PAYR-1027`, then `PAYR-1083`, then `PAYR-1238`, each fixed in turn as below | `apps/reference/provider/preauth/request` | +| Adjudication | Payer Service `get/user-role`, `process/case` | `PPD-Trust` approved the pre-auth and the enhancement; `CEX-Trust`, `CPD-Trust`, `ACO-Trust`, `SHA-Trust` walked the claim to approval | this chapter | +| Enhancement | `/v1/preauth/submit`, workflow 13 | accepted and approved on the same case, ₹1,500 added | `apps/reference/provider/preauth/enhancement` | +| Claim | `/v1/claim/submit`, workflow 15 | accepted, queued, then approved after the role walk | `apps/reference/provider/claim/request` | +| Status enquiry, reprocess | `/v1/task/submit` | refused: `status` and `reprocess` are not combinations the SHA takes | this chapter | + +The coverage and plan flows passed with the reference bundles unchanged. Everything from the pre-authorisation on had something to teach, and the refusals below are in the order they arrive. + +## PAYR-1027: "Invalid item id" means the item has no `id` + +The message reads *Invalid item id found for item in claim component. Hence request will not be processed further.* Every reading of it as a package-code problem was wrong. The same bundle was refused with `MG0111A`, `MG004C` and `MG0105A`, with and without a stratification tier, and with the category as `MG` from the master. It was refused again as the reference bundle itself, byte for byte apart from dates. What the SHA was missing was the FHIR **element id** on each `Claim.item`. + +The NHA sample bundles carry these ids and the reference bundles did not. The payer service reads the Claim's lists by them: + +| Element | `id` | Example | +| :---- | :---- | :---- | +| `Claim` | the claim number | `"id": "PA000247"` | +| `Claim.item[n]` | `Item/n` | `"id": "Item/1"` | +| `Claim.procedure[n]` | `Procedure/n` | `"id": "Procedure/1"` | +| `Claim.supportingInfo[n]` | `SupportingInformation/n` | `"id": "SupportingInformation/3"` | +| `Patient`, `Coverage`, the provider `Organization` | `1` | | +| the payer `Organization` | `2` | | +| `Practitioner`, `Procedure` | their serial | `"id": "1"` | + +With those in place the very same bundle moved past every item check. `PAYR-1028`, *invalid item sequence*, and `PAYR-1029`, *invalid bundle id*, sit in the same block of structural rules. Read them the same way: an element the service addresses by id or sequence is missing that handle, not carrying a wrong value. + +## PAYR-1083: the Practitioner needs an `HPIN` identifier + +*No HPR details found for the practitioner for resource https://nhcx.abdm.gov.in/practitioner. Please send the details in the identifier for Practitioner resource with category code as HPIN.* The reference practitioner carried the HPR id typed `HPID` and the registration number typed `MD`. The SHA looks the doctor up by the identifier typed `HPIN` from `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code`, and the NHA sample carries the same HPR id twice, once as `HPID` and once as `HPIN`, both under `https://hpr.abdm.gov.in`. Send all three: + +```json +"identifier": [ + { "type": { "coding": [{ "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", "code": "HPID", "display": "Healthcare Professional ID (HPID)" }] }, "system": "https://nhcx.abdm.gov.in", "value": "71-5566-2211-8834" }, + { "type": { "coding": [{ "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "MD", "display": "Medical License number" }] }, "system": "https://nhcx.abdm.gov.in", "value": "KMC/2012/22907" }, + { "type": { "coding": [{ "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", "code": "HPIN", "display": "Health Practitioner ID issued by NDHM" }] }, "system": "https://hpr.abdm.gov.in", "value": "71-5566-2211-8834" } +] +``` + +The sandbox did not check the HPR id against the registry; a well-formed 14-digit id was enough. Production may not be as kind. In the same bundle the `careTeam.qualification` went out as a SNOMED specialty concept (`394802001` General medicine) and the `Practitioner.qualification` as a v2-0360 degree code (`MD`), as the reference has them. The SHA did not object to either, and both were free text in the first refused attempt. Treat coding them as prudent rather than proven necessary. + +## PAYR-1238: one live preauthorisation per beneficiary per hospital + +*Beneficiary is having an active preauthorization request at this hospital with reference number PMJAY/HP/S/2024/R2/2026090410000443. Hence the request will not be processed. Kindly cancel the active preauthorization request or raise a claim to proceed.* This is a scheme rule, not a bundle fault, and it will bite any team that shares one sandbox beneficiary across several deployments. The reference number's last sixteen digits, `2026090410000443`, are the SHA's **case id**, and that id is what the Payer Service wants; see the next section. The remedy is either a cancel Task (`PC01`) from the hospital that raised it, or a `Reject` at `PPD-Trust` on the Payer Service. Until one of those happens, every new preauthorisation for that beneficiary at that hospital is refused with this code. The refusal arrives *after* the bundle has passed validation, which is how we know the bundle was right. + +Two earlier refusals are worth naming because they are easy to mistake for bundle faults. `PAYR-1401`, *policy not allowed for the hospital*, on the package master means the policy number is one the hospital is not empanelled under, `PMJAY/CH/S/G` here. Ask again with the beneficiary's own policy from the eligibility answer, `PMJAY/HP/S/G`, and the master arrives. And before any of this, a request whose item had no package code at all, `UNCODED`, was refused with `PAYR-1027` too, because it also had no item id. A package code that is not in the master is a later rule, `PAYR-1248`, which names the code. + +## PAYR-1256 and PAYR-1363: Consent stands in for biometrics + +*Response for Authentication Consent Questionnaire is missing for case number %s. This must be sent if the biometric authentication for patient is not available.* PMJAY authenticates the beneficiary biometrically at admission and again at discharge. A system with no biometric device sends the scheme's own consent questionnaire instead. The questionnaire is the **plan's**: its url and link ids come out of the package master, so they have to be read off the master rather than written into the code. In the SHA HP master they are: + +| Form | `Questionnaire.url` | Questions | +| :---- | :---- | :---- | +| Authentication Consent (pre-authorisation) | `https://payer.gov.in/policy/questionnaire/100024` | `100093` attachment, Medical Superintendent Declaration Form (During Admission); `100095` string, Remarks | +| Discharge Consent (claim) | `https://payer.gov.in/policy/questionnaire/100466` | `135477` attachment, Medical Superintendent Declaration Form (During Discharge) | + +The answers ride exactly as the NHA sample carries them: a `QuestionnaireResponse` naming the questionnaire's url, and a supporting-info entry of category `INF`, code `ODN`, whose `valueReference` points at that response. `PAYR-1363` is the same refusal at the claim, naming the discharge form. + +## PAYR-1019, PAYR-1008 and ERR-PYR-CLM-007: three more on the claim + +**`PAYR-1019`, invalid sequence in supporting info.** Adding the questionnaire entries after the dated ones left them without a `sequence`. Every `supportingInfo` element needs one, numbered from 1 with no gaps, and the numbering has to happen after the list is complete rather than as each piece is built. + +**`PAYR-1008`, invalid content type in attachment for item MB.** The SHA reads `application/pdf`, `application/jpg`, `application/jpeg`, `application/png` and `application/fhir+json`, and nothing else. A generated document sent as `text/plain` is refused, so this application now writes its itemised bill, discharge summary and record extracts as one-page PDFs. + +**`ERR-PYR-CLM-007`, no prior preauthorization or claim record found for case number %s.** The SHA keeps one case per episode and looks the claim up by the number the pre-authorisation was raised under. A claim sent under a number of its own finds no case. The claim goes out under the pre-authorisation's number; the claim row still owns its correlation id, so the answer lands on the right record. + +## PAYR-1245: one conservative Procedure per case + +An enhancement adding a second package coded `Conservative` is refused: *only one conservative procedure can be booked for a case, but received request for 2*. The master's `ProcedureType` decides this, and in the SHA HP master 157 of 200 packages are `Conservative`, 37 `Medical`, 6 `Surgical`. An enhancement on a conservative case has to add a `Medical` package (Acute Haemodialysis `MG072C` went through and was approved at ₹1,500) or an add-on the master flags as enhanceable. + +## The enhancement names no case of its own + +The acknowledgement of an enhancement comes back with `preAuthRef` null: the enhancement is decided on the case its parent opened, and the payer service answers only for that case number. A provider system therefore has to carry the parent's case reference onto the child when it raises one, or its desk call will be refused with *Event Meta Log not found for correlationId*. + +## One request at a time on a case + +`PAYR-1322`, *active instance found for case number %s*, is the rule behind several of the timings above: the scheme takes one request at a time on a case. A claim raised while an enhancement is still queued is refused with it, and the payer service's role lookup still answers `PPD-Trust` because the case has not left the pre-authorisation queue. Two consequences for a provider system: + +- **Read the role before every desk action, and treat a pre-authorisation role on a claim as "not yet".** The role names where the case is, not what you are asking about. +- **The desk refuses an action for a request the exchange has not finished delivering**, with *Event Meta Log not found for correlationId*, and refuses one for a case mid-filing with *Case not found for caseId*. Both mean "try again shortly"; the end-to-end test in `apps/e2e/tests/31-pmjay-happy.spec.ts` retries on exactly those two. + +The SHA also re-queues an enhancement it has been asked to approve, answering `queued` again rather than a verdict, and decides it in its own time. On the run that went end to end the enhancement was approved a minute after the ask; on a later run it was still queued five minutes on. Nothing in the bundle changes that, and a test suite has to report the scheme's pace rather than assert it away. + +## What the sandbox would not take + +Two exchanges this application sends to other payers have no home at PMJAY, and both fail on the same validation: + +- **Status enquiry.** A `Task` coded `status` is refused with `PAYR-1018` (no reason code) and, with one, `PAYR-1008` (*invalid input, code and reason code received … refer to the document*). The scheme's own tables use `status` only for the payment acknowledgement, so where a case stands is read from the payer service's role lookup instead, not asked for over NHCX. +- **Reprocess.** A `Task` coded `reprocess` with reason `partialpayment` on an approved, unpaid claim is refused the same way. The handbook gates a shortfall behind an acknowledged payment notice 33, and the sandbox had sent none, so nothing here proves the shape wrong. It does prove the combination is validated before the case is looked at. + +Both refusals name a document of valid code-and-reason combinations that is not published in the material NHA ships. + +## What the package master decides + +The master the SHA returns for the beneficiary's policy is what the item must be coded from. For `MG0111A` it says: + +| Field | Value | Where it goes on the Claim | +| :---- | :---- | :---- | +| package code and display | `MG0111A`, "Pleural Effusion (Pleural Effusion)" | `item.productOrService`, system `…/ndhm-procedure-code` | +| specialty | `MG`, "General Medicine" | `item.category`, system `…/ndhm-benefit-category` | +| `ProcedureType` | `Conservative` | `Claim.procedure.type`, `https://nhcx.abdm.gov.in/procedure-type`, code `conservative` | +| `StratificationAllowed` | `Y` | whether a ward tier may ride as `item.modifier` | +| stratification tiers | `STRAT006a` Routine Ward 1800, `STRAT006b` HDU 2700, `STRAT006c` ICU without ventilator 3600, `STRAT006d` ICU with ventilator 4500 | `item.modifier.coding`, code and display only, no system | +| `ApprovalNotRequired` | `N` | whether a preauthorisation is needed at all | +| `EnhancementAllowed` | `Y` | whether the package may be added on an enhancement | + +The specialty is the code of the category the master files the package under, exactly as `PAYR-1114` says. A generic category (`GEN`) is wrong for every PMJAY package. The ward the patient is in maps onto the tiers by label. A general, semi-private, private or deluxe bed is the routine ward tier, an HDU bed the HDU tier. An ICU bed is the ICU tier without a ventilator unless the record says otherwise. The amount asked for stays the hospital's own; the tier's rate is what the SHA will pay for it, not what the hospital must claim. + +The master also says what the **claim** may carry. A PMJAY package rate is all-inclusive, so the claim bills the package alone at the whole of what was billed. Room rent, consultations and investigations are not items of their own and would be refused as invalid item codes. The generic flow, where every bill line is an item, stays right for an indemnity payer. + +## Adjudicating on the NHCX payer service + +A PMJAY case is not decided over NHCX. It sits at `request.initiated` until somebody acts on it in the SHA's Transaction Management System. In the sandbox that somebody is the integrator, through two endpoints the *NHCX Payer Service API Workflow Guide for External Integrators* publishes. + +**Token.** Both endpoints take `bearer_auth: Bearer `, and the token is the ordinary ABDM session token: `POST https://dev.abdm.gov.in/api/hiecm/gateway/v3/sessions` with the participant's `clientId`, `clientSecret` and `grantType: client_credentials`, plus `REQUEST-ID`, `TIMESTAMP` and `X-CM-ID: sbx` headers. It lives 1,200 seconds. The gateway that already holds these credentials can hand it out; the NHCX Adapter does at `GET /token`. + +**Who holds the case.** + +``` +POST https://apisbx.abdm.gov.in/pmjay/sbxhcx/nhcxpayerservice/v1/get/user-role +{ "caseid": "2026090410000443", "payerid": "1518" } +→ { "currentuserrole": "PPD-Trust", "errormessage": null } +``` + +`caseid` is the SHA's case id, the sixteen digits at the end of the reference `PMJAY/HP/S/2024/R2/2026090410000443`. It is **not** the hospital's claim number: asked about `PA000239` the service answers `No Data found with the caseid PA000239. Please use the current active case id.` A hospital therefore has to learn the SHA's case id for each preauthorisation it raises. The sandbox gives it out in two places: inside the `PAYR-1238` refusal of the next request, and, once a request is accepted, in the SHA's acknowledgement and status answers on the case. Store it beside the claim number the moment it is seen. + +**Acting on it.** One endpoint, one body, the action spelled as the guide's table has it for the role that currently holds the case: + +``` +POST https://apisbeta.nha.gov.in/pmjay/hcx/nhcxpayerservice/wrapper/process/case +{ + "casenumber": "2026090410000443", "action": "Approve", "usecase": "PREAUTH", + "receivercode": "1518", "sendercode": "1000003463", "memberid": "MD5SLS4X5", + "correlationid": "", "remarks": "ok" +} +``` + +| Step | Role | Actions | `usecase` | +| :---- | :---- | :---- | :---- | +| preauth | `PPD-Trust` | `Approve`, `Reject`, `Query` | `PREAUTH` | +| claim 1 | `CEX-Trust` | `Forward` | `CLAIM` | +| claim 2 | `CPD-Trust` | `cpdApprove`, `cpdReject`, `Pending` | `CLAIM` | +| claim 3 | Medical Audit Committee | `Approve`, `Reject`, `iQuery` | `Medical Audit Committee` | +| claim 4 | `ACO-Trust` | `Approve`, `Reject`, `Pending` | `CLAIM` | +| claim 5 | `SHA-Trust` | `Approve`, `Reject`, `Pending` | `CLAIM` | +| claim 6 | Claim Review Committee | `Approve`, `Reject`, `Pending` | `Claim Review Committee` | + +Read the role before every action, use the exact spelling, and mint a new correlation id per call. A preauthorisation is one decision; a claim walks all six roles, and the `usecase` changes at the two committees. The decision then comes back to the hospital over NHCX as the `ClaimResponse` on the request's own correlation id, so the desk call and the callback are two halves of one step. + +**The walk, as it ran.** The pre-authorisation was approved at `PPD-Trust` and came back over NHCX as a `ClaimResponse` with `outcome: complete` and a benefit of ₹2,070 against ₹3,300 asked (the SHA prices the package itself). The enhancement was approved on the same case for ₹1,500. The claim was forwarded by `CEX-Trust`, approved by `CPD-Trust` as `cpdApprove`, then by `ACO-Trust` and `SHA-Trust`, after which the role lookup answered with no role at all. The case was decided, and the verdict arrived on the claim's own thread. The Medical Audit Committee and the Claim Review Committee never held this case: the six steps in the guide's table are the roles a case *may* pass through, not a queue every case walks. + +**Reading the role between actions is not optional.** The service moves the case on its own schedule, and the role that answers is the only one whose action names are legal. A cycle that assumes the next step in the table will be refused. + +The provider application in this repository drives both endpoints from the episode screen: `GET /api/preauths/:id/adjudicator`, `POST /api/preauths/:id/adjudicate`, and the same under `/api/claims`. It records every action on its exchange ledger under the family `adjudication`, and gets its token from the adapter's `GET /token`. It stores the SHA's case reference the moment the acknowledgement carries it (`preauths.payer_case_ref`) and addresses the desk by the last segment of it, which is what the whole walk above ran on. + +## What this changes in the earlier chapters + +- **Chapter 05/01, the rules.** Add element ids to every Claim bundle (rule 12) and the `HPIN` identifier to every Practitioner (rule 13). Both are in the reference set under `apps/reference/provider`, which the three applications are held to byte for byte. +- **Chapter 05/06.** The sample's `factor: 0.5`, the `MP` category system and the SNOMED system on the package code are things the SHA tolerates, not things it needs. The reference bundle passed with `factor` 1, category `MG` under `…/ndhm-benefit-category` and the package under `…/ndhm-procedure-code`. +- **Chapter 07 of this part.** The specialty on the item is the master's category code, the ward tier the master's stratification code, the claim the package alone. The four mandatory `MAND…` documents the sample carries were not demanded at submission; expect them to be queried for. +- **The error table.** `PAYR-1027` is structural, not a code lookup, and so are `PAYR-1019` and `PAYR-1029`. `PAYR-1008` is about a content type or a code-and-reason combination, depending on where it lands. +- **Chapter 05/10, the claim.** Under PMJAY the claim carries the pre-authorisation's number, the package alone at the whole amount, the discharge consent questionnaire, and documents in a content type the payer reads. diff --git a/site/docs/nhcx/v1/building-a-provider/preauthorisation.md b/site/docs/nhcx/v1/building-a-provider/preauthorisation.md new file mode 100644 index 000000000..6cb386b5b --- /dev/null +++ b/site/docs/nhcx/v1/building-a-provider/preauthorisation.md @@ -0,0 +1,114 @@ +--- +title: Preauthorisation +sidebar_label: Preauthorisation +description: "The first bundle carrying clinical content: the five form sections, what goes in the Claim, and how to read the answer." +verification: unverified +source: NHCX Integration Handbook §8, Appendix B, Appendix C; Preauthorization (NHA); NHCX Dummy Payer Implementation; Standard Error Codes, Preauth; NHCX Requests and Responses, value sets +sidebar_position: 4 +--- + +# Preauthorisation + +The preauthorisation is the first bundle that carries clinical content, and the one the payer scrutinises hardest. Everything the treatment screen collected becomes a `Claim` resource with `use` set to `preauthorization`. + +## In short + +- The first bundle carrying clinical content, and the one the payer scrutinises hardest. +- The form has five sections, in the order payers read them, and the `Claim` is the bundle's spine. +- The item is where most rejections originate: codes and displays must match the plan exactly. +- Read `outcome` and the adjudication reason together. `complete` alone means approved or rejected. +- Enhancements, resubmissions and cancels reuse the same case with a new correlation ID. + +## What the user does + +The form has five sections, and the order below is the order payers read them. + +**Medical information.** Findings, history, the clinical picture that justifies admission. + +**Admission information.** Registration date, admission date, admission details. + +**Treatment.** Diagnosis as ICD-10 codes, the treatment plan as services or packages chosen from the plan, investigations, and the care team with each doctor's registration number. + +**Finance.** The amount per line, from the plan where the plan fixes it. The total may not exceed what eligibility said remains; check it on the server before enabling submit. + +**Documents.** The checklist comes from the eligibility call with purpose auth-requirements, made from this screen before submission. Each document is one file of at most 2 MB. Do not let the user submit with a mandatory item missing; the payer will query, and the round trip costs a day. + +## What the system calls + +``` +POST /v1/coverageeligibility/check purpose: benefits, then auth-requirements +POST /v1/preauth/submit workflow 12 +callback /v1/preauth/on_submit +``` + +Send to the processor code. Store the correlation ID against the case; every follow-up on this preauthorisation will reuse the reference and carry a new correlation ID. + +## What goes in the bundle + +A collection bundle. The `Claim` is the spine; everything else is referenced from it by `urn:uuid`. + +| Resource | Why it is there | +| :---- | :---- | +| `Claim` | `use = preauthorization`, `type` inpatient, patient, provider, insurer, coverage, billable period, diagnosis, procedure, items, care team, supporting info, total | +| `Patient` | Member ID and ABHA number as identifiers | +| `Organization` ×2 | Provider with its HFR ID as NPI; insurer with its registry ID as NIIP | +| `Coverage` | The policy, with the product code | +| `Practitioner` per doctor | Name and medical registration number, referenced from the care team | +| `Procedure` | One per procedure, referenced from `Claim.procedure` | +| `DocumentReference` per document | A PDF or image in `attachment.data`, or a structured FHIR bundle where the payer asks for one | +| `QuestionnaireResponse` | Answers to any questionnaire the plan or the eligibility response attached, referenced from a supporting-info entry. A policy or case-level response uses category `INF` with code `ODN`; the FRD gives `INF` with code `AT` for questionnaire answers generally. The payer names `ODN` in its own rejection message, so send that for the case-level one and confirm the rest. | + +The item is where most rejections originate. Each `Claim.item` carries the category, the service or package as `productOrService`, quantity, unit price and net, and points at the diagnosis, procedure, care team and supporting-info entries it relates to by sequence number. The codes and displays must match the plan exactly. + +Two supporting-info entries carry the dates: registration date as code `EDT` under category `OTH`, admission date as code `ADDD` under category `ONS`. Full element tables are in the FHIR Reference. + +## What the payer checks before a human sees it + +The reference payer refuses these on arrival, with a named code, before the case reaches a doctor's queue. Every one of them is cheaper to catch on your own server. + +| Check | The code you get if you skip it | +| :---- | :---- | +| Every `Claim.item` carries a FHIR element `id` | `PAYR-1027`, "invalid item id". Structural, not a code lookup | +| Every `supportingInfo` entry carries a `sequence`, numbered from 1 with no gaps | `PAYR-1019` | +| The `Practitioner` carries an identifier typed `HPIN` | `PAYR-1083` | +| No preauthorisation already live for this beneficiary at this hospital | `PAYR-1238`, which names the reference number holding it | +| Documents in `pdf`, `jpg`, `jpeg`, `png` or `fhir+json` | `PAYR-1008` | +| The package code is in the plan's master | `PAYR-1248`, which names the code | +| The policy is one the hospital is empanelled under | `PAYR-1401` | + +Refusals arrive in order: the bundle is validated first, and scheme rules are applied only to a bundle that passed. So `PAYR-1238`, the one-live-preauthorisation rule, is perversely the first sign the bundle itself is right. + +The `PAYR-102x` block is structural throughout. When you meet one, check ids and sequences before you go looking at values. + +## Reading the answer + +The callback carries a `ClaimResponse`. Read two fields together, never one: + +| `outcome` | Adjudication reason | Meaning | Workflow | +| :---- | :---- | :---- | :---- | +| `complete` | `approved` | Approved. `preAuthRef` is the reference for the claim. | 21 | +| `partial` | `approved` | Approved at a reduced amount. `processNote` says why. | 21 | +| `partial` | `queried` | The payer wants more. The case stays open. | 24 | +| `complete` | `cancelled` | Rejected. Reason in `disposition` and a denial code from the `PreauthError` family. | 23 | + +`outcome = complete` alone does not mean approved; it also means rejected. The adjudication reason is the difference. + +## When the payer wants more + +On the general network, a query arrives as a **communication request** on `/v1/communication/request`, with reason `additionalinfo` and the case number. The provider attaches what was asked and answers on `/v1/communication/on_request`. The payer then issues the decision on `/v1/preauth/on_submit`. The queried `ClaimResponse` with workflow 24 tells the provider the case is waiting; the communication tells it what for. + +Some payers instead take the answer on the preauthorisation endpoint itself with workflow 19. PMJAY does; chapter 07 covers it. + +## Follow-ups on the same case + +All reuse this screen's bundle with a new correlation ID, the original reference, and a different workflow code. + +**Answering a query** adds one more entry wherever it is sent: the overall case remarks, under category `NMI` with code `CQD`, as a string. Send it. The handbook says an answer without it is rejected. The one sampled answer that the payer accepted and then approved carries no such entry, so treat it as required until a payer tells you otherwise. + +- **Enhancement** (13). Against an approved case, for additional procedures or days. The bundle lists the already-approved items and the new ones. +- **Resubmission** (121). Revises a request after a query or rejection. +- **Cancel** (PC01). A Task, not a Claim: code `cancel`, the case number as input, a reason from the list (treatment plan changed, patient request, financial constraints, alternative treatment, duplicate, administrative error, other). Allowed until the claim is raised. The workflow sheet gives PC01 for this and PC02 for the answer; the handbook gives 122 in two places, including the heading of its cancellation-reason appendix. Confirm which the payer accepts. + +The Task resource carries more codes than these two. The provider exit checklist names `reprocess`, `cancel`, `release` and `nullify`, and the value set adds `approve`, `search`, `poll` and `suspend`. `nullify` closes a submitted claim and `suspend` holds one; neither is described further in the sources. + +Payers enforce sequencing and say so: no approved record for this enhancement, a case already in progress, a claim already raised. Surface their errors as they are. diff --git a/site/docs/nhcx/v1/building-a-provider/registration-and-eligibility.md b/site/docs/nhcx/v1/building-a-provider/registration-and-eligibility.md new file mode 100644 index 000000000..fb4c833cb --- /dev/null +++ b/site/docs/nhcx/v1/building-a-provider/registration-and-eligibility.md @@ -0,0 +1,137 @@ +--- +title: Registration and eligibility +sidebar_label: Registration and eligibility +description: "The first screen: finding the policy, confirming cover before the patient is registered, and what to store from the answer." +verification: unverified +source: Coverage Eligibility (NHA); Insurance Plan Implementation Guide, CoverageEligibility; NHCX Integration Handbook §5, §7; Standard Error Codes, Payer and Coverage +sidebar_position: 2 +--- + +# Registration and eligibility + +This chapter comes before the Insurance Plan chapter because registration comes first at the desk. The calls do not run in that order. The plan is fetched at registration or admission and cached, so by the time a treatment is planned it is already there, and the next chapter covers it. Read the two together. + +The first screen decides whether the rest of the journey can happen. A patient who is registered without a confirmed policy and a confirmed processor code will fail at preauthorisation with errors that look like FHIR problems and are not. + +## In short + +- The first screen decides whether the rest of the journey can happen. +- Register the patient only once eligibility with purpose validation comes back positive. +- Send eligibility to the processor code from the policy lookup, and call it again whenever a treatment is added. +- Store the answer: the auth-requirements version of the same call drives the document checklist later. + +## What the user does + +**Search.** The front desk enters one identifier: ABHA number, member or policy number, or mobile. The system tries them in that order of strength and shows the matching policies with the insurer's name. The user picks the payer. + +**Confirm cover.** The screen calls eligibility with purpose validation and shows the result in words the desk can act on: policy in force or not, and what remains against the sum insured. Register the patient only once this comes back positive. If the limit is exhausted or the policy is not in force, say so and stop; do not let a registration proceed on a promise. + +**Capture the rest.** Communication address, attendant details, and whatever the payer's plan lists as required at registration. + +## What the system calls + +Two lookups from Getting Started, then one exchange: + +``` +POST participant/get/policies identifiertype + identifiervalue +POST /v1/coverageeligibility/check purpose: validation +``` + +The eligibility request needs the beneficiary's identifiers, the coverage or plan code, the payer ID and the provider ID. Send it to the processor code from the policy lookup. Cache the policy result against the patient. + +Call eligibility again, still with purpose validation, whenever a treatment is added later. The handbook's fallback: if the policy lookup returns nothing, call eligibility with purpose discovery first to learn the active policy code, then validation with it. + +```mermaid +sequenceDiagram + box rgb(220,239,227) Provider side + participant D as Front desk + participant B as Provider backend + end + box rgb(227,240,240) Exchange + participant X as NHCX + end + box rgb(220,232,245) Payer side + participant Y as Payer + end + D->>B: identifier typed at the desk + B->>X: participant/get/policies + X-->>B: payerid, processingid, memberid, productid + D->>B: user picks the policy + B->>X: coverageeligibility/check, purpose validation + X-->>B: 202 receipt, not the answer + X->>Y: forwards + Y->>X: coverageeligibility/on_check + X->>B: sealed CoverageEligibilityResponse + B-->>D: in force, balance remaining + D->>B: register the patient +``` + +## The four purposes + +One `CoverageEligibilityRequest` carries four different questions, and `purpose` decides which. Only `validation` is asked at the desk; the other three belong to the treatment screen in the next chapter. + +| Purpose | The question | When you send it | What comes back | +| :---- | :---- | :---- | :---- | +| `validation` | Is this coverage in force, and what is left? | At registration, and again whenever a treatment is added | `inforce`, and one benefit entry per wallet with allowed and used money | +| `discovery` | What coverages does this beneficiary have with you? | Only as a fallback, when the policy lookup returned nothing | Every active coverage, so you can pick a policy code | +| `benefits` | For these packages, what is covered? | On the treatment screen, once packages are chosen | Per item: excluded or not, benefit type, allowed money | +| `auth-requirements` | Is preauthorisation required, and what must come with it? | Before submitting a preauthorisation | Per item: `authorizationRequired`, and the mandatory document and questionnaire codes | + +`discovery` is defined in the specification and appears in no published sample. The other three do. + +## What goes in the bundle + +A `CoverageEligibilityRequest` in a collection bundle, alongside the `Patient`, the provider and insurer `Organization`s, the `Coverage`, and the `PractitionerRole` of the person making the check. + +| Element | Set it to | +| :---- | :---- | +| `purpose` | `validation` at registration; `discovery` as the fallback | +| `patient` | Reference to the Patient, who carries the member ID and ABHA number as identifiers | +| `insurer`, `provider` | References to the two Organizations | +| `insurance.coverage` | Reference to the Coverage carrying the policy code | +| `servicedDate` | Today | +| `enterer` | The desk user, as a PractitionerRole | + +Element tables and a worked example are in the FHIR Reference. Two details from the samples save a day each. The `Patient` carries a `PI` identifier that is the hospital's own MRN, and a hospital with none yet sends the literal string `NA`. And `servicedDate` is the date of service, not the date of asking. + +## Reading the answer + +The response comes back on `/v1/coverageeligibility/on_check`. It is not a small message: the payer echoes your entire request back before answering it, so the bundle has eleven entries where you sent six. + +| What you want | Where it is | +| :---- | :---- | +| The yes or no | `insurance[0].inforce` | +| The payer's own sentence for the desk | `disposition`, for example `Policy is currently in-force` | +| Money allowed on the wallet | `insurance[0].item[].benefit[].allowedMoney` | +| Money already used | `insurance[0].item[].benefit[].usedMoney` | +| Whether preauthorisation is needed | `item.authorizationRequired` | +| The match back to your request | `CoverageEligibilityResponse.request.reference` | + +Three traps in that bundle, all of them real in the published sample. + +**Index by `fullUrl`, not by resource type.** Entries 8 to 11 are the payer's own `Patient`, `Coverage` and `Organization`s, and they duplicate the resource types in your echoed request. A parser that finds the first `Patient` reads your own data back and reports it as the payer's answer. + +**Do not match on the request id.** The payer splits `CoverageEligibilityRequest.id` on the last slash and returns only the tail, so an id you sent as `PMJAY/HP/S/G` comes back as `G`. Match on `request.reference`, which is intact. + +**The balance is a subtraction.** `allowedMoney` alone reads as more cover than the patient has. Show allowed less used, and group the digits the Indian way. + +## Errors you will meet + +Business refusals travel inside the sealed response as a `PAYR-` code; protocol refusals arrive on the envelope. Map each to something the desk can act on. + +| Code | What it means | What the desk should see | +| :---- | :---- | :---- | +| `PAYR-1401` | Policy not allowed for the hospital | The hospital is not empanelled under that policy. Ask again with the beneficiary's own policy from the lookup | +| `PAYR-10xx` family | Not a covered member, policy not found, policy expired | The payer's own sentence, verbatim, and a stop on registration | +| `PAYR-11xx` family | The reference payer's eligibility-specific set | The payer's sentence, plus which field it names | +| `401` on the call itself | Token expired | Nothing. Fetch a new token and retry once | + +A refusal on this exchange is cheap. The same fault met at preauthorisation costs a round trip and a day, which is the argument for calling eligibility again whenever a treatment is added rather than trusting the answer from admission. + +## What to show and store + +- Show `disposition` verbatim; it is the payer's own sentence about the policy. +- Store the response with the case, because the auth-requirements version of this same call is what tells you which documents are mandatory later. +- Store the wallet figures and the moment they were read. When a claim is adjudicated against them months later, the adjudicator needs to see what was promised. +- Store the raw sealed message before you interpret it. Disputes are settled on what was actually received. +- Map the payer's error codes to desk-readable messages: not a covered member, policy not found, policy expired. The `PAYR-10xx` family covers these; the reference payer adds a `PAYR-11xx` set for eligibility specifically. diff --git a/site/docs/nhcx/v1/building-a-provider/ui-guide.md b/site/docs/nhcx/v1/building-a-provider/ui-guide.md new file mode 100644 index 000000000..5e01e1b2d --- /dev/null +++ b/site/docs/nhcx/v1/building-a-provider/ui-guide.md @@ -0,0 +1,224 @@ +--- +title: Provider UI guide +sidebar_label: Provider UI guide +description: "The provider screens flow by flow: what the user sees, what the UI must enforce, and where each value on screen comes from." +verification: unverified +source: NHCX-PMJAY-HMIS Integration Guide §5.2, TMS provider application steps; NHCX APIs to be called based on scenario, place-to-call column; NHCX Integration Handbook §5 and Appendix C; NHCX-PMJAY-HMIS Test Cases, scenario list; Standard Error Codes +sidebar_position: 8 +--- + +# Provider UI guide + +This chapter is about the screens. Everything before it said what the provider system calls and what goes in the bundle. This says what the person at the desk sees, what they type, what they must not be allowed to type, and where each piece of data on the screen comes from. It is written for the product owner and the front-end engineer, and it is organised as seven flows across the same ground the rest of the section covers. + +Two rules run through every screen. + +**Nothing the exchange already knows is typed.** Payer names, policy numbers, package names, rates, add-on codes, document lists and questionnaire text all come from elsewhere. From the participant service, the policy lookup, the insurance plan or the eligibility response. A field the user can edit is a field the payer can reject. + +**The screen never shows a decision the exchange has not sent.** Submitting is not approval. Every status on every screen is derived from a callback that was received, decrypted and stored, never from the fact that a request went out. + +That rule has a consequence which is easy to miss. A case the payer has not answered yet exists nowhere in the callback inbox, because nothing has come back. So a system that builds its case list only from received callbacks cannot show a waiting case. The case vanishes between submission and answer, which is the one moment the user most needs to see it. **Keep a record of what you sent as well as what came back.** Store, per request, the action, the protected header, the bundle and the exchange's receipt. Build every case screen from the two halves together. Sent with nothing back is the waiting state, and it is a state you have to be able to render. + +A case is keyed by its correlation ID, which the provider generates and which stays fixed for the whole conversation, so it is the only identifier available at the moment of submission. The payer's own case or preauthorisation number arrives later, on the answer. Show the payer's number to the user, since that is the number they will quote on the phone, but address the case internally by the correlation ID. Screen addresses are yours to choose; the chapter does not prescribe them. + +## In short + +- Two rules run through every screen: nothing the exchange already knows is typed, and no decision is shown that the exchange has not sent. +- Keep a record of what you sent as well as what came back, or a waiting case cannot be rendered. +- A case is keyed internally by correlation ID; the payer's own number arrives later and is what users quote. +- Seven flows cover the same ground as the rest of the section, screen by screen. +- Two things break a naive screen: a delivery failure on an answered case, and the same answer delivered twice. + +## Where the data comes from + +```mermaid +flowchart LR + PS[Participant service] --> PL[Payer list] + PS --> PO[Policy lookup] + PL --> UI[Screens] + PO --> UI + IP[Insurance plan cache] --> UI + EL[Eligibility response] --> UI + CB[Callback inbox] --> UI + UI --> BE[Provider backend] + BE --> X((NHCX)) + X --> BE +``` + +| On screen | Comes from | Editable | +| :---- | :---- | :---- | +| Payer name | Participant list, filtered by role | Pick from list | +| Policy, member ID, product | Policy lookup | Pick from list | +| Cover in force, balance remaining | Eligibility response, purpose validation | No | +| Approved amount, reduction note | Claim response on the answer | No | +| Specialty, package, rate | Insurance plan | Pick from list; rate fixed | +| Add-ons allowed and their limits | Insurance plan flags | Pick within limits | +| Required documents, questionnaires | Eligibility response, purpose auth-requirements; plan | No; answer, do not edit | +| Case status | What was sent, plus the callback inbox | No | +| Payer's query text, decision, reason | Callback inbox | No | +| UTR, deductions, net paid | Payment notice callback | No | +| Clinical findings, history, diagnosis, care team | The HMIS record | Yes, in the HMIS | +| Bill number, date, amount claimed | Hospital billing | Yes, within the approved amount | + +## Flow 1: find the patient and register + +**Screen.** One search box with a type selector: ABHA number, member ID, mobile. A results list showing the insurer name for each policy found. A confirm-cover panel that fills after the user picks a policy: in force or not, balance remaining, and the payer's own sentence about the policy shown verbatim. A register button that is disabled until cover is confirmed. + +**What the UI enforces.** Try identifiers in order of strength and tell the user which one matched. The balance remaining is the allowed amount less the amount already used, both of which the eligibility answer carries as money values on the benefit. Show that subtraction, not the allowed amount on its own: the allowed amount alone reads as more cover than the patient has. Group digits the Indian way, so four hundred and fifty thousand reads as 4,50,000, and give the figure a word beside it rather than a bare number. Disable registration when the policy is not in force or the limit is exhausted, and say why in the payer's words. + +**What the backend does behind it.** Resolves the processor code from the policy and stores it against the admission. The screen never shows the difference between insurer and processor, but every later call depends on it. + +```mermaid +sequenceDiagram + participant U as Desk user + participant S as Screen + participant B as Backend + participant X as NHCX + participant Y as Payer + U->>S: enter ABHA number + S->>B: find policies + B->>X: participant list, policy lookup + X-->>B: policies with insurer and processor + B-->>S: list, insurer names + U->>S: pick policy + S->>B: confirm cover + B->>X: eligibility, purpose validation + X-->>B: 202 receipt + Note over S: shows "checking cover", not a result + X->>B: callback, sealed response + B-->>S: in force, balance remaining + U->>S: register +``` + +**States the screen shows.** Searching, policies found, checking cover, cover confirmed, cover refused, registered. + +## Flow 2: plan the treatment + +**Screen.** A specialty picker limited to what the plan says this hospital may use, read from the cached insurance plan. A package picker under it, with the rate shown and locked. Add-on controls that appear only when the package's flags allow them, each capped at the plan's maximum. A live total against the balance remaining, turning red when it would exceed it. A document checklist and questionnaire panel that populate once the packages are chosen. + +**What the UI enforces.** Rate not editable. Quantity capped. A standalone package clears any other selection and says so. A package flagged as needing a parent will not stay selected without one. A government-reserved package is not shown to a private hospital. When the total exceeds the balance, the submit path is closed, not merely warned. + +**What the backend does behind it.** Reads the cached plan and derives the document checklist and questionnaires from the selected packages. Calls eligibility with purpose benefits to confirm the balance. Refreshes the plan if a policy-change communication has arrived since the cache was filled. + +Everything this screen offers comes from the insurance plan. The specialties, the packages, the rates, the add-on allowances, the flags that govern them, the documents each package demands and the questionnaires attached to it are all in the plan. Fetch it and cache it as the Insurance Plan chapter describes. + +The auth-requirements exchange is specified to return the required documents, and the rest of this section says so. The one published sample does not: it carries no benefit detail and no supporting-information requirements, and is indistinguishable from the plain benefits answer. So build the checklist from the plan, which certainly carries the requirements, and use the auth-requirements answer to confirm that authorisation is needed and to add anything it does return. A screen that depends on that answer alone will be empty against the only payer whose response has been published. + +```mermaid +flowchart TD + A[Pick specialty from plan] --> B[Pick package, rate locks] + B --> F{Flags on the package} + F -- implant allowed --> I[Implant picker, capped] + F -- stratification allowed --> R[Bed category picker, capped] + F -- standalone --> S[Clear other selections] + F -- unspecified --> U[Free-text name and amount] + B --> E[Eligibility: benefits, then auth-requirements] + E --> D[Document checklist and questionnaires] + D --> T{Total within balance?} + T -- yes --> P[Continue to preauthorisation] + T -- no --> N[Blocked, show the shortfall] +``` + +## Flow 3: preauthorisation, query, enhancement, cancel + +**Screen.** Four tabs in the payer's own order: medical information, admission information, treatment, finance. A documents panel driven by the checklist from flow 2, with each mandatory item shown as missing until attached and the submit button disabled until none are. After submission, a case panel with one status line and a timeline of everything sent and received. + +**What the UI enforces.** Every mandatory document attached. Every questionnaire the plan demands answered. Registration and admission dates present. Total within balance. Under PMJAY, a biometric token or a consent response, and admission not more than one day ahead. + +**The query inbox.** A queried case shows the payer's text, with the item it concerns highlighted, and a reply form that attaches documents and carries the case remarks. Reply goes out as a query answer, never as a new preauthorisation; the screen should make that impossible to confuse. + +**Enhancement.** Opens only on an approved case with no request in flight, offers only packages the plan marks enhanceable, and shows the already-approved items greyed alongside the new ones. + +**Cancel.** A reason picker with the seven documented reasons and a free-text field that is required when the reason is Other. Hidden once a claim has been raised. + +```mermaid +stateDiagram-v2 + [*] --> Draft + Draft --> Submitted: submit + Submitted --> UnderReview: receipt, then payer ack + UnderReview --> Approved: approved + UnderReview --> Reduced: approved at lower amount + UnderReview --> Queried: query + UnderReview --> Rejected: rejected + Queried --> Answered: reply sent + Answered --> UnderReview + Approved --> EnhancementPending: enhancement sent + EnhancementPending --> Approved: enhancement decided + Approved --> Cancelled: cancel confirmed + Rejected --> Resubmitted: resubmit + Resubmitted --> UnderReview +``` + +What each state shows the user: Submitted means "sent, no word yet", not approval. UnderReview appears only when the payer's receipt has come back. Approved shows the preauthorisation reference, the approved amount, and any reduction note verbatim. + +Three fields on the answer are worth naming, because the response carries several amounts and picking the wrong one misstates the decision. The **approved amount** for the case as a whole is the benefit total on the response, and the same category per line gives the approved amount for each item. The submitted category alongside it is what you asked for, not what you were granted. Showing it as the decision is the classic error. The **preauthorisation reference** is the payer's own number for the case. The **reduction note**, and any other sentence the adjudicator wrote, arrives as process notes and is shown verbatim. The Preauthorisation Response chapter in the FHIR Reference gives the full shape. + +## Flow 4: discharge and claim + +**Screen.** A discharge form: type (home, death, left against advice, discharged against advice), dates, and the documents that type requires. Then the claim form: bill number, date, bill attachment, amount claimed with the approved amount shown beside it, post-operative evidence. A single submit for the claim; under PMJAY the discharge is not a separate submission. + +**What the UI enforces.** Amount claimed not above the approved amount. Discharge type chosen before the claim opens. Under PMJAY: a fresh biometric or the discharge consent; for a LAMA or DAMA leaving before surgery, the line items replaced by the stay line with the user told the approved packages are voided. + +```mermaid +sequenceDiagram + participant U as Billing user + participant S as Screen + participant B as Backend + participant X as NHCX + U->>S: discharge type, dates, documents + U->>S: bill and amount + S->>S: amount within approved? documents complete? + S->>B: submit claim + B->>X: claim, workflow 15 + X-->>B: 202 receipt + Note over S: "submitted", awaiting decision + X->>B: interim callbacks, in process + B-->>S: "in process at payer" + X->>B: final callback + B-->>S: approved amount, or query, or rejection with reason +``` + +**States.** Draft, submitted, in process, forwarded, queried, approved, reduced, rejected. Rejected is final; the only action offered is appeal. + +## Flow 5: appeal a decision + +**Screen.** From a rejected or short-paid case, one appeal form: the payer's reason shown at the top, a document attachment that is required, and for a shortfall an amount field capped at the difference. A notice of how many appeals remain, and, once the Committee has decided, a closed state with the decision. + +**What the UI enforces.** No appeal without a document. Shortfall amount never above the difference. Under PMJAY, the shortfall form stays disabled until the settlement notice has arrived and been acknowledged, and neither form reopens after a Committee decision. + +## Flow 6: payments + +**Screen.** Per case, a payment panel listing each notice as it arrives, and on settlement the UTR as text on the page, gross, deductions itemised, and net. Reconciliation staff copy the UTR, so a copy control beside it earns its place. The value still has to be readable without one: a UTR that exists only inside the `value` attribute of an input box is not on the screen. The same goes for every other figure the payer sent. An acknowledge button per notice. A reconciliation view across cases for accounts, filterable by date and payer, exportable. + +**What the UI enforces.** There are two different acknowledgements here and the screen should not confuse them. The 202 receipt your callback returns is a transport acknowledgement, sent automatically the moment the notice arrives. Separately, the provider sends a real acknowledgement message back to the payer, a Task on workflow 17, and the Payment and Communication chapter gives its shape. That one is a business act, so it belongs on the screen: one button per notice, and a clear indication once it has gone. Send it whether or not the user clicks, and show that it went. A rejected payment notice shows as not paid, in red, with the case kept open. + +## Flow 7: the case list and the inbox + +**Screen.** Every case in one list with its current state and the time of the last callback, sortable by what needs action: queries waiting for an answer, turnaround alerts, payment notices unacknowledged. A separate inbox for payer communications by reason: information requests, turnaround alerts, grievances, wallet changes, policy changes, arbitration acknowledgements, each routed to the desk that owns it. + +**What the UI enforces.** Nothing on this screen is entered. It is a view over what was sent and what came back, and it is honest about silence. A case with no answer for longer than expected shows as waiting, with how long it has been waiting, and never as any decision. Do not offer a refresh or chase button unless you have implemented the status exchange behind it, because a control that does nothing is worse than no control. + +```mermaid +flowchart LR + CB[Callback inbox] --> M{Message type} + M -- decision on a case --> CL[Case list: update state] + M -- query --> Q[Query inbox] + M -- communication --> R{Reason} + R -- information --> Q + R -- TAT alert --> D[Claims desk] + R -- grievance --> G[Grievance desk] + R -- wallet or policy change --> P[Refresh plan or balance] + R -- arbitration ack --> A[Appeals view] + M -- payment notice --> PAY[Payments panel] + M -- protocol response --> E[Error view with the payer's code] +``` + +## Two things that will break a naive screen + +**A delivery failure arriving on a case that already has an answer.** A report on the error endpoint, or a protocol response saying a message could not be opened, is about one message. It is not about the case. A screen that simply shows the most recent thing that arrived will turn an approved preauthorisation into an error, which is wrong and alarming. Show the failure as a flag beside the state, not as the state. + +**The same answer delivered twice.** The exchange retries, so a callback can arrive more than once with the same call ID. A timeline built by appending everything received will show the payer approving the case twice. Treat a repeated call ID as the message you already have, and if the timeline mentions it at all, mention it as a repeat. + +## Errors the user should see + +Show the payer's error as the payer wrote it, with the code, and add one line saying what the user can do. The reference payer's messages already name the field: "Invalid procedure code received as X", "Insufficient wallet balance", "Existing case in progress for case number Y". Do not translate them into a generic failure. A protocol response, meaning the message could not be opened, is a system problem and goes to the integration team, not to the desk. diff --git a/site/docs/nhcx/v1/concepts/claim-settlement.md b/site/docs/nhcx/v1/concepts/claim-settlement.md new file mode 100644 index 000000000..b0f24e1db --- /dev/null +++ b/site/docs/nhcx/v1/concepts/claim-settlement.md @@ -0,0 +1,91 @@ +--- +title: Claim settlement +sidebar_label: Claim settlement +description: The ten steps of a health insurance claim, the parties to it, and the email-and-portal mechanism NHCX replaces. +verification: unverified +source: NHCX Documentation v1.5.0; NHCX Guide for Providers (NHA) +sidebar_position: 3 +--- + +# Claim settlement + +Claim settlement is the end-to-end process by which a policyholder's or treating hospital's request for payment of medical expenses is evaluated, approved, and fulfilled by the insurance company or its authorised representative. It begins when a formal claim is raised, either cashless at the point of care or as a reimbursement after discharge. It ends when the agreed amount is disbursed to the hospital or refunded to the policyholder. The process involves verifying the validity of the policy, confirming the medical necessity of the treatment, checking the claim against applicable sum assured limits or package rates, and finally releasing payment. A smooth and transparent claim settlement process is central to the value of health insurance, ensuring that policyholders receive the financial protection they were promised without undue delay or documentation burden. + +## In short + +- A claim runs from intimation to payment in ten steps, cashless or as a reimbursement. +- A Provider is the treating hospital's software; a Payer is the insurer's, or a TPA acting for one. +- Today most of this runs over email and some 30-odd insurer portals. +- That model gave traceability per claim, and made handling many insurers a complex affair. + +## What is health insurance? + +Health insurance, or an Insurance Policy, is a contract between an individual and a promisor where the latter pledges to pay the individual's medical bills up to a set limit in case of any ailment. The individual is commonly known as a policyholder or beneficiary, whereas the promisor can be an insurance company acting by itself or on behalf of a government, organisation or corporate entity. It protects personal savings from being drained by unexpected hospital stays, surgeries, and medicines. + +## What is an insurance claim? + +A health insurance claim is a formal request by a policyholder, or by the treating hospital, asking for payment or refund of money for medical care. It goes to an insurance company acting by itself or on behalf of a government, organisation or corporate entity. + +## Types of health insurance claim + +1. **Cashless.** A patient who is a beneficiary of a policy can avail treatment in a hospital without paying any amount out of pocket. That applies where the hospital is under a Preferred Network for the insurance company with an existing agreement executed between them, or is empanelled under a specific scheme governing the policy. The amount of expenses incurred during treatment is capped either by the Sum Assured under the policy or by mutually agreed Package Rates earmarked for a specific medical or surgical procedure. +2. **Reimbursement.** The patient pays the bills directly to the treating hospital and later gets the amount reimbursed by the insurance company upon submission of all relevant documents. This is common practice where the treating hospital is not part of the Preferred Network for that insurance company. NHCX has begun to define reimbursement flows on the network, but this documentation does not cover them yet. + +## Participants + +**Who is a Provider?** +A Provider is the treating hospital providing healthcare services to a patient who is a beneficiary under a policy. The HMIS software that the Provider hospital uses is known as the Provider Application, commonly shortened to just the Provider. + +**Who is a Payer?** +A Payer is the insurance company that has issued the policy and is liable to make payments for medical expenses incurred in treating the policyholder. In some cases independent TPAs act on behalf of an insurance company to settle such medical bills and thereby assume the role of a Payer. Likewise, the software used by a Payer is called the Payer Application, or simply the Payer. + +## Claim settlement process + +This is a two-way communication between the hospital and the insurance company, that is, between Provider and Payer. It concerns the policy, the treatment rendered to the policyholder patient, and the payment of hospital bills upon proper scrutiny of all relevant documents. It starts with the treating hospital conveying to the insurance company an imminent claim for a patient who is to be admitted for treatment. It runs until payment is realised for all expenses incurred while treating that patient. + +The entire journey of claim settlement can be broken down into the following distinct flows or use cases. + +1. **Intimation.** The hospital informs the insurance company that a patient holding one of its policies is about to be treated for the ailments diagnosed. + +2. **Policy verification by the hospital.** The hospital confirms that the patient holds a valid policy from that insurance company, and that the ailments to be treated are covered under it. + +3. **Beneficiary and tie-up verification by the insurer.** The insurance company confirms that a bonafide policyholder has turned up for treatment, and that a proper tie-up is in place with the hospital for providing cashless treatment. + +4. **Treatment plan intimation.** The hospital sets out the plan of treatment, the procedures to be carried out if any, and the expected length of stay necessary for treatment. + +5. **Preauthorisation.** Satisfied with the sanctity of the case, the insurance company sends a preliminary approval, commonly known as Preauthorisation or "PreAuth", authorising the hospital to go ahead with treatment. The patient is thereby admitted. + +6. **Enhancement.** During the course of treatment the hospital may return to the insurance company to notify it that additional procedures may need to be administered, or that an extension of stay is required. This is commonly known as an "Enhancement". + +7. **Discharge and document submission.** On discharge, the hospital submits all necessary documents to the insurance company, including consultation and clinical notes, diagnostic reports, medication details, the discharge summary and all bills. + +8. **Query.** The insurance company may ask for further explanation, or for documents it deems would substantiate the claim and assist its adjudication. Such communication from the insurance company to the hospital is called a "Query". + +9. **Adjudication.** The insurance company carries out a final adjudication and conveys the outcome to the hospital, stating whether the claimed amount is "Granted", "Denied" or "Partially Granted", with reasons. + +10. **Payment.** The insurance company pays the hospital the granted amount and notifies it of the banking transaction, along with other details such as taxation or deductions as applicable. + +```mermaid +sequenceDiagram + box rgb(220,239,227) Provider side + participant H as Hospital + end + box rgb(220,232,245) Payer side + participant I as Insurance company + end + H->>I: 1. Intimation + Note over H: 2. Checks the policy and what it covers + Note over I: 3. Checks the beneficiary and the tie-up + H->>I: 4. Treatment plan + I-->>H: 5. Preauthorisation + H->>I: 6. Enhancement, if the case needs more + H->>I: 7. Discharge and documents + I-->>H: 8. Query, if something is missing + H->>I: Answer to the query + I-->>H: 9. Adjudication: granted, denied or partly granted + I-->>H: 10. Payment and bank details +``` + +## Current mechanism for claim settlement + +Email has been by far the most prevalent practice for exchange of information between hospitals and insurance companies over decades. Tracking and tracing mail correspondence for a large number of patients is a tedious and time-consuming exercise. The absence of any dashboard makes it inconvenient for users at both Provider and Payer ends to identify immediate action items and act upon them. Insurance companies and TPAs have therefore come up with their own individual portals, where hospitals can identify a beneficiary using policy details, fetch basic insurance plans and upload documents. Although this model improved traceability for individual claims, handling policies from different insurance companies across some 30-odd portals makes it a complex affair. diff --git a/site/docs/nhcx/v1/concepts/index.md b/site/docs/nhcx/v1/concepts/index.md index 494211479..df10fc5dc 100644 --- a/site/docs/nhcx/v1/concepts/index.md +++ b/site/docs/nhcx/v1/concepts/index.md @@ -1,62 +1,37 @@ --- title: Core concepts -sidebar_label: What a claim is made of -description: What a claim is made of on NHCX, at the level the documentation set records. +sidebar_label: Core concepts +description: What a claim is made of on NHCX, and the concepts every integration depends on whichever side of the exchange you are building. verification: unverified -source: NHCX__NHCX-Website_DocumentDetails.md -sidebar_position: 4 +source: NHCX sandbox portal, Technical Specifications and Open Protocol pages; NHCX Integration Handbook v1.0; NHCX FAQs v1.2 +sidebar_position: 1 --- # Core concepts -This page records what the NHCX documentation set covers. An index is not a -specification: it names what each document covers without describing it. Nothing here has been -read from a payload or run against the exchange, and the rows are cited so you can go to the -source. +The ideas an integration depends on, whichever side of the exchange you are building. Read these +before writing code, and come back to them when a payload or a status word does not behave. -## A claim is a FHIR bundle +## In short -[FHIR](/docs/nhcx/v1/getting-started/glossary#fhir) is the format ABDM uses for clinical data, and NHCX uses it -for claims. Row 11 of [the index](/docs/nhcx/v1) holds which bundle to use per use case, which -value sets to build it from and which values are mandatory, one tab per use case. Row 14 is the -FHIR implementation guide covering both ABDM and NHCX. Row 2 introduces the standards. +- A claim on NHCX is a FHIR bundle, sealed for one recipient, inside an envelope the exchange routes but cannot read. +- Every substantive exchange is a request and a callback, never a synchronous answer. +- A workflow code in the header says which step a message is; a status word says how far along it is. +- PMJAY runs the same endpoints as any payer, with its own rules layered over them. -A claim being FHIR does not make it a health record. Records move on -[HIE-CM](/docs/nhcx/v1/getting-started/glossary#hie-cm), under a consent artefact, and a claim carries no consent -of its own. +## The pages here -## A workflow status travels in the protected header - -Each message carries a protected header, and in it a workflow status code that says where the -request has reached. Row 12 is the sheet of those codes. It is updated when codes change, which -means the codes are data your integration should read rather than constants to compile in. - -## A request cycle is closed by a protocol response - -A call is not finished when it is accepted. The sender has to send a protocol response back to -close the cycle. Row 15 covers that, together with how to handle error scenarios. Row 18 is the -sheet of every error code and scenario, by use case, for the bridge and for NHCX. - -## The two ends and the exchange - -A provider submits, a payer adjudicates, NHCX routes. Rows 9 and 10 hold the use cases each side -must cover for sandbox exit: which API, at whose end, which bundle, which status and the callback -logic. Row 8 covers policy linking and de-linking for a payer or TPA. Row 19 is the dummy payer -implementation, which is what a provider tests against before a real payer exists. - -## Tokens and keys - -Row 3 covers generating a token with the ABDM API for the NHCX APIs, so the session is ABDM's, -not a separate one. Row 20 covers generating the encryption certificate, a public and private key -pair. - -## What is missing - -No endpoint, no request shape, no response shape and no test case for this gateway is documented -in this portal. Row 23 is the Swagger for the use case APIs and the participant service, and it -is the first thing to read when this section is filled in. +| Page | What it covers | +| --- | --- | +| [What NHCX is](/docs/nhcx/v1/concepts/what-nhcx-is) | The exchange, its five objectives, its three rulebooks, who is on it, and what changes for a hospital that joins | +| [Claim settlement](/docs/nhcx/v1/concepts/claim-settlement) | The ten steps of a health insurance claim, and the email-and-portal mechanism NHCX replaces | +| [The NHCX way](/docs/nhcx/v1/concepts/nhcx-way-of-claim-settlement) | How those ten steps become six exchanges, and the request-and-callback pattern underneath them | +| [JWE, status and errors](/docs/nhcx/v1/concepts/jwe-status-and-errors) | The envelope and the sealed letter, every header field, the status words, and what to send where sources disagree | +| [PMJAY on NHCX](/docs/nhcx/v1/concepts/pmjay-on-nhcx) | What changes when the payer is PMJAY, and the five stages of an integrator's journey | +| [PMJAY scheme rules](/docs/nhcx/v1/concepts/pmjay-scheme-rules) | Unspecified, cyclic, medical, newborn, implant and stratification cases, and what each does to a bundle | ## Next +- [Get started](/docs/nhcx/v1/getting-started), the base framework every participant builds +- [Workflow codes](/docs/nhcx/v1/exchanges/workflow-codes), every code with the status word it expects - [Registries](/docs/nhcx/v1/registries), who is registered on NHCX -- [NHCX](/docs/nhcx/v1), the full document index diff --git a/site/docs/nhcx/v1/concepts/jwe-status-and-errors.md b/site/docs/nhcx/v1/concepts/jwe-status-and-errors.md new file mode 100644 index 000000000..1ca262a86 --- /dev/null +++ b/site/docs/nhcx/v1/concepts/jwe-status-and-errors.md @@ -0,0 +1,191 @@ +--- +title: JWE, status and errors +sidebar_label: JWE, status and errors +description: The envelope and the sealed letter, every header field, the status words, receipts, and what to send when the sources disagree. +verification: unverified +source: NHCX sandbox portal, Technical Specifications, Message Security and API Security pages; API Response Handling to avoid Failures; Common Mistakes while implementing through NHCX; Standard Error Codes (Aug 2026); Workflow Status Sheets (Aug 2026); NHCX Integration Handbook v1.0; NHCX FAQs v1.2 +sidebar_position: 5 +--- + +# JWE, status and errors + +The previous chapter got you onto the network. This one is about what a message is, how to tell where it is in its life, and what to do when it is refused. None of it belongs to any single use case, and all of it applies to every one. + +## In short + +- A message is a sealed letter inside an addressed envelope. The exchange reads the envelope only. +- A wrong envelope is refused at once; a wrong letter is refused later, on the callback. +- The workflow code says which step a message is; the status word says how far along it is. +- The correlation ID is the thread. Reusing one after an error is how a retry goes nowhere. +- Where the published sources contradict each other, one table here settles what to send. + +## Envelope and letter + +Picture a sealed letter inside an addressed envelope. + +The envelope is what the exchange reads. It carries who sent the message and who it is for, a number for this particular call and a number for the whole conversation it belongs to. It also carries which step of the claim it represents, the time, and a status word saying whether this is a request going out or an answer coming back. The exchange uses these to route and to keep records. + +The letter is the FHIR bundle. It is sealed with the receiver's public key before it leaves the sender, so the exchange can carry it but cannot read it. Only the receiver can open it. + +A few facts can be written on the outside of the envelope as well, for example the amount claimed. These are called domain headers. They let the exchange keep an audit trail without opening anything. + +This split explains a pattern that runs through the rest of the documentation. If the envelope is wrong, the exchange rejects the message and the sender hears immediately. If the letter is wrong, the receiver rejects it and the sender hears later, on the callback. Two kinds of error, from two different places. + +## One exchange or several + +NHCX is designed so that there can be more than one instance of it, each with its own participants, relaying messages between them when a sender and receiver are on different ones. This is why a participant's address carries the exchange name after the `@`, as in `1518@hcx` or `100001@sbx`. For a hospital talking to a payer on the same exchange, none of this is visible. It matters only in that the address format is fixed and should not be shortened. + +## Every field on the envelope + +The format is JWE, and every NHCX field on it starts with `x-hcx-`. + +| Field | In plain words | +| :---- | :---- | +| `sender_code` | Who is sending. Your participant ID. | +| `recipient_code` | Who it is for. For a provider, the processor code from the policy lookup. | +| `api_call_id` | A fresh number for this one call. | +| `request_id` | A number for this request. | +| `correlation_id` | A number for the whole conversation. The same on the request and on every answer to it. | +| `workflow_id` | Which step of the claim this is. The codes are listed in the Workflow Codes chapter. | +| `timestamp` | When it was sent. | +| `status` | Whether this is a request going out or an answer coming back, and how far along. | +| `ben-abha-id` | The beneficiary's ABHA number, without hyphens. | +| `error_details`, `debug_details`, `debug_flag` | Used only when something has gone wrong. | + +Two more fields, `alg` and `enc`, name the encryption used. The specification says `RSA-OAEP` with `A256GCM`; the handbook and the live samples use `RSA-OAEP-256`. Follow the samples. + +The serialisation is contested too. The message-security page says to assemble the result in flattened JSON serialisation; the FAQ and the handbook both say compact serialisation, the five-part dot-separated string, and every sample is compact. Build compact. + +**Domain headers** are a few facts written on the outside of the envelope for the exchange's records, such as the amount claimed, so it can keep an audit trail without opening the letter. Each use case says which facts it allows. + +## The same conversation + +Three of the numbers above are unique identifiers in the UUID format. `api_call_id` is new every time. `request_id` is new per request. `correlation_id` is the one to be careful with. + +The correlation ID is the thread. The initiator picks it when a conversation starts, the responder copies it back on the answer, and the exchange pairs the two. + +The sandbox exit checklists, which are what an integrator is certified against, state the rule differently. On a response, the correlation ID should be the **API call ID** of the request being answered, and it must differ from the response's own API call ID. The protocol pages support the simpler reading above. Confirm which the gateway pairs on before certification; both readings are in the corpus. If a request fails, the exchange retires that correlation ID, and the next attempt needs a fresh one; reusing it is how a retry silently goes nowhere. + +The timestamp is contested on two axes. Format: the protocol page defines it as a Unix timestamp, and the sample header in Common Mistakes carries epoch milliseconds, while the handbook and FAQ both use ISO 8601. Zone: the FAQ says UTC with a trailing `Z`, the handbook says Indian time with `+05:30` and that UTC will fail validation. The sample bundles use ISO with `+05:30`. It is a validated field; establish the form with the payer before building. + +## Status words + +The `status` field says how far along a message is. Only a few values exist, and they pair with the workflow code: the code says which step, the status says where that step stands. + +- `request.initiated` is what an initiator sends. It means "I am starting this". +- `response.partial` is what a responder sends to say "received, working on it", or to give an interim answer. +- `response.complete` is a final answer. +- `response.error` means the message was refused. + +Three more are the exchange's own: `request.queued`, `request.dispatched` and `request.stopped`. They show up in receipts and status checks, and describe where the exchange has got to in delivering something. + +Put together, a preauthorisation's life reads like this. + +| Who sends | Workflow code | Status | Meaning | +| :---- | :---- | :---- | :---- | +| Provider | 12 | `request.initiated` | New preauthorisation | +| Payer | 20 | `response.partial` | Received, under review | +| Payer | 24 | `request.initiated` | Query raised. The payer is now the initiator. | +| Provider | 19 | `response.complete` | Query answered | +| Payer | 21 | `response.complete` | Approved | + +Using the wrong status is the first item on the portal's list of common mistakes. The full table of which status goes with which code is in the Workflow Codes chapter. + +```mermaid +sequenceDiagram + box rgb(220,239,227) Provider side + participant P as Provider + end + box rgb(220,232,245) Payer side + participant Y as Payer + end + P->>Y: 12, request.initiated: new preauthorisation + Y-->>P: 20, response.partial: received + Y->>P: 24, request.initiated: query, payer now initiates + P-->>Y: 19, response.complete: query answered + Y-->>P: 21, response.complete: approved +``` + +## The receipt + +When a message reaches the exchange, or reaches your callback, the receiver answers straight away with `202 Accepted` and a short receipt. The receipt repeats the call and correlation numbers, names sender and recipient, says what kind of message it was, and gives a protocol status of `request.queued`, `request.dispatched` or `request.error`. It is not the decision. It says only that the message was taken in. + +Your own callback endpoint must send exactly this receipt, within 30 seconds. Anything else, including a slow `200`, is read as a failed delivery. + +## When a message is refused + +Refusals come from two places, and the envelope-and-letter split above says which. + +**The exchange refuses the envelope.** A missing header, an unknown recipient, an expired token, a bad status value. The sender hears at once, in the response to its own call. + +**The receiver refuses the letter.** It could not decrypt the bundle, or the bundle failed validation. The receiver sends back a **protocol response** on the callback: the same envelope fields, `status` set to `response.error`, and a short code, message and trace in `error_details`. The exchange logs the header part for audit. Business reasons, such as "this patient is not covered", travel inside a sealed response instead, so the exchange never sees them. + +Error codes come in families. `PAYR-` codes are the payer's, and read like plain sentences: not registered with this payer for this policy, policy does not exist, coverage balance insufficient, claim amount exceeds the preauthorisation, duplicate claim. Gateway and bridge codes cover the envelope side. The full sheet, updated 11 August 2026, is on the portal. + +**Retries and the error API.** If your callback does not send a proper receipt, the exchange tries five times and then drops the request, retiring its correlation ID. It then reports the failure to the original sender on a separate endpoint, `/v1/error`, which every participant must host. A system without it never learns that its request died. + +## Codes met live + +The error table reads like a list of code lookups, and several of the codes mean something else in the running sandbox. From the September 2026 run: + +| Code | The message | What it turned out to mean | +| :---- | :---- | :---- | +| `PAYR-1027` | Invalid item id found for item in claim component | `Claim.item` has no FHIR element `id` (`Item/1`). Nothing to do with the package code | +| `PAYR-1083` | No HPR details found for the practitioner … category code as HPIN | The `Practitioner` carries no identifier typed `HPIN` | +| `PAYR-1238` | Beneficiary is having an active preauthorization request at this hospital with reference number … | Scheme rule, not a bundle fault: one live preauthorisation per beneficiary per hospital. The reference number ends in the SHA's case id | +| `PAYR-1401` | Policy not allowed for the hospital | The plan was asked for under a policy the hospital is not empanelled under; ask under the beneficiary's own | +| `PAYR-1019` | Invalid sequence received in supporting info element | A `supportingInfo` entry with no `sequence`; number the whole list once it is assembled | +| `PAYR-1083` | No HPR details found for the practitioner | The `Practitioner` carries no identifier typed `HPIN` | +| `PAYR-1256`, `PAYR-1363` | Response for Authentication Consent Questionnaire is missing | The plan's consent questionnaire, unanswered, where no biometric token was taken | +| `PAYR-1008` | Invalid content type … / Invalid input, code and reason code | Two different faults on one code: a document outside pdf, jpg, jpeg, png and fhir+json; or a Task code paired with a reason the scheme does not accept | +| `PAYR-1245` | Only one conservative procedure can be booked for a case | The master's `ProcedureType`; an enhancement on a conservative case must add a medical package | +| `ERR-PYR-CLM-007` | No prior preauthorization or claim record found for case number | The claim was sent under a number of its own instead of the pre-authorisation's | +| `PAYR-1322` | Active instance found for case number | A request is already open on that case; the scheme takes one at a time | + +`NHCX-1010`, *no data with given correlation id for call back request*, belongs beside them and is the exchange's own. It is what a payer hears when it answers a submission it left silent. NHCX redelivers an unanswered request, drops it after a few tries and retires the correlation, so a verdict taken minutes later has nowhere to land. The remedy is the one the live PMJAY payer uses: acknowledge the submission at once with a `ClaimResponse` whose `outcome` is `queued`, and send the decision later on the same thread. + +Two things follow. A refusal in the `PAYR-102x` block is structural, so check ids and sequences before values. And the refusals arrive in order: the SHA validates the bundle first and applies the scheme's rules only to a bundle that passed, so `PAYR-1238` is, perversely, the first sign the bundle is right. + +## The mistakes everyone makes + +The portal keeps a list. In plain words: + +1. Wrong status word for the leg of the message. +2. No `/v1/error` endpoint, so failures go unnoticed. +3. Answering a callback with something other than `202` and the receipt. +4. Missing or malformed envelope headers. +5. In production, the wrong registry ID: providers send the HFR ID, payers the IRDAI ID without leading zeros. +6. Forgetting the `Accept: application/json` header. +7. Addressing the insurer's code instead of the processor's. +8. Reusing a correlation ID, especially after an error. +9. Retrying on a `401` with the same expired token instead of fetching a new one. +10. Trying to de-link a policy from a participant that did not link it. + +## Everything is logged + +The exchange records every call it receives: the envelope, the encryption details, sender and recipient, and whether validation passed. It never records the letter. Participants can query the audit trail for their own transactions, and NHA publishes reports from it for payers, providers, regulators and observers. + + +## What to send when the sources disagree + +This chapter and the ones after it flag every place the published documents contradict each other, which is the honest thing to do but leaves you with a decision to make on each one. This table makes those decisions once. Every value here is what the published sample payloads actually carry, and where no sample settles it the row says so rather than inventing a ruling. + +Send these. If a payer rejects one, that rejection is better evidence than anything here, and you should follow it. + +| Contested point | Send this | Why | +| :---- | :---- | :---- | +| Key wrapping algorithm | `RSA-OAEP-256` | The handbook, the samples and the Postman collection agree. One protocol page says `RSA-OAEP`; it is outnumbered | +| Content encryption | `A256GCM` | Uncontested in the samples | +| Serialisation | Compact, five parts | The message-security page says flattened JSON. The FAQ, the handbook and every sample use compact | +| Timestamp format | ISO 8601 with `+05:30` | The samples use it throughout. Accept a Unix epoch on the way in | +| Correlation ID on a response | Copy the request's `correlation_id` | The protocol pages say so. The exit checklists say use the request's `api_call_id`; that reading makes threading impossible | +| `api_call_id` | A fresh UUID on every message, including responses | So a response and its request never share one | +| Identifier type for an ABHA number | `ABHA` | From the NRCeS identifier-type code system, not the HL7 `JHN` | +| Cancellation Task input name | `initimationNumber` | The misspelling is in the payer's own payload. Send it | +| `entity_type` in a receipt | Derive it from the path | The second-to-last segment, or the last where that is `v1`, with `on_` stripped | + +Two points genuinely have no answer, and guessing is worse than knowing you are guessing. + +**The workflow code for eligibility, insurance plan, search, predetermination and status.** The workflow sheet lists none. The header is not marked optional anywhere. Agree a value with your payer in writing before the first call, and record what you agreed. + +**Domain headers.** This chapter says a few facts may be written on the outside of the envelope and that each use case says which it allows. No use case chapter names one, in this documentation or in the sources behind it. Send none until a payer asks for one. diff --git a/site/docs/nhcx/v1/concepts/nhcx-way-of-claim-settlement.md b/site/docs/nhcx/v1/concepts/nhcx-way-of-claim-settlement.md new file mode 100644 index 000000000..01ef7d524 --- /dev/null +++ b/site/docs/nhcx/v1/concepts/nhcx-way-of-claim-settlement.md @@ -0,0 +1,177 @@ +--- +title: NHCX way of claim settlement +sidebar_label: The NHCX way +description: "How the ten steps become structured exchanges: the request and callback pattern, and the six exchanges that carry a claim." +verification: unverified +source: NHCX sandbox portal, Technical Specifications and Open Protocol pages; NHCX Integration Handbook v1.0 (Aug 2026); NHCX FAQs v1.2 (Aug 2026) +sidebar_position: 4 +--- + +# NHCX way of claim settlement + +The ten steps of claim settlement do not change under NHCX. The same parties make the same decisions about the same case. What changes is the medium: instead of email threads and some 30-odd insurer portals, each step becomes a structured exchange over a single gateway, carrying FHIR resources rather than PDFs and scans. + +## In short + +- The ten steps do not change. The medium does: structured exchanges over one gateway, carrying FHIR rather than PDFs. +- Every substantive use case is an asynchronous pair: an action endpoint, then a matching `on_` callback. +- There are two acknowledgements. The first says only "accepted and passed on". +- Six exchanges carry the claim; Task, search, ABHA linking and predetermination sit off the main path. +- Both sides host endpoints, so no participant is purely an API caller. + +## From portals to an exchange + +Today a hospital integrates separately with every insurer. Each new payer means another portal, another login, another upload convention. The cost grows with the number of payers, which is why smaller hospitals often stay out of cashless arrangements altogether. + +On NHCX, a Provider integrates once and a Payer integrates once, each with the exchange. Every Provider can then reach every Payer, and the reverse, without either side building anything specific to the other. As on a securities exchange, participants connect to the platform rather than to each other. + +## What travels over the exchange + +Every exchange carries a FHIR bundle, and this is what makes the rest possible. + +A discharge summary sent as a PDF can be stored and read by a person, but nothing downstream can act on its contents. The same information as FHIR resources lets the payer's system read the diagnosis, the procedure codes, the line items and the amounts as data. That is the precondition for auto-adjudication and for the parameter-by-parameter reporting described in the introduction. Standard terminologies are used alongside FHIR so that a code written by the Provider means the same thing when read by the Payer. SNOMED CT for clinical concepts, ICD for diagnoses, LOINC for laboratory observations, and the value sets NRCeS publishes for claim-specific codes such as packages, benefit categories and supporting-information types. + +## The request and callback pattern + +Claim decisions take time. A preauthorisation may sit with a medical officer for hours, an adjudication for days. NHCX therefore models every substantive use case as an asynchronous pair: + +1. The initiator calls an action endpoint, for example `/v1/preauth/submit`. The exchange validates the request, acknowledges it, and routes it onward. +2. The responder does its work, then calls the matching `on_` endpoint, `/v1/preauth/on_submit`, to deliver the outcome back through the exchange. + +There are two acknowledgements, not one, and the difference matters. When the initiator sends a request, the exchange answers straight away with a receipt that says only "accepted and passed on". That receipt is not the decision. The decision arrives later, on the callback, when the responder has actually done the work. The exchange never answers a claim question on the spot; anyone waiting for a synchronous yes or no will wait forever. + +```mermaid +sequenceDiagram + box rgb(220,239,227) Provider side + participant P as Provider + end + box rgb(227,240,240) Exchange + participant X as NHCX + end + box rgb(220,232,245) Payer side + participant Y as Payer + end + P->>X: preauth/submit + X-->>P: 202 receipt: accepted, not decided + X->>Y: forwards the request + Y-->>X: 202 receipt + Note over Y: hours or days pass + Y->>X: preauth/on_submit with the decision + X-->>Y: 202 receipt + X->>P: delivers to the provider's callback + P-->>X: 202 receipt +``` + +Two consequences follow. Participation is never purely a matter of calling APIs, because in one half of every exchange each side is the responder and must host endpoints. And every request has an acknowledgement and a matching response, which is what makes the process auditable. + +## What every exchange needs + +Four things are common to all traffic, before any claim-specific call is made. + +- **Identity.** Participants are registered on the exchange and addressed by participant ID. The registry can be queried by role to find them. +- **Authentication.** Calls carry a token obtained from the ABDM gateway's sessions endpoint, with the same login a hospital already has from Milestone 1. +- **Confidentiality.** Payloads are encrypted for the receiver, using the receiver's public key, fetched from the exchange against their participant ID. +- **Traceability.** A status call returns the state of any request already triggered, so neither side has to infer what happened from silence. + +Both Providers and Payers implement these. They are the shared use cases, and the next chapter takes each in turn: how a participant is registered and found, how a session is obtained, and how a receiver's key is fetched and used. + +## The exchanges in a claim + +Each stage of the journey becomes an exchange on the network. Six carry the claim, and a handful sit off the main path. + +```mermaid +flowchart TD + classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 + classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 + A[Patient arrives] --> B[Coverage eligibility] + B --> C[Insurance plan] + C --> D[Preauthorisation] + D --> Q1{Payer answer} + Q1 -- query --> D3[Answer the query] --> Q1 + Q1 -- approved --> E[Treatment] + E --> E2{Case needs more?} + E2 -- yes --> F[Enhancement] --> Q1 + E2 -- no --> G[Discharge and claim] + G --> Q2{Payer answer} + Q2 -- query --> G3[Answer the query] --> Q2 + Q2 -- decided --> H[Adjudication] + H --> I[Payment notice] + I --> J[Acknowledgement] + H -. rejected or paid short .-> K["Task: reprocess or shortfall"] + D -. withdraw .-> L["Task: cancel"] + class A,B,C,D,D3,E,E2,F,G,G3,J,K,L provider + class Q1,Q2,H,I payer +``` + +### Coverage eligibility + +A patient arrives and presents a policy, or is found against one by mobile number or ABHA. Both sides now need the same assurance from opposite directions. The hospital needs to know the policy is live and covers the ailment. The insurer needs to know a genuine beneficiary has turned up at a hospital it has a tie-up with. + +*Policy verification by the hospital* and *beneficiary and tie-up verification by the insurer* are therefore not two conversations on the network. They are one exchange. The Provider asks whether coverage is in force, valid at a date, and what benefits and plan details attach to it. The Payer answers through the callback. What used to take a phone call and a portal login is settled in one round trip. The answer is a machine-readable set of limits the hospital's system can act on rather than a screenshot someone reads. + +This exchange is also the gate on registration. A patient is registered for treatment only once coverage is confirmed, and repeat the check whenever an additional treatment is added, so the remaining limit is known before anything is submitted. + +### Insurance plan + +Eligibility answers whether a patient is covered. The insurance plan answers what the policy itself contains: the covered services and their limits, the conditions and exclusions, the documents required, and the clinical guidelines that apply. + +It is a separate exchange because it changes on a different clock. Eligibility is asked per patient, per visit. The plan belongs to the policy and can be fetched once and kept, refreshed when the payer amends or renews it. Holding it locally is what lets a hospital system populate a form with the right benefits and check a treatment against the policy before anyone submits anything. + +### Preauthorisation + +With coverage established, the hospital sets out what it intends to do: the line of treatment, the procedures, the expected length of stay. *Treatment plan intimation* and *preauthorisation* are the two halves of one exchange. The Provider submits the request, the Payer adjudicates it and returns the decision through the callback, and the patient is admitted on that decision. + +The same exchange carries the whole preauthorisation cycle, not just the first request. An *enhancement*, where the case needs an additional procedure or a longer stay, is raised against the cycle already open. A resubmission revises a request that was rejected or approved for the wrong amount. A cancellation withdraws it. All of these reuse the same bundle, which is why the exchange is best thought of as a conversation about one authorisation rather than a single call. + +### Query + +*Query* is the one stage where the direction reverses. Everywhere else the Provider initiates and the Payer responds. Here the Payer asks for something it needs before it can decide, and the Provider answers. + +That reversal is why the same query endpoints appear on both sides of the NHCX Use Cases chapter: once as the Payer raising the request, once as the Provider answering it. A query is also not a rejection. The case stays open, and answering it continues the original submission rather than starting a new one. + +### Claim + +At discharge, everything that was previously printed, scanned and emailed becomes the claim. *Discharge and document submission* is a single submission carrying the consultation notes, diagnostic reports, medication record, discharge summary and bills as FHIR resources. That is what lets the Payer read the values rather than look at pictures of them. + +On the general network there is also a step before the claim. A hospital can send a provisional discharge submission while the patient is still on the ward, so the payer can check the treatment against the preauthorisation and raise anything it needs before the patient leaves. Under PMJAY this step does not exist and discharge is folded into the claim. + +*Adjudication* is not a separate exchange. It is the Payer's response to the claim already submitted, carrying whether the amount is granted, denied or partially granted, and the reasons. So the claim and its decision are two halves of one exchange, in the same way as the preauthorisation and its decision. + +### Payment + +*Payment* arrives as a notice from the Payer carrying the bank reference details and the status of the transfer, which the Provider acknowledges. Reconciliation gives the breakup for the case. + +The acknowledgement closes the claim on both books at the same moment, which the current email-and-portal mechanism cannot do, so neither side has to chase the other for confirmation that a payment landed. + +### Off the main path + +Four more exchanges exist without belonging to a single admission. + +**Task.** Where a Provider wants a rejected or partly paid claim looked at again, or wants an approved preauthorisation cancelled, it does not reopen the original exchange. It raises a **Task**, a general-purpose request that names the case it concerns and what is being asked of it, answered by the Payer through the corresponding callback. Reprocess, cancel and arbitration are all carried this way, which is why one exchange covers what look like three unrelated actions. + +**Search.** Providers and regulatory bodies can look up claim information, which is a read rather than part of any claim's progress. + +**ABHA linking.** A Payer links an ABHA number to a policy when the policy is created, and can de-link it later. This is what makes the beneficiary findable by ABHA at the point of care, and it is covered in the next chapter. + +**Predetermination.** Before treatment is planned in detail, a hospital can ask the payer what it would pay for a proposed course of treatment. The payer answers from the policy and the beneficiary's history. It uses the same shape as a preauthorisation but commits nobody to anything. + +One stage of the journey has no exchange of its own. *Intimation* is absorbed into the eligibility and preauthorisation exchanges rather than carried separately. + +## What a participant must build + +- **A Provider application** calls the exchange for eligibility, preauthorisation, claim submission, search, reprocessing and cancellation, and hosts callbacks for the Payer's communication requests and payment notices. +- **A Payer application** hosts callbacks for eligibility, plan details, preauthorisation and claim submissions, and calls the exchange to raise communication requests, send payment notices and manage ABHA-to-policy links. + +Both implement the shared use cases. + +## Where the detail lives + +Three chapters follow, and they divide the work between them. + +The next chapter, Participants and Policies, covers the groundwork every exchange depends on. How a participant joins the network and is found on it, how a session is obtained, how keys are made and fetched, and how a beneficiary is matched to a policy. None of it is a claim exchange, and all of it has to be in place before one can be attempted. + +JWE, Status and Errors then describes the message itself. The envelope and the sealed letter inside it, every field on the envelope, the status words, what the exchange's receipt looks like, and what happens when something is refused. + +The NHCX Use Cases chapter then takes each exchange named here and gives its endpoints. The action endpoint the initiator calls, the callback the responder implements, and the workflow code that tells one transaction from another where several share an endpoint. The codes themselves are collected in the Workflow Codes chapter that follows it. The exchanges are grouped there by who drives them: shared by both sides, driven by the Provider, or driven by the Payer. That grouping tells an integrator which half of each exchange it has to build. diff --git a/site/docs/nhcx/v1/concepts/pmjay-on-nhcx.md b/site/docs/nhcx/v1/concepts/pmjay-on-nhcx.md new file mode 100644 index 000000000..2ba2ab329 --- /dev/null +++ b/site/docs/nhcx/v1/concepts/pmjay-on-nhcx.md @@ -0,0 +1,92 @@ +--- +title: PMJAY on NHCX +sidebar_label: PMJAY on NHCX +description: What changes when the payer is PMJAY, why the scheme is moving off TMS, and the five stages of an integrator's journey. +verification: unverified +source: "NHCX-PMJAY-HMIS Integration Overview; NHCX-PMJAY-HMIS Integration Guide, FRD v1.0 (Mar 2026); PMJAY Hospital Migration to HMIS via NHCX; NHCX PMJAY Integration Handbook v1.0 (Aug 2026); NHCX FAQs v1.2 #18" +sidebar_position: 6 +--- + +# PMJAY on NHCX + +Ayushman Bharat Pradhan Mantri Jan Arogya Yojana, known as PMJAY, was launched on 23 September 2018. It is the largest health assurance scheme in the world, providing a health cover of Rs. 5 lakh per family per year for secondary and tertiary care hospitalisation to over 10.74 crore poor and vulnerable families, roughly 50 crore beneficiaries, forming the bottom 40 percent of the population. It is fully funded by government, with the cost of implementation shared between the Centre and the states. + +Claim adjudication under PMJAY runs through three integrated systems: the Beneficiary Identification System (BIS), the Transaction Management System (TMS), and the Hospital Empanelment Module (HEM). The key decisions sit in TMS, taken at preauthorisation by the Preauthorisation Processing Doctor (PPD) and at settlement by the Claim Processing Doctor (CPD). + +The previous chapters described how a claim moves between a Provider and a private insurer over NHCX. This chapter covers what changes when the Payer is PMJAY. + +## In short + +- PMJAY is the world's largest health assurance scheme, running on the same NHCX endpoints as any payer. +- Claims processing today depends on the TMS provider system, which forces double data entry. +- An ABDM-enabled HMIS integrated with NHCX can run PMJAY workflows inside its own system. +- Four things differ from a private insurer: the InsurancePlan, biometrics, structured documents, and how queries travel. +- Going live is a mapping: NHA links the hospital's HEM ID to its NHCX participant ID by hand. + +## The problem with a TMS-only workflow + +PMJAY claims processing today depends on the TMS 2.0 Provider System, whether or not the hospital runs its own HMIS. That creates four difficulties. + +- **Duplication of data entry.** The same case is keyed into the hospital HMIS and again into TMS, increasing administrative workload and the risk of errors. +- **Lack of interoperability.** Beneficiary, clinical and claims data cannot move cleanly between systems. +- **Single-system dependency.** Relying exclusively on one provider system limits scalability and operational flexibility. +- **Restricted innovation.** System constraints leave little room for hospitals and technology partners to build around the workflow. + +## The change + +A hospital running an ABDM-enabled HMIS integrated with NHCX can operate PMJAY workflows entirely within its own system, with no mandatory portal usage. Claims move directly from the hospital system to the payer system over the exchange. + +- **No mandatory TMS dependency.** The PMJAY workflow lives inside the HMIS rather than beside it. +- **Single-source data capture.** PMJAY data is recorded once in the HMIS and reused for claims processing, removing the re-entry and reconciliation described above. +- **Choice of system.** Hospitals are no longer tied to one PMJAY processing system and can pick any ABDM-enabled HMIS. +- **Scale.** HMIS-based integration handles higher transaction volumes more reliably than a portal-based workflow. + +## What this means for an empanelled hospital + +**PMJAY becomes part of routine operations.** Cases are handled inside the hospital's normal workflow rather than as a separate portal-driven activity, and are no longer exposed to portal downtime, access constraints or concurrent user limits. + +**Structured data enables automation.** Preauthorisation and claim processing can be automated, cutting cost and turnaround, reducing manual error and improving data quality, which is the basic requirement for any AI model and for fraud control. + +**Audit and finance improve.** All PMJAY clinical and financial records sit within hospital systems, simplifying audits, internal reviews and compliance, and claims data flows natively into hospital billing and accounting. + +**Training simplifies.** Staff learn one system instead of managing separate roles and workflows across HMIS and TMS. + +## Where PMJAY differs from a private insurer integration + +Once NHCX integration is complete, an integrator can send claims to any private insurer. PMJAY is a national assurance programme, so it carries scheme-specific requirements on top. The endpoints themselves do not change. Four things do. + +**The InsurancePlan response carries the scheme configuration.** PMJAY uses the InsurancePlan FHIR bundle heavily. It is configured at hospital level and holds the available specialties, package costs, standard treatment guidelines, questionnaires and the mandatory documents required at preauthorisation and claim. This configuration drives most of what follows, so fetching and storing it correctly is a precondition rather than a convenience. + +**Biometric authentication is mandatory.** The scheme requires biometric verification of the beneficiary at registration, during treatment and at discharge. This is an additional API, outside the NHCX set, that a PMJAY integrator must implement. + +**Supporting information must be structured.** Sending scanned documents is not sufficient. Clinical information must travel in ABDM-defined structured Health Information Types. + +**Document queries do not use the Communication API.** When the PMJAY payer wants more documents or clarification on a preauthorisation or claim, it queries the case itself. The provider answers on the same preauthorisation or claim endpoint with the same bundle, distinguished only by the workflow code. The Communication API is still used, but for other things. Telling a hospital a case has breached its turnaround time, passing on a grievance, or announcing a change to the beneficiary's wallet or to a package rate. Also asking for extra information outside a formal query, and acknowledging an arbitration request. A hospital system must still be able to receive it. + +Set against the flows in the NHCX Use Cases chapter, the picture is: + +- **Get Insurance Plan, Get Policy, Coverage Eligibility Check, Claim Submission, Payment Notice and Status Check** behave the same as on any NHCX integration. +- **Preauthorisation** behaves the same, except that mandatory biometric authentication of the beneficiary must be completed before it is submitted. +- **Communication Request** is not used for document queries, which travel on the preauthorisation and claim endpoints instead. It is used for turnaround-time alerts, grievances, wallet and policy updates, and arbitration acknowledgements. + +## The integrator journey + +The route to a PMJAY integration runs in five stages. + +1. **Get compliant for ABDM Milestone 1.** Request access to the sandbox APIs, integrate against them, complete functional testing and the security audit (WASA), give the HTC demo, and go live for ABDM M1. +2. **Register on the NHCX sandbox.** Register using the ABDM Client ID, generate a participant ID, create the public and private key pair, and work through the NHCX documentation until the API flows are properly understood. +3. **Build the integration.** Test the flows against the NHCX dummy payer, implement every use case API including biometric authentication and structured data exchange, and test all cases internally rather than only the happy path. +4. **Exit the sandbox.** Run the internal demo covering interoperability and FHIR bundle validation, give the PMJAY team demo, complete WASA and the HTC demo, and submit the NHCX sandbox exit form. + +5. **Go live by mapping.** After the participant is created and configured in production, the hospital raises a ticket. It carries the existing PMJAY hospital ID, the HEM ID used in TMS, and the new NHCX participant ID. NHA's operations team maps the two by hand. That mapping is the switch: preauthorisations and claims raised before it finish their life in TMS, and everything raised after it goes through the HMIS. For a while a hospital is running both, so this step is planned rather than flipped. + +Two practical notes. To begin the integration, the integrator shares the Participant ID, Client ID and Registry ID with the NHCX team for onboarding onto the PMJAY staging environment. The Registry ID is then used as the Provider ID on sandbox. On successful completion, the integrator receives production keys for NHCX, which also serve for processing private insurer claims. + +## About the source + +This chapter and the next are drawn from four documents: + +- The PMJAY Hospital Migration to HMIS via NHCX guide. +- The NHCX-PMJAY-HMIS Integration Overview. +- The Functional Requirement Document for NHCX-PMJAY-HMIS Integration, version 1.0, dated March 2026, prepared by the NHCX team at NHA. +- The NHCX Integration Handbook, version 1.0, which is the source for the workflow codes, the supporting info category and code combinations, and the gateway validation behaviour. Where the Handbook's gateway validation messages contradict the FRD, the next chapter follows the validation messages and says so. The FRD carries a disclaimer that it is work in progress and subject to revision, and the integrator journey above is marked tentative and not final. Nothing here has been verified against a running sandbox. diff --git a/site/docs/nhcx/v1/concepts/pmjay-scheme-rules.md b/site/docs/nhcx/v1/concepts/pmjay-scheme-rules.md new file mode 100644 index 000000000..603bb7ab6 --- /dev/null +++ b/site/docs/nhcx/v1/concepts/pmjay-scheme-rules.md @@ -0,0 +1,69 @@ +--- +title: PMJAY scheme rules +sidebar_label: PMJAY scheme rules +description: "The scheme rules that change what goes in a bundle: unspecified, cyclic, medical, newborn, implant and stratification cases." +verification: unverified +source: NHCX FAQs v1.2 §24 to §29; NHCX PMJAY Integration Handbook §6.6; Insurance Plan Implementation Guide; Standard Error Codes, Preauth PAYR-1259 to 1273 +sidebar_position: 7 +--- + +# PMJAY scheme rules + +The exchanges in the previous chapter are the same for every PMJAY case. What varies is the case. The scheme has a handful of rules that change what goes into a bundle, and a hospital system has to recognise each situation before it builds one. + +## In short + +- The exchanges are the same for every case. What varies is the case. +- Five situations change what goes in a bundle: unspecified, cyclic, medical, newborn, and implant or stratification. +- An unspecified procedure is always planned, always a single line item, and always validated on the server. +- A cyclic procedure needs live biometrics at every visit, and pays only for the cycles captured. + +## Unspecified procedures + +Sometimes a patient needs something the package list does not name. The scheme allows it, under conditions. + +The plan marks each package with an "unspecified" flag. Every specialty has one unspecified package, coded as the specialty's prefix followed by 215, for example `SG215` under general surgery. It must be chosen from the specialty the patient is being treated under; if that specialty has none, none can be used. The procedure name and the amount are typed in by the hospital instead of coming from the plan. Check the amount on the server against the beneficiary's remaining limit, not only on the screen. + +An unspecified procedure is always planned, never an emergency. It always stands alone as a single line item, never combined with a normal package, an enhancement or an implant. It still needs a coverage eligibility check with purpose auth-requirements. There is no co-payment; PMJAY is fully cashless. In the bundle it is an ordinary claim item with product code `U100`, the typed name as the display, and the typed amount as the price. Room type, if relevant, goes in the display text. + +## Cyclic procedures + +Dialysis is the model: one approval, many visits. The plan marks such packages as cyclic and says how many cycles one approval allows. The maximum is set by the state in the plan's claim conditions. + +Biometrics run through the whole thing. The patient is authenticated at the preauthorisation, again at every single visit with the process type set to Discharge, and again at the claim. Each visit needs a live capture; a refresh token is not accepted for a cycle, only for the final claim. Two cycles cannot be closer than 24 hours apart, counted as a rolling window, not a calendar day. A consent form cannot stand in for biometrics on a cyclic case. + +Payment follows the biometrics. Approval is for the maximum number of cycles, but the payer pays only for the cycles with a biometric capture. Four approved and two captured means two paid. Every cycle's clinical record travels as structured data, numbered in sequence and linked from the item, with a start and end time that the payer checks against the biometric timestamp; a mismatch voids the cycle. The claim is submitted once, after the last cycle. If the patient moves to another hospital, the first hospital is paid for its captured cycles and the patient is discharged; the new hospital raises a new preauthorisation. + +```mermaid +sequenceDiagram + box rgb(220,239,227) Provider side + participant H as Hospital + end + box rgb(220,232,245) Payer side + participant Y as Payer + end + Note over H: live biometric, process type Preauth + H->>Y: preauthorisation for N cycles + Y-->>H: approved for N + loop each visit, at least 24 hours apart + Note over H: live biometric, process type Discharge + H->>H: record the cycle with start and end time + end + Note over H: biometric or refresh token, process type Discharge + H->>Y: one claim, cycles as numbered structured records + Y-->>H: paid for the cycles with a biometric capture +``` + +## Medical packages + +A medical package is treatment without surgery: medicines, therapy, monitoring. Two rules. Only one medical package can be claimed per episode. And a medical package cannot be combined with a surgical one, because surgical rates already include care before and after the operation. A patient admitted for a medical condition who then needs surgery is not booked under both. + +## Newborns and children up to six + +A newborn has no card and no wallet of its own. The parent's card and wallet are used throughout, with the whole family sharing one annual limit. In the bundle the parent is the Patient; the child is a second, linked Patient resource with the child's name, gender and date of birth, referenced from the parent's record with link type `refer`. Twins are two children and two separate preauthorisations. + +Proof of the child's date of birth is mandatory, filed under category `DOB` with code `BCF` for a birth certificate or `DCB` for a government hospital's discharge slip while the certificate is awaited. The bill is in the parent's name as "Baby of" the parent, with a supporting attachment; a bill in the baby's name alone is likely to be rejected. A child older than a newborn but under six is treated as an ordinary case on the parent's wallet, without the linked-child construct. + +## Implants and stratification + +A package rate is a package rate. What the plan allows on top is spelled out per package as cost qualifiers: an implant such as a stent, a higher bed category, a high-end medicine or investigation. Each has its own code from the plan's master list, and each is a separate line in the bundle carrying the extra amount. The plan also says whether a package supports enhancement at all; a package that does not will have an enhancement rejected. diff --git a/site/docs/nhcx/v1/concepts/what-nhcx-is.md b/site/docs/nhcx/v1/concepts/what-nhcx-is.md new file mode 100644 index 000000000..6d57798d0 --- /dev/null +++ b/site/docs/nhcx/v1/concepts/what-nhcx-is.md @@ -0,0 +1,103 @@ +--- +title: What NHCX is +sidebar_label: What NHCX is +description: The exchange, what it aims to achieve, what it is made of, who is on it, and what changes for a hospital that joins. +verification: unverified +source: NHCX sandbox portal, Introduction and Technical Specifications pages; NHCX Usecases (NHA); NHCX Documentation v1.5.0 +sidebar_position: 2 +--- + +# What NHCX is +## In short + +- NHCX is one road between hospitals and insurers, replacing a separate integration per insurer. +- NHA states five objectives: wider cover, faster money, room to innovate, one process, a better patient experience. +- It is three rulebooks and a referee: the protocol, the data specifications, the operational guidelines, and NHA. +- Each role has a fixed list of what it may send and receive. +- Records cross as data rather than pictures, which is what makes automatic decisions possible. + +## What it is + +The National Health Claims Exchange is a single road between hospitals and insurers. A hospital asks whether a patient is covered, asks permission to treat, sends the bill, and gets paid. Today each of those steps runs differently for every insurer. On the exchange they run the same way for all of them. + +It carries the whole journey: checking cover before admission, getting treatment approved, submitting the claim at discharge, being paid, and arguing when the answer is wrong. Every step is a message out and an answer back later, so nothing is left hanging and there is a record of both halves. + +Hospitals, insurers, patients, regulators and observers all connect to it the same way. + +NHCX is developed under the Ayushman Bharat Digital Mission (ABDM) by the National Health Authority (NHA), in consultation with the Insurance Regulatory and Development Authority of India (IRDAI). The idea is to introduce a platform of exchange to Providers and Payers so that both can transfer digitised health records and other pertinent information directly, in a machine readable format, to their counterpart. + +## What NHCX aims to achieve + +NHA states five objectives for the exchange. + +- **Wider cover.** Bring new kinds of claim onto the network, including outpatient (OPD) visits and pharmacy bills, so insurance is not only about hospital stays. +- **Faster money.** Shorten the time between treatment and payment, and make cashless treatment workable even in small hospitals. +- **Room to innovate.** Give insurers the structured data they need to automate decisions and to spot fraud. +- **One way of doing things.** A single, rule-based process that both sides trust, instead of every insurer running its own. +- **A better patient experience.** Fewer forms, fewer delays, fewer surprises at discharge. + +Underneath all five sits one requirement. A hospital's software and an insurer's software are built by different people on different technology, and a message has to mean exactly the same thing at both ends. That is why everything on the exchange is written in one agreed format, with agreed words for diagnoses, procedures and test results. The third chapter explains what that format is and why it matters. + +## NHCX operating framework + +A stock exchange works because a buyer and a seller each connect to the exchange rather than to each other. NHCX works the same way. A hospital connects once, an insurer connects once, and from then on either can reach the other without having built anything specific to them. + +## What NHCX is made of + +It helps to think of NHCX as three rulebooks and one referee. + +- **The protocol** says how a message travels: how it is addressed, sealed, acknowledged and answered. It is deliberately like email: a message goes to the exchange, the exchange passes it on, and the reply comes back the same way. +- **The data specifications** say what goes inside a message. Claims, policies, payments and the rest are written as FHIR records, using profiles published by NRCeS, so that both sides read the same thing. +- **The operational guidelines** say who may join, how they are checked, what they may do, and how they can be removed. +- **NHA is the referee.** It publishes the rules, runs the exchange, and works with NRCeS and IRDAI to change them. + +Five principles run through all of it. The rules are **open**, published under a permissive licence so anyone can build against them. They are **evolvable**, so a scheme can add what it needs without breaking everyone else. They are **minimal**, so they are easy to understand and do not hold back innovation. They protect **privacy and security**, with sealed contents and tamper-proof records. And they are **unbundled**, so a participant can adopt one part without adopting all of it. + +## Who is on the network + +Most of this documentation talks about two parties, the hospital and the insurer. The network recognises more. + +- **Providers.** Hospitals and clinics, identified by their Health Facility Registry entry. +- **Payers.** Insurance companies, and the government agencies that pay for schemes. +- **TPAs.** Third-party administrators who process claims on an insurer's behalf. On the network a TPA behaves like a payer. +- **Regulators.** IRDAI and bodies like it, who can search claims across every payer. +- **Scheme sponsors.** The owner of a programme, for example NHA for Ayushman Bharat, with payer-level access. +- **Researchers and insurance marketplaces.** Given aggregated or consented data only. +- **Patient apps.** Personal health record apps that receive notifications on a beneficiary's behalf. +- **Other exchanges.** NHCX is designed so that more than one instance can exist and relay to each other. + +```mermaid +flowchart LR + classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 + classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 + H1[Hospital] --- X((NHCX)) + H2[Clinic] --- X + A[Patient app] --- X + X --- P1[Insurer] + X --- P2[Government scheme] + X --- T[TPA] + X --- R[Regulator] + X --- N[Another exchange] + class H1,H2 provider + class P1,P2,T payer + class X,N exchange + class A,R other +``` + +Each role comes with a fixed list of what it may send and receive. A hospital can ask about eligibility and submit claims; it cannot search another hospital's claims. A regulator can search; it cannot submit. + +## What changes in practice + +Four things are different once a hospital is on the exchange, and the rest of this documentation is about making them work. + +**Records go across as records.** A hospital's software already holds the diagnosis, the test results and the treatment as data. Today most of it is printed or turned into a picture before it is sent, and the insurer's software cannot read a picture. On the exchange it goes across as data and stays readable. + +**That makes automatic decisions possible.** An insurer can only decide a claim by machine if it can read the values. A blood test sent as ten separate results can be checked automatically; the same test sent as a scan cannot. + +**One place to type things.** The hospital's own system becomes the single place the information is entered, rather than being re-keyed into an insurer's portal afterwards. Most rejections on technical grounds come from that second typing. + +**Any hospital can reach any insurer.** A small hospital that could never afford to integrate with thirty insurers separately can integrate once. + +The next chapter follows a claim from admission to payment, in the ordinary language of the people who do it, before any of this becomes technical. diff --git a/site/docs/nhcx/v1/exchanges/README.md b/site/docs/nhcx/v1/exchanges/README.md new file mode 100644 index 000000000..9f8cd13ab --- /dev/null +++ b/site/docs/nhcx/v1/exchanges/README.md @@ -0,0 +1,8 @@ +# Exchanges and codes + +The endpoint catalogue and the workflow code tables, as prose, in the Docs +tab. The machine contracts for the same endpoints are generated into the API +references tab from `catalogue/openapi/nhcx/v1/`; nothing here duplicates a +schema. + +Order pages with `sidebar_position` in the frontmatter. diff --git a/site/docs/nhcx/v1/exchanges/_category_.json b/site/docs/nhcx/v1/exchanges/_category_.json new file mode 100644 index 000000000..e323fbb57 --- /dev/null +++ b/site/docs/nhcx/v1/exchanges/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Exchanges and codes", + "position": 7 +} diff --git a/site/docs/nhcx/v1/exchanges/index.md b/site/docs/nhcx/v1/exchanges/index.md new file mode 100644 index 000000000..ec27ca09d --- /dev/null +++ b/site/docs/nhcx/v1/exchanges/index.md @@ -0,0 +1,50 @@ +--- +title: Exchanges and codes +sidebar_label: Exchanges and codes +description: Every NHCX exchange as prose, with the workflow code that separates transactions sharing one endpoint. +verification: unverified +source: "NHCX Usecases (NHA); Workflow Status Sheets with Codes (18 Aug 2026); NHCX Requests and Responses for UseCases; NHCX Integration Handbook v1.0" +sidebar_position: 0 +--- + +# Exchanges and codes + +The endpoint catalogue in prose. What each exchange is for, who drives it, which callback answers it, and which workflow code separates one transaction from another where several share a path. + +## In short + +- Endpoints alone do not identify a transaction. The workflow code in the header does. +- A new preauthorisation, a resubmission, an enhancement and a query answer all travel on `/v1/preauth/submit` with the same bundle. +- Each code expects a particular status word, and using the wrong one is the portal's first listed mistake. +- The A-series carries no workflow code, because those are registry and session calls rather than claim transactions. + +## The pages here + +| Page | What it covers | +| --- | --- | +| [Use cases](/docs/nhcx/v1/exchanges/use-cases) | Every exchange with its action endpoint, its callback and its workflow code, grouped by who drives it | +| [Workflow codes](/docs/nhcx/v1/exchanges/workflow-codes) | Every code with the status word it expects, by stage, with the lifecycle diagrams and the places the sources disagree | +| [PMJAY use cases](/docs/nhcx/v1/exchanges/pmjay-use-cases) | The D-series: what a PMJAY integration must fetch, prove and package around the same endpoints | + +## These pages and the API reference + +The same endpoints appear twice in this portal, on purpose. + +| | Here, in Docs | In [API references](/docs/nhcx/v1/api) | +| --- | --- | --- | +| What it is | Prose: what the exchange is for, when to send it, what the answer means | The machine contract: paths, headers, request and response schemas | +| Where it comes from | NHA's use case documents, workflow sheets and value sets | NHA's six Postman collections, authored into OpenAPI 3.1 | +| What it will not tell you | The exact header schema | What goes inside the sealed payload | +| Read it when | Deciding what to build and in what order | Writing the client, or trying a call | + +NHA also publishes a Swagger UI per service on the sandbox portal at `hcxsbx.abdm.gov.in`, one each for coverage eligibility, preauth, claim, communication, payment, status, task, search, insurance plan and subscription. Those are live pages rather than downloadable documents, and the portal warns that for use case payloads its value-set sheets and code snippets are the authority rather than the Swagger. That is why the specifications in this portal are built from the Postman collections, which are downloadable and version-stamped. + +## What no endpoint tells you + +The body of every message endpoint is one field holding a JWE. The exchange reads the protected header and never opens the sealed half, so neither the OpenAPI document nor these pages describe what is inside it. That is the [FHIR reference](/docs/nhcx/v1/fhir-reference/bundles-and-conventions). + +## Next + +- [Use cases](/docs/nhcx/v1/exchanges/use-cases), the catalogue itself +- [FHIR reference](/docs/nhcx/v1/fhir-reference/bundles-and-conventions), what goes inside the payload +- [JWE, status and errors](/docs/nhcx/v1/concepts/jwe-status-and-errors), the envelope the codes ride on diff --git a/site/docs/nhcx/v1/exchanges/pmjay-use-cases.md b/site/docs/nhcx/v1/exchanges/pmjay-use-cases.md new file mode 100644 index 000000000..2c01ca6bb --- /dev/null +++ b/site/docs/nhcx/v1/exchanges/pmjay-use-cases.md @@ -0,0 +1,334 @@ +--- +title: PMJAY use cases +sidebar_label: PMJAY use cases +description: "The D-series: what a PMJAY integration must fetch, prove and package around each of the shared NHCX endpoints." +verification: unverified +source: NHCX-PMJAY-HMIS Integration Guide, FRD v1.0 (Mar 2026, work in progress); NHCX-PMJAY-HMIS Integration Overview; NHCX PMJAY Integration Handbook v1.0 (Aug 2026); NHCX FAQs v1.2 (Aug 2026, approval pending); NHCX APIs to be called based on scenario; Insurance Plan Implementation Guide; Biometric Authentication Implementation Steps; NHCX-PMJAY-HMIS Test Cases; Sample FHIR bundles +sidebar_position: 3 +--- + +# PMJAY use cases + +The endpoints a PMJAY integration calls are the same ones listed in the NHCX Use Cases chapter. What changes is the behaviour around them: what must be fetched first, what must be proved before a request is accepted, how supporting information is packaged, and how a query is answered. The shared use cases apply unchanged, and so do Get Policy and Get Status. + +The exchanges below are the D-series. Where a use case is distinguished by a workflow code rather than by a separate endpoint, that code is given with it. The scheme rules that change how a submission is built, for unspecified, cyclic, medical, newborn and implant cases, are the next chapter. A PMJAY integration is as much about those rules as about the calls. + +```mermaid +flowchart TD + classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 + classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 + D1[D1 Fetch the insurance plan and keep it fresh] --> R[Patient registers] + R --> D2[D2 Biometric authentication] + D2 --> D3[D3 Eligibility: validation] + D3 --> D3b[D3 Eligibility: benefits and auth-requirements] + D3b --> D4[D4 Submit preauthorisation] + D4 --> Q{Payer answer} + Q -- query --> D7[D7 Answer the query] --> Q + Q -- approved --> TR[Treatment] + TR --> E{Case needs more?} + E -- yes --> D6[D6 Enhancement] --> Q + E -- no --> D2b[D2 Biometric at discharge] + D2b --> D9[D9 Submit claim with discharge details] + D9 --> Q2{Payer answer} + Q2 -- query --> D10[D10 Answer the query] --> Q2 + Q2 -- rejected --> D11[D11 Reprocess] + Q2 -- approved --> D13[D13 Payment notice and acknowledgement] + D13 -- paid short --> D12[D12 Claim the shortfall] + D4 -. withdraw .-> D8[D8 Cancel] + D4 -. revise .-> D5[D5 Resubmit] + class D1,R,D2,D3,D3b,D4,D7,TR,E,D6,D2b,D9,D10,D11,D12,D8,D5 provider + class Q,Q2,D13 payer +``` + +## In short + +- The endpoints are the same as any NHCX integration. What changes is the behaviour around them. +- The D-series covers what must be fetched first, proved before a request is accepted, and how a query is answered. +- Biometric authentication and structured health information types are the two additions with no generic equivalent. +- Document queries never travel on the communication channel under PMJAY. + +## Scheme setup and identity + +### D1: fetch insurance plan + +**API Called:** `/v1/insuranceplan/request` +**Callback API:** `/v1/insuranceplan/on_request` +**Payload:** encrypted TaskBundle on the request, InsurancePlanBundle on the response + +The InsurancePlan is the structured representation of the policy under which a patient is covered. PMJAY is strictly package-based, with bundled costs for each service. Referencing the correct plan is what keeps the claim to admissible services, avoids rejections for non-compliance with scheme guidelines, and gives both sides an auditable record. + +The request is keyed on Provider ID, Policy Code and Participant ID. The response is scoped to that provider. It returns the specialties relevant to it, the covered services and their limits, and the mandatory documents for both preauthorisation and claim, at policy level and per benefit. It also carries the Standard Treatment Guidelines and clinical protocols, and the policy conditions, exclusions and renewal information. + +**How the plan is built.** Each specialty holds packages. Each package has a rate. Over and above the rate, the plan can attach add-ons that the payer allows for that package: an implant, a higher-cost bed category (called stratification), a high-end medicine or investigation. The plan also carries flags per package that change how a claim is built: whether it is an unspecified procedure, a cyclic one, or one that applies to a LAMA or DAMA discharge. The scheme rules section below explains each. + +**Size and storage.** The plan object sometimes exceeds 20 MB. The system must accept a payload that large and store it in a structured, queryable form linked to the policy record. + +**Freshness and versioning.** Refresh the plan regularly, and immediately whenever a policy is renewed or amended. The FRD says weekly; the scenario sheet says once in fifteen days. Version control on tariffs and packages is not optional: an outdated tariff version causes a rate mismatch and automatic claim rejection on suspicion of tampering. Keep audit logs of every fetch, refresh and version update, and of the version used in each preauth or claim. + +**Driving the forms.** The stored plan populates the preauth and claim forms with benefits and limits, and supplies the STG checklist, which must be rendered dynamically against the treatment plan selected. The questionnaire URL received in the plan is what gets sent back in the questionnaire response. + +### D2: biometric authentication of the beneficiary + +**API Called:** ABHA biometric auth init, then auth verify, with a refresh token endpoint +**Callback API:** none +**Note:** this is not an NHCX API. It was built specifically for the PMJAY payer. + +The scheme mandates biometric verification of the beneficiary at registration, during treatment and at discharge, to establish physical presence. + +**All three methods must be built.** Fingerprint, iris and face authentication are each mandatory to implement, because any of them may be the one that works for a given patient. A preauthorisation raised with a fingerprint can be followed by a claim raised with face authentication; the methods do not have to match. Fingerprint and iris follow an init-then-verify pair. Face authentication is a different flow. Initiate, show the patient a QR code to scan in the ABHA app, and poll until the capture is complete. Then verify with the Aadhaar number encrypted using the public key the portal supplies. + +On success the system receives a User Token, which must be passed as a header on every subsequent PMJAY claim event that requires proof of presence, including the coverage eligibility check and the preauthorisation submission. The payer validates this token before treating the request as legitimate. Discharge requires a fresh authentication, and that token is passed on the claim submission. + +**Token lifetime.** The User Token is valid for 30 minutes. Systems must refresh it automatically for the duration of a transaction cycle, and if it expires, start a fresh biometric authentication. + +```mermaid +sequenceDiagram + box rgb(220,239,227) Provider side + participant H as Hospital system + end + box rgb(227,240,240) ABDM + participant A as ABHA biometric service + end + box rgb(220,232,245) Payer side + participant Y as PMJAY payer + end + H->>A: auth init, fingerprint, iris or face + A-->>H: transaction id + H->>A: auth verify with the captured biometric + A-->>H: user token valid 30 minutes, plus refresh token + H->>Y: eligibility and preauthorisation, token in the header + Note over H: refresh before 30 minutes, else authenticate again + H->>A: fresh authentication at discharge + H->>Y: claim, discharge token in the header +``` + +**Applicability.** This applies only to beneficiaries whose ABHA number is linked to their PMJAY card. Beneficiaries without that linkage follow the existing PMJAY-approved KYC protocols. + +**Exemption.** Where biometric or Aadhaar authentication is not feasible, the provider obtains an Aadhaar exemption consent document signed by both the patient and a hospital representative. Store it digitally and link it to the beneficiary record. A preauthorisation or claim may then be raised on the consent form instead. The one exception is a cyclic procedure, where live biometrics are required at every step. Biometric authentication or a valid exemption is mandatory before a claim can be submitted. + +## Eligibility + +### D3: check coverage eligibility + +**API Called:** `/v1/coverageeligibility/check` +**Callback API:** `/v1/coverageeligibility/on_check` +**Payload:** encrypted CoverageEligibilityRequestBundle + +The check verifies a patient's eligibility and available benefits before registration or treatment. It is served with four purposes, and the purpose determines what comes back. + +- **Validation.** Confirms the specified coverages are in force, and returns the wallet balance. The benefit component carries one entry per wallet applicable to the beneficiary, with the allowed balance and the amount consumed. Called after registration. +- **Discovery.** Asks the insurer to report any coverages it knows of beyond those specified, giving the list of all active coverages for the beneficiary. +- **Benefits.** Returns the plan benefits, and optionally the benefits already consumed, for the listed or discovered coverages. Called before raising a preauthorisation or enhancement. +- **Auth requirements.** Returns the prior authorisation requirements for the given categories of service or billing codes, procedure by procedure, and the documents needed at each stage. This is where the documents and questionnaires mandatory for preauthorisation come from. Called on the preauthorisation page before submission. + +Validation, discovery and benefits require the Beneficiary ID, Coverage or Plan Code, Payer ID and Provider ID. Auth requirements and benefits additionally require the procedure or package codes. + +Register the patient only after coverage is validated, and alert both provider and patient where coverage is insufficient, including the case where a family's shared limit is exhausted. Call this check again, as a validation, every time an additional treatment is added, so the limit is confirmed before a preauthorisation goes out. + +## Preauthorisation + +All five preauthorisation exchanges share the same endpoints and the same bundle structure. The workflow code is what distinguishes them. Each follow-up, whether a query answer, an enhancement or a resubmission, is a new request carrying the original reference and a fresh correlation ID. + +**API Called:** `/v1/preauth/submit` +**Callback API:** `/v1/preauth/on_submit` +**Payload:** encrypted ClaimBundle, answered with a ClaimResponseBundle + +The documents and questionnaires required come from the coverage eligibility response with purpose auth-requirements. Procedure components must match the values returned by the InsurancePlan. The preauthorisation amount may not exceed the balance remaining on the beneficiary's coverage. Two dates are mandatory, each sent as a timing (date or period) or as a string value, adhering to NRCeS standards. + +| Field | Category | Code | Display | +| :---- | :---- | :---- | :---- | +| Registration date | `OTH` | `EDT` | EncounterDateTime | +| Admission date | `ONS` | `ADDD` | Admission date - Discharge date | + +See the note under D9 on where these codes come from and where the source documents disagree. + +A preauthorisation cannot be raised more than one day in advance, and D2 must be completed before submission. + +### D4: submit preauthorisation + +**Workflow ID:** 12 + +The first preauthorisation for a case. It is auto-approved only if it is the first preauth for that case and every requested procedure is eligible for auto-approval. Separately, where the policy is eligible for turnaround-time approval and no action is taken within the defined window, the case is approved automatically. Everything else is adjudicated manually by the payer. + +### D5: resubmit preauthorisation + +**Workflow ID:** 121 + +Raised once a base preauth already exists, for example to revise an approved or rejected case for a higher amount or a different package. A resubmission nullifies all previous instances, and the payer treats it as the new base request. + +### D6: raise enhancement + +**Workflow ID:** 13, with 131 for a response to an enhancement query + +Raised against an already approved preauth to extend a procedure or add new ones. Unlimited enhancements are allowed until discharge, within the limit, but each can only be sent after the previous request has closed. Check the plan's rules for the package before raising one. The bundle carries the enhancement workflow ID, the already approved treatments, and the treatments now sought. + +### D7: respond to preauthorisation query + +**Workflow ID:** 19 + +A query arrives in the item-wise adjudication field of the preauth response bundle. The provider reads it and answers with a preauth query response, not a resubmission. The bundle structure is unchanged. + +### D8: cancel preauthorisation + +**Workflow ID:** PC01 +**Payload:** Task bundle + +Cancels the whole preauthorisation. It can be raised at any point until the claim is raised, against an active preauth or one still pending decision at the payer end. The Task carries the code `cancel`, the case number as its input (the FRD calls this the intimation number, the scenario sheet the claim number), a reason, and any remarks in the disposition. + +Reasons the payer recognises: `treatmentplanchanged`, `patientrequest`, `financialconstraints`, `alternativetreatment`, `duplicateclaim`, `administrativeerror`, and `other` with a free-text explanation. + +## Claim + +The claim exchanges share endpoints and bundle structure in the same way. + +**API Called:** `/v1/claim/submit` +**Callback API:** `/v1/claim/on_submit` +**Payload:** encrypted ClaimBundle, answered with a ClaimResponseBundle + +The documents and questionnaires for the claim come from the InsurancePlan response. Coverage eligibility with purpose auth-requirements supplies only those needed at preauthorisation; the remainder are mandatory at claim. The claim amount may not exceed the preauthorisation's approved amount. A claim cannot be cancelled. + +### D9: submit claim + +**Workflow ID:** 15 + +**PMJAY has no separate discharge workflow.** Raising a claim implicitly asserts that the patient has been discharged, so discharge details form part of the claim request itself. Once the preauthorisation is approved and treatment is complete, the patient is discharged and the claim submitted, carrying a fresh D2 token. + +Four dates and the discharge status are mandatory. Each date is sent as a timing (date or period) or as a string value, adhering to NRCeS standards. + +| Field | Category | Code | Display | +| :---------------- | :-------------------------------- | :-------------------------------- | :------------------------------ | +| Registration date | `OTH` | `EDT` | EncounterDateTime | +| Admission date | `ONS` | `ADDD` | Admission date - Discharge date | +| Surgery date | `ONS`, or `SURD` in every sample | `PSP`, or `ADDD` in every sample | PatientSurgeryPerformed | +| Discharge date | `ONS`, or `DSCHD` in every sample | `DSDE`, or `ADDD` in every sample | Discharge Date | + +The discharge status itself goes under category `DIS`, with the code carrying the type of discharge. All four types from the hospital workflow are represented. There is no "referred to another hospital" type; a patient is discharged as one of these four before being admitted elsewhere. + +| Code | Display | Discharge type | +| :---- | :---- | :---- | +| `DTH` | DischargeToHome | Normal discharge | +| `DTM` | DischargetoMortuary | Death | +| `LAMA` | Discharge with LAMA | Left against medical advice, without telling the hospital | +| `DAMA` | Discharge with DAMA | Discharged against medical advice, having signed an undertaking | + +The value against the `DIS` entry is not a date. It is a string carrying the discharge stage: **Before Surgery**, **During Surgery** or **After Surgery**. It is sent for medical cases as well as surgical ones. Each discharge type has a matching questionnaire in the plan (Death, Life, LAMA, DAMA), found by title. + +A death is the one case that needs a fifth date. Where the discharge type is `DTM`, send the death date as an additional entry under category `ONS` with the same `DTM` code, alongside the four dates above. + +**LAMA and DAMA claims carry a special procedure code.** Under LAMA or DAMA, procedure code `LM100` may be the only code the payer accepts on the claim. Every item approved on the earlier preauthorisation is disqualified and only the stay is paid. The `LM100` line carries the number of days admitted as its quantity, and a LAMA discharge also sends the bed category with its duration. `LM100` is never valid on a preauthorisation. + +Which discharge stages trigger it is stated four ways across the sources: before surgery only, before or during, before or after, and after or during in the payer's own error message. Establish the rule with the payer before building; it decides whether an approved package is paid or voided. + +```mermaid +flowchart TD + classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 + classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 + A[Patient leaves] --> B{How?} + B -- went home --> DTH[DTH] + B -- died --> DTM[DTM, plus the death date] + B -- left without telling --> LAMA[LAMA] + B -- left, signed an undertaking --> DAMA[DAMA] + LAMA --> S{At what stage?} + DAMA --> S + S -- before surgery --> LM["LM100 only, quantity = days admitted, preauthorised items voided"] + S -- after surgery --> ST[Surgery items stand, no LM100] + class A,DTH,DTM,LAMA,DAMA,LM,ST provider + class B,S other +``` + +**A note on the codes above.** These combinations are taken from the NHCX gateway validation messages, which reject a claim naming the exact category and code expected. The Functional Requirement Document gives a different set for three of these fields, listing the admission, surgery and discharge dates under categories `ADMD`, `SURD` and `DSCHD` with code `ADDD` throughout. Those three categories do not appear in the supporting info category value set. Confirm against the current NRCeS value sets before building. + +Claims are adjudicated manually, approved or rejected case by case. + +### D10: respond to claim query + +**Workflow ID:** 151 + +As with D7, the provider answers a payer query with a claim query response using the same Claim Bundle structure. + +### D11: reprocess a rejected claim + +**API Called:** `/v1/task/submit` +**Callback API:** `/v1/task/on_submit` +**Workflow ID:** 36 +**Payload:** Task bundle, with a supporting document attached + +When a claim is rejected outright and the hospital disputes it, it asks for a re-evaluation. This is an appeal, not a resubmission: the claim itself is not sent again. + +The Task carries the code `reprocess` and the reason `claimrejected`. It names the case by its claim number, which under PMJAY is the preauthorisation number the hospital generated. No amount is sent, because the whole claim is in dispute. A supporting document is mandatory; without one there is no ground for the appeal. It can be raised as soon as the rejection arrives, with no dependency on any payment notice. + +The request goes to the Claim Review Committee, whose decision is final. A claim can be reprocessed once. The original claim number carries forward; no new case is created. + +### D12: claim a shortfall (erroneous claim) + +**API Called:** `/v1/task/submit` +**Callback API:** `/v1/task/on_submit` +**Workflow ID:** 36 +**Payload:** Task bundle, with a supporting document attached + +When a claim is approved and paid, but for less than was claimed, the hospital can ask for the difference. This uses the same Task as a reprocess with one change: the reason is `partialpayment`, and an amount is sent. + +The amount is capped at the shortfall. A claim raised for 10,000 and paid at 6,000 can ask for up to 4,000, with justification, and never more. The request can only be raised once the payment cycle is complete: after the payment notice with workflow 33 has arrived and the hospital has verified the money and sent its acknowledgement, code 17. As with a reprocess, it can be raised once, and a supporting document is mandatory. + +The two mechanisms do not chain. If a reprocess results in a partial approval, no shortfall claim can follow, because the Committee's decision is final. + +```mermaid +flowchart TD + classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 + classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 + A[Claim adjudicated] --> B{Outcome} + B -- rejected --> C["D11 Reprocess: Task, reason claimrejected, document attached, no amount"] + B -- paid in full --> D[Done] + B -- paid short --> E[Wait for payment notice 33] + E --> F[Verify the money, send acknowledgement 17] + F --> G["D12 Shortfall: Task, reason partialpayment, amount up to the difference"] + C --> H[Claim Review Committee decides, and that is final] + G --> H + class C,E,F,G provider + class A,B,H payer + class D other +``` + +## Payment + +### D13: acknowledge payment notice + +**API Called:** `/v1/paymentnotice/on_request` +**Callback API:** `/v1/paymentnotice/request` +**Workflow ID:** 17 + +Once a claim is approved and payment made, the payer sends a payment notice, which the provider system must be able to accept and acknowledge. Three notices may arrive in sequence: 30 when the payer initiates the transfer, 31 when the bank processes it, and 33 when it settles and the UTR number is available. The notice gives a consolidated status. **Cleared** where the amount has been initiated, **Paid** where it has been received, **Rejected** where it was initiated but failed on a server issue, **Adjusted** where a balance is being adjusted. Payment reconciliation gives the breakup for the case, including TDS and other deductions. Keep the UTR; it is the reference for any later dispute. + +## Structured data exchange + +This requirement applies to every preauthorisation and claim bundle, D4 through D10, and is what separates a PMJAY submission from an ordinary one. The Task bundles in D8, D11 and D12 carry their document as a plain attachment instead. + +Supporting clinical information travels through the `SupportingInfo` to `DocumentReference` resource. Inside `DocumentReference.content.attachment`, the `attachment.data` field carries a Base64-encoded FHIR Bundle holding the relevant structured resources, for example DiagnosticReport, DischargeSummary or WellnessRecord. This is the difference from an unstructured submission, where the same field would carry a Base64-encoded PDF or JPG. For structured submissions the content type is set to `application/json` or `application/fhir+json`. + +The category code decides which of the two applies. Structured data uses a supporting info category among DIA, HDS, CD and INF, with the value sent as a reference. Unstructured data uses a category among POI, POA, DOB, DEF, FIR and ATT, with the value sent as an attachment. Questionnaire responses are configured under supporting info with category INF, code AT, and a reference value. + +Each document is limited to 2 MB, against a whole-bundle maximum of 20 MB, and only one document can be linked per item, so multiple documents for a single item must be merged. + +## Workflow codes + +The full code list, provider-initiated and payer response, is in the Workflow Codes chapter. The codes are the same under PMJAY, and each D-series entry above carries the one that applies to it. + +Three points are specific to PMJAY. Because the scheme does not use the Communication API for document queries, the query codes 19 and 151 travel on the preauthorisation and claim endpoints. That is what allows D7 and D10 to reuse the original bundle structure unchanged. The Communication API is still used, with its own reason codes, for turnaround-time alerts, grievances, wallet and policy changes, and arbitration acknowledgements, so a hospital system must still host it. And codes 14 and 141 for discharge have no counterpart here, because PMJAY folds discharge into the claim rather than treating it as a submission of its own. + +## Error handling and validation + +Envelope errors, receipts, retries and the error endpoint are the same as on any NHCX integration and are covered in JWE, Status and Errors. Two things are specific here. Every callback must accept the answer in two forms, decided by the `type` field. A sealed bundle when the payer processed the request, or a protocol response when it could not be opened or failed validation. And the PMJAY payer's own error codes, the `PAYR-12xx` set for preauthorisation and `PAYR-13xx` for claims, name the exact field or rule that failed; surface them to the user as they are. + +## Before you build + +Three things on the portal shorten the first week. + +- **Sample bundles.** Twenty-two worked FHIR bundles, in eleven request-and-response pairs. They cover every eligibility purpose, preauthorisation with its query, enhancement and cancellation, claim with its query, and payment notice with its acknowledgement. One is an insurance plan response of 21 MB, which shows what the storage requirement means in practice. +- **Test cases.** A matrix from TC-ABHA-01 onward, each with preconditions, inputs and expected output. The scenario list beside it includes registration, wallet update, preauthorisation with implant, discharge in multiple modes, and the Claim Review Committee path. +- **The dummy payer.** Described in the NHCX Use Cases chapter, it answers the exchanges listed in the NHCX Use Cases chapter, which does not include the Task exchanges or biometrics. diff --git a/site/docs/nhcx/v1/exchanges/use-cases.md b/site/docs/nhcx/v1/exchanges/use-cases.md new file mode 100644 index 000000000..d7a278836 --- /dev/null +++ b/site/docs/nhcx/v1/exchanges/use-cases.md @@ -0,0 +1,291 @@ +--- +title: NHCX use cases +sidebar_label: Use cases +description: Every NHCX exchange with its action endpoint, its callback and its workflow code, grouped by who drives it. +verification: unverified +source: NHCX Usecases (NHA); NHCX Provider Side and Payer Side Use Cases, Sandbox Exit Process; Technical Specifications page, API Structure; Workflow Status Sheets with Codes (18 Aug 2026); NHCX Requests and Responses for UseCases, value sets; NHCX Notification Integration; NHCX Dummy Payer Implementation; NHCX Integration Handbook v1.0 §11, §12 +sidebar_position: 1 +--- + +# NHCX use cases + +A use case covers each stage of the claims lifecycle: onboarding providers and payers onto the network, verifying coverage, seeking preauthorisation, submitting claims, exchanging supporting information, and reconciling payments. Between them they deliver the five objectives set out in the introduction. Each use case is an API interaction between the Provider and the Payer, routed through the NHCX gateway, so every request is traceable, standardised and answered in a predictable way. + +## In short + +- Every exchange with its action endpoint, its callback, and the workflow code that separates transactions sharing one endpoint. +- The A-series is shared, the B-series is the provider's, the C-series the payer's, and E1 is for patient apps. +- Several use cases have no workflow code listed anywhere in the sources. +- The sandbox dummy payer answers six exchanges and takes two test hooks that drive its decisions. + +## Key use cases overview + +- **Onboarding Providers and Payers** + Onboard providers and payers onto NHCX to validate and route requests to target applications. +- **Check Coverage Eligibility** + Called by providers to check the eligibility of a beneficiary with payers via NHCX. +- **Preauth Request Submission** + Called by providers to submit Preauthorisation Requests to payers via NHCX. The payer responds via the `on_submit` callback API. +- **Predetermination Request** + Called by providers to ask what a payer would approve for a planned treatment. The payer responds with auto-adjudication details against the policy and past history. +- **Claim Request Submission** + Called by providers to submit Claim Requests to payers via NHCX. The payer responds using the `on_submit` callback API. +- **Communication Request** + Called by payers to communicate with providers about a case: to ask for more information, to flag a turnaround-time breach, or to pass on a grievance or a policy change. +- **Payment Notice** + Called by payers to submit the payment status of a claim with bank reference numbers such as scroll status and UTR numbers. +- **Reprocess / Cancel Request** + Called by providers to request payers to reprocess a claim when partially paid or rejected, or to cancel an approved preauth. +- **Notifications** + Called by patient apps to receive updates on a beneficiary's claims as they happen. + +## Shared use cases (payer and provider) + +The following use cases are common to both Payer and Provider participants on the NHCX platform. None of them carries a workflow code, because they are registry and session calls rather than claim transactions. + +### A1: get participant list + +**API Called:** `/fetch/participants/list` + +Retrieve the list of participants in the registry based on the role. + +### A2: get policy + +**API Called:** `/participant/get/policies` + +Get the list of policies for the beneficiary based on mobile number or ABHA. The response names both the insurer and the processor for each policy; the processor is the recipient for every claim-side call. + +### A3: get public key + +**API Called:** `/fetch/certs` + +Retrieve the public key of the receiver, used to encrypt the payload. Participant ID must be mandatorily provided. + +### A4: get auth token + +**API Called:** `/get/session` + +Generate the authentication token for NHCX API calls. This is the ABDM gateway's sessions endpoint, reached with the Milestone 1 client ID and secret. + +### A5: get status + +**API Called:** `/v1/status` +**Callback API:** `/v1/on_status` + +Retrieve the status of any request triggered to NHCX. + +### A6: receive errors + +**Callback API:** `/v1/error` + +Hosted by every participant. The exchange calls it to report a request that could not be delivered after five attempts, with the rejection details. Without it a sender never learns that a request died. + +## Provider use cases + +The following use cases are specific to Provider participants, describing the APIs providers must call and the callbacks they must implement. + +### B1: check coverage eligibility + +**API Called:** `/v1/coverageeligibility/check` +**Callback API:** `/v1/coverageeligibility/on_check` +**Workflow ID:** none listed. The check sits alongside registration, code 10, and admission, code 11 + +Check the eligibility of a beneficiary with payers via NHCX. Requests whether patient coverage is in force, valid at a date, and the associated benefits and plan details. The request carries a purpose: discovery, validation, benefits or auth-requirements. + +### B2: request insurance plan details + +**API Called:** `/v1/insuranceplan/request` +**Callback API:** `/v1/insuranceplan/on_request` +**Workflow ID:** none listed + +Request insurance plan details from the Payer via NHCX. The request is a Task with code `poll`, keyed on policy number and provider ID. + +### B3: preauthorisation submission + +**API Called:** `/v1/preauth/submit` +**Callback API:** `/v1/preauth/on_submit` +**Workflow ID:** 12 for a new request, 121 for a resubmission, 13 for an enhancement; 19 to answer a query on this endpoint under PMJAY, where other payers take the answer on the communication endpoint + +Submit the Preauthorisation request from the Provider end. A query answer, an enhancement and a resubmission all reuse the same bundle with a new correlation ID and the original reference. + +### B4: respond to communication request + +**API Called:** `/v1/communication/on_request` +**Callback API:** `/v1/communication/request` +**Workflow ID:** as carried on the payer's request + +Acknowledge or answer a communication from the Payer. The payer's reason code says what kind it is; see C6. + +### B5: claim submission + +**API Called:** `/v1/claim/submit` +**Callback API:** `/v1/claim/on_submit` +**Workflow ID:** 15 for the claim, 151 to answer a query, 14 for a provisional discharge submission where the payer supports one + +Submit the Claim from the Provider end to NHCX. The claim amount may not exceed the preauthorisation's approved amount. + +### B6: claim search + +**API Called:** `/v1/search/submit` +**Callback API:** `/v1/search/on_submit` +**Workflow ID:** none listed + +Search claim-related information by an authorised entity. The protocol also defines per-resource searches, `/preauth/search`, `/claim/search` and `/paymentnotice/search`, each with an `on_search` callback, for a provider looking up its own requests. + +### B7: acknowledge payment notice + +**API Called:** `/v1/paymentnotice/on_request` +**Callback API:** `/v1/paymentnotice/request` +**Workflow ID:** 17 + +Acknowledge the payment notification sent by the Payer. The portal's Payment document has the acknowledgement on this endpoint; the PMJAY handbook has it as a Task on `/v1/task/submit` with output `paymentack`. Both are current. Confirm which the payer expects. + +### B8: request for reprocess / cancel + +**API Called:** `/v1/task/submit` +**Callback API:** `/v1/task/on_submit` +**Workflow ID:** PC01 to cancel a preauthorisation, 36 to reprocess a rejected claim or to claim a shortfall on a partly paid one + +One endpoint, several jobs, told apart by the Task's code and reason. Task codes: `reprocess`, `cancel`, `nullify`, `suspend`, `approve`, `search`, `poll`. For a reprocess the reason is `claimrejected`; for a shortfall it is `partialpayment`. The Task names the case by claim number or intimation number. A supporting document is mandatory on a reprocess. + +### B9: predetermination submission + +**API Called:** `/v1/predetermination/submit` +**Callback API:** `/v1/predetermination/on_submit` +**Workflow ID:** none listed + +Ask the payer what it would approve for a proposed treatment before committing to a preauthorisation. Same bundle shape as a preauthorisation. + +## Payer use cases + +The following use cases are specific to Payer participants, describing the APIs payers must call and the callbacks they must implement. + +### C1: link ABHA with policy + +**API Called:** `/participant/link/abha/policy` +**Workflow ID:** none listed + +Link the ABHA number, mobile and member ID to the policy's products at the time of policy creation, naming the payer and the processor. + +### C2: de-link ABHA from policy + +**API Called:** `/participant/delink/abha/policy` +**Workflow ID:** none listed + +De-link the policy from the ABHA profile. Only the party named as payer or processor on the link may do this. + +### C3: respond to coverage eligibility request + +**API Called:** `/v1/coverageeligibility/on_check` +**Callback API:** `/v1/coverageeligibility/check` +**Workflow ID:** none listed + +Respond with the eligibility and plan details of the beneficiary for whom details are requested. The payer may instead answer with a forward instruction, asking the exchange to pass the same request to another payer. + +### C4: respond to insurance plan request + +**API Called:** `/v1/insuranceplan/on_request` +**Callback API:** `/v1/insuranceplan/request` +**Workflow ID:** none listed + +Respond with the insurance plan details requested via NHCX. + +### C5: respond to preauthorisation submitted + +**API Called:** `/v1/preauth/on_submit` +**Callback API:** `/v1/preauth/submit` +**Workflow ID:** 20 received, 21 approved, 23 rejected, 24 queried, 22 enhancement approved, 231 enhancement denied, 241 enhancement queried + +Respond with adjudicated Preauthorisation details. + +### C6: raise communication request + +**API Called:** `/v1/communication/request` +**Callback API:** `/v1/communication/on_request` +**Workflow ID:** 24 preauth queried, 241 enhancement queried, 27 claim queried, 263 discharge queried, and the intimation codes for grievances, wallet updates and arbitration + +Send the Provider a message about a case. The Task's reason code says which. `additionalinfo` to ask for documents, `tatquery` when a case has breached its turnaround time, `grievance` to pass on a complaint. Then `walletupdate` when the beneficiary's balance has changed, `policychange` when a package or rate has changed, and `claimArbitration` to acknowledge a reprocess request. + +### C7: respond to claim submitted + +**API Called:** `/v1/claim/on_submit` +**Callback API:** `/v1/claim/submit` +**Workflow ID:** 25 received, 26 approved, 27 queried, 28 in process, 29 forwarded, 291 denied + +Respond with adjudicated Claim details. + +### C8: respond to search request + +**API Called:** `/v1/search/on_submit` +**Callback API:** `/v1/search/submit` +**Workflow ID:** none listed + +Respond to search requests, providing the ClaimResponse objects matching the input criteria. + +### C9: send payment notice + +**API Called:** `/v1/paymentnotice/request` +**Callback API:** `/v1/paymentnotice/on_request` +**Workflow ID:** 30 initiated, 31 processed, 33 settled + +Send payment notification and reconciliation objects to Providers via the NHCX gateway. The reconciliation itemises the money by type: `approvedamount`, `claimedamount`, `tds`, `servicetax`, `advance`, `recovered`, `penality`. The bank's UTR number rides on the reconciliation. + +### C10: respond to Task request + +**API Called:** `/v1/task/on_submit` +**Callback API:** `/v1/task/submit` +**Workflow ID:** 251 acknowledged, 252 approved, 253 rejected, 254 queried, PC02 cancellation done, 37 arbitration acknowledged + +Return the response for task requests such as reprocess or cancel. + +### C11: respond to predetermination + +**API Called:** `/v1/predetermination/on_submit` +**Callback API:** `/v1/predetermination/submit` +**Workflow ID:** none listed + +Respond with what the payer would approve for the proposed treatment. + +## Patient app use cases + +Personal health record apps can register as participants and receive notifications on a beneficiary's behalf. This is how a patient learns on their phone that a preauthorisation was approved. + +### E1: subscribe to notifications + +**API Called:** `/v1/notification/subscribe` +**Callback API:** `/v1/notification/on_subscribe` +**Workflow ID:** N01 to a payer, N02 to a provider, N03 to a beneficiary, N04 acknowledgement + +The app subscribes when the beneficiary logs in with their ABHA. The most recent app to subscribe for an ABHA is the one that receives notifications; any earlier subscription is replaced. Topics are `workflow_events` for claim progress, `network_events` for exchange maintenance, and `participant_events` for changes to payers and providers. Each notification carries a human-readable message the app can show as-is, plus the envelope headers for apps that want more. + +```mermaid +sequenceDiagram + box rgb(238,241,244) Beneficiary + participant A as Patient app + end + box rgb(227,240,240) Exchange + participant X as NHCX + end + box rgb(220,239,227) Provider side + participant H as Hospital + end + box rgb(220,232,245) Payer side + participant Y as Payer + end + A->>X: subscribe for this ABHA, on login + H->>X: preauth/submit + X->>Y: forwards + Y->>X: preauth/on_submit, approved + X->>H: callback to the hospital + X->>A: notification: preauthorisation approved +``` + +## Testing against the dummy payer + +The sandbox hosts a payer that answers back, participant ID `1000003538@hcx`. It handles insurance plan, coverage eligibility, preauthorisation, claim, payment notice and communication. For the plan call use provider ID `32722` and policy `100217`. + +Two test hooks drive its decisions. `dummyhcxpayer/process/request` makes it approve, reject or query a preauthorisation or claim you have submitted, by correlation ID. `dummyhcxpayer/paymentNotice/init` makes it send you a payment notice. A query from the dummy payer arrives as a communication request, which you answer on `/v1/communication/on_request` before the final decision comes back on `on_submit`. + +## Workflow codes + +Endpoints alone do not identify a transaction. A new preauthorisation, a resubmission, an enhancement and a query response all travel on `/v1/preauth/submit` with the same bundle. The workflow code in the header is what tells them apart, and each code expects a particular status word. The full list, grouped by stage with the lifecycle diagrams, is the next chapter. diff --git a/site/docs/nhcx/v1/exchanges/workflow-codes.md b/site/docs/nhcx/v1/exchanges/workflow-codes.md new file mode 100644 index 000000000..c0122951d --- /dev/null +++ b/site/docs/nhcx/v1/exchanges/workflow-codes.md @@ -0,0 +1,232 @@ +--- +title: Workflow codes +sidebar_label: Workflow codes +description: Every workflow code with the status word it expects, by stage, with the lifecycle diagrams and the places sources disagree. +verification: unverified +source: "Workflow Status Sheets with Codes (18 Aug 2026); NHCX Requests and Responses for UseCases, value sets; NHCX Integration Handbook §4; Common Mistakes while implementing through NHCX #1" +sidebar_position: 2 +--- + +# Workflow codes + +Endpoints alone do not identify a transaction. A new preauthorisation, a resubmission, an enhancement and a query response all travel on `/v1/preauth/submit` carrying the same bundle. What separates them is the workflow code in the `x-hcx-workflow_id` header. Each code also expects a particular status word, given here beside it. The source is the Workflow Status Sheet on the portal, updated 18 August 2026, which remains the authority as codes are added. + +The A-series carries no workflow code. Those are registry and session calls rather than claim transactions. + +**Who sends what.** The codes name the party a message concerns, not always the party that sends it, so the notification codes are left unattributed. In the diagrams below, a state drawn in green is reached by something the **provider** sends; one drawn in blue by something the **payer** sends. The tables carry the same distinction in a *Sent by* column. Where the handbook states the direction it is used. Elsewhere it is read from the code's name: an intimation, a submission or a response is the provider's, and an approval, a denial, a query or an acknowledgement of one is the payer's. + +### Registration and admission + +| Code | Meaning | Sent by | Status | +| :---- | :---- | :---- | :---- | +| 10 | Patient registered | Provider | `request.initiated` | +| 11 | Patient admitted | Provider | `request.initiated` | + +### Preauthorisation + +| Code | Meaning | Sent by | Status | +| :---- | :---- | :---- | :---- | +| 12 | Preauthorisation requested | Provider | `request.initiated` | +| 20 | Preauthorisation received | Payer | `response.partial`, or `response.error` if the receipt failed | +| 21 | Preauthorisation approved | Payer | `response.complete` | +| 23 | Preauthorisation rejected | Payer | `response.complete` | +| 24 | Preauthorisation queried | Payer | `request.initiated` | +| 18 | Query acknowledged | Provider | `response.partial`, or `response.error` | +| 19 | Query answered | Provider | `response.complete` | +| 121 | Resubmission | Provider | `request.initiated` | +| 16 | Request resubmitted | listed in the value set, no status given | +| 251 | Resubmission acknowledged | Payer | `response.complete` | +| PC01 | Cancellation requested | Provider | `request.initiated` | +| PC02 | Cancellation done | Payer | `response.complete` | +| 41 | Preauthorisation arbitration requested | Provider | `request.initiated` | +| 42 | Arbitration acknowledged | Payer | `response.complete` | + +```mermaid +stateDiagram-v2 + classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + [*] --> Requested: 12 + Requested --> Received: 20 + Received --> Approved: 21 + Received --> Rejected: 23 + Received --> Queried: 24 + Queried --> QueryAnswered: 19 + QueryAnswered --> Received + Rejected --> Resubmitted: 121 + Resubmitted --> Received: 251 + Approved --> EnhancementAsked: 13 + EnhancementAsked --> Approved: 22 + EnhancementAsked --> EnhancementDenied: 231 + EnhancementAsked --> EnhancementQueried: 241 + EnhancementQueried --> EnhancementAnswered: 131 + EnhancementAnswered --> Approved: 22 + EnhancementAnswered --> EnhancementDenied: 231 + Received --> CancelAsked: PC01 + Approved --> CancelAsked: PC01 + CancelAsked --> Cancelled: PC02 + Approved --> [*] + class Requested,QueryAnswered,Resubmitted,EnhancementAsked,EnhancementAnswered,CancelAsked provider + class Received,Approved,Rejected,Queried,EnhancementDenied,EnhancementQueried,Cancelled payer +``` + +### Enhancement + +| Code | Meaning | Sent by | Status | +| :--- | :------------------------- | :------- | :----------------------------------------------------------------------------------- | +| 13 | Enhancement requested | Provider | `request.initiated` | +| 22 | Enhancement approved | Payer | `response.complete` | +| 231 | Enhancement denied | Payer | `response.complete` | +| 241 | Enhancement queried | Payer | `request.initiated` | +| 131 | Enhancement query answered | Provider | `response.complete`; the acknowledgement uses `response.partial` or `response.error` | + +### Discharge + +| Code | Meaning | Sent by | Status | +| :--- | :----------------------- | :------- | :------------------ | +| 14 | Discharge submitted | Provider | `request.initiated` | +| 261 | Discharge approved | Payer | `response.partial` | +| 262 | Discharge rejected | Payer | `response.complete` | +| 263 | Discharge queried | Payer | `request.initiated` | +| 141 | Discharge query answered | Provider | `response.complete` | +| DC01 | Discharge correction | Provider | `request.initiated` | +| DC02 | Correction acknowledged | Payer | `response.complete` | + +### Claim + +| Code | Meaning | Sent by | Status | +| :---- | :---- | :---- | :---- | +| 15 | Claim submitted | Provider | `request.initiated` | +| 25 | Claim documents received | Payer | `response.partial`, or `response.error` | +| 26 | Claim approved | Payer | `response.complete` | +| 27 | Claim queried | Payer | `request.initiated` | +| 28 | Claim in process | Payer | `response.partial` | +| 29 | Claim forwarded | Payer | `response.partial` | +| 291 | Claim documents denied | Payer | `response.complete` | +| 151 | Claim query answered | Provider | `response.complete` | +| 161 | Claim document query answered | Provider | `response.complete` | + +```mermaid +stateDiagram-v2 + classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + [*] --> Submitted: 15 + Submitted --> Received: 25 + Received --> InProcess: 28 + InProcess --> Forwarded: 29 + Forwarded --> InProcess + InProcess --> Queried: 27 + Queried --> QueryAnswered: 151 + QueryAnswered --> InProcess + InProcess --> Approved: 26 + InProcess --> Denied: 291 + Denied --> ArbitrationAsked: 36 + ArbitrationAsked --> ArbitrationAcknowledged: 37 + ArbitrationAcknowledged --> ReprocessApproved: 252 + ArbitrationAcknowledged --> ReprocessRejected: 253 + ArbitrationAcknowledged --> ReprocessQueried: 254 + ReprocessQueried --> ArbitrationAcknowledged + Approved --> [*] + class Submitted,QueryAnswered,ArbitrationAsked provider + class Received,InProcess,Forwarded,Queried,Approved,Denied,ArbitrationAcknowledged,ReprocessApproved,ReprocessRejected,ReprocessQueried payer +``` + +### Final bill + +| Code | Meaning | Sent by | Status | +| :---- | :---- | :---- | :---- | +| 45 | Final bill submitted | Provider | `request.initiated`; acknowledgement `response.partial` or `response.error` | +| 46 | Final bill approved | Payer | `response.complete` | +| 47 | Final bill queried | Payer | `request.initiated` | +| 491 | Final bill denied | Payer | `response.complete` | +| 181 | Final bill query answered | Provider | `response.complete` | + +### Payment + +| Code | Meaning | Sent by | Status | +| :---- | :---- | :---- | :---- | +| 30 | Payment initiated | Payer | `request.initiated` | +| 31 | Payment processed | Payer | `request.initiated` | +| 33 | Payment settled | Payer | `request.initiated` | +| 17 | Payment notice acknowledged | Provider | `response.complete` | +| RP1 | Return payment | Not stated | `request.initiated` | +| RP2 | Return payment acknowledged | Not stated | `response.complete` | +| RP3 | Return payment failed | Not stated | `response.error` | + +```mermaid +stateDiagram-v2 + classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + [*] --> Initiated: 30 + Initiated --> Processed: 31 + Processed --> Settled: 33, UTR available + Settled --> Acknowledged: 17, sent by the provider + Acknowledged --> [*] + class Acknowledged provider + class Initiated,Processed,Settled payer +``` + +### Reprocess and arbitration + +| Code | Meaning | Sent by | Status | +| :---- | :---- | :---- | :---- | +| 36 | Claim arbitration requested, covering reprocess and shortfall | Provider | `request.initiated` | +| 37 | Arbitration acknowledged | Payer | `response.complete` | +| 252 | Reprocess approved | Payer | `response.complete` | +| 253 | Reprocess rejected | Payer | `response.complete` | +| 254 | Reprocess queried | Payer | `request.initiated` | + +### Wallet, fraud and grievance + +| Code | Meaning | Sent by | Status | +| :---- | :---- | :---- | :---- | +| 34 | Wallet upgrade | Provider | `request.initiated` | +| 35 | Wallet upgrade acknowledged | Payer | `response.complete` | +| 38 | Fraud alert | Not stated | `request.initiated` | +| 39 | Fraud alert acknowledged | Not stated | `response.complete` | +| G11 | Grievance raised | Not stated | `request.initiated` | +| G12 | Grievance acknowledged | Not stated | `response.complete` | +| G13 | Grievance failed | Not stated | `response.error` | + +### Notifications + +| Code | Meaning | Sent by | Status | +| :---- | :---- | :---- | :---- | +| N01 | Notification to a payer | Not stated | `request.initiated` | +| N02 | Notification to a provider | Not stated | `request.initiated` | +| N03 | Notification to a beneficiary | Not stated | `request.initiated` | +| N04 | Notification acknowledged | Not stated | `response.complete` | + +### Reimbursement claims + +These mirror the cashless codes with an `R` prefix and are not covered further in this documentation. + +| Code | Meaning | Sent by | Status | +| :---- | :---- | :---- | :---- | +| R15 | Reimbursement claim submitted | Provider | `request.initiated` | +| R151 | Query answered | Provider | `response.complete` | +| R26 | Approved | Payer | `response.complete` | +| R27 | Queried | Payer | `request.initiated` | +| R28 | In process | Payer | `response.partial` | +| R291 | Rejected | Payer | `response.complete` | +| R122 | Reimbursement claim reprocess requested | Provider | `request.initiated` | +| R252, R253, R254 | Reprocess approved, rejected, queried | Payer | `response.complete`, `response.complete`, `request.initiated` | + +Six notes on where the sources disagree, all resolved here by taking the sheet as the authority. + +- **251** is a reprocess acknowledgement in all three sources; they differ on scope. The sheet scopes it to a preauthorisation reprocess, the handbook uses it in its claim reprocess chapter. +- **Cancellation** is a three-way clash, not a two-way one. The sheet and the handbook's own code table give PC01, with PC02 for the answer. The handbook's lifecycle table, its prose and its cancellation-reason appendix all give 122 instead. And the sheet already uses 122, in the form R122, for a reimbursement claim reprocess, which is a different exchange altogether. So the number the handbook tells you to send for a cancellation is a number the sheet has assigned to something else. +- **18** is a preauthorisation query acknowledgement in the sheet and the value set, and a reprocess submission in the handbook. The same number, two unrelated meanings. +- **Reprocess has two codes inside the handbook alone.** One section gives 18 for submitting a reprocess. Another gives 36, claim arbitration request submitted, for the same act, and the sheet lists 36 as a claim arbitration intimation. Nothing in the material reconciles them. +- **Shortfall has no code of its own, but it is not codeless.** It travels on 36, the same code as a claim arbitration request, which the FAQ calls raising an erroneous claim. What it lacks is a distinct name in the protocol: it is a reprocess with a reason of partial payment, raised after the settlement notice on 33 has arrived and been acknowledged. +- **25 and 291** are claim *document* acknowledgement and denial in the sheet, and claim request received and denied in the value set. The tables and diagrams here follow the value set, which is how the claim lifecycle is described everywhere else. + +The source sheet's fourth column marks certain code-and-status pairs as protocol errors rather than normal traffic. For 131, 45, 47 and 30 it flags **both** the `response.partial` and the `response.error` acknowledgement, not just the error one. So an interim acknowledgement on those four is a fault by the sheet's reckoning, even though it reads like ordinary traffic. It also flags 18 with `response.error`, and a query on 27 sent as `response.partial` or `response.complete`. Treat all of those combinations as faults, not states. + +The mapping of codes onto the use cases in the previous chapter is drawn from the code names themselves; the portal lists codes and use cases separately, so confirm a specific pairing before building. This list is expected to grow as new scenarios are defined, so the current specification remains the authority. + +## In short + +- Endpoints alone do not identify a transaction. The workflow code in the header does. +- Each code expects a particular status word, given here beside it. +- The A-series carries no workflow code: those are registry and session calls. +- Six points where the sources disagree are resolved here by taking the workflow sheet as the authority. diff --git a/site/docs/nhcx/v1/fhir-reference/_category_.json b/site/docs/nhcx/v1/fhir-reference/_category_.json new file mode 100644 index 000000000..08e9267bf --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "FHIR reference", + "position": 8 +} diff --git a/site/docs/nhcx/v1/fhir-reference/bundles-and-conventions.md b/site/docs/nhcx/v1/fhir-reference/bundles-and-conventions.md new file mode 100644 index 000000000..a16f6c432 --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/bundles-and-conventions.md @@ -0,0 +1,98 @@ +--- +title: Bundles and conventions +sidebar_label: Bundles and conventions +description: "The rules every NHCX FHIR bundle obeys before any use case: the collection bundle, profiles, references, ids and attachments." +verification: unverified +source: Domain Specifications page; Implementation Guide for Adoption of FHIR in ABDM and NHCX; NHCX Integration Handbook §1.3, Appendix A.3; NHCX-PMJAY-HMIS Integration Guide §7.4, §8.4.0; Sample FHIR bundles +sidebar_position: 1 +--- + +# Bundles and conventions + +Everything that crosses the exchange is one FHIR R4 Bundle of type `collection`, built to the NRCeS profiles for NHCX. This chapter is the set of rules every bundle obeys before any use case is considered. Every chapter after it covers one exchange in one direction, because that is the unit you actually build. A request and its response are different bundles with different rules, and putting them in one chapter hides that. + +## In short + +- Everything crossing the exchange is one FHIR R4 Bundle of type `collection`, built to the NRCeS profiles. +- NRCeS is the authority and publishes no payloads; twenty-two PMJAY bundles are the only real evidence. +- The open-protocol page says `document` bundles with a `Composition`. Every sample uses `collection`. Build `collection`. +- Fourteen rules hold across every bundle, including element ids, which the live sandbox proved mandatory. +- Inline attachments in the samples are base64 encoded twice; `DocumentReference` attachments are encoded once. + +## Where the payloads come from + +Two names appear throughout this section and they do different jobs. + +**NRCeS** is the authority. It publishes the profiles every resource declares and the code systems every coding binds to. It does not publish payloads. The one implementation guide it has issued for NHCX contains no machine-readable example at all; every worked example in it is a picture. So NRCeS tells you what shape a resource must have, and nothing more. + +**PMJAY** is the evidence. Twenty-two complete bundles from one sandbox run are the only real payloads available, and they are what this section is built on. They cover one patient, one policy, one preauthorisation and one claim, from eligibility through to payment. + +That pairing has a consequence. The samples are a record of what one implementation actually sent and received, not a curated specification, and they carry the defects of a real system. Where a sample contradicts the profile, or contradicts another sample, the chapters here say so and name both sides. Free-text values such as an adjudicator's name in a disposition field confirm what these are: hand-run transactions, captured as they happened. + +Eight of the exchange directions this section covers have no sample at all. Those chapters are written from specification and labelled as such. + +## The bundle + +```json +{ + "resourceType": "Bundle", + "id": "VB26AA2600001", + "identifier": { "system": "https://payer.pmjay.nha.gov.in", "value": "VB26AA2600001" }, + "meta": { "lastUpdated": "2026-02-26T12:51:30+05:30" }, + "type": "collection", + "timestamp": "2026-02-26T12:51:30+05:30", + "entry": [ + { "fullUrl": "urn:uuid:…", "resource": { "resourceType": "Claim", "…": "…" } } + ] +} +``` + +- `type` is always `collection`. Not `document`, not `transaction`. +- Entries are resources placed directly; no request or response elements. +- The bundle's identifier is the case number under PMJAY. + +**The one contradiction you must settle before writing any code.** The open-protocol page on the portal states that all claim objects are modelled as bundles of type `document`, with a `Composition` as the first resource. Every one of the twenty-two PMJAY samples uses `collection`, with no root Composition. One teaching deck manages to show both, on different slides. Compositions do appear inside PMJAY bundles, but as nested clinical documents rather than as the bundle's own header. Build `collection`, because that is what the live exchange has been observed to accept, and know that you will meet the other reading in the written specification. + +**A second trap in the same block.** All ten provider request samples carry `meta.lastUpdated` frozen at `2025-11-11T15:09:41.516+05:30`, a template value four months older than the transaction, while `Bundle.timestamp` holds the real date. Payer bundles set both correctly. Do not read `meta.lastUpdated` as meaning anything, and do set it correctly in what you send. + +## Fourteen rules + +1. **Profiles.** A resource declares its NRCeS profile in `meta.profile`, for example `https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim`, and the gateway and the payer validate against it. Declare one on everything you send. Do not assume one on everything you receive: ten of the twenty-two samples contain resources with no profile at all, including every payer-generated response. +2. **References.** Resources inside one bundle reference each other by `urn:uuid:` and each entry carries that UUID as its `fullUrl`. The samples on the portal use absolute URLs instead; both are accepted, `urn:uuid:` is the handbook's recommendation. +3. **Timestamps** are ISO 8601 with the Indian offset, `+05:30`. The handbook says UTC fails validation. +4. **Identifiers carry a type code, from one of two systems.** `PMJAY`, `ABHA`, `CLN` and `UTR` come from NRCeS at `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code`. `NPI` for a hospital's HFR ID, `NIIP` for a payer's registry ID, `NH` for a plan and `JHN` for a jurisdictional health number come from HL7 at `http://terminology.hl7.org/CodeSystem/v2-0203`. Take the system from the samples, not from the code. +5. **The HFR ID inside the bundle** must equal the registry ID on the sender's participant record. +6. **Sequences link things.** A `Claim.item` points at its diagnosis, procedure, care team and supporting information by their sequence numbers, not by reference. +7. **Documents arrive two ways, and the samples use both.** A supporting-info entry either carries the file inline in `valueAttachment`, or points with `valueReference` at something else in the same bundle. The specification says that something is a `DocumentReference`; in the real preauthorisation the reference points at a `Composition` instead, because the embedded clinical documents are flattened into the same collection rather than nested as attachments. Accept both when reading. One document per supporting-info entry, 2 MB each, 20 MB for the bundle. +8. **Category decides structured or not.** Supporting-info categories `DIA`, `HDS`, `CD`, `INF` take a reference to a structured document; `POI`, `POA`, `DOB`, `DEF`, `FIR`, `ATT`, `MB` take an attachment. +9. **Codes and displays match the plan** character for character. The payer rejects a package whose display differs from the plan's. This includes the plan's own misspellings, which are real and must be stored and echoed verbatim. +10. **Inline attachments in the samples are base64 twice over.** Every inline `valueAttachment.data` in the preauthorisation, enhancement and both claim submissions decodes to another base64 string, which then decodes to the actual PDF or image. The `DocumentReference` attachments in the very same bundles are encoded once. Nothing documents this, and it is the sort of defect that renders as a blank page at the payer and gets blamed on the wrong layer for a week. Decide deliberately which convention you follow, and check what the payer's system actually accepts before your first real submission. +11. **The same `Claim` serves preauthorisation and claim.** Only `Claim.use` changes. Build one and switch the field. Note that the sampled claim does not carry a `preAuthRef`, so nothing in the payload links a claim to the preauthorisation it followed. + +12. **Every Claim bundle carries element ids, and the payer service reads by them.** The SHA HP sandbox refuses an item without an `id`, with `PAYR-1027`, "invalid item id". That is not a code lookup at all. Give the `Claim` its claim number as `id`, each `item` `Item/n`, each `procedure` `Procedure/n`, and each `supportingInfo` `SupportingInformation/n`. The resources take a serial: `1` for `Patient`, `Coverage` and the provider `Organization`, `2` for the payer `Organization`, and their sequence for `Practitioner` and `Procedure`. The NHA samples carry all of these; the reference set under `apps/reference/provider` now does too. Verified live, Building a Provider 10. +13. **A Practitioner carries the HPR id as `HPIN` as well as `HPID`.** The SHA looks the doctor up by the identifier typed `HPIN` (`PAYR-1083` without it), under `https://hpr.abdm.gov.in`. Keep `HPID` and the registration number typed `MD` beside it. Verified live. +14. **A PMJAY item is coded from the package master, not from the hospital's own categories.** `item.category` is the master's specialty code, `MG` rather than a generic `GEN`. The ward tier rides as `item.modifier` with the master's stratification code. A claim bills the package alone at the whole amount, because the rate is all-inclusive. Building a Provider 10 has the mapping. + +## The focused resources + +The domain specification names the resources NHCX profiles and expects. A use case uses a subset. + +| Resource | Used by | +| :---- | :---- | +| `CoverageEligibilityRequest`, `CoverageEligibilityResponse` | Eligibility | +| `Claim`, `ClaimResponse` | Preauthorisation, claim, predetermination, and the answer to any Task | +| `InsurancePlan` | Plan | +| `Task` | Plan request, cancel, reprocess, search, payment notice, payment acknowledgement, communication | +| `PaymentNotice`, `PaymentReconciliation` | Payment | +| `Communication`, `CommunicationRequest` | Communication | +| `Patient`, `Organization`, `Practitioner`, `PractitionerRole`, `Coverage` | Every bundle | +| `Procedure`, `Condition`, `Encounter`, `Observation`, `DiagnosticReport`, `Composition`, `DocumentReference`, `Questionnaire`, `QuestionnaireResponse`, `Appointment`, `ChargeItem`, `Invoice`, `Medication`, `MedicationRequest`, `AllergyIntolerance` | Inside preauthorisation and claim bundles, as clinical and billing evidence | + +The real PMJAY preauthorisation sample carries 31 entries; the claim sample 44; a query answer with a full clinical set 96. That is the scale to design for. + +## Where the profiles live + +- NHCX profiles: `https://nrces.in/ndhm/fhir/r4/hcx-profile.html` +- Bundle profiles: `StructureDefinition-CoverageEligibilityRequestBundle`, `ClaimBundle`, `ClaimResponseBundle`, `InsurancePlanBundle`, `PaymentNotice`, `Task`, under the same base +- Value sets: `ValueSet-ndhm-supportinginfo-category`, `ValueSet-ndhm-supportinginfo-code`, `ValueSet-ndhm-benefitcategory` +- Validation help: `nrc-help@cdac.in` diff --git a/site/docs/nhcx/v1/fhir-reference/cancel-reprocess-and-shortfall.md b/site/docs/nhcx/v1/fhir-reference/cancel-reprocess-and-shortfall.md new file mode 100644 index 000000000..d7feba532 --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/cancel-reprocess-and-shortfall.md @@ -0,0 +1,142 @@ +--- +title: Cancel, reprocess and shortfall +sidebar_label: Cancel, reprocess and shortfall +description: Three post-decision exchanges on one endpoint pair, told apart only by Task.code, with samples for one of the three. +verification: unverified +source: "Sample FHIR bundles, `preauth/cancel/preauth_cancel_req.txt` and `preauth_cancel_response.txt`; NHCX PMJAY Integration Handbook §4.1, §4.2, §8.6, §10, Appendix B; NHCX Requests and Responses for UseCases, Value sets and Reprocess sheets; Workflow Status Sheets (with Codes); NHCX FAQs" +sidebar_position: 15 +--- + +# Cancel, reprocess and shortfall + +Three post-decision exchanges share one endpoint pair, `/v1/task/submit` outbound and `/v1/task/on_submit` inbound. All three are `Task` bundles. `Task.code` is the only thing that separates them, so the code has to be right or the payer routes the message to the wrong queue. Cancellation has samples on both sides. Reprocess is specified element by element and has no sample. Shortfall is barely specified at all. + +```mermaid +flowchart LR + P[Provider] + X[NHCX gateway] + Y[Payer] + P -->|"POST /v1/task/submit
Task.code = cancel or reprocess"| X + X --> Y + Y -->|"POST /v1/task/on_submit
Task.status = completed"| X + X --> P + style P fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + style Y fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + style X fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 +``` + +## In short + +- Three post-decision exchanges share `/v1/task/submit` and `/v1/task/on_submit`. +- `Task.code` is the only thing separating them, so it has to be right or the payer routes to the wrong queue. +- Cancellation has samples on both sides. Reprocess is specified but unsampled. Shortfall is barely specified. +- The word "shortfall" appears once in the whole published corpus. + +## Cancel: the request bundle + +The provider withdraws a preauthorisation it has already submitted. The bundle is small. There is no `Claim` in it and no `Patient`. + +| # | Resource | What it is for | +| :---- | :---- | :---- | +| 1 | `Task` | The cancellation instruction. Carries the reason and the two case identifiers | +| 2 | `Organization` | The provider, `NPI` `IN1910000151`, named "Usha Kiron" | +| 3 | `Organization` | The payer, `NIIP` `1518`, named "SHA HP" | + +Entry 1 uses a `urn:uuid:` `fullUrl`. Entries 2 and 3 use absolute URLs, and `Task.requester` and `Task.owner` point at those URLs. Both styles appear in one bundle. + +### The fields that matter + +| Path | Value in the sample | +| :---- | :---- | +| `Task.status` | `requested` | +| `Task.intent` | `order` | +| `Task.code.coding.system` | `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `Task.code.coding.code` | `cancel`, with no `display` | +| `Task.reasonCode.coding.system` | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | +| `Task.reasonCode.coding.code` | `treatmentplanchanged` | +| `Task.input[0].type.coding.code` | `claimNumber`, system `.../ndhm-task-input-type-code` | +| `Task.input[0].valueString` | `VB26AA2600001` | +| `Task.input[1].type.coding.code` | `initimationNumber` | +| `Task.input[1].valueString` | `VB26AA2600001` | + +**Send `initimationNumber`, not `intimationNumber`.** The misspelling is in the live payload and in the NHCX value set, which lists the input type as `InitimationNumber`. The PMJAY handbook writes `intimationNumber` correctly in its cancellation table, then flags in its reprocess table that the real payload uses `initimationNumber`. Match the payer, not the prose. Both inputs carry the same value in the sample, so the sandbox does not distinguish the case number from the intimation number. + +### Cancellation reasons + +All from `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code`. + +| Code | Meaning | +| :---- | :---- | +| `treatmentplanchanged` | The clinician changed the approach during hospitalisation | +| `patientrequest` | The patient left or moved to another hospital | +| `financialconstraints` | The patient cannot meet the uncovered cost | +| `alternativetreatment` | A different procedure was chosen | +| `duplicateclaim` | The preauthorisation was submitted twice | +| `administrativeerror` | The original submission carried wrong data | +| `other` | Anything else; explain in `Task.description` | + +## Cancel: the response bundle + +The payer answers on `/v1/task/on_submit`. Every resource carries a `SUBSETTED` meta tag, so treat the bundle as a summary and not as a full record. + +| # | Resource | What it is for | +| :---- | :---- | :---- | +| 1 | `Task` | The outcome wrapper. `output[0]` is a reference to the `ClaimResponse` | +| 2 | `ClaimResponse` | The adjudication result for the cancelled case | +| 3 | `Patient` | Identifier only, PMJAY ID `MD5SLS4X5` | +| 4 | `Organization` | The payer, `1518` | +| 5 | `Organization` | The provider, bare numeric `1652`, named "CITY SUPERSPECIALITY HOSPITAL" | +| 6 | `Coverage` | Policy `PMJAY/HP/S/G`, class `PMJAY/HP/S/2024/R2` | + +| Path | Value in the sample | +| :---- | :---- | +| `Task.status` | `completed` | +| `Task.code.coding.system` | `http://hl7.org/fhir/CodeSystem/task-code` | +| `Task.code.coding.code` | `approve`, display "Activate/approve the focal resource" | +| `Task.output[0].type.coding` | `include`, system `.../financialtaskinputtype` | +| `Task.output[0].valueReference` | The `ClaimResponse` in entry 2 | +| `ClaimResponse.outcome` | `complete` | +| `ClaimResponse.adjudication[0].category` | `status`, with `reason` `cancelled` | +| `ClaimResponse.total[0]` | `benefit`, `2700.00` | + +Read the cancellation outcome from `ClaimResponse.adjudication[0].reason.coding.code`, which is `cancelled`. Do not read it from `outcome`, which is `complete` because the request was fully processed, and do not read it from `Task.code`. + +## What the samples show + +`preauth/cancel/preauth_cancel_req.txt`, 3,242 bytes, three entries. `preauth/cancel/preauth_cancel_response.txt`, 6,603 bytes, six entries. Both cover preauthorisation `VB26AA2600001` on 26 February 2026. There is no claim cancellation sample and none where the payer refuses a cancellation. + +## Reprocess: specified, not sampled + +The archive carries an empty `reprocess/` directory. A sample was scoped and never produced. Everything below comes from the PMJAY handbook section 10 and the NHCX Reprocess sheet, and none of it has been observed on the wire. + +Reprocess is the appeal. The provider uses it when a claim was rejected or approved for less than the claimed amount, and has new evidence or a disputed reading of policy. + +| Path | Specified value | +| :---- | :---- | +| `Task.status`, `Task.intent` | `requested`, `order` | +| `Task.code` | `reprocess`, system `.../financialtaskcode`, display "Reprocess" | +| `Task.reasonCode.coding.code` | `rejectiondisputed` in the handbook's table. The value set instead defines `claimrejected`, `partialpayment`, `erroneousclaim`, `referred`, `erroneousregistration` and `wrongdiagnosis`. `rejectiondisputed` is not in the value set | +| `Task.basedOn[0].reference` | The original `Claim`, for example `Claim/VB26AA2600001` | +| `Task.for.reference` | The `Patient` | +| `Task.input[0]` | `claimNumber` with the case number | +| `Task.input[1]` | `intimationNumber`, which the handbook itself annotates as `initimationNumber` in the real payload | +| `Task.input[2]` | Optional `supportingDocument`, free text or a document reference | + +Workflow codes: **18** on submission, **251** when the payer acknowledges receipt, **252** approved, **253** rejected, **254** queried. The handbook's provider-side table gives **36**, CLAIM_ARBITRATION_REQUEST_SUBMITTED, for the same act, and the workflow sheet lists 36 as "Claim Arbitration Intimation". Two codes for one submission. Confirm which the payer accepts before you build. + +The answer arrives as a `Task` with `status = completed` whose `output[].valueReference` resolves to a `ClaimResponse` inside the same bundle. Parse that `ClaimResponse` with the parser you already use for a claim response. The cancel response above proves the shape works, since it uses the same `output` and `include` mechanism. + +## Shortfall + +The word "shortfall" appears exactly once in the whole documentation mirror. It is in the FAQs, describing the cap on an Erroneous claim. The amount claimed cannot exceed the difference between the claimed and the approved figure, so a case claimed at 10,000 and paid at 6,000 supports a further request of at most 4,000. There is no shortfall `Task.code`, no shortfall reason code, and no shortfall sample. + +What is real is the mechanism the provider chapters describe. A shortfall is raised as a reprocess with `reasonCode` `partialpayment`, only after the payment cycle completes on workflow 33, and the supporting evidence rides as a `Task.input` attachment. Treat "shortfall" as an operational word for a reprocess, not as a distinct exchange. + +## Traps + +- **Three `Task` code systems across four `Task` exchanges.** The cancel request uses `financialtaskcode|cancel`, the cancel response `task-code|approve` from a third system and saying "approve" about a cancellation, the payment notice `ndhm-task-codes|deliver`. Switch on system and code together, never on the code alone. +- **`Claim.type` flips inpatient to outpatient.** The preauthorisation request for `VB26AA2600001` carries `737481003` "Inpatient care management (procedure)". The cancel response for the same case number carries `737492002` "Outpatient care management (procedure)". Nothing in the case changed. Do not use the payer's `Claim.type` to update your record. +- **The payer identifier system is misspelled.** The cancel response bundle identifier uses `https://payer.pmajy.nha.gov.in`, with `pmajy` for `pmjay`. The request uses the correct spelling. Match on the identifier value, never on the system string. +- **Provider identity changes shape.** The request names the provider `IN1910000151`; the response names it `1652` with a different organisation name. Both are the same hospital. +- **The cancelled case still reports money.** `total[benefit]` remains `2700.00` on a cancelled preauthorisation. Zero the figure yourself once the adjudication reason reads `cancelled`. +- **Workflow codes for cancellation disagree.** The workflow sheet gives `PC01` for the request and `PC02` for the answer. The handbook gives `122` in its lifecycle prose, section 8.6 and Appendix B, while the same sheet uses `R122` for a reimbursement claim reprocess. Make the code configurable per payer. diff --git a/site/docs/nhcx/v1/fhir-reference/claim-query-and-answer.md b/site/docs/nhcx/v1/fhir-reference/claim-query-and-answer.md new file mode 100644 index 000000000..ad9b8b1db --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/claim-query-and-answer.md @@ -0,0 +1,122 @@ +--- +title: Claim query and answer +sidebar_label: Claim query and answer +description: A query is an ordinary ClaimResponse with outcome partial, and the answer is the whole claim bundle sent again. +verification: unverified +source: "Sample FHIR bundles, `claim/claimresponse_withQuery.txt`, `claim/claim_queryUpdate_req.txt`, `claim/claim_queryUpdate_response.txt`, `claim/claim_Request.txt`, compared against `preauth/preauthresponse_with_query.txt`; NHCX Integration Handbook §10, §12.2, §12.3; NHCX-PMJAY-HMIS Integration Guide §8.5; NHCX open protocol, Task and Communication" +sidebar_position: 14 +--- + +# Claim query and answer + +A query is the payer asking for something before it will adjudicate. Under PMJAY it is not a distinct message. The question arrives as an ordinary `ClaimResponse` with `outcome` `partial` and `disposition` `queried`, and the answer goes back as a wholly re-submitted claim bundle on the same claim number. Two exchanges in one chapter, because neither makes sense without the other. + +```mermaid +flowchart LR + A["Provider
claim_Request.txt
44 entries"] --> B["/v1/claim/submit"] + B --> C["Payer
claimresponse_withQuery.txt
partial / queried"] + C --> D["Provider
claim_queryUpdate_req.txt
31 entries, same claim number"] + D --> E["/v1/claim/submit"] + E --> F["Payer
claim_queryUpdate_response.txt
complete / ok"] + classDef prov fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + classDef pay fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + classDef exch fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 + class A,D prov + class C,F pay + class B,E exch +``` + +## In short + +- Under PMJAY a query is not a distinct message: it is a `ClaimResponse` with `outcome` `partial`. +- The answer is a wholly re-submitted claim bundle on the same claim number. +- Two exchanges in one page, because neither makes sense without the other. +- Zero benefit on a query means undetermined, not refused. + +## The query has no resource of its own + +This is the thing to understand before anything else. The NHCX protocol layer and the PMJAY handbook both specify a `Task` and `Communication` pair for exactly this purpose: the payer raises a `Task`, the provider answers with a `Communication` carrying the requested payload. Nothing in the sample set uses it. There is no `Communication` bundle anywhere in the archive. + +What PMJAY does instead is carry the question as free text inside `ClaimResponse.item.adjudication` where `category.coding.code` is `reason`, in `reason.coding.display`. There is no `code`, only a `display`. The answer is a fresh claim submission with no marker saying what it answers. Build for the ad-hoc form, because that is the only form with samples, and keep the `Task` and `Communication` path behind a flag until a payer asks for it. + +## The payer's query + +`claimresponse_withQuery.txt`, 6,799 bytes, five entries, structurally identical to the approval in chapter 11. What differs: + +| Path | Query | Final approval | +| :---- | :---- | :---- | +| `outcome` | `partial` | `complete` | +| `disposition` | `queried` | `ok` | +| claim-level `adjudication[0].reason.coding` | `queried` | `approved` | +| `item[0].adjudication[status].reason.coding` | `Queried` | `Approved` | +| `item[0].adjudication[eligible].amount` | 2700.00 | 2430.00 | +| `total[benefit]` | 0 | 2430.00 | +| `total[submitted]` | 2700.00 | 2700.00 | +| `total[PMJAY-T eligible]` | 2700.00 | 2430.00 | + +`total[benefit]` is zero on a query while the submitted and eligible totals stay at 2700. That zero is not a rejection and not a reduction to nil. It means no benefit has been determined yet. A reader that treats `benefit` of zero as a refusal will close a claim that is merely waiting for a document. + +Note also that `payeeType` is already `provider` on the query, and the claim-level `adjudication` reason code is the only place the word `queried` appears in a coded field. Everything else is prose. + +## Where the question is + +In `claimresponse_withQuery.txt` the question is: + +``` +"reason": { "coding": [ { "display": "Other queried 1st attempt" } ] } +``` + +That is the whole of it. No code, no system, no structure, no named document. + +The final response for the same claim replays the history in a different shape: + +``` + Auto approved by system.|null|USER1000099~02/27/2026, 03:02 ~Other~queried 1st attempt~CPD-Trust|System~27/02/2026, 03:20~NA~null~CITY SUPERSPECIALITY HOSPITAL|Approved +``` + +Segments are pipe-delimited, fields inside a segment tilde-delimited, and the field order is user, timestamp, query type, comment, trust. The literal string `null` appears as a segment and again as a field. The same run's preauthorisation query response uses the full pipe and tilde form from the start: + +``` +other Request acknowledged and accepted for further processing.|USER1000099~02/26/2026, 08:47 ~other~testing query with souvik~PPD-Trust|null|USER1000099~02/26/2026, 09:13 ~other~Testing query 2 with souvik~PPD-Trust +``` + +So the same payer, in the same sandbox run, sends a bare sentence on one query and a delimited audit trail on another. The format is not stable and there is no schema for it. Parse defensively: split on `|`, split each segment on `~`, and fall back to displaying the raw string whenever the field count is not five. Show it to a human. Do not branch on it. + +## The provider's answer + +`claim_queryUpdate_req.txt`, 376,270 bytes, 31 entries. It is a complete claim bundle, not a delta, submitted on the same claim number `EO26AA2700001`. + +| | Original request | Answer | +| :---- | :---- | :---- | +| Entries | 44 | 31 | +| `Bundle.timestamp` | `2026-02-27T08:40:11+05:30` | `2026-02-27T09:34:11+05:30` | +| `Claim.created` | `2026-02-27T08:40:02+05:30` | `2026-02-27T09:34:10+05:30` | +| `Claim.identifier.value` | `EO26AA2700001` | `EO26AA2700001` | +| `supportingInfo` | 9 entries, sequences `1, 2, 23, 24, 25, 26, 27, 8, 9` | Identical | +| Embedded documents | Invoice record and wellness record | Two diagnostic report records | +| `item`, `total`, `diagnosis`, `procedure` | Unchanged | Unchanged | + +Everything the payer might have queried about the money is byte-identical. What changed is the clinical evidence: the invoice and wellness compositions are replaced by two `DiagnosticReportRecord` compositions, each with a `DiagnosticReport`, four `Observation`s and a `DocumentReference` holding a surgical pathology report. + +Nothing in the answer says it is an answer. There is no supporting-info entry under category `NMI` with code `CQD` carrying query remarks, which is what the handbook's field tables describe for this case. There is no reference to the query, no attempt number, no changed status. The only thing joining the two messages is the claim number and the correlation ID at the protocol layer. Keep your own record of which submission answers which query, because the bundle will not tell you. + +## The attachment swap + +The two inline attachments on supporting-info sequences 1 and 2 are the same two files in both submissions, moved between document codes. + +| Sequence | Document code | Original request | Answer | +| :---- | :---- | :---- | :---- | +| 1 | `MAND0062` Detailed ICPs | `application/pdf`, 3,079 bytes | `image/jpeg`, 147,232 bytes | +| 2 | `MAND0063` Treatment details | `image/jpeg`, 147,232 bytes | `application/pdf`, 3,079 bytes | + +The two blobs are byte-for-byte identical to their counterparts in the first submission. Only the pairing flipped. So the second submission tells the payer that the detailed ICPs are now the file that was previously the treatment details, and vice versa. The `contentType` values follow the bytes, so nothing is technically mislabelled; the document code to file mapping is simply reversed. Both blobs are also base64-encoded twice in both submissions, as described in chapter 10. + +This is a defect in the sample, not a pattern to copy. Treat it as a warning about how easy it is to reorder attachments when rebuilding a bundle from scratch to answer a query. Key your attachments to their document code at the point you assemble them, and assert the pairing before you submit. + +## Traps + +- A query is `partial` plus `queried`, not `partial` alone. An interim approval is also `partial`. +- Zero benefit on a query is undetermined, not refused. +- The answer reuses the claim number. Do not allocate a new one. +- The answer is a full bundle. Rebuild it from your stored submission, not from the payer's response. +- There is no rejected claim sample and no `Communication` sample anywhere in the archive, so the escalation path past a repeated query is specified but unverified. diff --git a/site/docs/nhcx/v1/fhir-reference/claim-request.md b/site/docs/nhcx/v1/fhir-reference/claim-request.md new file mode 100644 index 000000000..a5bcf455b --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/claim-request.md @@ -0,0 +1,172 @@ +--- +title: Claim request +sidebar_label: Claim request +description: The same Claim as the preauthorisation with use switched, carrying the finalised dates, the bill and the full document set. +verification: unverified +source: "Sample FHIR bundles, `claim/claim_Request.txt` and `preauth/preauth_request.txt`; NHCX FAQs v1.2, cyclic treatment and newborn sections; NHCX Integration Handbook §9.4; NHCX-PMJAY-HMIS Integration Guide §8.4; NRCeS profiles at `https://nrces.in/ndhm/fhir/r4/`" +sidebar_position: 12 +--- + +# Claim request + +The claim is the provider's request for payment once treatment has happened. It is the same `Claim` resource as the preauthorisation with `use` switched from `preauthorization` to `claim`, carrying the finalised dates, the finalised bill and the full document set. It travels on `/v1/claim/submit` and is answered on `/v1/claim/on_submit`. This chapter describes the provider-to-payer direction only; the payer's answer is chapter 11. + +## In short + +- The same `Claim` as the preauthorisation with `use` switched to `claim`. +- It carries the finalised dates, the finalised bill and the full document set. +- `ADDD` is used as the code for three different dates. The category, not the code, distinguishes them. +- The one published sample is unrepresentative in four ways, including having no `preAuthRef` at all. + +## The bundle + +`claim_Request.txt` carries 44 entries in this order. The first six are the claim proper. Entries 7 to 18 are one embedded billing document. Entries 19 to 43 are one embedded observation document. The `Procedure` sits last, after both embedded documents, which is unexpected but valid in a `collection`. + +| Entry | Resource | Profile | What it is for | +| :---- | :---- | :---- | :---- | +| 1 | `Claim` | `Claim` | The request itself | +| 2 | `Patient` | `Patient` | The beneficiary, by PMJAY ID | +| 3 | `Organization` | `Organization` | The hospital, type `prov` | +| 4 | `Organization` | `Organization` | The payer, type `pay` | +| 5 | `Coverage` | `Coverage` | The policy | +| 6 | `Practitioner` | `Practitioner` | The care team member | +| 7 | `Composition` | `InvoiceRecord` | Root of the embedded billing document | +| 8 to 12 | `Organization`, `Practitioner`, `Encounter`, `Appointment`, `Patient` | various | Context for that document, duplicated inside it | +| 13, 15, 16 | `ChargeItem` | `ChargeItem` | Billed lines | +| 14 | `Medication` | `Medication` | A billed drug | +| 17 | `Invoice` | `Invoice` | Price components per line | +| 18 | `DocumentReference` | `DocumentReference` | The scanned bill, PDF | +| 19 | `Composition` | `WellnessRecord` | Root of the embedded observation document | +| 20 to 24 | `Organization`, `Practitioner`, `Encounter`, `Appointment`, `Patient` | various | Context for that document | +| 25 to 42 | `Observation` × 18 | `Observation` | Body measurement, activity, assessment, lifestyle | +| 43 | `DocumentReference` | `DocumentReference` | Surgical pathology report, PDF | +| 44 | `Procedure` | `Procedure` | The procedure the item pays for | + +The two embedded documents are self-contained. Each repeats its own `Patient`, `Organization` and `Practitioner` rather than referencing the ones at the top of the bundle, and each is reached from the `Claim` by a supporting-info entry pointing at its `Composition`. + +## The claim + +| Path | Sample value | +| :---- | :---- | +| `identifier[0].type.coding.code` | `CLN`, from `.../ndhm-identifier-type-code` | +| `identifier[0].system` | `https://hcx.pmjay.gov.in/v1/preauthorization`, unchanged at the claim stage | +| `identifier[0].value` | `EO26AA2700001`, the claim number, also the `Bundle.identifier` | +| `status` | `active` | +| `type.coding` | `737481003` "Inpatient care management (procedure)" | +| `use` | `claim` | +| `billablePeriod.start`, `.end` | `2026-02-27T08:40:02+05:30`, `2026-03-02T00:00:00+05:30` | +| `created` | `2026-02-27T08:40:02+05:30` | +| `priority.coding.code` | `normal`, from `http://terminology.hl7.org/CodeSystem/processpriority` | +| `insurance[0].focal` | `true` | +| `total.value` | `3300` | + +`billablePeriod` is the field the preauthorisation does not have. `preauth_request.txt` omits it entirely; the claim adds it, with `start` set to the moment of submission rather than to the admission date. Take the admission date from supporting information, not from `billablePeriod.start`. + +`Claim.type` binds `737481003` to `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-claim-type`, a ValueSet URL used where a CodeSystem URL belongs. Every sample does this. Send it as the samples send it. + +The single item names its package as `MG004B` "Dengue hemorrhagic fever" under `http://snomed.info/sct`, while the `Procedure` resource in the same bundle names the same code under `https://payer.pmjay.nha.gov.in`. One code, two systems, one bundle. The eligibility request binds package codes to the payer system as well. The rule the samples actually follow is: `Claim.item.productOrService` uses SNOMED, everything else uses the payer system, and neither code is a real SNOMED concept. + +`item[0].factor` is `0.5` while `unitPrice` and `net` are both `3300` and `total` is `3300`. The factor is carried but not applied. The payer's response reports `total[submitted]` as `2700`, which matches neither. Neither `unitPrice`, `net` nor `total` carries a `currency`. + +## Supporting information + +Nine entries. Four carry claim-stage documents, five carry dates and the discharge status. + +**Read this table as a requirement, not as a description of one sample.** A claim is refused without the discharge status and the discharge date. They are what tells the payer the episode has ended, and when. The gateway checks for them before the payer ever sees the bundle. The minimum a claim carries, over and above what the preauthorisation already carried, is: + +- **the discharge status**, category `DIS`, saying how the patient left, +- **the discharge date**, category `DSCHD`, +- **the admission date**, category `ADMD`, +- **the bill and the discharge summary**, as documents. + +A preauthorisation carries none of these, which is the single biggest difference between the two bundles and the easiest thing to miss when the same builder code produces both. + +| Sequence | Category | Code | Meaning | Value | +| :---- | :---- | :---- | :---- | :---- | +| 1 | `INV` | `MAND0062` | Detailed ICPs | Inline attachment, `application/pdf` | +| 2 | `INV` | `MAND0063` | Treatment details | Inline attachment, `image/jpeg` | +| 23 | `DIS` | `DTH` | Discharge to home | `valueString` "After surgery" | +| 24 | `ADMD` | `ADDD` | Admission date | `valueString` `2026-02-27T00:00:00+00:00` | +| 25 | `SURD` | `ADDD` | Surgery date | `valueString` `2026-03-02T00:00:00+00:00` | +| 26 | `OTH` | `EDT` | Encounter date and time | `valueString` `2026-02-27T08:38:48+00:00` | +| 27 | `DSCHD` | `ADDD` | Discharge date | `valueString` `2026-03-02T00:00:00+00:00` | +| 8 | `INV` | `MAND0064` | All investigations reports | Reference to the billing document's `Composition` | +| 9 | `INV` | `MAND0006` | Detailed discharge summary | Reference to the observation document's `Composition` | + +Five things in that table will cost you time. + +**The category system is wrong on the four document entries.** They carry `category.coding.system = https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code` with code `INV`. `INV` belongs to the category value set, so the code is right and the system names the wrong value set. The five date entries in the same array use `.../ndhm-supportinginfo-category` correctly. The preauthorisation request and the enhancement request contain only the wrong-system form. Send what the samples send and expect the payer to accept both. + +**The sequences are non-monotonic and full of gaps.** The array runs `1, 2, 23, 24, 25, 26, 27, 8, 9`. Sequences 3 to 7 and 10 to 22 do not exist. This is not cosmetic. `Claim.item.informationSequence` links an item to its supporting information by sequence number, so a builder who indexes by array position rather than by the `sequence` field will resolve the wrong document. Build a map from `sequence` to entry and look up through it. + +**`ADDD` is used as the code for three different dates and displayed two different ways.** At sequence 24 it is displayed "Admission Date - Discharge Date". At sequences 25 and 27, where it stands for the surgery date and the discharge date, it is displayed "Admission Date". The category, not the code, is what actually distinguishes the three. Read `category.coding.code` and treat `ADDD` as noise. + +**Date offsets are mixed inside one resource.** `Claim.created` is `2026-02-27T08:40:02+05:30`. The `EDT` supporting-info string is `2026-02-27T08:38:48+00:00`, the same wall clock with a UTC offset. Interpreted literally the encounter is five and a half hours after the claim was created. The handbook says supporting-info dates are Indian local time. Emit `+05:30` and read incoming `+00:00` values as local. + +**Both inline attachments are base64 twice.** Decoding `valueAttachment.data` once yields another base64 string; decoding that yields the PDF and the JPEG. The `DocumentReference` attachments in the same bundle are encoded once. If a payer viewer shows a blank document, this is why. + +## Cyclic treatment + +Cyclic packages, dialysis and chemotherapy among them, need one supporting-info entry per cycle. The guidance for this exists only in the FAQ document, whose JSON is malformed: a missing quote on the `supportingInfo` key, a trailing comma inside the item, two unclosed braces and two `//` comments. There is no sample bundle for a cyclic claim. The reconstruction below repairs that fragment into well-formed JSON. It is an illustration of the two elements, not a quotable sample. + +```json +"item": [ + { + "id": "item-1", + "sequence": 1, + "informationSequence": [1] + } +], +"supportingInfo": [ + { + "sequence": 1, + "category": { + "coding": [{ + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code", + "code": "CD", + "display": "Clinical document" + }] + }, + "code": { + "coding": [{ + "system": "https://payer.pmjay.nha.gov.in", + "code": "TD", + "display": "Treatment detail" + }] + }, + "timingPeriod": { + "start": "2026-08-05T13:01:33+05:30", + "end": "2026-08-05T13:02:41+05:30" + }, + "valueReference": { + "reference": "urn:uuid:3f40b4ef-5359-43d3-aa31-c1e54b2d813a" + } + } +] +``` + +The clinical data must be structured FHIR, not a scanned PDF. One supporting-info entry per cycle, its sequence listed in the item's `informationSequence`, its document referenced from `valueReference`. Note that the fragment repeats the same wrong category system as the real samples, `ndhm-supportinginfo-code` carrying the category code `CD`. + +`timingPeriod` is the field that decides whether the cycle is paid. The payer validates its start and end against the biometric capture timestamp for that cycle, and a mismatch means the cycle is not treated as genuine. Biometric authentication is a live capture for every cycle with process type `Discharge`; a refresh token is accepted only at the final claim. So `timingPeriod` is not documentation, it is the evidence, and it must be written from the authentication log rather than from the ward's own clock. + +## Newborn + +A newborn has no policy of their own, so the parent stays the primary `Patient` and the child is a second `Patient` linked from the parent. The FAQ fragment for this is also malformed: the reference value is masked to `urn:uuid:cc81ceb5-2966-****-****`, and the parenthetical gloss sits inside the JSON. Reconstructed, with a complete UUID: + +```json +"link": [ + { + "other": { + "reference": "urn:uuid:cc81ceb5-2966-4f0a-9f5e-2b7c1d84a310", + "type": "Patient" + }, + "type": "refer" + } +] +``` + +The child's `Patient` needs gender and date of birth; the name is expected but is not treated as strictly mandatory. Twins are two independent child `Patient` resources and two independent submissions. A proof of date of birth supporting-info entry is mandatory, category `DOB`, code `BCF` for a birth certificate or `DCB` for the government hospital's discharge card where no certificate exists yet. Bill under the parent's name as "Baby of " with an attachment justifying it; a bill carrying only the baby's name is likely to be rejected. + +## What the sample shows + +`claim_Request.txt`, 386,100 bytes, 44 entries, claim number `EO26AA2700001`. It is unrepresentative in four ways. The two embedded documents are a wellness record and an invoice record, neither of which is the discharge summary the supporting-info titles promise. Their `Encounter` resources are `AMB` outpatient visits dated 2026-02-09, three weeks before the admission this claim is for. The package and diagnosis differ from the preauthorisation for the same patient, which the preauthorisation-to-claim workflow does not allow. There is no `preAuthRef` anywhere in the bundle, so nothing links this claim to preauthorisation `VB26AA2600001` except the shared patient. And `Bundle.meta.lastUpdated` is frozen at the template value `2025-11-11T15:09:41.516+05:30` while `Bundle.timestamp` holds the real submission time. diff --git a/site/docs/nhcx/v1/fhir-reference/claim-response.md b/site/docs/nhcx/v1/fhir-reference/claim-response.md new file mode 100644 index 000000000..52c4b5fcf --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/claim-response.md @@ -0,0 +1,113 @@ +--- +title: Claim response +sidebar_label: Claim response +description: The payer's adjudication of a claim, and the three ways every payer bundle differs from a provider one. +verification: unverified +source: "Sample FHIR bundles, `claim/claim_queryUpdate_response.txt` and `claim/claimresponse_withQuery.txt`, compared against `preauth/enhancement/enhancement_resp.txt`; NHCX Integration Handbook §9.5, §10; NHCX-PMJAY-HMIS Integration Guide §8.5; Standard Error Codes, Claim" +sidebar_position: 13 +--- + +# Claim response + +The claim response is the payer's adjudication of a submitted claim. It arrives on `/v1/claim/on_submit` as a `Bundle` of type `collection` holding a `ClaimResponse` and the four resources it references. The same shape carries an approval, a partial approval, a query and a rejection; only `outcome`, `disposition` and the adjudication codes change. This chapter covers the approval and the reduction. The query, which uses the same bundle with different values, is chapter 12. + +## In short + +- Five entries carrying a `ClaimResponse`. The same shape carries approval, reduction, query and rejection. +- Payer bundles differ from provider bundles in three visible ways, including the `SUBSETTED` meta tag. +- Five other payer bundles in the same run misspell the identifier system as `pmajy`. +- Only `outcome`, `disposition` and the adjudication codes change between decisions. + +## The bundle + +Five entries, in this order in both claim response samples. + +| Entry | Resource | What it is for | +| :---- | :---- | :---- | +| 1 | `ClaimResponse` | The adjudication | +| 2 | `Patient` | The beneficiary, by PMJAY ID | +| 3 | `Organization` | The payer, `NIIP` `1518` | +| 4 | `Organization` | The provider, `NPI` `IN1910000151` | +| 5 | `Coverage` | The policy, with a `class` entry | + +Payer bundles differ from provider bundles in three visible ways. Every resource carries `meta.tag` `SUBSETTED` "Resource encoded in summary mode", including the `Bundle` itself. Entries use absolute HTTPS `fullUrl` values under `https://payer.nha.gov.in/claim/v1/claim/on_submit/claimresponse/`, not `urn:uuid:`, and each entry repeats that URL in an `entry.id` field, which is not a FHIR element. And `Bundle.meta.lastUpdated` holds the real time here rather than the frozen template value the provider bundles carry. + +The `Bundle.identifier.system` is `https://payer.pmjay.nha.gov.in`, spelled correctly. Five other payer-generated bundles in the same sandbox run misspell it `pmajy`. The claim responses are not among them, so a parser that tolerates only the correct spelling will still break on the coverage and payment traffic. + +## The ClaimResponse + +| Path | Approval sample | +| :---- | :---- | +| `identifier[0].type.coding.code` | `CLN` | +| `identifier[0].system` | `https://hcx.pmjay.gov.in/v1/preauthorization` | +| `identifier[0].value` | `EO26AA2700001`, echoing the claim number | +| `status` | `active` | +| `use` | `claim`, mirroring the request | +| `created` | `2026-02-27T15:27:29+05:30` | +| `insurer` | Reference to the payer `Organization` | +| `requestor` | Reference to the provider `Organization` | +| `outcome` | `complete` | +| `disposition` | `ok` | +| `payeeType.coding` | `provider`, from `http://terminology.hl7.org/CodeSystem/payeetype` | + +Three elements a builder expects are absent from both samples. There is no `request` reference back to the `Claim`, so the response is joined to its claim by `identifier.value` and by nothing else. There is no `preAuthRef`. There is no `processNote`, so the reduction is explained inside the adjudication rather than in a note, and `item.noteNumber` never appears. + +`requestor` names the provider organisation as `IN1910000151` "CITY SUPERSPECIALITY HOSPITAL". The provider's own request bundle names the same registry ID "Usha Kiron", and the preauthorisation responses for the same case use a bare numeric `1652` with the superspeciality name. One transaction, one HFR ID, three identities. Match on the identifier value and never on the organisation name. + +## Adjudication + +The item-level array on the approved response carries six entries against `itemSequence` 1. + +| Category | Field used | Value | +| :---- | :---- | :---- | +| `eligible` | `amount` | 2430.00 | +| `reason` | `reason.coding.display` | The audit trail string, below | +| `eligpercent` | `value` | 100 | +| `eligquant` | `value` | 1 | +| `status` | `reason.coding.code` | `Approved` | +| `deductible` | `amount` and `reason.coding` | 270, code `DEDUCT/01` | + +Every category except `deductible` and the claim-level `status` binds to `https://hl7.org/fhir/R4/valueset-adjudication.html`, an HTML documentation page used as a code system. `deductible` and the claim-level status carry a `coding` with no `system` at all. Do not attempt to resolve either. + +The deduction is the whole reason the benefit is less than the submission. Its reason code is `DEDUCT/01`, display "Non-Covered Service: The claimed service is not covered under the policy and therefore the amount is deducted." It appears only at item level. A reader that sums approved amounts without reading item deductions will report the wrong figure to the finance desk. + +Above the items sits a single claim-level `adjudication` entry: category `status`, reason `approved` on the final response and `queried` on the query. That code, not `outcome`, is the decision. + +## Totals + +Three totals, and they are computed on two bases. + +| `total[].id` | Category | Query response | Final response | +| :---- | :---- | :---- | :---- | +| `total` | `benefit` | 0 | 2430.00 | +| (none) | `submitted` | 2700.00 | 2700.00 | +| `PMJAY-T` | `eligible` | 2700.00 | 2430.00 | + +On the claim both `benefit` and the `PMJAY-T` eligible total are cumulative and agree once the claim settles. On the enhancement response they do not: `benefit` reports only the increment while the `PMJAY-T` eligible total is cumulative. No document states the rule, and the discriminator is the `total[].id`, an internal string rather than a code. Read `benefit` as the payable amount for the exchange you are in, and treat the `PMJAY-T` entry as the running policy figure. + +`total[submitted]` is 2700.00 in both responses. The provider's claim bundle declares `Claim.total.value` of 3300 with an item `factor` of 0.5. The payer's submitted figure matches neither, which means it comes from the payer's own record of the case rather than from the bundle it was sent. Do not reconcile your submitted amount against `total[submitted]`. + +The `reason` string on the final response also mixes date formats inside itself: + +``` + Auto approved by system.|null|USER1000099~02/27/2026, 03:02 ~Other~queried 1st attempt~CPD-Trust|System~27/02/2026, 03:20~NA~null~CITY SUPERSPECIALITY HOSPITAL|Approved +``` + +The payer's own entry is stamped `02/27/2026` and the provider's reply `27/02/2026`, month first then day first, in one string written by one system. Both times are on a 12 hour clock with no meridiem against a response created at 15:27. Parse this string for display only. Never derive a timestamp from it. + +## Reading the outcome + +| `outcome` | Claim-level `adjudication` reason | Meaning | +| :---- | :---- | :---- | +| `complete` | `approved` | Adjudicated. `total[benefit]` is payable, less any item deduction | +| `partial` | `queried` | A question. Totals are zeroed. See chapter 12 | +| `partial` | `approved` | Approved at a reduced amount, pending further processing | +| `complete` | `cancelled` | Rejected. Specified, not sampled | + +`outcome` alone is not the decision. `partial` covers both a query and an interim approval, and the two need opposite handling. Read the claim-level adjudication reason first, then `disposition`, then the totals. + +Settlement is a separate event. A `complete` and `approved` response closes the adjudication, not the money. The claim is closed only when the payment notice arrives with a UTR. + +## There is no rejected claim sample + +The sandbox run contains no rejected claim. Both claim responses in the archive are the query and the approval that followed it, and no bundle anywhere in the set carries `outcome` `complete` with reason `cancelled`, a populated `ClaimResponse.error`, or a `form` element. The rejection path is specified in the handbook and in the standard error code list, and the gateway's `ClaimError-1` onward codes are real, but nothing in the sample set demonstrates them. Build the rejection branch from the specification, and treat the field-level detail as unverified until a payer sends you one. diff --git a/site/docs/nhcx/v1/fhir-reference/codes-and-value-sets.md b/site/docs/nhcx/v1/fhir-reference/codes-and-value-sets.md new file mode 100644 index 000000000..051ce1f95 --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/codes-and-value-sets.md @@ -0,0 +1,188 @@ +--- +title: Codes and value sets +sidebar_label: Codes and value sets +description: Every code an NHCX bundle uses with the system it belongs to, and the bindings the published samples get wrong. +verification: unverified +source: NHCX Integration Handbook Appendix A; NHCX Requests and Responses for UseCases, value sets; Domain Specifications page, terminologies; NHCX FAQs v1.2 §24, §25 +sidebar_position: 19 +--- + +# Codes and value sets + +Every code an NHCX bundle uses, in one place, with the system it belongs to. The workflow codes are in the Overview's Workflow Codes chapter and are not repeated here. + +## In short + +- Every code an NHCX bundle uses, with the system it belongs to. +- Supporting-info categories and codes come in two competing forms; the samples and the error messages disagree. +- Several declared systems are HTML documentation pages rather than code systems. Copy them anyway. +- The workflow codes are not repeated here; they have a page of their own. + +## Supporting-Info categories + +System `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category`. + +| Code | Display | Takes | +| :---- | :---- | :---- | +| `ONS` | Period, start or end dates | date-time string | +| `OTH` | Other | date-time string | +| `INV` | Investigation | reference | +| `ATT` | Attachment | attachment | +| `HDS` | Hospital discharge summary | reference | +| `DGN` | Diagnosis | reference | +| `LAB` | Lab test | reference | +| `AOB` | Onset of current symptoms | value | +| `MB` | Medical bill | attachment | +| `DIA` | Diagnostic report | reference | +| `CD` | Clinical document | reference | +| `INF` | Information | reference | +| `DIS` | Discharge status | string | +| `NMI` | Query remarks | string | +| `POI`, `POA`, `DOB`, `DEF`, `FIR`, `EMP` | Proof of identity, address, birth; declaration; FIR; employment | attachment | +| `STG` | Standard treatment guideline questionnaire | reference | +| `ADMD` | Admission date | date-time string | +| `SURD` | Surgery date | date-time string | +| `DSCHD` | Discharge date | date-time string | + +The last three are the categories the functional requirements document prescribes for the admission, surgery and discharge dates, and they are what the sample bundles actually carry. The payer's own rejection messages instead name `ONS` for all three. Both are in the corpus; confirm with the payer. + +## Supporting-Info codes + +System `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` in the sample bundles; the handbook writes it as `CodeSystem/`. Follow the samples. + +| Code | Display | +| :---- | :---- | +| `EDT` | EncounterDateTime | +| `ADDD` | Admission date - Discharge date | +| `PSP` | PatientSurgeryPerformed | +| `DSDE` | Discharge Date | +| `DTH` | DischargeToHome | +| `DTM` | DischargetoMortuary; also the death date under `ONS` | +| `LAMA` | Discharge with LAMA | +| `DAMA` | Discharge with DAMA | +| `DIS` | Discharge Summary | +| `100008` | General Findings | +| `100009` | Visual Acuity Report | +| `AT` | Questionnaire answers under `INF` | +| `ODN` | Policy-level questionnaire under `INF` | +| `CQD` | Case remarks for a query answer under `NMI` | +| `BCF` | Birth certificate | +| `DCB` | Discharge card for birth of a child | +| `MAND0006`, `MAND0062`, `MAND0409`, `MAND0455`, … | The mandatory-document family. The insurance plan defines several hundred of these, and the eligibility response with purpose auth-requirements returns the ones a given procedure needs. The code returned there is the code sent back on the supporting-info entry that satisfies it. | + +## Identifier types + +| Code | Meaning | +| :---- | :---- | +| `PMJAY` | Member ID | +| `ABHA` | ABHA number, no hyphens | +| `CLN` | Claim number | +| `NPI` | Provider's HFR ID | +| `NIIP` | Payer's registry ID | +| `NH` | Plan identifier | +| `MD` | Medical registration number | +| `MR` | Medical record number, used on a Communication | +| `ADN`, `HPID`, `HPIN`, `MCD` | Other identifier types the sample bundles carry | + +`HPIN` is not optional under PMJAY: the SHA HP sandbox looks the practitioner up by it and refuses a bundle without it with `PAYR-1083`. Send the HPR id as both `HPID` and `HPIN` (Building a Provider 10). +| `JHN` | Jurisdictional health number, used for ABHA in samples | +| `UTR` | Bank transaction reference | + +## Adjudication + +Categories: `submitted`, `eligible`, `copay`, `benefit`, `eligpercent`, `eligquant`, `reason`, `status`; totals add `tax`, `incentive`, `copayment`. + +Claim-level reasons: `approved`, `queried`, `cancelled`. + +Deduction reasons: `Non-CoveredService`, `ExceededCoverageLimit`, `DuplicateClaim`, `Coordination-of-Benefits`, `IncompleteDocumentation`, `PolicyDeductible`, `Co-Payment`, `FraudulentClaim`, `MedicalNecessity`, `BenefitLimitReached`, `MissedFilingDeadline`, `PaymentAlreadyMade`. + +Denial codes run `ClaimError-1` to `ClaimError-28`, and `PreauthError-1` to `PreauthError-13` plus `PreauthError-15`, with no 14 defined. Each is a sentence, such as "Claim has been rejected due to less than 24 hours of hospitalisation" or "Pre-Auth has been rejected as the Surgery was done before Pre auth approval". The full list is on the value-sets sheet. + +Letter form codes: `preauthapproval`, `preauthdenial`, `claimapproval`, `claimdenial`, `dischargeapproval`, `feedbackletter`, `policydocument`. + +## Task + +Codes: `reprocess`, `cancel`, `nullify`, `suspend`, `release`, `approve`, `search`, `poll`, `status`, `deliver`. + +Reasons: `partialpayment`, `erroneousclaim`, `claimrejected`, `rejectiondisputed`, `referred`, `erroneousregistration`, `wrongdiagnosis`, `treatmentplanchanged`, `patientrequest`, `financialconstraints`, `alternativetreatment`, `duplicateclaim`, `administrativeerror`, `other`; and for communication `tatquery`, `grievance`, `walletupdate`, `policychange`, `additionalinfo`, `claimArbitration`. + +Input types, at `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code`: `PayerId`, `ProviderId`, `PolicyNumber`, `ProductNumber`, `ClaimNumber`, `InitimationNumber`, `FromDate`, `ToDate`, `FinanceYear`, `ServiceCode`. The `include` input on a communication uses HL7's `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` instead. + +Output values: `paymentack`, `claimcancelled`, `claimreinitiated`, `claimsuspended`, `taskak`, `taskdelivered`. + +## Money types on a reconciliation + +`approvedamount`, `claimedamount`, `tds`, `servicetax`, `advance`, `recovered`, `penality`, and `Payment` for the net line. + +## Item categories + +Procedure types: `Procedure`, `Investigation`, `Implant`, `Drug`, `Package`, `Room`, `Stratifications`, `Consultation`. + +PMJAY specialties, system `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-benefitcategory`. + +| Code | Specialty | Code | Specialty | +| :---- | :---- | :---- | :---- | +| `BM` | Burns | `PM` | Palliative medicine | +| `DL` | Diagnostic laboratory | `SB` | Orthopaedics | +| `ER` | Emergency | `SC` | Surgical oncology | +| `HD` | High-end diagnostics | `SE` | Ophthalmology | +| `HM` | High-end medicine | `SG` | General surgery | +| `HP` | High-end procedures | `SL` | Otorhinolaryngology | +| `ID` | Infectious diseases | `SM` | Oral and maxillofacial | +| `IN` | Interventional neuroradiology | `SN` | Neurosurgery | +| `MC` | Cardiology | `SO` | Obstetrics and gynaecology | +| `MG` | General medicine | `SP` | Plastic surgery | +| `MM` | Mental disorders | `SS` | Paediatric surgery | +| `MN` | Neonatal | `ST` | Polytrauma | +| `MO` | Medical oncology | `SU` | Urology | +| `MP` | Paediatric medical | `SV` | CTVS | +| `MR` | Radiation oncology | `US` | Unspecified surgical | +| `OT` | Transplant | | | + +The actual specialties and packages for a hospital come from its InsurancePlan; this list is the value set they draw from. Each specialty's unspecified package is its prefix plus `215`; the unspecified item code on a claim is `U100`; the LAMA/DAMA stay is `LM100`. + +## Diagnosis and composition + +Diagnosis types: `admitting`, `clinical`, `discharge`, `final`. Diagnoses are ICD-10, system `http://hl7.org/fhir/sid/icd-10`. + +Composition types, SNOMED: `721981007` diagnostic studies report, `373942005` discharge summary, `4241000179101` laboratory report, `4261000179100` diagnostic imaging report, `422843007` chief complaint section. + +## Other terminologies the domain spec binds + +| Attribute | Value set | +| :---- | :---- | +| `coverageeligibilityrequest.insurer` | Insurance company owners | +| `claim.procedure.type` | Procedure type | +| `claim.procedure.procedure` | Procedure code, the scheme's package master | +| `claimresponse.item.adjudication.reason` | Denial codes | +| `claim.item.modifier` | Procedure modifiers | +| `claim.item.category` | Service categories | +| `claim.item.productOrService` | Service codes | +| `practitionerRole.speciality` | Medical specialty | +| `claim.careTeam.role` | Health service provider role | + +## Where the systems are wrong + +The code is usually right in these samples. The system it is bound to often is not, and a payer that validates bindings will reject what a payer that does not will accept. These are the ones observed across the twenty-two bundles. + +| What | The problem | +| :---- | :---- | +| Package codes | The same code appears in five different systems depending on the exchange: the payer's own host in an eligibility request, SNOMED in every preauthorisation and claim item, the payer's host again in the matching `Procedure` inside the same bundle, and two separate ValueSet URLs inside the plan | +| `http://snomed.info/sct0` | One coverage response binds to SNOMED with a trailing zero | +| Supporting-info category | Document entries bind `category` to the supporting-info **code** system rather than the category system. In the plan, the same error runs the other way, with a code bound to the category system | +| `Claim.type` | Binds to a ValueSet URL where a CodeSystem URL belongs | +| Adjudication categories | Bind to `https://hl7.org/fhir/R4/valueset-adjudication.html`, an HTML documentation page used as a code system URI | +| `cost.type` in the plan | Binds to the plan-type system, with a host spelling seen nowhere else, carrying values that are not plan types | +| Some categories | `deductible` and the claim-level status adjudication carry no `system` at all, as does the package coding in two coverage responses | + +Take the system from the sample for the exchange you are building, not from the code and not from another exchange. Where a payer rejects on a binding, that rejection is the authority. + +## Identifiers and displays that are wrong but required + +Three defects are load-bearing, meaning the correct value is the wrong one. + +- **The cancellation Task input is spelled `initimationNumber`.** Send the misspelling. It is what the payer reads. +- **Plan displays carry typos**, including misspelled specialty names. Store and echo them verbatim, because the payer rejects on a display mismatch. +- **The payer's own host is spelled four ways** across the set, including a transposition in five bundles. When echoing an identifier back, echo the spelling that arrived rather than the one you believe is correct. + +One more that is wrong and not required: entry identifiers in the coverage bundles repeat the full absolute URL, which exceeds what the specification permits for that field. Do not copy the pattern. diff --git a/site/docs/nhcx/v1/fhir-reference/communication.md b/site/docs/nhcx/v1/fhir-reference/communication.md new file mode 100644 index 000000000..53637908c --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/communication.md @@ -0,0 +1,129 @@ +--- +title: Communication +sidebar_label: Communication +description: The payer's asynchronous channel to the provider, specified field by field and with no sample bundle in either direction. +verification: unverified +source: "NHCX PMJAY Integration Handbook §12.1, §12.2, §12.3, and its communication implementation notes; NHCX Requests and Responses for UseCases, Communication sheet and Value sets; Sample FHIR bundles, `preauth/preauthresponse_with_query.txt`; AWS Sandbox NHCX Use Case Postman Collection; NHCX Provider Side Use Cases, Sandbox Exit Process" +sidebar_position: 17 +--- + +# Communication + +Communication is the payer's asynchronous channel to the provider. It is not a response to anything. The payer uses it to raise a turnaround-time alert, pass on a grievance, announce a policy or wallet change, or ask for a document that the standard query mechanism does not cover. The provider must acknowledge within thirty seconds, whether or not the underlying issue is resolved. + +**There is no sample bundle for either direction.** The PMJAY archive holds nothing under communication, and the sandbox Postman entry for `/v1/communication/request` carries the same recycled ciphertext as seven other endpoints. Everything in this chapter is drawn from the PMJAY handbook sections 12.2 and 12.3, which describe a payload captured on 3 December 2025 for case `PMJAY/CH/S/2024/R2/1000010394`, and from the NHCX Communication sheet. Treat it as specified and unsampled, and expect to discover differences on first contact. + +## In short + +- The payer's asynchronous channel to the provider. It is not a response to anything. +- There is no sample bundle for either direction; everything here is from specification. +- The provider must acknowledge within thirty seconds, whether or not the issue is resolved. +- Under PMJAY this channel never carries a document query. + +## The endpoints + +| Endpoint | Direction | What it carries | +| :---- | :---- | :---- | +| `POST /v1/communication/request` | Payer to gateway to provider | The `Task` bundle with the message | +| `POST /v1/communication/on_request` | Provider to gateway to payer | The acknowledgement, same shape | + +`x-hcx-correlation_id` must be identical on both. The gateway validates `x-hcx-workflow_id` on both. + +## The request bundle + +Four entries as specified: `Task`, `Communication`, and the two `Organization`s with the payer first. + +### Task + +| Path | Specified value | +| :---- | :---- | +| `Task.identifier[0].value` | The case number, `PMJAY/CH/S/2024/R2/1000010394` | +| `Task.status` | `completed`, not `requested` | +| `Task.intent` | `proposal` | +| `Task.code.coding.system` | `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `Task.code.coding.code` | `poll`, display "Poll" | +| `Task.reasonCode.coding.system` | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | +| `Task.reasonCode.coding.code` | `tatquery`, display "Tat Query Intimation" | +| `Task.input[0].type.coding` | `include`, system `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` | +| `Task.input[0].valueReference.reference` | The `Communication` resource | + +`Task.status` is `completed` on the request as well as the acknowledgement. That is the status of the communication event, not of the problem it reports. A turnaround-time breach is still open after the `Task` says `completed`. + +`poll` combined with an `include` input is the general NHCX push pattern. It tells the gateway to deliver the referenced resource to the recipient. + +### Communication + +| Path | Specified value | +| :---- | :---- | +| `Communication.id` | The case number without the prefix, `1000010394` | +| `Communication.identifier[0].type.coding.code` | `MR`, "Medical record number", used here as the claim reference | +| `Communication.identifier[0].system` | `https://payer.pmjay.gov.in` | +| `Communication.status` | `completed` | +| `Communication.category[0].coding.system` | `http://terminology.hl7.org/CodeSystem/communication-category` | +| `Communication.category[0].coding.code` | `reminder` | +| `Communication.priority` | `asap` | +| `Communication.topic.coding.system` | `http://terminology.hl7.org/CodeSystem/communication-topic` | +| `Communication.topic.coding.code` | `progress-update` | + +### Category, topic and priority + +| Field | Code | When it is used | +| :---- | :---- | :---- | +| `category` | `reminder` | Turnaround-time breach, follow-up, deadline alert | +| `category` | `notification` | One-way information: policy update, wallet change, scheme revision | +| `category` | `instruction` | The provider must perform a specific action | +| `category` | `questionnaire` | A structured question set needing a response | +| `topic` | `progress-update` | Tied to an active claim or preauthorisation. The common case | +| `topic` | `appointment-reminder` | Operational, not tied to a case | +| `priority` | `routine` | No urgent action | +| `priority` | `urgent` | High priority, normal service level | +| `priority` | `asap` | Immediate action expected | +| `priority` | `stat` | Patient safety or fraud | + +### Reason codes + +`Task.reasonCode` is the field to switch on. It decides which desk the message reaches. + +| Code | Trigger | +| :---- | :---- | +| `tatquery` | The case has breached the payer's service-level threshold. The most common code in live traffic | +| `grievance` | A beneficiary or provider complaint needs acknowledgement or corrective action | +| `walletupdate` | The patient's benefit balance or entitlement has changed since approval | +| `policychange` | Rates revised, packages added, empanelment changed | +| `additionalinfo` | The payer needs documents or clarification beyond the standard query | +| `claimArbitration` | The payer has acknowledged a reprocess or erroneous-claim request | + +The handbook spells the last one `claimArbitration` in its scenario table and `claimArbitartion` in its reason-code table. Send `claimArbitration` and accept either on receipt. + +## The acknowledgement bundle + +Identical structure. `Task.status`, `Task.intent`, `Task.reasonCode` and `Task.code` are all echoed back unchanged. Three things differ: + +- `Bundle.meta.lastUpdated` and `Bundle.timestamp` carry the acknowledgement time. The captured pair sits about ten minutes apart. +- The provider `Organization` entry comes first, ahead of the payer. +- The handbook records the sandbox payload as having the two organisations' identifier types swapped. The provider organisation is typed `NIIP` and the payer organisation `NPI`, which is backwards. Take the role from the entry order and from `Organization.type`, never from the identifier type code. + +## What the samples show + +Nothing. No communication bundle exists in the archive in either direction. The only field-level record is the handbook's transcription of one sandbox payload, and that transcription is where the swapped identifier defect was found. + +## The query modelled two ways + +This is the trap that costs the most time. The NHCX protocol layer and the PMJAY handbook both define a `Task` and `Communication` pair as the way a payer asks the provider a question. It carries `reasonCode` `additionalinfo` and, in the Communication sheet, a `payload` holding the attachment. That is the design above. + +The live PMJAY samples do not use it. A payer question arrives inside the preauthorisation or claim response instead, as free text in `ClaimResponse.item.adjudication.reason.coding.display`, pipe-delimited and with no coded structure at all: + +``` +other Request acknowledged and accepted for further processing.|USER1000099~02/26/2026, 08:47 ~other~testing query with souvik~PPD-Trust|null|USER1000099~02/26/2026, 09:13 ~other~Testing query 2 with souvik~PPD-Trust +``` + +Each segment is username, timestamp, type, comment and trust, tilde-separated, and a `null` segment appears where a turn is empty. The provider's answer is not a `Communication` either. It is the entire claim bundle re-submitted with the documents added. Chapters 09 and 12 cover that form, which is the only one with samples. + +So build both. The ad-hoc form is what PMJAY sends today. The `Task` and `Communication` pair is what the protocol specifies and what a non-PMJAY payer on the general network is entitled to send you. + +## Traps + +- **Two specifications for the same bundle.** The handbook carries a `Communication` in both directions with `Task.code` `poll`. The NHCX Communication sheet carries a `CommunicationRequest` on the payer's message with `Task.code` `poll`, and a `Communication` on the provider's reply with `Task.code` `deliver`. Parse `Task.input[0].valueReference` by resolving the reference and reading the resource type, not by assuming one. +- **The sheet marks fields mandatory that the handbook's capture omits.** `reasonReference`, `basedOn`, `about`, `statusReason` and `payload` are all listed as mandatory in the sheet and none appears in the transcribed payload. Accept their absence. +- **`Communication.status` is `completed` before anything is resolved.** Do not close a case on it. +- **Identifier types are swapped in the acknowledgement.** See above. This is a recorded sandbox defect, not a reading error. diff --git a/site/docs/nhcx/v1/fhir-reference/coverage-eligibility-request.md b/site/docs/nhcx/v1/fhir-reference/coverage-eligibility-request.md new file mode 100644 index 000000000..8a66343b4 --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/coverage-eligibility-request.md @@ -0,0 +1,87 @@ +--- +title: Coverage eligibility request +sidebar_label: Coverage eligibility request +description: "The provider's eligibility question as FHIR: six entries, the purpose that decides which question, and the fields that matter." +verification: unverified +source: "NHCX Integration Handbook §7; Insurance Plan Implementation Guide, CoverageEligibility flattened tables; Coverage Eligibility (NHA); NHCX-PMJAY-HMIS Integration Guide §8.4.0; Sample FHIR bundles, `coverageeligibility/coveragerequest_validation.txt`, `coveragerequest_benefits.txt`, `coveragerequest_auth-requirement.txt`" +sidebar_position: 2 +--- + +# Coverage eligibility request + +The provider asks the payer whether a policy is live, what it covers, and what a package will need. One `CoverageEligibilityRequest` carries all of that, and `purpose` decides which question is being asked. It is the first exchange in a case, sent at registration or before treatment planning, and it is cheap enough to send three times in three minutes, which is exactly what the sandbox run did. + +## In short + +- One `CoverageEligibilityRequest` carries four different questions, and `purpose` decides which. +- Six entries, no `Composition`, no clinical evidence. This bundle is small on purpose. +- The provider is identified three different ways across one bundle and its sibling exchange. +- The `Coverage` you send is a stub. Take the policy terms from the response. + +## The bundle + +Six entries, in this order in the sample. There is no `Composition` and no clinical evidence; this bundle is small on purpose. + +| # | Resource | What it is for | +| :---- | :---- | :---- | +| 1 | `CoverageEligibilityRequest` | The question. Carries `purpose`, `item[]` and the references below | +| 2 | `Patient` | The beneficiary, identified by PMJAY ID | +| 3 | `Organization` (`prov`) | The hospital, by HFR ID | +| 4 | `Organization` (`pay`) | The payer, by NIIP registry ID | +| 5 | `Coverage` | The policy the provider believes applies | +| 6 | `Practitioner` | Whoever entered the request, referenced from `enterer` | + +Entries reference each other by absolute URL rather than by `urn:uuid:`, and each `fullUrl` repeats in the entry's `id`. Both forms are accepted, so match whichever your gateway partner emits rather than converting. + +## The fields that matter + +| Path | Value in the sample | Notes | +| :---- | :---- | :---- | +| `status` | `active` | The only value used | +| `purpose[]` | `validation`, `benefits`, `auth-requirements` | One value per request. `discovery` is defined but unsampled | +| `priority.coding` | `http://terminology.hl7.org/CodeSystem/processpriority`, `normal` | | +| `patient` | Reference to entry 2 | | +| `servicedDate` | `2026-02-26` | Date of service, not the date of asking | +| `created` | `2026-02-26T12:51:30+05:30` | Always `+05:30`. UTC fails validation | +| `insurer`, `provider`, `enterer` | References to entries 4, 3 and 6 | | +| `facility.identifier` | system `https://nhcx.pmjay.gov.in`, value `IN1910000151` | The HFR ID again, under a third system | +| `insurance[0].coverage` | Reference to entry 5 | `focal` is not sent | +| `item[].productOrService.coding` | system `https://payer.pmjay.nha.gov.in`, code `MG004A`, display `Dengue fever` | Package code and display, exactly as the plan has them | +| `item[].diagnosis[].diagnosisCodeableConcept.coding` | same system, code `A97.0` | An ICD-10 code under a payer system, not under an ICD system | + +`item[]` is what makes a `benefits` or `auth-requirements` request answerable. A `validation` request does not need it, though the sample sends it anyway. + +The identifiers are worth reading closely. The `Patient` carries three: `PMJAY` from the NRCeS identifier-type system, `JHN` and `PI` from HL7 v2-0203, all three under `https://bis.pmjay.gov.in` or `https://provider.pmjay.gov.in`. The `PI` value in the sample is the literal string `NA`, which is what a hospital sends when it has no internal MRN yet. The `Coverage` carries an `NH` identifier whose value is the policy code `PMJAY/HP/S/G` under system `https://payer.nha.gov.in`. The `Practitioner` carries `HPID` and `HPIN` with the same value, `1123`. + +## The three purposes + +The three request files are the same bundle sent three times. Diffed against each other they differ in exactly three places: `CoverageEligibilityRequest.purpose[0]`, `CoverageEligibilityRequest.created`, and `Bundle.timestamp`. Nothing else changes, not the item, not the diagnosis, not the identifiers. So the shape below is the whole contract. + +| Purpose | Question | What the payer must return | +| :---- | :---- | :---- | +| `validation` | Is this policy in force, and what is left in the wallet? | Balance and used amount | +| `benefits` | Is this package covered for this beneficiary? | Per-item coverage or exclusion | +| `auth-requirements` | What does this package need before I can treat? | Authorisation flag and required documents | +| `discovery` | Which policies does this person hold? | One `insurance` entry per active coverage. No sample exists | + +Build one request and switch `purpose`. Do not build three. + +## What the sample shows + +`coveragerequest_validation.txt` is 7,206 bytes; `coveragerequest_benefits.txt` 7,204; `coveragerequest_auth-requirement.txt` 7,213. All three are `Bundle.type = "collection"` from the same sandbox run on 26 February 2026, 12:51, 12:53 and 12:55. + +The sample is unrepresentative in one respect worth knowing. It carries a single item with a single diagnosis. Real treatment planning asks about several packages at once, and the array is `0..*`. + +## Traps + +**The package code is bound to a different system in every exchange.** Here `MG004A` sits in `https://payer.pmjay.nha.gov.in`. In every preauthorisation and claim request the same code sits in `http://snomed.info/sct`. In the `InsurancePlan` it sits in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-productorservice` under `coverage`, and in `http://hl7.org/fhir/ValueSet/procedure-category` under `plan.specificCost`, in the same resource. One coverage response compounds it with `http://snomed.info/sct0`, a trailing zero. None of these codes are SNOMED concepts. Match on the code, never on the system, and emit whichever system the exchange you are building expects. + +**The bundle is labelled as a preauthorisation.** `Bundle.id` is the literal string `PreAuth` and `Bundle.identifier.value` is `VB26AA2600001`, the preauthorisation case number, on a message sent before any preauthorisation exists. The payer does not object. Do not read the case number off an eligibility bundle and assume a case is open. + +**`Bundle.meta.lastUpdated` is a frozen template value**, `2025-11-11T15:09:41.516+05:30`, on all three requests and on every other provider-generated bundle in the set. `Bundle.timestamp` holds the real date. Read `timestamp`. + +**The provider is identified three ways in one bundle.** `Organization.identifier` uses `NPI` under `https://facility.abdm.gov.in`. `facility.identifier` uses no type code under `https://nhcx.pmjay.gov.in`. And the insurance plan request, a different exchange for the same hospital, sends the sandbox participant code `SBX_001205` instead. The value `IN1910000151` must equal the HFR ID on the sender's participant record whichever wrapper it sits in. + +**Two identifier systems are HTML pages.** `Practitioner.qualification.code.coding.system` is `https://hl7.org/fhir/R4/v2/0360/2.7/index.html`, a documentation page, carrying the code `BSC NURSING`. `CoverageEligibilityRequest.identifier.system` is `https://hcx.pmjay.gov.in/v1/coverageeligibility/check`, an endpoint URL. Neither is a code system. Copy them anyway; the payer echoes them back unchanged. + +**The `Coverage` you send is a stub.** The sample sets `period` to a five-day window around the service date. The payer's own `Coverage` in the response runs 2023-04-02 to 2026-04-01. Your `Coverage` states which policy you mean, not what its terms are. Take the terms from the response. diff --git a/site/docs/nhcx/v1/fhir-reference/coverage-eligibility-response.md b/site/docs/nhcx/v1/fhir-reference/coverage-eligibility-response.md new file mode 100644 index 000000000..5bbaeeed1 --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/coverage-eligibility-response.md @@ -0,0 +1,117 @@ +--- +title: Coverage eligibility response +sidebar_label: Coverage eligibility response +description: The payer's answer, which echoes your whole request back before answering it, and how to index it without reading your own data. +verification: unverified +source: "NHCX Integration Handbook §7; Insurance Plan Implementation Guide, CoverageEligibility flattened tables; Coverage Eligibility (NHA); NHCX-PMJAY-HMIS Integration Guide §8.4.0; Sample FHIR bundles, `coverageeligibility/coverageresponse_validation.txt`, `coverageresponse_benefits.txt`, `coverageresponse_auth-requirement.txt`" +sidebar_position: 3 +--- + +# Coverage eligibility response + +The payer's answer to the eligibility question. It arrives on the `on_check` callback and it is not a small message, because the payer sends your entire request back before answering it. Understanding that structure is most of the work of parsing it. + +## In short + +- The payer sends your entire request back before answering it: eleven entries, of which the first six are the echo. +- Index the bundle by `fullUrl`, not by resource type, or you will read your own data back. +- The request id comes back truncated at the last slash. Match on `request.reference` instead. +- The patient is a different person on each side of the exchange. Do not overwrite your record. + +## The bundle + +Eleven entries. The first six are your request, echoed. The last five are the answer. + +| # | Resource | Half | What it is | +| :---- | :---- | :---- | :---- | +| 1 | `CoverageEligibilityRequest` | echo | Your request resource, unchanged | +| 2 | `Patient` | echo | The patient as you sent it | +| 3 | `Organization` (`prov`) | echo | The hospital as you sent it | +| 4 | `Organization` (`pay`) | echo | The payer as you sent it | +| 5 | `Coverage` | echo | The policy stub as you sent it | +| 6 | `Practitioner` | echo | The enterer as you sent it | +| 7 | `CoverageEligibilityResponse` | answer | The answer, with `insurance[].item[]` | +| 8 | `Patient` | answer | The payer's own record for this beneficiary | +| 9 | `Coverage` | answer | The payer's own policy record, with real dates and class | +| 10 | `Organization` (payer, id `1518`) | answer | The payer as the payer sees itself | +| 11 | `Organization` (provider, id `IN1910000151`) | answer | The hospital as the payer sees it | + +The echo is byte-identical to what you sent apart from two changes. Every echoed resource gains a `meta.tag` of `SUBSETTED` from `http://terminology.hl7.org/CodeSystem/v3-ObservationValue`. And `CoverageEligibilityRequest.id`, which you sent as `PMJAY/HP/S/G`, comes back as `G`: the payer has split the id on the last slash and kept the tail. Do not use that id to match the response to the request. Use `CoverageEligibilityResponse.request.reference`, which is intact. + +Note that entries 8 to 11 duplicate entries 2 to 5 as resource types. Index the bundle by `fullUrl`, not by resource type, or you will read the request's `Patient` and think the payer returned your own data. + +Every entry on both halves also repeats its `fullUrl` in a `Bundle.entry.id`. FHIR allows an `id` on any element but constrains it to at most 64 characters of letters, digits, hyphens and dots. These values are absolute URLs. A strict validator will reject them, and no consumer needs them. + +## The answer + +| Path | Value in the sample | +| :---- | :---- | +| `status` | `active` | +| `purpose[]` | Echo of the request's purpose | +| `outcome` | `complete` | +| `disposition` | `Policy is currently in-force` | +| `identifier[0]` | system `https://hcx.pmjay.gov.in/v1/coverageeligibility/check`, value `MD5SLS4X5-IN1910000151` | +| `request.reference` | The request's `fullUrl` | +| `patient`, `insurer`, `requestor` | References to entries 8, 10 and 11 | +| `insurance[0].coverage` | Reference to entry 9 | +| `insurance[0].inforce` | `true` | +| `meta.profile` | `http://hl7.org/fhir/StructureDefinition/CoverageEligibilityResponse` | + +The response identifier is the PMJAY ID and the HFR ID joined by a hyphen, and it is the same value in all three responses. It identifies the beneficiary at the hospital, not the exchange. It is not a correlation key. + +`meta.profile` is the base HL7 profile, not the NRCeS one. Every provider-generated resource in the set declares `https://nrces.in/ndhm/fhir/r4/StructureDefinition/...`; the payer's response resource declares plain HL7. The echoed half keeps the NRCeS profiles it arrived with. + +## By purpose + +**Validation.** One item, and it is the only response that carries money. + +| Path | Value | +| :---- | :---- | +| `item.productOrService.coding` | system `http://snomed.info/sct0`, code `305056002`, display `Admission procedure` | +| `item.benefit[0].id` | `MD5SLS4X5/PMJAY-T` | +| `item.benefit[0].type.coding` | `http://terminology.hl7.org/CodeSystem/ex-benefitcategory`, code `30`, `Health Benefit Plan Coverage` | +| `item.benefit[0].allowedMoney` | 463730.00 INR | +| `item.benefit[0].usedMoney` | 36270.00 INR | +| `item.authorizationRequired` | `true` | + +`allowedMoney` is the balance remaining, not the sum insured. The plan's `generalCost` for this policy is 500,000 INR, and 463,730 plus 36,270 is exactly that. There is one item per wallet; PMJAY beneficiaries can hold more than one, so read them all. + +**Benefits and auth-requirements.** Both return the same single item: + +| Path | Value | +| :---- | :---- | +| `item.productOrService.coding[0]` | code `MG004A`, display `Dengue fever`, **no system at all** | +| `item.excluded` | `true` | +| `item.authorizationRequired` | `true` | + +There is no `benefit[]`, no `allowedMoney`, no `authorizationSupporting[]`. The handbook's element tables show `benefit[].type` values of `Procedure`, `Investigation` and `Stratification` for the benefits purpose, and `authorizationSupporting[]` codings carrying `MAND` document codes for auth-requirements. The samples carry none of it. Build for the fuller form and tolerate the leaner one. + +## What the sample shows + +`coverageresponse_validation.txt` is 16,042 bytes, `coverageresponse_benefits.txt` 15,729, `coverageresponse_auth-requirement.txt` 15,747. All three arrived on 26 February 2026 between 18:21 and 18:25, roughly five and a half hours after the requests. + +The `benefits` and `auth-requirements` responses are identical in their `CoverageEligibilityResponse` apart from `purpose`, `created` and `Bundle.timestamp`. Every field that would distinguish an authorisation-requirements answer from a benefits answer is absent from both. The two purposes are not actually differentiated in this payer's implementation. If you need to know which documents a package demands, take them from the `InsurancePlan`, which does carry them, rather than from an `auth-requirements` response. + +## Traps + +**The payer identifier system is misspelled.** `Bundle.identifier.system` on all three responses is `https://payer.pmajy.nha.gov.in`. That is `pmajy`, not `pmjay`. Requests use the correct spelling. Two other payer-generated bundles share the typo, the payment notice and the cancel response, making five in all. Other payer bundles, including the insurance plan response, spell it correctly. Never key a lookup on this system string. + +**A third spelling appears one entry further down.** The payer's own `Coverage.identifier.system` is `https://payer.pmjay.gov.in`, with no `nha`. Your request sent `https://payer.nha.gov.in` for the same policy code, and the `InsurancePlan` uses `https://payer.nha.gov.in` again. Three systems, one policy `PMJAY/HP/S/G`. + +**The patient is a different person on each side of the exchange.** For the single PMJAY ID `MD5SLS4X5` the corpus holds two irreconcilable demographic records. The split is provider against payer, rather than one exchange against another. + +| Side | Name | Gender | Birth date | +| :---- | :---- | :---- | :---- | +| Every provider-generated bundle: eligibility, preauthorisation and claim requests, including the `Patient` resources inside embedded clinical documents | Soubhik Biswas | `male` | 2004-09-18 | +| Payer-generated coverage responses | PALLVI | `female` | 0006-06-25 | +| Payer-generated claim responses | PALLVI | `other` | 2002-01-01 | + +That reads as integrator test data on the provider side and the payer's real record on the other, never reconciled, and the payer's own two responses do not agree with each other either. The birth date `0006-06-25` is not a typo you can repair; it parses as the year 6 CE and any age calculation on it will produce nonsense. The `JHN` value differs too: `91-7182-8065-4077` in the request against `020700400170000003120007` in the response, and the response adds an `ABHA` identifier of `91-7034-1237-4240` in the format the request used for `JHN`. Treat the payer's `Patient` as authoritative for the policy, keep your own for the encounter, and never overwrite one with the other. Validate `birthDate` before display. + +**`item.productOrService` loses its system.** You sent `MG004A` under `https://payer.pmjay.nha.gov.in`. It comes back with a bare code and display, no `system` element. A strict `CodeableConcept` matcher will fail to match it against anything. + +**`http://snomed.info/sct0` is not SNOMED.** The trailing zero appears only in the validation response's admission concept. Code `305056002` is a real SNOMED concept, so the value is right and the system is wrong. + +**`Coverage.relationship.coding.system` is an HTML page**, `https://terminology.hl7.org/6.5.0/CodeSystem-subscriber-relationship.html`, carrying the code `child`. The code is valid; the system is a link to documentation about the system. + +**One identifier is an encrypted blob.** The payer's `Patient` carries an `ADN` (Aadhaar) identifier whose value is a 120-character ciphertext ending in `==`. Do not log it, do not display it, and do not try to validate it as a twelve-digit number. diff --git a/site/docs/nhcx/v1/fhir-reference/insurance-plan-request.md b/site/docs/nhcx/v1/fhir-reference/insurance-plan-request.md new file mode 100644 index 000000000..f6151494b --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/insurance-plan-request.md @@ -0,0 +1,87 @@ +--- +title: Insurance plan request +sidebar_label: Insurance plan request +description: "The smallest message on the exchange: one Task asking a payer for the plan behind a policy." +verification: unverified +source: "NHCX Integration Handbook §6; Insurance Plan Implementation Guide; NHCX-PMJAY-HMIS Integration Guide §8.1; NHCX FAQs v1.2 #15; Sample FHIR bundles, `insuranceplan/insuranceplan_request.txt`" +sidebar_position: 4 +--- + +# Insurance plan request + +The smallest message in the whole exchange. One `Task` asking a payer to send back the plan for a policy. There is no patient in it, no encounter and no clinical content, because the plan is a property of the policy and the hospital, not of any admission. The provider sends it once per policy it deals with and caches the answer. + +## In short + +- The smallest message in the whole exchange: one `Task` asking for the plan behind a policy. +- No patient, no encounter, no clinical content, because the plan belongs to the policy and the hospital. +- Sent once per policy the hospital handles, not once per patient. +- Refresh on a `policychange` communication, on a schedule, and before treatment planning if the cache has no version stamp. + +## The bundle + +One entry. + +| # | Resource | What it is for | +| :---- | :---- | :---- | +| 1 | `Task` | The poll. Carries `code` and two `input[]` values | + +The entry uses `urn:uuid:` for both `fullUrl` and `id`, which is the handbook's recommended form. The eligibility bundles use absolute URLs instead. Both work. + +## The fields that matter + +| Path | Value in the sample | +| :---- | :---- | +| `Bundle.type` | `collection` | +| `Bundle.id` | `6a249219-1401-4fa5-baba-b16b551bf31a` | +| `Bundle.identifier` | system `https://payer.pmjay.nha.gov.in`, value `f9d2071c-ef8d-41ab-a899-c81d4c192a28` | +| `Bundle.meta.lastUpdated` | `2026-03-03T12:14:48+05:30` | +| `Task.status` | `requested` | +| `Task.intent` | `original-order` | +| `Task.code.coding.system` | `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `Task.code.coding.code`, `.display` | `poll`, `Poll` | +| `input[0].type.coding` | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code`, code `policyNumber`, display `PolicyNumber` | +| `input[0].valueString` | `PMJAY/HP/S/G` | +| `input[1].type.coding` | same system, code `providerId`, display `Provider ID` | +| `input[1].valueString` | `SBX_001205` | + +Both inputs are `valueString`. There is no `valueIdentifier` and no system attached to the values themselves, so the payer resolves them by convention. + +At least one input is mandatory. Sending both narrows the answer to the packages this hospital is empanelled for, which matters: the sampled response is 21 MB with both inputs supplied. + +## Task codes across the exchange + +`poll` is one of four Task codes NHCX uses, and they do not share a code system. This is worth a table because the temptation to hardcode one system is strong and wrong. + +| Exchange | System | Code | +| :---- | :---- | :---- | +| Insurance plan request | `http://terminology.hl7.org/CodeSystem/financialtaskcode` | `poll` | +| Cancel request | `http://terminology.hl7.org/CodeSystem/financialtaskcode` | `cancel` | +| Payment notice | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-codes` | `deliver` | +| Cancel response | `http://hl7.org/fhir/CodeSystem/task-code` | `approve` | + +The `financialtaskcode` value set defines `cancel`, `poll`, `release`, `reprocess` and `status`. Only `poll` and `cancel` have samples. + +## What the sample shows + +`insuranceplan_request.txt` is 1,269 bytes, sent 3 March 2026 at 12:14. The response came back forty-two minutes later. + +The file is unrepresentative in one respect. It is a provider-to-payer request, but it carries a `meta.tag` of `SUBSETTED` on both the bundle and the `Task`. `SUBSETTED` means "resource encoded in summary mode" and is something a server puts on a response it has trimmed. Its presence here indicates the sample was captured from the payer's own store after processing rather than from the wire. Do not send `SUBSETTED` on a request. + +## Traps + +**The Task code system is not the one the older documentation gives.** Earlier NHCX material puts `poll` under `https://nhcx.abdm.gov.in/api`. The sample uses `http://terminology.hl7.org/CodeSystem/financialtaskcode`, which is the real HL7 financial task code system and the one the payer accepted. Use the HL7 system. + +**`intent` is `original-order`, not `order`.** Both are valid FHIR `RequestIntent` codes and they mean different things: `order` is a generic order, `original-order` is the initiating one. The sample sends `original-order`. Element tables elsewhere say `order`. This is not known to be enforced, but match the sample. + +**`providerId` is not the HFR ID.** The sample sends `SBX_001205`, a sandbox participant code. Every other bundle in the corpus identifies the same hospital as `IN1910000151`, its HFR ID, in `Organization.identifier` and in `facility.identifier`. A fourth form, `1652`, appears in the preauthorisation responses. There is no statement anywhere that `providerId` here means the participant code rather than the HFR ID; the sample is the only evidence. Send whatever your participant record was onboarded with, and expect to try both against a new payer. + +**There is no `Bundle.timestamp`.** Every other request bundle in the corpus carries one. This one has only `meta.lastUpdated`, and unlike the eligibility requests that value is a real date rather than the frozen `2025-11-11T15:09:41.516+05:30` template. So the field you read for the send time is not the same field across exchanges. Read `timestamp` when it exists and fall back to `meta.lastUpdated`. + +**The bundle identifier is a UUID, not a case number.** Eligibility, preauthorisation and claim bundles put the case number in `Bundle.identifier.value`. This exchange has no case, so the value is a second UUID, unrelated to `Bundle.id`. Nothing correlates the request to the response except the callback; the response's own `Bundle.identifier` is `100155-1000003614`, the payer's plan key, which does not appear in the request at all. + +## When to send it + +Once per policy the hospital handles, not once per patient. The plan changes on the payer's schedule, not yours. + +Refresh it when a `Communication` arrives with reason `policychange`, on whatever periodic schedule you set, and before treatment planning if your cached copy has no version stamp. Chapter 05 covers what to do with the answer and why the cache matters as much as it does. diff --git a/site/docs/nhcx/v1/fhir-reference/insurance-plan-response-coverage-based.md b/site/docs/nhcx/v1/fhir-reference/insurance-plan-response-coverage-based.md new file mode 100644 index 000000000..83fb87384 --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/insurance-plan-response-coverage-based.md @@ -0,0 +1,81 @@ +--- +title: Insurance plan response, coverage-based +sidebar_label: "Plan: coverage-based (private)" +description: "The private-insurer shape: coverage, benefit and limit, with no published sample and what that leaves unconfirmed." +verification: unverified +source: "Insurance Plan Implementation Guide (NRCeS), coverage and benefit structure; NHCX Integration Handbook §6; NHCX FAQs v1.2 #15. No sample payload of this shape exists in the published corpus" +sidebar_position: 7 +--- + +# Insurance plan response, coverage-based + +The shape a private insurer or its TPA sends. Where a scheme plan lists named packages at fixed rates, an indemnity policy lists benefits with money limits, and the hospital bills against those limits rather than against a package price. + +**There is no sample of this shape in the corpus.** Every one of the twenty-two published payloads is PMJAY, and PMJAY is package-based throughout. This chapter is written from the Insurance Plan implementation guide and from the handbook's description of the structure. Treat it as specified and unsampled, and expect to discover details on first contact with a real insurer. + +## In short + +- The private-insurer shape: coverage, then benefit, then limit. No second structure to join. +- Rules arrive as prose in `benefit.requirement`, not as flags. +- There is no sample of this shape in the published corpus, so it is written from the specification. +- Three things have no published answer: the payload, the benefit-type value set, and worked exclusions. + +## The structure + +```mermaid +flowchart TD + IP["InsurancePlan"] + COV["coverage[]
one per cover type"] + BEN["benefit[]
one per covered service"] + LIM["limit[]
value and unit"] + REQ["benefit.requirement
e.g. Pre-authorisation required"] + IP --> COV --> BEN --> LIM + BEN --> REQ + style IP fill:#EEF1F4,stroke:#7A8797,color:#1B2431 + style COV fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + style BEN fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 + style LIM fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + style REQ fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 +``` + +Three levels, and no second parallel structure. This is the practical difference from the package-based shape: everything about a benefit, its rules and its money, hangs off the one `coverage[].benefit[]` entry. There is no `specificCost` side to join to. + +| Level | Path | What it holds | +| :---- | :---- | :---- | +| Cover type | `coverage[].type` | The kind of cover, for example in-patient | +| Benefit | `coverage[].benefit[].type` | A covered service, for example ICU charges or room rent | +| Limit | `coverage[].benefit[].limit[]` | The money cap for that benefit, as a value and a unit | +| Requirement | `coverage[].benefit[].requirement` | A string such as "Pre-authorisation required" | + +## What the guide specifies + +- **Cover types and benefits are the plan's own vocabulary.** The guide gives in-patient cover with benefits such as ICU charges and room rent as the worked shape. It does not publish a closed value set of benefit types for indemnity plans, so the codes and displays a given insurer sends are that insurer's. +- **A limit per benefit,** with its own conditions and required documents. This is where a room-rent cap or an ICU sub-limit lives. +- **`benefit.requirement` carries the rule as prose,** not as a flag. Where a scheme plan says `ApprovalNotRequired: N`, an indemnity plan says "Pre-authorisation required" in a string. There is no equivalent of the sixteen `Claim-Condition` flags. +- **Conditions and exclusions** hang off the plan as extensions, as they do in the package shape. The one published plan carries none of them, so nothing in the corpus shows their populated form. + +## What this means for a provider + +The two shapes drive the treatment screen differently, and a system that supports both needs two code paths behind one screen. + +| | Package-based | Coverage-based | +| :---- | :---- | :---- | +| What the user picks | A specialty, then a package. The rate is fixed and not editable | A service, then bills against it | +| Where the amount comes from | The plan's `Procedure` or `Stratification` cost line | The hospital's own bill, checked against the benefit limit | +| What the screen must cap | Quantity, implants and stratification, from the flags | The amount, against the limit | +| What blocks submission | A code or display that differs from the plan, character for character | An amount over the limit, or a missing mandatory document | +| Whether preauthorisation is needed | The `ApprovalNotRequired` flag | The `requirement` string, read as prose | + +The parts that do not change are the ones worth leaning on. It is still one `Task` with code `poll` to request. It still arrives on `/v1/insuranceplan/on_request` as a `collection` bundle. It is still fetched once per policy rather than once per patient, still cached, and still refreshed on a `policychange` communication. And it is still the first line of validation, run on the server. + +## What has no answer here + +Three things an integrator will want and the published material does not give. + +**No sample payload.** The element names above are from the guide's prose and its structure diagram, not from a payload anyone has parsed. Field-level details, the exact `type` code systems, and whether `limit.code` is populated the way the package shape populates it, are all unconfirmed. + +**No benefit-type value set.** The package shape binds its categories to `ndhm-benefitcategory`, a published 32-code set. Nothing equivalent is published for indemnity benefit types. Ask the insurer for its list before building a picker. + +**No worked example of conditions or exclusions.** Waiting periods, pre-existing-condition rules and excluded procedures are specified as plan-level extensions. The only plan in the corpus carries none, so their populated shape is unverified in both directions. + +Agree all three with the insurer in writing before the first call, and record what you agreed, the way the JWE chapter recommends for the contested header fields. diff --git a/site/docs/nhcx/v1/fhir-reference/insurance-plan-response-package-based.md b/site/docs/nhcx/v1/fhir-reference/insurance-plan-response-package-based.md new file mode 100644 index 000000000..a8715b197 --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/insurance-plan-response-package-based.md @@ -0,0 +1,171 @@ +--- +title: Insurance plan response, package-based +sidebar_label: "Plan: package-based (scheme)" +description: "The scheme shape, and the only one with a real payload: two parallel structures, 32 categories, sixteen flags per package." +verification: unverified +source: "NHCX Integration Handbook §6; Insurance Plan Implementation Guide; NHCX-PMJAY-HMIS Integration Guide §8.1; NHCX FAQs v1.2 #15; Sample FHIR bundles, `insuranceplan/insuranceplan_response.txt`" +sidebar_position: 6 +--- + +# Insurance plan response, package-based + +The shape every government scheme sends, and the only one with a real payload behind it. PMJAY uses it throughout. A package is a named procedure at a fixed, all-inclusive rate, and the plan carries every package the hospital may bill along with the rules that govern each one. + +The shared parts of the bundle, the plan header and the caching rules are in the previous chapter. This chapter is the package-based body. + +## In short + +- The scheme shape, and the only one with a real payload behind it: 2,217 entries. +- The packages exist in two parallel structures, and neither is complete on its own. You have to join them on the package code. +- Sixteen claim-condition flags per package decide what the treatment screen may offer and what it must cap. +- Every flag is a string, and `"N"` is truthy in most languages. Compare against the literal `"Y"`. + +## Two parallel structures for one set of packages + +Nothing outside the payload documents this. + +`InsurancePlan.coverage[]` and `InsurancePlan.plan[0].specificCost[]` each hold the same 32 specialty categories, and each of those holds the same benefit codes. 2,881 benefit entries on each side, 1,727 distinct package codes, and the two sets of codes intersect exactly. Neither side is complete on its own. + +```mermaid +flowchart TD + IP["InsurancePlan"] + COV["coverage[] · 32 categories"] + PLN["plan[0] · type 03 Group
generalCost 500,000 INR"] + SC["specificCost[] · 32 categories"] + CB["benefit[] · 2,881
Claim-Condition flags
Claim-SupportingInfoRequirement
limit[] rates"] + SB["benefit[] · 2,881
cost[] Procedure / Stratification / Implant
ParentProcedure on implants"] + Q["Questionnaire × 2,215"] + IP --> COV --> CB + IP --> PLN --> SC --> SB + CB -. "documentationUrl" .-> Q + CB <-. "join on package code" .-> SB + style IP fill:#EEF1F4,stroke:#7A8797,color:#1B2431 + style COV fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + style PLN fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + style SC fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + style CB fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 + style SB fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 + style Q fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 +``` + +| Side | Carries | Path to a package | +| :---- | :---- | :---- | +| `coverage[]` | The rules. Flags, document requirements, questionnaire links, and `limit[]` rates | `coverage[].benefit[].type.coding.code` | +| `plan[0].specificCost[]` | The money. `cost[]` lines by type, with stratification qualifiers | `plan[0].specificCost[].benefit[].type.coding.code` | + +Load both, index both by package code, and join. If you read only `specificCost` you will price a package correctly and never learn that it is government-reserved. If you read only `coverage` you will know every rule and have no cost line. + +The two sides also disagree on which system the package code belongs to. Under `coverage` it is `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-productorservice`. Under `specificCost` it is `http://hl7.org/fhir/ValueSet/procedure-category`. Same code, same resource, two systems, both of them ValueSet URLs where a CodeSystem URL belongs. + +## The 32 categories + +`coverage[].type.coding` and `specificCost[].category.coding` both bind to `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-benefitcategory`. The two-letter codes and their package counts in this plan: + +| Code | Category | Packages | Code | Category | Packages | +| :---- | :---- | :---- | :---- | :---- | :---- | +| `SV` | Cardio-thoracic & Vascular surgery | 527 | `SM` | Oral & Maxillofacial Surgery | 32 | +| `SS` | Paediatric Surgery | 238 | `MM` | Mental Disorders Packages | 27 | +| `SC` | Surgical Oncology | 228 | `BM` | Burns Management | 27 | +| `SG` | General Surgery | 220 | `ST` | Polytrauma | 24 | +| `SB` | Orthopaedics | 216 | `IN` | Interventional Neuroradiology | 24 | +| `MO` | Medical Oncology | 185 | `HM` | High end Medicine | 19 | +| `MG` | General Medicine | 181 | `MN` | Neo-natal care Packages | 17 | +| `MP` | Paediatric Medical management | 146 | `HD` | High end Diagnostics | 13 | +| `SU` | Urology | 139 | `OT` | Organ & Tissue transplant | 11 | +| `SO` | Obstetrics & Gynaecology | 120 | `HP` | High end procedures | 10 | +| `SN` | Neurosurgery | 110 | `ER` | Emergency Room Packages | 6 | +| `SL` | Otorhinolaryngology | 94 | `ID` | Infectious Diseases | 5 | +| `MC` | Cardiology | 74 | `PM` | Palliative Medicine | 1 | +| `SE` | Opthalmology | 67 | `TG` | Transegender Procedure | 1 | +| `MR` | Radiation Oncology | 48 | `DL` | Diagnostic Laboratory | 1 | +| `SP` | Plastic and reconstructive Surgery | 37 | `US` | Unspecified Surgical Package | 33 | + +Codes beginning `S` are surgical, `M` medical. The displays are misspelled in two places, `Opthalmology` and `Transegender Procedure`, and you must store them exactly as sent, because a preauthorisation whose display differs from the plan's is rejected on the display. + +## Claim-Condition: the flags + +Under `coverage[].benefit[].extension` with url `https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim-Condition`. Sixteen sub-extension names in this plan, each a `valueString` of `Y`, `N`, an integer or a word. 2,261 of the 2,881 benefit entries carry the full set; the remaining 620 are implants and carry only `ParentProcedure`. + +| Flag | Values in this plan | What it governs | +| :---- | :---- | :---- | +| `ProcedureType` | `Surgical` 1,493, `Medical` 420, `Conservative` 348 | Which clinical pathway and which document set applies | +| `GovtReserved` | `N` 2,243, `Y` 18 | `Y` means only a government hospital may bill it. Hide it in a private facility | +| `ApprovalNotRequired` | `N` 1,321, `Y` 940 | `Y` means treat without waiting for a preauthorisation decision | +| `EnhancementAllowed` | `N` 1,924, `Y` 337 | `Y` means an enhancement request will be entertained. `N` means the first approval is the ceiling | +| `ScheduledTATApproval` | `Y` 2,237, `N` 24 | `Y` means the package auto-approves if the payer does not respond inside the turnaround window | +| `QuantityAllowed` | `1` on 2,259, `4` on 2 | Maximum quantity per approval | +| `IsDayCare` | `N` 1,770, `Y` 491 | Day-care procedure, no overnight stay expected | +| `ImplantApplicable` | `N` 1,909, `Y` 352 | Whether an implant line may be added | +| `MultipleImplantsAllowed`, `MaximumImplantsAllowed` | `N` 2,257 / `1` 2,257 | Implant count rules | +| `StratificationAllowed` | `N` 1,785, `Y` 476 | Whether a bed-category or dosage line may be added | +| `MultipleStratificationAllowed`, `MaximumStratificationAllowed` | `N` 1,788 / `1` 2,257 | Stratification count rules | +| `CyclicProcedure`, `MaximumCyclesAllowed` | `N` 2,258 / `0` 2,259 | Repeatable under one approval, and how many times | +| `ParentProcedure` | 620, a `valueCodeableConcept` | On implant benefits. Names the package the implant may accompany | + +Every flag except `ParentProcedure` is a string. `"N"` is truthy in most languages. Compare against the literal `"Y"`. + +These are the flags that make the treatment screen behave. `GovtReserved` decides what is offered at all. `ApprovalNotRequired` and `ScheduledTATApproval` decide whether the clinician waits. `EnhancementAllowed` decides whether the enhancement path exists at the point a case runs over, and the three maxima are the validation limits for the item lines. None of them are re-stated in the preauthorisation response, so a system that does not cache the plan cannot enforce any of them. + +## Cost and limit + +The money is split across the two structures, and it splits by kind. + +Under `plan[0].specificCost[].benefit[].cost[]`, each line has a `type` and a `value` in INR: + +| `cost.type.coding.code` | Lines | Meaning | +| :---- | :---- | :---- | +| `Procedure` | 1,795 | The base package rate | +| `Stratification` | 1,644 | An alternative rate for a bed category or dosage, named in `cost.qualifiers[]` | +| `Implant` | 620 | An implant amount, added over the package rate | + +All three carry the system `https://www.nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-plan-type`. That is the plan-type code system being used for cost types, with a `www.` prefix that appears nowhere else in the corpus, and the displays contain the typo `proudct`. Stratification qualifiers bind to `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-productorservice`, with codes like `STRAT006a` `Routine Ward` and `STRAT006d` `ICU - With Ventilator`. + +Under `coverage[].benefit[].limit[]` the same amounts appear again as `value.value` and `value.unit` of `INR`, with `code.coding` naming either the package or the stratification. Package `MG004A` "Dengue fever" has a base limit of **0 INR** and stratification limits of 1,800, 2,700, 3,600 and 4,500. A base rate of zero is not an error and not a free package; it means the payable amount is entirely determined by the bed category chosen. Do not treat 0 as missing data, and do not submit a zero-value item line. + +## Supporting information requirements + +Two levels, and three different extension shapes. + +**Plan level**, sixteen `Claim-SupportingInfoRequirement` extensions directly on `InsurancePlan.extension`. One is proof of identity: category `POI` `Proof of identity`, code `ADN` `Aadhaar Number`, and it uses the sub-extension urls `SupportInfoCategory` and `SupportInfoCode`. The other fifteen use the urls `category`, `code` and `documentationUrl`, are all category `INF` and code `ODN` `Other document`, and each points at one of the fifteen policy-level questionnaires. + +**Package level**, on `coverage[].benefit[].extension`. 13,109 nested document requirements and 2,200 questionnaire links. + +| Shape | Count | Category | Code | Points at | +| :---- | :---- | :---- | :---- | :---- | +| Nested, one sub-extension per document | 13,109 | `DIA` `Diagnostic report` | `MAND0006` and similar, from `.../ValueSet/ndhm-supportinginfo-code` | Nothing. Names a document you must attach | +| Flat, with `documentationUrl` | 2,200 | `INF` | `STG` `Standard Treatment Guidelines` | An STG questionnaire | + +The nested form buries each requirement one level deeper, under a url of the shape `.../Claim-SupportingInfoRequirement/MG004A/100409/MAND0409`, which encodes the package code, an internal id and the document code. The flat form puts `category`, `code` and `documentationUrl` directly under the extension. A parser that assumes one shape will silently drop the other. Recurse. + +Typical package-level document codes include `MAND0006` "Detailed discharge summary", `MAND0062` "Detailed ICPs", `MAND0063` "Treatment details", `MAND0064` "All investigations reports" and `MAND0408` "Clinical notes detailing history and Admission notes showing vitals and examination findings". These are the checklist a hospital sees before it can submit. + +## The questionnaires + +2,215 entries, 1,461 distinct. Two kinds. + +| Kind | Distinct | `fullUrl` shape | Titles | +| :---- | :---- | :---- | :---- | +| Policy level | 15 | `https://payer.gov.in/policy/questionnaire/{id}` | Named forms | +| STG | 1,446 | `https://payer.gov.in/policy/stgquestionnaire/{id}` | All titled `STG Questionnaire` | + +The fifteen policy-level forms are Discharge Information, General Findings, Personal History, Family History, Admission Details, Hospital Bill Details and Query Response. Then Authentication Consent, Death, Leaving Against Medical Advice (LAMA), Discharge Against Medical Advice (DAMA), General Medicine, Discharge Consent, Live Discharge and Patient Payment Consent. + +Across all 2,215 there are 10,504 items: 10,463 `choice`, 20 `attachment`, 12 `dateTime` and 9 `string`. All but 20 are `required: true`. `choice` items carry `answerOption[].valueString` rather than a coded answer, usually just `Yes` and `No`. + +The provider renders these and returns a `QuestionnaireResponse`, referenced from a supporting-info entry under category `INF`. The `documentationUrl` in the plan is the `Questionnaire.url` the response must point back to. + +## Traps + +**Duplicate entries.** 2,215 `Questionnaire` entries carry 1,461 distinct `fullUrl` values. Six distinct STG forms appear 20 times each, byte-identical every time. Deduplicate on `fullUrl` before storing, or your form table will be half redundant. + +**The STG questionnaires put the question in `prefix`, not `text`.** All 10,425 STG items have a `prefix` and no `text`. All 79 policy-level items have a `text` and no `prefix`. A renderer that reads `item.text`, which is the correct FHIR field for the question, will draw 1,446 forms of blank rows with answer buttons. Read `text` and fall back to `prefix`. + +**`STG` is bound to the category system, not the code system.** In all 2,200 flat requirements the `code` sub-extension carries system `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` with code `STG`. `STG` is a supporting-info code, not a category. The same defect appears in the preauthorisation and claim requests, in the opposite direction. Match on the code. + +**Extension urls change case and form between the two structures.** Under `coverage` the condition extension url is the absolute `https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim-Condition`. Under `specificCost` it is the bare relative string `claim-condition`. A matcher keyed on the full url finds 2,261 of them and covers all 620 that carry `ParentProcedure` on the cost side. + +**The plan declares no profile.** `InsurancePlan.meta` carries only a `SUBSETTED` tag. There is no `meta.profile` on the plan, the payer `Organization` or any `Questionnaire`. Every provider-generated resource in the corpus declares its NRCeS profile. Do not make profile presence a parse precondition. + +**Several documented elements are simply absent.** There is no `plan.identifier`, no `plan.network`, no `coverage.network`, no `endpoint`, and no `claim-exclusion` extension anywhere in the resource. Waiting periods, pre-existing-condition rules and excluded procedures are specified as plan-level extensions and this plan carries none of them. Treat every one of those as optional. + +**1,727 codes, 2,881 entries.** 543 package codes appear more than once, one of them 52 times. The repeats are implant codes, which appear once per parent procedure they may accompany. Key your index on the pair of package code and parent, or on the element `id`, not on the package code alone. diff --git a/site/docs/nhcx/v1/fhir-reference/insurance-plan-response.md b/site/docs/nhcx/v1/fhir-reference/insurance-plan-response.md new file mode 100644 index 000000000..46d267e03 --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/insurance-plan-response.md @@ -0,0 +1,84 @@ +--- +title: Insurance plan response +sidebar_label: Insurance plan response +description: The two shapes a plan arrives in, which payer sends which, and the bundle, header and caching rules they share. +verification: unverified +source: "NHCX Integration Handbook §6; Insurance Plan Implementation Guide; NHCX-PMJAY-HMIS Integration Guide §8.1; NHCX FAQs v1.2 #15; Sample FHIR bundles, `insuranceplan/insuranceplan_response.txt`" +sidebar_position: 5 +--- + +# Insurance plan response + +The payer's answer to the poll, and the largest message in NHCX by a wide margin. It is the policy as data: what the hospital may bill, at what rate, under what rules, with which documents, and on which forms. Everything on a treatment-planning screen should come from here. + +## In short + +- Two shapes exist, and which one arrives depends on whether the payer is a scheme or a private insurer. +- They are not layout variants: they answer different questions and need different code paths. +- The bundle, the plan header and the caching rules are the same for both. +- Package-based is fully sampled at 21 MB. Coverage-based has no sample in the corpus at all. + +## Two shapes, and a payer picks one + +The Insurance Plan implementation guide defines two ways to structure the same resource, and which one arrives depends on who the payer is. They are not variants of a layout. They answer different questions, and a hospital system that handles one will not read the other. + +| | Package-based | Coverage-based | +| :---- | :---- | :---- | +| Sent by | Government schemes. PMJAY throughout | Private insurers and their TPAs | +| Path to a billable thing | `plan[0].specificCost[] → category → benefit[] → cost[]`, with the rules on `coverage[]` alongside | `coverage[] → benefit[] → limit[]` | +| The unit | A named package at a fixed all-inclusive rate, for example `MG004A` "Dengue fever" | A benefit with a money limit, for example ICU charges or room rent | +| What decides the amount | The package rate, plus stratification and implant lines the flags allow | The benefit's limit, against the bill the hospital actually raises | +| Rules carried | Sixteen `Claim-Condition` flags per package | `benefit.requirement` strings such as "Pre-authorisation required" | +| Sample in the corpus | Yes. One 21 MB payload, fully worked | None | +| Written up in | The next chapter | The chapter after it | + +Both arrive on `/v1/insuranceplan/on_request` in a `collection` bundle, in answer to the same one-`Task` request. The next two chapters take each shape in turn. What follows here is what they share. + +## The bundle + +2,217 entries. Three resource types. + +| # | Resource | Count | What it is | +| :---- | :---- | :---- | :---- | +| 1 | `InsurancePlan` | 1 | The whole policy. 21 MB of the 21 MB file | +| 2 | `Organization` | 1 | The payer, `SHA HP`, NIIP `1518` | +| 3 onwards | `Questionnaire` | 2,215 | The payer's data-requirement forms | + +There is no provider `Organization`. `ownedBy` and `administeredBy` both point at entry 2. There is no `Patient`, because a plan is not about a person. + +`Bundle.identifier` is `100155-1000003614` under system `https://payer.pmjay.nha.gov.in`, correctly spelled here. `Bundle.type` is `collection`, `Bundle.timestamp` and `meta.lastUpdated` are both `2026-03-03T12:56:48.159+05:30`. + +## The plan header + +| Path | Value | +| :---- | :---- | +| `id` | `100155-1000003614` | +| `status` | `active` | +| `name` | `PMJAY - Universal Health Policy` | +| `type.coding` | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-insuranceplan-type`, code `07`, `Universal Health Policy` | +| `period` | 2023-04-01 to 2026-03-31 | +| `identifier[0]` | system `https://hcx.pmjay.gov.in/v1/InsurancePlan`, value `100155-1000003614` | +| `identifier[1]` | type `NH`, system `https://payer.nha.gov.in`, value `PMJAY/HP/S/G`, element id `100155` | +| `identifier[2]` | type `XV`, system `https://payer.nha.gov.in`, value `PMJAY/HP/S/2024/R2`, element id `100185` | +| `plan[0].type.coding` | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-plan-type`, code `03`, `Group` | +| `plan[0].generalCost[0].cost` | 500,000 INR | + +There are two type codes and they answer different questions. `InsurancePlan.type` `07` is what kind of insurance this is. `plan.type` `03` is how the product is sold, in this case as a group policy. `generalCost` of 500,000 INR is the family wallet, and it reconciles exactly with the eligibility response's 463,730 allowed plus 36,270 used. + +`identifier[1].value` is the string you sent as `policyNumber`. `identifier[2]` is the scheme revision, `R2` of the 2024 Himachal Pradesh plan, and it is what your cache should be stamped with. + +## What the sample shows + +`insuranceplan_response.txt` is 21,163,674 bytes, received 3 March 2026 at 12:56, forty-two minutes after the request. It cannot be opened in an editor and it cannot be handled by a naive JSON parser inside a request-response cycle. Stream it, or parse it once on a worker and store the result. + +The sample is a state scheme plan and therefore entirely package-based. A private insurer's plan uses the coverage-and-limit shape with benefit types like `ICU` and room rent and `benefit.requirement` strings such as "Pre-authorisation required". There is no sample of that shape in the corpus. + +## How the plan is meant to be used + +Fetch it once per policy, not once per patient, and cache it. Stamp the cache with `identifier[2].value`, the scheme revision, and record on every preauthorisation and claim which revision it was built against. A rate that changed on the payer's side without a refresh on yours is the commonest cause of a reduced approval. The revision stamp is what turns that into a diagnosable event rather than a mystery. + +Refresh when a `Communication` arrives with reason `policychange`, and on whatever periodic schedule your operations team accepts. A 21 MB fetch is not something to do per admission. + +From the cache, build the treatment-planning screen. The specialty list is `coverage[].type`. The package list under a specialty is its `benefit[]`, filtered by `GovtReserved` against your facility type. The price shown is the `Procedure` cost line, or the `Stratification` line once a bed category is chosen. The document checklist is the package's `Claim-SupportingInfoRequirement` entries plus the sixteen at plan level. The forms are the `Questionnaire` resources the requirements point at, rendered from the plan rather than hard-coded, because they change when the scheme changes. + +Then use the same cache as the first line of validation, on the server and not only in the browser. Codes and displays character for character as the plan has them, including the misspellings. Amounts within the benefit's limit. Quantity within `QuantityAllowed`. Implant and stratification counts within their maxima. Every mandatory document attached before submit is enabled. Nothing on that screen should be typed in by hand if the plan already knows it. diff --git a/site/docs/nhcx/v1/fhir-reference/payment-notice-and-acknowledgement.md b/site/docs/nhcx/v1/fhir-reference/payment-notice-and-acknowledgement.md new file mode 100644 index 000000000..884183fc1 --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/payment-notice-and-acknowledgement.md @@ -0,0 +1,117 @@ +--- +title: Payment notice and acknowledgement +sidebar_label: Payment notice and acknowledgement +description: "The only exchange carrying real money: three notices as the transfer moves, the UTR, and the acknowledgement Task." +verification: unverified +source: "Sample FHIR bundles, `paymentNotice/payment_notice.txt` and `paymentNotice_ack.txt`, `claim/claim_queryUpdate_response.txt`; NHCX PMJAY Integration Handbook §4.1, §4.2, §11; NHCX Requests and Responses for UseCases, Value sets and PaymentNotice sheets; Payment (NHA); NHCX Provider Side Use Cases, Sandbox Exit Process" +sidebar_position: 16 +--- + +# Payment notice and acknowledgement + +The payment notice arrives unasked. The payer sends it once money moves against an approved claim, on `/v1/paymentnotice/request`. It can arrive three times for one case: workflow **30** when the payer initiates, **31** when the banking system processes, **33** when the transfer settles. The provider replies with an acknowledgement `Task`, workflow **17**. This is the only exchange in the reference that carries actual money rather than an adjudicated figure. + +## In short + +- The only exchange carrying real money rather than an adjudicated figure. +- Three notices can arrive for one case: 30 initiated, 31 processed, 33 settled. +- The UTR rides on the `PaymentReconciliation`, whose detail lines itemise the money by type. +- The provider replies with an acknowledgement `Task` on workflow 17. + +## The notice bundle + +Five entries, in this order. Every resource carries a `SUBSETTED` meta tag. + +| # | Resource | What it is for | +| :---- | :---- | :---- | +| 1 | `Task` | The delivery instruction. Its single input references the `PaymentNotice` | +| 2 | `PaymentNotice` | The headline: net amount, currency, payment status, recipient | +| 3 | `PaymentReconciliation` | The breakdown: payment date, payment identifier, one detail line per component | +| 4 | `Organization` | The provider, `NPI` `IN1910000151` | +| 5 | `Organization` | The payer, `NIIP` `1518`, with no `name` at all | + +### The fields that matter + +| Path | Value in the sample | +| :---- | :---- | +| `Task.status`, `Task.intent` | `requested`, `order` | +| `Task.code.coding.system` | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-codes` | +| `Task.code.coding.code` | `deliver` | +| `Task.description` | "Payment initiated" | +| `Task.input[0].type.coding` | `status`, system `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` | +| `Task.input[0].valueReference` | The `PaymentNotice` | +| `PaymentNotice.identifier[0]` | Type `CLN`, value `EO26AA2700001` | +| `PaymentNotice.status` | `active` | +| `PaymentNotice.payment` | Reference to the `PaymentReconciliation` | +| `PaymentNotice.amount` | `2187`, `INR` | +| `PaymentNotice.paymentStatus.coding` | `paid`, system `http://terminology.hl7.org/CodeSystem/paymentstatus` | +| `PaymentReconciliation.paymentDate` | `2026-02-27`, a date with no time | +| `PaymentReconciliation.paymentAmount` | `2187`, `INR` | +| `PaymentReconciliation.disposition` | "Payment initiated" | +| `PaymentReconciliation.paymentIdentifier.type.coding` | `UTR`, system `.../ndhm-identifier-type-code` | +| `PaymentReconciliation.paymentIdentifier.value` | `PMJAY/HP/S/2024/R2/10000009/Normal` | + +`PaymentNotice.amount` is the net figure that reaches the hospital's account. It is not the approved amount. Take the approved amount from the claim response and keep both. + +### The detail lines + +| `detail[].type.coding.code` | `amount.value` | `detail[].id` | +| :---- | :---- | :---- | +| `TDS` | 243 | `PMJAY/HP/S/2024/R2/10000009/TDS` | +| `Payment` | 2187 | `PMJAY/HP/S/2024/R2/10000009/Normal` | + +The full value set for `detail[].type` also defines `approvedamount`, `claimedamount`, `servicetax`, `advance`, `recovered` and `penality`. None of those appear in the sample. Sum every line whose type is a deduction and add the `Payment` line before you compare against anything. + +Both `detail[].type.coding.system` values are `http://hl7.org/fhir/ValueSet/payment-type`, a ValueSet URL used where a CodeSystem URL belongs. + +## The arithmetic that ties it together + +The payment notice reconciles against the claim response for the same case, `EO26AA2700001`. That response reported three totals: `submitted` 2700.00, `eligible` 2430.00 and `benefit` 2430.00. The notice pays 2187 and deducts 243. + +``` +adjudicated benefit 2430 + minus TDS 243 + equals net paid 2187 +``` + +That is the check to run on every notice. Net plus the sum of deductions must equal the adjudicated benefit. If it does not, the payer has applied a component you are not parsing, and the case should be flagged rather than closed. Note the direction of the identity: the handbook's implementation note says net plus TDS should equal the gross claim amount, but 2187 plus 243 is 2430, the benefit, not 2700, the submitted amount. Reconcile against `benefit`, not against what you claimed. + +## The acknowledgement bundle + +Three entries. The provider builds this one, so it uses `urn:uuid:` on the `Task` and absolute URLs on the two `Organization`s, exactly like the cancel request. + +| # | Resource | What it is for | +| :---- | :---- | :---- | +| 1 | `Task` | The acknowledgement. Two outputs, no inputs | +| 2 | `Organization` | The provider, `IN1910000151`, "Usha Kiron" | +| 3 | `Organization` | The payer, `1518`, "SHA HP" | + +| Path | Value in the sample | +| :---- | :---- | +| `Task.status`, `Task.intent` | `completed`, `order` | +| `Task.code.coding.system` | `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `Task.code.coding.code` | `status` | +| `Task.description` | "Recived the payment EO26AA2700001", misspelled in the live payload | +| `Task.output[0].type.coding` | `status`, system `.../ndhm-task-output-type` | +| `Task.output[0].valueCodeableConcept.coding` | `paymentack`, system `.../ndhm-task-output-value`, display "Payment is acknowledged" | +| `Task.output[1].type.coding` | `claimNumber`, system `.../ndhm-task-input-type-code` | +| `Task.output[1].valueString` | `EO26AA2700001` | + +`paymentack` is the value the payer looks for. The other output values in the same code system are `claimcancelled`, `claimreinitiated`, `claimsuspended`, `taskak` and `taskdelivered`. + +## What the samples show + +`paymentNotice/payment_notice.txt`, 5,334 bytes, five entries, timestamped 2026-02-27T15:36:08+05:30. `paymentNotice/paymentNotice_ack.txt`, 3,164 bytes, three entries, timestamped 2026-02-27T10:06:18+05:30. + +Both files describe workflow 30 only, the initiation. There is no sample of workflow 31 or 33, so the settled notice that actually carries a bank reference has never been observed. Neither is there a sample where more than two detail lines appear. + +## Traps + +- **Input and output systems are mixed inside one resource.** `output[1].type` in the acknowledgement is coded in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code`, an input system used for an output, while `output[0].type` correctly uses `ndhm-task-output-type`. Emit it the way the sample does. If you validate strictly against the output system, this entry will fail. +- **Three `Task` code systems across four `Task` exchanges.** The notice is `ndhm-task-codes|deliver`, the acknowledgement is `financialtaskcode|status`, the cancel request is `financialtaskcode|cancel` and the cancel response is `task-code|approve`. Never switch on the code without the system. +- **The UTR is not a bank reference.** `PaymentReconciliation.paymentIdentifier` is typed `UTR`, but the value is `PMJAY/HP/S/2024/R2/10000009/Normal`, a structured scheme reference built from the plan class, an internal number and the payment type. Reconciliation staff cannot match that against a bank statement. Display it, store it, and expect a real transaction reference only on workflow 33, which has no sample. +- **The acknowledgement predates the notice.** The acknowledgement is stamped 10:06 and the notice 15:36 on the same day. The sandbox files were assembled out of order. Do not derive lifecycle ordering from timestamps. +- **The payer identifier system is misspelled.** The notice bundle identifier uses `https://payer.pmajy.nha.gov.in`. The provider's acknowledgement uses the correct `https://payer.pmjay.nha.gov.in`. Match on value. +- **`Bundle.meta.lastUpdated` on the acknowledgement is frozen** at the template value `2025-11-11T15:09:41.516+05:30`, shared with every other provider request bundle. `Bundle.timestamp` holds the real time. +- **Where the acknowledgement is posted is stated two ways.** The Payment document and the sandbox exit checklist say `/v1/paymentnotice/on_request`. The handbook says `/v1/task/submit` in its resource table and `/v1/paymentnotice/on_request` in its implementation note. Build to `on_request` and make the path configurable per payer. +- **The payer `Organization` in the notice has no name.** Fall back to the `NIIP` value for display. diff --git a/site/docs/nhcx/v1/fhir-reference/preauthorisation-enhancement.md b/site/docs/nhcx/v1/fhir-reference/preauthorisation-enhancement.md new file mode 100644 index 000000000..a47b52b01 --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/preauthorisation-enhancement.md @@ -0,0 +1,120 @@ +--- +title: Preauthorisation enhancement +sidebar_label: Preauthorisation enhancement +description: An enhancement is a preauthorisation bundle with one more item. Nothing in the payload says which it is. +verification: unverified +source: "Sample FHIR bundles, `preauth/enhancement/enhancement_req.txt`, `preauth/enhancement/enhancement_resp.txt`, `preauth/preauth_request.txt`; NHCX-PMJAY-HMIS Integration Guide §8.4.3; NHCX APIs to be called based on scenario, row 7; NHCX PMJAY Integration Handbook §8.5, workflow table" +sidebar_position: 10 +--- + +# Preauthorisation enhancement + +An enhancement extends an already approved preauthorisation. The patient stays longer, a second procedure is added, or the treatment plan grows. The provider posts it to the same `/v1/preauth/submit` endpoint under workflow 13, quoting the original reference with a new correlation ID. The payer answers on `/v1/preauth/on_submit`. Multiple enhancements may be raised until discharge, each only after the previous request on the case has closed. + +## In short + +- An enhancement is a preauthorisation bundle with one more item and a larger total. +- Nothing in the payload marks it as an enhancement: `Claim.related` is absent and the case number is unchanged. +- Only the workflow code in the header separates it from the original request. +- Sequencing is enforced by the payer, not by the payload. + +## Nothing in the payload says this is an enhancement + +The enhancement bundle is a preauthorisation bundle. `Claim.use` is still `preauthorization`. `Claim.identifier[0].value` is still `VB26AA2600001`, the same case number as the original request. `Claim.status` is still `active`. **`Claim.related` is absent**, so there is no `prior` link to the earlier submission and no `relationship` code. `Claim.created` is a new timestamp and nothing else changes. + +The only difference between the original request and the enhancement, inside the FHIR payload, is that `Claim.item` has grown from one entry to two, and `Claim.total` has grown to match. + +The declaration that this is an enhancement lives entirely at the protocol layer, in the workflow ID and the correlation ID of the JWE envelope. The integration guide states it plainly: an enhancement is "a new preauth request with the old reference but new correlation id". A payload-only reader cannot distinguish an enhancement from a resubmission or from a first request that happened to have two items. Key your state machine on the workflow ID you sent and the correlation ID you stored, never on the bundle. + +## The bundle + +54 entries. The first six and the last two are the request; the middle is three complete ABDM clinical documents. + +| Entry | Resource | `fullUrl` | What it is for | +| :---- | :---- | :---- | :---- | +| 0 | `Claim` | absolute | The request, now with two items | +| 1 | `Patient` | absolute | Beneficiary | +| 2, 3 | `Organization` | absolute | Provider, then payer | +| 4 | `Coverage` | absolute | The policy | +| 5 | `Practitioner` | absolute | The treating doctor | +| 6 to 17 | 12 resources headed by a `Composition` | `urn:uuid:` | ABDM `DiagnosticReportRecord`, "Lipid Profile" | +| 18 to 42 | 25 resources headed by a `Composition`, including three `Condition`, eleven `Observation`, a `Procedure`, a `MedicationRequest` and an `AllergyIntolerance` | `urn:uuid:` | ABDM `DischargeSummaryRecord`, "Discharge Summary for Dengue" | +| 43 to 51 | 9 resources headed by a `Composition` | `urn:uuid:` | ABDM `DiagnosticReportRecord`, "Blood Sugar Fasting" | +| 52, 53 | `Procedure` | absolute | One per `Claim.procedure` entry | + +`Bundle.identifier` is still the case number. `Bundle.id` is still the literal string `PreAuth`. + +## The second item + +The two items are what the payer adjudicates. They differ in more than the amount. + +| Path | `item[0]` | `item[1]` | +| :---- | :---- | :---- | +| `sequence` | `1` | `2` | +| `procedureSequence` | `[1]` | `[2]` | +| `category.coding` | code `MP`, "General medicine" | code `MG`, "General Medicine" | +| `productOrService.coding` | code `MG0111A`, "Pleural Effusion" | code `MG004B`, "Dengue hemorrhagic fever" | +| `productOrService.text` | `Testing ABC` | `Testing 123` | +| `modifier.coding` | code `STRAT006b`, "HDU" | code `STRAT006c`, "ICU - Without Ventilator" | +| `servicedPeriod` | `2026-02-22` to `2026-02-27` | `2026-02-22` to `2026-02-25` | +| `quantity`, `factor` | `1`, `0.5` | `1`, `0.5` | +| `unitPrice`, `net` | `3300` | `8500` | + +`Claim.total.value` is `11800`, the sum of both nets. **The request total is cumulative.** The already-approved line is resubmitted in full alongside the new one, exactly as the integration guide requires: the bundle must carry "already approved treatments and treatments for approval". + +Both category codings sit in `https://payer.pmjay.nha.gov.in`. `MP` and `MG` render as the same specialty with different capitalisation. They are distinct codes in the plan and are not interchangeable. Take each item's category from the package the plan publishes, not from the specialty name. + +`Claim.careTeam` and `Claim.diagnosis` do not grow. Both items point at `careTeamSequence` `[1]` and `diagnosisSequence` `[1]`. Only `procedure` grows, to two. + +## Supporting information + +Six entries, all category `INV`, all with the category taken from the wrong system. + +| Seq | Code | Meaning | Value | +| :---- | :---- | :---- | :---- | +| 1 | `MAND0408` | Clinical notes, history, admission notes | `valueAttachment`, `application/pdf` | +| 2 | `MAND0409` | Any investigations done | `valueAttachment`, `image/jpeg`, 261,752 base64 characters | +| 3 | `MAND0570` | Planned line of management | `valueAttachment`, `application/pdf` | +| 4 | `MAND0455` | CXR PA view or CECT chest abdomen and pelvis | `valueReference` to entry 6 | +| 5 | `MAND0409` | Any investigations done | `valueReference` to entry 18 | +| 6 | `MAND0408` | Clinical notes, history, admission notes | `valueReference` to entry 43 | + +`MAND0408` and `MAND0409` each appear twice, once as an attachment and once as a reference. Sequences run `1` to `6` without gaps, unlike the claim bundles. As in the first request, there is no admission-date or encounter-date entry. + +## The response + +`preauth/enhancement/enhancement_resp.txt`, 7,979 bytes, five entries, the same shape as any preauthorisation response. `outcome` is `complete`, `disposition` is `approved`, and the claim-level adjudication reason is `approved`. + +Two things about it will break naive code. + +**The items come back out of order.** `item[0]` has `itemSequence` `2` and `item[1]` has `itemSequence` `1`. The new line is adjudicated first, the carried-forward line second. Index the response by `itemSequence`, never by array position. + +| `itemSequence` | `eligible` | `eligpercent` | `eligquant` | status | +| :---- | :---- | :---- | :---- | :---- | +| 2 | `3600.0` | `100` | `1` | `Approved` | +| 1 | `2700.0` | `100` | `1` | `Approved` | + +The new item was requested at 8,500 and allowed at 3,600, yet the response is still `complete` with reason `approved` and no `processNote` explains the cut. A reduced amount does not force `outcome` to `partial`. Reconcile amounts yourself. + +**The two totals are computed on different bases.** + +| `total[].id` | Category code | Amount | Basis | +| :---- | :---- | :---- | :---- | +| `total` | `benefit` | `3600.0` | The increment, this enhancement only | +| `PMJAY-T` | `eligible` | `6300.0` | Cumulative, 2700 plus 3600 | + +Nothing in the handbook, the integration guide or the samples states this rule. It is visible only by arithmetic against the earlier approval. The claim response for the same case reports both cumulatively, so the basis is not even consistent across exchanges. Track the approved amount as a running figure of your own, reconcile `PMJAY-T` against it, and treat `benefit` on an enhancement as a delta. + +## Traps + +**Supporting-info category uses the code value set.** All six entries set `category.coding.system` to `…/CodeSystem/ndhm-supportinginfo-code` with code `INV`. The category belongs in `…/CodeSystem/ndhm-supportinginfo-category`. Every enhancement and first-request sample does this; only the query answer bundle gets the category system right. + +**The attached documents do not match the codes they are filed under.** `MAND0455`, the chest imaging code, references a Lipid Profile. `MAND0409`, "any investigations done", references a discharge summary. `MAND0408`, clinical notes, references a fasting blood sugar report. The attachments are shuffled relative to the original request too: the 261,752-character JPEG filed under `MAND0408` there is filed under `MAND0409` here. This is sandbox data. Do not reproduce it. + +**Inline attachments are base64-encoded twice.** All three `valueAttachment.data` values decode to another base64 string before they decode to the PDF or JPEG. The `DocumentReference` attachments in the same bundle are encoded once. The first request has the same defect. Encode once, and check the decoded bytes for a file signature on anything you receive. + +**There is no `preAuthRef` anywhere.** The response to the first approval does not issue one and the enhancement does not quote one. Nothing in either payload links this submission to the approval it extends. That is the same absence chapter 07 records on the response side, and it is why the case number and your own stored correlation IDs are the only reliable thread through a case. + +**Sequencing is enforced by the payer, not by you.** An enhancement is refused with a payer error in three cases: no approved record, a request still in progress, or the claim already raised. Surface those errors as they arrive rather than pre-guessing them. + +**The bundle timestamps in the archive are not chronological.** This enhancement is stamped `2026-02-26T16:13:49+05:30`, twenty-four minutes after the first request, but the approval it supposedly follows is stamped `21:39`. The sandbox capture is not a replay of a single ordered run. Do not infer the exchange order from `Bundle.timestamp`. diff --git a/site/docs/nhcx/v1/fhir-reference/preauthorisation-query-and-answer.md b/site/docs/nhcx/v1/fhir-reference/preauthorisation-query-and-answer.md new file mode 100644 index 000000000..7df40970d --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/preauthorisation-query-and-answer.md @@ -0,0 +1,135 @@ +--- +title: Preauthorisation query and answer +sidebar_label: Preauthorisation query and answer +description: There is no query resource. The question travels as free text in an adjudication and the answer as a whole resubmitted bundle. +verification: unverified +source: "Sample FHIR bundles, `preauth/preauthresponse_with_query.txt`, `preauth/Query/preauth_queryUpdate_req.txt`, `preauth/Query/preauth_response_queryUpdate_App.txt`, `preauth/enhancement/enhancement_resp.txt`; NHCX PMJAY Integration Handbook §8.5.3, §12.1 to §12.3, Appendix C; NHCX-PMJAY-HMIS Integration Guide §8.4.4, §8.5.2, query flow table; NHCX-PMJAY-HMIS Integration Overview, query flow table; NHCX APIs to be called based on scenario, row 8" +sidebar_position: 11 +--- + +# Preauthorisation query and answer + +When a PMJAY payer wants more before it decides, it raises a query. The provider answers, and the payer then approves or rejects. This is the most common non-happy path in preauthorisation, and it is the exchange whose FHIR representation departs furthest from what the specifications describe. + +There is no query resource. The payer's question travels as free text inside a `ClaimResponse` adjudication, and the provider's answer travels as an entire resubmitted `Claim` bundle. Both directions reuse the preauthorisation endpoints: the query arrives on `/v1/preauth/on_submit` under workflow 24, and the answer goes back to `/v1/preauth/submit` under workflow 19, quoting the original reference with a new correlation ID. + +```mermaid +flowchart LR + A["Provider
preauth request
wf 12"] --> B["Payer
ClaimResponse
outcome partial
reason queried
wf 24"] + B --> C["Provider
whole Claim bundle again
answer in item.productOrService.text
wf 19"] + C --> D["Payer
ClaimResponse
outcome complete
reason approved"] + style A fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + style C fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + style B fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + style D fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 +``` + +## In short + +- There is no query resource. The question is free text inside a `ClaimResponse` adjudication. +- The answer is an entire resubmitted `Claim` bundle, on the preauthorisation endpoint under workflow 19. +- Two sources specify a `Task` and `CommunicationRequest` pair instead, which PMJAY does not use. +- The query text is a pipe-delimited audit trail in the preauthorisation, and a bare sentence on the claim side. + +## The query + +The queried response is an ordinary five-entry preauthorisation response bundle. `ClaimResponse.outcome` is `partial`, the claim-level `adjudication[0].reason.coding.code` is `queried`, `item[0]` status is `Queried`, `eligpercent` and `eligquant` are `0`, and both totals are `0`. `disposition` is the string `main query 2 ` with a trailing space. None of that tells you what the payer wants. + +The question itself is in `item[0].adjudication[reason].reason.coding[0].display`. That coding has no `system` and no `code`, only a `display`. Here is the real value, verbatim: + +``` +other Request acknowledged and accepted for further processing.|USER1000099~02/26/2026, 08:47 ~other~testing query with souvik~PPD-Trust|null|USER1000099~02/26/2026, 09:13 ~other~Testing query 2 with souvik~PPD-Trust +``` + +It is a two-level delimited audit log. Split on `|` first. + +| Segment | Value | Meaning | +| :---- | :---- | :---- | +| 0 | `other Request acknowledged and accepted for further processing.` | Preamble. A reason category, `other`, run together with a canned acknowledgement sentence, with no separator between them | +| 1 | `USER1000099~02/26/2026, 08:47 ~other~testing query with souvik~PPD-Trust` | First query | +| 2 | `null` | The answer slot for the first query, unfilled, as the literal four-character string `null` | +| 3 | `USER1000099~02/26/2026, 09:13 ~other~Testing query 2 with souvik~PPD-Trust` | Second query | + +After the preamble the segments alternate: query, answer, query, answer, and finally the decision. Now split a query segment on `~`. + +| Field | Value | Meaning | +| :---- | :---- | :---- | +| 0 | `USER1000099` | The payer desk operator's user ID | +| 1 | `02/26/2026, 08:47 ` | Timestamp, `MM/DD/YYYY`, a comma, `HH:MM`, and a trailing space | +| 2 | `other` | Query type, from the payer's own list | +| 3 | `testing query with souvik` | **The question. This is the only field a human needs.** | +| 4 | `PPD-Trust` | The adjudicating desk | + +Parsing rules. Split on `|` first, then on `~`, and never assume a fixed segment count, because the log grows with each exchange. Segment 0 is never a query. Treat the literal `null` as an empty answer. Trim every field, because the timestamps carry trailing spaces. Never put `~` or `|` in anything you send back, or you will corrupt the payer's log. + +The timestamps are unreliable. `ClaimResponse.created` on this bundle is `2026-02-26T21:15:00+05:30`, yet the two entries claim 08:47 and 09:13 on the same day, in American date order, with no timezone and no meridiem marker. Display them as the payer's own strings. Do not parse them into your timeline. + +The format is not stable across the corpus either. The claim-side query for the same case carries a bare sentence in the same field, with no delimiters at all. The delimited form appears in the preauthorisation query, and again in the replayed audit trails. Same payer, same sandbox run, two formats. A parser must tolerate a segment count of one. + +## Watching the log grow + +The string is cumulative and is replayed on every later response for the case. The enhancement approval carries the same field with two more segments appended, `…~PPD-Trust|Query response for Testing|Approved`. Segment 4 is the provider's answer text and segment 5 is the final decision, which confirms the alternating structure. It also gives you a free reconciliation: the answer you sent should reappear in the payer's log on the next response, and that is the only acknowledgement that your reply was read. + +## The answer + +The provider's answer is a whole preauthorisation bundle, resubmitted. It is not a delta, not a `Communication`, and not a `Task`. The sample carries 96 entries. + +| Entry | Resource | What it is for | +| :---- | :---- | :---- | +| 0 to 5 | `Claim`, `Patient`, two `Organization`, `Coverage`, `Practitioner` | The request core, identical in shape to the first submission | +| 6 to 30 | 25 resources headed by a `Composition` | ABDM `DischargeSummaryRecord`, "Discharge Summary for Dengue" | +| 31 to 55 | 25 resources headed by a `Composition` | ABDM `WellnessRecord`, "Wellness Report" | +| 56 to 67 | 12 resources headed by a `Composition`, including three `ChargeItem`, a `Medication` and an `Invoice` | ABDM `InvoiceRecord`, "Invoice" | +| 68 to 92 | 25 resources headed by a `Composition` | A second ABDM `WellnessRecord` | +| 93 | `Questionnaire` | The policy questionnaire | +| 94 | `QuestionnaireResponse` | Its answers | +| 95 | `Procedure` | The planned procedure | + +The `Claim` is unchanged where it matters. Same case number `VB26AA2600001`, same `use` of `preauthorization`, one item, `total` still 3300, and `Claim.related` absent. **The reply text is in `Claim.item[0].productOrService.text`**, where it is `Sample Message`. That field is a `CodeableConcept.text` sitting beside the package coding. It is the free-text label of a service, being used as a message channel. + +`productOrService.text` is populated on every preauthorisation item in the corpus, including first submissions, with values such as `Testing ABC` and `Query response for Testing`. So the field's presence does not mark a bundle as an answer. Only the workflow ID does. + +## Supporting information + +Eight entries. This is the only preauthorisation bundle in the corpus that carries the date categories, and it is the only one that gets the category system right on any entry. + +| Seq | Category | Code | Meaning | Value | +| :---- | :---- | :---- | :---- | :---- | +| 1 | `INV` | `MAND0408` | Clinical notes and admission notes | `valueReference` to entry 6 | +| 2 | `INV` | `MAND0455` | CXR PA view or CECT | `valueReference` to entry 31 | +| 3 | `INV` | `MAND0409` | Any investigations done | `valueReference` to entry 56 | +| 4 | `INV` | `MAND0570` | Planned line of management | `valueReference` to entry 68 | +| 5 | `OTH` | `EDT` | Encounter date and time | `valueString` `2026-02-22T00:00:00+00:00` | +| 6 | `ADMD` | `ADDD` | Admission date | `valueString` `2026-02-22T00:00:00+00:00` | +| 7 | `OTH` | `EDT` | Encounter date and time | `valueString` `2026-02-22T00:00:00+00:00` | +| 8 | `INF` | `ODN` | Other document | `valueReference` to the `Questionnaire` | + +Entries 1 to 4 take their category from `…/CodeSystem/ndhm-supportinginfo-code`, the same defect as every other request. Entries 5 to 7 take it from `…/CodeSystem/ndhm-supportinginfo-category`, correctly. Entry 8 takes its code from `…/ValueSet/ndhm-supportinginfo-code`, a ValueSet URL where a CodeSystem URL belongs. + +## Traps + +**Sequence 6 has `category` and `code` swapped, and both are drawn from the category system.** `code` holds `ADDD`, "Admission Date - Discharge Date"; `category` holds `ADMD`, "Admission Date". Both cite `…/CodeSystem/ndhm-supportinginfo-category`, while the handbook puts `ADDD` in `code` under category `ONS`. Three shapes for one date. Read defensively: check both `category` and `code` before concluding the admission date is missing. + +**Sequences 5 and 7 are byte-identical duplicates.** Same category, same code, same value. Deduplicate on read. + +**The date strings carry the wrong offset.** `Claim.created` is `2026-02-26T13:13:55+05:30`, but the supporting-info dates are `2026-02-22T00:00:00+00:00`. The same wall-clock convention with a UTC offset. Chapter 01's third rule and the handbook both say `+05:30` is required and UTC fails validation. Send `+05:30`. + +**Sequence 8 references the blank `Questionnaire`, not the `QuestionnaireResponse`.** The reference is `https://payer.gov.in/policy/questionnaire/119/0`, the `fullUrl` of entry 93. Entry 94, the `QuestionnaireResponse`, is in the bundle but nothing points at it, so the payer receives the form rather than the answers. Both are empty shells anyway: the `Questionnaire` has `item` set to `null`, the title `Questioneris`, and an `id` that is the JSON number `0` rather than a string, which is invalid FHIR. Send the response, and fill it in. + +**There are no query remarks under `NMI` and `CQD`.** The provider flow chapter states that a query answer adds the overall case remarks as a `valueString` under category `NMI` with code `CQD`. An answer without it is rejected. This answer, which the payer accepted and then approved, carries no such entry. The remark went into `productOrService.text` instead. Send both until a payer tells you otherwise. + +**Two capture artefacts, not rules.** The answer is stamped `2026-02-26T13:14:14+05:30` while the query it replies to is stamped `21:15`, so the archive is a set of shape captures rather than an ordered replay. And the referenced documents do not match their codes: `MAND0408` points at a discharge summary, `MAND0455` at a wellness report, `MAND0409` at an invoice. + +## The exchange that was specified instead + +Two sources specify a completely different mechanism for exactly this purpose. + +The NHCX protocol layer and the PMJAY handbook section 12 both define a `Task` and `CommunicationRequest` pair. The payer builds a collection bundle whose `Task` carries `intent` `proposal` and `code` `poll` from `http://terminology.hl7.org/CodeSystem/financialtaskcode`. It also carries a `reasonCode` from `…/CodeSystem/ndhm-reason-code`: `tatquery`, `grievance`, `walletupdate`, `policychange`, `additionalinfo` or `claimArbitration`. Its `input[0].valueReference` points at a `Communication` resource holding the message. The provider acknowledges on `/v1/communication/on_request`. The question is a first-class resource with a status, a category, a topic and a priority. + +PMJAY does not use it, and the integration guide says so twice in the same words: + +> The PMJAY payer does not use the Communication API for queries. Instead, a query is raised by the payer with the relevant workflow ID for preauth/claim which has to be responded to by the provider with the relevant workflow ID. + +The handbook's own section 12 table concedes the point. It describes `additionalinfo` as being for information "not covered by the original ClaimResponse query mechanism". + +So the specified exchange has no samples and the sampled exchange has no specification beyond one element table and a note. Build the string parser for PMJAY, build the `Task` and `Communication` handler for the general network where chapter 15 covers it, and expect neither to help with the other. diff --git a/site/docs/nhcx/v1/fhir-reference/preauthorisation-request.md b/site/docs/nhcx/v1/fhir-reference/preauthorisation-request.md new file mode 100644 index 000000000..b8b9679aa --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/preauthorisation-request.md @@ -0,0 +1,121 @@ +--- +title: Preauthorisation request +sidebar_label: Preauthorisation request +description: The first bundle carrying clinical content, its 31 entries, and what the live sandbox proved about the sample's oddities. +verification: unverified +source: "Sample FHIR bundles, `preauth/preauth_request.txt`; NHCX PMJAY Integration Handbook §8.4, Appendix A; NHCX-PMJAY-HMIS Integration Guide §8.4; NHCX APIs to be called based on scenario; Implementation Guide for Adoption of FHIR in ABDM and NHCX; NHCX Requests and Responses, value sets" +sidebar_position: 8 +--- + +# Preauthorisation request + +The preauthorisation request is the first bundle in the exchange that carries clinical content. It asks the payer to approve a treatment before it is given. The provider posts it to `/v1/preauth/submit` under workflow 12, and the payer answers asynchronously on `/v1/preauth/on_submit`. The payload is one collection bundle whose spine is a `Claim` with `use` set to `preauthorization`. Chapter 07 covers the answer, chapter 08 the enhancement, chapter 09 the query round trip. + +## In short + +- The first bundle carrying clinical content, with a `Claim` of `use = preauthorization` as its spine. +- The sample carries 31 entries, two of which are the request proper and the rest the resources it points at. +- Two reference styles coexist in one bundle, and a parser has to handle both. +- A live run in September 2026 settled several open questions: the sample's oddities are tolerated, not required. + +## The bundle + +The sample bundle carries 31 entries in this order. Two of them are the request proper; the rest are the resources the `Claim` points at, plus two complete ABDM clinical documents flattened into the same bundle. + +| Entry | Resource | `fullUrl` | What it is for | +| :---- | :---- | :---- | :---- | +| 0 | `Claim` | absolute | The request itself | +| 1 | `Patient` | absolute | Beneficiary, PMJAY ID and jurisdictional health number | +| 2 | `Organization` | absolute | Provider, HFR ID as `NPI` | +| 3 | `Organization` | absolute | Payer, registry ID as `NIIP` | +| 4 | `Coverage` | absolute | The policy | +| 5 | `Practitioner` | absolute | The treating doctor, referenced from `careTeam` | +| 6 to 17 | `Composition`, `Organization`, `Practitioner`, `Encounter`, `Appointment`, `Patient`, four `Observation`, `DiagnosticReport`, `DocumentReference` | `urn:uuid:` | One ABDM `DiagnosticReportRecord`, titled "Lipid Profile" | +| 18 to 29 | the same twelve resource types | `urn:uuid:` | A second `DiagnosticReportRecord`, titled "Haemoglobin Estimation" | +| 30 | `Procedure` | absolute | The planned procedure, referenced from `Claim.procedure` | + +Two reference styles coexist in one bundle. The request resources use absolute URLs under `https://payer.nha.gov.in/preauthorization/v1/preauth/submit/…`. The embedded documents use `urn:uuid:`. Both resolve; a parser has to handle both. + +## The fields that matter + +| Path | Value in the sample | +| :---- | :---- | +| `Claim.identifier[0].type.coding` | system `…/CodeSystem/ndhm-identifier-type-code`, code `CLN`, "Claim number" | +| `Claim.identifier[0].system` | `https://hcx.pmjay.gov.in/v1/preauthorization` | +| `Claim.identifier[0].value` | `VB26AA2600001`, the case number, also the bundle identifier | +| `Claim.status` | `active` | +| `Claim.type.coding` | code `737481003`, "Inpatient care management (procedure)" | +| `Claim.use` | `preauthorization` | +| `Claim.created` | `2026-02-26T15:49:36+05:30` | +| `Claim.priority.coding` | system `http://terminology.hl7.org/CodeSystem/processpriority`, code `normal` | +| `Claim.insurance[0]` | `sequence` 1, `focal` true, `coverage` reference | +| `Claim.total.value` | `3300`, with no `currency` | + +The item is one line and it is where most rejections start. + +| Path | Value | | +| :--------------------------------------------------------------------- | :--------------------------------------------------------------------- | --- | +| `item[0].sequence` | `1` | | +| `item[0].careTeamSequence`, `.diagnosisSequence`, `.procedureSequence` | `[1]` each | | +| `item[0].category.coding` | system `https://payer.pmjay.nha.gov.in`, code `MP`, "General medicine" | | +| `item[0].productOrService.coding` | system `http://snomed.info/sct`, code `MG0111A`, "Pleural Effusion" | | +| `item[0].programCode` | system `…/CodeSystem/ndhm-program-code`, code `AB-PMJAY` | | +| `item[0].modifier.coding` | system `https://payer.pmjay.nha.gov.in`, code `STRAT006b`, "HDU" | | +| `item[0].servicedPeriod` | `2026-02-22` to `2026-02-27` | | +| `item[0].quantity.value`, `.unitPrice.value`, `.net.value` | `1`, `3300`, `3300` | | +| `item[0].factor` | `0.5` | | + +Note the arithmetic. `net` equals `unitPrice` multiplied by `quantity` with `factor` ignored. `0.5` is carried on every sample item and never applied. Send it because the samples send it, but do not compute with it, and do not expect the payer to. + +Diagnosis is one entry: `A97`, "Dengue", in `https://payer.pmjay.nha.gov.in`, with `type` given as SNOMED `148006` "Preliminary diagnosis". The handbook's tables ask for ICD-10 at `http://hl7.org/fhir/sid/icd-10` and for `admitting` or `clinical` as the type. No sample uses either. Follow the payer. + +`careTeam[0]` carries only `sequence` and `provider`. The `role` and `qualification` elements the handbook documents are absent from every preauthorisation sample. `billablePeriod` is absent too, although chapter 01's tenth rule and the handbook both describe it; the admission and discharge window appears only as `item.servicedPeriod` and `Coverage.period`. + +## Supporting information + +The request carries four entries, all in category `INV`. + +| Seq | Category | Code | Meaning | Value | +| :---- | :---- | :---- | :---- | :---- | +| 1 | `INV` | `MAND0408` | Clinical notes, history, admission notes | `valueAttachment`, `image/jpeg`, 261,752 base64 characters | +| 2 | `INV` | `MAND0455` | CXR PA view or CECT chest abdomen and pelvis | `valueAttachment`, `application/pdf` | +| 3 | `INV` | `MAND0409` | Any investigations done | `valueReference` to entry 6, the "Lipid Profile" `Composition` | +| 4 | `INV` | `MAND0570` | Planned line of management | `valueReference` to entry 18, the "Haemoglobin Estimation" `Composition` | + +The `MAND…` codes come from `https://payer.pmjay.nha.gov.in` and are the document checklist the eligibility call returns with purpose `auth-requirements`. Send the code and the display exactly as the checklist gave them. + +## What the sample shows + +`preauth/preauth_request.txt`, 374,611 bytes, 31 entries, case `VB26AA2600001`, `Bundle.timestamp` `2026-02-26T15:49:37+05:30`. It is a single-item inpatient request for 3,300 with two attached images and two embedded structured reports. + +It is unrepresentative in one important way. **It carries no admission-date or encounter-date supporting information at all.** The flow chapter tells you to send registration date as `EDT` under category `OTH`, and admission date as `ADDD` under category `ONS`. The handbook agrees. This sample sends neither. The only sample in the whole preauthorisation family that does carry them is the query answer, described in chapter 09. Treat their absence here as a defect in the capture, not as permission to omit them. + +## Verified live + +On 5 and 6 September 2026 the reference request under `apps/reference/provider/preauth/request` was sent to the SHA HP sandbox from a second hospital, and it settles several of the open questions above. The bundle was refused until every `item`, `procedure` and `supportingInfo` entry carried an element id, and the `Claim` carried its number as `id` (`PAYR-1027`). It was then refused until the `Practitioner` carried an `HPIN` identifier (`PAYR-1083`). It then passed validation, and was stopped only by the scheme's one-live-preauthorisation rule (`PAYR-1238`). Along the way the SHA accepted all of these: + +- `factor` 1 in place of the sample's `0.5`. +- The category `MG` under `…/ndhm-benefit-category`, in place of the sample's `MP` under the payer's own system. +- The package under `…/ndhm-procedure-code` rather than SNOMED. +- An ICD-10 diagnosis with `admitting` as its type. +- A `careTeam` with `role` and a SNOMED `qualification`. +- A `billablePeriod`, and `ADDD` and `EDT` dates. +- A request with none of the four `MAND…` documents. Treat the sample's oddities as tolerated, not required. Building a Provider 10 has the whole run. + +## Traps + +**Supporting-info category is populated from the code value set.** Every one of the four entries sets `category.coding.system` to `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code` with code `INV`. The category belongs in `…/CodeSystem/ndhm-supportinginfo-category`. The value set that is right for `code` has been used for `category`. The date entries in the query answer bundle get the category system right, so both forms exist in the same corpus. Send what the payer's validator accepts, and expect to see the wrong-system form in anything you receive. + +**The package code sits in two systems inside one bundle.** `Claim.item[0].productOrService.coding.system` is `http://snomed.info/sct` for code `MG0111A`. The `Procedure` at entry 30 gives the same code `MG0111A` with the same display in `https://payer.pmjay.nha.gov.in`. `MG0111A` is not a SNOMED concept in either place. The eligibility request binds the same code to the payer system as well, so `http://snomed.info/sct` in `productOrService` is the outlier and it is the one every preauthorisation and claim sample uses. Mirror it. + +**`Claim.use` has three valid FHIR values and a teaching deck names none of them.** The deck offers `claim | pre-auth | pre-det`. The real R4 codes are `claim`, `preauthorization` and `predetermination`, and the samples use `preauthorization` and `claim`. `pre-auth` and `pre-det` are not codes at all. Anyone treating the slide as normative emits payloads the gateway rejects. + +**`Claim.type` binds to a ValueSet URL.** The system is `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-claim-type`, not a `CodeSystem` URL. A strict validator objects. Every sample does it, so send it. + +**A supporting-info `valueReference` points at a `Composition`, not a `DocumentReference`.** Chapter 01's seventh rule says documents are `DocumentReference`s. Here entries 3 and 4 reference the `Composition` at the head of an embedded ABDM record, and the `DocumentReference` inside that record is reached only through the `Composition`. Follow the reference, then walk the document. + +**The document titles do not match the codes they are filed under.** Code `MAND0409`, "any investigations done", references a Lipid Profile. Code `MAND0570`, "Planned line of management", references a Haemoglobin Estimation. This is sandbox test data, not a rule. Do not copy the mismatch. + +**Inline attachments are base64-encoded twice.** Both `valueAttachment.data` values in this bundle decode to another base64 string, which then decodes to the real JPEG and the real PDF. The `DocumentReference` attachments inside the two embedded documents, in the same bundle, are encoded once and decode straight to `%PDF-1.4`. So one bundle carries two encodings of the same kind of payload. A payer that decodes once renders a blank document. Encode once, and when you receive an attachment, sniff the decoded bytes for a file signature before trusting it. + +**`Bundle.meta.lastUpdated` is frozen** at `2025-11-11T15:09:41.516+05:30` on this and every other provider request bundle, while `Bundle.timestamp` holds the real submission time. Read `timestamp`. diff --git a/site/docs/nhcx/v1/fhir-reference/preauthorisation-response.md b/site/docs/nhcx/v1/fhir-reference/preauthorisation-response.md new file mode 100644 index 000000000..f86458cbf --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/preauthorisation-response.md @@ -0,0 +1,126 @@ +--- +title: Preauthorisation response +sidebar_label: Preauthorisation response +description: The payer's decision as a ClaimResponse, the three elements every sample is missing, and why the beneficiary comes back changed. +verification: unverified +source: "Sample FHIR bundles, `preauth/Query/preauth_response_queryUpdate_App.txt`, `preauth/preauth_request.txt`; NHCX PMJAY Integration Handbook §8.5.1 to §8.5.4, Appendix C.1, Appendix D; NHCX-PMJAY-HMIS Integration Guide §8.4; NHCX Requests and Responses, value sets" +sidebar_position: 9 +--- + +# Preauthorisation response + +The payer answers a preauthorisation asynchronously on the provider's `/v1/preauth/on_submit` callback. The payload is a collection bundle whose spine is a `ClaimResponse` carrying the same case number as the request. There are four possible answers: approved, partially approved, queried and rejected. Only the approved and the queried forms have real samples; the queried one is chapter 09. This chapter covers the approval, and documents the other two from specification. + +## In short + +- The payer's decision as a `ClaimResponse` carrying the same case number as the request. +- Three elements the handbook documents are absent from every sample, including `preAuthRef`. +- The case number in `identifier[0].value` is what actually travels forward to the claim. +- The beneficiary comes back as a different person. Do not overwrite your patient record from a response. + +## The bundle + +Five entries, in this order, and the response bundle is small because the payer echoes nothing clinical back. + +| Entry | Resource | What it is for | +| :---- | :---- | :---- | +| 0 | `ClaimResponse` | The decision | +| 1 | `Patient` | Beneficiary, PMJAY ID only | +| 2 | `Organization` | Payer, `NIIP` `1518`, "SHA HP" | +| 3 | `Organization` | Provider, `NPI` `1652`, "CITY SUPERSPECIALITY HOSPITAL" | +| 4 | `Coverage` | The policy, with the renewal code in `class` | + +`Bundle.id` is `PreauthorizationResponseDocument-VB26AA2600001`. The bundle and every resource in it carry `meta.tag` `SUBSETTED`, "Resource encoded in summary mode", from `http://terminology.hl7.org/CodeSystem/v3-ObservationValue`. That tag is on every payer-generated bundle in the corpus. Do not read it as an error; it is how the payer marks a projection of its own record. + +## The fields that matter + +| Path | Value in the approval sample | +| :---- | :---- | +| `ClaimResponse.identifier[0]` | type `CLN`, system `https://hcx.pmjay.gov.in/v1/preauthorization`, value `VB26AA2600001` | +| `ClaimResponse.status` | `active` | +| `ClaimResponse.use` | `preauthorization`, mirroring the request | +| `ClaimResponse.created` | `2026-02-26T21:39:04+05:30` | +| `ClaimResponse.insurer` | reference to the payer `Organization` | +| `ClaimResponse.requestor` | reference to the provider `Organization` | +| `ClaimResponse.outcome` | `complete` | +| `ClaimResponse.disposition` | `approved by Sayantan` | +| `ClaimResponse.payeeType.coding` | system `http://terminology.hl7.org/CodeSystem/payeetype`, code `provider` | + +Three elements the handbook documents are absent from every sample response. There is no `ClaimResponse.request` pointing back at the `Claim`. There is no `ClaimResponse.type`. Most consequentially, **there is no `preAuthRef`**. The flow chapter says `preAuthRef` is the reference to quote on the later claim. No PMJAY response carries one. The case number in `identifier[0].value` is what actually travels forward, and it is the same value in the request, the response, the enhancement and the claim. + +`disposition` is a free-text sentence with an operator's first name in it. It is an audit note, not a status. Never parse it. + +## Adjudication + +Adjudication appears at two levels and you need both. + +At claim level, `ClaimResponse.adjudication[0]` has `category.coding.code` `status` and `reason.coding.code` `approved`. Neither coding carries a `system`. This is the field that tells approved from queried from cancelled. + +At item level, `ClaimResponse.item[0]` has `itemSequence` 1, matching `Claim.item[0].sequence`, and five adjudication entries. Every one of them binds its category to `https://hl7.org/fhir/R4/valueset-adjudication.html`, an HTML documentation page used as a code system URL. + +| Category code | Element used | Value | +| :---- | :---- | :---- | +| `eligible` | `amount.value` | `2700.0` | +| `reason` | `reason.coding.display` | `other d` | +| `eligpercent` | `value` | `100` | +| `eligquant` | `value` | `1` | +| `status` | `reason.coding.code` | `Approved` | + +Note the case. The claim-level reason code is lower case `approved`; the item-level status code is capitalised `Approved`. Compare case-insensitively. + +The `id` on the item is `Item/Item/1`, a doubled prefix. It is cosmetic, but it will surprise anyone keying on it. + +## Totals + +`ClaimResponse.total` is an array of two, and the two entries are distinguished by an `id`, not by their category system. + +| `total[].id` | Category code | Amount | +| :---- | :---- | :---- | +| `total` | `benefit` | `2700.0` | +| `PMJAY-T` | `eligible` | `2700.0` | + +The `benefit` entry carries the adjudication ValueSet URL as its system. The `PMJAY-T` entry carries no system at all. Neither carries a `currency`. + +On a first approval the two agree, so nothing forces you to notice the difference. They stop agreeing on an enhancement, where `benefit` becomes the increment and `PMJAY-T eligible` stays cumulative. Chapter 08 works that through. Key your reconciliation on `total[].id`, not on the category code, and decide now which basis your ledger uses, because no source states a rule. + +## Reading the answer + +`outcome` alone is ambiguous. `complete` means the payer finished processing, which covers both approval and rejection. Read `outcome` together with `adjudication[0].reason.coding.code`. + +| `outcome` | Claim-level reason | Meaning | Workflow | +| :---- | :---- | :---- | :---- | +| `complete` | `approved` | Approved in full | 21 | +| `partial` | `approved` | Approved at a reduced amount, reason in `processNote` | 21 | +| `partial` | `queried` | The payer wants more; the case stays open | 24 | +| `complete` | `cancelled` | Rejected | 23 | + +The handbook contradicts itself here. Section 8.5.4 and its accompanying note say a rejection is `outcome = complete` with adjudication reason `cancelled`. Appendix C.1 instead maps `outcome = error` to the internal status REJECTED. The narrative form is the one the note argues for explicitly, and the one the workflow sheet supports. Treat `complete` plus `cancelled` as the rejection, and `error` as a gateway or validation failure rather than an adjudication result. Handle both defensively. + +## What the samples show + +`preauth/Query/preauth_response_queryUpdate_App.txt`, 6,846 bytes, 5 entries. The approval. `outcome` `complete`, claim-level reason `approved`, `total[benefit]` 2700.0, item `eligpercent` 100 and `eligquant` 1. The requested amount was 3,300, so the payer approved 2,700 without marking the response `partial` and without a `processNote` explaining the reduction. Do not expect `partial` to be set whenever a number is cut. + +`preauth/enhancement/enhancement_resp.txt` is the other approval, covered in chapter 08. `preauth/preauthresponse_with_query.txt` is the query, covered in chapter 09. + +**There is no rejected preauthorisation sample, and no partially approved one.** The handbook specifies both field by field. A partial approval adds `copay` and `benefit` adjudications, a `noteNumber` and a `processNote` with the reduction explained, plus a `preAuthRef` for the reduced amount. A rejection sets `outcome` `complete`, claim-level reason `cancelled`, and a human-readable `disposition`. Neither has been observed in a payload. Build to the specification, log what actually arrives, and be ready for the shapes to differ. + +## Answer early, decide later + +A payer that stays silent until a person decides loses the conversation. NHCX +redelivers a submission it has had no response to, then drops it and retires +the correlation id; the verdict is refused with `NHCX-1010`, *no data with +given correlation id for call back request*. Both live payers answer twice on +one correlation: a `ClaimResponse` with `outcome: queued` and a disposition +saying the request is with an adjudicator, and then the decision. A provider +system must therefore treat a queued answer as an acknowledgement, not as the +one answer it will accept. + +## Traps + +**Provider identity is not consistent across one transaction.** The request names the provider `Organization` with `NPI` `IN1910000151` and the name "Usha Kiron". Both preauthorisation responses for that same case use a bare numeric `NPI` `1652` and the name "CITY SUPERSPECIALITY HOSPITAL". The claim and payment bundles for the case use `IN1910000151` with the second name. So three combinations of identifier and name for one hospital in one case. Match a response to a request on the case number in `identifier[0].value`, never on the provider identifier or the organisation name. + +**The `Coverage` identifier system changes direction.** The request puts the policy `PMJAY/HP/S/G` under `https://payer.nha.gov.in`; the response puts it under `https://payer.pmjay.gov.in`. The response also adds `Coverage.class` with the renewal code `PMJAY/HP/S/2024/R2` typed `XV`, which the request never sends. + +**The beneficiary comes back as a different person.** The request describes a male born 2004-09-18 with one name. The response describes the same PMJAY ID `MD5SLS4X5` with a different name, `gender` `other`, and birth date 2002-01-01. Chapter 03 works through the full three-way divergence. Do not overwrite your patient record from a response. + +**The adjudication category system is a web page.** `https://hl7.org/fhir/R4/valueset-adjudication.html` is documentation, and it is a ValueSet page used where a CodeSystem URL belongs. The correct system is `http://terminology.hl7.org/CodeSystem/adjudication`. Match on the code and ignore the system. diff --git a/site/docs/nhcx/v1/fhir-reference/predetermination-status-and-search.md b/site/docs/nhcx/v1/fhir-reference/predetermination-status-and-search.md new file mode 100644 index 000000000..cb955b6d2 --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/predetermination-status-and-search.md @@ -0,0 +1,81 @@ +--- +title: Predetermination, status and search +sidebar_label: Predetermination, status and search +description: Three exchanges defined by the specification and never observed, documented as far as the specification goes and no further. +verification: unverified +source: NHCX Technical Specifications, API structure table; Implementation Guide for Adoption of FHIR in ABDM and NHCX, use case rows 5 and 6; NHCX Requests and Responses for UseCases, Value sets, Search and Status sheets; Standards for NHCX, page 38; NHCX Usecases; Domain Specifications, e-objects; AWS Sandbox NHCX Use Case Postman Collection +sidebar_position: 18 +--- + +# Predetermination, status and search + +Three exchanges are defined by the specification and have never been observed. There is no sample bundle for any of them. The sandbox Postman collection lists all six of their endpoints. But the eight sandbox entries covering predetermination, communication, status and search all carry the same recycled placeholder ciphertext, so decrypting one tells you nothing about the domain payload inside. This chapter documents what the specification says and stops there. + +## In short + +- Three exchanges defined by the specification and never observed in a payload. +- The sandbox entries for all of them carry the same recycled placeholder ciphertext. +- Predetermination reuses `Claim` and `ClaimResponse`; only `Claim.use` changes. +- The teaching deck's enumeration of `Claim.use` is wrong, and its values are rejected. + +## Predetermination + +Predetermination asks the payer what it would pay for a proposed treatment, without committing the provider to deliver it and without reserving a benefit. It sits earlier than preauthorisation in the same lifecycle. + +| Endpoint | Direction | Bundle | +| :---- | :---- | :---- | +| `POST /v1/predetermination/submit` | Provider to gateway to payer | `ClaimBundle` | +| `POST /v1/predetermination/on_submit` | Payer to gateway to provider | `ClaimResponseBundle` | + +The bundles are the ones chapters 10 and 11 describe. Predetermination reuses `Claim` and `ClaimResponse` exactly as preauthorisation and claim do. Only `Claim.use` changes, which is the eleventh rule in chapter 01 applied to a third value. + +| `Claim.use` | Exchange | +| :---- | :---- | +| `predetermination` | Predetermination | +| `preauthorization` | Preauthorisation, in every sample | +| `claim` | Claim, in every sample | + +**The teaching deck's enumeration is wrong.** The Standards for NHCX deck shows `"use" : "claim | pre-auth | pre-det"`. Neither `pre-auth` nor `pre-det` is a valid FHIR R4 code. The real value set is `claim`, `preauthorization`, `predetermination`, and the samples confirm the first two. Anyone who treats the slide as normative emits payloads the payer rejects. Send `predetermination`. + +The Domain Specifications page adds that `Claim` and `ClaimResponse` serve predetermination "in future", and the NHCX use case list says only that a payer application will store the request and respond. No payer in the mirror is recorded as having implemented it. Confirm support with the payer before building it, and expect the preauthorisation path to be the one that actually runs. + +## Status + +Status is a protocol operation, not a FHIR one. A sender asks the gateway what became of a message it already sent. + +| Endpoint | Direction | Payload | +| :---- | :---- | :---- | +| `POST /v1/status` | Any participant to gateway | Empty string | +| `POST /v1/on_status` | Gateway to the asking participant | Status reported in the protected header | + +The specification is explicit that the payload must be an empty string. There is no bundle, no `Task`, no resource of any kind. Everything travels in the JWE protected header. `x-hcx-correlation_id` must be the `x-hcx-api_call_id` of the message whose status you are checking, which is the only field that links the two. The callback returns `x-hcx-status` `request.dispatched`, and `x-hcx-error_details` where the original message failed. + +Two naming conventions appear. The technical specifications table lists the pair as `/hcx/status` and `/NHCX/on_status`. The sandbox Postman collection uses `https://apisbx.abdm.gov.in/hcx/v1/status` and `/hcx/v1/on_status`. Build against the Postman form, which is the one the sandbox actually serves, and keep the path configurable. + +Because status carries no FHIR, there is nothing in this chapter for a bundle builder. It belongs in the reference only so that no one goes looking for a `Task` shape that does not exist. + +## Search + +Search is not a provider exchange. It lets an authorised entity, named in the specification as NHA or IRDAI, ask a payer for the claim documents behind a case number. The flow is NHA to gateway to payer, and back. + +| Endpoint | Direction | Bundle | +| :---- | :---- | :---- | +| `POST /v1/search/submit` | Authorised entity to gateway to payer | `Task` bundle | +| `POST /v1/search/on_submit` | Payer to gateway to entity | `Task` bundle with `ClaimResponse`s | + +The request is a `Task` with `status` `requested`, `basedOn` carrying the request reference, and one or more inputs from the standard input-type value set. The response is a `Task` whose `output` references the matching `ClaimResponse` resources in the same bundle, resolved the same way as a reprocess or cancel answer. + +| Input type | Meaning | +| :---- | :---- | +| `ClaimNumber` | The case number | +| `InitimationNumber` | The preauthorisation or claim intimation number, spelled as shown | +| `PolicyNumber` | The member's policy | +| `ProductNumber` | The benefit product | +| `PayerId`, `ProviderId` | The two participants | +| `FromDate`, `ToDate` | The search window | +| `FinanceYear` | Policy or financial year | +| `ServiceCode` | A benefit or service code | + +**The task code for search is given three ways.** The NHCX value set defines `search` as the code used to search claim responses for given inputs. The Search sheet in the same document says the request carries `code` `status` and the callback carries `code` `poll`. An earlier draft of this reference said `search` on the request and `poll` on the answer. Nothing has been observed, so none of the three can be confirmed. If you implement search, agree the code with the payer in writing first. + +`response.partial` is a valid status on `/v1/search/on_submit`, so a search may be answered across several callbacks against one correlation ID. diff --git a/site/docs/nhcx/v1/fhir-reference/sample-bundles.md b/site/docs/nhcx/v1/fhir-reference/sample-bundles.md new file mode 100644 index 000000000..6dacab9b7 --- /dev/null +++ b/site/docs/nhcx/v1/fhir-reference/sample-bundles.md @@ -0,0 +1,157 @@ +--- +title: Sample bundles +sidebar_label: Sample bundles +description: "The twenty-two real payloads every chapter here is built on: where they are, what each is, and the eight gaps they leave." +verification: unverified +source: Sample FHIR bundles, PMJAY extract, 22 files; AWS Sandbox NHCX use case Postman collection; NHCX PMJAY Integration Handbook; NHCX FAQs; NHCX portal mirror fetched 1 September 2026 +sidebar_position: 20 +--- + +# Sample bundles + +Twenty-two complete FHIR bundles exist. They are the only real payloads in the published material, and every chapter in this section is built on them. This chapter says where they are, what each one is, and what they do not cover. + +## In short + +- Twenty-two complete FHIR bundles are the only real payloads in the published material. +- Use the extracted files: nineteen of the markdown copies are truncated mid-token at four thousand characters. +- Eight exchange directions have no sample at all, concentrated in what an integrator reaches last. +- A second reference set in this repository is written to be sent rather than read, and all of it validates. + +## Where they are + +``` +NHCX-site/doc/hmisdocuments/ + Sample FHIR bundles_extracted/FHIR_bundles_PMJAY_ext/ +``` + +Use those extracted files. A second copy exists in the same folder, as a markdown document with the bundles in fenced blocks. Nineteen of the twenty-two are truncated there at exactly four thousand characters, stopping mid-token so they will not parse. The only reliable thing in that copy is a machine-generated inventory of entries per file. + +## One transaction, end to end + +All twenty-two come from a single sandbox run, which is what makes them useful. They are not twenty-two unrelated examples but one patient's journey, so the identifiers thread through the whole set and you can watch a number appear in a preauthorisation and come back in a payment. + +| | | +| :---- | :---- | +| Patient | PMJAY ID `MD5SLS4X5` | +| Payer | SHA HP, registry ID `1518` | +| Policy | `PMJAY/HP/S/G` | +| Preauthorisation number | `VB26AA2600001` | +| Claim number | `EO26AA2700001` | +| Dates | 26 February to 3 March 2026 | + +Every bundle is `type: collection` and parses cleanly. Free-text values in the payer's own fields, such as a disposition reading `approved by Sayantan`, confirm these are hand-run transactions captured as they happened rather than curated specification examples. + +## The twenty-two + +Sizes matter here. Six of these files are enormous, almost entirely because of base64 attachments and embedded clinical documents, and a naive read of one will fill your terminal or your context. + +### Coverage eligibility + +| File | Size | What it is | +| :---- | :---- | :---- | +| `coverageeligibility/coveragerequest_validation.txt` | 7 KB | Request, purpose `validation` | +| `coverageeligibility/coveragerequest_benefits.txt` | 7 KB | Request, purpose `benefits` | +| `coverageeligibility/coveragerequest_auth-requirement.txt` | 7 KB | Request, purpose `auth-requirements` | +| `coverageeligibility/coverageresponse_validation.txt` | 16 KB | Response, in force, with money | +| `coverageeligibility/coverageresponse_benefits.txt` | 16 KB | Response, package excluded | +| `coverageeligibility/coverageresponse_auth-requirement.txt` | 16 KB | Response, identical item to the one above | + +The three requests differ only in the purpose and the timestamp. Two of the three responses are not actually differentiated: their response items are the same. + +### Insurance plan + +| File | Size | What it is | +| :---- | :---- | :---- | +| `insuranceplan/insuranceplan_request.txt` | 1 KB | A single Task | +| `insuranceplan/insuranceplan_response.txt` | 21 MB | One plan, one organisation, 2,215 questionnaires | + +The response is the largest artefact in the set by three orders of magnitude. Extract the first entry and one or two questionnaires; do not open it whole. + +### Preauthorisation + +| File | Size | What it is | +| :---- | :---- | :---- | +| `preauth/preauth_request.txt` | 375 KB | The request, 31 entries | +| `preauth/preauthresponse_with_query.txt` | 7 KB | The payer's query | +| `preauth/Query/preauth_queryUpdate_req.txt` | 233 KB | The provider's answer, 96 entries | +| `preauth/Query/preauth_response_queryUpdate_App.txt` | 7 KB | Approval after the query | +| `preauth/enhancement/enhancement_req.txt` | 469 KB | Enhancement, 54 entries | +| `preauth/enhancement/enhancement_resp.txt` | 8 KB | Enhancement approved | +| `preauth/cancel/preauth_cancel_req.txt` | 3 KB | Cancellation request | +| `preauth/cancel/preauth_cancel_response.txt` | 7 KB | Cancellation response | + +The query answer at 96 entries is the richest bundle in the set and the best single illustration of how much clinical evidence a real submission carries. + +### Claim + +| File | Size | What it is | +| :---- | :---- | :---- | +| `claim/claim_Request.txt` | 386 KB | The claim, 44 entries | +| `claim/claimresponse_withQuery.txt` | 7 KB | The payer's query | +| `claim/claim_queryUpdate_req.txt` | 376 KB | The provider's answer | +| `claim/claim_queryUpdate_response.txt` | 7 KB | Final adjudication with a deduction | + +### Payment + +| File | Size | What it is | +| :---- | :---- | :---- | +| `paymentNotice/payment_notice.txt` | 5 KB | Notice with the transaction reference | +| `paymentNotice/paymentNotice_ack.txt` | 3 KB | The provider's acknowledgement | + +The payment reconciles exactly against the claim response, and that arithmetic is worth checking by hand once: the adjudicated amount equals the net paid plus the tax deducted. + +## The reference set + +Beside NHA's twenty-two there is a second set, written to be sent rather than read. Fourteen bundles under `apps/reference/provider` in this repository, one per exchange the provider side sends. Each carries a `bundle.log` from the HL7 validator against the NRCeS package, ndhm.in 6.5.0, and all pass. + +``` +apps/reference/provider/ + coverage/{discovery,validation,benefits,authrequirements}/bundle.json + insurance/bundle.json + preauth/{request,enhancement,queryupdate,cancel}/bundle.json + claim/{request,queryupdate,release,reprocess}/bundle.json + payment/notice-ack/bundle.json +``` + +They differ from NHA's samples on purpose. Every entry hangs off `https://nhcx.abdm.gov.in//`, and there are no embedded clinical documents. Identifiers are the canonical NRCeS and HL7 systems, and the same Patient, Organization, Coverage and Practitioner shapes recur in every bundle. Since 6 September 2026 the Claim bundles carry the element ids and the `HPIN` identifier the SHA HP sandbox demands. Three applications in this repository, the provider, nanoemr and the IRDAI payer, are held to these files byte for byte by their test suites. A change to a reference file is a change to what every one of them sends. Coverage, plan and preauthorisation have been run against the live sandbox; the claim, task and payment bundles have passed the validator only. + +## What has no sample + +Eight exchange directions have nothing behind them, and the gaps are not random: they are concentrated in exactly the exchanges an integrator reaches last. + +| Exchange | Status | +| :---- | :---- | +| Predetermination, both directions | No sample. The only bundle shape that mentions it leaves the claim use as an unfilled placeholder | +| Communication, both directions | No sample, though the PMJAY handbook specifies both field by field | +| Task, reprocess | No sample, and the archive carries an empty `reprocess` folder where one was scoped | +| Task, shortfall | No sample. The word appears once in the entire published material | +| Task, status and search | No sample | + +There is a common cause. The sandbox request collection appears to carry payloads for predetermination, communication, status and search, but all eight of those entries share one identical block of ciphertext. It is filler. Nothing was ever captured for them. + +The chapters covering these exchanges are written from the specification and say so. + +## Also missing, inside exchanges that are covered + +Two decisions have no sample even though their exchange does. There is no rejected preauthorisation and no rejected claim anywhere in the set, although the handbook documents rejected and partially approved responses in detail. Every response sample shows an approval. Anyone building the failure path is building it from prose. + +## Two patterns that survive only as fragments + +Cyclic treatment and the newborn case appear nowhere in the twenty-two. Both exist only as broken JSON inside a frequently-asked-questions document, with unbalanced braces, a missing quotation mark, a masked identifier and code comments inside the JSON. They are reconstructed in the Claim Request chapter and labelled as reconstructions. Do not copy them from the source. + +## How to read one + +Never print one of the large files. Load it and look at the shape first. + +```python +import json +b = json.load(open("preauth/preauth_request.txt")) +print(b["type"], len(b["entry"])) +for e in b["entry"]: + print(e["resource"]["resourceType"]) +``` + +Then take the resource you care about. The bulk in every large file is base64 sitting in attachments, so a bundle stripped of `attachment.data` is usually a few kilobytes and is far easier to read. + +Diff two samples of the same exchange rather than reading either in isolation. The difference between the preauthorisation request and the enhancement request is a second item, and reading them side by side makes that obvious in a way that reading one of them does not. diff --git a/site/docs/nhcx/v1/getting-started/_category_.json b/site/docs/nhcx/v1/getting-started/_category_.json index fd94d1fcf..9e328a22a 100644 --- a/site/docs/nhcx/v1/getting-started/_category_.json +++ b/site/docs/nhcx/v1/getting-started/_category_.json @@ -1,4 +1,5 @@ { - "label": "Getting started", - "position": 2 + "label": "Get started", + "position": 2, + "collapsed": false } diff --git a/site/docs/nhcx/v1/getting-started/building-and-sending-a-jwe.md b/site/docs/nhcx/v1/getting-started/building-and-sending-a-jwe.md new file mode 100644 index 000000000..6453f2fef --- /dev/null +++ b/site/docs/nhcx/v1/getting-started/building-and-sending-a-jwe.md @@ -0,0 +1,145 @@ +--- +title: Building and sending a JWE +sidebar_label: Building and sending a JWE +description: Assembling the protected header, sealing a FHIR bundle for the recipient, and posting it to the exchange. +verification: unverified +source: Message Security and Integrity page; NHCX Code Snippets references for payload preparation; NHCX Integration Handbook §2; API Response Handling to avoid Failures; AWS Sandbox NHCX USECASE Postman collection +sidebar_position: 7 +--- + +# Building and sending a JWE + +A message on the exchange is a JSON Web Encryption token: a readable protected header and an encrypted body, serialised as five base64url parts joined by dots. The body is a FHIR bundle. This chapter builds one with an empty bundle, so that what you are testing is the envelope and the plumbing, not the FHIR. + +## In short + +- A message is a JWE: a readable protected header and an encrypted FHIR bundle, compact serialised. +- Use `RSA-OAEP-256` with `A256GCM`. One protocol page says `RSA-OAEP`, and the samples outnumber it. +- The three IDs are fresh UUIDs; only `correlation_id` is reused, on the answer. +- A `202` back means the envelope was valid and the message queued. It is not the decision. + +## The protected header + +Every field the exchange needs to route and log the message. All the `x-hcx-` names are fixed. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "1000004446@hcx", + "x-hcx-recipient_code": "1000003538@hcx", + "x-hcx-api_call_id": "a1b2c3d4-e5f6-4890-abcd-ef1234567890", + "x-hcx-request_id": "f0e1d2c3-b4a5-4978-8fed-cba987654321", + "x-hcx-correlation_id": "11223344-5566-4788-99aa-bbccddeeff00", + "x-hcx-workflow_id": "12", + "x-hcx-timestamp": "2026-09-04T11:46:34+05:30", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "91123456781234" +} +``` + +- `alg` and `enc` are the encryption. The protocol page says `RSA-OAEP`; the handbook, the code samples and every Postman body on the portal say `RSA-OAEP-256`. Use `-256`. +- The three IDs are fresh UUIDs. `api_call_id` is new per call, `request_id` per request, `correlation_id` per conversation and reused on the answer. +- `workflow_id` says which step this is. `12` is a new preauthorisation. +- `timestamp` is ISO 8601. Which zone is contested: the handbook says Indian time and that UTC will fail validation, the FAQ says UTC with a trailing `Z`. The sample bundles use `+05:30`. Confirm before building; it is a validated field. +- `status` is always `request.initiated` on something you initiate. +- `ben-abha-id` is the beneficiary's ABHA number without hyphens. + +## The smallest possible bundle + +```json +{ + "resourceType": "Bundle", + "id": "smoke-test-001", + "type": "collection", + "timestamp": "2026-09-04T11:46:34+05:30", + "entry": [] +} +``` + +This is a valid FHIR Bundle with nothing in it. The exchange will accept it, because it only reads the header. The dummy payer will reject it, because there is no Claim inside. That rejection is what the next chapter catches. + +## Sealing it + +The recipe, from the message-security page. Base64url the header, generate a random content key, and encrypt that key with the recipient's public key using RSA-OAEP. Generate an IV, encrypt the bundle with AES-256-GCM using the header as additional authenticated data, and join the five parts. A JOSE library does all of it. + +Python, with `jwcrypto` and `cryptography`: + +```python +import json, uuid +from datetime import datetime, timezone, timedelta +from cryptography import x509 +from cryptography.hazmat.primitives import serialization +from jwcrypto import jwk, jwe + +def public_key_from_pem(pem: bytes) -> jwk.JWK: + """Accepts an X.509 certificate or a bare SPKI public key.""" + try: + cert = x509.load_pem_x509_certificate(pem) + pem = cert.public_key().public_bytes( + serialization.Encoding.PEM, + serialization.PublicFormat.SubjectPublicKeyInfo) + except ValueError: + pass # already a bare public key + return jwk.JWK.from_pem(pem) + +def now_ist() -> str: + return datetime.now(timezone(timedelta(hours=5, minutes=30))).isoformat(timespec="seconds") + +def seal(bundle: dict, recipient_pem: bytes, sender: str, recipient: str, + workflow: str, correlation_id: str, abha: str) -> str: + header = { + "alg": "RSA-OAEP-256", "enc": "A256GCM", + "x-hcx-sender_code": sender, + "x-hcx-recipient_code": recipient, + "x-hcx-api_call_id": str(uuid.uuid4()), + "x-hcx-request_id": str(uuid.uuid4()), + "x-hcx-correlation_id": correlation_id, + "x-hcx-workflow_id": workflow, + "x-hcx-timestamp": now_ist(), + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": abha, + } + token = jwe.JWE(json.dumps(bundle).encode(), protected=json.dumps(header)) + token.add_recipient(public_key_from_pem(recipient_pem)) + return token.serialize(compact=True) +``` + +The result is one long string with four dots in it. That is the whole message. + +Java users can take the portal's `JWEPayloadUtil` sample as-is; it does the same thing with Nimbus, `JWEAlgorithm.RSA_OAEP_256` and `EncryptionMethod.A256GCM`, passing the `x-hcx-` fields as custom header parameters. + +## Sending it + +The request body is a JSON object with one field. + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/preauth/submit' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ "payload": "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIi...." }' +``` + +## What comes straight back + +`202 Accepted`. The receipt below is the shape the sources define for a *recipient* acknowledging a delivery, which is what your own callback must return in the next chapter. Treat it as the pattern rather than a guaranteed gateway body, and inspect a real response: + +```json +{ + "timestamp": "04/09/2026 11:46:35:120", + "api_call_id": "a1b2c3d4-e5f6-4890-abcd-ef1234567890", + "correlation_id": "11223344-5566-4788-99aa-bbccddeeff00", + "result": { + "sender_code": "1000004446@hcx", + "recipient_code": "1000003538@hcx", + "entity_type": "preauth", + "protocol_status": "request.queued" + }, + "error": { "code": "", "message": "" } +} +``` + +This is not the decision. It says the envelope was valid and the message has been queued for the recipient. The decision, or in this case the rejection, comes later, on your callback. + +If instead you get `400`, the envelope failed validation. If you get `401`, go back to the token chapter. Anything else about the bundle itself will not show up here at all; the exchange never opens it. diff --git a/site/docs/nhcx/v1/getting-started/finding-participants-and-policies.md b/site/docs/nhcx/v1/getting-started/finding-participants-and-policies.md new file mode 100644 index 000000000..b673aba0f --- /dev/null +++ b/site/docs/nhcx/v1/getting-started/finding-participants-and-policies.md @@ -0,0 +1,172 @@ +--- +title: Finding participants and policies +sidebar_label: Finding participants and policies +description: Listing payers by role, looking up a patient's policies, and reading the processor code every later message is addressed to. +verification: unverified +source: "AWS Sandbox Participant Service APIs Postman collection; Policy Linking and De-Linking Process (NHA); NHCX Integration Handbook §5.5 to §5.9; Common Mistakes while implementing through NHCX #7, #10; NHCX Provider and Payer Side Use Cases, Sandbox Exit Process" +sidebar_position: 5 +--- + +# Finding participants and policies + +Before a message can be sealed, two questions have to be answered: who is it going to, and which policy is it about. The participant service answers both. A provider asks them at every admission. A payer answers the second one in advance, by linking each policy to its holder when the policy is written. + +```mermaid +flowchart LR + classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 + classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 + classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 + A[List participants by role] --> B[Choose the insurer] + B --> C[Look up the patient's policies] + C --> D{processingid} + D --> E[Fetch that participant's certificate] + E --> F[Seal and send] + class A,B,C,E,F provider + class D other +``` + +## In short + +- Two lookups answer who a message goes to and which policy it is about. +- Identifiers are not equal: try ABHA number, then member ID, then mobile. +- Address the envelope to `processingid`, not `payerid`. That is the portal's seventh most common mistake. +- Linking is the payer's half, done when the policy is written, and it is why ABHA lookup works at all. + +## Listing participants + +The registry can be asked for everyone holding a role. This is how a hospital system builds its list of payers, and how a payer finds hospitals. + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/fetch/participants/list' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'X-CM-ID: sbx' \ + --data-raw '{ + "role": "PAYER", + "fromdate": "01/04/2021", + "todate": "31/03/2027", + "entitytype": "Gov" + }' +``` + +- `role` is `PAYER`, `PROVIDER` or `TPA`. +- `fromdate` and `todate` bound the registration date, in `dd/MM/yyyy` only. +- `entitytype` is optional. `Gov` narrows to government schemes; leave it out for everyone. + +The response is a list of participant records, each with the participant code, name, roles and entity type. The list is not searchable by name on the server side. Fetch it, filter by name in your own code when a user is looking for a specific insurer, and classify government against private from the entity type. Cache it for the day; it changes rarely. + +There is no separate call to fetch one participant's details by code. The list is the lookup. Fetching a participant's certificate, covered in the next chapter, is the one per-participant call. + +## Looking up a patient's policies + +Given something that identifies the patient, the registry returns every policy linked to them. + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/get/policies' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ + "identifiertype": "AbhaNumber", + "identifiervalue": "91123456781234" + }' +``` + +`identifiertype` is one of three, and they are not equal. Try them in this order and stop at the first that returns a policy: + +1. `AbhaNumber`, the ABHA number without hyphens. The strongest identifier. +2. `MemberId`, the member or policy number captured at admission. +3. `MobileNo`, the patient's registered mobile. The weakest, since a number can be shared or stale. + +Each policy in the answer carries the fields that every later message depends on. The shape, not a verbatim sample: + +```json +{ + "policies": [ + { + "payerid": "1518@hcx", + "processingid": "1000000109@hcx", + "memberid": "MD5SLS4X5", + "productid": "PMJAY/HP/S/G", + "productname": "PMJAY Himachal Pradesh" + } + ] +} +``` + +| Field | What it is for | +| :---- | :---- | +| `payerid` | The insurer's participant code. Goes inside the bundle as the insurer. | +| `processingid` | Who processes claims for this policy. **This is the recipient on the envelope and the certificate to fetch.** | +| `memberid` | Identifies the beneficiary in eligibility and claim bundles. | +| `productid` | The product or plan code, used to fetch the insurance plan and coverage detail. | +| `productname` | Human-readable; some systems use it as the effective policy code when a formal number is missing. | + +**Send to the processor.** When an insurer handles its own claims, `payerid` and `processingid` are the same code. When a TPA processes for it, `processingid` is the TPA and every request goes there. Pointing at `payerid` is the portal's seventh most common mistake; the request goes nowhere useful. If no `processingid` comes back, stop; nothing can be addressed. + +Cache the result against the patient. Their policies do not change between one screen and the next, and re-fetching on every step is wasted traffic. Provide a way to force a refresh when something has genuinely changed. + +## Linking a policy to a beneficiary + +This is the payer's half, and it is why the lookup above works at all. When a policy is written, the insurer links it to the holder's ABHA number, mobile and member ID, and names who will process claims for it. + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/link/abha/policy' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ + "requestid": "e011c4a2-0f3a-4b7e-9c21-50d06af51555", + "abhanumber": "91123456781234", + "mobilenumber": "9876543210", + "memberid": "Cust00085", + "payerid": "1518@hcx", + "processingid": "1000000109@hcx", + "policies": [ + { "productid": "Prod01", "productname": "Active Assure" }, + { "productid": "Prod02", "productname": "Life Insurance Policy" } + ] + }' +``` + +- `requestid` is a fresh UUID. +- `payerid` is the insurer's own participant code. Every insurer has one, even when it works through a TPA. +- `processingid` is the TPA's participant code, or the insurer's own if it processes its own claims. +- `policies` lists each product the holder has, by product ID and name. + +Only the two participants named on the link, the `payerid` and the `processingid`, may change it later. The exchange takes the client ID from the caller's token and checks it against them. That also means the token used to link must come from the same credentials that created that participant; a mismatch is refused and has to be sorted out with NHA by email. + +## Removing a link + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/delink/abha/policy' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ + "requestid": "5f314cf3-8a1d-4e60-b7c9-585b5d7d0bc0", + "payerid": "1518@hcx", + "processingid": "1000000109@hcx", + "memberid": "Cust00085", + "policies": [ + { "productid": "Prod01", "productname": "Active Assure" } + ] + }' +``` + +Only products already on the link can be removed; naming one that is not there returns "There is no policies with requested details". + +The commonest reason to de-link is a change of TPA. There is no edit call: every affected policy is de-linked with the old `processingid` and linked again with the new one. Plan that as a batch job, not a manual task. + +## What a provider needs before sending anything + +From the two lookups above, four values, in this order: + +1. The insurer, chosen from the participant list. +2. The patient's policy with that insurer, from the policy lookup. +3. From it, the `processingid`, `memberid` and `productid`. +4. That participant's certificate, fetched in the next chapter against the `processingid`. + +Only then can a message be sealed and addressed. A patient can look correctly admitted as insured on screen while every NHCX call fails, because step 3 was never reached. diff --git a/site/docs/nhcx/v1/getting-started/glossary.mdx b/site/docs/nhcx/v1/getting-started/glossary.mdx index d88022316..bd041d342 100644 --- a/site/docs/nhcx/v1/getting-started/glossary.mdx +++ b/site/docs/nhcx/v1/getting-started/glossary.mdx @@ -1,7 +1,7 @@ --- title: Glossary sidebar_label: Glossary -description: The ABDM terms NHCX shares. No NHCX-specific vocabulary is documented here yet. +description: The ABDM terms NHCX shares. The gateway's own vocabulary has a glossary of its own in the reference section. verification: unverified source: NHA's milestone documents and the NHCX document index sidebar_position: 1 @@ -13,10 +13,10 @@ import Shared from '@site/docs/_glossary/_shared.mdx'; Every term the NHCX documentation links to. Each row keeps its own anchor. -NHCX's own vocabulary, the claim objects and the workflow status codes, is not -documented here: no NHCX endpoint has been read yet, so there is nothing to -define that would not be a guess. [The introduction](/docs/nhcx/v1) records -which documents hold it. +NHCX's own vocabulary, the claim objects, the participant identifiers, the +workflow status codes and the PMJAY scheme terms, has a glossary of its own: +[the NHCX glossary](/docs/nhcx/v1/getting-started/nhcx-glossary). The terms below are the +ones NHCX shares with the rest of ABDM. ## Across ABDM diff --git a/site/docs/nhcx/v1/getting-started/index.mdx b/site/docs/nhcx/v1/getting-started/index.mdx new file mode 100644 index 000000000..2637c8408 --- /dev/null +++ b/site/docs/nhcx/v1/getting-started/index.mdx @@ -0,0 +1,98 @@ +--- +title: The base framework every participant builds +sidebar_label: Get started +description: "The seven things every NHCX participant builds before any use case: token, keys, participant record, addressing, sealing, callbacks." +verification: unverified +source: NHCX FAQs v1.2, base URLs and header rules; NHCX Guide for Providers; Authenticating with NHCX; NHCX Dummy Payer Implementation; the sandbox Postman collections on the portal +sidebar_position: 1 +--- + +# The base framework every participant builds +Every participant on NHCX, whether it sends claims or answers them, needs the same seven things working before a single use case can be built. This section builds them in order, and ends with a live round trip: a message out to the sandbox, and the reply back on your own server. + +None of it is specific to a hospital or an insurer. A provider goes on from here to the B-series use cases; a payer to the C-series. The framework underneath is identical. + +## In short + +- Seven things have to work before any use case: token, key pair, participant record, addressing, certificate fetch, sealing, callback. +- None of it is specific to a hospital or an insurer. Providers and payers build the same framework. +- Every call to NHCX carries `bearer_auth`, not `Authorization`. +- The section ends with a live round trip against the sandbox dummy payer. + +## What you will have at the end + +1. A way to get and refresh an access token. +2. Your own encryption key and certificate. +3. A participant record on the sandbox with your certificate and callback address on it. +4. A way to find the participant a message goes to, and the policy it concerns. +5. A way to fetch any other participant's certificate. +6. Code that turns a FHIR bundle into a sealed message and sends it. +7. A callback endpoint that accepts a message, acknowledges it, opens it and reads it. + +Put together, that is the whole loop: + +```mermaid +sequenceDiagram + box rgb(220,239,227) You + participant Y as Your system + end + box rgb(227,240,240) ABDM and NHCX + participant G as ABDM gateway + participant P as Participant service + participant X as NHCX + end + box rgb(220,232,245) Payer side + participant D as Dummy payer + end + Y->>G: 1. client ID and secret + G-->>Y: access token + Note over Y: 2. make a key pair and certificate + Y->>P: 3. create participant, register certificate and callback URL + P-->>Y: participant code + Y->>P: 4. list payers, look up the policy + P-->>Y: processingid, memberid, productid + Y->>P: 5. fetch the dummy payer's certificate + P-->>Y: certificate + Note over Y: 6. seal a bundle as JWE + Y->>X: 7. POST payload + X-->>Y: 202 receipt + X->>D: forwards + D->>X: reply + X->>Y: 8. callback on your URL + Y-->>X: 202 receipt +``` + +## Before you start + +- **An identity in a registry.** A hospital needs its Health Facility Registry (HFR) ID. An insurer or TPA needs its IRDAI registry ID. +- **ABDM sandbox credentials.** A client ID and secret from the ABDM sandbox, with Milestone 1 completed. NHCX uses these same credentials; there is no separate login. +- **A public HTTPS server in India** with a domain name, for the callback. The exchange will not call an IP address or a port number. +- **openssl** on the machine that will hold the private key. +- **A JOSE library** in your language. The portal's own samples use Nimbus for Java. The examples here use `jwcrypto` and `cryptography` for Python, because they are short; any library that does RSA-OAEP-256 with A256GCM will do. + +## Addresses used in this section + +All sandbox. + +| What | Where | +| :---- | :---- | +| Session token | `https://dev.abdm.gov.in/api/hiecm/gateway/v3/sessions` | +| Participant service | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | +| Use-case calls | `https://apisbx.abdm.gov.in/hcx/v1` | +| Dummy payer | participant `1000003538@hcx` | + +Every call to the participant service and the use-case endpoints carries the same three headers: + +``` +Accept: application/json +Content-Type: application/json +bearer_auth: Bearer +``` + +Note the header name. It is `bearer_auth`, not `Authorization`, on NHCX's own endpoints. The biometric endpoints used later under PMJAY use `Authorization` instead. + +## The smoke test + +Chapters 07 and 08 send a bundle that is deliberately empty, `"entry": []`, addressed to the sandbox dummy payer, and then make that payer answer. + +The dummy payer does not decide on its own. After the submission is accepted, a second call tells it what to do: `POST https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer/process/request` with the correlation ID and an action of `Approve`, `Reject` or `Query`. That is what produces the callback. When a message you sent comes back to your own server and you can open it, both directions work, and everything after this section is about what goes inside the bundle. diff --git a/site/docs/nhcx/v1/getting-started/nhcx-adapter.md b/site/docs/nhcx/v1/getting-started/nhcx-adapter.md new file mode 100644 index 000000000..ac5bb345c --- /dev/null +++ b/site/docs/nhcx/v1/getting-started/nhcx-adapter.md @@ -0,0 +1,259 @@ +--- +title: NHCX adapter +sidebar_label: NHCX adapter +description: A binary that speaks the protocol for you, so your system exchanges plain FHIR over its own network. +verification: unverified +source: "nhcx-adapter repository, README and source under `internal/`, read at commit state of 4 September 2026; its own environment defaults for the sandbox and production addresses; NHCX Integration Handbook for the protocol behaviour it implements" +sidebar_position: 9 +--- + +# NHCX adapter + +Everything in the eight chapters before this one is work you do once and then maintain for ever: + +- Minting a token and refreshing it. +- Fetching the recipient's certificate and caching it. +- Filling in nine envelope headers correctly, and sealing the bundle. +- Hosting a dozen or more callback paths, and answering each one with a receipt in the right shape inside thirty seconds. +- Noticing when the same message arrives twice. + +The NHCX Adapter does all of it for you. It is a single binary that sits between your hospital or payer system and the exchange. Your system speaks plain JSON and plain FHIR to it over your own network; it speaks the protocol to NHCX. Nothing else about your system has to change. + +Read this chapter after the rest of Getting Started rather than instead of it. The adapter hides the protocol, it does not abolish it, and when something goes wrong the error you get back is a protocol error. + +## In short + +- One binary sits between your system and the exchange: you speak plain FHIR, it speaks the protocol. +- It does three jobs: send, deliver, and certificates. It does not queue, retry, or build bundles. +- `nhcx-adapter check` runs five checks, and the certificate check catches the commonest cause of unreadable messages. +- Bind it to loopback: the compatibility routes under `/internal/` have no authentication. +- It removes the protocol work, not the need to know what you are sending. + +## What it does + +Three jobs, and they map onto the three hard parts of the protocol. + +**Send.** You post a FHIR bundle and the recipient's code. It completes the envelope headers, fetches the recipient's certificate, encrypts, posts to NHCX, and hands you back the exchange's answer on the same call. + +**Deliver.** NHCX posts a sealed message to it. It decrypts with your private key, posts the plain bundle to a URL of yours, and only then answers NHCX with the receipt the protocol requires. + +**Certificates.** It fetches and caches the certificates of everyone you talk to, and can generate and register your own. + +```mermaid +flowchart LR + classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 + classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 + classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 + HMIS[Your system] -->|plain FHIR| A[Adapter] + A -->|sealed| X((NHCX)) + X -->|sealed| A + A -->|plain FHIR| HMIS + A -.->|certificates, token| R[Participant registry] + class HMIS provider + class A other + class X,R exchange +``` + +## What it does not do + +Worth knowing before you plan around it. + +- **It does not queue or retry.** Both directions are synchronous. If your callback is down, NHCX is told, and NHCX redelivers up to five times before dropping the correlation ID. The only retry inside the adapter is a single token refresh after a `401`. +- **It does not build or validate bundles.** It checks that what you sent is valid JSON and nothing more. Everything in the FHIR Reference section is still yours to get right. +- **It has no business logic.** No adjudication, no policy modelling, no screens for claims work. The participant and policy calls are passed straight through. +- **It does not verify who sent an inbound message** beyond the fact that it decrypts with your key. + +## Onboarding + +### Before you start + +You need what Milestone 1 gave you: a participant code such as `1000003463@hcx`, a client ID and a client secret. If you want to receive callbacks, you also need a public HTTPS address that reaches the machine you will run this on. + +### Build it + +```bash +make build # produces ./nhcx-adapter +make check # what the project's own CI runs: vet plus tests with the race detector +``` + +It is a Go program with no C dependencies, so the binary is self-contained. Released archives exist for Linux, macOS, Windows and FreeBSD if you would rather not build. + +### Make a key and a certificate + +```bash +./nhcx-adapter config init # writes config.json; refuses to overwrite one +./nhcx-adapter cert generate # after setting participantId in the config +``` + +This writes a 2048-bit RSA private key to `private_key.pem` with owner-only permissions and a self-signed certificate to `certificate.pem`. The certificate's common name is your participant code, which is why the code has to be in the config first. It refuses to overwrite an existing pair, so add `--force` when you mean to replace one, which renames the old files rather than deleting them. It dates the certificate five minutes in the past so a registry with a slightly different clock still accepts it. + +### Register the certificate and your address + +Register `certificate.pem` as the participant's encryption certificate, and your public address as its endpoint, exactly as described in Creating and Updating a Participant. The adapter can do both itself from its startup repair menu, but only if the client ID you are using is the one that created the participant record. If it is not, the registry answers that you are not authorised to modify the details, and the fix is out of band. + +Register the address with `/in` on the end, or the host root. The adapter answers its health check under both. + +### Fill in the configuration + +```bash +./nhcx-adapter config edit +``` + +An arrow-key form over the whole file. It edits the JSON document in place, so environment-variable references and file references survive editing, and it validates as you type, including checking that your key file exists and parses. Arrow keys move and cycle values, Enter edits, Backspace resets a field to its default, Ctrl+S saves. + +Two conveniences make it safe to keep the file in version control. A value written as `${NAME}` is read from the environment, and a missing variable is a startup error naming every one that is missing. A value written as `@filename` is read from that file, relative to the config. That works for the private key. Elsewhere the string is used exactly as written, so an `@` in the API key or the console password is part of the password. So the key is normally `"@private_key.pem"` and the secret is normally `"${NHCX_CLIENT_SECRET}"`. + +Unknown keys are rejected outright, so a typo in a field name stops the adapter rather than being silently ignored. + +### Check it + +```bash +./nhcx-adapter check +``` + +Five checks, in order, with a line each: + +1. **Session token.** Your credentials mint a token at the sessions endpoint. +2. **Participant record.** Your code exists in the registry, with the name and endpoint it holds. +3. **Encryption certificate.** The certificate the registry holds for you matches the private key in your config. This is the check that catches the single most common cause of the other side being unable to read anything you send. +4. **Local listener.** The adapter's own port accepts connections. +5. **Registered endpoint.** This one is worth understanding. It starts the listener, then calls your registered public address from the outside and asks it to sign a random number. Only this adapter, running with this configuration, can produce the right answer. So it distinguishes three different failures: nothing is forwarding to the adapter at all, something is forwarding to a different adapter, and the address answers but not with a success. + +Only the token failure is fatal. A certificate mismatch opens a menu offering to generate a new pair and upload it, upload the certificate for the key you already have, or continue anyway. An endpoint failure offers to register the address from your config, or one you type. + +`nhcx-adapter serve` runs the same checks and then listens, so in normal use you never run `check` separately. + +### Prove it works + +```bash +./nhcx-adapter token # a fresh session token +./nhcx-adapter cert 1000004805@hcx # someone else's certificate +./nhcx-adapter send --path v1/coverageeligibility/check \ + --recipient 1000004805@hcx --file bundle.json +``` + +The command line send and the server share one code path, so a send that works means the server will work. + +## The configuration file + +The fields you will actually set. Everything has a working default except the four marked required. + +| Field | Meaning | +| :---- | :---- | +| `env` | `sandbox` or `production`. Chooses the gateway, registry and sessions addresses, and flips several security defaults | +| `listen` | Address and port to listen on. Defaults to loopback only | +| `publicUrl` | How NHCX reaches you from outside. Offered to the registry as your endpoint | +| `apiKey` | The key your own system must present. Required in production; off by default in sandbox | +| `participant.participantId` | **Required.** Your participant code | +| `participant.clientId` | **Required.** From onboarding | +| `participant.clientSecret` | **Required.** From onboarding | +| `participant.privateKey` | **Required.** The key matching your registered certificate, normally `@private_key.pem` | +| `callback.url` | Where decrypted messages are posted in your system | +| `callback.appendPath` | Whether the NHCX path is added to that URL. On by default | +| `callback.timeoutSeconds` | How long one delivery may take. Twenty by default, against the protocol's thirty-second limit | +| `callback.routes` | Per-path overrides, used exactly as written | +| `callback.also` | Extra destinations that all receive the same message | +| `auth.mode` | `sessions` or `get-session`. See the warning below | +| `ledger.storeBodies` | Set false to record headers and outcomes but keep no patient data on disk | +| `panel.password` | Enables the browser console. At least eight characters | + +A second block, `participants`, holds additional identities on the same adapter, each with its own code, credentials, key and callback. Inbound, the recipient code on the envelope picks which one receives. Outbound, the sender code picks which one sends. It is edited by hand; the form preserves it but does not edit it. + +### Two settings to get right before production + +**`auth.mode`.** The two ways of getting a token, described in Session Token, are both implemented, and the project's own README says the NHA documents disagree about which applies. There is no autodetection. Confirm with your onboarding contact, because the wrong choice fails at the first call with a token error. + +**The production addresses.** The sandbox addresses are verified. The production ones follow the documented pattern of swapping the sandbox hostnames, and the code says as much in a comment. Check all four against your onboarding letter and override them in the config if they differ. + +## Sending + +One route, and the NHCX path is the exchange. + +```bash +curl -s http://127.0.0.1:8090/out/v1/preauth/submit \ + -H "Authorization: Bearer $NHCX_ADAPTER_API_KEY" \ + -H 'Content-Type: application/json' \ + -d '{"recipient": "1000004805@hcx", "fhir": { "resourceType": "Bundle", "...": "..." }}' +``` + +The answer carries the exchange's own status code, the headers that were built for you and the identifiers you will need later: + +```json +{ "ok": true, + "path": "v1/preauth/submit", + "headers": { "x-hcx-correlation_id": "...", "x-hcx-api_call_id": "..." }, + "gateway_status": 202, + "response": { "...": "the exchange's receipt" }, + "correlation_id": "...", + "ledger_id": "7UMV0007" } +``` + +Keep the correlation ID. It is how you will recognise the answer when it arrives. + +**Sending a response** rather than a request means posting to the matching `on_` path. The status word defaults correctly and the message type is set for you. The one thing the adapter cannot infer is which request you are answering, so a response should carry the original correlation ID. As a convenience, a response sent without one is threaded onto the most recent inbound request of the same kind from that participant, but do not rely on that when you can pass it. + +If a failure happens the answer says so plainly, with the exchange's own status and body underneath, and a code that tells you whether retrying is worthwhile. + +## Receiving + +NHCX posts to `/in/` plus the path, or to `/v1/` plus the path, so a registry entry pointing at your host root works. These routes are not protected by your API key, because NHCX is the caller. + +The adapter decrypts and posts this to your callback: + +```json +{ "meta": { "type": "in", "payloadType": "fhir", "path": "v1/preauth/on_submit", + "redelivery": false, "participant": "1000003463@hcx" }, + "jwe_headers": { "x-hcx-sender_code": "...", "x-hcx-correlation_id": "...", "x-hcx-status": "..." }, + "fhir": { "resourceType": "Bundle", "...": "..." } } +``` + +Useful facts about that delivery, all of which affect how you write the receiving end. + +- **Your answer is what NHCX is told.** The adapter waits for your 2xx and only then sends the receipt. A non-2xx from you becomes a failure to NHCX, which retries. +- **Your callback must be idempotent.** The retry means the same message can arrive several times. The call identifier stays the same across those attempts, and a repeat is flagged both in the body and in a header, so you can recognise one. +- **A protocol message arrives on the same routes** with no sealed payload, marked as a protocol message rather than a bundle. That is how a refusal or a delivery failure reaches you. +- **A message addressed to a code you do not hold is refused** with an error naming every code this adapter does hold, which is usually enough to spot the misconfiguration. + +A callback address is not optional: the adapter refuses to start without one. What the ledger gives you instead is a way to poll for what has already arrived, including the whole thread for one correlation ID. That is useful when your receiving end is down and you are catching up. + +## Watching what happens + +Every message in both directions is written to a file ledger, one file per message plus a daily index. No database. Identifiers sort chronologically as plain strings, so `7UMV0007` came before `7UMV0008`. + +```bash +nhcx-adapter ledger follow # live, one coloured line per message +nhcx-adapter ledger list --since 24h --entity preauth --status rejected +nhcx-adapter ledger show 7UMV0007 +nhcx-adapter ledger thread # the whole conversation +nhcx-adapter ledger stats +``` + +The live view reads the files directly, so it works from another terminal, another shell, or a machine with the directory mounted, and it needs nothing running locally. Each line carries the identifier, the direction, the path, the counterparty, the outcome, the other side's status code and how long it took. + +A thread view is the thing to reach for when a case has gone quiet. It states plainly whether you are waiting for them or they are waiting for you. + +Setting `ledger.retentionDays` prunes old days hourly. Note that the field defaults to keeping everything if you leave it out of a hand-written config, which is not what the sample file implies. + +There is also a browser console, off unless you set a password, with a live view, the ledger, a send form and a participant lookup. + +## Running it + +One port carries everything. Timeouts are set conservatively: thirty seconds on requests, twenty on a callback delivery against the protocol's thirty-second budget, thirty on calls out to the exchange. + +Put it behind a reverse proxy for TLS, forwarding your public path to the adapter's port, and set `publicUrl` to match. If you expose the console, proxy it on the same path, because its session cookie is scoped to that path, and turn response buffering off so the live view streams. + +It refreshes every session token a minute before expiry in the background, prunes the ledger hourly, and drains for thirty seconds on shutdown. Bodies and tokens are never written to the log. + +## Before you expose it + +Three things to settle, because the defaults are tuned for a sandbox on a laptop. + +**The compatibility routes under `/internal/` have no authentication at all.** Among them are routes that list recent traffic and return a full decrypted bundle for any record. Others proxy to the participant service using your session token. On an adapter bound only to loopback this does not matter. On one bound to all interfaces it is patient data and a credentialed proxy, readable by anyone who can reach the port. Bind to loopback, or keep the port off any network you do not control. + +**In sandbox the API key is not demanded by default.** Anything that can reach the port can send messages as you. Setting `requireApiKey` to true turns the check on regardless of environment, and production turns it on anyway. + +**Readiness reflects the first identity only.** If you host several participants, a broken credential on a second one still reports ready. + +## What this chapter does not replace + +The adapter removes the protocol work. It does not remove the need to understand what you are sending. Which bundle, which workflow code, which supporting information, which status word, and what the payer's answer means are all still yours, and they are the subject of the rest of this documentation. diff --git a/site/docs/nhcx/v1/getting-started/nhcx-glossary.md b/site/docs/nhcx/v1/getting-started/nhcx-glossary.md new file mode 100644 index 000000000..e9bbb159c --- /dev/null +++ b/site/docs/nhcx/v1/getting-started/nhcx-glossary.md @@ -0,0 +1,102 @@ +--- +title: Glossary +sidebar_label: NHCX glossary +description: The NHCX and PMJAY terms this documentation uses, in the sense it uses them, with NHA's sense where it differs. +verification: unverified +source: the documents cited across this documentation; NHCX-PMJAY-HMIS Integration Guide §9, Glossary +sidebar_position: 10 +--- + +# Glossary + +The terms this documentation uses, in the sense it uses them. Where NHA's documents use a term differently from ordinary English, the NHA sense is given. + +## In short + +- The terms this documentation uses, in the sense it uses them. +- Where NHA's documents use a term differently from ordinary English, the NHA sense is given. +- Grouped by organisations, participants, the protocol, the claim, and the PMJAY scheme. + +## Organisations and programmes + +- **ABDM.** Ayushman Bharat Digital Mission. The national digital health programme under which NHCX is built. +- **SNOMED CT, ICD, LOINC.** The clinical, diagnosis and laboratory terminologies FHIR bundles carry, alongside the NRCeS value sets for claim-specific codes. +- **NHA.** National Health Authority. Publishes the NHCX specifications, runs the exchange, and administers PMJAY. +- **NRCeS.** National Resource Centre for EHR Standards, at C-DAC Pune. Publishes the FHIR profiles and value sets NHCX bundles must follow. +- **IRDAI.** Insurance Regulatory and Development Authority of India. Consulted on the specifications; the registry insurers and TPAs are identified by. +- **PMJAY.** Pradhan Mantri Jan Arogya Yojana, the Ayushman Bharat health assurance scheme. On NHCX it is a payer with scheme-specific rules. +- **SHA.** State Health Agency. Administers PMJAY in a state; under the trust model, the payer for that state. +- **TPA.** Third-party administrator. Processes claims on an insurer's behalf; on the network it behaves as a payer and is the processor for the policies it handles. +- **ISNP.** Insurance self-network platform; an insurance marketplace, a participant role with aggregated or consented data access. +- **BSP, EUA.** Beneficiary service provider, end-user application. A patient's personal health record app registered as a participant to receive notifications. + +## PMJAY systems and roles + +- **TMS.** Transaction Management System. NHA's provider and payer applications for PMJAY claims; the system an HMIS integration replaces on the provider side. +- **BIS.** Beneficiary Identification System. PMJAY's beneficiary register. +- **HEM.** Hospital Empanelment Module. PMJAY's hospital register; the HEM ID is mapped to the NHCX participant ID at go-live. +- **PPD.** Preauthorisation Processing Doctor. The payer-side role that adjudicates preauthorisations. +- **CPD.** Claim Processing Doctor. The payer-side role that adjudicates claims. +- **CRC.** Claim Review Committee. Decides appeals; its decision is final. +- **HBP.** Health Benefit Package. PMJAY's package master, from which a hospital's insurance plan is drawn. +- **STG.** Standard Treatment Guideline. A clinical protocol attached to a package, delivered as a questionnaire the provider must answer. + +## Identity and registration + +- **ABHA.** Ayushman Bharat Health Account. The beneficiary's health ID; sent without hyphens. +- **HFR.** Health Facility Registry. A hospital's registry; its HFR ID is the hospital's registry ID on the exchange. +- **NIN, ROHINI.** Other registries a participant may be identified by. +- **Registry ID.** A participant's identity in the registry it belongs to: HFR ID for a hospital, IRDAI ID for an insurer or TPA, client ID for an app. +- **Participant ID, participant code.** A participant's address on the exchange, in the form `1518@hcx`. The part after the `@` names the exchange instance. +- **Client ID and secret.** The ABDM credentials used to obtain an access token; the same ones issued for Milestone 1. +- **Milestone 1, M1.** The ABDM integration level, ABHA creation and verification, that must be complete before NHCX. +- **Bridge URL, endpoint URL.** The base address of a participant's callback server, registered on its participant record. +- **Passcode.** The one-time code sent to a participant's registered mobile to confirm creation or configuration in production. +- **Processor, `processingid`.** The participant that processes claims for a policy: the insurer itself or its TPA. The recipient of every claim-side message. +- **Payer ID, `payerid`.** The insurer's own participant code, named inside the bundle as the insurer. +- **Member ID.** The beneficiary's identifier on the policy. +- **NPI, NIIP.** Identifier types for a provider's HFR ID and a payer's registry ID inside a bundle. +- **WASA.** The security audit completed before ABDM production access. +- **HTC demo.** The demonstration before NRCeS, IRDAI, TCS and NHA that closes sandbox certification. + +## Messages + +- **JWE.** JSON Web Encryption. The sealed-envelope format every message uses. +- **JWT.** JSON Web Token. The format of the access token and of the signature the exchange puts on calls to a participant. +- **Envelope, protected header.** The readable part of a message: the `x-hcx-` fields and the encryption settings. +- **Letter, payload.** The FHIR bundle inside the envelope, encrypted for the receiver. +- **Domain headers.** A few facts written on the envelope for the exchange's records, such as an amount. +- **Correlation ID.** The number that ties a request and its answers into one conversation. +- **API call ID, request ID.** Fresh identifiers for one call and one request. +- **Workflow code, workflow ID.** The number in the envelope that says which step of the claim a message is. +- **Status word.** The `x-hcx-status` value: `request.initiated`, `response.partial`, `response.complete`, `response.error`, and the exchange's own `request.queued`, `request.dispatched`, `request.stopped`. +- **Receipt.** The `202 Accepted` body returned on taking a message in. Not a decision. +- **Protocol response.** A refusal returned on the callback with `response.error` and error details, when a message could not be opened or failed validation. +- **Callback.** The endpoint a participant hosts to receive answers and payer-initiated messages. +- **Dummy payer.** The sandbox payer, participant `1000003538@hcx`, that answers the provider exchanges listed in the NHCX Use Cases chapter. + +## Claims + +- **Preauthorisation, preauth.** Approval to treat, sought before treatment. A `Claim` with `use = preauthorization`. +- **Enhancement.** Additional procedures or days sought against an approved preauthorisation. +- **Resubmission.** A revised preauthorisation that replaces an earlier one. +- **Query.** The payer asking for more before it decides. The case stays open. +- **Claim.** The request for payment after discharge. A `Claim` with `use = claim`. +- **Predetermination.** Asking what a payer would approve, without committing. +- **Adjudication.** The payer's decision on a preauthorisation or claim. +- **Reprocess.** An appeal against a rejection, raised as a Task. +- **Shortfall.** A request for the difference when a claim was paid short, raised as a Task after payment settles, under reason `partialpayment`. +- **Erroneous claim.** In the value set, a separate reason, `erroneousclaim`, for a reprocess caused by a mistaken submission by the provider. The FAQ uses the phrase for the shortfall case; the two senses coexist in the corpus. +- **Task.** The general-purpose request resource: plan fetch, cancel, reprocess, search, payment notice, acknowledgement, communication. +- **Communication.** A payer-initiated message outside the claim's own request-and-answer: a TAT alert, a grievance, a wallet or policy change, a request for information. +- **TAT.** Turnaround time. The window within which a payer is expected to act; under some policies, silence within it means approval. +- **Wallet.** The beneficiary's remaining cover under PMJAY, shared across the family. +- **Package.** A treatment with a fixed rate under a scheme; the unit a PMJAY claim is built from. +- **Stratification.** A higher bed category, such as ICU or HDU, allowed as an add-on over a package rate. +- **Implant.** A device allowed as an add-on over a package rate. +- **Unspecified procedure.** A treatment not in the package list, allowed under conditions with a free-text name and amount. +- **Cyclic procedure.** A treatment approved once and delivered over several visits, such as dialysis. +- **LAMA, DAMA.** Leave against medical advice, without informing the hospital; discharge against medical advice, with a signed undertaking. Two of the four discharge types, with `DTH` (home) and `DTM` (death). +- **LM100.** The single line item for a LAMA or DAMA stay before surgery, in place of the approved packages. +- **UTR.** Unique transaction reference. The bank's reference for a payment, carried on the payment reconciliation. +- **TDS.** Tax deducted at source, itemised on the payment reconciliation. diff --git a/site/docs/nhcx/v1/getting-started/participant-record.md b/site/docs/nhcx/v1/getting-started/participant-record.md new file mode 100644 index 000000000..4e1c3e081 --- /dev/null +++ b/site/docs/nhcx/v1/getting-started/participant-record.md @@ -0,0 +1,140 @@ +--- +title: Creating and updating a participant record +sidebar_label: Participant record +description: Creating your identity on the exchange in sandbox and in production, and updating the certificate or callback address. +verification: unverified +source: Onboarding providers and payers in Sandbox and in Production (NHA); AWS Sandbox NHCX-OnBoarding APIs Postman collection; PMJAY Hospital Migration to HMIS via NHCX §3; NHCX Guide for Providers p6 +sidebar_position: 4 +--- + +# Creating and updating a participant record +A participant record is your identity on the exchange. It holds your participant code, your role, your certificate and your callback address. You create it once, then update it whenever the certificate or the address changes. + +The sandbox and production differ here. The sandbox is a single call each way. Production adds a one-time passcode to the registered mobile number at every step, so nobody can register a hospital they do not control. Both are shown. + +## In short + +- The participant record holds your participant code, role, certificate and callback address. +- Sandbox is one call each way. Production adds a one-time passcode to the registered mobile at every step. +- The mobile number must match the HFR record exactly, or for a payer the one NHA holds. +- A certificate-only replacement in production skips the passcode, through a dedicated call. + +## Sandbox: create + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/create' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'source: internal' \ + --data-raw '{ + "linked_registry_codes": ["10001"], + "registryid": "", + "participant_name": "Test Hospital", + "scheme_code": "PMJAY", + "state": "Haryana", + "district": "Panchkula", + "roles": ["10001"], + "primaryEmail": "integration@hospital.example", + "phone": ["01123456789"], + "primaryMobile": "9876543210", + "signing_cert_path": "", + "encryption_cert": "", + "endpoint_url": "https://nhcx.hospital.example" + }' +``` + +Field by field: + +| Field | What to put | +| :---- | :---- | +| `linked_registry_codes` | Which registry vouches for you. `10001` HFR, `10002` NIN, `10003` ROHINI, `10004` payer registry. | +| `registryid` | On the sandbox, your ABDM client ID. In production, the HFR ID for a hospital or the IRDAI ID for a payer. | +| `roles` | `10001` provider, `10002` payer, `10003` TPA. The full list is in the Overview. | +| `encryption_cert` | The base64 certificate from the previous chapter. | +| `signing_cert_path` | Optional. Leave empty. | + +The response carries your new address: + +```json +{ "participant_code": "1000004446@hcx" } +``` + +Keep it. It is `x-hcx-sender_code` on everything you send from now on. A hospital group creates one participant per facility, each with its own HFR ID, using the same credentials. + +## Sandbox: update + +The same shape, keyed on the participant code, used to change the certificate or the callback address: + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/update' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ + "participant_code": "1000004446@hcx", + "participant_name": "Test Hospital", + "scheme_code": "PMJAY", + "roles": ["10001"], + "primaryEmail": "integration@hospital.example", + "phone": ["01123456789"], + "primaryMobile": "9876543210", + "endpoint_url": "https://nhcx.hospital.example", + "signing_cert_path": "", + "encryption_cert": "" + }' +``` + +`endpoint_url` is the base of your callback server, sometimes called the bridge URL. It can be set at creation as well as on update. The exchange appends the callback path to it: a preauthorisation decision arrives at `/v1/preauth/on_submit`. The rules for this address are in Receiving a Callback. + +## Production: four steps + +Base: `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice`. + +**1. Create.** `POST v2/participant/create` + +```json +{ + "registrytype": "10001", + "registryid": "", + "role": ["10001"], + "endpoint_url": "", + "mobilenumber": "", + "email": "integration@hospital.example" +} +``` + +The mobile number must match the one on your HFR record exactly, or for a payer the one NHA holds. The response gives `participantid` and a `transactionid`, and a passcode is sent to that mobile. The participant exists, in a pending state. + +**2. Confirm.** `GET validate?transactionId=&passcode=`. Note the method: the two confirmation calls are GETs, not POSTs. The participant becomes active. + +**3. Configure.** `POST v2/participant/update` + +```json +{ + "participantcode": "", + "encryptioncert": "", + "endpointurl": "https://nhcx.hospital.example" +} +``` + +A second transaction ID and passcode arrive. + +**4. Confirm again.** `GET update/validate?transactionId=&passcode=`. The certificate and address go live. + +Passcodes and transaction IDs are valid for 24 hours. If one is lost, repeat that step; a new pair is issued. + +## Replacing only the certificate + +In production there is a shorter path that skips the passcode: + +``` +POST v2/update/cert +{ "participantId": "", "certificate": "" } +``` + +Use it for the yearly rotation. + +## Checking it worked + +Fetch your own certificate back, using the Fetching a Recipient Certificate chapter's call with your own participant code. If what comes back matches what you registered, the record is live and other participants can seal messages for you. diff --git a/site/docs/nhcx/v1/getting-started/receiving-a-callback.md b/site/docs/nhcx/v1/getting-started/receiving-a-callback.md new file mode 100644 index 000000000..689e2dcdd --- /dev/null +++ b/site/docs/nhcx/v1/getting-started/receiving-a-callback.md @@ -0,0 +1,163 @@ +--- +title: Receiving a callback +sidebar_label: Receiving a callback +description: Hosting the endpoint every answer arrives on, returning the receipt in time, and opening the sealed message. +verification: unverified +source: "API Response Handling to avoid Failures; NHCX FAQs v1.2 #14, #21; API Security page, securing participant system APIs; NHCX Integration Handbook §2.5; NHCX Code Snippets references for payload preparation, decryption; AWS Sandbox NHCX USECASE Postman collection" +sidebar_position: 8 +--- + +# Receiving a callback + +Every answer on the exchange arrives at your server, not in the response to your call. This chapter builds the endpoint that receives it, and closes the loop opened in the previous one. + +## In short + +- Every answer arrives at your server, not in the response to your call. +- Answer within 30 seconds with `202` and the receipt, then process. Anything slower reads as a failed delivery. +- Two body shapes arrive: `JWEPayload` with a sealed bundle, and `ProtocolResponse` with a refusal in the clear. +- `/v1/error` carries neither shape and must still be answered `202`. +- The exchange signs its calls to you, but no published source gives the key to verify against. + +## What to host + +Under the `endpoint_url` you registered, the exchange will POST to a path per use case. For a provider that starts with: + +``` +/v1/coverageeligibility/on_check +/v1/insuranceplan/on_request +/v1/preauth/on_submit +/v1/claim/on_submit +/v1/predetermination/on_submit +/v1/search/on_submit +/v1/communication/request +/v1/paymentnotice/request +/v1/task/on_submit +/v1/on_status +/v1/error +``` + +A payer hosts the mirror set, the `submit` and `check` sides. Both host `/v1/error`; it is where the exchange reports a message it could not deliver after five attempts, and without it you never find out. + +Build one handler and route by path. The body shape and the steps are the same for all of them except `/v1/error`, which is described below. + +## Rules for the address + +- A domain name, over HTTPS with TLS 1.2 or newer. Not an IP address, not a port number. +- Hosted in India. +- Reachable from the exchange's outbound addresses: allow `3.109.99.210`, `13.126.152.0` and `13.200.129.223` through the firewall. +- Answering within 30 seconds. Anything slower is treated as a failed delivery and retried. + +## What arrives + +A POST with a JSON body of two fields: + +```json +{ "type": "JWEPayload", "payload": "eyJhbGciOiJSU0EtT0FFUC0yNTYi...." } +``` + +`type` is `JWEPayload` when there is a sealed bundle to open. It is `ProtocolResponse` when the recipient refused the message; then the body carries the `x-hcx-` fields in the clear, `x-hcx-status` set to `response.error`, and the reason in `x-hcx-error_details`: + +```json +{ + "type": "ProtocolResponse", + "x-hcx-sender_code": "1000003538@hcx", + "x-hcx-recipient_code": "1000004446@hcx", + "x-hcx-api_call_id": "…", + "x-hcx-correlation_id": "11223344-5566-4788-99aa-bbccddeeff00", + "x-hcx-workflow_id": "12", + "x-hcx-timestamp": "…", + "x-hcx-status": "response.error", + "x-hcx-error_details": { "code": "…", "message": "…", "trace": "…" }, + "x-hcx-entity-type": "preauth" +} +``` + +`/v1/error` is the exception to the two shapes above. It carries no `payload` and no `x-hcx-` fields. What arrives is a plain JSON report of the request the exchange gave up on, with the rejection details. Its field names are not published, so do not parse it against a fixed schema. Store it whole, and answer it with `202` and the receipt like every other delivery. Fill in whatever identifiers the report happens to carry, and leave the rest of the receipt empty. Do not answer `/v1/error` with a `4xx` because the body is not a shape you recognise. Every delivery the exchange makes to you, on any of the paths listed above, is answered `202`. + +The exchange signs its calls to you with a JWT (RS256, its own private key) in the authorisation header. Validate the signature against the NHCX public key before trusting anything in the body. + +**This is the one instruction in this documentation you cannot follow from it.** No published source gives the NHCX public key or an address to fetch it from. None gives the name of the header it arrives in, or the claims to expect inside it. Every integration built from these documents alone has therefore shipped with signature checking disabled, because the alternative, rejecting everything, makes the endpoint useless. + +Do not leave that as an accident. Build the check, put the key in configuration, and treat a missing key as a deliberate, logged, temporary state rather than a silent default. Ask for the key during onboarding, at the same time you register your endpoint, and turn the check on the day you get it. Until then your callback address is an unauthenticated endpoint that accepts patient data. Keep it behind whatever else you have: an allow-list of the exchange's addresses, mutual TLS at your edge, a shared secret in a header the exchange agrees to send. + +## Answer first, read second + +The 30-second clock starts when the request lands. Do the minimum, send the receipt, and process afterwards. + +The receipt is the same shape you received in the previous chapter, with the roles reversed: + +```json +{ + "timestamp": "04/09/2026 11:46:41:305", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "1000003538@hcx", + "recipient_code": "1000004446@hcx", + "entity_type": "preauth", + "protocol_status": "request.queued" + }, + "error": { "code": "", "message": "" } +} +``` + +HTTP status `202`. Not `200`, not an empty body. For a `JWEPayload` the header fields come from the decrypted protected header; for a `ProtocolResponse` they are already in the clear. + +## Opening it + +```python +import json +from jwcrypto import jwk, jwe + +PRIVATE_KEY = jwk.JWK.from_pem(open("private.key", "rb").read()) + +def open_message(body: dict) -> tuple[dict, dict | None]: + """Returns (header, bundle). bundle is None for a protocol response.""" + if body.get("type") == "ProtocolResponse": + header = {k: v for k, v in body.items() if k.startswith("x-hcx-")} + return header, None + token = jwe.JWE() + token.deserialize(body["payload"], key=PRIVATE_KEY) + header = dict(token.jose_header) + bundle = json.loads(token.payload) + return header, bundle +``` + +`openssl genpkey` wrote the private key in PKCS8 form, which is what `from_pem` expects. If decryption fails, the message was sealed with a certificate that is not the one on your participant record; go back to the update call and check what is registered. + +## Then, in order + +1. **Match the conversation.** `x-hcx-correlation_id` pairs this answer with the request you sent. Look it up. If you do not recognise it, log it and stop; do not act on it. +2. **Read the status.** `response.complete` is a final answer, `response.partial` an interim one, `response.error` a refusal. +3. **Read the workflow code.** It says what kind of answer this is: `21` a preauthorisation approved, `24` a query raised, and so on. The full table is in the Overview. +4. **Store the raw message** before doing anything with it. Disputes are settled on what was actually received. +5. **Act on the bundle**, if there is one. A `ClaimResponse` for a preauthorisation, a `CoverageEligibilityResponse` for an eligibility check, and so on. + +Make the handler idempotent. The exchange retries on a missed receipt, so the same message can arrive twice; the `x-hcx-api_call_id` tells you it is the same one. + +## Closing the loop + +Send the empty bundle from the previous chapter to the dummy payer, then trigger its answer: + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer/process/request' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ + "action": "Reject", + "method": "Preauth", + "correlationId": "" + }' +``` + +`action` is `Approve`, `Reject` or `Query`; `method` is `Preauth` or `Claim`. Your `/v1/preauth/on_submit` then receives the answer, either a sealed `ClaimResponse` or a `ProtocolResponse` carrying the refusal, with the correlation ID you sent. A `Query` action makes the dummy payer raise a communication request instead, which you answer on `/v1/communication/on_request` before the decision arrives. + +Whichever comes back, that message proves the whole framework. Your token works, your participant record is live, the exchange can reach your address, the dummy payer could open your message, and you could read its reply. Nothing that follows changes any of it, only what goes in the bundle. + +## Where next + +- A **provider** goes to the B-series in the Overview's NHCX Use Cases chapter, starting with Check Coverage Eligibility, and to the sample bundles on the portal for a real Claim to put inside. +- A **payer** goes to the C-series, and hosts the `submit` and `check` endpoints this chapter described for the other side. +- Both should read JWE, Status and Errors in the Overview before writing a second use case; it is where the status words and the retry rules live. diff --git a/site/docs/nhcx/v1/getting-started/recipient-certificate.md b/site/docs/nhcx/v1/getting-started/recipient-certificate.md new file mode 100644 index 000000000..489861c0a --- /dev/null +++ b/site/docs/nhcx/v1/getting-started/recipient-certificate.md @@ -0,0 +1,58 @@ +--- +title: Fetching a recipient's certificate +sidebar_label: Recipient certificate +description: Fetching and caching the public key of the participant you are about to send a message to. +verification: unverified +source: "AWS Sandbox Participant Service APIs Postman collection; NHCX Integration Handbook §3.3, §5.5, §5.6; NHCX Code Snippets references for payload preparation; Common Mistakes while implementing through NHCX #7" +sidebar_position: 6 +--- + +# Fetching a recipient's certificate +Before you can seal a message for anyone, you need their public key. The participant service hands it out against a participant code. + +## In short + +- The participant service hands out a public key against a participant code. +- You may get a full X.509 certificate or a bare SPKI public key. Handle both. +- Cache by participant code for 24 hours; keys change rarely. +- Fetch against the `processingid` from the policy lookup, not the insurer's `payerid`. + +## The call + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/fetch/certs' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ "participantid": "1000003538@hcx" }' +``` + +That participant code is the sandbox dummy payer. For the smoke test at the end of this section it is the recipient. + +## What comes back + +Key material in PEM text. None of the source documents gives the JSON envelope it arrives in, only the material itself, so inspect one response before writing the parser. Usually a full X.509 certificate: + +``` +-----BEGIN CERTIFICATE----- +MIID0zCCArugAwIBAgIUax... +-----END CERTIFICATE----- +``` + +Sometimes, for a participant who registered a bare key, an SPKI public key: + +``` +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEF... +-----END PUBLIC KEY----- +``` + +Handle both. Try to load it as a certificate and take the public key out of it; if that fails, load it as a public key directly. The handbook's rule of thumb is that anything under about 400 bytes is a bare key. + +## Cache it + +Keys change rarely. Fetching one before every message is a round trip that buys nothing, and the portal's own code sample says to store certificates locally rather than call this endpoint repeatedly. Cache by participant code for 24 hours, and refresh early if a decryption on the other side starts failing, which is the sign that they rotated. + +## Whose certificate + +The participant code to fetch is the `processingid` from the policy lookup in the previous chapter, not the insurer's `payerid`. For the smoke test it is the dummy payer's code, `1000003538@hcx`. diff --git a/site/docs/nhcx/v1/getting-started/session-token.md b/site/docs/nhcx/v1/getting-started/session-token.md new file mode 100644 index 000000000..32d0d630d --- /dev/null +++ b/site/docs/nhcx/v1/getting-started/session-token.md @@ -0,0 +1,87 @@ +--- +title: Session token +sidebar_label: Session token +description: Getting a bearer token from the ABDM gateway with your Milestone 1 credentials, and keeping it fresh. +verification: unverified +source: "Authenticating with NHCX (NHA); NHCX FAQs v1.2 #2, #3, #20; Common Mistakes while implementing through NHCX #6, #9; ABDM gateway v3 sessions call as used against the sandbox" +sidebar_position: 2 +--- + +# Session token + +Every call carries a bearer token. The token does not come from NHCX. It comes from the ABDM gateway, with the client ID and secret you were given for Milestone 1. + +## In short + +- The token comes from the ABDM gateway, not from NHCX, using your Milestone 1 client ID and secret. +- Three headers are mandatory on the sessions call: a fresh `REQUEST-ID`, a current `TIMESTAMP`, and `X-CM-ID`. +- On NHCX calls the token goes in `bearer_auth`, with the word `Bearer` in front. +- Sources disagree on the lifetime, so refresh on a timer and retry any `401` once with a fresh token. + +## Getting one + +```bash +curl --location 'https://dev.abdm.gov.in/api/hiecm/gateway/v3/sessions' \ + --header 'REQUEST-ID: 607f0d74-0913-4345-afd0-70123442eb64' \ + --header 'TIMESTAMP: 2026-09-04T06:15:51.975Z' \ + --header 'X-CM-ID: sbx' \ + --header 'Content-Type: application/json' \ + --data '{ + "clientId": "", + "clientSecret": "", + "grantType": "client_credentials" + }' +``` + +Three headers matter here, and none of them is optional. + +- `REQUEST-ID` is a fresh UUID that you generate for every call. Sending the same one twice is the mistake to avoid; generate it, do not copy it from an example. +- `TIMESTAMP` is the current time in UTC, ISO 8601 with milliseconds and a trailing `Z`, as in `2026-09-04T06:15:51.975Z`. A clock that has drifted will be refused, so take the time from the system rather than constructing it by hand. +- `X-CM-ID` names the environment. It is `sbx` on the sandbox. The mirror and the adapter both use lowercase. + +`grantType` is `client_credentials`. The older form of this call omitted it, which is why an otherwise correct request copied from an old sample can be rejected. + +The response: + +```json +{ + "accessToken": "eyJhbGciOiJSUzI1NiIs...", + "expiresIn": 300, + "refreshTokenIn": 300, + "refreshToken": "eyJhbGciOiJSUzI1NiIs...", + "tokenType": "bearer" +} +``` + +An older address, `https://dev.abdm.gov.in/gateway/v0.5/sessions`, appears throughout the portal's earlier documents. It takes the client ID and secret alone, without the three headers and without `grantType`, and it returns the same body. Treat it as superseded: build against the v3 address above, and fall back to the older one only if v3 answers with an error that is not about your credentials. + +## Using it + +On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value. + +``` +bearer_auth: Bearer eyJhbGciOiJSUzI1NiIs... +``` + +Leaving out the `Bearer` prefix is the portal's own example of how to get a `401`. + +## Keeping it fresh + +The token is short-lived. The portal's documents put its life at 300 seconds in one place and 1200 in another, so do not rely on either. Build it like this: + +- Keep the token and the time you got it. +- Before each call, if it is older than a few minutes, get a new one first. +- If any call answers `401`, get a new token and retry that call once. Do not retry with the same token; it will fail the same way. +- Never write the token or the secret to a log. + +One token serves every call: the participant service, the use-case endpoints, and the status check. + +## What can go wrong + +| Symptom | Cause | +| :---- | :---- | +| `401` on the sessions call itself | Wrong client ID or secret, or Milestone 1 not complete | +| An error on the sessions call naming a header | `REQUEST-ID` reused or absent, `TIMESTAMP` stale or in the wrong format, or `X-CM-ID` missing | +| An error on the sessions call naming the body | `grantType` omitted, which the v3 address requires | +| `401 Sender is not authorized to execute the operation` on an NHCX call | Token expired | +| `401` immediately after getting a fresh token | `Bearer` prefix missing | diff --git a/site/docs/nhcx/v1/getting-started/your-certificate.md b/site/docs/nhcx/v1/getting-started/your-certificate.md new file mode 100644 index 000000000..bdfa1f8d5 --- /dev/null +++ b/site/docs/nhcx/v1/getting-started/your-certificate.md @@ -0,0 +1,60 @@ +--- +title: Your certificate +sidebar_label: Your certificate +description: Making the RSA key pair and self-signed X.509 certificate that lets other participants seal messages for you. +verification: unverified +source: Steps to generate encryption Certificate (NHA); Message Security and Integrity page, key rotation; NHCX Integration Handbook §3.3; NHCX Code Snippets references for payload preparation +sidebar_position: 3 +--- + +# Your certificate + +Every message on the exchange is sealed for the receiver. For anyone to send you anything, you need a key pair: a private half you keep, and a public half, wrapped in a certificate, that you publish through your participant record. + +## In short + +- Three openssl commands make a 2048-bit RSA key and a self-signed X.509 certificate valid for a year. +- The private key never leaves your server. The certificate goes to the participant record, base64 encoded. +- Note the expiry: when the certificate lapses, every sender's encryption for you fails. +- Other participants may hand you a bare SPKI key instead of a certificate, so handle both. + +## Making the key pair + +Three commands, on a machine you control. + +```bash +# 1. A 2048-bit RSA private key +openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048 + +# 2. A signing request. It will ask for country, state, organisation and so on. +openssl req -new -key private.key -out request.csr + +# 3. A self-signed X.509 certificate, valid for a year +openssl x509 -req -in request.csr -signkey private.key -out certificate.crt -days 365 +``` + +`private.key` is the secret. It opens every letter addressed to you. It never leaves your server and it is never sent to NHCX. + +`certificate.crt` is public. It is what other participants use to seal messages for you. + +## Encoding it for registration + +The participant service takes the certificate as a single base64 string, not as a file. + +```bash +base64 -w 0 certificate.crt > certificate.b64 # Linux +base64 -i certificate.crt -o certificate.b64 # macOS +``` + +The contents of `certificate.b64` go into the `encryption_cert` field in the next chapter. It will start with `LS0tLS1CRUdJTi`, which is `-----BEGIN` in base64. + +## Keeping it + +- Store `private.key` where your callback service can read it and nothing else can. +- Note the expiry. A year from now the certificate lapses and every sender's encryption for you fails. +- NHA recommends replacing the key once a year. Replacing it is a certificate update on the participant record, covered next; there is no passcode step for a certificate-only change. +- If the private key may have leaked, generate a new pair, update the record, and tell NHA. + +## A note on what you will see from others + +When you fetch another participant's certificate later, you may get back a full X.509 certificate or, for some participants, a bare public key in SPKI form. Your code should try the certificate first and fall back to the key. The portal's Java sample loads the certificate with `CertificateFactory` and takes `getPublicKey()` from it; the Python equivalent is in Building and Sending a JWE. diff --git a/site/docs/nhcx/v1/index.md b/site/docs/nhcx/v1/index.md index f3b4f66b3..ba2da6526 100644 --- a/site/docs/nhcx/v1/index.md +++ b/site/docs/nhcx/v1/index.md @@ -1,9 +1,9 @@ --- title: NHCX sidebar_label: NHCX -description: What NHCX is, who is on it, and the index of the NHCX documentation set. +description: What NHCX is, who is on it, and where to start depending on whether you are building a provider, a payer, or deciding whether to build at all. verification: unverified -source: NHCX__NHCX-Website_DocumentDetails.md +source: NHCX sandbox portal at hcxsbx.abdm.gov.in, mirrored 1 September 2026; Workflow Status Sheets (18 Aug 2026); Standard Error Codes (11 Aug 2026); PMJAY Integration Handbook (14 Aug 2026); FAQ v1.2 (21 Aug 2026) sidebar_position: 1 --- @@ -13,100 +13,71 @@ The Ayushman Bharat Digital Mission ([ABDM](/docs/nhcx/v1/getting-started/glossa health data network, run by the National Health Authority ([NHA](/docs/nhcx/v1/getting-started/glossary#nha)). It is three gateways, not one, and this section documents the third of them. -[NHCX](/docs/nhcx/v1/getting-started/glossary#nhcx) is the National Health Claims Exchange, the third [ABDM](/docs/nhcx/v1/getting-started/glossary#abdm) gateway, carrying insurance claims and their responses between providers and payers. After this page you will know who is on NHCX and which of [NHA](/docs/nhcx/v1/getting-started/glossary#nha)'s own documents to open next. +[NHCX](/docs/nhcx/v1/getting-started/glossary#nhcx) is the National Health Claims Exchange. It carries insurance +claims and their responses between providers and payers. This section covers the exchange as NHA +defines it for any payer, and PMJAY as the scheme that runs on it with its own rules. -## What is not here +## In short -No endpoint on this gateway has been documented here yet. No endpoint reference, no sequence diagrams, no error tables, no test cases. +- A hospital connects once and an insurer connects once, each to the exchange. Either can then reach the other. +- Every substantive exchange is asynchronous: a request out, a receipt, and the answer later on a callback. +- Every message is a FHIR bundle sealed for the recipient inside a JWE envelope the exchange can route but not read. +- Both sides build the same base framework first, then the use cases their role needs. +- PMJAY runs the same endpoints with scheme rules layered on top. -The [HIE-CM](/docs/nhcx/v1/getting-started/glossary#hie-cm) and [UHI](/docs/nhcx/v1/getting-started/glossary#uhi) gateways are documented at [milestones](/docs/hiecm/v3/milestones) and [UHI](/docs/uhi/v1). NHCX sits outside both, on its own sandbox, with its own onboarding, participant registry and document set. +## Where to start -NHCX does appear in the sandbox database. An NHCX application is recorded against your organisation, and the column list for it is the [`nhcx_exit` table](/docs/hiecm/v3/reference/data-dictionary#nhcx_exit). - -## HIE-CM or NHCX - -Claims are not health records. If your product shares or fetches a patient's clinical record, you are on HIE-CM. If it submits or adjudicates an insurance claim, you are on NHCX. A hospital system can end up on both. The two integrations share no API surface. - -The documentation set shows the shape of a claim without describing it. A claim is a [FHIR](/docs/nhcx/v1/getting-started/glossary#fhir) bundle. It travels with a protected header that carries a workflow status code. A request cycle is closed by sending a protocol response back. Those are rows 11, 12 and 15 below. +| If you are | Start at | +| --- | --- | +| Deciding whether to build | [What NHCX is](/docs/nhcx/v1/concepts/what-nhcx-is), then [claim settlement](/docs/nhcx/v1/concepts/claim-settlement) and [the NHCX way](/docs/nhcx/v1/concepts/nhcx-way-of-claim-settlement) | +| Running a claims desk | [Claim settlement](/docs/nhcx/v1/concepts/claim-settlement), then [Building a provider](/docs/nhcx/v1/building-a-provider) or [Building a payer](/docs/nhcx/v1/building-a-payer) | +| Designing the screens | The [provider UI guide](/docs/nhcx/v1/building-a-provider/ui-guide) or the [payer UI guide](/docs/nhcx/v1/building-a-payer/ui-guide) | +| Engineering a provider | [Get started](/docs/nhcx/v1/getting-started) end to end, then [Building a provider](/docs/nhcx/v1/building-a-provider) | +| Engineering a payer | [Get started](/docs/nhcx/v1/getting-started) end to end, then [Building a payer](/docs/nhcx/v1/building-a-payer) | +| Integrating without building the protocol | The [NHCX adapter](/docs/nhcx/v1/getting-started/nhcx-adapter), then the FHIR reference for the bundles you still write | +| Going live against PMJAY | The [PMJAY sandbox run](/docs/nhcx/v1/building-a-provider/pmjay-sandbox-run), then [PMJAY provider](/docs/nhcx/v1/building-a-provider/pmjay-provider) | +| Writing bundles | [Bundles and conventions](/docs/nhcx/v1/fhir-reference/bundles-and-conventions), then the chapter for your exchange | +| Looking something up | [Workflow codes](/docs/nhcx/v1/exchanges/workflow-codes), the [NHCX glossary](/docs/nhcx/v1/getting-started/nhcx-glossary), [codes and value sets](/docs/nhcx/v1/fhir-reference/codes-and-value-sets) | ## Who is on it | Participant | What it does | | --- | --- | -| Provider | A hospital or clinic. Row 9 below covers the use cases a provider has to implement. | -| Payer | An insurer, or a third party administrator acting for one. Row 10 below is the matching list for a payer. | -| NHCX | The exchange in the middle. Routes between registered participants. | +| Provider | A hospital or clinic, identified by its Health Facility Registry entry. | +| Payer | An insurance company, or a government agency paying for a scheme. | +| TPA | A third-party administrator processing claims for an insurer. On the network it behaves as a payer. | +| Regulator | IRDAI and bodies like it, which can search claims across every payer. | +| Scheme sponsor | The owner of a programme, for example NHA for Ayushman Bharat. | +| Patient app | A personal health record app receiving notifications for a beneficiary. | +| NHCX | The exchange in the middle, routing between registered participants. | + +Both providers and payers onboard as participants, in sandbox first and then in production. +[Participants and policies](/docs/nhcx/v1/registries/participants-and-policies) covers how that +works and how a beneficiary is matched to a policy. -Both providers and payers onboard as participants, in sandbox first and then in production. The production onboarding document carries the role and registry enums and the validations applied to them. +## HIE-CM or NHCX -## What is published +Claims are not health records. If your product shares or fetches a patient's clinical record, you +are on HIE-CM. If it submits or adjudicates an insurance claim, you are on NHCX. A hospital system +can end up on both. The two integrations share no API surface. -The NHCX documentation set has 32 numbered rows, each giving a purpose, a document name and a location. It is an index, not a specification. No row carries a request shape, a response shape or an endpoint. Two rows have no document name in the source, and one row is blank apart from its location. Those gaps are marked below. +## What is verified and what is not -There is one location per group of documents, not a URL per file. +Coverage eligibility in all four purposes, the insurance plan, the preauthorisation, an +enhancement, the claim, and the Payer Service adjudication of all three were run against the SHA +HP sandbox payer on 5 and 6 September 2026, end to end to an approved claim. That run is recorded +in the [PMJAY sandbox run](/docs/nhcx/v1/building-a-provider/pmjay-sandbox-run). -| Location | What is there | -| --- | --- | -| [hcxsbx.abdm.gov.in/#/documents](https://hcxsbx.abdm.gov.in/#/documents) | Onboarding, use cases, payload references, error handling, Postman collections and FAQs. Rows 1 to 22. | -| [hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications](https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications) | Swagger for the use case APIs and the participant service. Row 23. | -| [hcxsbx.abdm.gov.in/#/hmisdocuments](https://hcxsbx.abdm.gov.in/#/hmisdocuments) | The Supporting Documents section of that page holds the PMJAY and [HMIS](/docs/hiecm/v3/getting-started/glossary#hmis) material. Rows 24 to 32. | - -## The document index - -Row numbers match the published index, so you can match a line here to a line there. - -### Onboarding, use cases and specifications - -| # | Document | What it covers | -| --- | --- | --- | -| 1 | NHCX Usecases | High level introduction to the NHCX use cases. | -| 2 | Standards for NHCX | Standards followed in NHCX, and an introduction to FHIR. | -| 3 | Name not given in the source | How to generate a token using the ABDM API for the NHCX APIs. | -| 4 | Onboarding providers and payers in Sandbox | How to onboard participants in sandbox. | -| 5 | Onboarding providers and payers in Production | How to onboard participants in production. Includes the role and registry enums, and the validations imposed. | -| 6 | AWS(Sandbox)NHCX-OnBoarding APIs Postman Collection | Postman collection for participant onboarding in sandbox. A zip file. | -| 7 | AWS(PROD)_NHCX-OnBoarding APIs Postman Collection | Postman collection for participant onboarding in production. A zip file. | -| 8 | Policy Linking and De-Linking Process | Policy linking and de-linking validations, and API implementation detail, for payer and TPA. | -| 9 | NHCX Provider Side Use Cases, Sandbox Exit Process | Which use cases a provider must cover: which API, at whose end, which bundle, which status, and the callback logic. | -| 10 | NHCX Payer Side Use Cases, Sandbox Exit Process | The same list for a payer. | -| 11 | NHCX Requests and Responses for UseCases | Which value sets to use when building FHIR bundles, which bundle to use, and which values are mandatory. One tab per use case. A spreadsheet. | -| 12 | Workflow Status Sheets (with Codes) | The workflow codes to send in the protected header. A spreadsheet, updated when codes change. | -| 13 | NHCX Code Snippets references for payload preparation | Reference code snippets for preparing use case payloads. | -| 14 | Implementation Guide for Adoption of FHIR in ABDM and NHCX | The FHIR implementation guide for both. | -| 15 | API Response Handling to avoid Failures | How to handle error scenarios, and how to send the protocol response that closes the request cycle. | -| 16 | AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection | Postman collection for the participant service APIs in sandbox. A zip file. | -| 17 | AWS(Sandbox)-NHCX USECASE Postman Collection | Postman collection for the use case APIs in sandbox. A zip file. | -| 18 | Standard Error Codes | Every error code and scenario, by use case, for the bridge and for NHCX. A spreadsheet. | -| 19 | NHCX Dummy Payer Implementation | Implementation guide for the dummy payer. | -| 20 | Steps to generate encryption Certificate | How to generate the encryption certificate, a public and private key pair. | -| 21 | FAQs | Frequently asked questions. | -| 22 | Common Mistakes while implementing through NHCX | Mistakes seen at the integrator end, and how they are resolved. | -| 23 | Technical Specification, API Specifications | Swagger for the use cases and for the participant service. The source adds a warning: for use case payloads, work from rows 11 and 13 rather than the swagger. The swagger is the relevant source for the participant service APIs. | - -### PMJAY and HMIS supporting documents - -PMJAY is the Ayushman Bharat Pradhan Mantri Jan Arogya Yojana scheme. These rows sit under Supporting Documents on the HMIS documents page. - -| # | Document | What it covers | -| --- | --- | --- | -| 24 | NHCX PMJAY Integration Handbook | The integration handbook for an HMIS. | -| 25 | Insurance Plan IG | Implementation guide for the insurance plan bundle. | -| 26 | NHCX_APIs to be called based on scenario | A roadmap for an HMIS: which NHCX APIs to call in which scenario. | -| 27 | NHCX-PMJAY-HMIS Integration Overview | Overview of the integration. | -| 28 | NHCX-PMJAY-HMIS Integration Guide | The integration guide. | -| 29 | Name not given in the source | Sample FHIR. | -| 30 | Biometric Authentication APIs Postman Collection | Postman collection for the biometric authentication APIs. | -| 31 | NHCX-PMJAY-HMIS Test Cases | Test cases for the integration. | -| 32 | Row blank in the source | The source row carries a location and nothing else. | - -## What is missing here - -Everything past the index. This page carries the title and purpose of each document, not the endpoints, payloads, status codes or error codes inside them. No NHCX call is served against a sandbox. +Everything else is built from NHA's published documents, collections and sample payloads. Where +those documents disagree with each other, the pages say so and name which reading the live samples +follow rather than picking silently. ## Next -- New to NHCX? Start at row 4 above, the sandbox onboarding document. +- [Get started](/docs/nhcx/v1/getting-started), the base framework every participant builds +- [Core concepts](/docs/nhcx/v1/concepts), what a claim is made of +- [Exchanges and codes](/docs/nhcx/v1/exchanges), every endpoint with its callback and workflow code +- [FHIR reference](/docs/nhcx/v1/fhir-reference/bundles-and-conventions), what goes inside the sealed payload +- [API references](/docs/nhcx/v1/api), the 41 operations as interactive OpenAPI - [Choose your gateway](/docs/hiecm/v3) -- [HIE-CM](/docs/hiecm/v3/) -- [UHI services](/docs/uhi/v1) - [Support](/docs/support), for anything about these pages rather than about NHCX itself diff --git a/site/docs/nhcx/v1/reference/README.md b/site/docs/nhcx/v1/reference/README.md index 68dec0ae7..59f32448f 100644 --- a/site/docs/nhcx/v1/reference/README.md +++ b/site/docs/nhcx/v1/reference/README.md @@ -1,7 +1,10 @@ # Reference -Material that is true across every module of NHCX. `authentication.md`, -`callbacks.md` and `error-codes.md` are generated from the OpenAPI specs on -every build; hand-written pages (like a data dictionary) live alongside them -with a `sidebar_position`. +Cross-module reference material for the API references tab. NHCX has none +today: the prose reference pages (use cases, workflow codes, PMJAY use +cases, FHIR bundles) render in the Docs tab under `exchanges/` and +`fhir-reference/`, because they are documentation rather than machine +contracts. +The API references tab is generated from `catalogue/openapi/nhcx/v1/`. +Nothing is hand-written here. diff --git a/site/docs/nhcx/v1/registries/index.md b/site/docs/nhcx/v1/registries/index.md index f66a24e6e..cd0ba4326 100644 --- a/site/docs/nhcx/v1/registries/index.md +++ b/site/docs/nhcx/v1/registries/index.md @@ -1,45 +1,48 @@ --- title: Registries -sidebar_label: Participants and identifiers -description: The participant registry NHCX runs, and how ABDM's three identifiers appear on this gateway. +sidebar_label: Registries +description: The participant registry NHCX runs, the three identifiers a participant holds, and how ABDM's own registries appear on this gateway. verification: unverified -source: NHCX__NHCX-Website_DocumentDetails.md -sidebar_position: 3 +source: Onboarding providers and payers in Sandbox and in Production (NHA); Policy Linking and De-Linking Process; NHCX FAQs v1.2 +sidebar_position: 1 --- # Registries -NHCX has a registry of its own, and it is not a registry of people. After this page you will know -what is registered on this gateway and what is not. +NHCX has a registry of its own, and it is not a registry of people. The entry is a participant: +an organisation with a role, not a doctor and not a patient. -## The participant registry +## In short + +- Every provider and payer onboards as a participant, in sandbox first and then in production. +- A participant holds three identifiers that do different jobs: a participant ID, client credentials, and a registry ID. +- The registry ID inside a FHIR bundle must equal the one on the sender's participant record. +- Claims go to the policy's processor, which is not always the insurer. -Every provider and every payer onboards as a participant, in sandbox first and then in -production. The participant is the entry: an organisation with a role, not a doctor and not a -patient. +## The participant registry -The production onboarding document, row 5 of [the index](/docs/nhcx/v1), is where the role and -registry enums live, along with the validations applied to them. Row 16 is the Postman collection -for the participant service APIs. The enum values live there and are not reproduced here. +NHCX sits in the middle and moves messages between registered participants. Onboarding, the three +identifiers, the callback address rules, and how a beneficiary is matched to a policy are all in +[Participants and policies](/docs/nhcx/v1/registries/participants-and-policies). -The participant service is also what a claim is routed by: NHCX sits in the middle and moves -messages between registered participants. +The calls themselves are in [Get started](/docs/nhcx/v1/getting-started): creating the +[participant record](/docs/nhcx/v1/getting-started/participant-record), and +[finding participants and policies](/docs/nhcx/v1/getting-started/finding-participants-and-policies). ## ABDM's three registries -[ABHA](/docs/nhcx/v1/getting-started/glossary#abha) identifies a patient, the HPR a practitioner, the HFR a -facility. All three are ABDM wide, and a hospital that is on both gateways will already hold the -last two from its [HIE-CM](/docs/nhcx/v1/getting-started/glossary#hie-cm) onboarding. +[ABHA](/docs/nhcx/v1/getting-started/glossary#abha) identifies a patient, the HPR a practitioner, +the HFR a facility. All three are ABDM wide, and a hospital on both gateways already holds the last +two from its [HIE-CM](/docs/nhcx/v1/getting-started/glossary#hie-cm) onboarding. -How each appears inside a claim is not yet published. No row describes a -field, and the two gateways share no API surface, so a mapping copied from HIE-CM would be a -guess. The value sets a bundle must use are row 11. +On NHCX the HFR ID is what a provider registers as its registry ID, and an insurer or TPA registers +its IRDAI registry ID instead, without leading zeros. A practitioner's HPR ID travels inside the +bundle, and the SHA HP sandbox looks the doctor up by the identifier typed `HPIN`. -If you need the identifiers themselves, they are written on HIE-CM: -[registries](/docs/hiecm/v3/registries) has all three, and -[M4](/docs/hiecm/v3/api/m4) is the milestone that creates the provider side. +If you need the identifiers themselves, they are written up on HIE-CM: +[registries](/docs/hiecm/v3/registries) has all three. ## Next +- [Participants and policies](/docs/nhcx/v1/registries/participants-and-policies) - [Core concepts](/docs/nhcx/v1/concepts), what a claim is made of -- [NHCX](/docs/nhcx/v1), the full document index diff --git a/site/docs/nhcx/v1/registries/participants-and-policies.md b/site/docs/nhcx/v1/registries/participants-and-policies.md new file mode 100644 index 000000000..b16650331 --- /dev/null +++ b/site/docs/nhcx/v1/registries/participants-and-policies.md @@ -0,0 +1,156 @@ +--- +title: Participants and policies +sidebar_label: Participants and policies +description: How a participant joins the network and is found on it, and how a beneficiary is matched to a policy and its processor. +verification: unverified +source: Onboarding providers and payers in Sandbox and in Production (NHA); Policy Linking and De-Linking Process; Authenticating with NHCX; Steps to generate encryption Certificate; Common Mistakes while implementing through NHCX; NHCX FAQs v1.2 (Aug 2026); NHCX Guide for Providers; Guidelines for Participant Onboarding page +sidebar_position: 2 +--- + +# Participants and policies + +Nothing in the previous chapter can happen until two questions are answered: who am I sending this to, and which policy is it about. Neither is a claim exchange. Both are preconditions, and a system that skips them fails later with errors that look like claim problems but are not. + +This chapter covers how a participant joins the network, how it makes itself reachable, how participants find and address each other, and how a policy is located and linked to a beneficiary. + +## In short + +- Two questions come before any claim exchange: who is this going to, and which policy is it about. +- A participant holds three identifiers: a participant ID, client credentials, and a registry ID. +- The registry ID inside a bundle must equal the one on the sender's participant record. +- The callback address must be a domain name over HTTPS, hosted in India, answering in 30 seconds. +- The order is fixed: payer, policy, processor code, plan, eligibility, then preauthorisation. + +## Becoming a participant + +Every entity on the exchange is a registered participant with three identifiers that do different jobs. + +- **Participant ID.** The address on the exchange, written as `1518@hcx`. The part after the `@` names the exchange. This is what goes on the envelope as sender and recipient. +- **Client ID and secret.** The login used to get an access token. These are the same credentials a hospital already holds from its ABDM Milestone 1 integration. There is no separate NHCX login. +- **Registry ID.** Proof of who you are, issued by a registry the exchange trusts. For a hospital it is the Health Facility Registry (HFR) ID. For an insurer or TPA it is the IRDAI registry ID, sent without leading zeros, so 0123 becomes 123. For a patient app it is the app's own client ID. + +When a participant is created, its role and its registry are given as numbered codes. + +| Role | Code | | Registry | Code | +| :---- | :---- | :---- | :---- | :---- | +| Provider | 10001 | | HFR | 10001 | +| Payer | 10002 | | NIN | 10002 | +| TPA | 10003 | | ROHINI | 10003 | +| Regulator | 10004 | | Payer registry | 10004 | +| Research | 10005 | | | | +| Insurance marketplace | 10006 | | | | +| Scheme sponsor | 10007 | | | | +| Another exchange | 10008 | | | | +| Patient app | 10009 | | | | + +A hospital group with several facilities holds one participant ID per HFR ID, all created with the same credentials. + +**The registry ID must match at both layers.** The HFR ID sent inside a FHIR bundle has to be the same as the registry ID recorded against that sender on the exchange. A mismatch is rejected by the gateway, and it is a common failure for integrators who take the registry entry and the bundle content from different places. + +## Registering + +Registration is a short sequence of calls to the participant service. Each is confirmed by a one-time passcode sent to the mobile number the registry holds, so nobody can register a hospital they do not control. + +1. **Create.** Send the registry type, registry ID, role, mobile number and email. The mobile number must be the one on the HFR record, or for a payer the one NHA holds. The exchange returns a participant ID and a transaction number, and sends a passcode to that phone. The participant now exists but is pending. +2. **Confirm.** Send the transaction number and passcode. The participant becomes active. +3. **Configure.** Send the participant's public certificate and the address the exchange should call back on, which the portal calls the bridge URL. A second passcode arrives. +4. **Confirm again.** The address and certificate go live. The exchange can now reach you. + +A participant record also carries a status the exchange maintains: created but not yet verified, active, inactive, or blocked. Only an active participant can send or receive. + +Passcodes and transaction numbers last 24 hours. Lose one and you repeat that step. A certificate can be replaced later without a passcode, through a dedicated certificate-update call. The sandbox offers a simpler create, update and delete without the passcode steps. + +## Your own key + +The previous chapter said the letter is sealed with the receiver's key. That means every participant needs a key of its own and has to publish the public half. + +Make a 2048-bit RSA key, sign your own X.509 certificate with it (the portal gives the three openssl commands), encode the certificate in base64, and register it in the configure step above. The private half stays with you; it is what opens every letter addressed to you. NHA recommends replacing the key once a year and expects a participant to report a key that may have leaked. + +## Where the exchange calls you + +The callback address registered during configuration is where every answer arrives, so it comes with rules. + +- A domain name, not an IP address or a port number. +- HTTPS, with TLS 1.2 or newer. +- Hosted in India. +- Reachable from the exchange's outbound addresses, which must be allowed through your firewall: `3.109.99.210`, `13.126.152.0` and `13.200.129.223`. +- Answering within 30 seconds with an acceptance receipt, otherwise the exchange assumes delivery failed and tries again. + +The portal lists one further cause that is not about the address at all: application routing. The request reaches the server but is dispatched to the wrong handler by a mismatched route, a load balancer rule or an endpoint version. + +## Finding a participant + +A Provider does not hard-code the payers it deals with. It asks the registry. + +The participant list call takes a role, so a Provider asks for everyone registered as a Payer, and can narrow by date range and by whether the entity is government or private. The calling system then filters by name if the user is looking for a specific insurer. + +What matters downstream is the chosen payer's participant code, because it is one half of the address on every subsequent envelope. The other half, which is not always the same code, comes from the policy lookup below. + +## Authenticating + +Every call carries a bearer token. The token comes from the ABDM gateway's sessions endpoint, not from NHCX itself, using the Milestone 1 client ID and secret. + +Tokens are short-lived. The portal's documents disagree on exactly how short, with five minutes, twenty minutes and a hundred minutes all appearing. Build for the strictest: refresh automatically, and treat a `401` as "get a new token and retry" rather than as a failure. + +Sandbox addresses: + +- Sessions: `https://dev.abdm.gov.in/api/hiecm/gateway/v3/sessions`, which supersedes the older `https://dev.abdm.gov.in/gateway/v0.5/sessions` still shown in earlier documents +- Participant service: `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` +- Use cases: `https://apisbx.abdm.gov.in/hcx/v1` + +The production participant service is at `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice`. The production use-case address is shared after sandbox exit. + +## Certificates and encryption + +Before sending anything to a participant, the sender needs that participant's public key. + +The certificate fetch takes a participant ID and returns its key material, as a PEM-encoded X.509 certificate or, for shorter keys, an SPKI public key. Try the X.509 import first and fall back to SPKI. + +**Cache certificates.** Fetching a payer's key before every request is a round trip that buys nothing, since keys change rarely. A 24-hour cache is the practical default. + +## Finding a policy + +Once the payer is known, the beneficiary has to be matched to a policy with that payer. The lookup accepts three identifiers, and a system that does not know which will work should try them in order of reliability. + +- **ABHA number.** The strongest, and the one to try first. +- **Member ID.** The policy or member number captured at admission. +- **Mobile number.** The weakest, since a number may be shared or out of date. + +What comes back, for each policy, is the insurer, who processes claims for it, the member ID, and the product. Two of those are participant codes and they are not always the same. + +**Send claims to the processor, not the insurer.** An insurer may handle its own claims, in which case its `payerid` and `processingid` are the same code. Or it may use a TPA, in which case `processingid` is the TPA's participant code and that is where every request must go. The policy lookup tells you which. Put `processingid` on the envelope as the recipient. Pointing at `payerid` instead is the portal's seventh most common mistake, and the request goes nowhere useful. + +A lookup that succeeds is worth keeping. The policy set for a patient does not change between one department and the next, so cache against the patient and provide a way to force a refresh. If the lookup returns no processor code, stop; no claim-side call can be addressed. + +## Linking a policy to ABHA + +The reason an ABHA number works as a policy identifier at all is that someone linked it earlier. + +Linking is a Payer-side action, performed when the policy is created. The insurer links the beneficiary's ABHA number, mobile and member ID to the policy's products, naming itself as the payer and its TPA, or itself, as the processor. Only the party named as payer or processor can de-link it later; the exchange checks the caller's credentials against the link. If an insurer changes TPA, every affected policy is de-linked and re-linked with the new processor. + +The effect is felt at the point of care. A beneficiary who walks in with only an ABHA number can be resolved to a policy without a card or a member ID, which is the whole point of linking it in the first place. + +## From sandbox to production + +Joining the network is a certification, not a form. The path for a hospital runs: + +1. **Register the facility** in the Health Facility Registry. +2. **Apply on the ABDM sandbox**, choosing Providers and Payers with Milestone 1 as the intent. This yields the client ID and secret. +3. **Complete Milestone 1**, which is ABHA creation and verification, then functional testing, the WASA security audit and the HTC demo. NHCX requires M1 to be in place first. +4. **Register on the NHCX sandbox** with the same credentials and create a participant for each facility. +5. **Integrate and test** against the sandbox, using the dummy payer described in the use cases chapter. +6. **Get certified.** Email sample FHIR bundles to `hcx.integration@nha.gov.in` for NRCeS validation, give an internal demo to the NHA team, then the HTC demo before NRCeS, IRDAI, TCS and NHA. +7. **Go to production.** NHA confirms, adds the provider role to the production client ID, and the participant is created there through the registration steps above. +8. **Pilot, train, go live.** NHA recommends a small pilot and staff training before switching fully. + +Payers follow the same shape but enrol through the NHA or IRDAI portal, which registers them after scrutiny and asks the ABDM gateway team to issue credentials with the payer or TPA role. + +A participant can also leave. Voluntarily, when a business shuts, merges or moves exchange. Involuntarily, when a regulator suspends it, when it repeatedly breaches service levels, or when it misuses the network. Involuntary removal comes with warnings and a right of appeal through the grievance process. + +## Why this comes first + +A patient is not cashless simply because they hold insurance. Two things have to be true: the admission record must carry the scheme, payer, identifier and policy number, and the system must have resolved a valid processor code, product code and member ID. A patient can look correctly admitted as insured on screen while every NHCX call still fails, because the second condition was never met. + +The order is fixed. Discover the payer, then discover the policy. Take the processor code, member ID and product from what came back, fetch the plan and its benefits, check eligibility, and only then submit a preauthorisation. + +The next chapter opens the envelope every one of those calls travels in. The chapter after it lists the calls themselves. diff --git a/site/src/data/reference-links.json b/site/src/data/reference-links.json index 75a3d39c7..6c02bdc21 100644 --- a/site/src/data/reference-links.json +++ b/site/src/data/reference-links.json @@ -34,5 +34,21 @@ { "label": "PHR application services", "to": "/reference/hiecm-phr-services" + }, + { + "label": "NHCX biometric authentication", + "to": "/reference/nhcx-biometric" + }, + { + "label": "NHCX session token", + "to": "/reference/nhcx-gateway" + }, + { + "label": "NHCX participant service", + "to": "/reference/nhcx-participant" + }, + { + "label": "NHCX use case endpoints", + "to": "/reference/nhcx-usecases" } ] diff --git a/site/static/agent-setup/prompt.md b/site/static/agent-setup/prompt.md index bd92a6290..42c13eed6 100644 --- a/site/static/agent-setup/prompt.md +++ b/site/static/agent-setup/prompt.md @@ -1,4 +1,4 @@ -These are official instructions from the ABDM Developer Portal (catalogue version 2026.08.24, built 2026-09-02) to set up an AI development environment for integrating with ABDM, India's health data network. +These are official instructions from the ABDM Developer Portal (catalogue version 2026.08.24, built 2026-09-07) to set up an AI development environment for integrating with ABDM, India's health data network. Complete the steps yourself by running the commands directly. Ask the user only the questions in step 1. @@ -52,13 +52,7 @@ mkdir -p .claude/skills/abdm-m1 && curl -fsSL /skills/abdm-m1/SKILL.md -o .claud ## 3. Connect the Docs MCP server -The portal serves its catalogue live over MCP (streamable HTTP). Register it with your agent: - -``` -claude mcp add --transport http abdm-docs http://localhost:8080/mcp -``` - -For other agents, add an HTTP MCP server named `abdm-docs` at `http://localhost:8080/mcp` using their config format. +The portal's Docs MCP server is not publicly reachable yet. Skip this step; /docs/hiecm/v3/getting-started/mcp has the current status and the connect instructions for when it opens. ## 4. Report back From 134699531bd53d7b7bf161b1cda7a8a2c48279de Mon Sep 17 00:00:00 2001 From: Soubhik BIswas Date: Wed, 9 Sep 2026 12:22:00 +0530 Subject: [PATCH 4/7] regenerate atom routes for the nhcx pages, and stop a second platform claiming the hiecm error codes atom check:routes was red because catalogue/atom-routes.json still described the site as it stood before the nhcx pages landed. Regenerating alone would have moved hiecm.concept.error-codes onto the nhcx page. build-api-reference.mjs hardcoded covers: [hiecm.concept.error-codes] on the error codes reference page of every platform, so nhcx generated a second page claiming the same atom and took its route. The claim is now made only for hiecm/v3, matching the isHiecmV3 guard the troubleshooting link on the same page already uses. Routes mapped goes from 178 to 180: shared.glossary.key-material and shared.glossary.snomed-ct were unmapped and now resolve to nhcx pages. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01HCTFxNSjzdtFTh2BgZ8qnp --- catalogue/atom-routes.json | 28 ++++++++++++++-------------- scripts/build-api-reference.mjs | 4 +++- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/catalogue/atom-routes.json b/catalogue/atom-routes.json index d400e9679..3f2197a9e 100644 --- a/catalogue/atom-routes.json +++ b/catalogue/atom-routes.json @@ -1,8 +1,8 @@ { "note": "Generated by scripts/build-atom-routes.mjs. Do not edit by hand. An atom never carries a route; a page may claim one with covers:.", "atoms": 196, - "mapped": 178, - "derived": 177, + "mapped": 180, + "derived": 179, "validatedAgainstBuild": true, "routes": [ { @@ -269,9 +269,9 @@ { "atom": "hiecm.endpoint.gateway-sessions", "type": "endpoint", - "route": "/docs/hiecm/v3/api/p1/endpoints/p1-session-api", + "route": "/docs/nhcx/v1/api/nhcx-gateway/endpoints/nhcx-sessions-create", "anchor": null, - "link": "/docs/hiecm/v3/api/p1/endpoints/p1-session-api", + "link": "/docs/nhcx/v1/api/nhcx-gateway/endpoints/nhcx-sessions-create", "rule": "method and path join, module unconfirmed", "confidence": "needs review" }, @@ -1520,11 +1520,11 @@ { "atom": "shared.glossary.key-material", "type": "glossary", - "route": null, - "anchor": null, - "link": null, - "rule": "no rule matched", - "confidence": "unmapped" + "route": "/docs/nhcx/v1/getting-started/recipient-certificate", + "anchor": "what-comes-back", + "link": "/docs/nhcx/v1/getting-started/recipient-certificate#what-comes-back", + "rule": "term defined on recipient-certificate", + "confidence": "derived" }, { "atom": "shared.glossary.kyc", @@ -1682,11 +1682,11 @@ { "atom": "shared.glossary.snomed-ct", "type": "glossary", - "route": null, - "anchor": null, - "link": null, - "rule": "no rule matched", - "confidence": "unmapped" + "route": "/docs/nhcx/v1/getting-started/nhcx-glossary", + "anchor": "organisations-and-programmes", + "link": "/docs/nhcx/v1/getting-started/nhcx-glossary#organisations-and-programmes", + "rule": "term defined on nhcx-glossary", + "confidence": "derived" }, { "atom": "shared.glossary.timestamp-header", diff --git a/scripts/build-api-reference.mjs b/scripts/build-api-reference.mjs index 837581f4a..a481b0c0d 100644 --- a/scripts/build-api-reference.mjs +++ b/scripts/build-api-reference.mjs @@ -737,7 +737,9 @@ for (const {platform, version, files} of tree) { 'Error codes', 'Every error code the specifications carry, with its message and what to do.', 3, - ['hiecm.concept.error-codes'], + // Only the HIE-CM page covers this atom. A second platform claiming the + // same id would take its route in atom-routes.json. + isHiecmV3 ? ['hiecm.concept.error-codes'] : [], ), '# Error codes', '', From 5aacf818a8241c09f6bd252f3dbacedfa275610d Mon Sep 17 00:00:00 2001 From: Soubhik BIswas Date: Mon, 14 Sep 2026 00:45:55 +0530 Subject: [PATCH 5/7] updated docs --- catalogue/openapi/nhcx/v1/README.md | 26 +- .../openapi/nhcx/v1/nhcx-adjudicator.yaml | 398 +++ catalogue/openapi/nhcx/v1/nhcx-biometric.yaml | 657 +++- catalogue/openapi/nhcx/v1/nhcx-claim.yaml | 1075 +++++++ .../openapi/nhcx/v1/nhcx-communication.yaml | 832 ++++++ .../openapi/nhcx/v1/nhcx-eligibility.yaml | 904 ++++++ catalogue/openapi/nhcx/v1/nhcx-gateway.yaml | 148 - .../openapi/nhcx/v1/nhcx-insurance-plan.yaml | 916 ++++++ .../openapi/nhcx/v1/nhcx-onboarding.yaml | 659 +++++ catalogue/openapi/nhcx/v1/nhcx-other.yaml | 2631 +++++++++++++++++ .../openapi/nhcx/v1/nhcx-participant.yaml | 480 --- .../openapi/nhcx/v1/nhcx-payment-notice.yaml | 846 ++++++ catalogue/openapi/nhcx/v1/nhcx-preauth.yaml | 1106 +++++++ .../nhcx/v1/nhcx-predetermination.yaml | 474 +++ catalogue/openapi/nhcx/v1/nhcx-registry.yaml | 2218 ++++++++++++++ catalogue/openapi/nhcx/v1/nhcx-session.yaml | 183 ++ catalogue/openapi/nhcx/v1/nhcx-status.yaml | 783 +++++ catalogue/openapi/nhcx/v1/nhcx-usecases.yaml | 881 ------ site/docs/nhcx/v1/README.md | 27 +- site/docs/nhcx/v1/api/README.md | 11 +- site/docs/nhcx/v1/api/adjudicator/index.md | 36 + site/docs/nhcx/v1/api/biometric/index.md | 36 + site/docs/nhcx/v1/api/claim/index.md | 45 + site/docs/nhcx/v1/api/communication/index.md | 43 + site/docs/nhcx/v1/api/eligibility/index.md | 44 + site/docs/nhcx/v1/api/index.md | 49 - site/docs/nhcx/v1/api/insurance-plan/index.md | 44 + .../v1/api/nhcx-biometric/_category_.json | 4 - .../nhcx/v1/api/nhcx-gateway/_category_.json | 4 - .../v1/api/nhcx-participant/_category_.json | 4 - .../nhcx/v1/api/nhcx-usecases/_category_.json | 4 - site/docs/nhcx/v1/api/onboarding/index.md | 36 + site/docs/nhcx/v1/api/other/index.md | 57 + site/docs/nhcx/v1/api/payment-notice/index.md | 43 + site/docs/nhcx/v1/api/preauth/index.md | 47 + .../nhcx/v1/api/predetermination/index.md | 41 + site/docs/nhcx/v1/api/registry/index.md | 56 + site/docs/nhcx/v1/api/session/index.md | 32 + site/docs/nhcx/v1/api/status/index.md | 43 + site/docs/nhcx/v1/building-a-payer/README.md | 6 - .../nhcx/v1/building-a-payer/_category_.json | 4 - .../nhcx/v1/building-a-payer/checklist.md | 97 - .../nhcx/v1/building-a-provider/README.md | 7 - .../v1/building-a-provider/_category_.json | 4 - .../nhcx/v1/building-a-provider/checklist.md | 101 - .../building-a-provider/pmjay-sandbox-run.md | 191 -- site/docs/nhcx/v1/concepts/README.md | 6 - site/docs/nhcx/v1/concepts/_category_.json | 2 +- .../docs/nhcx/v1/concepts/claim-settlement.md | 91 - .../v1/concepts/how-claims-move-on-nhcx.md | 156 + site/docs/nhcx/v1/concepts/index.md | 37 - .../nhcx/v1/concepts/jwe-status-and-errors.md | 112 +- site/docs/nhcx/v1/concepts/nhcx-use-cases.md | 991 +++++++ .../concepts/nhcx-way-of-claim-settlement.md | 177 -- .../nhcx/v1/concepts/payer-flexibility.md | 72 + site/docs/nhcx/v1/concepts/pmjay-on-nhcx.md | 17 +- .../nhcx/v1/concepts/pmjay-scheme-rules.md | 130 +- .../pmjay-use-cases.md | 43 +- site/docs/nhcx/v1/concepts/what-nhcx-is.md | 103 - site/docs/nhcx/v1/concepts/workflow-codes.md | 209 ++ site/docs/nhcx/v1/exchanges/README.md | 8 - site/docs/nhcx/v1/exchanges/_category_.json | 4 - site/docs/nhcx/v1/exchanges/index.md | 50 - site/docs/nhcx/v1/exchanges/use-cases.md | 291 -- site/docs/nhcx/v1/exchanges/workflow-codes.md | 232 -- .../nhcx/v1/fhir-reference/_category_.json | 4 - .../fhir-reference/bundles-and-conventions.md | 98 - .../cancel-reprocess-and-shortfall.md | 142 - .../fhir-reference/claim-query-and-answer.md | 122 - .../nhcx/v1/fhir-reference/claim-request.md | 172 -- .../nhcx/v1/fhir-reference/claim-response.md | 113 - .../v1/fhir-reference/codes-and-value-sets.md | 188 -- .../nhcx/v1/fhir-reference/communication.md | 129 - .../coverage-eligibility-request.md | 87 - .../coverage-eligibility-response.md | 117 - .../fhir-reference/insurance-plan-request.md | 87 - .../insurance-plan-response-coverage-based.md | 81 - .../insurance-plan-response-package-based.md | 171 -- .../fhir-reference/insurance-plan-response.md | 84 - .../payment-notice-and-acknowledgement.md | 117 - .../preauthorisation-enhancement.md | 120 - .../preauthorisation-query-and-answer.md | 135 - .../preauthorisation-request.md | 121 - .../preauthorisation-response.md | 126 - .../predetermination-status-and-search.md | 81 - .../nhcx/v1/fhir-reference/sample-bundles.md | 157 - site/docs/nhcx/v1/getting-started/README.md | 6 - .../nhcx/v1/getting-started/_category_.json | 5 +- .../docs/nhcx/v1/getting-started/base-urls.md | 67 + .../building-and-sending-a-jwe.md | 101 +- ...=> creating-and-updating-a-participant.md} | 129 +- ...md => fetching-a-recipient-certificate.md} | 27 +- .../finding-participants-and-policies.md | 66 +- .../{nhcx-glossary.md => glossary.md} | 15 +- .../docs/nhcx/v1/getting-started/glossary.mdx | 23 - .../nhcx/v1/getting-started/nhcx-adapter.md | 31 +- .../getting-started/receiving-a-callback.md | 67 +- .../nhcx/v1/getting-started/session-token.md | 146 +- .../v1/getting-started/status-and-search.md | 174 ++ .../{index.mdx => the-base-framework.md} | 33 +- .../v1/getting-started/your-certificate.md | 14 +- site/docs/nhcx/v1/go-live/_category_.json | 4 + site/docs/nhcx/v1/go-live/index.md | 96 + site/docs/nhcx/v1/index.md | 166 +- site/docs/nhcx/v1/reference/README.md | 10 +- .../v1/reference/access-control-and-roles.md | 154 + .../docs/nhcx/v1/reference/envelope-fields.md | 234 ++ .../reference/environments-and-addresses.md | 170 ++ .../nhcx/v1/reference/error-code-guide.md | 517 ++++ .../nhcx/v1/reference/fhir/_category_.json | 4 + .../fhir/cancel-reprocess-and-shortfall.md | 594 ++++ .../reference/fhir/claim-query-and-answer.md | 445 +++ .../nhcx/v1/reference/fhir/claim-request.md | 367 +++ .../nhcx/v1/reference/fhir/claim-response.md | 210 ++ .../v1/reference/fhir/codes-and-value-sets.md | 856 ++++++ .../nhcx/v1/reference/fhir/communication.md | 301 ++ .../fhir/coverage-eligibility-request.md | 264 ++ .../fhir/coverage-eligibility-response.md | 255 ++ site/docs/nhcx/v1/reference/fhir/index.md | 302 ++ .../reference/fhir/insurance-plan-request.md | 152 + .../insurance-plan-response-coverage-based.md | 162 + .../fhir/insurance-plan-response-overview.md | 221 ++ .../insurance-plan-response-package-based.md | 231 ++ .../payment-notice-and-acknowledgement.md | 304 ++ .../fhir/preauthorisation-enhancement.md | 298 ++ .../fhir/preauthorisation-query-and-answer.md | 374 +++ .../fhir/preauthorisation-request.md | 411 +++ .../fhir/preauthorisation-response.md | 229 ++ .../predetermination-status-and-search.md | 426 +++ .../nhcx/v1/reference/governance-and-audit.md | 221 ++ .../notifications-and-patient-apps.md | 233 ++ .../docs/nhcx/v1/reference/troubleshooting.md | 151 + site/docs/nhcx/v1/registries/README.md | 6 - site/docs/nhcx/v1/registries/_category_.json | 2 +- site/docs/nhcx/v1/registries/index.md | 167 +- .../registries/participants-and-policies.md | 156 - site/docs/nhcx/v1/roles/_category_.json | 4 + site/docs/nhcx/v1/roles/payer/_category_.json | 9 + .../payer}/adjudicating-claims.md | 17 +- .../payer}/adjudicating-preauthorisation.md | 18 +- .../payer}/eligibility-response.md | 19 +- .../payer}/index.md | 35 +- .../nhcx/v1/roles/payer/payer-checklist.md | 197 ++ .../payment-notice-and-communication.md | 49 +- .../payer}/policies-and-plans.md | 18 +- .../payer}/ui-guide.md | 18 +- .../nhcx/v1/roles/provider/_category_.json | 9 + .../provider/biometric-authentication.md | 383 +++ .../provider}/discharge-and-claim.md | 18 +- .../provider}/index.md | 35 +- .../provider}/insurance-plan.md | 19 +- .../provider}/payment-and-communication.md | 17 +- .../roles/provider/pmjay-adjudication-apis.md | 217 ++ .../provider}/pmjay-provider.md | 61 +- .../v1/roles/provider/pmjay-sandbox-run.md | 217 ++ .../provider}/preauthorisation.md | 22 +- .../v1/roles/provider/provider-checklist.md | 255 ++ .../provider}/registration-and-eligibility.md | 36 +- .../provider}/ui-guide.md | 18 +- 159 files changed, 26275 insertions(+), 6529 deletions(-) create mode 100644 catalogue/openapi/nhcx/v1/nhcx-adjudicator.yaml create mode 100644 catalogue/openapi/nhcx/v1/nhcx-claim.yaml create mode 100644 catalogue/openapi/nhcx/v1/nhcx-communication.yaml create mode 100644 catalogue/openapi/nhcx/v1/nhcx-eligibility.yaml delete mode 100644 catalogue/openapi/nhcx/v1/nhcx-gateway.yaml create mode 100644 catalogue/openapi/nhcx/v1/nhcx-insurance-plan.yaml create mode 100644 catalogue/openapi/nhcx/v1/nhcx-onboarding.yaml create mode 100644 catalogue/openapi/nhcx/v1/nhcx-other.yaml delete mode 100644 catalogue/openapi/nhcx/v1/nhcx-participant.yaml create mode 100644 catalogue/openapi/nhcx/v1/nhcx-payment-notice.yaml create mode 100644 catalogue/openapi/nhcx/v1/nhcx-preauth.yaml create mode 100644 catalogue/openapi/nhcx/v1/nhcx-predetermination.yaml create mode 100644 catalogue/openapi/nhcx/v1/nhcx-registry.yaml create mode 100644 catalogue/openapi/nhcx/v1/nhcx-session.yaml create mode 100644 catalogue/openapi/nhcx/v1/nhcx-status.yaml delete mode 100644 catalogue/openapi/nhcx/v1/nhcx-usecases.yaml create mode 100644 site/docs/nhcx/v1/api/adjudicator/index.md create mode 100644 site/docs/nhcx/v1/api/biometric/index.md create mode 100644 site/docs/nhcx/v1/api/claim/index.md create mode 100644 site/docs/nhcx/v1/api/communication/index.md create mode 100644 site/docs/nhcx/v1/api/eligibility/index.md delete mode 100644 site/docs/nhcx/v1/api/index.md create mode 100644 site/docs/nhcx/v1/api/insurance-plan/index.md delete mode 100644 site/docs/nhcx/v1/api/nhcx-biometric/_category_.json delete mode 100644 site/docs/nhcx/v1/api/nhcx-gateway/_category_.json delete mode 100644 site/docs/nhcx/v1/api/nhcx-participant/_category_.json delete mode 100644 site/docs/nhcx/v1/api/nhcx-usecases/_category_.json create mode 100644 site/docs/nhcx/v1/api/onboarding/index.md create mode 100644 site/docs/nhcx/v1/api/other/index.md create mode 100644 site/docs/nhcx/v1/api/payment-notice/index.md create mode 100644 site/docs/nhcx/v1/api/preauth/index.md create mode 100644 site/docs/nhcx/v1/api/predetermination/index.md create mode 100644 site/docs/nhcx/v1/api/registry/index.md create mode 100644 site/docs/nhcx/v1/api/session/index.md create mode 100644 site/docs/nhcx/v1/api/status/index.md delete mode 100644 site/docs/nhcx/v1/building-a-payer/README.md delete mode 100644 site/docs/nhcx/v1/building-a-payer/_category_.json delete mode 100644 site/docs/nhcx/v1/building-a-payer/checklist.md delete mode 100644 site/docs/nhcx/v1/building-a-provider/README.md delete mode 100644 site/docs/nhcx/v1/building-a-provider/_category_.json delete mode 100644 site/docs/nhcx/v1/building-a-provider/checklist.md delete mode 100644 site/docs/nhcx/v1/building-a-provider/pmjay-sandbox-run.md delete mode 100644 site/docs/nhcx/v1/concepts/README.md delete mode 100644 site/docs/nhcx/v1/concepts/claim-settlement.md create mode 100644 site/docs/nhcx/v1/concepts/how-claims-move-on-nhcx.md delete mode 100644 site/docs/nhcx/v1/concepts/index.md create mode 100644 site/docs/nhcx/v1/concepts/nhcx-use-cases.md delete mode 100644 site/docs/nhcx/v1/concepts/nhcx-way-of-claim-settlement.md create mode 100644 site/docs/nhcx/v1/concepts/payer-flexibility.md rename site/docs/nhcx/v1/{exchanges => concepts}/pmjay-use-cases.md (92%) delete mode 100644 site/docs/nhcx/v1/concepts/what-nhcx-is.md create mode 100644 site/docs/nhcx/v1/concepts/workflow-codes.md delete mode 100644 site/docs/nhcx/v1/exchanges/README.md delete mode 100644 site/docs/nhcx/v1/exchanges/_category_.json delete mode 100644 site/docs/nhcx/v1/exchanges/index.md delete mode 100644 site/docs/nhcx/v1/exchanges/use-cases.md delete mode 100644 site/docs/nhcx/v1/exchanges/workflow-codes.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/_category_.json delete mode 100644 site/docs/nhcx/v1/fhir-reference/bundles-and-conventions.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/cancel-reprocess-and-shortfall.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/claim-query-and-answer.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/claim-request.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/claim-response.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/codes-and-value-sets.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/communication.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/coverage-eligibility-request.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/coverage-eligibility-response.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/insurance-plan-request.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/insurance-plan-response-coverage-based.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/insurance-plan-response-package-based.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/insurance-plan-response.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/payment-notice-and-acknowledgement.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/preauthorisation-enhancement.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/preauthorisation-query-and-answer.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/preauthorisation-request.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/preauthorisation-response.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/predetermination-status-and-search.md delete mode 100644 site/docs/nhcx/v1/fhir-reference/sample-bundles.md delete mode 100644 site/docs/nhcx/v1/getting-started/README.md create mode 100644 site/docs/nhcx/v1/getting-started/base-urls.md rename site/docs/nhcx/v1/getting-started/{participant-record.md => creating-and-updating-a-participant.md} (54%) rename site/docs/nhcx/v1/getting-started/{recipient-certificate.md => fetching-a-recipient-certificate.md} (68%) rename site/docs/nhcx/v1/getting-started/{nhcx-glossary.md => glossary.md} (93%) delete mode 100644 site/docs/nhcx/v1/getting-started/glossary.mdx create mode 100644 site/docs/nhcx/v1/getting-started/status-and-search.md rename site/docs/nhcx/v1/getting-started/{index.mdx => the-base-framework.md} (67%) create mode 100644 site/docs/nhcx/v1/go-live/_category_.json create mode 100644 site/docs/nhcx/v1/go-live/index.md create mode 100644 site/docs/nhcx/v1/reference/access-control-and-roles.md create mode 100644 site/docs/nhcx/v1/reference/envelope-fields.md create mode 100644 site/docs/nhcx/v1/reference/environments-and-addresses.md create mode 100644 site/docs/nhcx/v1/reference/error-code-guide.md create mode 100644 site/docs/nhcx/v1/reference/fhir/_category_.json create mode 100644 site/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall.md create mode 100644 site/docs/nhcx/v1/reference/fhir/claim-query-and-answer.md create mode 100644 site/docs/nhcx/v1/reference/fhir/claim-request.md create mode 100644 site/docs/nhcx/v1/reference/fhir/claim-response.md create mode 100644 site/docs/nhcx/v1/reference/fhir/codes-and-value-sets.md create mode 100644 site/docs/nhcx/v1/reference/fhir/communication.md create mode 100644 site/docs/nhcx/v1/reference/fhir/coverage-eligibility-request.md create mode 100644 site/docs/nhcx/v1/reference/fhir/coverage-eligibility-response.md create mode 100644 site/docs/nhcx/v1/reference/fhir/index.md create mode 100644 site/docs/nhcx/v1/reference/fhir/insurance-plan-request.md create mode 100644 site/docs/nhcx/v1/reference/fhir/insurance-plan-response-coverage-based.md create mode 100644 site/docs/nhcx/v1/reference/fhir/insurance-plan-response-overview.md create mode 100644 site/docs/nhcx/v1/reference/fhir/insurance-plan-response-package-based.md create mode 100644 site/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement.md create mode 100644 site/docs/nhcx/v1/reference/fhir/preauthorisation-enhancement.md create mode 100644 site/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer.md create mode 100644 site/docs/nhcx/v1/reference/fhir/preauthorisation-request.md create mode 100644 site/docs/nhcx/v1/reference/fhir/preauthorisation-response.md create mode 100644 site/docs/nhcx/v1/reference/fhir/predetermination-status-and-search.md create mode 100644 site/docs/nhcx/v1/reference/governance-and-audit.md create mode 100644 site/docs/nhcx/v1/reference/notifications-and-patient-apps.md create mode 100644 site/docs/nhcx/v1/reference/troubleshooting.md delete mode 100644 site/docs/nhcx/v1/registries/README.md delete mode 100644 site/docs/nhcx/v1/registries/participants-and-policies.md create mode 100644 site/docs/nhcx/v1/roles/_category_.json create mode 100644 site/docs/nhcx/v1/roles/payer/_category_.json rename site/docs/nhcx/v1/{building-a-payer => roles/payer}/adjudicating-claims.md (88%) rename site/docs/nhcx/v1/{building-a-payer => roles/payer}/adjudicating-preauthorisation.md (88%) rename site/docs/nhcx/v1/{building-a-payer => roles/payer}/eligibility-response.md (83%) rename site/docs/nhcx/v1/{building-a-payer => roles/payer}/index.md (79%) create mode 100644 site/docs/nhcx/v1/roles/payer/payer-checklist.md rename site/docs/nhcx/v1/{building-a-payer => roles/payer}/payment-notice-and-communication.md (68%) rename site/docs/nhcx/v1/{building-a-payer => roles/payer}/policies-and-plans.md (83%) rename site/docs/nhcx/v1/{building-a-payer => roles/payer}/ui-guide.md (93%) create mode 100644 site/docs/nhcx/v1/roles/provider/_category_.json create mode 100644 site/docs/nhcx/v1/roles/provider/biometric-authentication.md rename site/docs/nhcx/v1/{building-a-provider => roles/provider}/discharge-and-claim.md (87%) rename site/docs/nhcx/v1/{building-a-provider => roles/provider}/index.md (79%) rename site/docs/nhcx/v1/{building-a-provider => roles/provider}/insurance-plan.md (88%) rename site/docs/nhcx/v1/{building-a-provider => roles/provider}/payment-and-communication.md (89%) create mode 100644 site/docs/nhcx/v1/roles/provider/pmjay-adjudication-apis.md rename site/docs/nhcx/v1/{building-a-provider => roles/provider}/pmjay-provider.md (78%) create mode 100644 site/docs/nhcx/v1/roles/provider/pmjay-sandbox-run.md rename site/docs/nhcx/v1/{building-a-provider => roles/provider}/preauthorisation.md (88%) create mode 100644 site/docs/nhcx/v1/roles/provider/provider-checklist.md rename site/docs/nhcx/v1/{building-a-provider => roles/provider}/registration-and-eligibility.md (82%) rename site/docs/nhcx/v1/{building-a-provider => roles/provider}/ui-guide.md (94%) diff --git a/catalogue/openapi/nhcx/v1/README.md b/catalogue/openapi/nhcx/v1/README.md index 0b8ad963d..eeddde355 100644 --- a/catalogue/openapi/nhcx/v1/README.md +++ b/catalogue/openapi/nhcx/v1/README.md @@ -1,24 +1,6 @@ # NHCX V1 specifications -One OpenAPI 3.1 YAML per module. Dropping a file here generates its endpoint -pages under `site/docs/nhcx/v1/api/` and publishes an interactive reference -at `/reference/`. - -Name the module in the info block: - -```yaml -info: - x-portal: - module: m1 # folder name under api/ - label: M1 ABHA identity - position: 2 # order among this gateway's modules -``` - -See `../../CONVENTIONS.md` for how the specs are written. - -Two rules the build enforces: - -- The file name must be unique across the whole `openapi/` tree, because it is - the served path and the Scalar route. Prefix it with the gateway. -- Generated pages carry `generated: true`. Never hand-write a page at a - generated name; the build stops rather than overwrite one. +One OpenAPI 3.1 file per folder of the NHCX package's Bruno collection, written by the +package's `make ekadocs`. Callbacks are `webhooks`, error codes are `x-abdm-errors` blocks. +Change the package and port again rather than editing these files; see `../../CONVENTIONS.md` +for the rules they follow. diff --git a/catalogue/openapi/nhcx/v1/nhcx-adjudicator.yaml b/catalogue/openapi/nhcx/v1/nhcx-adjudicator.yaml new file mode 100644 index 000000000..1931cb5ef --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-adjudicator.yaml @@ -0,0 +1,398 @@ +# NHCX PMJAY adjudicator, from the NHCX package's Bruno folder apis/12-adjudicator. +# +# Written by the package's system/build-ekadocs.mjs (make ekadocs); change the .bru +# requests there and port again rather than editing this file. +# +# Rules this file follows: catalogue/openapi/CONVENTIONS.md +openapi: 3.1.1 +info: + x-portal: + module: adjudicator + label: PMJAY adjudicator + position: 12 + title: NHCX PMJAY adjudicator + summary: A PMJAY case is not decided over NHCX. + description: |- + The PMJAY adjudicator calls on the National Health Claims Exchange (NHCX): 4 operations. + + A PMJAY case is not decided over NHCX. + + Guides that use these calls: [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback), [PMJAY sandbox run](/docs/nhcx/v1/roles/provider/pmjay-sandbox-run), [PMJAY adjudication APIs](/docs/nhcx/v1/roles/provider/pmjay-adjudication-apis). + + Production address for the PMJAY payer service, role lookup: not published. Confirm at onboarding. + + Production address for the PMJAY payer service, act on a case: not published. Confirm at onboarding. + + Production address for the Dummy payer: A sandbox test hook only. + version: nhcx-v1 + license: + name: MIT + identifier: MIT + contact: + name: NHCX sandbox + url: https://hcxsbx.abdm.gov.in + x-abdm-gateway: nhcx + x-abdm-module: adjudicator + x-abdm-phase: 1 + x-abdm-roles: + - provider +x-abdm-sources: + - file: nhcx-package/apis/12-adjudicator + role: upstream + hash: sha256:cf374ac235b2e017924e723b2904d8305c73a0d0c30d252edce5b09f713e80c0 + note: The package's Bruno collection, one request per operation. + - file: nhcx-package/baseurl.yaml + role: upstream + hash: sha256:47d8412abbfc53b1e1038410e7980eee029d7b1be5082f4ae6c1d4e16ae0dd0f + note: The sandbox and production hosts. +servers: + - url: https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer + description: Sandbox, Dummy payer. +tags: + - name: PMJAY adjudicator + description: A PMJAY case is not decided over NHCX. +security: + - bearerAuth: [] +paths: + /pmjay/sbxhcx/nhcxpayerservice/v1/get/user-role: + post: + operationId: adjudicator_adjudicator_role + x-abdm-use-case: PMJAY adjudicator + tags: + - PMJAY adjudicator + summary: "Adjudicator: role for a case" + description: |- + Asks the NHCX Payer Service which role in the State Health Agency's Transaction Management System holds a PMJAY case, and so which actions may be taken on it next. + + ### Business purpose + + A PMJAY case is not decided over NHCX. The exchange carries the submission to the scheme and the verdict back, but the decision is taken in the SHA's own system, by a named role, on that system's schedule. This call is how an integrator reads that queue. It is also the only way to see where a PMJAY case stands, because a status `Task` sent to the scheme over NHCX is refused, first with `PAYR-1018` and then with `PAYR-1008`. + + ### When to use + + Before every call to `Adjudicator: act on a case`, because the role that answers is the only one whose action names are legal, and whenever a PMJAY case has gone quiet. The service moves cases on its own schedule, so read the role again rather than assuming the next step. + + ### Preconditions + + - `caseid` is the scheme's case ID, the digits at the end of the case reference the payer issues, not the hospital's claim number. The sandbox hands it out inside the `PAYR-1238` refusal of a later request for the same beneficiary, and in the payer's acknowledgement and status answers once a request is accepted. + - `payerid` is the scheme payer's code. + - An ordinary ABDM session token on `bearer_auth`, with `Content-Type` and `Accept` set to `application/json`. + + ### Postconditions + + The service answers with the role that holds the case in `currentuserrole`, and `errormessage` empty. Once a case is decided, the lookup answers with no role at all. Asked about the hospital's own number, it answers `No Data found with the caseid . Please use the current active case id.` + + ### Common mistakes + + - Sending the hospital's claim number as `caseid`. + - Acting on the case without reading the role first, and being refused because it has moved. + - Reading a pre-authorisation role on a claim as an error. `PPD-Trust` while you are asking about a claim means the case has not yet left the pre-authorisation queue. + - Expecting a status API over NHCX for a PMJAY case. + + ### Best practices + + - Store the scheme's case ID beside your own claim number the moment it appears. + - Read the role before every action, and again after it. + - Expect this lookup and the action call to sit on different hosts. That is how the service is deployed, not a documentation error. + + ### Related scenario + + A hospital has raised a pre-authorisation that sits at `request.initiated`. It takes the case ID from the payer's acknowledgement and posts it here with the payer code. The answer is `PPD-Trust`, so it approves the case as that role with `Adjudicator: act on a case`. After the claim is raised it reads the role again at every step, through `CEX-Trust`, `CPD-Trust`, `ACO-Trust` and `SHA-Trust`, until the lookup answers with no role and the verdict arrives on the claim's own callback. + + ### Specification + + Chapter [PMJAY adjudication APIs](/docs/nhcx/v1/roles/provider/pmjay-adjudication-apis) of the NHCX integration specification. + servers: + - url: https://apisbx.abdm.gov.in + description: Sandbox, PMJAY payer service, role lookup. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + caseid: + type: string + payerid: + type: string + example: + caseid: + payerid: + responses: + "200": + description: The service answers with the role that holds the case in `currentuserrole`, and `errormessage` empty. + content: + application/json: + schema: + type: object + properties: + currentuserrole: + type: string + errormessage: {} + example: + currentuserrole: PPD-Trust + errormessage: null + /pmjay/hcx/nhcxpayerservice/wrapper/process/case: + post: + operationId: adjudicator_adjudicator_process + x-abdm-use-case: PMJAY adjudicator + tags: + - PMJAY adjudicator + summary: "Adjudicator: act on a case" + description: |- + Approves, rejects, queries or forwards a PMJAY case in the State Health Agency's Transaction Management System, as the role that currently holds it. + + ### Business purpose + + This is the action half of the NHCX Payer Service. A PMJAY case sits at `request.initiated` until a role acts on it here, so in the sandbox this call is what makes a case move. A scheme payer building its own side can copy the shape: the exchange carries messages, the queue decides cases, and a case ID the payer issues joins the two. + + ### When to use + + After `Adjudicator: role for a case` has named the role that holds the case, with the action spelled exactly as that role takes it: + + - `PPD-Trust`, pre-authorisation: `Approve`, `Reject`, `Query`, with `usecase` `PREAUTH`. + - `CEX-Trust`, first claim desk: `Forward`, with `usecase` `CLAIM`. + - `CPD-Trust`, second claim desk: `cpdApprove`, `cpdReject`, `Pending`, with `usecase` `CLAIM`. + - Medical Audit Committee: `Approve`, `Reject`, `iQuery`, with `usecase` `Medical Audit Committee`. + - `ACO-Trust` and `SHA-Trust`: `Approve`, `Reject`, `Pending`, with `usecase` `CLAIM`. + - Claim Review Committee: `Approve`, `Reject`, `Pending`, with `usecase` `Claim Review Committee`. + + ### Preconditions + + - `casenumber` is the scheme's case ID, not the hospital's claim number. + - `action` is spelled exactly as the holding role takes it. It is case-sensitive. + - `receivercode` is the payer's registry ID and `sendercode` the provider's participant code, both without the `@hcx` suffix. + - `memberid` names the beneficiary, and `remarks` is free text the desk records. + - `correlationid` is a fresh UUID for every call. + - An ordinary ABDM session token on `bearer_auth`. + + ### Postconditions + + Acting on the case makes the scheme issue its verdict, which reaches the provider over NHCX as an ordinary `ClaimResponse` on the original request's correlation ID. The desk call and that callback are two halves of one step, correlated by the case rather than by this call's own correlation ID. An action refused for the current role means the role has moved, or was never what you assumed. + + ### Common mistakes + + - Sending `Approve` to `CPD-Trust`, which takes `cpdApprove` and `cpdReject`. + - Sending `CLAIM` as the `usecase` at either committee, which takes its full name with spaces. + - Assuming a case walks all six claim roles. On the recorded sandbox run neither committee held the case. + - Reusing a correlation ID across desk calls. + - Raising a second request on a case while the first is still queued, which the sandbox refused with `PAYR-1322`. + + ### Best practices + + - Read the role immediately before every action. + - Retry shortly on `Event Meta Log not found for correlationId`, which means the exchange has not finished delivering the request, and on `Case not found for caseId`, which means the case is mid-filing. + - Hold both threads in a test harness: this call, and the callback it causes. + - Report the scheme's pace rather than asserting it. An enhancement may be answered `queued` again and decided minutes later. + + ### Related scenario + + On the recorded sandbox run the pre-authorisation was approved as `PPD-Trust` with `Approve` and `usecase` `PREAUTH`. After the claim was raised it was forwarded by `CEX-Trust`, approved by `CPD-Trust` as `cpdApprove`, then by `ACO-Trust` and `SHA-Trust`, each time after reading the role again and with a new correlation ID. The role lookup then answered with no role, and the approval arrived on the claim's own callback. + + ### Specification + + Chapter [PMJAY adjudication APIs](/docs/nhcx/v1/roles/provider/pmjay-adjudication-apis) of the NHCX integration specification. + servers: + - url: https://apisbeta.nha.gov.in + description: Sandbox, PMJAY payer service, act on a case. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + casenumber: + type: string + action: + type: string + receivercode: + type: string + usecase: + type: string + correlationid: + type: string + sendercode: + type: string + memberid: + type: string + remarks: + type: string + example: + casenumber: + action: Approve + receivercode: + usecase: PREAUTH + correlationid: + sendercode: + memberid: + remarks: ok + responses: + "200": + description: Acting on the case makes the scheme issue its verdict, which reaches the provider over NHCX as an ordinary `ClaimResponse` on the original request's correlation ID. + content: + application/json: + schema: + type: object + properties: + status: + type: string + message: + type: string + example: + status: success + message: Case processed + /process/request: + post: + operationId: adjudicator_dummy_payer_process_request + x-abdm-use-case: PMJAY adjudicator + tags: + - PMJAY adjudicator + summary: Dummy payer, act on a request + description: |- + Makes the sandbox dummy payer, participant `1000003538@hcx`, approve, reject or query a pre-authorisation or claim you have submitted, by correlation ID. + + ### Business purpose + + The sandbox hosts a payer that answers back, and this hook decides what it answers. It closes the loop on the first message a new integration sends. Whichever answer comes back proves the token works, the participant record is live, the exchange can reach the provider's address, the dummy payer could open the message, and the provider could read its reply. + + ### When to use + + Sandbox testing only, after submitting a pre-authorisation or claim addressed to the dummy payer. `action` is `Approve`, `Reject` or `Query`. `method` is `Preauth` or `Claim`. `correlationId` is the correlation ID of the request you sent. + + ### Preconditions + + - A pre-authorisation or claim has been sent to the dummy payer, `1000003538@hcx`, and you hold its correlation ID. + - Your callback address is registered, reachable by the exchange, and answers 202 within 30 seconds. + - An ordinary ABDM session token on `bearer_auth`. + + ### Postconditions + + The answer arrives on your callback for the request's family, `/v1/preauth/on_submit` for a pre-authorisation, as a sealed `ClaimResponse` or as a `ProtocolResponse` carrying a refusal, on the correlation ID you sent. A `Query` makes the dummy payer raise a communication request instead, which you answer on `/v1/communication/on_request` before the decision comes back on `on_submit`. + + ### Common mistakes + + - Passing the correlation ID of a request that was not addressed to the dummy payer. + - Waiting for the decision after a `Query` without answering the communication request first. + - Treating a refusal of the empty smoke-test bundle as a failure. The dummy payer rejects it because there is no `Claim` inside, and that rejection is the expected answer. + + ### Best practices + + - Test all three outcomes of each flow, not only approval. + - Make the callback handler idempotent, since the exchange retries a missed receipt. + - Keep this hook out of production code paths. It exists only in the sandbox. + + ### Related scenario + + A new provider integration sends the empty bundle from its smoke test to the dummy payer on `/v1/preauth/submit` and gets 202. It posts this hook with `action` `Approve`, `method` `Preauth` and that request's correlation ID. A `ProtocolResponse` refusing the empty bundle lands on its `/v1/preauth/on_submit`, the handler answers 202, and the base framework is proven end to end. + + ### Specification + + Chapter [Building and sending a JWE](/docs/nhcx/v1/getting-started/building-and-sending-a-jwe) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + action: + type: string + method: + type: string + correlationId: + type: string + example: + action: Approve + method: Preauth + correlationId: + responses: + "200": + description: The answer arrives on your callback for the request's family, `/v1/preauth/on_submit` for a pre-authorisation, as a sealed `ClaimResponse` or as a `ProtocolResponse` carrying a refusal, on the correlation ID you sent. + /paymentNotice/init: + post: + operationId: adjudicator_dummy_payer_paymentnotice_init + x-abdm-use-case: PMJAY adjudicator + tags: + - PMJAY adjudicator + summary: Dummy payer, send a payment notice + description: |- + Makes the sandbox dummy payer send a payment notice to the provider named, on `/v1/paymentnotice/request`. + + ### Business purpose + + A payment notice only follows a settled claim, which is slow to reach in a test. This hook makes the sandbox's dummy payer, `1000003538@hcx`, send one on demand, so a provider can build and test its payment notice handling and acknowledgement without waiting for a settlement. + + ### When to use + + Sandbox testing of the payment notice flow, once your `/v1/paymentnotice/request` callback is in place. The body names your participant code in `providerId`. It also carries a `claimNumber` field, left empty in this collection, whose effect the documentation does not describe. + + ### Preconditions + + - Your participant is registered on the sandbox with a reachable callback address. + - You host `/v1/paymentnotice/request` and answer it 202 within 30 seconds. + - An ordinary ABDM session token. + + ### Postconditions + + The dummy payer sends a payment notice to the provider named, arriving on `/v1/paymentnotice/request`. The provider acknowledges it on `/v1/paymentnotice/on_request`. + + ### Common mistakes + + - Triggering the notice before the `/v1/paymentnotice/request` handler is in place. + - Sending another participant's code in `providerId`. + - Receiving the notice and never sending the acknowledgement on `/v1/paymentnotice/on_request`. + + ### Best practices + + - Test both the receipt and the acknowledgement. + - Keep this hook out of production code paths. It exists only in the sandbox. + + ### Related scenario + + A provider has built its payment notice handler. It posts this hook with its own participant code in `providerId`. A payment notice from the dummy payer arrives on its `/v1/paymentnotice/request`. The handler answers 202, opens and records the notice, and sends the acknowledgement on `/v1/paymentnotice/on_request`. + + ### Specification + + Chapter [NHCX Use Cases](/docs/nhcx/v1/concepts/nhcx-use-cases) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + providerId: + type: string + claimNumber: + type: string + example: + providerId: + claimNumber: "" + responses: + "200": + description: The dummy payer sends a payment notice to the provider named, arriving on `/v1/paymentnotice/request`. +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + description: "On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value." + parameters: + BearerAuth: + name: bearer_auth + in: header + required: true + description: It is `bearer_auth`, not `Authorization`, on NHCX's own endpoints. + schema: + type: string + example: Bearer diff --git a/catalogue/openapi/nhcx/v1/nhcx-biometric.yaml b/catalogue/openapi/nhcx/v1/nhcx-biometric.yaml index d59cc821c..cab2d6f85 100644 --- a/catalogue/openapi/nhcx/v1/nhcx-biometric.yaml +++ b/catalogue/openapi/nhcx/v1/nhcx-biometric.yaml @@ -1,255 +1,628 @@ +# NHCX ABHA biometric authentication, from the NHCX package's Bruno folder apis/14-biometric. +# +# Written by the package's system/build-ekadocs.mjs (make ekadocs); change the .bru +# requests there and port again rather than editing this file. +# +# Rules this file follows: catalogue/openapi/CONVENTIONS.md openapi: 3.1.1 info: - title: NHCX biometric authentication - version: abdm-v3 - summary: The PMJAY beneficiary authentication APIs, outside the NHCX message set. - description: > - PMJAY requires the beneficiary to be verified biometrically at - registration and again at discharge. These calls are not NHCX exchanges: - they carry no JWE, no FHIR bundle and no workflow code, and they read - `Authorization` rather than `bearer_auth`. They are a separate API a - PMJAY integrator must implement alongside the claim exchanges. + x-portal: + module: biometric + label: ABHA biometric authentication + position: 14 + title: NHCX ABHA biometric authentication + summary: PMJAY requires proof that the beneficiary was physically present. + description: |- + The ABHA biometric authentication calls on the National Health Claims Exchange (NHCX): 6 operations. + PMJAY requires proof that the beneficiary was physically present. - On success the system holds a user token valid for 30 minutes, with a - refresh token. That token rides in the header of the eligibility check - and the preauthorisation, and a fresh authentication is required at - discharge for the claim. + Guides that use these calls: [Biometric authentication](/docs/nhcx/v1/roles/provider/biometric-authentication). + Production address for the NHCX exchange: shared by NHA after sandbox exit. - Build all three methods. Fingerprint and iris are an init-then-verify - pair on the biometric service. Face is a separate flow on the ABDM proxy: - initiate, show the patient a QR code to scan in the ABHA app, poll until - the capture completes, then verify with the Aadhaar number encrypted - under the key the portal supplies. - - - Where biometrics are not possible, the scheme's authentication consent - questionnaire stands in. The one case with no fallback is a cyclic - procedure, where a live capture is required at every visit. + Production address for the ABDM proxy: not published. Confirm at onboarding. + version: nhcx-v1 + license: + name: MIT + identifier: MIT contact: - name: NHCX integration support - url: https://hcxsbx.abdm.gov.in/#/documents - email: hcx.integration@nha.gov.in + name: NHCX sandbox + url: https://hcxsbx.abdm.gov.in x-abdm-gateway: nhcx x-abdm-module: biometric x-abdm-phase: 1 - x-abdm-roles: [provider] + x-abdm-roles: + - provider x-abdm-sources: - - file: NHCX-site/hmisdocuments/Biometric Authentication APIs Postman Collection.zip + - file: nhcx-package/apis/14-biometric role: upstream - status: not-yet-hashed - note: ABHA-Proxy collection, 3 requests. - - file: NHCX-site/hmisdocuments/FaceAuth Postman Collection.zip + hash: sha256:67a84b282e192889df0e71793d38df1c4e3615dce1337beb40f13737036b8100 + note: The package's Bruno collection, one request per operation. + - file: nhcx-package/baseurl.yaml role: upstream - status: not-yet-hashed - note: FaceAuth collection, 3 requests. + hash: sha256:47d8412abbfc53b1e1038410e7980eee029d7b1be5082f4ae6c1d4e16ae0dd0f + note: The sandbox and production hosts. servers: - url: https://apisbx.abdm.gov.in - description: Sandbox. The two flows sit under different path prefixes on the same host. + description: Sandbox. tags: - - name: Fingerprint and iris - description: The init-then-verify pair, under /hcx/abha/biometric. - - name: Face - description: The QR-and-poll flow, under /pmjay/sbxhcx/abdmproxy/abha/biometric. + - name: ABHA biometric authentication + description: PMJAY requires proof that the beneficiary was physically present. +security: + - bearerAuth: [] paths: /hcx/abha/biometric/auth/init: post: - operationId: nhcx_biometric_auth_init - tags: [Fingerprint and iris] - summary: Start a biometric authentication - description: > - Opens an authentication transaction against the beneficiary's ABHA - number and returns a transaction id the verify call quotes back. - `authMode` picks the method. + operationId: biometric_auth_init + x-abdm-use-case: ABHA biometric authentication + tags: + - ABHA biometric authentication + summary: Biometric auth init + description: |- + Starts a fingerprint or iris authentication of a PMJAY beneficiary against the ABHA registry and returns the `txnId` the verify call needs. + + ### Business purpose + + PMJAY requires proof that the beneficiary was physically present. A hospital proves it by authenticating them against their ABHA, biometrically, and the user token that results rides on the eligibility check, the pre-authorisation and the claim. A request without it, and without the consent form that stands in for it, is refused by name. These are ABDM calls built for the PMJAY payer, not NHCX calls: no JWE and no callbacks. + + ### When to use + + At the desk with the beneficiary present: at admission with `process` `Preauth`, and at discharge, and at every visit of a cyclic case, with `process` `Discharge`. `scope` selects the modality, `aadhaar-bio-verify` for fingerprint and `aadhaar-iris-verify` for iris. `authMode` is `FINGERPRINT` or `IRIS`. The NHCX-PMJAY-HMIS Integration Guide and the Biometric Authentication APIs Postman collection also list face on this call, `aadhaar-face-verify` with `FACE_AUTH`, but show no face request made this way; the face path documented end to end is `Face auth init` on the ABDM proxy host. `payerid` names the scheme payer the authentication is performed for. + + ### Preconditions + + - The beneficiary's ABHA is linked to their PMJAY card. Where it is not, biometric authentication does not apply and the scheme's existing KYC protocols are followed. + - The ABDM session token on `Authorization: Bearer`, not on `bearer_auth`. + - `loginId` is the ABHA number with hyphens, the opposite of the envelope convention. + - A capture device, whose capture needs the wrapped Aadhaar data hash built with `lr` set to `Y`. + + ### Postconditions + + Returns the `txnId` that `Biometric auth verify` quotes, with a message saying the authentication request was sent. + + ### Common mistakes + + - Sending the token on `bearer_auth` only, which gets a `401` that looks like an expired token. + - Calling it on the face-authentication host. Fingerprint and iris sit under `/hcx/abha/biometric/`, face under `/pmjay/sbxhcx/abdmproxy/abha/biometric/`. + - Stripping the hyphens from `loginId`. + - Building the wrapped Aadhaar data hash with `lr` as `N`, which the biometric APIs answer with `K-547`. + + ### Best practices + + - Implement fingerprint, iris and face. Each is mandatory, because any one of them may be the only one that works for a given patient. + - Set `process` from the stage of the case, not from a constant. + - Record the transaction ID, the method and the moment it succeeded against the case. + + ### Related scenario + + A PMJAY beneficiary arrives for admission. The desk posts this request with `scope` `["abha-login", "aadhaar-bio-verify"]`, `authMode` `FINGERPRINT`, the ABHA number with hyphens, `process` `Preauth` and the scheme payer's code, and gets a `txnId` back. The fingerprint is captured on the device and sent with that `txnId` to `Biometric auth verify`. + + ### Specification + + Chapter [Biometric authentication](/docs/nhcx/v1/roles/provider/biometric-authentication) of the NHCX integration specification. + security: [] parameters: - - {name: process, in: header, required: true, description: "The stage this authentication is for, for example Discharge on a cyclic visit.", schema: {type: string}} - - {name: payerid, in: header, required: true, description: The scheme payer's participant code., schema: {type: string}} + - $ref: "#/components/parameters/Process" + - $ref: "#/components/parameters/Payerid" requestBody: required: true content: application/json: schema: type: object - required: [scope, loginId, authMode] properties: scope: type: array - items: {type: string} - description: "`[abha-login, aadhaar-bio-verify]`, or the face or iris equivalent." - loginHint: {type: string, example: abha-number} - loginId: {type: string, description: The beneficiary's ABHA number.} - otpSystem: {type: string, example: aadhaar} + items: + type: string + loginHint: + type: string + loginId: + type: string + otpSystem: + type: string authMode: type: string - enum: [FINGERPRINT, IRIS, FACE_AUTH] example: - scope: [abha-login, aadhaar-bio-verify] + scope: + - abha-login + - aadhaar-bio-verify loginHint: abha-number - loginId: 91-XXXX-XXXX-0302 + loginId: 91-XXXX-XXXX-1234 otpSystem: aadhaar authMode: FINGERPRINT responses: "200": - description: A transaction id to quote on the verify call. + description: Returns the `txnId` that `Biometric auth verify` quotes, with a message saying the authentication request was sent. + content: + application/json: + schema: + type: object + properties: + txnId: + type: string + authMode: {} + message: + type: string + status: {} + example: + txnId: 8c8a12e3-xxxx-4278-xxxx-10acffa44f07 + authMode: null + message: FingerPrint authentication request successfully sent. + status: null /hcx/abha/biometric/auth/verify: post: - operationId: nhcx_biometric_auth_verify - tags: [Fingerprint and iris] - summary: Verify the captured biometric - description: > - Sends the captured PID block against the transaction opened by init. - On success the response carries the user token that rides on the - eligibility check and the preauthorisation. + operationId: biometric_auth_verify + x-abdm-use-case: ABHA biometric authentication + tags: + - ABHA biometric authentication + summary: Biometric auth verify + description: |- + Completes the authentication started by `Biometric auth init` with the captured PID block, and returns the beneficiary's user token, valid thirty minutes. + + ### Business purpose + + The user token this call returns is the proof of presence PMJAY asks for. It rides on the eligibility check, the pre-authorisation and the claim. Without it a request must carry the plan's consent questionnaire instead, or it is refused: `PAYR-1256` at the pre-authorisation, `PAYR-1363` at the claim. + + ### When to use + + Immediately after the capture. `authMethods` is `bio` for fingerprint and `iris` for iris, and the matching object carries the `txnId` from init and the device's PID block, in `fingerPrintAuthPid` or `irisAuthPid` accordingly. The same two sources that list a face mode on `Biometric auth init` give it here as `authMethods` `face`, with the capture in `authData.face.faceAuthPid`. + + ### Preconditions + + - A `txnId` from `Biometric auth init` for the same modality. + - The PID block from the capture device. + - The same headers as init: `Authorization: Bearer `, `process` and `payerid`. + + ### Postconditions + + On success it returns `authResult` `success`, a user `token` with `expiresIn` 1800 seconds, a `refreshToken` with `refreshExpiresIn` 1296000 seconds, fifteen days, and the ABHA `accounts` matched. + + ### Common mistakes + + - Putting the PID block under the wrong key for the modality. + - Holding the token against the session rather than the case. If it lapses mid-case and cannot be refreshed, a fresh authentication is needed. + - Standing a refreshed token in for a capture at a cyclic visit. Every visit needs a real capture. + + ### Best practices + + - Store the user token and its expiry against the case. + - Store the refresh token, and refresh automatically for the duration of the transaction cycle. + - Keep nothing from the ABHA profile beyond what the encounter needs. + + ### Related scenario + + Right after the fingerprint capture, the desk posts the `txnId` from init and the device's PID block in `fingerPrintAuthPid`, with `authMethods` `["bio"]`. The answer carries a thirty-minute token and a fifteen-day refresh token. The token goes on the header of the eligibility check and the pre-authorisation, and both tokens are stored against the case. + + ### Specification + + Chapter [Biometric authentication](/docs/nhcx/v1/roles/provider/biometric-authentication) of the NHCX integration specification. + security: [] parameters: - - {name: process, in: header, required: true, schema: {type: string}} - - {name: payerid, in: header, required: true, schema: {type: string}} + - $ref: "#/components/parameters/Process" + - $ref: "#/components/parameters/Payerid" requestBody: required: true content: application/json: schema: type: object - required: [scope, authData, authMode] properties: - scope: {type: array, items: {type: string}} - authMode: {type: string, enum: [FINGERPRINT, IRIS, FACE_AUTH]} + scope: + type: array + items: + type: string authData: type: object properties: authMethods: type: array - items: {type: string, enum: [bio, iris, face, otp]} + items: + type: string bio: type: object properties: - txnId: {type: string, format: uuid} - fingerPrintAuthPid: {type: string} - iris: - type: object - properties: - txnId: {type: string, format: uuid} - irisAuthPid: {type: string} - face: - type: object - properties: - txnId: {type: string, format: uuid} - faceAuthPid: {type: string} - otp: - type: object - properties: - txnId: {type: string, format: uuid} - otpValue: {type: string} + txnId: + type: string + fingerPrintAuthPid: + type: string + authMode: + type: string + example: + scope: + - abha-login + - aadhaar-bio-verify + authData: + authMethods: + - bio + bio: + txnId: + fingerPrintAuthPid: + authMode: FINGERPRINT responses: "200": - description: A user token valid for 30 minutes, with a refresh token. + description: On success it returns `authResult` `success`, a user `token` with `expiresIn` 1800 seconds, a `refreshToken` with `refreshExpiresIn` 1296000 seconds, fifteen days, and the ABHA `accounts` matched. + content: + application/json: + schema: + type: object + properties: + txnId: + type: string + authResult: + type: string + message: + type: string + token: + type: string + refreshToken: + type: string + expiresIn: + type: integer + refreshExpiresIn: + type: integer + accounts: + type: array + items: + type: object + properties: + ABHANumber: + type: string + name: + type: string + status: + type: string + example: + txnId: d21b3db9-478a-xxxx-xxxx-8f75e7f86b9f + authResult: success + message: … verified successfully + token: eyZhx…. + refreshToken: eyZhx…. + expiresIn: 1800 + refreshExpiresIn: 1296000 + accounts: + - ABHANumber: 91-XXXX-XXXX-1234 + name: … + status: ACTIVE /hcx/abha/biometric/auth/refresh/token: get: - operationId: nhcx_biometric_auth_refresh_token - tags: [Fingerprint and iris] - summary: Refresh the user token - description: > - Extends the 30 minute user token through a long transaction. A - refresh token is not accepted in place of a live capture on a cyclic - procedure's per-visit authentication; only for the final claim. + operationId: biometric_auth_refresh_token + x-abdm-use-case: ABHA biometric authentication + tags: + - ABHA biometric authentication + summary: Biometric auth refresh token + description: |- + Exchanges the refresh token from `Biometric auth verify` for a new thirty-minute user token without a fresh capture. + + ### Business purpose + + A beneficiary's user token lasts thirty minutes, and a case lasts much longer. The refresh keeps a case authenticated through its transaction cycle without bringing the patient back to the device each time the token lapses. + + ### When to use + + When the user token has lapsed during a transaction cycle. Refresh automatically for the duration of the cycle. Each refresh returns a new refresh token whose fifteen days run from that moment, and the portal's advice is to refresh once within every ten days and store the new token, which keeps a chain alive indefinitely. + + ### Preconditions + + - A refresh token from `Biometric auth verify` or an earlier refresh, less than fifteen days old, sent on `R-token` as `Bearer `. + - The ABDM session token on `Authorization`, with `payerid` and `process`. + + ### Postconditions + + Returns a new user token and a new refresh token. The new refresh token replaces the old one. + + ### Common mistakes + + - Sending the refresh token on `Authorization` instead of `R-token`. + - Keeping the old refresh token after a refresh. + - Using a refresh where a capture is required. On a cyclic procedure the payer pays only for cycles with a live biometric, and a refresh token is accepted only at the final claim. Every visit needs a real capture with `process` `Discharge`. + + ### Best practices + + - Refresh within every ten days and store the new token. + - Refresh automatically while a case is open. If the token has lapsed and cannot be refreshed, start a fresh authentication. + + ### Related scenario + + A beneficiary's eligibility was checked with a fresh token at admission, but the pre-authorisation is ready only after the thirty minutes have passed. The integration sends the stored refresh token on `R-token` to this endpoint, receives a new user token and a new refresh token, sends the user token on the pre-authorisation, and stores the new refresh token against the case. + + ### Specification + + Chapter [Biometric authentication](/docs/nhcx/v1/roles/provider/biometric-authentication) of the NHCX integration specification. + security: [] parameters: - - {name: R-token, in: header, required: true, description: The refresh token from the verify call., schema: {type: string}} - - {name: TIMESTAMP, in: header, required: true, schema: {type: string}} - - {name: REQUEST-ID, in: header, required: true, schema: {type: string, format: uuid}} - - {name: payerid, in: header, required: true, schema: {type: string}} - - {name: process, in: header, required: true, schema: {type: string}} + - $ref: "#/components/parameters/RToken" + - $ref: "#/components/parameters/Payerid" + - $ref: "#/components/parameters/Process" responses: "200": - description: A refreshed user token. + description: Returns a new user token and a new refresh token. /pmjay/sbxhcx/abdmproxy/abha/biometric/faceauth/init: post: - operationId: nhcx_biometric_faceauth_init - tags: [Face] - summary: Start a face authentication - description: > - Opens the face flow and returns a transaction id. The patient then - scans a QR code in the ABHA app; the capture is collected by polling - the PID endpoint below. + operationId: biometric_faceauth_init + x-abdm-use-case: ABHA biometric authentication + tags: + - ABHA biometric authentication + summary: Face auth init + description: |- + Starts a face authentication on the ABDM proxy host and returns the `txnId` the rest of the face flow quotes. + + ### Business purpose + + Face authentication is the method that works when fingerprint and iris do not. The capture happens on the patient's own phone, in the ABHA app, rather than on a hospital device. A case authenticated by fingerprint at admission can be authenticated by face at discharge, because the methods do not have to match across a case. + + ### When to use + + When fingerprint and iris are not possible for the patient. Face authentication runs on a different host from the other two modalities and takes three calls and a QR code: this call, a QR code the patient scans, polling `Face auth capture PID`, then `Face auth verify`. + + ### Preconditions + + - The ABDM session token on `Authorization`, with a fresh `REQUEST-ID` and the current `TIMESTAMP`. + - The request sent to the ABDM proxy host, under `/pmjay/sbxhcx/abdmproxy/abha/biometric/`. + - `scope` is `["abha-enrol", "face-auth"]`. + - The patient has the ABHA app on a phone. + + ### Postconditions + + Returns a `txnId`. Render `https://phrsbx.abdm.gov.in/face-auth?txnId=` as a QR code. The patient scans it with the ABHA app and completes the face scan there. + + ### Common mistakes + + - Sending it to the fingerprint host, which fails in a way that looks like a routing problem rather than a configuration one. + - Waiting for a callback. There is none, and the capture is polled. + - Treating face as optional. All three methods are mandatory to implement. + + ### Best practices + + - Keep both biometric base paths in configuration. + - Record the `txnId` against the case as soon as it arrives. + + ### Related scenario + + A patient authenticated by fingerprint at admission cannot be captured on the device at discharge. The desk calls this endpoint, shows the QR code built from the `txnId`, and the patient scans it with the ABHA app. The desk polls `Face auth capture PID` until the capture is complete, then calls `Face auth verify`. + + ### Specification + + Chapter [Biometric authentication](/docs/nhcx/v1/roles/provider/biometric-authentication) of the NHCX integration specification. + security: [] + parameters: + - $ref: "#/components/parameters/RequestId" + - $ref: "#/components/parameters/Timestamp" requestBody: required: true content: application/json: schema: type: object - required: [scope] properties: scope: type: array - items: {type: string} + items: + type: string example: - scope: [abha-enrol, face-auth] + scope: + - abha-enrol + - face-auth responses: "200": - description: A transaction id for the capture and verify calls. + description: Returns a `txnId`. /pmjay/sbxhcx/abdmproxy/abha/biometric/capture/pid: post: - operationId: nhcx_biometric_faceauth_capture_pid - tags: [Face] - summary: Poll for the captured face PID - description: > - Polled after init until the patient has completed the capture in the - ABHA app. Returns the PID block the verify call sends. + operationId: biometric_faceauth_capture_pid + x-abdm-use-case: ABHA biometric authentication + tags: + - ABHA biometric authentication + summary: Face auth capture PID + description: |- + Polls for the face capture the patient completes in the ABHA app after scanning the QR code for the `txnId` from `Face auth init`. + + ### Business purpose + + The face capture happens on the patient's phone, out of the hospital system's sight. This call is how the hospital learns that it has finished. It is the step between showing the QR code and verifying. + + ### When to use + + After showing the QR code and before `Face auth verify`, repeatedly until the capture is complete. There is no callback. + + ### Preconditions + + - A `txnId` from `Face auth init`. + - The patient has scanned the QR code built from it. + - The ABDM session token on `Authorization`, with a fresh `REQUEST-ID` and the current `TIMESTAMP`. No source sends `process` or `payerid` on this call. + - The request sent to the ABDM proxy host. + + ### Postconditions + + Answers `PENDING` with `Awaiting PID capture` until the patient finishes, then `COMPLETE` with `PID capture successful`. On `COMPLETE`, move on to `Face auth verify`. + + ### Common mistakes + + - Waiting for a callback instead of polling. + - Calling `Face auth verify` before this answers `COMPLETE`. + - Sending it to the fingerprint host. + + ### Best practices + + - Poll while the QR code is on screen, and stop when the answer is `COMPLETE`. + - Show the desk that the capture is pending, so the patient is not asked to scan twice. + + ### Related scenario + + The desk has shown the QR code for a discharge face authentication. It polls this endpoint with the `txnId` and gets `PENDING` while the patient completes the scan in the ABHA app. The next poll answers `COMPLETE`, and the desk calls `Face auth verify`. + + ### Specification + + Chapter [Biometric authentication](/docs/nhcx/v1/roles/provider/biometric-authentication) of the NHCX integration specification. + security: [] + parameters: + - $ref: "#/components/parameters/RequestId" + - $ref: "#/components/parameters/Timestamp" requestBody: required: true content: application/json: schema: type: object - required: [txnId] properties: - txnId: {type: string, format: uuid} + txnId: + type: string + example: + txnId: responses: "200": - description: The captured PID, once the patient has completed the scan. + description: Answers `PENDING` with `Awaiting PID capture` until the patient finishes, then `COMPLETE` with `PID capture successful`. + content: + application/json: + schema: + type: object + properties: + status: + type: string + message: + type: string + example: + status: COMPLETE + message: PID capture successful /pmjay/sbxhcx/abdmproxy/abha/biometric/v2/auth/verify: post: - operationId: nhcx_biometric_faceauth_verify - tags: [Face] - summary: Verify a face capture against Aadhaar - description: > - Completes the face flow. The `aadhaar` field is the beneficiary's - Aadhaar number encrypted under the public key the portal supplies, - not the twelve digits in the clear. Do not log it, do not display it, - and do not validate it as a number. + operationId: biometric_faceauth_v2_auth_verify + x-abdm-use-case: ABHA biometric authentication + tags: + - ABHA biometric authentication + summary: Face auth verify + description: |- + Completes a face authentication with the encrypted Aadhaar number, the Aadhaar-linked mobile and the `txnId`, and returns the beneficiary's user token. + + ### Business purpose + + It completes the face method with the same outcome as fingerprint and iris: the user token that proves presence to the scheme and rides on the eligibility check, the pre-authorisation and the claim. + + ### When to use + + After `Face auth capture PID` answers `COMPLETE`. + + ### Preconditions + + - The `txnId` from `Face auth init`, with the capture reported `COMPLETE`. + - `aadhaar` is the Aadhaar number encrypted with the X.509 public key the portal publishes, using the transformation `RSA/ECB/OAEPWithSHA-1AndMGF1Padding`. The ciphertext is roughly 680 base64 characters for a 4096-bit key. + - `mobile` is the Aadhaar-linked mobile number. + - `authMethods` is `["face_auth"]` and `authMode` is `FACE_AUTH`. + - The ABDM session token on `Authorization`, with a fresh `REQUEST-ID`, the current `TIMESTAMP`, `payerid` and `process`, sent to the ABDM proxy host. + + ### Postconditions + + Returns the same token pair as `Biometric auth verify`, a thirty-minute user token and a fifteen-day refresh token, plus a full ABHA profile: name, date of birth, gender, photo, address, state and district. + + ### Common mistakes + + - Sending the Aadhaar number in the clear. + - Validating the ciphertext as a twelve-digit number. + - Logging or storing the encrypted Aadhaar value. + - Sending it to the fingerprint host. + + ### Best practices + + - Never log or store the encrypted Aadhaar value. + - Take from the ABHA profile only what the record needs. + - Store the user token and its expiry against the case. + + ### Related scenario + + The capture for a discharge face authentication has answered `COMPLETE`. The desk encrypts the patient's Aadhaar number with the portal's public key, posts it here with the `txnId` and the Aadhaar-linked mobile, and receives the token pair and the ABHA profile. It stores the token against the case, keeps only the profile fields the record needs, and discards the encrypted value. + + ### Specification + + Chapter [Biometric authentication](/docs/nhcx/v1/roles/provider/biometric-authentication) of the NHCX integration specification. + security: [] parameters: - - {name: payerid, in: header, required: true, schema: {type: string}} - - {name: process, in: header, required: true, schema: {type: string}} + - $ref: "#/components/parameters/RequestId" + - $ref: "#/components/parameters/Timestamp" + - $ref: "#/components/parameters/Payerid" + - $ref: "#/components/parameters/Process" requestBody: required: true content: application/json: schema: type: object - required: [authData] properties: authData: type: object properties: authMethods: type: array - items: {type: string, enum: [face_auth]} + items: + type: string face: type: object properties: - txnId: {type: string, format: uuid} + txnId: + type: string aadhaar: type: string - description: The Aadhaar number encrypted under the portal's public key. + mobile: + type: string + authMode: + type: string + example: + authData: + authMethods: + - face_auth + face: + txnId: + aadhaar: + mobile: + authMode: FACE_AUTH responses: "200": - description: A user token valid for 30 minutes, with a refresh token. + description: "Returns the same token pair as `Biometric auth verify`, a thirty-minute user token and a fifteen-day refresh token, plus a full ABHA profile: name, date of birth, gender, photo, address, state and district." components: securitySchemes: - Authorization: + bearerAuth: type: http scheme: bearer - description: > - The ABDM session token. Note that these endpoints read - `Authorization`, where the NHCX message endpoints read `bearer_auth`. -security: - - Authorization: [] + description: "On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value." + parameters: + Process: + name: process + in: header + required: true + description: No source puts `process` or `payerid` on `faceauth/init` or `capture/pid`. + schema: + type: string + example: Preauth + Payerid: + name: payerid + in: header + required: true + description: "`payerid` is the insurer's own participant code. Every insurer has one, even when it works through a TPA." + schema: + type: string + example: + RToken: + name: R-token + in: header + required: true + description: Sent on this call, as the package's request carries it. + schema: + type: string + example: Bearer + RequestId: + name: REQUEST-ID + in: header + required: true + description: "`REQUEST-ID` is a fresh UUID that you generate for every call. Sending the same one twice is the mistake to avoid; generate it, do not copy it from an example." + schema: + type: string + example: + Timestamp: + name: TIMESTAMP + in: header + required: true + description: "`TIMESTAMP` is the current time in UTC, ISO 8601 with milliseconds and a trailing `Z`, as in `2026-09-04T06:15:51.975Z`. A clock that has drifted will be refused, so take the time from the system rather than constructing it by hand. How to produce it in each language is at the end of this chapter." + schema: + type: string + example: +x-abdm-errors: + notes: "Codes any exchange call can meet are recorded once, in the [Other](/docs/nhcx/v1/api/other) specification: the gateway's NHCX- codes, the standard payer codes, and the reference payer's structure and transport codes. The reference payer's other codes sit with the exchange they reject: coverage eligibility, preauthorisation, claim and insurance plan. [Reading error codes](/docs/nhcx/v1/reference/error-code-guide) explains the code spaces." diff --git a/catalogue/openapi/nhcx/v1/nhcx-claim.yaml b/catalogue/openapi/nhcx/v1/nhcx-claim.yaml new file mode 100644 index 000000000..7432fb8a8 --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-claim.yaml @@ -0,0 +1,1075 @@ +# NHCX claim, from the NHCX package's Bruno folder apis/05-claim. +# +# Written by the package's system/build-ekadocs.mjs (make ekadocs); change the .bru +# requests there and port again rather than editing this file. +# +# Rules this file follows: catalogue/openapi/CONVENTIONS.md +openapi: 3.1.1 +info: + x-portal: + module: claim + label: Claim + position: 5 + title: NHCX claim + summary: The claim is where money actually moves. + description: |- + The Claim calls on the National Health Claims Exchange (NHCX): 4 operations, and 2 callbacks you host. + + The claim is where money actually moves. + + Guides that use these calls: [Claim request](/docs/nhcx/v1/reference/fhir/claim-request), [Claim response](/docs/nhcx/v1/reference/fhir/claim-response), [Claim query and answer](/docs/nhcx/v1/reference/fhir/claim-query-and-answer). + + Production address for the NHCX exchange: shared by NHA after sandbox exit. + version: nhcx-v1 + license: + name: MIT + identifier: MIT + contact: + name: NHCX sandbox + url: https://hcxsbx.abdm.gov.in + x-abdm-gateway: nhcx + x-abdm-module: claim + x-abdm-phase: 1 + x-abdm-roles: + - provider + - payer +x-abdm-sources: + - file: nhcx-package/apis/05-claim + role: upstream + hash: sha256:d216977cce22632f8ab901882dfe7b64d92ba5f0dcdd08f477d105b15d14cfbc + note: The package's Bruno collection, one request per operation. + - file: nhcx-package/baseurl.yaml + role: upstream + hash: sha256:47d8412abbfc53b1e1038410e7980eee029d7b1be5082f4ae6c1d4e16ae0dd0f + note: The sandbox and production hosts. + - file: nhcx-package/nhcx-error.yaml + role: upstream + hash: sha256:d24ac927ed4dd722e60d7bd1d6fed15de370cc29f750d68999ee56fac93c941b + note: The error codes. +servers: + - url: https://apisbx.abdm.gov.in/hcx + description: Sandbox, NHCX exchange. +tags: + - name: Claim + description: The claim is where money actually moves. + - name: Adapter + description: Internal twins of the exchange calls, for the NHCX adapter deployment. +security: + - bearerAuth: [] +paths: + /v1/claim/submit: + post: + operationId: claim_v1_claim_submit + x-abdm-use-case: Claim + tags: + - Claim + summary: Claim submit + description: |- + Provider submits the final itemised Claim bundle (Claim.use claim), or a claim query response or resubmission; NHCX routes it to the payer. + + ### Business purpose + + The claim is where money actually moves. After treatment the provider assembles finalised bills, the complete document set and the preAuthRef, and asks the payer to adjudicate and settle. A well-prepared claim closes within days; a poorly prepared one cycles through queries and resubmissions for weeks. The endpoint gives hospitals a single structured channel for settlement requests and gives payers a complete evidentiary package against which to calculate the approved amount, apply deductions and trigger payment. + + ### When to use + + Called after discharge, once an approved preauth exists (PAYR-1302 otherwise). x-hcx-workflow_id distinguishes the step: 15 CLAIM_REQUEST_INITIATED for the final claim (in PMJAY the discharge and claim steps are merged into this one submission); 151 CLAIM_QUERY_RESPONSE_SUBMITTED to answer a payer query received under 27; the optional x-hcx-use_case header takes New or Resubmit. The NHA sheet also lists R15 and R151 for the reimbursement mirror and 36 CLAIM_ARBITRATION_REQUEST_SUBMITTED for reprocess or erroneous-claim requests, which the FAQ routes through /v1/task/submit rather than this endpoint. Send x-hcx-status request.initiated. PMJAY LAMA or DAMA discharges before or during surgery must carry only procedure LM100 (PAYR-1362). + + ### Preconditions + + - An approved preauth exists for the case and no claim has already been raised for it (PAYR-1301, PAYR-1302). + - Claim.use is claim; the bundle reuses the preauth's identifier or references preAuthRef, with estimated amounts replaced by final bill amounts. + - Patient carries PMJAY Member ID and ABHA number; diagnosis, procedure, care team, supportingInfo and an active Coverage are present; discharge summary, operative notes, diagnostics and itemised billing are attached. + - Discharge information is in supportingInfo (category DIS, code DTH, DTM, LAMA or DAMA, value Before Surgery or After Surgery); for PMJAY either discharge biometric authentication or the Authentication Consent questionnaire response is included (PAYR-1363, PAYR-1364). + - Admission, registration and discharge dates are valid and ordered (PAYR-1357, PAYR-1358, PAYR-1325 to PAYR-1330). + - Valid Bearer token, payer certificate, JWE encryption, fresh correlation ID for a new cycle, processingID as recipient code. + + ### Postconditions + + NHCX returns HTTP 202 Accepted with a StatusSuccessResponse acknowledgement (entity_type claim) and forwards the request asynchronously. The payer may respond several times on /v1/claim/on_submit: 25 received, 28 in process and 29 forwarded as response.partial, 27 queried, then 26 approved or a rejection as response.complete. A response.complete closes the claim identifier permanently; no further submissions or responses are permitted against it. An approved final claim triggers the payment sequence 30, 31 and 33 on /v1/paymentnotice/request. Protocol failures arrive as a ProtocolResponse with x-hcx-error_details. + + ### Common mistakes + + - Submitting a claim without an approved preauth (PAYR-1302), or a second claim for the same case (PAYR-1301, PAYR-1016 duplicate by service codes and dates). + - Claiming more than the preauth approved amount (PAYR-1012) or items that were not in the preauth or were rejected there (PAYR-1306, PAYR-1315). + - Answering a claim query (27) with a fresh 15 instead of 151, or sending an invalid workflow ID (PAYR-1321). + - Wrong or missing discharge stage (PAYR-1324) and, for PMJAY LAMA or DAMA cases, omitting LM100 or including other approved items alongside it (PAYR-1362). + - Missing the mandatory documents named by the InsurancePlan or eligibility response, which produces a query rather than a rejection and delays settlement. + - Reusing a correlation ID from the preauth cycle for a new claim cycle (NHCX-1006), or retrying a failed cycle with the same ID. + + ### Best practices + + - Start from the approved preauth payload: keep diagnosis and procedure entries, change Claim.use to claim, replace estimates with final amounts and add the full document set. + - Reference preAuthRef and reuse the case number; key every submission on the correlation ID and persist workflow ID and use_case with it. + - Check response.outcome on every callback; partial means the claim is still live, so keep monitoring the same correlation ID. + - Validate supportingInfo value types and discharge codes before encrypting; the PAYR-1098, 1099 and 1501 to 1505 family rejects malformed supporting info. + - For LAMA discharges send stratification with duration; for cyclic procedures send cycle information for every cycle with one biometric record per date (PAYR-1368, PAYR-1369). + - Implement v1/error and use /v1/status with the claim's correlation ID when no callback arrives. + + ### Related scenario + + A patient is discharged home after the corneal grafting approved under preAuthRef PREAUTH-HP-2026-78901. The billing desk takes the preauth bundle, sets Claim.use to claim, records discharge code DTH After Surgery, attaches the discharge summary, operative notes and final itemised bill of 13700 INR, and posts it to /v1/claim/submit under workflow 15 with use_case New and a new correlation ID. NHCX returns 202. The payer sends 25 and 28 as response.partial, then queries under 27 for a missing investigation report; the hospital answers under 151. Approval arrives under 26 as response.complete, and a payment notice follows on /v1/paymentnotice/request. + + ### Specification + + Chapter [Claim request](/docs/nhcx/v1/reference/fhir/claim-request) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxUseCase" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: NHCX returns HTTP 202 Accepted with a StatusSuccessResponse acknowledgement (entity_type claim) and forwards the request asynchronously. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 19/03/2026 11:46:35:120 + api_call_id: 5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a + correlation_id: 5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: claim + protocol_status: request.queued + error: + code: "" + message: "" + /v1/claim/on_submit: + post: + operationId: claim_v1_claim_on_submit + x-abdm-use-case: Claim + tags: + - Claim + summary: Claim callback + description: |- + Payer returns interim (response.partial) and final (response.complete) ClaimResponseBundles for a claim to the provider via NHCX. + + ### Business purpose + + This callback carries the payer's adjudication of the final claim, possibly in several stages. Interim partial responses let the payer signal receipt, processing and queries while the claim stays open; the complete response fixes the financial decision (approved, partially approved or rejected) and triggers payment advice and settlement. For the hospital it is the source of truth for what will be paid and why; for the payer it is the auditable record of the decision. + + ### When to use + + Called by the payer or TPA after each adjudication step on a /v1/claim/submit message, with the same correlation ID. Workflow IDs: 25 CLAIM_REQUEST_RECEIVED, 28 CLAIM_REQUEST_IN_PROCESS and 29 CLAIM_FORWARDED with x-hcx-status response.partial; 27 CLAIM_REQUEST_QUERIED (framed as request.initiated in the NHA sheet, answered by the provider under 151); 26 CLAIM_REQUEST_APPROVED with response.complete; rejection with outcome complete and adjudication reason cancelled. ClaimResponse.outcome complete plus reason approved is approval, complete plus cancelled is rejection, partial plus approved is partial approval, partial plus queried is a query with totals at zero. + + ### Preconditions + + - A claim request with this correlation ID exists in NHCX (NHCX-1010 otherwise) and has not been closed by an earlier response.complete. + - The payer has a valid Bearer token and the provider's certificate, and encrypts the ClaimResponseBundle for the provider. + - x-hcx-correlation_id echoes the request; x-hcx-api_call_id is new; sender and recipient codes are swapped; x-hcx-status is response.partial, response.complete or response.error. + - Adjudication categories (submitted, eligible, copay, benefit) and total[].category codes are populated; processNote explains reductions; query text is carried in the adjudication reason display. + - Protocol errors are a ProtocolResponse with x-hcx-error_details; business errors are inside the encrypted resource. + + ### Postconditions + + HTTP 202 Accepted with the StatusSuccessResponse acknowledgement (entity_type claim) from NHCX, then asynchronous delivery to the provider's callback, which must acknowledge with 202 within 30 seconds or NHCX retries up to five times before deleting the request. After a response.partial the claim remains open and further callbacks on the same correlation ID are expected. After a response.complete no further provider submissions or payer responses are permitted against that claim identifier; an approval starts the payment notices 30, 31 and 33, and a rejection leaves the provider the option of a reprocess request (workflow 36) via /v1/task/submit. + + ### Common mistakes + + - Provider side: treating outcome complete as approval without checking adjudication[0].reason.coding.code; a rejection is also complete. + - Provider side: stopping monitoring after the first callback; multiple partial responses may precede the complete one. + - Provider side: reading a carried-over benefit total on a rejected response as payable, or keying totals by array index instead of category code. + - Provider side: returning anything other than 202 with the acceptance body, which triggers retries and eventual deletion. + - Payer side: sending a further response after response.complete on the same claim identifier, or minting a new correlation ID. + - Payer side: using JWEPayloadResponse instead of ProtocolResponse for protocol rejections (PAYR-1517). + + ### Best practices + + - Provider: acknowledge first, then decrypt, then update case state; be idempotent on correlation ID and api_call_id. + - Provider: parse the PMJAY query audit trail (USER~datetime~type~comment~trust, entries separated by |) as a plain string. + - Provider: on complete plus approved, trigger settlement tracking and await 30, 31 and 33; the claim is only closed when 33 arrives and the UTR is persisted. + - Payer: emit 25 on receipt and 28 during processing so the desk sees progress, and put reduction reasons in processNote linked by noteNumber. + - Both: keep x-hcx-status and x-hcx-workflow_id consistent with the NHA status sheet, since the pair identifies the message. + + ### Related scenario + + A state health agency receives a final claim for 13700 INR against an approved preauth. Its bridge first posts 25 (received) and 28 (in process) as response.partial to /v1/claim/on_submit. The medical auditor finds the investigation report missing and the bridge posts 27 with the query text in the adjudication reason display; the hospital answers under 151 on /v1/claim/submit. Satisfied, the payer posts 26 with outcome complete, reason approved and benefit 13700 as response.complete. The hospital's callback acknowledges each message within 30 seconds, marks the claim adjudicated and waits for the payment notice under workflow 30. + + ### Specification + + Chapter [Claim response](/docs/nhcx/v1/reference/fhir/claim-response) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "26" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxDebugFlag" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: HTTP 202 Accepted with the StatusSuccessResponse acknowledgement (entity_type claim) from NHCX, then asynchronous delivery to the provider's callback, which must acknowledge with 202 within 30 seconds or NHCX retries up to five times before deleting the request. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 19/03/2026 11:46:35:120 + api_call_id: 9a8b7c6d-5e4f-4a3b-2c1d-0e9f8a7b6c5d + correlation_id: 5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a + result: + sender_code: 1518@hcx + recipient_code: 1000004446@hcx + entity_type: claim + protocol_status: request.dispatched + error: + code: "" + message: "" + /internal/v1/claim/submit: + post: + operationId: claim_internal_v1_claim_submit + x-abdm-use-case: Adapter + tags: + - Adapter + summary: Claim submit (internal) (adapter) + description: |- + Internal twin of /v1/claim/submit (operationId claimSubmitPostInternal) with the same JWEPayload body and response set. + + ### Business purpose + + The claim service publishes its submit operation twice, at /v1 and at /internal/v1. Both let a provider submit or resubmit the final claim bundle for adjudication and settlement. The internal path is documented only as a distinct operationId on the same contract; no separate business purpose is described for it. + + ### When to use + + Documented as the internal variant of claim submit, consumed by providers with a JWEPayload body. The same workflow discriminators apply: 15 for the final claim, 151 for a claim query response, with x-hcx-use_case New or Resubmit and x-hcx-status request.initiated. The OpenAPI specs expose this operation twice, at /v1/... and at /internal/v1/..., with identical descriptions, request bodies and response sets; only the operationId differs (an Internal suffix). The specs do not document what makes the internal variant different beyond that suffix, so treat it as a mirror of the public path and integrate against the public /v1 path unless NHCX onboarding tells you otherwise. + + ### Preconditions + + Identical to /v1/claim/submit: an approved preauth for the case, Claim.use set to claim with preAuthRef and final amounts, the complete document set and discharge information, PMJAY authentication or consent questionnaire, a valid Bearer token, the payer certificate, JWE encryption and a fresh correlation ID. Nothing additional is documented for the internal route. + + ### Postconditions + + Same as the public path: HTTP 202 Accepted with a StatusSuccessResponse acknowledgement, asynchronous forwarding to the payer, and one or more ClaimResponseBundles on the claim callback (the internal twin /internal/v1/claim/on_submit exists with the same body). 400, 404 and 500 carry the same schema. + + ### Common mistakes + + - Assuming a different body or semantics for the internal route; the spec gives it the same JWEPayload body and responses. + - Using it without confirmation from NHCX onboarding and then chasing a 404; try the alternate host and prefix shape before escalating. + - Every public claim-submit pitfall applies unchanged: no approved preauth (PAYR-1302), duplicate claim (PAYR-1301), amount above the approved preauth (PAYR-1012), wrong workflow ID (PAYR-1321), reused correlation ID (NHCX-1006). + + ### Best practices + + - Default to /v1/claim/submit and keep the internal path as a configuration option only. + - Share one client implementation across both paths so header hygiene, encryption and correlation handling cannot diverge. + - Record which variant carried each correlation ID for support conversations. + + ### Related scenario + + A hospital's HMIS vendor reading the claimhcxservice OpenAPI notices claimSubmitPost and claimSubmitPostInternal side by side. They implement a single claim client against /v1/claim/submit, parameterise the base path, and ask NHCX support whether the internal twin is relevant to their deployment. The end-to-end flow is unchanged: the claim goes out under workflow 15 after discharge, returns a 202, and the payer's adjudication arrives on the claim callback. + + ### Specification + + Chapter [Claim request](/docs/nhcx/v1/reference/fhir/claim-request) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxUseCase" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: "Same as the public path: HTTP 202 Accepted with a StatusSuccessResponse acknowledgement, asynchronous forwarding to the payer, and one or more ClaimResponseBundles on the claim callback (the internal twin /internal/v1/claim/on_submit exists with the same body)." + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 19/03/2026 11:46:35:120 + api_call_id: 5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a + correlation_id: 5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: claim + protocol_status: request.queued + error: + code: "" + message: "" + /internal/v1/claim/on_submit: + post: + operationId: claim_internal_v1_claim_on_submit + x-abdm-use-case: Adapter + tags: + - Adapter + summary: Claim callback (internal) (adapter) + description: |- + Internal twin of /v1/claim/on_submit (operationId claimOnSubmitPostInternal) taking the same bare object body. + + ### Business purpose + + Mirror of the public claim callback: the payer or TPA returns interim and final ClaimResponseBundles, or a protocol error, to the provider through NHCX. It serves the same settlement purpose of communicating the adjudication decision that triggers payment. No separate business role is documented for the internal route. + + ### When to use + + Documented as the internal variant of the claim callback, consumed by payers. Called after each adjudication step with the request's correlation ID and x-hcx-status response.partial (25, 28, 29), response.complete (26 approved or a rejection) or response.error; queries arrive under 27. The OpenAPI specs expose this operation twice, at /v1/... and at /internal/v1/..., with identical descriptions, request bodies and response sets; only the operationId differs (an Internal suffix). The specs do not document what makes the internal variant different beyond that suffix, so treat it as a mirror of the public path and integrate against the public /v1 path unless NHCX onboarding tells you otherwise. + + ### Preconditions + + Identical to the public callback: an in-flight claim request with this correlation ID that has not been closed by a response.complete, the provider's certificate for encryption, a new api_call_id, swapped sender and recipient codes, a valid responder status, and business errors inside the encrypted ClaimResponse rather than the header. + + ### Postconditions + + Same as /v1/claim/on_submit: HTTP 202 Accepted with the StatusSuccessResponse acknowledgement, asynchronous delivery to the provider's callback with the 30-second acknowledgement rule and five retries before deletion, the claim remaining open after a partial and closing permanently after a complete, and an approval starting the payment notices 30, 31 and 33. + + ### Common mistakes + + - Treating the internal callback as a different contract; the spec gives it the same object body and response set. + - All public claim-callback pitfalls apply: outcome complete misread as approval without checking the reason code, monitoring stopped after the first partial, 200 returned instead of the 202 acceptance body, new correlation ID minted, JWEPayloadResponse sent instead of ProtocolResponse (PAYR-1517). + + ### Best practices + + - Route both callback variants into one handler keyed on x-hcx-correlation_id. + - Acknowledge with 202 inside 30 seconds and process asynchronously; be idempotent under redelivery. + - Use the public /v1 path unless NHCX onboarding specifies the internal one. + + ### Related scenario + + A TPA that adjudicates claims for several insurers builds one response pipeline that emits 25, 28, 27 and 26 with the correct outcome and reason codes and echoes the claim's correlation ID. It posts to /v1/claim/on_submit by default and keeps /internal/v1/claim/on_submit as a configurable alternative in case NHCX requires it. The hospital callback acknowledges each message and, on 26, awaits the payment notice. + + ### Specification + + Chapter [Claim response](/docs/nhcx/v1/reference/fhir/claim-response) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "26" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxDebugFlag" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: "Same as /v1/claim/on_submit: HTTP 202 Accepted with the StatusSuccessResponse acknowledgement, asynchronous delivery to the provider's callback with the 30-second acknowledgement rule and five retries before deletion, the claim remaining open after a partial and closing permanently after a complete, and an approval starting the payment notices 30, 31 and 33." + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 19/03/2026 11:46:35:120 + api_call_id: 9a8b7c6d-5e4f-4a3b-2c1d-0e9f8a7b6c5d + correlation_id: 5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a + result: + sender_code: 1518@hcx + recipient_code: 1000004446@hcx + entity_type: claim + protocol_status: request.dispatched + error: + code: "" + message: "" +webhooks: + v1_claim_submit: + post: + operationId: claim_webhook_v1_claim_submit + x-abdm-triggered-by: claim_v1_claim_submit + x-abdm-use-case: Webhooks + tags: + - Claim + summary: Receive claim submit + description: |- + Hosted by the payer. The exchange posts this message to the `endpoint_url` you registered, at `/v1/claim/submit`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Provider submits the final itemised Claim bundle (Claim.use claim), or a claim query response or resubmission; NHCX routes it to the payer. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxUseCase" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" + v1_claim_on_submit: + post: + operationId: claim_webhook_v1_claim_on_submit + x-abdm-triggered-by: claim_v1_claim_on_submit + x-abdm-use-case: Webhooks + tags: + - Claim + summary: Receive claim callback + description: |- + Hosted by the provider. The exchange posts this message to the `endpoint_url` you registered, at `/v1/claim/on_submit`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Payer returns interim (response.partial) and final (response.complete) ClaimResponseBundles for a claim to the provider via NHCX. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "26" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxDebugFlag" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + description: "On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value." + parameters: + BearerAuth: + name: bearer_auth + in: header + required: true + description: It is `bearer_auth`, not `Authorization`, on NHCX's own endpoints. + schema: + type: string + example: Bearer + XHcxSenderCode: + name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + XHcxRecipientCode: + name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + XHcxApiCallId: + name: x-hcx-api_call_id + in: header + required: true + description: Fresh on every message, including responses. Mandatory on the envelope. + schema: + type: string + example: + XHcxRequestId: + name: x-hcx-request_id + in: header + required: false + description: One per originating request. The Open Protocol page marks it Mandatory; the Technical Specifications page marks it Optional. Optional on the envelope. + schema: + type: string + example: + XHcxCorrelationId: + name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + XHcxWorkflowId: + name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "15" + XHcxTimestamp: + name: x-hcx-timestamp + in: header + required: true + description: See the format note below. Mandatory on the envelope. + schema: + type: string + example: + XHcxStatus: + name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: request.initiated + XHcxBenAbhaId: + name: x-hcx-ben-abha-id + in: header + required: true + description: The beneficiary's ABHA number. Mandatory on every exchange, including those with no beneficiary in the payload. Mandatory on the envelope. + schema: + type: string + example: "91711234567890" + XHcxUseCase: + name: x-hcx-use_case + in: header + required: false + description: Values differ by exchange, see below. Optional on the envelope. + schema: + type: string + example: New + XHcxDebugFlag: + name: x-hcx-debug_flag + in: header + required: false + description: "`Error`, `Info` or `Debug`. A server may ignore it. Optional on the envelope." + schema: + type: string + example: INFO +x-abdm-errors: + notes: "Codes any exchange call can meet are recorded once, in the [Other](/docs/nhcx/v1/api/other) specification: the gateway's NHCX- codes, the standard payer codes, and the reference payer's structure and transport codes. The reference payer's other codes sit with the exchange they reject: coverage eligibility, preauthorisation, claim and insurance plan. [Reading error codes](/docs/nhcx/v1/reference/error-code-guide) explains the code spaces." +x-abdm-errors-reference-payer: + source: Reference payer codes, PAYR-1001 to PAYR-1520. Sent by the PMJAY reference implementation; they arrive inside the sealed response. + codes: + - code: PAYR-1301 + message: Claim has already been raised for case number %s. Hence new claim request will not be accepted. + action: "" + - code: PAYR-1302 + message: No preauthorization approved record found for case number %s. Hence new claim request will not be accepted. + action: "" + - code: PAYR-1303 + message: No active claim record found for case number %s. Hence query updation request will not be accepted. + action: "" + - code: PAYR-1304 + message: No claim queried record found for case number %s. Hence query updation request will not be accepted. + action: "" + - code: PAYR-1305 + message: Invalid usecase requested for case number %s. Please try again with valid usecase. + action: "" + - code: PAYR-1306 + message: No item found in preauthorization request for procedure %s with item sequence %s for case number %s. Please try again with valid items. + action: "" + - code: PAYR-1307 + message: Invalid quantity requested for procedure %s with item sequence %s for case number %s. Please try again with valid quantity. + action: "" + - code: PAYR-1308 + message: No item found in active claim request for procedure %s with item sequence %s for case number %s. Please try again with valid items. + action: "" + - code: PAYR-1309 + message: No item found in preauthorization request for implant %s with item sequence %s for case number %s. Please try again with valid items. + action: "" + - code: PAYR-1310 + message: Invalid quantity requested for implant %s with item sequence %s for case number %s. Please try again with valid quantity. + action: "" + - code: PAYR-1311 + message: No item found in active claim request for implant %s with item sequence %s for case number %s. Please try again with valid items. + action: "" + - code: PAYR-1312 + message: No item found in preauthorization request for investigation %s with item sequence %s for case number %s. Please try again with valid items. + action: "" + - code: PAYR-1313 + message: Invalid quantity requested for investigation %s with item sequence %s for case number %s. Please try again with valid quantity. + action: "" + - code: PAYR-1314 + message: No item found in active claim request for investigation %s with item sequence %s for case number %s. Please try again with valid items. + action: "" + - code: PAYR-1315 + message: Rejected item found for preauthorization for procedure %s with item sequence %s for case number %s. Please try again with valid items. + action: "" + - code: PAYR-1316 + message: Rejected item found for preauthorization for investigation %s with item sequence %s for case number %s. Please try again with valid items. + action: "" + - code: PAYR-1317 + message: Rejected item found for preauthorization for implant %s with item sequence %s for case number %s. Please try again with valid items. + action: "" + - code: PAYR-1318 + message: No requested treatment plan found for case number %s. Please try again with valid items. + action: "" + - code: PAYR-1319 + message: No requested investigation plan found for case number %s. Please try again with valid items. + action: "" + - code: PAYR-1320 + message: No details found for the requested investigations in the system. Hence request will not be processed. + action: "" + - code: PAYR-1321 + message: Error occurred while processing the request due to invalid workflow id as (%s) + action: "" + - code: PAYR-1322 + message: No active case found for the given case number. + action: The SHA HP sandbox sent this code as "Active instance found for case number", for a second request on a case while the first was still queued. The sheet's message reads the opposite way. + - code: PAYR-1323 + message: Insufficient wallet balance. Hence the request will not be processed. + action: "" + - code: PAYR-1324 + message: Invalid discharge stage received for case number %s. Hence the request will not be processed. + action: "" + - code: PAYR-1325 + message: Invalid admission date received for case number %s. Hence the request will not be processed. + action: "" + - code: PAYR-1326 + message: Invalid discharge date received for case number %s. Hence the request will not be processed. + action: "" + - code: PAYR-1327 + message: Invalid admission date format received for case number %s. Hence the request will not be processed. + action: "" + - code: PAYR-1328 + message: Invalid discharge date format received for case number %s. Hence the request will not be processed. + action: "" + - code: PAYR-1329 + message: Invalid registration date received for case number %s. Hence the request will not be processed. + action: "" + - code: PAYR-1330 + message: Invalid registration date format received for case number %s. Hence the request will not be processed. + action: "" + - code: PAYR-1331 + message: Receiver not registered in NHCX. Please try again with valid receiver details. + action: "" + - code: PAYR-1332 + message: Invalid CRC request. + action: "" + - code: PAYR-1333 + message: Invalid claim type (in-patient/out-patient) received. Hence the request will not be processed. + action: "" + - code: PAYR-1334 + message: Hospital configuration not found. Please contact support team. + action: "" + - code: PAYR-1335 + message: Invalid implant quantity received as %s for implant %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1336 + message: Invalid implant unit price received as INR %s for implant %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1337 + message: Invalid implant net amount received as INR %s for implant %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1338 + message: Invalid implant attachment received for investigation %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1339 + message: Invalid implant status received as %s for investigation %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1340 + message: Invalid investigation status received as %s for investigation %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1341 + message: Invalid investigation attachment received for investigation %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1342 + message: Existing case in progress found for case number %s. Hence new reimbursement request will not be accepted. + action: "" + - code: PAYR-1343 + message: Previous reimbursement approved record found for the new reimbursement request for case number %s. Hence request will not be processed further. + action: "" + - code: PAYR-1344 + message: No details found for the requested procedures in the system. + action: "" + - code: PAYR-1345 + message: Invalid procedure status received as %s for procedure %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1346 + message: Invalid procedure description received as %s for procedure %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1347 + message: Invalid procedure type received as %s for procedure %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1348 + message: Invalid procedure factor received as %s for procedure %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1349 + message: Invalid procedure quantity received as %s for procedure %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1350 + message: Invalid procedure net amount received as INR %s for procedure %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1351 + message: Invalid speciality code received as %s for procedure %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1352 + message: Requested beneficary details and careplan details does not match any criteria for processing the case at this hospital. Please try again with valid data. + action: "" + - code: PAYR-1353 + message: Invalid careplan id received. Please try again with valid careplan id. + action: "" + - code: PAYR-1354 + message: Rule failure. + action: "" + - code: PAYR-1355 + message: No details found for the requested implants in the system. Hence request will not be processed. + action: "" + - code: PAYR-1356 + message: Patient liability is not aplicable for the hospital and beneficiary do not have enough wallet balance with deficit amount INR %s for the requested preauthorization for case number %s. + action: "" + - code: PAYR-1357 + message: Admission date cannot be after the discharge date. Hence request will not be processed. Please correct the data and try again. + action: "" + - code: PAYR-1358 + message: Registration of the patient is allowed maximum upto %s days after admission. Hence request will not be processed. Please correct the data and try again. + action: "" + - code: PAYR-1359 + message: No billable treatment plan received for case number %s. Please try again with valid treatment plan data. + action: "" + - code: PAYR-1360 + message: Invalid item code received as %s for item sequence %s case number %s. Please try again with valid data. + action: "" + - code: PAYR-1361 + message: Invalid item sequence received as %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1362 + message: No procedure with code LM100 received with 'Requested' status for case number %s. Please try again with valid data. For PMJAY claims, if case comes under LAMA/DAMA scenario with beneficiary being discharged before surgery or during surgery, procedure with code LM100 is mandatory. Only this procedure code will be accepted for LAMA/DAMA case, and all other previous preauthorization approved items will get disqualified for the claim submission + action: "" + - code: PAYR-1363 + message: Response for Authentication Consent Questionnaire is missing for case number %s. This must be sent if the biometric authentication for patient is not available during discharge. For new claim request, either biometric authentication for patient during discharge, or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. + action: "" + - code: PAYR-1364 + message: No value received for link id %s for Authentication Consent Questionnaire for claim request. This must be sent if the biometric authentication for patient is not available during discharge. For new claim request, either biometric authentication for patient during discharge, or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. + action: "" + - code: PAYR-1365 + message: Response for STG Questionnaire id %s is mandatory for procedure code %s. Hence the preauthorization request will not be processed as the questionnaire response is not received for procedure code. + action: "" + - code: PAYR-1366 + message: Invalid biometric user token received. Please try again with valid biometric details of the beneficiary. For any issues with biometric, please try with Authentication Consent Questionnaire for discharge, details for which has been received in insurance plan. + action: "" + - code: PAYR-1367 + message: No biometric records found for the beneficiary for %s. Please ensure correctness of biometric authentication date for the day for cyclic procedure %s. + action: "" + - code: PAYR-1368 + message: "%s units of cycle information received for procedure code %s with item sequence %s. Cycle information should be sent for all the requested/processed cycles." + action: "" + - code: PAYR-1369 + message: Biometric authentication cannot be performed more than once on the same date. Multiple biometric authentication information has been provided for same date for cyclic procedure %s. Hence case will not be processed. Please check and update biometric authentication execution dates and try again. + action: "" + - code: PAYR-1370 + message: Received invalid start date as %s for supporting details with item sequence %s. Please try again with valid start date. + action: "" diff --git a/catalogue/openapi/nhcx/v1/nhcx-communication.yaml b/catalogue/openapi/nhcx/v1/nhcx-communication.yaml new file mode 100644 index 000000000..afaa677c8 --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-communication.yaml @@ -0,0 +1,832 @@ +# NHCX communication, from the NHCX package's Bruno folder apis/07-communication. +# +# Written by the package's system/build-ekadocs.mjs (make ekadocs); change the .bru +# requests there and port again rather than editing this file. +# +# Rules this file follows: catalogue/openapi/CONVENTIONS.md +openapi: 3.1.1 +info: + x-portal: + module: communication + label: Communication + position: 7 + title: NHCX communication + summary: Every other NHCX exchange is provider-initiated and expects a matching response. + description: |- + The Communication calls on the National Health Claims Exchange (NHCX): 4 operations, and 2 callbacks you host. + + Every other NHCX exchange is provider-initiated and expects a matching response. + + Guides that use these calls: [Communication](/docs/nhcx/v1/reference/fhir/communication). + + Production address for the NHCX exchange: shared by NHA after sandbox exit. + version: nhcx-v1 + license: + name: MIT + identifier: MIT + contact: + name: NHCX sandbox + url: https://hcxsbx.abdm.gov.in + x-abdm-gateway: nhcx + x-abdm-module: communication + x-abdm-phase: 1 + x-abdm-roles: + - provider + - payer +x-abdm-sources: + - file: nhcx-package/apis/07-communication + role: upstream + hash: sha256:9b96a557306151b1501f1b58eaf412af456d28bc8a061a12b2994ba81625dadc + note: The package's Bruno collection, one request per operation. + - file: nhcx-package/baseurl.yaml + role: upstream + hash: sha256:47d8412abbfc53b1e1038410e7980eee029d7b1be5082f4ae6c1d4e16ae0dd0f + note: The sandbox and production hosts. +servers: + - url: https://apisbx.abdm.gov.in/hcx + description: Sandbox, NHCX exchange. +tags: + - name: Communication + description: Every other NHCX exchange is provider-initiated and expects a matching response. + - name: Adapter + description: Internal twins of the exchange calls, for the NHCX adapter deployment. +security: + - bearerAuth: [] +paths: + /v1/communication/request: + post: + operationId: communication_v1_communication_request + x-abdm-use-case: Communication + tags: + - Communication + summary: Communication request + description: |- + Payer pushes a Task plus Communication bundle to a provider mid-claim: TAT alerts, wallet or policy changes, grievances or extra-information requests. + + ### Business purpose + + Every other NHCX exchange is provider-initiated and expects a matching response. Communication inverts that: it is the payer's asynchronous, event-driven channel into the hospital system, used when something must be said about an in-flight case without the provider having asked. It carries TAT breach alerts, grievance notices, wallet or benefit updates, policy or package-rate changes, requests for additional evidence and claim-arbitration intimations. Hospitals benefit because these signals arrive in a structured, routable bundle rather than by phone or email, and payers benefit because adjudication can proceed without waiting for an out-of-band exchange. + + ### When to use + + Call it whenever the payer needs to communicate outside the direct request-response lifecycle of a preauth or claim. It does not replace the in-band query path (ClaimResponse outcome=partial with a DOC_MISSING processNote); both can be in flight for the same case. The scenario is identified by Task.reasonCode: tatquery, grievance, walletupdate, policychange, additionalinfo and the arbitration code (spelt claimArbitration in one handbook table and claimArbitartion in another). Send x-hcx-status request.initiated; the x-hcx-workflow_id must be the workflow of the associated claim or preauth and is validated at the gateway. + + ### Preconditions + + - Payer and provider both registered on NHCX; a valid Bearer token from the client-credentials session call (1200 s expiry). + - The provider's public certificate fetched via /fetch/certs (cache up to 24 h) and used to JWE-encrypt with RSA-OAEP-256 and A256GCM. + - A collection Bundle containing a Task (status completed, intent proposal, code poll, input type include) that references a Communication or CommunicationRequest carrying category, priority and topic; the identifiers key off the claim or preauth reference. + - Protected header with x-hcx-sender_code, x-hcx-recipient_code, x-hcx-api_call_id, x-hcx-correlation_id, x-hcx-workflow_id, x-hcx-timestamp (IST +05:30) and x-hcx-status request.initiated. A fresh UUID correlation id opens the conversation. + - HTTP headers Accept, Content-Type and bearer_auth. + + ### Postconditions + + The gateway validates the JWE headers, workflow id and NIIP and returns HTTP 202 with a StatusSuccessResponse (timestamp, api_call_id, correlation_id, result with sender_code, recipient_code, entity_type and protocol_status, and an error object). Nothing is decided synchronously; the gateway forwards the bundle to the provider's registered callback. The provider must acknowledge with 202 within 30 seconds, then close the loop by posting an acknowledgement Task bundle to /v1/communication/on_request under the same x-hcx-correlation_id. Errors are 400 (validation failed), 404 and 500, all in the same envelope. Communication.status completed describes the event, not the resolution of the underlying issue. + + ### Common mistakes + + - Treating the 202 as delivery or as the provider's answer; the acknowledgement comes later on on_request. + - Sending a workflow id that does not match the associated claim or preauth, which fails gateway validation (PAYR-1003 Invalid workflow requested). + - Wrong x-hcx-status spelling (request.initiate instead of request.initiated) producing NHCX-1011. + - Reusing a correlation id from an earlier cycle (NHCX-1006 Duplicate request) or from a failed cycle, which NHCX has made inactive. + - Copying the sandbox sample's swapped Organization identifier types (NIIP versus NPI), a known data-quality defect. + - Using Communication as a substitute for the in-band ClaimResponse query mechanism. + + ### Best practices + + - Mint a new UUID for x-hcx-api_call_id on every call and for x-hcx-correlation_id on every new communication cycle, including retries after failure. + - Put the routing intent in Task.reasonCode and the message classification in Communication.category, topic and priority; pair additionalinfo with category instruction or questionnaire. + - Use IST timestamps; UTC causes validation failures. + - Persist the correlation id before posting so the on_request acknowledgement can be matched. + - Expect up to five redeliveries if the provider mis-acknowledges; keep your own handling idempotent. + - Implement v1/error so a message that never reaches the provider is reported back to you. + + ### Related scenario + + A state health agency's TPA notices that a cashless claim from a district hospital has sat in adjudication past the scheme's turnaround threshold. It builds a Task bundle with reasonCode tatquery, category reminder, topic progress-update and priority asap, encrypts it for the hospital and posts /v1/communication/request with the workflow id of the claim submitted earlier on /v1/claim/submit. The gateway returns 202 and forwards the bundle. The hospital's claims desk is alerted, and its system posts the acknowledgement Task on /v1/communication/on_request with the same correlation id. Adjudication then continues and the outcome arrives on /v1/claim/on_submit as usual. + + ### Specification + + Chapter [Communication](/docs/nhcx/v1/reference/fhir/communication) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxNTE4QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: The gateway validates the JWE headers, workflow id and NIIP and returns HTTP 202 with a StatusSuccessResponse (timestamp, api_call_id, correlation_id, result with sender_code, recipient_code, entity_type and protocol_status, and an error object). + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 25/08/2026 11:46:35:120 + api_call_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + correlation_id: 11223344-5566-7788-99aa-bbccddeeff00 + result: + sender_code: 1518@hcx + recipient_code: 1000004446@hcx + entity_type: task + protocol_status: request.queued + error: + code: "" + message: "" + /v1/communication/on_request: + post: + operationId: communication_v1_communication_on_request + x-abdm-use-case: Communication + tags: + - Communication + summary: Communication acknowledgement callback + description: |- + Provider returns the acknowledgement Task bundle for a payer communication, echoing the reason code and correlation id so the payer can close the loop. + + ### Business purpose + + A payer that has pushed a TAT alert, grievance, wallet update, policy change or document request needs proof that the hospital received it, because the next adjudication step or SLA clock often depends on it. This callback is that proof. The provider posts a bundle of identical structure to the request, with Task.status completed confirming receipt, and the payer's system can then continue, escalate or wait for the documents. It keeps the entire exchange inside NHCX, auditable by correlation id, rather than in phone calls and email. + + ### When to use + + Call it after receiving and persisting a /v1/communication/request bundle. The gateway has already been given a 202 within 30 seconds; this call is the separate business acknowledgement. Echo the same Task.reasonCode (tatquery, grievance, walletupdate, policychange, additionalinfo or the arbitration code) and Task.code poll, keep Task.intent proposal, and use the same x-hcx-correlation_id as the incoming request. x-hcx-workflow_id is validated at the gateway for the acknowledgement as well as the request. Responder status values are response.complete, response.partial or response.error. + + ### Preconditions + + - The inbound JWE was extracted from the payload field, validated as a five-part string, decrypted with your PKCS8 private key and its protected header parsed for correlation id, status and workflow id. + - The provider is a registered NHCX participant and holds a valid Bearer token. + - The payer's certificate is available to encrypt the acknowledgement bundle. + - The acknowledgement bundle mirrors the request (Task completed, intent proposal, code poll, reasonCode echoed) with the provider Organization listed before the payer Organization and Bundle.timestamp updated to the acknowledgement time. + - Protected header reuses the request's x-hcx-correlation_id, carries a fresh x-hcx-api_call_id and a responder x-hcx-status. + + ### Postconditions + + The gateway returns HTTP 202 with the StatusSuccessResponse envelope (timestamp, api_call_id, correlation_id, result, error) and forwards the bundle to the payer. The payer's system can link the acknowledgement to the original notification by correlation id and by the shared claim or preauth reference in Task.identifier and Communication.id. The underlying issue is not resolved by this call: a TAT breach or grievance may still be open, and any documents requested via additionalinfo are supplied through the relevant preauth or claim resubmission path. Validation failures come back as 400, unknown resources as 404, downstream faults as 500. + + ### Common mistakes + + - Minting a new correlation id on the acknowledgement instead of echoing the request's; the payer can no longer link it (NHCX-1010 No Data with given Correlation id for call back request). + - Sending the acknowledgement before, or instead of, the synchronous 202; the gateway treats a missing or malformed 202 as an error and retries up to five times. + - Holding the socket open while a human reviews the message, breaching the 30-second window. + - Closing the hospital case on acknowledgement because Communication.status reads completed. + - Deriving sender and receiver roles from Organization identifier types, which are swapped in the sandbox sample. + - Building the reason-code switch on a single spelling of the arbitration code. + + ### Best practices + + - Acknowledge first, process later: return 202 with the acceptance body, queue the bundle, then build and post the on_request acknowledgement asynchronously. + - Switch on Task.reasonCode.code to route: tatquery to the claims desk, walletupdate to the benefit cache, policychange to package rate tables. + - Be idempotent on x-hcx-correlation_id; the same communication may be redelivered. + - Validate x-hcx-workflow_id against the workflow of the associated claim or preauth before acting. + - Use IST timestamps and a fresh x-hcx-api_call_id on the acknowledgement call. + - Log the reason code, category, priority and correlation id for the audit trail. + + ### Related scenario + + A district hospital receives a communication from the scheme payer on its registered callback: reasonCode additionalinfo, category instruction, asking for an updated discharge summary on a claim submitted last week. The endpoint returns 202 immediately and queues the bundle. The claims desk is notified, and the integration posts the acknowledgement Task on /v1/communication/on_request with the same correlation id and reasonCode. The desk then attaches the discharge summary through the claim's resubmission path, and the final adjudication arrives later on /v1/claim/on_submit, possibly followed by a payment notice on /v1/paymentnotice/request. + + ### Specification + + Chapter [Communication](/docs/nhcx/v1/reference/fhir/communication) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxMDAwMDA0NDQ2QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: The gateway returns HTTP 202 with the StatusSuccessResponse envelope (timestamp, api_call_id, correlation_id, result, error) and forwards the bundle to the payer. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 25/08/2026 11:56:35:004 + api_call_id: b2c3d4e5-f6a7-8901-bcde-f12345678901 + correlation_id: 11223344-5566-7788-99aa-bbccddeeff00 + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: task + protocol_status: request.queued + error: + code: "" + message: "" + /internal/v1/communication/request: + post: + operationId: communication_internal_v1_communication_request + x-abdm-use-case: Adapter + tags: + - Adapter + summary: Communication request (internal variant) (adapter) + description: |- + Internal twin of /v1/communication/request: same JWEPayload body, description and 202 envelope, operationId communicationRequestPostInternal. + + ### Business purpose + + Six NHCX services expose each operation twice, once at /v1/... and once at /internal/v1/..., with identical descriptions and request bodies and only the operationId suffix differing. This entry is the internal twin of the payer-initiated communication request: the channel through which a payer pushes TAT alerts, grievances, wallet or policy updates and additional-information requests to a provider. It exists so the exchange can route the same operation over an internal path; the specifications do not document any further difference from the public endpoint. + + ### When to use + + The published OpenAPI documents give this path the same semantics as /v1/communication/request: a payer submits a Task plus Communication bundle for a provider during the claim lifecycle, identified by Task.reasonCode (tatquery, grievance, walletupdate, policychange, additionalinfo, claim arbitration). The specs do not state when an integrator should prefer the internal path over the public one, so integrators should code against /v1/communication/request unless onboarding instructions direct otherwise. Header rules are unchanged: request.initiated status and a workflow id validated against the associated case. + + ### Preconditions + + - Identical to the public endpoint: registered sender and recipient, valid Bearer token, recipient certificate for JWE encryption (RSA-OAEP-256, A256GCM). + - Request body is a JWEPayload, { "payload": "" }, whose plaintext is the Task plus Communication collection Bundle. + - Protected header carries sender_code, recipient_code, api_call_id, correlation_id, workflow_id, timestamp in IST and status request.initiated. + - Whether the internal prefix is reachable from a participant's network is not documented; confirm with the environment index and your onboarding contact. + + ### Postconditions + + Returns the same response set as the public endpoint: 202 Accepted with a StatusSuccessResponse (timestamp, api_call_id, correlation_id, result, error), or 400 Request Validation failed, 404 Requested resource was not found and 500 Downstream systems down/unhandled exceptions in the same envelope. The bundle is forwarded to the provider's registered callback, which must acknowledge with 202 within 30 seconds and then answer on the communication on_request path under the same correlation id. No additional state change is documented for the internal variant. + + ### Common mistakes + + - Assuming the internal path behaves differently or bypasses header validation; the specs describe it as identical apart from the operationId. + - Hard-coding the internal prefix in a participant integration without confirmation that it is the route you were onboarded to. + - The same envelope errors as the public path: wrong status spelling (NHCX-1011), invalid header (NHCX-1005), duplicate correlation id (NHCX-1006), invalid workflow (PAYR-1003). + - Mixing the hcxsbx.abdm.gov.in/ spec host and the apisbx.abdm.gov.in/pmjay/sbxhcx gateway base; a 404 is the first sign. + + ### Best practices + + - Treat this path exactly as /v1/communication/request in your client: same bundle builder, same header hygiene, same correlation-id persistence. + - Keep the path prefix configurable so you can switch between public and internal forms without a code change. + - Use fresh UUIDs for api_call_id per call and correlation_id per cycle; use IST timestamps. + - Implement v1/error and idempotent callback handling regardless of which path you post to. + + ### Related scenario + + An insurer's integration team exploring the communicationhcxservice Swagger on the sandbox host sees both communicationRequestPost and communicationRequestPostInternal listed with the same description. They wire their TAT-alert sender to the public /v1/communication/request path as documented in the handbook, keep the internal variant as a configurable alternative, and confirm with NHCX onboarding which form their gateway route expects. The rest of the flow is unchanged: 202 acknowledgement, provider callback within 30 seconds, and the acknowledgement Task on the on_request path. + + ### Specification + + Chapter [Communication](/docs/nhcx/v1/reference/fhir/communication) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxNTE4QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "200": + description: "Returns the same response set as the public endpoint: 202 Accepted with a StatusSuccessResponse (timestamp, api_call_id, correlation_id, result, error), or 400 Request Validation failed, 404 Requested resource was not found and 500 Downstream systems down/unhandled exceptions in the same envelope." + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 25/08/2026 12:05:00:412 + api_call_id: c3d4e5f6-a7b8-9012-cdef-123456789012 + correlation_id: 22334455-6677-8899-aabb-ccddeeff0011 + result: + sender_code: 1518@hcx + recipient_code: 1000004446@hcx + entity_type: task + protocol_status: request.queued + error: + code: "" + message: "" + /internal/v1/communication/on_request: + post: + operationId: communication_internal_v1_communication_on_request + x-abdm-use-case: Adapter + tags: + - Adapter + summary: Communication acknowledgement callback (internal variant) (adapter) + description: |- + Internal twin of /v1/communication/on_request: the provider acknowledgement Task bundle, operationId communicationOnRequestPostInternal. + + ### Business purpose + + This is the internal-path form of the provider acknowledgement that closes a payer communication. The OpenAPI document lists it with the same description and bare object request body as the public callback and distinguishes it only by the operationId suffix. Its business role is unchanged: give the payer auditable confirmation that a TAT alert, grievance, wallet or policy update or additional-information request reached the hospital, so adjudication and SLA tracking can proceed inside NHCX rather than over phone or email. + + ### When to use + + Use it in the same circumstances as the public on_request callback: after receiving, acknowledging with a synchronous 202, and persisting a communication request, the provider posts a mirror-image Task bundle with the same reasonCode, Task.code poll, Task.intent proposal, Task.status completed and the same x-hcx-correlation_id. The responder status is response.complete, response.partial or response.error. The specs do not say when the internal path is used instead of the public one; follow your onboarding instructions. + + ### Preconditions + + - The inbound communication was decrypted and its correlation id, status and workflow id captured. + - A valid Bearer token and the payer's certificate for encrypting the acknowledgement. + - The acknowledgement bundle mirrors the request, provider Organization first, timestamps updated. + - Protected header echoes the request's x-hcx-correlation_id, carries a fresh x-hcx-api_call_id, an IST timestamp and a responder status; x-hcx-workflow_id is validated at the gateway. + - Confirm the internal prefix is the route you were onboarded to before using it. + + ### Postconditions + + Same as the public callback: HTTP 202 with the StatusSuccessResponse envelope, or 400, 404 or 500 in the same shape; the bundle is forwarded to the payer, who links it to the original notification by correlation id and by the shared claim or preauth reference. The underlying issue remains open until resolved through the preauth or claim path. No additional behaviour is documented for the internal variant. + + ### Common mistakes + + - Expecting the internal path to relax any rule; it carries the same validation and the same errors (NHCX-1010 for an unknown correlation id, NHCX-1011 for a bad status value). + - Minting a new correlation id on the acknowledgement. + - Sending this call in place of the synchronous 202, which triggers the five-attempt retry loop and deletion of the request. + - Closing the case because Communication.status is completed. + - Using an unconfigurable path prefix that cannot switch between public and internal forms. + + ### Best practices + + - Share one acknowledgement builder with the public callback; only the path differs. + - Return 202 within 30 seconds first, then post the acknowledgement asynchronously. + - Be idempotent on correlation id; expect redeliveries. + - Route on Task.reasonCode and log reason, category, priority and correlation id. + - Keep IST timestamps and a fresh api_call_id on every call. + + ### Related scenario + + A hospital integrator generating client code from the communicationhcxservice Swagger finds two acknowledgement operations, communicationOnRequestPost and communicationOnRequestPostInternal, with identical descriptions. The team implements one handler for inbound communications, answers 202 immediately, and posts the acknowledgement Task to the public /v1/communication/on_request path as the handbook documents, leaving the internal form selectable by configuration. When a walletupdate arrives for a patient mid-admission, the same handler refreshes the benefit cache before the enhancement request goes out on /v1/preauth/submit. + + ### Specification + + Chapter [Communication](/docs/nhcx/v1/reference/fhir/communication) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxMDAwMDA0NDQ2QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: "Same as the public callback: HTTP 202 with the StatusSuccessResponse envelope, or 400, 404 or 500 in the same shape; the bundle is forwarded to the payer, who links it to the original notification by correlation id and by the shared claim or preauth reference." + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 25/08/2026 12:15:00:377 + api_call_id: d4e5f6a7-b8c9-0123-def0-234567890123 + correlation_id: 22334455-6677-8899-aabb-ccddeeff0011 + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: task + protocol_status: request.queued + error: + code: "" + message: "" +webhooks: + v1_communication_request: + post: + operationId: communication_webhook_v1_communication_request + x-abdm-triggered-by: communication_v1_communication_request + x-abdm-use-case: Webhooks + tags: + - Communication + summary: Receive communication request + description: |- + Hosted by the provider. The exchange posts this message to the `endpoint_url` you registered, at `/v1/communication/request`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Payer pushes a Task plus Communication bundle to a provider mid-claim: TAT alerts, wallet or policy changes, grievances or extra-information requests. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxNTE4QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" + v1_communication_on_request: + post: + operationId: communication_webhook_v1_communication_on_request + x-abdm-triggered-by: communication_v1_communication_on_request + x-abdm-use-case: Webhooks + tags: + - Communication + summary: Receive communication acknowledgement callback + description: |- + Hosted by the payer. The exchange posts this message to the `endpoint_url` you registered, at `/v1/communication/on_request`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Provider returns the acknowledgement Task bundle for a payer communication, echoing the reason code and correlation id so the payer can close the loop. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxMDAwMDA0NDQ2QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + description: "On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value." + parameters: + BearerAuth: + name: bearer_auth + in: header + required: true + description: It is `bearer_auth`, not `Authorization`, on NHCX's own endpoints. + schema: + type: string + example: Bearer + XHcxSenderCode: + name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + XHcxRecipientCode: + name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + XHcxApiCallId: + name: x-hcx-api_call_id + in: header + required: true + description: Fresh on every message, including responses. Mandatory on the envelope. + schema: + type: string + example: + XHcxRequestId: + name: x-hcx-request_id + in: header + required: false + description: One per originating request. The Open Protocol page marks it Mandatory; the Technical Specifications page marks it Optional. Optional on the envelope. + schema: + type: string + example: + XHcxCorrelationId: + name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + XHcxWorkflowId: + name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "15" + XHcxTimestamp: + name: x-hcx-timestamp + in: header + required: true + description: See the format note below. Mandatory on the envelope. + schema: + type: string + example: + XHcxStatus: + name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: request.initiated + XHcxBenAbhaId: + name: x-hcx-ben-abha-id + in: header + required: true + description: The beneficiary's ABHA number. Mandatory on every exchange, including those with no beneficiary in the payload. Mandatory on the envelope. + schema: + type: string + example: "91711234567890" +x-abdm-errors: + notes: "Codes any exchange call can meet are recorded once, in the [Other](/docs/nhcx/v1/api/other) specification: the gateway's NHCX- codes, the standard payer codes, and the reference payer's structure and transport codes. The reference payer's other codes sit with the exchange they reject: coverage eligibility, preauthorisation, claim and insurance plan. [Reading error codes](/docs/nhcx/v1/reference/error-code-guide) explains the code spaces." diff --git a/catalogue/openapi/nhcx/v1/nhcx-eligibility.yaml b/catalogue/openapi/nhcx/v1/nhcx-eligibility.yaml new file mode 100644 index 000000000..05afc1804 --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-eligibility.yaml @@ -0,0 +1,904 @@ +# NHCX coverage eligibility, from the NHCX package's Bruno folder apis/02-eligibility. +# +# Written by the package's system/build-ekadocs.mjs (make ekadocs); change the .bru +# requests there and port again rather than editing this file. +# +# Rules this file follows: catalogue/openapi/CONVENTIONS.md +openapi: 3.1.1 +info: + x-portal: + module: eligibility + label: Coverage eligibility + position: 2 + title: NHCX coverage eligibility + summary: Coverage eligibility is the pre-check a hospital desk runs before committing a patient to a cashless pathway. + description: |- + The Coverage eligibility calls on the National Health Claims Exchange (NHCX): 4 operations, and 2 callbacks you host. + + Coverage eligibility is the pre-check a hospital desk runs before committing a patient to a cashless pathway. + + Guides that use these calls: [Coverage eligibility request](/docs/nhcx/v1/reference/fhir/coverage-eligibility-request), [Coverage eligibility response](/docs/nhcx/v1/reference/fhir/coverage-eligibility-response). + + Production address for the NHCX exchange: shared by NHA after sandbox exit. + version: nhcx-v1 + license: + name: MIT + identifier: MIT + contact: + name: NHCX sandbox + url: https://hcxsbx.abdm.gov.in + x-abdm-gateway: nhcx + x-abdm-module: eligibility + x-abdm-phase: 1 + x-abdm-roles: + - provider + - payer +x-abdm-sources: + - file: nhcx-package/apis/02-eligibility + role: upstream + hash: sha256:e42e738c449e98effd44ddef6394558cb87c97fc073c3ddb7d9662895f6afe51 + note: The package's Bruno collection, one request per operation. + - file: nhcx-package/baseurl.yaml + role: upstream + hash: sha256:47d8412abbfc53b1e1038410e7980eee029d7b1be5082f4ae6c1d4e16ae0dd0f + note: The sandbox and production hosts. + - file: nhcx-package/nhcx-error.yaml + role: upstream + hash: sha256:d24ac927ed4dd722e60d7bd1d6fed15de370cc29f750d68999ee56fac93c941b + note: The error codes. +servers: + - url: https://apisbx.abdm.gov.in/hcx + description: Sandbox, NHCX exchange. +tags: + - name: Coverage eligibility + description: Coverage eligibility is the pre-check a hospital desk runs before committing a patient to a cashless pathway. + - name: Adapter + description: Internal twins of the exchange calls, for the NHCX adapter deployment. +security: + - bearerAuth: [] +paths: + /v1/coverageeligibility/check: + post: + operationId: eligibility_v1_coverageeligibility_check + x-abdm-use-case: Coverage eligibility + tags: + - Coverage eligibility + summary: Coverage eligibility check + description: |- + Provider asks the payer, via NHCX, whether a beneficiary's policy is in force, what it covers and which documents a preauth will need. + + ### Business purpose + + Coverage eligibility is the pre-check a hospital desk runs before committing a patient to a cashless pathway. It confirms three things the desk needs: that the policy is active, what benefits and wallet balance are available, and whether a specific procedure needs authorisation at all. A rejection that would otherwise surface days later at preauth or claim adjudication surfaces in seconds while the patient is still at the counter, which benefits the hospital (less rework), the payer (fewer malformed preauths) and the patient (earlier certainty). + + ### When to use + + Call it at registration or admission, before /v1/preauth/submit. The CoverageEligibilityRequest.purpose field (1..*) decides what the payer computes: discovery is the fallback when /participant/get/policies does not yield a policy code; validation retrieves used amount, available balance and wallet liability; auth-requirements checks whether a chosen procedure is covered at this hospital and returns the STG questionnaires and MAND document codes the preauth must carry; benefits is also listed. Send x-hcx-status request.initiated. No eligibility-specific workflow code is published in the workflow tables; the workbook sample shows x-hcx-workflow_id 11 (PATIENT_ADMITTED). For PMJAY an unspecified procedure still requires an auth-requirements check. + + ### Preconditions + + - The provider is an onboarded NHCX participant (otherwise NHCX-1002) holding a valid Bearer token from the client-credentials session call; tokens expire after 1200 seconds. + - The payer's public certificate has been fetched via /fetch/certs (cache 24 hours) and the bundle is JWE-encrypted with RSA-OAEP-256 and A256GCM. + - x-hcx-recipient_code is the processingID from the get/policies response, not the PayerID. + - x-hcx-correlation_id is a fresh UUID for this request cycle; x-hcx-api_call_id is unique per call. + - The bundle contains the Patient (PMJAY Member ID and/or ABHA number), the Coverage record, both Organisations (provider and insurer) and a PractitionerRole for the enterer; items are included when purpose is auth-requirements. + - HTTP headers Accept: application/json, Content-Type: application/json and bearer_auth are all present. + + ### Postconditions + + NHCX replies synchronously with HTTP 202 Accepted and a StatusSuccessResponse acknowledgement (timestamp, api_call_id, correlation_id, result with sender_code, recipient_code, entity_type coverageeligibility and protocol_status such as request.queued or request.dispatched, plus an empty error object). The 202 means only that the JWE structure and open protocol headers validated; the gateway then forwards the request to the payer asynchronously. The eligibility answer arrives later on the provider's /v1/coverageeligibility/on_check endpoint as a CoverageEligibilityResponseBundle, or as a ProtocolResponse carrying x-hcx-error_details, or as a redirect or forward instruction to try another payer. Other documented statuses are 400 request validation failed, 404 resource not found and 500 downstream systems down. + + ### Common mistakes + + - Treating the 202 as the eligibility answer instead of waiting for the on_check callback; NHCX never returns a synchronous FHIR decision. + - Using the PayerID from get/policies as x-hcx-recipient_code instead of the processingID (NHCX-1003 receiver not registered). + - Reusing a correlation ID from an earlier cycle (NHCX-1006 duplicate request) or retrying a failed cycle under the same ID, which NHCX has already marked inactive. + - Sending the wrong status string; only request.initiated is accepted on an initiating request (NHCX-1011). + - Payer-side business rejections such as PAYR-1113 invalid item code, PAYR-1115 quantity not greater than 1, PAYR-1116 hospital not authorised for the policy, PAYR-1117 or PAYR-1122 no policy details, PAYR-1123 beneficiary not a covered member, and PAYR-1014 date of birth after date of service. + - Omitting the Accept header on the HTTP call. + + ### Best practices + + - Persist the correlation ID against the patient episode before posting; it is the only key for matching the callback. + - Refresh the token automatically before the 1200-second expiry and treat a 401 as refresh-and-retry-once. + - Run discovery first only when get/policies gives no policy code, then validation, then auth-requirements for the chosen package; store the returned MAND codes and STG questionnaire references and attach them to the preauth. + - Do not assume the response echoes your request codes: items come back in the payer's numeric master codes (for example 100478 against your MG003B). + - Use IST timestamps with the +05:30 offset in the protected header. + - Log the 202 body (protocol_status, api_call_id) so a missing callback can be traced with /v1/status. + + ### Related scenario + + A patient arrives at a district hospital with a PMJAY card. The desk calls /participant/get/policies and receives a processingID for the state health agency. Because the treating doctor wants a corneal grafting package, the desk builds a CoverageEligibilityRequest with purpose validation and auth-requirements, encrypts it for the payer and posts it to /v1/coverageeligibility/check, receiving a 202 with protocol_status request.queued. Minutes later the payer's answer lands on /v1/coverageeligibility/on_check with inforce true, authorizationRequired true and MAND0409 and MAND0104 listed as supporting documents. The desk collects those documents and proceeds to /v1/preauth/submit under workflow 12. + + ### Specification + + Chapter [Coverage eligibility request](/docs/nhcx/v1/reference/fhir/coverage-eligibility-request) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: NHCX replies synchronously with HTTP 202 Accepted and a StatusSuccessResponse acknowledgement (timestamp, api_call_id, correlation_id, result with sender_code, recipient_code, entity_type coverageeligibility and protocol_status such as request.queued or request.dispatched, plus an empty error object). + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 19/03/2026 11:46:35:120 + api_call_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + correlation_id: 11223344-5566-7788-99aa-bbccddeeff00 + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: coverageeligibility + protocol_status: request.queued + error: + code: "" + message: "" + /v1/coverageeligibility/on_check: + post: + operationId: eligibility_v1_coverageeligibility_on_check + x-abdm-use-case: Coverage eligibility + tags: + - Coverage eligibility + summary: Coverage eligibility callback + description: |- + Payer returns the CoverageEligibilityResponse (policy in force, benefits, auth requirements) or an error to the provider through NHCX. + + ### Business purpose + + This is the answer leg of the eligibility check. The payer (or a TPA acting for it) tells the provider whether the policy is live, which items are covered or excluded, the allowed amounts, whether preauthorisation is required and which supporting documents the preauth must carry. Delivering this before treatment lets the hospital counsel the patient and assemble the right evidence, and lets the payer avoid adjudicating preauths that were never going to be covered. + + ### When to use + + The payer calls it after it has processed a /v1/coverageeligibility/check request, using the same x-hcx-correlation_id. The protected header carries x-hcx-status response.complete for a final answer (the coverage-eligibility workbook sheets spell this response.completed; the preauth and claim sheets use response.complete), response.partial for a partial answer, or response.error for a protocol-level rejection with x-hcx-error_details populated. The plaintext is a CoverageEligibilityResponseBundle with outcome complete, insurance[*].inforce, item[*].excluded, item[*].authorizationRequired and item[*].authorizationSupporting. A redirect or forward instruction to another payer is an alternate documented outcome. + + ### Preconditions + + - A /v1/coverageeligibility/check request with this correlation ID must exist in NHCX; a callback against an unknown or already deleted correlation ID fails with NHCX-1010. + - The payer has a valid Bearer token and has fetched the provider's certificate to encrypt the response bundle for the provider's private key. + - x-hcx-correlation_id echoes the request's value; x-hcx-api_call_id is a new UUID; sender and recipient codes are swapped relative to the request. + - x-hcx-status is one of response.complete, response.partial or response.error (NHCX-1011 otherwise). + - Business or clinical errors are embedded inside the encrypted CoverageEligibilityResponse, never in the clear header; only protocol errors go in x-hcx-error_details. + + ### Postconditions + + The gateway (and, when the callback reaches it, the provider system) returns HTTP 202 Accepted with the StatusSuccessResponse acknowledgement echoing correlation_id and api_call_id, entity_type coverageeligibility and a protocol_status. NHCX forwards the encrypted response to the provider's registered callback URL; the provider must acknowledge with 202 within 30 seconds or NHCX retries, and after five failed attempts the request under that correlation ID is deleted and the sender is notified via v1/error. On success the eligibility conversation is closed and the provider can decide whether to proceed to preauth. + + ### Common mistakes + + - Returning HTTP 200 or an ad-hoc body instead of the 202 acceptance shape on the receiving side, which NHCX treats as an error and retries up to five times. + - Minting a new correlation ID on the callback instead of echoing the request's (NHCX-1010 no data with given correlation id). + - Sending a JWEPayloadResponse where a ProtocolResponse is expected on error (PAYR-1517), or using the superseded status spelling response.fail versus response.error; the sources disagree, so check which your gateway build accepts. + - Placing patient or clinical error detail in x-hcx-error_details, which the gateway stores for audit. + - Provider side: expecting the response codes to match the request codes verbatim; the payer answers in its own master codes. + + ### Best practices + + - Acknowledge first, process later: return 202 within 30 seconds and queue decryption and business handling. + - Be idempotent on x-hcx-correlation_id; the same callback may be redelivered up to five times. + - Set inforce, disposition, excluded, authorizationRequired and authorizationSupporting explicitly so the desk can act without free-text interpretation. + - Use ProtocolResponse with x-hcx-status response.error and a catalogued error code for protocol rejections; put business errors inside the encrypted resource. + - Providers: whitelist the NHCX NAT IPs, expose the callback on a domain name (not IP or port) on an India-based server, and implement v1/error alongside on_check. + + ### Related scenario + + A state health agency's bridge receives an eligibility check for a beneficiary requesting validation and auth-requirements for package SE012A. Its rules engine confirms the policy is active with sufficient wallet balance and that SE012A needs preauthorisation with documents MAND0409, MAND0104 and MAND0062. The bridge builds a CoverageEligibilityResponseBundle, encrypts it for the hospital, sets x-hcx-status response.complete with the original correlation ID and posts it to /v1/coverageeligibility/on_check. NHCX acknowledges with 202 and delivers it to the hospital's callback, which acknowledges within 30 seconds; the hospital then prepares its /v1/preauth/submit. + + ### Specification + + Chapter [Coverage eligibility response](/docs/nhcx/v1/reference/fhir/coverage-eligibility-response) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxDebugFlag" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: The gateway (and, when the callback reaches it, the provider system) returns HTTP 202 Accepted with the StatusSuccessResponse acknowledgement echoing correlation_id and api_call_id, entity_type coverageeligibility and a protocol_status. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 19/03/2026 11:46:35:120 + api_call_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + correlation_id: 11223344-5566-7788-99aa-bbccddeeff00 + result: + sender_code: 1518@hcx + recipient_code: 1000004446@hcx + entity_type: coverageeligibility + protocol_status: request.dispatched + error: + code: "" + message: "" + /internal/v1/coverageeligibility/check: + post: + operationId: eligibility_internal_v1_coverageeligibility_check + x-abdm-use-case: Adapter + tags: + - Adapter + summary: Coverage eligibility check (internal) (adapter) + description: |- + Internal twin of /v1/coverageeligibility/check with the same JWEPayload body and response set; only the operationId differs. + + ### Business purpose + + The coverage eligibility service publishes its check operation twice, once at /v1 and once at /internal/v1. Both let a provider validate a beneficiary's coverage with a payer before preauthorisation. The internal path exists in the OpenAPI document as an operationally distinct route for the same business function; the published material does not describe a separate business purpose for it. + + ### When to use + + Documented as the internal variant of the eligibility check (operationId coverageeligibilityCheckPostInternal), served by coverageeligibilityhcxservice and tagged V1.0 APIs-Payer side like its public twin. The same purposes (discovery, validation, auth-requirements, benefits) and the same x-hcx-status request.initiated apply. The OpenAPI specs expose this operation twice, at /v1/... and at /internal/v1/..., with identical descriptions, request bodies and response sets; only the operationId differs (an Internal suffix). The specs do not document what makes the internal variant different beyond that suffix, so treat it as a mirror of the public path and integrate against the public /v1 path unless NHCX onboarding tells you otherwise. + + ### Preconditions + + Identical to the public path: an onboarded provider with a valid Bearer token, the payer certificate fetched and cached, a CoverageEligibilityRequest bundle encrypted with RSA-OAEP-256 and A256GCM, a fresh correlation UUID, the processingID as recipient code, and the full x-hcx-* protected header set. Nothing additional is documented for the internal route. + + ### Postconditions + + Same as /v1/coverageeligibility/check: HTTP 202 Accepted with a StatusSuccessResponse acknowledgement, then asynchronous forwarding to the payer and an answer on the on_check callback (the internal twin /internal/v1/coverageeligibility/on_check exists with the same body). 400, 404 and 500 carry the same schema. + + ### Common mistakes + + - Assuming the internal path has different semantics or a different body; the specs give it the same JWEPayload body and the same responses. + - Integrating against the internal path without confirmation from NHCX onboarding, then hitting a 404 on the gateway host; when a path 404s, the endpoint index recommends trying the alternate host and prefix shape. + - All the mistakes listed for the public check (202 treated as an answer, wrong recipient code, reused correlation ID, wrong status string) apply unchanged. + + ### Best practices + + - Default to /v1/coverageeligibility/check; use the internal path only where NHCX instructs you to. + - Keep one client implementation for both paths, parameterised only on the URL, so header hygiene and correlation handling stay identical. + - Log which variant was used with each correlation ID for troubleshooting. + + ### Related scenario + + A hospital integration team exploring the coverageeligibilityhcxservice Swagger sees two check operations. They build one client against /v1/coverageeligibility/check and confirm with NHCX support whether the internal twin is meant for their deployment. In production traffic the eligibility request still starts from get/policies, goes out as a JWE to the check path, receives a 202, and the payer's answer arrives on the on_check callback before the preauth is raised. + + ### Specification + + Chapter [Coverage eligibility request](/docs/nhcx/v1/reference/fhir/coverage-eligibility-request) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: "Same as /v1/coverageeligibility/check: HTTP 202 Accepted with a StatusSuccessResponse acknowledgement, then asynchronous forwarding to the payer and an answer on the on_check callback (the internal twin /internal/v1/coverageeligibility/on_check exists with the same body)." + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 19/03/2026 11:46:35:120 + api_call_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + correlation_id: 11223344-5566-7788-99aa-bbccddeeff00 + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: coverageeligibility + protocol_status: request.queued + error: + code: "" + message: "" + /internal/v1/coverageeligibility/on_check: + post: + operationId: eligibility_internal_v1_coverageeligibility_on_check + x-abdm-use-case: Adapter + tags: + - Adapter + summary: Coverage eligibility callback (internal) (adapter) + description: |- + Internal twin of /v1/coverageeligibility/on_check taking the same bare object body; only the operationId differs. + + ### Business purpose + + Mirror of the public eligibility callback: the payer or TPA returns the CoverageEligibilityResponseBundle, or a protocol error, to the provider through NHCX. It serves the same settlement purpose, letting the hospital know before treatment whether the policy is in force and which documents the preauth will need. No separate business role is documented for the internal route. + + ### When to use + + Documented as the internal variant of the eligibility callback (operationId coverageeligibilityOnCheckPostInternal), tagged V1.0 APIs-Provider side. Called after processing a check request, with the request's correlation ID and x-hcx-status response.complete, response.partial or response.error. The OpenAPI specs expose this operation twice, at /v1/... and at /internal/v1/..., with identical descriptions, request bodies and response sets; only the operationId differs (an Internal suffix). The specs do not document what makes the internal variant different beyond that suffix, so treat it as a mirror of the public path and integrate against the public /v1 path unless NHCX onboarding tells you otherwise. + + ### Preconditions + + Identical to the public callback: an in-flight check request with this correlation ID, the provider's certificate for encryption, a new api_call_id, swapped sender and recipient codes, a valid responder status, and business errors embedded inside the encrypted resource rather than the header. + + ### Postconditions + + Same as /v1/coverageeligibility/on_check: HTTP 202 Accepted with the StatusSuccessResponse acknowledgement, asynchronous delivery to the provider's callback URL with the 30-second acknowledgement rule, five retries then deletion on failure, and closure of the eligibility conversation on success. + + ### Common mistakes + + - Treating the internal callback as a different contract; the spec gives it the same object body and response set as the public path. + - Every public on_check pitfall applies: returning 200 instead of the 202 acceptance body, minting a new correlation ID, sending a JWEPayloadResponse instead of a ProtocolResponse on error (PAYR-1517), and leaking business errors into x-hcx-error_details. + + ### Best practices + + - Route both callback variants to the same handler keyed on x-hcx-correlation_id so behaviour cannot diverge. + - Acknowledge with 202 inside 30 seconds and process asynchronously; be idempotent under redelivery. + - Use the public /v1 path unless NHCX onboarding specifies the internal one. + + ### Related scenario + + A TPA bridge that processes eligibility checks on behalf of an insurer sees both on_check operations in the service spec. It implements a single response builder that populates inforce, excluded and authorizationRequired, echoes the correlation ID and posts to /v1/coverageeligibility/on_check by default, with the internal path configurable if NHCX requires it. The hospital's callback acknowledges with 202 and the desk moves on to the preauth. + + ### Specification + + Chapter [Coverage eligibility response](/docs/nhcx/v1/reference/fhir/coverage-eligibility-response) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxDebugFlag" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: "Same as /v1/coverageeligibility/on_check: HTTP 202 Accepted with the StatusSuccessResponse acknowledgement, asynchronous delivery to the provider's callback URL with the 30-second acknowledgement rule, five retries then deletion on failure, and closure of the eligibility conversation on success." + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 19/03/2026 11:46:35:120 + api_call_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + correlation_id: 11223344-5566-7788-99aa-bbccddeeff00 + result: + sender_code: 1518@hcx + recipient_code: 1000004446@hcx + entity_type: coverageeligibility + protocol_status: request.dispatched + error: + code: "" + message: "" +webhooks: + v1_coverageeligibility_check: + post: + operationId: eligibility_webhook_v1_coverageeligibility_check + x-abdm-triggered-by: eligibility_v1_coverageeligibility_check + x-abdm-use-case: Webhooks + tags: + - Coverage eligibility + summary: Receive coverage eligibility check + description: |- + Hosted by the payer. The exchange posts this message to the `endpoint_url` you registered, at `/v1/coverageeligibility/check`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Provider asks the payer, via NHCX, whether a beneficiary's policy is in force, what it covers and which documents a preauth will need. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" + v1_coverageeligibility_on_check: + post: + operationId: eligibility_webhook_v1_coverageeligibility_on_check + x-abdm-triggered-by: eligibility_v1_coverageeligibility_on_check + x-abdm-use-case: Webhooks + tags: + - Coverage eligibility + summary: Receive coverage eligibility callback + description: |- + Hosted by the provider. The exchange posts this message to the `endpoint_url` you registered, at `/v1/coverageeligibility/on_check`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Payer returns the CoverageEligibilityResponse (policy in force, benefits, auth requirements) or an error to the provider through NHCX. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxDebugFlag" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + description: "On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value." + parameters: + BearerAuth: + name: bearer_auth + in: header + required: true + description: It is `bearer_auth`, not `Authorization`, on NHCX's own endpoints. + schema: + type: string + example: Bearer + XHcxSenderCode: + name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + XHcxRecipientCode: + name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + XHcxApiCallId: + name: x-hcx-api_call_id + in: header + required: true + description: Fresh on every message, including responses. Mandatory on the envelope. + schema: + type: string + example: + XHcxRequestId: + name: x-hcx-request_id + in: header + required: false + description: One per originating request. The Open Protocol page marks it Mandatory; the Technical Specifications page marks it Optional. Optional on the envelope. + schema: + type: string + example: + XHcxCorrelationId: + name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + XHcxWorkflowId: + name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "11" + XHcxTimestamp: + name: x-hcx-timestamp + in: header + required: true + description: See the format note below. Mandatory on the envelope. + schema: + type: string + example: + XHcxStatus: + name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: request.initiated + XHcxBenAbhaId: + name: x-hcx-ben-abha-id + in: header + required: true + description: The beneficiary's ABHA number. Mandatory on every exchange, including those with no beneficiary in the payload. Mandatory on the envelope. + schema: + type: string + example: "91711234567890" + XHcxDebugFlag: + name: x-hcx-debug_flag + in: header + required: false + description: "`Error`, `Info` or `Debug`. A server may ignore it. Optional on the envelope." + schema: + type: string + example: INFO +x-abdm-errors: + notes: "Codes any exchange call can meet are recorded once, in the [Other](/docs/nhcx/v1/api/other) specification: the gateway's NHCX- codes, the standard payer codes, and the reference payer's structure and transport codes. The reference payer's other codes sit with the exchange they reject: coverage eligibility, preauthorisation, claim and insurance plan. [Reading error codes](/docs/nhcx/v1/reference/error-code-guide) explains the code spaces." +x-abdm-errors-reference-payer: + source: Reference payer codes, PAYR-1001 to PAYR-1520. Sent by the PMJAY reference implementation; they arrive inside the sealed response. + codes: + - code: PAYR-1101 + message: Invalid purpose received as (%s) for beneficiary id (%s) from hospital id (%s). Hence no result will be returned. Please try again with a valid purpose. + action: "" + - code: PAYR-1102 + message: Invalid search parameter requested. Please try again with a valid id. + action: "" + - code: PAYR-1103 + message: Invalid careplan id received. Please try again with valid careplan id. + action: "" + - code: PAYR-1104 + message: Multiple records found for the beneficiary. Hence request will not be processed further. + action: "" + - code: PAYR-1105 + message: Hospital configuration not found. Please contact support team. + action: "" + - code: PAYR-1106 + message: No details found for the requested procedures in the system. + action: "" + - code: PAYR-1107 + message: No billable item received. Please try again with valid item data. + action: "" + - code: PAYR-1108 + message: No details found for the requested stratification in the system. + action: "" + - code: PAYR-1109 + message: No details found for the requested investigations in the system. + action: "" + - code: PAYR-1110 + message: No details found for the requested implants in the system. + action: "" + - code: PAYR-1111 + message: Rule failure. + action: "" + - code: PAYR-1112 + message: Invalid payer id received. Please try again ith valid payer details + action: "" + - code: PAYR-1113 + message: Invalid item code received as %s. Please try again with valid data + action: "" + - code: PAYR-1114 + message: Invalid speciality code received as %s for item %s. Please try again with valid data. Speciality code is available as the code of the category for specific cost of plan in isurance plan + action: "" + - code: PAYR-1115 + message: Invalid procedure quantity received as %s for item %s. Please try again with valid data. Item quantity should be greater than 1 + action: "" + - code: PAYR-1116 + message: Hospital is not authorized to raise any case under policy %s. Hence request will not be processed further. Please connect with the support team to get the required authorization + action: "" + - code: PAYR-1117 + message: No policy details found for %s. Hence request will not be processed further + action: "" + - code: PAYR-1118 + message: No details found for requested items. Hence request will not be processed further + action: "" + - code: PAYR-1119 + message: No payer details received for payer id %s from HCX. Please try again with valid payer details. + action: "" + - code: PAYR-1120 + message: Duplicate reference id found as %s. Please try again with valid reference details. + action: "" + - code: PAYR-1121 + message: No policy details found for %s for beneficiary %s. Hence request will not be processed further. + action: "" + - code: PAYR-1122 + message: No policy details found for beneficiary %s. Hence request will not be processed further. + action: "" + - code: PAYR-1123 + message: Beneficiary is not a covered member for requested payer. Please enroll beneficiary for applicable policy of requested payer and try again. + action: "" diff --git a/catalogue/openapi/nhcx/v1/nhcx-gateway.yaml b/catalogue/openapi/nhcx/v1/nhcx-gateway.yaml deleted file mode 100644 index 9ca0ddaa1..000000000 --- a/catalogue/openapi/nhcx/v1/nhcx-gateway.yaml +++ /dev/null @@ -1,148 +0,0 @@ -openapi: 3.1.1 -info: - title: NHCX session token - version: abdm-v3 - summary: The ABDM session token every NHCX call carries. - description: > - NHCX does not issue its own credentials. Every call to the participant - service, the use case endpoints and the biometric proxy carries a bearer - token minted by the ABDM gateway from the client ID and secret an - integrator already holds from Milestone 1. - - - The token is short lived and the published documents disagree on how - short, quoting five minutes, twenty minutes and a hundred minutes in - different places. Build for the strictest: refresh on a timer, and treat - any 401 as "fetch a new token and retry once" rather than as a failure. - contact: - name: NHCX integration support - url: https://hcxsbx.abdm.gov.in/#/documents - email: hcx.integration@nha.gov.in - x-abdm-gateway: nhcx - x-abdm-module: gateway - x-abdm-phase: 1 - x-abdm-roles: [provider, payer, tpa] -x-abdm-sources: - - url: https://hcxsbx.abdm.gov.in/#/documents - role: upstream - status: not-yet-hashed - note: > - Authenticating with NHCX, and NHCX FAQs v1.2 items 2, 3 and 20. The - sessions call has no Postman collection of its own on the portal; the - shape here is the ABDM gateway v3 sessions call as used against the - sandbox on 5 and 6 September 2026. -servers: - - url: https://dev.abdm.gov.in - description: Sandbox ABDM gateway -tags: - - name: Sessions - description: Minting and refreshing the bearer token. -paths: - /api/hiecm/gateway/v3/sessions: - post: - operationId: nhcx_sessions_create - tags: [Sessions] - summary: Mint a session token from client credentials - description: > - Exchanges the Milestone 1 client ID and secret for a bearer token. - The token goes on every later NHCX call in the `bearer_auth` header, - with the word `Bearer` and a space in front of it. - - - An older address, `/gateway/v0.5/sessions`, appears throughout the - portal's earlier documents. It takes the client ID and secret alone, - without the three headers below and without `grantType`, and returns - the same body. Treat it as superseded. - security: [] - parameters: - - name: REQUEST-ID - in: header - required: true - description: A fresh UUID generated for every call. Sending the same one twice is refused. - schema: - type: string - format: uuid - example: 607f0d74-0913-4345-afd0-70123442eb64 - - name: TIMESTAMP - in: header - required: true - description: > - Current time in UTC, ISO 8601 with milliseconds and a trailing Z. - A drifted clock is refused, so take the time from the system. - schema: - type: string - example: "2026-09-04T06:15:51.975Z" - - name: X-CM-ID - in: header - required: true - description: The environment. `sbx` on the sandbox, lowercase. - schema: - type: string - example: sbx - requestBody: - required: true - content: - application/json: - schema: - type: object - required: [clientId, clientSecret, grantType] - properties: - clientId: - type: string - description: The ABDM sandbox client ID from Milestone 1. - clientSecret: - type: string - description: The matching client secret. Never log it. - grantType: - type: string - const: client_credentials - description: > - Required on the v3 address. The older v0.5 address omitted - it, which is why a request copied from an old sample is - rejected here. - example: - clientId: "" - clientSecret: "" - grantType: client_credentials - responses: - "200": - description: A token, with its lifetime in seconds. - content: - application/json: - schema: - type: object - properties: - accessToken: {type: string} - expiresIn: {type: integer, description: Lifetime in seconds.} - refreshToken: {type: string} - refreshTokenIn: {type: integer} - tokenType: {type: string, example: bearer} - example: - accessToken: eyJhbGciOiJSUzI1NiIs... - expiresIn: 300 - refreshTokenIn: 300 - refreshToken: eyJhbGciOiJSUzI1NiIs... - tokenType: bearer - "401": - description: > - Wrong client ID or secret, or Milestone 1 is not complete. - content: - application/json: - schema: - type: object - properties: - code: {type: string} - message: {type: string} -components: - securitySchemes: - bearer_auth: - type: apiKey - in: header - name: bearer_auth - description: > - The session token, prefixed with `Bearer ` and a space. Note the - header name: NHCX's own endpoints read `bearer_auth`, not - `Authorization`. The biometric endpoints read `Authorization` - instead, and the safe course is to send both with the same value. -security: - - bearer_auth: [] diff --git a/catalogue/openapi/nhcx/v1/nhcx-insurance-plan.yaml b/catalogue/openapi/nhcx/v1/nhcx-insurance-plan.yaml new file mode 100644 index 000000000..23b5f7bf0 --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-insurance-plan.yaml @@ -0,0 +1,916 @@ +# NHCX insurance plan, from the NHCX package's Bruno folder apis/09-insurance-plan. +# +# Written by the package's system/build-ekadocs.mjs (make ekadocs); change the .bru +# requests there and port again rather than editing this file. +# +# Rules this file follows: catalogue/openapi/CONVENTIONS.md +openapi: 3.1.1 +info: + x-portal: + module: insurance-plan + label: Insurance plan + position: 9 + title: NHCX insurance plan + summary: Policies have traditionally been PDFs that hospital desks interpret by hand, producing ambiguity about benefits, claim conditions and documents, and rework and rejections downstream. + description: |- + The Insurance plan calls on the National Health Claims Exchange (NHCX): 4 operations, and 2 callbacks you host. + + Policies have traditionally been PDFs that hospital desks interpret by hand, producing ambiguity about benefits, claim conditions and documents, and rework and rejections downstream. + + Guides that use these calls: [Insurance plan request](/docs/nhcx/v1/reference/fhir/insurance-plan-request), [Insurance plan response](/docs/nhcx/v1/reference/fhir/insurance-plan-response-overview). + + Production address for the NHCX exchange: shared by NHA after sandbox exit. + version: nhcx-v1 + license: + name: MIT + identifier: MIT + contact: + name: NHCX sandbox + url: https://hcxsbx.abdm.gov.in + x-abdm-gateway: nhcx + x-abdm-module: insurance-plan + x-abdm-phase: 1 + x-abdm-roles: + - provider + - payer +x-abdm-sources: + - file: nhcx-package/apis/09-insurance-plan + role: upstream + hash: sha256:a4d48ce98594530d1f58959c966bfc5b0cc4f94910a37853a45f1f63ecf0456b + note: The package's Bruno collection, one request per operation. + - file: nhcx-package/baseurl.yaml + role: upstream + hash: sha256:47d8412abbfc53b1e1038410e7980eee029d7b1be5082f4ae6c1d4e16ae0dd0f + note: The sandbox and production hosts. + - file: nhcx-package/nhcx-error.yaml + role: upstream + hash: sha256:d24ac927ed4dd722e60d7bd1d6fed15de370cc29f750d68999ee56fac93c941b + note: The error codes. +servers: + - url: https://apisbx.abdm.gov.in/hcx + description: Sandbox, NHCX exchange. +tags: + - name: Insurance plan + description: Policies have traditionally been PDFs that hospital desks interpret by hand, producing ambiguity about benefits, claim conditions and documents, and rework and rejections downstream. + - name: Adapter + description: Internal twins of the exchange calls, for the NHCX adapter deployment. +security: + - bearerAuth: [] +paths: + /v1/insuranceplan/request: + post: + operationId: insurance_plan_v1_insuranceplan_request + x-abdm-use-case: Insurance plan + tags: + - Insurance plan + summary: Insurance plan request + description: |- + Provider sends a Task with code poll naming a policy number and/or its HFR id to fetch the payer's machine-readable InsurancePlan for that pairing. + + ### Business purpose + + Policies have traditionally been PDFs that hospital desks interpret by hand, producing ambiguity about benefits, claim conditions and documents, and rework and rejections downstream. The InsurancePlan API replaces that with a structured, provider-specific, policy-specific contract view: empanelled specialities, package codes and rates, implant and stratification qualifiers, claim conditions such as EnhancementAllowed or Standalone, mandatory documents and questionnaires. Hospitals gain an authoritative view before treatment; payers gain fewer malformed preauths and claims. It is one of the most critical APIs for implementors. + + ### When to use + + Call it before any preauth or claim for a given payer and policy, ideally at patient registration or admission and before treatment planning and cost estimation, alongside coverage eligibility. The request carries no clinical content: a Task with status requested, intent order, code poll (system https://nhcx.abdm.gov.in/api) and at least one input, policyNumber or providerId (the HFR id). Send x-hcx-status request.initiated. No dedicated workflow code for InsurancePlan appears in the workflow tables; the Services reference marks x-hcx-workflow_id optional. The plan arrives asynchronously on /v1/insuranceplan/on_request. + + ### Preconditions + + - Both provider and payer registered on NHCX; valid Bearer token from the client-credentials session call. + - Payer certificate fetched via /fetch/certs and verified before encryption; JWE with RSA-OAEP-256 and A256GCM. + - Task bundle with at least one of policyNumber or providerId in Task.input; both may be supplied for precision. + - Protected header with sender_code, recipient_code, fresh api_call_id, a fresh UUID correlation_id for this discovery cycle, IST timestamp and status request.initiated. + - Recipient code taken from processingID in the get/Policies response, not PayerID. + - HTTP headers Accept, Content-Type and bearer_auth. + + ### Postconditions + + The gateway returns HTTP 202 with a StatusSuccessResponse whose result carries sender_code, recipient_code, entity_type insuranceplan and protocol_status; 400, 404 and 500 use the same envelope. The 202 is a receipt, never the plan. The payer later posts an InsurancePlan collection Bundle (InsurancePlan, Organization, optional Questionnaire) to /v1/insuranceplan/on_request under the same correlation id, and the provider must acknowledge that with 202 within 30 seconds. The payer may return an empty plan or an error if no coverage matches the policy-provider combination; an empty plan is a business outcome, not a transport failure. Plans may be cached but should be refreshed periodically or when treatment changes. + + ### Common mistakes + + - Sending a Task with no input at all; at least one of policyNumber or providerId is mandatory. + - Expecting the plan in the synchronous response. + - Resubmitting while a previous request is still with the payer: PAYR-1406 rejects a new request until the earlier correlation id completes (wait 15 to 60 minutes). + - Requesting a policy the hospital is not allowed to use (PAYR-1401), a policy with no payer (PAYR-1402), a renewal not linked to the policy (PAYR-1403), or from an HFR id or sender id with no enrolled hospital (PAYR-1405). + - Using the wrong registry id in production; providers must use the HFR id. + - Treating an empty plan (PAYR-1404, no treatment under any speciality) as a gateway fault. + + ### Best practices + + - Integrate deeply: call at registration or admission, before cost estimation, and together with coverage eligibility. + - Cache the returned plan and refresh on a schedule or when the treatment plan changes; it is provider-, policy- and MoU-specific. + - Enforce the returned claim conditions (GovtReserved, EnhancementAllowed, QuantityAllowed, ImplantApplicable, Standalone, ParentProcedure, Unspecified) locally before building preauths. + - Persist the correlation id so the on_request callback can be matched; mint a new one for each discovery cycle. + - Use IST timestamps and a fresh api_call_id per call. + - Stand up the on_request receiver and v1/error before the first request. + + ### Related scenario + + A PMJAY beneficiary arrives at an empanelled hospital's admission desk. After the desk fetches the patient's policies through the participant registry and resolves the processingID, the integration posts /v1/insuranceplan/request with a Task carrying policyNumber and the hospital's HFR id. The gateway returns 202. Minutes later the payer's package master arrives on /v1/insuranceplan/on_request: the hospital's empanelled specialities, package codes, rates, implant qualifiers and the mandatory-document questionnaire. The desk selects the relevant package, checks the claim conditions, and proceeds to /v1/coverageeligibility/check and then /v1/preauth/submit. + + ### Specification + + Chapter [Insurance plan request](/docs/nhcx/v1/reference/fhir/insurance-plan-request) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxMDAwMDA0NDQ2QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: The gateway returns HTTP 202 with a StatusSuccessResponse whose result carries sender_code, recipient_code, entity_type insuranceplan and protocol_status; 400, 404 and 500 use the same envelope. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 25/08/2026 09:05:00:188 + api_call_id: b8c9d0e1-f2a3-4567-1234-678901234567 + correlation_id: 44556677-8899-aabb-ccdd-eeff00112233 + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: insuranceplan + protocol_status: request.queued + error: + code: "" + message: "" + /v1/insuranceplan/on_request: + post: + operationId: insurance_plan_v1_insuranceplan_on_request + x-abdm-use-case: Insurance plan + tags: + - Insurance plan + summary: Insurance plan callback + description: |- + Payer returns the InsurancePlan collection Bundle (InsurancePlan, Organization, optional Questionnaire) under the request correlation id. + + ### Business purpose + + This callback delivers the digital policy that every later preauth and claim is judged against. The payer publishes, for one policy and one hospital, the empanelled specialities, packages and rates, cost qualifiers for implants and stratification, exclusions, claim conditions and mandatory documents, and the questionnaires for standard treatment guidelines or history. Hospitals use it to select packages and validate submissions before they go out; payers use it to cut malformed requests and to make the MoU an enforceable, machine-readable contract view rather than a PDF. + + ### When to use + + The payer calls it after receiving a /v1/insuranceplan/request Task (code poll), acknowledging it with 202 and assembling the plan for the policyNumber and/or providerId supplied. The bundle is of type collection and follows one of two structures: plan, specificCost, category, benefit, cost, qualifiers (the PMJAY package-master shape) or coverage, benefit, limit. Carry the same x-hcx-correlation_id as the request and a responder x-hcx-status (response.complete, or response.error with x-hcx-error_details when no plan can be produced). The plan may legitimately be empty when no coverage matches. + + ### Preconditions + + - The inbound Task was decrypted, its correlation id captured and the 202 acceptance body already returned. + - Payer registered on NHCX with a valid Bearer token and the provider's certificate for JWE encryption. + - A collection Bundle containing InsurancePlan (with plan.generalCost for the overall sum insured, specificCost per speciality, benefit per package with cost and qualifiers, and the claim-exclusion, claimCondition and claimSupportingInfoRequirement extensions), Organization entries and any Questionnaire resources. + - Protected header echoing the request's correlation id with a fresh api_call_id, IST timestamp and responder status; request body declared as a bare object in the OpenAPI but still a JWE per RFC-7516. + + ### Postconditions + + The gateway returns HTTP 202 with the StatusSuccessResponse envelope (400, 404 and 500 in the same shape) and forwards the bundle to the provider's registered endpoint, which must acknowledge with 202 within 30 seconds. After decryption the provider holds the plan, may cache it, and must enforce its claim conditions and document requirements before preauth. Codes carried in the plan, such as specificCost.category as the speciality code and benefit.type as the procedure code, are what later PAYR-1114, PAYR-1202 and PAYR-1204 validations are checked against. Errors returned instead of a plan use PAYR-1401 to PAYR-1406. + + ### Common mistakes + + - Returning the plan in the synchronous 202 to the request, or before acknowledging the inbound Task within 30 seconds. + - Minting a new correlation id rather than echoing the request's (NHCX-1010). + - Encoding cost.value as the package rate; the IG defines it as the extra amount paid over and above the procedure cost. + - Synthesising codes for claim conditions listed as NA (rules_yn, los, ip_op_flag, incentive_applicable, gst_applicable, gst_percentage). + - Shipping the full package master unfiltered; the response must be provider-specific and contextually filtered per the MoU. + - Provider side: treating an empty plan as a transport failure, or failing to parse both structuring approaches. + + ### Best practices + + - Acknowledge the inbound request first, build the bundle asynchronously, then post this callback. + - Filter to the requesting provider's empanelled specialities and the named policy; include Questionnaire resources for mandatory documents and STGs. + - Use the documented claim-condition codes (GovtReserved, ApprovalNotRequired, EnhancementAllowed, QuantityAllowed, IsDayCare, ImplantApplicable, StratificationAllowed, Standalone, ParentProcedure, Unspecified) so provider systems can enforce them. + - Provider side: cache with periodic refresh, refresh when treatment changes, and validate preauth items against the plan's speciality and package codes. + - Use a fresh api_call_id, IST timestamp and response.complete or response.error. + + ### Related scenario + + A state health agency's payer platform receives a plan discovery Task from an empanelled hospital for policy PMJAY with the hospital's HFR id. It returns 202, then generates the InsurancePlan bundle: General Medicine and Ophthalmology as specificCost categories, each package as a benefit with its rate, implant qualifiers on the packages that allow them, EnhancementAllowed and Standalone conditions, and the proof-of-identity questionnaire. It posts /v1/insuranceplan/on_request under the same correlation id. The hospital acknowledges within 30 seconds, caches the plan, selects a package, and moves to /v1/coverageeligibility/check before submitting the preauth. + + ### Specification + + Chapter [Insurance plan response](/docs/nhcx/v1/reference/fhir/insurance-plan-response-overview) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxNTE4QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: The gateway returns HTTP 202 with the StatusSuccessResponse envelope (400, 404 and 500 in the same shape) and forwards the bundle to the provider's registered endpoint, which must acknowledge with 202 within 30 seconds. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 25/08/2026 09:12:00:502 + api_call_id: c9d0e1f2-a3b4-5678-2345-789012345678 + correlation_id: 44556677-8899-aabb-ccdd-eeff00112233 + result: + sender_code: 1518@hcx + recipient_code: 1000004446@hcx + entity_type: insuranceplan + protocol_status: request.queued + error: + code: "" + message: "" + /internal/v1/insuranceplan/request: + post: + operationId: insurance_plan_internal_v1_insuranceplan_request + x-abdm-use-case: Adapter + tags: + - Adapter + summary: Insurance plan request (internal variant) (adapter) + description: |- + Internal twin of /v1/insuranceplan/request on the insuranceplanhcxservice: same TaskBundle payload, same 202 envelope, distinct operationId. + + ### Business purpose + + The insuranceplanhcxservice is one of six NHCX services that expose every operation at both /v1/... and /internal/v1/... with identical descriptions and bodies, differing only in the operationId suffix. This entry is the internal form of the provider's plan discovery request, whose purpose is to retrieve the payer's structured, provider-specific digital policy before treatment. The documentation states the internal variant has the same semantics as /v1/insuranceplan/request and does not describe any behavioural difference. + + ### When to use + + Same circumstances as the public request: before any preauth or claim for a payer and policy, at registration or admission, and before cost estimation. The payload is the Task poll bundle with at least one of policyNumber or providerId; the header carries request.initiated. The specifications do not say when the internal path applies instead of the public one, so integrators should default to /v1/insuranceplan/request unless onboarding guidance names the internal route. + + ### Preconditions + + - As for the public endpoint: registered provider and payer, Bearer token, payer certificate verified and used for JWE encryption. + - Body is a JWEPayload, { "payload": "" }, whose plaintext is the TaskBundle. + - Protected header with sender_code, recipient_code, fresh api_call_id and correlation_id, IST timestamp, status request.initiated. + - Confirmation that the internal prefix is reachable and intended for your integration; the specs are silent on this. + + ### Postconditions + + Returns 202 Accepted with StatusSuccessResponse (timestamp, api_call_id, correlation_id, result with sender_code, recipient_code, entity_type and protocol_status, error), or 400, 404 or 500 in the same envelope. The payer's plan arrives later on the insurance plan on_request callback under the same correlation id; the provider must acknowledge that within 30 seconds. An empty plan or a PAYR-1401 to PAYR-1406 error is a documented business outcome. No additional behaviour is documented for the internal variant. + + ### Common mistakes + + - Assuming the internal route bypasses validation or returns the plan synchronously; it is documented as identical to the public request. + - Omitting both Task inputs; at least one of policyNumber or providerId is required. + - Resubmitting while a previous request is in progress (PAYR-1406). + - Hard-coding the internal prefix without confirming it is your onboarded route; a 404 may simply mean the wrong host or prefix shape. + + ### Best practices + + - Reuse the public request's bundle builder and header hygiene; make only the path prefix configurable. + - Mint a fresh UUID correlation id per discovery cycle and a fresh api_call_id per call; use IST timestamps. + - Cache and periodically refresh the returned plan; enforce its claim conditions before preauth. + - Have the on_request receiver and v1/error in place before sending. + + ### Related scenario + + A hospital information system vendor generating clients from the insuranceplanhcxservice Swagger finds both insuranceplanRequestPost-style operations and their Internal twins. The vendor implements one plan-discovery module that posts to /v1/insuranceplan/request by default, with the internal path selectable per deployment after confirmation from NHCX onboarding. Either way the flow is the same: 202 receipt, the package master arriving on the on_request callback, then coverage eligibility and preauth built against the cached plan. + + ### Specification + + Chapter [Insurance plan request](/docs/nhcx/v1/reference/fhir/insurance-plan-request) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxMDAwMDA0NDQ2QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "200": + description: Returns 202 Accepted with StatusSuccessResponse (timestamp, api_call_id, correlation_id, result with sender_code, recipient_code, entity_type and protocol_status, error), or 400, 404 or 500 in the same envelope. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 25/08/2026 09:30:00:077 + api_call_id: d0e1f2a3-b4c5-6789-3456-890123456789 + correlation_id: 55667788-99aa-bbcc-ddee-ff0011223344 + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: insuranceplan + protocol_status: request.queued + error: + code: "" + message: "" + /internal/v1/insuranceplan/on_request: + post: + operationId: insurance_plan_internal_v1_insuranceplan_on_request + x-abdm-use-case: Adapter + tags: + - Adapter + summary: Insurance plan callback (internal variant) (adapter) + description: |- + Internal twin of /v1/insuranceplan/on_request: the payer InsuranceplanBundle callback with identical semantics, distinct operationId. + + ### Business purpose + + This is the internal-path form of the callback through which a payer delivers the digital policy: the InsurancePlan collection Bundle with packages, rates, qualifiers, claim conditions, mandatory documents and questionnaires for one policy and one hospital. The documentation lists it as an internal variant of the callback API with the same semantics as /v1/insuranceplan/on_request and does not describe any difference beyond the operationId. Its business value is unchanged: a machine-readable contract view that reduces rework and rejections. + + ### When to use + + Same as the public callback: after receiving and acknowledging an insurance plan request Task, the payer posts the plan bundle under the request's correlation id with a responder status (response.complete, or response.error with x-hcx-error_details). The bundle may follow either documented structure and may be empty when no coverage matches. The specifications do not indicate when the internal path is used in preference to the public one. + + ### Preconditions + + - Inbound request decrypted, correlation id captured, 202 acceptance already returned. + - Registered payer with a valid Bearer token and the provider's certificate for encryption. + - Collection Bundle containing InsurancePlan, Organization and any Questionnaire resources, filtered to the requesting provider per the MoU. + - Protected header echoing the request's correlation id with a fresh api_call_id, IST timestamp and responder status. + - Confirmation that the internal route is the one intended for your gateway integration. + + ### Postconditions + + Returns 202 Accepted with the StatusSuccessResponse envelope, or 400, 404 or 500 in the same shape; the bundle is forwarded to the provider, which must acknowledge within 30 seconds and may then cache the plan and enforce its conditions before preauth. Insurance plan business errors are PAYR-1401 to PAYR-1406. No additional behaviour is documented for the internal variant. + + ### Common mistakes + + - Expecting different validation or routing from the public callback; none is documented. + - Minting a new correlation id instead of echoing the request's (NHCX-1010). + - Populating cost.value with the package rate rather than the extra amount over the procedure cost. + - Returning an unfiltered package master rather than the provider-specific view. + - Provider side: failing to handle both structuring approaches or treating an empty plan as a fault. + + ### Best practices + + - Share one bundle builder with the public callback; only the path differs. + - Acknowledge the inbound Task first, assemble the plan asynchronously, then post. + - Use the documented claim-condition codes and include Questionnaire resources for mandatory documents. + - Fresh api_call_id, IST timestamp, response.complete or response.error with error details. + - Provider side: cache, refresh periodically or on treatment change, validate preauth items against the plan. + + ### Related scenario + + A payer platform team reviewing the insuranceplanhcxservice specification notices the callback appears twice, publicly and under /internal/v1. They implement a single plan-publication service that emits the InsurancePlan bundle under the request's correlation id, configured to the public /v1/insuranceplan/on_request path unless NHCX onboarding specifies the internal one. When a hospital's discovery Task arrives, the service returns 202, builds the filtered package master and posts it; the hospital acknowledges within 30 seconds and proceeds to eligibility and preauth. + + ### Specification + + Chapter [Insurance plan response](/docs/nhcx/v1/reference/fhir/insurance-plan-response-overview) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxNTE4QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "200": + description: Returns 202 Accepted with the StatusSuccessResponse envelope, or 400, 404 or 500 in the same shape; the bundle is forwarded to the provider, which must acknowledge within 30 seconds and may then cache the plan and enforce its conditions before preauth. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 25/08/2026 09:37:00:263 + api_call_id: e1f2a3b4-c5d6-7890-4567-901234567890 + correlation_id: 55667788-99aa-bbcc-ddee-ff0011223344 + result: + sender_code: 1518@hcx + recipient_code: 1000004446@hcx + entity_type: insuranceplan + protocol_status: request.queued + error: + code: "" + message: "" +webhooks: + v1_insuranceplan_request: + post: + operationId: insurance_plan_webhook_v1_insuranceplan_request + x-abdm-triggered-by: insurance_plan_v1_insuranceplan_request + x-abdm-use-case: Webhooks + tags: + - Insurance plan + summary: Receive insurance plan request + description: |- + Hosted by the payer. The exchange posts this message to the `endpoint_url` you registered, at `/v1/insuranceplan/request`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Provider sends a Task with code poll naming a policy number and/or its HFR id to fetch the payer's machine-readable InsurancePlan for that pairing. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxMDAwMDA0NDQ2QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" + v1_insuranceplan_on_request: + post: + operationId: insurance_plan_webhook_v1_insuranceplan_on_request + x-abdm-triggered-by: insurance_plan_v1_insuranceplan_on_request + x-abdm-use-case: Webhooks + tags: + - Insurance plan + summary: Receive insurance plan callback + description: |- + Hosted by the provider. The exchange posts this message to the `endpoint_url` you registered, at `/v1/insuranceplan/on_request`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Payer returns the InsurancePlan collection Bundle (InsurancePlan, Organization, optional Questionnaire) under the request correlation id. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxNTE4QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + description: "On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value." + parameters: + BearerAuth: + name: bearer_auth + in: header + required: true + description: It is `bearer_auth`, not `Authorization`, on NHCX's own endpoints. + schema: + type: string + example: Bearer + XHcxSenderCode: + name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + XHcxRecipientCode: + name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + XHcxApiCallId: + name: x-hcx-api_call_id + in: header + required: true + description: Fresh on every message, including responses. Mandatory on the envelope. + schema: + type: string + example: + XHcxRequestId: + name: x-hcx-request_id + in: header + required: false + description: One per originating request. The Open Protocol page marks it Mandatory; the Technical Specifications page marks it Optional. Optional on the envelope. + schema: + type: string + example: + XHcxCorrelationId: + name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + XHcxWorkflowId: + name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "" + XHcxTimestamp: + name: x-hcx-timestamp + in: header + required: true + description: See the format note below. Mandatory on the envelope. + schema: + type: string + example: + XHcxStatus: + name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: request.initiated + XHcxBenAbhaId: + name: x-hcx-ben-abha-id + in: header + required: true + description: The beneficiary's ABHA number. Mandatory on every exchange, including those with no beneficiary in the payload. Mandatory on the envelope. + schema: + type: string + example: "" +x-abdm-errors: + notes: "Codes any exchange call can meet are recorded once, in the [Other](/docs/nhcx/v1/api/other) specification: the gateway's NHCX- codes, the standard payer codes, and the reference payer's structure and transport codes. The reference payer's other codes sit with the exchange they reject: coverage eligibility, preauthorisation, claim and insurance plan. [Reading error codes](/docs/nhcx/v1/reference/error-code-guide) explains the code spaces." +x-abdm-errors-reference-payer: + source: Reference payer codes, PAYR-1001 to PAYR-1520. Sent by the PMJAY reference implementation; they arrive inside the sealed response. + codes: + - code: PAYR-1401 + message: policy not allowed for the hospital. Please reach out to technical support team. + action: "" + - code: PAYR-1402 + message: Requested policy found not be associated with any payer for insurance plan request. Hence request will not be processed. + action: "" + - code: PAYR-1403 + message: Requested renewal found not be associated with requested policy for insurance plan request. Hence request will not be processed. + action: "" + - code: PAYR-1404 + message: No treatment provided for policy under any speciality. Please reach out to technical support team. + action: "" + - code: PAYR-1405 + message: No enrolled hospital found for HFR id or sender id . Please reach out to technical support team. + action: "" + - code: PAYR-1406 + message: Existing request with correlation id %s is in progress with the payer. Hence this request will not be accepted until the execution for previous request is complete. Please wait for 15 - 60 minutes to allow the execution of previous requests. For further assistance, please reach out to technical support team. + action: "" + - code: PAYR-1501 + message: Value type received as %s for category - ONS and code - PSP for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - ONS and code - PSP combination is used to get the surgery date. So the surgery date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - PSP. + action: "" + - code: PAYR-1502 + message: Value type received as %s for category - ONS and code - ADDD for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - ONS and code - ADDD combination is used to get the admission date. So the admission date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - ADDD. + action: "" + - code: PAYR-1503 + message: Value type received as %s for category - ONS and code - DTM for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - ONS and code - DTM combination is used to get the death date. So the death date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - DTM. + action: "" + - code: PAYR-1504 + message: Value type received as %s for category - NMI and code - CQD for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - NMI and code - CQD combination is used to get the overall case remarks for query response. So the case remarks for query response should be sent as a string value, adhering to the NRCES standards, with the category - NMI and code - CQD. + action: "" + - code: PAYR-1505 + message: Category received as %s and code received as %s for item with sequence %s in supporting info in claim resource, where the reference value redirects to Questionnaire Response resource in the FHIR bundle. To include a policy/case level Questionnaire Response, in supporting info list there should be an entry with category - INF and code - ODN , and the value as reference. This reference value should refer to a resource of Questionnaire Response in the FHIR bundle. To include response for any STG questionnaire, in supporting info list there should be an entry with category - STG, and the value as reference + action: "" + - code: PAYR-1506 + message: Invalid gender received for new born patient. Please try agian with valid gender data as it is mandatory for PMJAY in new born case. Please refer to the valid gender values at https://hl7.org/fhir/R4/valueset-administrative-gender.html + action: "" + - code: PAYR-1507 + message: Invalid date of birth received for new born patient. Please try agian with valid date of birth as it is mandatory for PMJAY in new born case. + action: "" + - code: PAYR-1508 + message: Invalid resource received for new born patient for url %s. Please try agian with valid Patient resource for the link reference as linked Patient resource is mandatory for PMJAY in new born case + action: "" + - code: PAYR-1509 + message: Invalid attachment received for new born patient. Please try agian with valid attachment as attachment is mandatory for PMJAY in new born case + action: "" + - code: PAYR-1510 + message: Invalid parameter code received. Please check and try again with a valid parameter code + action: "" + - code: PAYR-1511 + message: Invalid parameter value received. Please check and try again with a valid parameter value + action: "" + - code: PAYR-1512 + message: Invalid resource received for patient for url %s. Please try agian with valid Patient resource for the reference + action: "" + - code: PAYR-1513 + message: Invalid diagnosis received in DiagnosisComponent. In DiagnosisComponent, diagnosis should be sent as CodeableConcept. Please try agian with valid data + action: "" + - code: PAYR-1514 + message: Value type received as %s for category - DIS for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - DIS is used to get the discharge related information. So the discharge information should be sent as string value, with value representing discharge stage (After Surgery / Before Surgery / During Surgery), with the category - DIS and code - DTH/LAMA/DAMA/DTM + action: "" + - code: PAYR-1515 + message: Invalid name received for organization resource with url %s. Name is mandatory for organization resource. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html + action: "" + - code: PAYR-1516 + message: No event found for api-caller-id %s and correlation id %s for sender code %s. Hence error response willnot be accepted. + action: "" + - code: PAYR-1517 + message: Invalid error structure received for NHCX error. Protocol response structure is expected, but received JWEPayloadResponse. + action: "" + - code: PAYR-1518 + message: No input parameters received for task resource. Input parameters are expected for task resource, but not received. Please try again with valid data. + action: "" + - code: PAYR-1519 + message: No type found for task input parameters. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html + action: "" + - code: PAYR-1520 + message: Invalid resource received for communication for url %s. Please try agian with valid Communication resource for the reference. + action: "" diff --git a/catalogue/openapi/nhcx/v1/nhcx-onboarding.yaml b/catalogue/openapi/nhcx/v1/nhcx-onboarding.yaml new file mode 100644 index 000000000..9ad84bf07 --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-onboarding.yaml @@ -0,0 +1,659 @@ +# NHCX onboarding, from the NHCX package's Bruno folder apis/11-onboarding. +# +# Written by the package's system/build-ekadocs.mjs (make ekadocs); change the .bru +# requests there and port again rather than editing this file. +# +# Rules this file follows: catalogue/openapi/CONVENTIONS.md +openapi: 3.1.1 +info: + x-portal: + module: onboarding + label: Onboarding + position: 11 + title: NHCX onboarding + summary: Nothing moves through NHCX until both the sender and the recipient exist in the participant registry, which the platform treats as the source of truth for who may exchange claims data. + description: |- + The Onboarding calls on the National Health Claims Exchange (NHCX): 5 operations. + + Nothing moves through NHCX until both the sender and the recipient exist in the participant registry, which the platform treats as the source of truth for who may exchange claims data. + + Guides that use these calls: [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant). + version: nhcx-v1 + license: + name: MIT + identifier: MIT + contact: + name: NHCX sandbox + url: https://hcxsbx.abdm.gov.in + x-abdm-gateway: nhcx + x-abdm-module: onboarding + x-abdm-phase: 1 + x-abdm-roles: + - provider + - payer +x-abdm-sources: + - file: nhcx-package/apis/11-onboarding + role: upstream + hash: sha256:41195ab9975347123e36e509ad940f4fe77c467855d32dad802e46eb78e9c10e + note: The package's Bruno collection, one request per operation. + - file: nhcx-package/baseurl.yaml + role: upstream + hash: sha256:47d8412abbfc53b1e1038410e7980eee029d7b1be5082f4ae6c1d4e16ae0dd0f + note: The sandbox and production hosts. +servers: + - url: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice + description: Sandbox, Participant service. + - url: https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice + description: Production. +tags: + - name: Onboarding + description: Nothing moves through NHCX until both the sender and the recipient exist in the participant registry, which the platform treats as the source of truth for who may exchange claims data. +security: + - bearerAuth: [] +paths: + /participant/create: + post: + operationId: onboarding_participant_create + x-abdm-use-case: Onboarding + tags: + - Onboarding + summary: Participant create (v1) + description: |- + Creates a participant record in the NHCX registry from a full v1 profile and returns the generated participant_code. + + ### Business purpose + + Nothing moves through NHCX until both the sender and the recipient exist in the participant registry, which the platform treats as the source of truth for who may exchange claims data. This call is the original, full-profile way to register a hospital, insurer or TPA: it captures the organisation's name, roles, contact points, linked registry identifiers, callback endpoint and public encryption certificate in one record. The registry then issues the participant_code that every later transaction is addressed with. + + ### When to use + + Call it once, at onboarding time, before any transaction API is attempted. The FAQ base-URL table lists this path (not the v2 form) as the sandbox Create Participant API at https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/create, whereas production onboarding is documented against /v2/participant/create followed by GET /validate. It is a plain synchronous registry call; no NHCX workflow or x-hcx-status codes are involved. If the organisation later rotates its certificate or moves its callback URL, use /participant/update or /v2/update/cert rather than creating again. + + ### Preconditions + + - Sandbox or production access has been granted through the semi-manual registration review, so you hold a client_id and client_secret. + - A valid Bearer token from POST /get/session, sent with the Bearer prefix in the bearer_auth (Authorization) header, plus Accept: application/json and Content-Type: application/json. + - Required body fields of ParticipantCreateBody: linked_registry_codes, participant_name, registryid, roles, primaryEmail, primaryMobile, encryption_cert and endpoint_url. The certificate is mandatory at creation, so generate the 2048-bit RSA key pair and self-signed X.509 certificate first and Base64-encode it. + - Correct registry ID for your type: HFR ID for providers, IRDAI-issued ID for payers and TPAs. + + ### Postconditions + + On success the registry returns HTTP 200 with ParticipantCreateResponse containing only participant_code, described as the machine-generated unique identifier of the participant on the HCX instance; sandbox codes look like 100001@sbx and production codes like XXXXX7583@hcx. There is no asynchronous callback. The new record carries a status (Created, Active, Inactive or Blocked in the architecture description) that the gateway checks on every routing leg, so the code is not usable for transactions until the instance activates it. Failures return 400 Client Error, 404 Resource not found or 500 with the ErrorResponse envelope (timestamp plus error code, message and trace). + + ### Common mistakes + + - Passing the wrong registry ID: providers must send the HFR ID, payers the IRDAI ID with leading zeros stripped (0123 becomes 123). + - Mixing field casing across generations: this v1 body is snake_case (participant_code, encryption_cert, endpoint_url); copying v2 names such as endpointurl yields a 400. + - Omitting the Accept header or the Bearer prefix on the token, which surfaces as a rejection before business logic or a flat 401. + - Registering an endpoint_url that is an IP address or carries a port; the callback URL must be a domain name on an India-based server with the NHCX NAT IPs whitelisted. + - Submitting the raw PEM instead of the Base64-encoded certificate. + + ### Best practices + + - Keep the private key generated alongside the certificate in PKCS8 form locally; only the certificate (public half) is registered. + - Store the returned participant_code as configuration; it becomes x-hcx-sender_code on every outbound message and the value payers use in /fetch/certs. + - Do not re-run create to fix a field; the registry is updated with /participant/update, and an entity can legitimately hold several participant codes only when each is linked to a separate HFR ID. + - Log the request minus the certificate body and never log the bearer token or client_secret. + - Treat host and prefix as one environment variable; sandbox codes and credentials do not carry into production. + + ### Related scenario + + A 200-bed hospital has been approved for the NHCX sandbox and received its client credentials. The integration team first calls POST /get/session to obtain a Bearer token, then generates an RSA key pair and self-signed certificate. They call /participant/create with the hospital's HFR ID as registryid, role PROVIDER, the Base64 certificate and their callback base URL. The registry returns participant_code 100001@sbx. With that code in hand the team calls /fetch/participants/list to find the dummy payer 1000003538@hcx and /fetch/certs to obtain its certificate, and only then sends the first /v1/coverageeligibility/check. + + ### Specification + + Chapter [Your certificate](/docs/nhcx/v1/getting-started/your-certificate) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/Source" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + linked_registry_codes: + type: array + items: + type: string + registryid: + type: string + participant_name: + type: string + scheme_code: + type: string + state: + type: string + district: + type: string + roles: + type: array + items: + type: string + primaryEmail: + type: string + phone: + type: array + items: + type: string + primaryMobile: + type: string + signing_cert_path: + type: string + encryption_cert: + type: string + endpoint_url: + type: string + example: + linked_registry_codes: + - "10001" + registryid: + participant_name: Test Hospital + scheme_code: PMJAY + state: Haryana + district: Panchkula + roles: + - "10001" + primaryEmail: integration@hospital.example + phone: + - "01123456789" + primaryMobile: "9876543210" + signing_cert_path: "" + encryption_cert: + endpoint_url: https://nhcx.hospital.example + responses: + "200": + description: On success the registry returns HTTP 200 with ParticipantCreateResponse containing only participant_code, described as the machine-generated unique identifier of the participant on the HCX instance; sandbox codes look like 100001@sbx and production codes like XXXXX7583@hcx. + content: + application/json: + schema: + type: object + properties: + participant_code: + type: string + example: + participant_code: 100001@sbx + /v2/participant/create: + post: + operationId: onboarding_v2_participant_create + x-abdm-use-case: Onboarding + tags: + - Onboarding + summary: Participant create (v2) + description: |- + Registry-linked creation: registry type and ID, role codes, endpoint URL and contacts; returns participantid and a transactionid for /validate. + + ### Business purpose + + Production onboarding needs to prove that the organisation registering on NHCX is the same one already known to an external authority (the ABDM Health Facility Registry for hospitals, the IRDAI registry for insurers and TPAs). The v2 create therefore takes a thin, registry-linked payload rather than a full profile, validates the mobile number against the number held in HFR or the NHCX payer details, and sends a one-time passcode to that number. This is step 1 of the four-step production sequence and is what turns a verified facility into an addressable NHCX participant. + + ### When to use + + Use at production onboarding after sandbox certification has been reviewed and credentials issued; the documented URL is https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice/v2/participant/create. It is always followed by GET /validate with the returned transactionid and the SMS passcode, which must happen within 24 hours. In the sandbox the FAQ lists the unversioned /participant/create instead. No NHCX workflow codes or x-hcx-status values apply; this is a synchronous JSON call outside the JWE protocol. + + ### Preconditions + + - Production (or sandbox) credentials and a fresh Bearer token in bearer_auth with the Bearer prefix; Accept and Content-Type set to application/json. + - registrytype from the Valid Registry Enums: HFR 10001, NIN 10002, ROHINI 10003, PAYER 10004 (HFR/EUA use 10001, PAYER/TPA use 10004). + - role as an array from the Valid Role Enums: PROVIDER 10001, PAYER 10002, AGENCY_TPA 10003, EUA 10009, among others. + - registryid formatted correctly: HFR ID for providers; IRDAI ID with leading zeros stripped for payers. + - mobilenumber already registered with HFR (providers) or NHCX payer details (payers); both must match for the call to succeed. + - Required fields: registrytype, registryid, role, endpointurl, mobilenumber, email; scheme_code is optional. + + ### Postconditions + + HTTP 200 with ParticipantCreateV2Resp: participantid, facilityname, facilitycontact and facilityemail echoed from the linked registry, a transactionid such as 1vouv8tlz2tnl-1fpspjhwj07c6, and an error object (code, message, trace). A passcode is sent by SMS to the registered mobile number. The participant is not confirmed until GET /validate?transactionId=&passcode= succeeds; the transaction id and passcode are valid for 24 hours and each re-trigger generates a new pair. Only after creation confirmation can /v2/participant/update be used to upload the certificate and endpoint. Failures use the standard 400/404/500 ErrorResponse envelope. + + ### Common mistakes + + - Confusing the two 10001 enums: 10001 is PROVIDER as a role and HFR/EUA as a registry type; they are different fields. + - Sending the IRDAI registry ID with leading zeros (0123 instead of 123), which the NHA lists as a frequent production failure. + - Using a mobile number that does not match the one on record in HFR or the NHCX payer details; the validation requires an exact match. + - Losing the transactionid: if it is forgotten, the only recovery is to create the request again, which issues a new passcode. + - Letting the 24-hour validity lapse before calling /validate. + - Sending the v1 snake_case body or expecting a participant_code key; this response uses participantid. + + ### Best practices + + - Persist transactionid immediately, together with the timestamp, so the /validate step can be completed by whoever holds the registered phone. + - Verify the mobile number and registry ID against HFR or IRDAI records before calling; the check is strict and every failed attempt is a manual round trip. + - Treat the error object in a 200 response as meaningful and surface it to the operator rather than assuming success from the HTTP status alone. + - Do not retry blindly: each call generates a new transaction id and passcode and invalidates the plan to confirm the previous one. + - Keep sandbox and production credentials, hosts and participant codes strictly separate. + + ### Related scenario + + An insurer's TPA has cleared sandbox certification and received production credentials. Its integrator obtains a Bearer token, then calls /v2/participant/create with registrytype 10004, the IRDAI-issued registry ID (leading zeros stripped), role ["10003"], the production callback base URL and the mobile number the NHA has on file. The response returns participantid, the facility details and transactionid 1vouv8tlz2tnl-1fpspjhwj07c6, and an SMS passcode reaches the compliance officer's phone. Within the hour the team calls GET /validate with both values to confirm creation, then proceeds to /v2/participant/update to publish its encryption certificate. + + ### Specification + + Chapter [Your certificate](/docs/nhcx/v1/getting-started/your-certificate) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + registrytype: + type: string + registryid: + type: string + role: + type: array + items: + type: string + endpointurl: + type: string + mobilenumber: + type: string + email: + type: string + example: + registrytype: "10001" + registryid: XXXXX74586 + role: + - "10001" + endpointurl: https://nhcx.demohospital.example.in + mobilenumber: XXXX748348 + email: sample@gmail.com + responses: + "200": + description: "HTTP 200 with ParticipantCreateV2Resp: participantid, facilityname, facilitycontact and facilityemail echoed from the linked registry, a transactionid such as 1vouv8tlz2tnl-1fpspjhwj07c6, and an error object (code, message, trace)." + content: + application/json: + schema: + type: object + properties: + participantid: + type: string + facilityname: + type: string + facilitycontact: + type: string + facilityemail: + type: string + transactionid: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + trace: + type: string + example: + participantid: XXXXX7583@hcx + facilityname: Demo Multispeciality Hospital + facilitycontact: XXXX748348 + facilityemail: sample@gmail.com + transactionid: 1vouv8tlz2tnl-1fpspjhwj07c6 + error: + code: "" + message: "" + trace: "" + /v2/participant/hementity/create: + post: + operationId: onboarding_v2_participant_hementity_create + x-abdm-use-case: Onboarding + tags: + - Onboarding + summary: HEM-entity participant create + description: |- + Creates a hospital (HEM-entity) participant from the full empanelment payload (bank, tax, beds, specialities, doctors); returns status and hospitalid. + + ### Business purpose + + Government scheme empanelment needs far more than a name and a certificate: a hospital must be identified by scheme, state and district, carry bank details for settlement, tax identifiers for deduction handling, and descriptive data such as hospital type, bed strength, accreditation, specialities and doctors. This endpoint captures that full hospital-empanelment profile in one registry call so the payer side can settle and audit against it. It exists alongside the thinner v2 create because scheme onboarding (for example PMJAY) involves configuration that regular private-insurance onboarding does not. + + ### When to use + + Use during scheme-specific hospital onboarding when the operator directs you to the HEM-entity form rather than the registry-linked /v2/participant/create. It shares the create description with the other two create endpoints, but the OpenAPI schemas differ materially, so it is not a drop-in alternative. It is a synchronous registry call with no workflow or x-hcx-status codes. The docs do not state whether a passcode confirmation via /validate follows; the response carries no transactionid, so plan the approval step with your onboarding contact. + + ### Preconditions + + - Bearer token with the Bearer prefix in bearer_auth, plus Accept and Content-Type: application/json. + - Required ParticipantCreateBodyV2 fields: participant_name, scheme_code, state, district, entityid, bankdetails, participantcode, hospitaltype, incentiveCode, hospitalbedstrength, lab_yn, roles, specialityList, primaryEmail, primaryMobile, encryption_cert, endpoint_url. + - BankDetails requires facilitybankaccountname, authorizedsignatoryname, bankaccountnumber, ifsccode, bankname, bankbranchname, bankaddress, micrcode and accounttype; upiid, paymenttype and mailid are optional. + - If taxdetails is supplied, pannumber, tannumber and gstnumber are all required within it. + - A Base64-encoded self-signed X.509 encryption certificate and a domain-name callback URL. + + ### Postconditions + + HTTP 200 with ParticipantCreateResponseV2 containing status and hospitalid. Unlike the other two create calls, the response does not return a participant code, despite the shared description; the participantcode you supplied in the body is the identifier the record is keyed on. There is no asynchronous callback. Errors follow the registry envelope of 400 Client Error, 404 Resource not found and 500 Downstream systems down, each with ErrorResponse (timestamp, error code, message, trace). + + ### Common mistakes + + - Expecting a participant_code in the response and failing to persist the hospitalid that is actually returned. + - Leaving out nested required fields, especially inside bankdetails, or supplying taxdetails with only some of pannumber, tannumber and gstnumber. + - Mixing field naming: this schema uses snake_case for participant_name, scheme_code and encryption_cert but flattened lowercase for participantcode and hospitalbedstrength; copy names exactly from the schema. + - Sending the PEM certificate without Base64 encoding. + - Registering an endpoint_url with an IP address or port, which fails the go-live reachability checks. + + ### Best practices + + - Build the payload from the schema field by field and validate nested objects (BankDetails, HospitalDoctorDetails, IncentiveRequest) before sending; a 400 does not point at the offending nested field. + - Collect bank, tax, MICR and IFSC values from the finance team in advance; they are mandatory and settlement depends on them. + - Keep the private key that pairs with encryption_cert in PKCS8 form on the callback host only. + - Never log the full request; it contains bank account and tax identifiers. + - Confirm with the onboarding operator whether a passcode approval step applies, since the response has no transactionid to pair with /validate. + + ### Related scenario + + A district hospital being empanelled under a state scheme is asked to register as an HEM entity. The hospital's IT partner obtains a Bearer token and assembles the full payload: scheme_code, state and district, bed strength, hospital type, speciality list, doctor roster, bank details for settlement and PAN, TAN and GST numbers, plus the Base64 certificate and callback URL. They call /v2/participant/hementity/create and receive status and hospitalid. The record is then available to the scheme payer via /participant/search, and the hospital moves on to fetching the payer's certificate with /fetch/certs before sending its first pre-authorisation. + + ### Specification + + Chapter [Your certificate](/docs/nhcx/v1/getting-started/your-certificate) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + participant_name: + type: string + participantcode: + type: string + scheme_code: + type: string + state: + type: string + district: + type: string + entityid: + type: string + hospitaltype: + type: string + incentiveCode: + type: string + hospitalbedstrength: + type: string + lab_yn: + type: string + roles: + type: array + items: + type: string + specialityList: + type: array + items: + type: string + primaryEmail: + type: string + primaryMobile: + type: string + encryption_cert: + type: string + endpoint_url: + type: string + bankdetails: + type: object + properties: + facilitybankaccountname: + type: string + authorizedsignatoryname: + type: string + bankaccountnumber: + type: string + ifsccode: + type: string + bankname: + type: string + bankbranchname: + type: string + bankaddress: + type: string + micrcode: + type: string + accounttype: + type: string + taxdetails: + type: object + properties: + pannumber: + type: string + tannumber: + type: string + gstnumber: + type: string + example: + participant_name: District Hospital Demo + participantcode: XXXXX7583@hcx + scheme_code: PMJAY + state: Karnataka + district: Mysuru + entityid: IN2910001234 + hospitaltype: Public + incentiveCode: NABH + hospitalbedstrength: "200" + lab_yn: Y + roles: + - provider + specialityList: + - General Medicine + - General Surgery + primaryEmail: claims@districthospital.example.in + primaryMobile: "9800000000" + encryption_cert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t... + endpoint_url: https://nhcx.districthospital.example.in + bankdetails: + facilitybankaccountname: District Hospital Demo + authorizedsignatoryname: Medical Superintendent + bankaccountnumber: "000000000000" + ifsccode: SBIN0000000 + bankname: State Bank of India + bankbranchname: Mysuru Main + bankaddress: Mysuru, Karnataka + micrcode: "570002000" + accounttype: Current + taxdetails: + pannumber: AAAAA0000A + tannumber: BLRA00000A + gstnumber: 29AAAAA0000A1Z5 + responses: + "200": + description: HTTP 200 with ParticipantCreateResponseV2 containing status and hospitalid. + content: + application/json: + schema: + type: object + properties: + status: + type: string + hospitalid: + type: string + example: + status: Created + hospitalid: H00012345 + /validate: + get: + operationId: onboarding_validate + x-abdm-use-case: Onboarding + tags: + - Onboarding + summary: Validate participant creation + description: |- + Confirms a participant creation by presenting the SMS passcode and the transactionId returned by /v2/participant/create. + + ### Business purpose + + Registering an organisation on a national claims exchange must be authorised by someone who actually controls that organisation's registered contact channel. The create call therefore only stages the record and sends a passcode to the mobile number held in HFR or the NHCX payer details; this validation call closes the loop by proving possession of that passcode. It is step 2 of the four-step production onboarding sequence and is what turns a staged participant into a confirmed one. + + ### When to use + + Call it after /v2/participant/create has returned a transactionid and the passcode has arrived by SMS, and before attempting /v2/participant/update, whose validations require that creation confirmation is already completed. The production URL is https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice/validate?transactionId=""&passcode="". The pair is valid for 24 hours. It is one of only three GET operations in the participant service and carries no workflow or x-hcx-status codes. + + ### Preconditions + + - A completed /v2/participant/create whose response supplied the transactionid. + - The passcode delivered to the registered mobile number for that specific transaction; passcodes are bound to a transaction id and cannot be reused across attempts. + - Both values presented as query parameters passcode and transactionId within 24 hours of the create call. + - A Bearer token in bearer_auth with the Bearer prefix and Accept: application/json, as for every registry call. + + ### Postconditions + + HTTP 200 with a bare string body; the OpenAPI declares the 200 response type as string and the operation (particiapntValidate) as validating approval from the participant for participant creation. The participant is now confirmed in the registry and satisfies the precondition for /v2/participant/update, which uploads the encryption certificate and callback endpoint. There is no asynchronous callback. A wrong or expired passcode, or an unknown transaction id, returns the registry ErrorResponse envelope on 400 or 404. + + ### Common mistakes + + - Waiting more than 24 hours; both the transaction id and the passcode expire and the create call must be repeated. + - Re-triggering /v2/participant/create while a passcode is pending, which issues a new transaction id and passcode and orphans the earlier pair. + - Using a passcode from a different transaction id; passcodes are specific to the transaction that generated them. + - Calling /update/validate by mistake; that endpoint confirms updates, not creation. + - Losing the transaction id: the documented recovery is to create the request again. + + ### Best practices + + - Treat the passcode like a one-time credential: never log it, and hand it from the phone holder to the integrator through a controlled channel. + - Store transactionid with a 24-hour expiry so the operator dashboard can show whether confirmation is still possible. + - Send parameters as query string values on a GET; there is no JSON body. + - After success, proceed straight to /v2/participant/update so the certificate and endpoint are in place before any counterparty tries to fetch them. + + ### Related scenario + + A hospital's production onboarding started with /v2/participant/create, which returned transactionid 1vouv8tlz2tnl-1fpspjhwj07c6 and triggered a passcode to the medical superintendent's registered phone. The superintendent reads the passcode to the integration engineer, who calls GET /validate?transactionId=1vouv8tlz2tnl-1fpspjhwj07c6&passcode=482913 with the Bearer token. The registry returns 200 and the participant is confirmed. The engineer then calls /v2/participant/update with the Base64 certificate and callback URL, and completes that change with /update/validate. + + ### Specification + + Chapter [Your certificate](/docs/nhcx/v1/getting-started/your-certificate) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: transactionId + in: query + required: true + schema: + type: string + example: + - name: passcode + in: query + required: true + schema: + type: string + example: + responses: + "200": + description: HTTP 200 with a bare string body; the OpenAPI declares the 200 response type as string and the operation (particiapntValidate) as validating approval from the participant for participant creation. + content: + application/json: + schema: + type: object + properties: + _contentType: + type: string + _body: + type: string + example: + _contentType: string + _body: + /update/validate: + get: + operationId: onboarding_update_validate + x-abdm-use-case: Onboarding + tags: + - Onboarding + summary: Validate participant update + description: |- + Confirms a participant update by presenting the SMS passcode and the transactionId returned by /v2/participant/update. + + ### Business purpose + + Changing a participant's encryption certificate or callback endpoint changes where encrypted claims data is delivered and who can decrypt it, so the registry does not apply such updates on an API call alone. /v2/participant/update stages the change and sends a passcode to the registered mobile number; this call confirms it. It is step 4 of the production onboarding sequence and the same approval mechanism protects every later certificate or bridge rotation done through the v2 update. + + ### When to use + + Call it after /v2/participant/update returns a transactionid and the passcode arrives by SMS, within the 24-hour validity window. The production URL is https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice/update/validate?transactionId=""&passcode="". It is also the closing step of the annual key-rotation checklist when rotation is done via /v2/participant/update. The passcode-free alternative for certificate-only changes is /v2/update/cert. No workflow or x-hcx-status codes apply. + + ### Preconditions + + - The participant is already registered and its creation was confirmed via /validate. + - A completed /v2/participant/update that returned a transactionid, with the matching passcode received on the registered mobile number. + - The call is made within 24 hours; each new update trigger generates a new transaction id and passcode. + - Bearer token with the Bearer prefix in bearer_auth and Accept: application/json; parameters go in the query string. + + ### Postconditions + + HTTP 200 with a bare string body (operation particiapntUpdateValidate, response type string). The staged certificate and endpoint URL become the participant's live registry values, which is what counterparties will receive from /fetch/certs and what the gateway will use for callback delivery. There is no asynchronous callback. Errors return the registry ErrorResponse envelope with 400, 404 or 500. + + ### Common mistakes + + - Assuming the update is live as soon as /v2/participant/update returns; until this call succeeds counterparties may still fetch the old certificate. + - Presenting a passcode from a previous update attempt after a new one was triggered. + - Letting the 24-hour window lapse and then retrying validation instead of re-issuing the update. + - Calling /validate (creation) instead of /update/validate. + - Losing the transaction id, which requires repeating the update request. + + ### Best practices + + - Rotate keys in two phases: keep the old private key available for decrypting inbound callbacks until the update is validated and cached certificates (24-hour TTL on the payer side) have refreshed. + - Persist transactionid with its 24-hour expiry and record who completed validation, for audit. + - Never log the passcode; treat it as a one-time credential. + - After success, call /participant/search on your own code to confirm encryption_cert and endpoint_url reflect the change. + + ### Related scenario + + A year after go-live a payer's security team rotates the encryption key pair. The integrator generates a new self-signed X.509 certificate, Base64-encodes it and calls /v2/participant/update with participantcode and encryptioncert. The registry returns status and a new transactionid and sends a passcode to the registered mobile. Within the hour the team calls GET /update/validate with both values; on 200 the new certificate is live. Providers that cached the old certificate pick up the new one at their next 24-hour refresh, and the payer keeps the old private key for one more day to decrypt in-flight callbacks. + + ### Specification + + Chapter [Your certificate](/docs/nhcx/v1/getting-started/your-certificate) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: transactionId + in: query + required: true + schema: + type: string + example: + - name: passcode + in: query + required: true + schema: + type: string + example: + responses: + "200": + description: HTTP 200 with a bare string body (operation particiapntUpdateValidate, response type string). + content: + application/json: + schema: + type: object + properties: + _contentType: + type: string + _body: + type: string + example: + _contentType: string + _body: +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + description: "On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value." + parameters: + BearerAuth: + name: bearer_auth + in: header + required: true + description: It is `bearer_auth`, not `Authorization`, on NHCX's own endpoints. + schema: + type: string + example: Bearer + Source: + name: source + in: header + required: true + description: Sent on this call, as the package's request carries it. + schema: + type: string + example: internal diff --git a/catalogue/openapi/nhcx/v1/nhcx-other.yaml b/catalogue/openapi/nhcx/v1/nhcx-other.yaml new file mode 100644 index 000000000..07647ee43 --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-other.yaml @@ -0,0 +1,2631 @@ +# NHCX other, from the NHCX package's Bruno folder apis/13-other. +# +# Written by the package's system/build-ekadocs.mjs (make ekadocs); change the .bru +# requests there and port again rather than editing this file. +# +# Rules this file follows: catalogue/openapi/CONVENTIONS.md +openapi: 3.1.1 +info: + x-portal: + module: other + label: Other + position: 13 + title: NHCX other + summary: "Claims are often not fully approved first time, for mundane reasons: missing documents, policy interpretation differences, package or pricing discrepancies." + description: |- + The Other calls on the National Health Claims Exchange (NHCX): 14 operations, and 4 callbacks you host. + + Claims are often not fully approved first time, for mundane reasons: missing documents, policy interpretation differences, package or pricing discrepancies. + + Guides that use these calls: [Cancel, reprocess and shortfall](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall), [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search), [Notifications and patient apps](/docs/nhcx/v1/reference/notifications-and-patient-apps). + + Production address for the NHCX exchange: shared by NHA after sandbox exit. + + Production address for the NHCX portal: not published. + version: nhcx-v1 + license: + name: MIT + identifier: MIT + contact: + name: NHCX sandbox + url: https://hcxsbx.abdm.gov.in + x-abdm-gateway: nhcx + x-abdm-module: other + x-abdm-phase: 1 + x-abdm-roles: + - provider + - payer +x-abdm-sources: + - file: nhcx-package/apis/13-other + role: upstream + hash: sha256:d65315e2042e17c77dd9400fc36380a58195496d693f53bb5102e805d7231de2 + note: The package's Bruno collection, one request per operation. + - file: nhcx-package/baseurl.yaml + role: upstream + hash: sha256:47d8412abbfc53b1e1038410e7980eee029d7b1be5082f4ae6c1d4e16ae0dd0f + note: The sandbox and production hosts. + - file: nhcx-package/nhcx-error.yaml + role: upstream + hash: sha256:d24ac927ed4dd722e60d7bd1d6fed15de370cc29f750d68999ee56fac93c941b + note: The error codes. +servers: + - url: https://apisbx.abdm.gov.in/hcx + description: Sandbox, NHCX exchange. +tags: + - name: Other + description: "Claims are often not fully approved first time, for mundane reasons: missing documents, policy interpretation differences, package or pricing discrepancies." + - name: Adapter + description: Internal twins of the exchange calls, for the NHCX adapter deployment. +security: + - bearerAuth: [] +paths: + /v1/task/submit: + post: + operationId: other_v1_task_submit + x-abdm-use-case: Other + tags: + - Other + summary: Task submit (reprocess or cancel) + description: |- + Provider sends a FHIR Task asking the payer to reprocess a rejected or short-paid claim or to cancel a preauth; Task.code and reasonCode set the intent. + + ### Business purpose + + Claims are often not fully approved first time, for mundane reasons: missing documents, policy interpretation differences, package or pricing discrepancies. Without a formal appeal path, disputes leave the system and become phone calls and email. The Task flow gives providers a structured, auditable way to contest a decision with new evidence, and to withdraw a pre-authorisation that will never be used. Payers get a controlled re-adjudication workflow with SLA adherence, aligned with NHA and IRDAI expectations of transparent dispute resolution. + + ### When to use + + After adjudication, when a claim was rejected or partially paid and you have valid justification and additional evidence: Task.code reprocess with reasonCode claimrejected (or partialpayment for a short payment; the handbook sample uses rejectiondisputed), workflow 18 REPROCESS_REQUEST_SUBMITTED, with 36 listed for the arbitration or erroneous case. For cancelling a submitted or approved preauth: Task.code cancel with a cancellation reasonCode (treatmentplanchanged, patientrequest, financialconstraints, alternativetreatment, duplicateclaim, administrativeerror, other), workflow 122 PREAUTH_CANCEL_INITIATED (PC01 in the scenario sheet). x-hcx-correlation_id carries the correlation id of the original claim or preauth. Reprocess outcomes are final within the workflow. + + ### Preconditions + + - Provider is an active NHCX participant with a valid NPI facility code and Bearer token; payer certificate available for JWE encryption. + - The original claim or preauth exists; Task.basedOn references it with the sender's reference id, and Task.input carries claimNumber and the intimation number. + - Patient resource carries PMJAY Member ID and ABHA number; supporting evidence attached (the FAQ says a document as valueAttachment is mandatory for reprocess). + - Task.status requested, Task.intent order, Task.code from http://terminology.hl7.org/CodeSystem/financialtaskcode, reasonCode from ndhm-reason-code; Task.description explains when reasonCode is other. + - Protected header with the original correlation id, fresh api_call_id, IST timestamp, workflow id and status request.initiated. + + ### Postconditions + + The gateway returns HTTP 202 with a StatusSuccessResponse whose result carries entity_type task and a protocol_status; 400, 404 and 500 use the same envelope. The payer validates completeness and eligibility (workflow 251 acknowledges receipt), re-adjudicates and answers on /v1/task/on_submit with a Task bundle whose Task.output references a ClaimResponse: 252 approved, 253 rejected (outcome complete with adjudication reason cancelled), 254 queried (answer with workflow 19). Approval may be followed by payment workflows 30, 31 and 33. For cancellation, only preauths in submitted or approved state can be cancelled; PAYR-1252, PAYR-1253, PAYR-1257 and PAYR-1258 explain refusals. + + ### Common mistakes + + - Omitting Task.basedOn, so the payer has nothing to act on; or sending the sender's reference only in input and not in basedOn. + - Minting a fresh correlation id instead of carrying the original claim or preauth's. + - Submitting a reprocess without new evidence; the handbook restricts appeals to cases with valid justification and supporting documents. + - Cancelling a preauth that is already cancelled, paid or not in an active state (PAYR-1252, PAYR-1253, PAYR-1257, PAYR-1258). + - Spelling the intimation input anything other than intimationNumber; a reprocess under another spelling is refused with PAYR-1008. + - Offering a second reprocess by default; the response is final unless scheme rules allow otherwise. + - Using unverified codes such as a numeric PC01 reason or workflow 36 for a plain reprocess without checking the workflow reference. + + ### Best practices + + - Link the Task to the original entity twice: basedOn with the sender's reference id and Task.input with claimNumber and intimation number. + - Use reasonCode other only with a clear Task.description. + - Persist the correlation id and workflow id so the on_submit Task bundle can be matched and the ClaimResponse extracted from Task.output. + - Design the case state machine so 252 or 253 terminates the appeal branch. + - Fresh api_call_id per call, IST timestamps, request.initiated on the outbound header. + - Implement v1/error; a Task that never reaches the payer is otherwise silent. + + ### Related scenario + + A hospital's claim for a cardiac package, submitted on /v1/claim/submit, comes back on /v1/claim/on_submit rejected for a missing implant invoice. The billing team obtains the invoice and the integration builds a Task: code reprocess, reasonCode claimrejected, basedOn the original claim, input claimNumber and intimation number, the invoice attached, workflow 18, and the claim's correlation id. It posts /v1/task/submit and receives 202. The payer acknowledges (251), re-adjudicates and returns a Task bundle on /v1/task/on_submit whose Task.output wraps a ClaimResponse with outcome complete and workflow 252; a payment notice follows on /v1/paymentnotice/request. + + ### Specification + + Chapter [Cancel, reprocess and shortfall](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxMDAwMDA0NDQ2QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: The gateway returns HTTP 202 with a StatusSuccessResponse whose result carries entity_type task and a protocol_status; 400, 404 and 500 use the same envelope. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 25/08/2026 10:00:00:154 + api_call_id: f2a3b4c5-d6e7-8901-5678-012345678901 + correlation_id: 66778899-aabb-ccdd-eeff-001122334455 + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: task + protocol_status: request.queued + error: + code: "" + message: "" + /v1/task/on_submit: + post: + operationId: other_v1_task_on_submit + x-abdm-use-case: Other + tags: + - Other + summary: Task callback (reprocess or cancel outcome) + description: |- + Payer returns a Task bundle with Task.status completed whose Task.output references a ClaimResponse carrying the reprocess or cancellation outcome. + + ### Business purpose + + This callback closes the appeal or cancellation the provider opened on /v1/task/submit. It carries the payer's final decision on a reprocess (approved, partially approved, queried or rejected) or confirms a pre-authorisation cancellation, in the same ClaimResponse shape used for ordinary adjudication so hospitals can reuse their parsers. Because the reprocess response is final within the workflow, it delivers closure, a clean audit trail and reduced ambiguity for both sides, which is the point of moving disputes inside NHCX. + + ### When to use + + The payer calls it after acknowledging a Task (workflow 251 REPROCESS_REQUEST_RECEIVED), validating it and re-adjudicating. The outer wrapper is a collection Bundle with a Task whose status is completed and whose Task.output.type references a ClaimResponse for the entity the sender named; workflow 252 approved (outcome complete), 253 rejected (outcome complete with adjudication reason cancelled, display Rejected), 254 queried (outcome partial, often zero totals; provider answers with workflow 19). Cancellation accomplished is PC02. Carry the same x-hcx-correlation_id and a responder status (response.complete, or request.initiated for a query per the workflow sheet). + + ### Preconditions + + - The inbound Task was decrypted, its correlation id and workflow captured, and the 202 acceptance body returned within 30 seconds. + - Payer registered with a valid Bearer token and the provider's certificate for encryption. + - A Task bundle: Task.status completed, Task.output[0].valueReference pointing to a ClaimResponse entry that is structurally identical to a normal adjudication response (total, item adjudication, processNote, adjudication reason). + - Protected header echoing the request's correlation id with a fresh api_call_id, IST timestamp, the outcome workflow id and a responder status. + + ### Postconditions + + The gateway returns HTTP 202 with the StatusSuccessResponse envelope (400, 404, 500 in the same shape) and forwards the bundle to the provider, which must acknowledge within 30 seconds. The provider resolves Task.output[0].valueReference.reference within the bundle and passes the ClaimResponse through its standard adjudication parser. The reprocess decision is final within the workflow context; no further standard reprocessing cycles are expected unless scheme rules allow. After approval, payment proceeds through workflows 30 PAYMENT_INITIATED, 31 PAYMENT_PROCESSED and 33 PAYMENT_SETTLED. A cancelled preauth requires a new preauth with a new case number if treatment resumes (PAYR-1255). + + ### Common mistakes + + - Provider side: looking for the ClaimResponse as a direct Bundle.entry instead of following Task.output[].valueReference. + - Reading outcome complete as approval; a rejected reprocess is outcome complete with adjudication reason cancelled. + - Treating a queried response with outcome partial and zero totals as a zero-value approval. + - Payer side: minting a new correlation id on the callback (NHCX-1010) or sending a standalone ClaimResponse bundle instead of a Task wrapper. + - Missing the 30-second 202 on the inbound Task, triggering five redeliveries and deletion of the request. + - Splitting the PMJAY pipe-delimited adjudication reason (USER~datetime~type~comment~trust) as if it were structured. + + ### Best practices + + - Payer: acknowledge first, re-adjudicate asynchronously, then post the Task bundle with the outcome workflow id and ClaimResponse nested in Task.output. + - Provider: share the ClaimResponse parser between /v1/claim/on_submit and this callback; only the extraction path differs. + - Branch on adjudication reason as well as outcome; check processNote for reductions or query text. + - Terminate the appeal branch of the case state machine on 252 or 253; on 254 respond with workflow 19. + - Be idempotent on correlation id; expect redeliveries. + - Fresh api_call_id, IST timestamp, responder status on the callback header. + + ### Related scenario + + A scheme payer's TPA receives a reprocess Task on a rejected claim with the missing implant invoice attached. Its endpoint returns 202 and the case reopens for re-adjudication with the original claim, the new document and the justification. The reviewer approves at the package rate, and the TPA posts /v1/task/on_submit: a Task bundle, status completed, Task.output referencing a ClaimResponse with outcome complete, workflow 252, under the claim's correlation id. The hospital acknowledges within 30 seconds, extracts the ClaimResponse from Task.output, marks the appeal closed and awaits the payment notice on /v1/paymentnotice/request. + + ### Specification + + Chapter [Cancel, reprocess and shortfall](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "252" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxNTE4QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: The gateway returns HTTP 202 with the StatusSuccessResponse envelope (400, 404, 500 in the same shape) and forwards the bundle to the provider, which must acknowledge within 30 seconds. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 26/08/2026 16:30:00:611 + api_call_id: a3b4c5d6-e7f8-9012-6789-123456789012 + correlation_id: 66778899-aabb-ccdd-eeff-001122334455 + result: + sender_code: 1518@hcx + recipient_code: 1000004446@hcx + entity_type: task + protocol_status: request.queued + error: + code: "" + message: "" + /internal/v1/task/submit: + post: + operationId: other_internal_v1_task_submit + x-abdm-use-case: Adapter + tags: + - Adapter + summary: Task submit (internal variant) (adapter) + description: |- + Internal twin of /v1/task/submit on the taskhcxservice, operationId hcxTaskPostInternal, with the same JWEPayload Task body and 202 envelope. + + ### Business purpose + + The taskhcxservice is one of six NHCX services that publish each operation at both /v1/... and /internal/v1/... with identical descriptions and request bodies, differing only in the operationId suffix. This is the internal form of the provider's reprocess or cancel request: the structured appeal path for rejected or short-paid claims and the withdrawal path for unused pre-authorisations. The specifications document no behavioural difference from the public endpoint. + + ### When to use + + Same circumstances as /v1/task/submit: a reprocess (Task.code reprocess, reasonCode claimrejected or partialpayment, workflow 18) after an adverse adjudication with new evidence, or a preauth cancellation (Task.code cancel with a cancellation reasonCode, workflow 122 or PC01). x-hcx-correlation_id carries the original claim or preauth correlation id. The specs do not say when the internal path applies; default to the public path unless onboarding guidance names this one. + + ### Preconditions + + - As for the public endpoint: active provider with NPI facility code, Bearer token, payer certificate for JWE encryption. + - Body is a JWEPayload whose plaintext is the Task resource with basedOn referencing the original entity by the sender's reference id, Task.input with claimNumber and intimation number, and supporting evidence. + - Protected header with the original correlation id, fresh api_call_id, IST timestamp, workflow id and status request.initiated. + - Confirmation that the internal route is intended for your integration. + + ### Postconditions + + Returns 202 Accepted with StatusSuccessResponse (entity_type task), or 400, 404 or 500 in the same envelope. The payer answers later on the task on_submit callback with a Task bundle wrapping a ClaimResponse: workflows 251 received, 252 approved, 253 rejected, 254 queried, PC02 cancellation accomplished. The decision is final within the workflow context. No additional behaviour is documented for the internal variant. + + ### Common mistakes + + - Expecting the internal path to skip validation of basedOn, correlation id or status; it is documented as identical. + - Omitting Task.basedOn or minting a fresh correlation id. + - Cancelling a preauth not in submitted or approved state (PAYR-1252, PAYR-1253, PAYR-1257, PAYR-1258). + - Hard-coding the internal prefix without confirming the route; a 404 may be a host or prefix mismatch. + + ### Best practices + + - Reuse the public endpoint's Task builder; make only the path prefix configurable. + - Link to the original entity in both basedOn and Task.input; use Task.description with reasonCode other. + - Fresh api_call_id per call, IST timestamps, request.initiated on the outbound header. + - Persist correlation id and workflow id for matching the callback; implement v1/error. + + ### Related scenario + + A hospital integrator generating a client from the taskhcxservice Swagger sees hcxTaskPost and hcxTaskPostInternal with the same description. The team builds one reprocess-and-cancel module that posts to /v1/task/submit by default and can be switched to the internal path if NHCX onboarding requires it. When a surgeon changes the treatment plan after a preauth was approved, the module sends Task.code cancel with reasonCode treatmentplanchanged under the preauth's correlation id, receives 202, and later gets the cancellation confirmation on the task on_submit callback before a new preauth is raised. + + ### Specification + + Chapter [Cancel, reprocess and shortfall](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "122" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxMDAwMDA0NDQ2QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "200": + description: Returns 202 Accepted with StatusSuccessResponse (entity_type task), or 400, 404 or 500 in the same envelope. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 25/08/2026 10:20:00:093 + api_call_id: b4c5d6e7-f8a9-0123-7890-234567890123 + correlation_id: 778899aa-bbcc-ddee-ff00-112233445566 + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: task + protocol_status: request.queued + error: + code: "" + message: "" + /internal/v1/task/on_submit: + post: + operationId: other_internal_v1_task_on_submit + x-abdm-use-case: Adapter + tags: + - Adapter + summary: Task callback (internal variant) (adapter) + description: |- + Internal twin of /v1/task/on_submit (hcxOnTaskPostInternal): the payer Task bundle wrapping the ClaimResponse outcome of a reprocess or cancel. + + ### Business purpose + + This is the internal-path form of the callback that closes a reprocess or cancellation. The OpenAPI lists it with the same description and bare object body as the public callback and distinguishes it only by the operationId suffix. Its role is unchanged: deliver the payer's final, auditable decision on an appeal, or confirmation of a preauth cancellation, in a Task bundle whose Task.output references a ClaimResponse that hospitals can parse with their normal adjudication logic. + + ### When to use + + Same as the public callback: after acknowledging and re-adjudicating a Task, the payer posts a Task bundle with status completed and Task.output referencing the ClaimResponse, under the original correlation id, with workflow 252, 253 or 254 (or PC02 for cancellation) and a responder status. The specifications do not say when the internal path is used in preference to the public one. + + ### Preconditions + + - Inbound Task decrypted, correlation id captured, 202 acceptance returned within 30 seconds. + - Registered payer with a valid Bearer token and the provider's certificate. + - Task bundle with Task.status completed and Task.output[0].valueReference resolving to a ClaimResponse entry in the bundle. + - Protected header echoing the request's correlation id with a fresh api_call_id, IST timestamp, outcome workflow id and responder status. + - Confirmation that the internal route is the intended one. + + ### Postconditions + + Returns 202 Accepted with the StatusSuccessResponse envelope, or 400, 404 or 500 in the same shape; the bundle is forwarded to the provider, which acknowledges within 30 seconds, extracts the ClaimResponse from Task.output and closes the appeal branch. The decision is final within the workflow context; approval leads to payment workflows 30, 31 and 33. No additional behaviour is documented for the internal variant. + + ### Common mistakes + + - Expecting a different envelope or relaxed validation; none is documented. + - Sending a standalone ClaimResponse bundle rather than a Task wrapper, or minting a new correlation id (NHCX-1010). + - Provider side: reading the ClaimResponse from Bundle.entry directly, or treating outcome complete as approval without checking the adjudication reason. + - Using an unconfigurable path that cannot switch between public and internal forms. + + ### Best practices + + - Share the public callback's bundle builder; only the path differs. + - Acknowledge the inbound Task first, re-adjudicate asynchronously, then post. + - Provider: reuse the claim ClaimResponse parser, reached via Task.output[0].valueReference.reference. + - Idempotent handling on correlation id; fresh api_call_id and IST timestamp on the callback. + + ### Related scenario + + A payer platform reviewing the taskhcxservice specification sees hcxOnTaskPost and hcxOnTaskPostInternal side by side. It implements a single outcome publisher that wraps the ClaimResponse in a Task bundle and posts to the public /v1/task/on_submit path unless configured for the internal one. When a hospital's cancellation Task for an unused preauth is processed, the publisher posts the Task bundle with PC02 semantics under the preauth's correlation id; the hospital acknowledges within 30 seconds and raises a fresh preauth with a new case number for the revised treatment. + + ### Specification + + Chapter [Cancel, reprocess and shortfall](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: PC02 + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxNTE4QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "200": + description: Returns 202 Accepted with the StatusSuccessResponse envelope, or 400, 404 or 500 in the same shape; the bundle is forwarded to the provider, which acknowledges within 30 seconds, extracts the ClaimResponse from Task.output and closes the appeal branch. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 25/08/2026 11:05:00:448 + api_call_id: c5d6e7f8-a9b0-1234-8901-345678901234 + correlation_id: 778899aa-bbcc-ddee-ff00-112233445566 + result: + sender_code: 1518@hcx + recipient_code: 1000004446@hcx + entity_type: task + protocol_status: request.queued + error: + code: "" + message: "" + /v1/notification/subscribe: + post: + operationId: other_v1_notification_subscribe + x-abdm-use-case: Other + tags: + - Other + summary: Notification subscribe + description: |- + A Beneficiary Service Provider (PHR app) subscribes an ABHA id to notification topics; NHCX persists it synchronously, Last-Linked-Wins per ABHA id. + + ### Business purpose + + Every other flow is a two-party exchange between hospital and payer. Notifications let a third party, the beneficiary through a PHR app, watch a claim move without being a sender or recipient on the underlying preauth or claim. The caller is a Beneficiary Service Provider (BSP), not a hospital or insurer; the persona label here is the nearest available. The subscription is what routes human-readable messages such as a preauth approval with amount and validity to the patient's app, giving beneficiaries transparency and reducing calls to the hospital desk. + + ### When to use + + Call it on every beneficiary login (Subscribe-on-Login): the user authenticates with the ABHA address, the app checks its NHCX token, refreshes via the sessions endpoint if expired, then subscribes the ABHA id and stores the returned subscription_id. Because Last-Linked-Wins replaces any earlier app's subscription, resubscribe on each login rather than trusting a stored id. Most PHR apps need only topic_code workflow_events; network_events and participant_events are also defined. The call is synchronous and sits outside the workflow-code sequence; a fresh x-hcx-correlation_id is required per attempt. + + ### Preconditions + + - ABDM M1 integration completed; BSP sandbox testing on hcxsbx.abdm.gov.in, certification and production registry onboarding. + - An HTTPS callback endpoint with TLS 1.2 or higher registered as on_notification_url, and JWT capability. + - Access token from the ABDM session token call (01-session/session-token.bru); sent as Authorization: Bearer with Content-Type application/json. + - Body is a JWEPayload whose compact JWE carries protected headers alg RSA-OAEP, enc A256GCM, x-hcx-sender_code (your BSP code), x-hcx-recipient_code (NHCX gateway code), x-hcx-timestamp (ISO 8601) and a unique x-hcx-correlation_id, plus the subscribe JSON: subscription_id, topic_code array, recipient_code, subscriber.id (ABHA id), on_notification_url and optional expiry. + - Explicit user consent obtained before subscribing. + + ### Postconditions + + NHCX decrypts the request with its private key, validates headers and payload, persists the subscription with Last-Linked-Wins per ABHA id and returns the subscription state synchronously: HTTP 200 with a SubscribeResponse carrying timestamp, api_call_id, correlation_id, subscription_id, subscription_status (active, replaced or expired), expiry and message. Thereafter, when a hospital submits a preauth or claim with that ABHA id and the payer responds, NHCX pushes a notification (notification_id, topic_code, timestamp, subscriber.id, a displayable message and optional domain_values) to the registered callback. Errors: 400 validation, 401 sender not authorised, 403 sender not permitted, 409 duplicate correlation id, 500 decryption or persistence failure. + + ### Common mistakes + + - Reusing x-hcx-correlation_id across attempts or retries, which returns 409 (the API reference defines 409 as replay detection, not an existing-subscription conflict). + - Subscribing once and trusting the stored subscription_id; another app's login silently replaces it (subscription_status replaced). + - Sending it to the exchange host, https://apisbx.abdm.gov.in/hcx, where the other /v1 calls go. The notification integration guide gives the portal host: https://hcxsbx.abdm.gov.in/v1/notification/subscribe. + - Sending the token on bearer_auth. This call reads it from Authorization: Bearer. + - Sending protocol headers in the clear rather than inside the JWE protected header. + - Using the NHCX client-credentials token endpoint instead of the ABDM gateway sessions endpoint. + - Subscribing silently without consent or without showing subscription status in settings. + + ### Best practices + + - Subscribe on every login and refresh the token before its 100-minute expiry; store access_token encrypted and never log the secret. + - Generate a fresh UUID correlation id per subscribe attempt, including retries; retry 500s with backoff, regenerate the token on 401, check the registry on 403. + - Subscribe only to the topics you need, typically workflow_events. + - Secure the callback: HTTPS with TLS 1.2 or higher, validate the JWT from NHCX, verify sender_code, rate-limit. + - Display the message field directly to users; treat domain_values as optional audit data and read status from x-hcx-status, not the workflow id description. + + ### Related scenario + + A beneficiary opens a PHR app and logs in with the ABHA address ravi@abdm. The app confirms its NHCX token is valid, then posts /v1/notification/subscribe with subscription_id sub_ravi_001, topic_code workflow_events, its BSP code and its on_notification_url, under a fresh correlation id. NHCX replies 200 with subscription_status active. Later that day a hospital submits a preauth for the same ABHA id on /v1/preauth/submit and the payer approves it on /v1/preauth/on_submit; NHCX pushes a notification to the app's callback reading that the preauthorisation was approved for Rs. 50,000 with its validity dates, which the app displays as-is. + + ### Specification + + Chapter [Notifications and patient apps](/docs/nhcx/v1/reference/notifications-and-patient-apps) of the NHCX integration specification. + security: [] + servers: + - url: https://hcxsbx.abdm.gov.in + description: Sandbox, NHCX portal. + parameters: + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: phr-app-xyz@bsp + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: nhcx-gateway@hcx + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxCorrelationId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + _payload_plaintext: + type: object + properties: + subscription_id: + type: string + topic_code: + type: array + items: + type: string + recipient_code: + type: string + subscriber: + type: object + properties: + id: + type: string + on_notification_url: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00iLCJ4LWhjeC1zZW5kZXJfY29kZSI6InBoci1hcHAteHl6QGJzcCJ9.encrypted_key.iv.ciphertext.tag + _payload_plaintext: + subscription_id: sub_ravi_001 + topic_code: + - workflow_events + recipient_code: phr-app-xyz@bsp + subscriber: + id: ravi@abdm + on_notification_url: https://api.phrapp.com/v1/hcx/notification/on_subscribe + responses: + "200": + description: "NHCX decrypts the request with its private key, validates headers and payload, persists the subscription with Last-Linked-Wins per ABHA id and returns the subscription state synchronously: HTTP 200 with a SubscribeResponse carrying timestamp, api_call_id, correlation_id, subscription_id, subscription_status (active, replaced or expired), expiry and message." + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + subscription_id: + type: string + subscription_status: + type: string + expiry: + type: string + message: + type: string + example: + timestamp: 2026-08-25T08:30:00+05:30 + api_call_id: d6e7f8a9-b0c1-2345-9012-456789012345 + correlation_id: 8899aabb-ccdd-eeff-0011-223344556677 + subscription_id: sub_ravi_001 + subscription_status: active + expiry: "" + message: Subscription accepted + /v1/notification/on_subscribe: + post: + operationId: other_v1_notification_on_subscribe + x-abdm-use-case: Other + tags: + - Other + summary: Notification on_subscribe + description: |- + BSP-side subscription acknowledgement; the same name denotes the callback where NHCX pushes claim-event notifications for a subscribed ABHA id. + + ### Business purpose + + Two things share this name. The API reference defines an NHCX-side operation (operationId onSubscribe) that takes a NotificationOnSubscribePayload with the beneficiary's abhaid, optional domain_values and plain header values, and returns a SubscribeResponse; it is described as the BSP-side subscription persistence acknowledgement. The integration guide uses the same path on the BSP's own host as the callback where NHCX delivers notifications. Together they complete the beneficiary-facing loop: the patient's app learns, in plain language, that a preauth was approved, a claim adjudicated, a payment made or information requested. The caller is a Beneficiary Service Provider; the persona label is the nearest available. + + ### When to use + + As a BSP you implement this path on your host, registered through on_notification_url, and receive a push whenever a workflow event occurs for a subscribed ABHA id: preauth_request (queued, processing), preauth_response (approved, rejected), claim_request, claim_response, payment_notice (paid, pending) and communication (information_required). The NHCX-side operation is invoked with hvalues senderid, receiverid, correlationid and status required, and workflowid, source, api_caller_id, call_type and usertoken optional. It sits outside the workflow-code sequence; domain_values may carry x-hcx-workflow_id, x-hcx-correlation_id, x-hcx-status, x-hcx-action and amount fields. + + ### Preconditions + + - An active subscription created via /v1/notification/subscribe for the ABHA id; Last-Linked-Wins means only the most recently linked app receives events. + - The BSP callback exposed over HTTPS with TLS 1.2 or higher at the registered on_notification_url, validating the JWT from NHCX, verifying sender_code and rate-limiting. + - For the NHCX-side operation: a NotificationOnSubscribePayload with request.abhaid (required) and optional request.domain_values, plus hvalues with senderid, receiverid, correlationid and status. + - The ordinary preauth or claim exchange between hospital and payer has produced an event for that beneficiary. + + ### Postconditions + + The NHCX-side operation returns HTTP 200 with a SubscribeResponse (timestamp, api_call_id, correlation_id, subscription_id, subscription_status active, replaced or expired, expiry, message); 400, 401, 403, 409 and 500 return a StatusSuccessResponse with the same descriptions as the subscribe table. On the BSP callback the delivered payload carries notification_id, topic_code, timestamp, subscriber.id, a human-readable message that can be shown directly to the user, and optional domain_values with x-hcx-* headers for audit or custom formatting. Nothing changes in the hospital-payer exchange; the notification is a forked copy of the outcome. + + ### Common mistakes + + - Conflating the NHCX-side operation with your own callback and implementing only one of them. + - Parsing domain_values to build the user message instead of displaying the message field; domain_values is optional and may be absent. + - Reading status from the x-hcx-workflow_id description (approved, rejected, queued, processing), which is a documentation error; the example carries an identifier and status lives in x-hcx-status. + - Assuming the subscription is still yours; a subscription_status of replaced means another app took the routing slot on login. + - Accepting callbacks without validating the JWT or sender_code, or without TLS 1.2 or higher. + - Treating the senderid and receiverid descriptions (payer id, hospital id) literally in the notification context; they are inherited boilerplate. + + ### Best practices + + - Display message verbatim; keep domain_values for audit logging or advanced formatting only. + - Validate the JWT and sender_code on every inbound push, enforce TLS 1.2 or higher and rate limiting. + - Map event types (preauth_response, claim_response, payment_notice, communication) to in-app timelines using x-hcx-action and x-hcx-status. + - Show subscription status in settings so a replaced subscription is visible to the user; resubscribe on next login. + - Keep the endpoint fast and idempotent on notification_id. + + ### Related scenario + + A PHR app has subscribed ravi@abdm to workflow_events. A hospital submits a claim on /v1/claim/submit for that beneficiary and the payer adjudicates it on /v1/claim/on_submit. NHCX forks the outcome to the app's registered on_subscribe callback with topic_code workflow_events, a message stating the claim was approved with the amount, and domain_values including x-hcx-action claim_response and x-hcx-status response.complete. The app validates the JWT and sender_code, shows the message on the patient's timeline, and when the payer later sends a payment notice on /v1/paymentnotice/request the next push reads paid. + + ### Specification + + Chapter [Notifications and patient apps](/docs/nhcx/v1/reference/notifications-and-patient-apps) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + request: + type: object + properties: + abhaid: + type: string + domain_values: + type: object + properties: + x-hcx-workflow_id: + type: string + x-hcx-correlation_id: + type: string + x-hcx-timestamp: + type: string + x-hcx-sender_code: + type: string + x-hcx-recipient_code: + type: string + x-hcx-status: + type: string + x-hcx-action: + type: string + x-hcx-amount_submitted: + type: string + hvalues: + type: object + properties: + senderid: + type: string + receiverid: + type: string + correlationid: + type: string + status: + type: string + workflowid: + type: string + example: + request: + abhaid: ravi@abdm + domain_values: + x-hcx-workflow_id: wf_20260825_001 + x-hcx-correlation_id: corr_20260825_12345 + x-hcx-timestamp: 2026-08-25T14:30:00+05:30 + x-hcx-sender_code: payor.icici@nhcx + x-hcx-recipient_code: bsp.phrapp@nhcx + x-hcx-status: response.complete + x-hcx-action: preauth_response + x-hcx-amount_submitted: "75000.00" + hvalues: + senderid: payor.icici@nhcx + receiverid: bsp.phrapp@nhcx + correlationid: corr_20260825_12345 + status: response.complete + workflowid: wf_20260825_001 + responses: + "200": + description: The NHCX-side operation returns HTTP 200 with a SubscribeResponse (timestamp, api_call_id, correlation_id, subscription_id, subscription_status active, replaced or expired, expiry, message); 400, 401, 403, 409 and 500 return a StatusSuccessResponse with the same descriptions as the subscribe table. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + subscription_id: + type: string + subscription_status: + type: string + expiry: + type: string + message: + type: string + example: + timestamp: 2026-08-25T14:30:01+05:30 + api_call_id: e7f8a9b0-c1d2-3456-0123-567890123456 + correlation_id: corr_20260825_12345 + subscription_id: sub_ravi_001 + subscription_status: active + expiry: "" + message: "Preauthorization approved for Rs. 50,000. Valid from 2026-08-25 to 2026-09-01. Reference: PA-2026-004567" + /v1/delete: + post: + operationId: other_v1_delete + x-abdm-use-case: Other + tags: + - Other + summary: Delete records (troubleshooting) + description: |- + Internal troubleshooting operation on the claim service that deletes records by correlationid and action; not part of the business transaction flows. + + ### Business purpose + + The claim service OpenAPI lists /v1/delete as an internal troubleshooting operation for deleting records identified by a correlationid and an action. It exists to clear stuck or erroneous records during integration testing and support, not to move a claim through its lifecycle. The published documentation gives no further business context and does not state which participant roles may call it. + + ### When to use + + Only in troubleshooting, and only as directed by NHCX support. The endpoint index describes it as internal troubleshooting, deleting records by correlationid plus action. It does not appear in any transaction flow, sample bundle or workflow-code table, and it carries no x-hcx-workflow_id semantics. It is unrelated to the platform behaviour in which NHCX itself deletes a request after five failed delivery attempts; that deletion is automatic and needs no call. + + ### Preconditions + + - A valid Bearer token and the HTTP headers Accept: application/json, Content-Type: application/json and bearer_auth. + - The correlation ID of the record to be removed and the action it was recorded under; the docs name these two inputs (correlationid and action) but do not publish a schema, sample body or authorisation rule. + - Agreement from NHCX support that deletion is the right remedy; the documentation does not describe any business validation performed by the endpoint. + + ### Postconditions + + The endpoint sits in the claim service, whose domain operations all return 202 Accepted, 400 Request Validation failed, 404 Requested resource was not found and 500 Downstream systems down, each carrying StatusSuccessResponse. No worked response body, callback or state change is documented for /v1/delete beyond the removal of the record identified by correlationid and action. After deletion a fresh request cycle with a new correlation UUID is the documented way to proceed, since a deleted or inactive correlation ID cannot be resumed. + + ### Common mistakes + + - Treating /v1/delete as a way to cancel a preauth or claim; cancellation is a Task on /v1/task/submit (code cancel, workflow PC01 or 122) and reprocess is workflow 36 on the same endpoint. + - Calling it to recover from a failed delivery and then reusing the same correlation ID; NHCX marks failed correlation IDs inactive and a new cycle is required. + - Assuming the input names or authorisation are documented; only correlationid and action are named, and the specs do not say who may call it. + - Using it in production without NHCX support involvement; it is described as internal troubleshooting. + + ### Best practices + + - Reserve this call for sandbox troubleshooting and only on NHCX support's instruction. + - Record the correlation ID, action and reason for every deletion in your own audit log, since the docs describe no NHCX-side confirmation beyond the HTTP status. + - Prefer /v1/status to inspect a stuck correlation ID before deleting anything. + - Mint a new correlation UUID for any re-submission after a deletion. + + ### Related scenario + + During sandbox testing a hospital's integrator submits a claim whose callback keeps failing because their endpoint returned 200 instead of 202. NHCX support asks them to fix the acknowledgement and then clears the stuck record by correlation ID and action using /v1/delete so the test case can be rerun cleanly. The integrator resubmits the claim to /v1/claim/submit under a new correlation UUID, receives a 202, and this time the on_submit callback is acknowledged correctly. + + ### Specification + + No chapter of the current documentation covers this operation. It appears only in the claim service's OpenAPI. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + correlationid: + type: string + action: + type: string + example: + correlationid: 5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a + action: /v1/claim/submit + responses: + "200": + description: The endpoint sits in the claim service, whose domain operations all return 202 Accepted, 400 Request Validation failed, 404 Requested resource was not found and 500 Downstream systems down, each carrying StatusSuccessResponse. + content: + application/json: + schema: + type: object + properties: + httpStatus: + type: integer + schema: + type: string + note: + type: string + example: + httpStatus: 202 + schema: StatusSuccessResponse + note: The claim service spec lists 202, 400, 404 and 500, all carrying StatusSuccessResponse; no worked response body is published for /v1/delete. + /v3/api-docs: + get: + operationId: other_v3_api_docs + x-abdm-use-case: Other + tags: + - Other + summary: OpenAPI 3 document (status service) + description: |- + Serves the status service's OpenAPI 3 document, optionally filtered by a group query parameter; a discovery endpoint, not a protocol API. + + ### Business purpose + + Integrators need a machine-readable contract for the Status API in order to generate clients, validate their requests and confirm the server prefix. This endpoint serves that contract in OpenAPI 3 form for the status service (statushcxservice, OpenAPI 3.0.1, service version 1.0.0). It carries no claim-settlement data and involves no payer or provider business logic; its value is purely in making the /v1/status operation discoverable and verifiable during integration and troubleshooting. + + ### When to use + + Use it during integration setup, when generating or refreshing an API client, and when a status call is failing and you want to confirm the exact schema and server prefix the service advertises. The endpoint index lists it as endpoint 19 with an optional group query parameter. It is not part of any transaction workflow and is not referenced by the sandbox exit checklists. + + ### Preconditions + + - A GET request to the status service host; the OpenAPI documents in this corpus were captured from https://hcxsbx.abdm.gov.in//api-docs, and the status service declares the server prefix /statushcxservice. + - No JWE envelope, no x-hcx-* protocol headers and no correlation id; the docs do not state that a Bearer token is required for these discovery endpoints. + - No request body. + + ### Postconditions + + The service returns HTTP 200 with a JSON OpenAPI 3 document describing the status service: its info block, the /statushcxservice server entry and the /v1/status operation with its StatusSuccessResponse responses. Nothing changes on NHCX and no callback follows. The document is a description of the service as deployed and may differ from the handbook's gateway-side conventions, which the docs flag as an unresolved conflict. + + ### Common mistakes + + - Pointing at the gateway base https://apisbx.abdm.gov.in/pmjay/sbxhcx and expecting the per-service spec host; the docs advise swapping between the two URL shapes when a path 404s. + - Treating the served document as the integration contract for gateway traffic; the handbook's gateway base and header conventions take precedence where the two disagree. + - Sending a POST or a JSON body to a GET discovery endpoint. + - Wrapping the call in JWE or adding x-hcx-* headers, which only apply to protocol APIs such as /v1/status. + + ### Best practices + + - Use these endpoints for exploration and client generation in the sandbox, and cache the document rather than fetching it on every run. + - Diff the served document against the corpus (Status service: OpenAPI 3.0.1, version 1.0.0) when behaviour changes unexpectedly. + - Never let production traffic depend on the availability of the documentation endpoints. + - Keep the /v1/status protocol rules in mind when reading the spec: x-hcx-correlation_id must carry the original request's correlation id. + + ### Related scenario + + A hospital's integration team is building status polling for stalled preauthorisations. Before wiring /v1/status, an engineer fetches /v3/api-docs from the status service host, confirms the server prefix and the response schema, and generates a typed client. The team then implements the status request with the original correlation id in x-hcx-correlation_id, handles the synchronous request.queued and request.dispatched outcomes, and receives the payer's answer on the status callback. + + ### Specification + + Chapter [Environments and addresses](/docs/nhcx/v1/reference/environments-and-addresses) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + responses: + "200": + description: "The service returns HTTP 200 with a JSON OpenAPI 3 document describing the status service: its info block, the /statushcxservice server entry and the /v1/status operation with its StatusSuccessResponse responses." + content: + application/json: + schema: + type: object + properties: + openapi: + type: string + info: + type: object + properties: + title: + type: string + version: + type: string + servers: + type: array + items: + type: object + properties: + url: + type: string + paths: + type: object + properties: + /v1/status: + type: object + properties: + post: + type: object + properties: + operationId: + type: string + responses: + type: object + properties: + "202": + type: object + properties: + description: + type: string + example: + openapi: 3.0.1 + info: + title: Status service + version: 1.0.0 + servers: + - url: /statushcxservice + paths: + /v1/status: + post: + operationId: status + responses: + "202": + description: Accepted + /v2/api-docs: + get: + operationId: other_v2_api_docs + x-abdm-use-case: Other + tags: + - Other + summary: Swagger 2 document (status service) + description: |- + Serves the status service's Swagger 2 document, optionally filtered by a group query parameter; a discovery endpoint, not a protocol API. + + ### Business purpose + + Some tooling still consumes Swagger 2 rather than OpenAPI 3. This endpoint serves the status service's contract in that older format so that such tools can generate clients and validate requests against /v1/status. It exists alongside /v3/api-docs and describes the same service; it carries no claim-settlement data and involves no business logic. Its value is limited to integration setup and troubleshooting. + + ### When to use + + Use it when your client generator or API tooling requires Swagger 2 input, or when comparing the Swagger 2 and OpenAPI 3 renderings of the status service during a troubleshooting session. The endpoint index lists it as endpoint 20 with an optional group query parameter. It plays no part in any transaction workflow. + + ### Preconditions + + - A GET request to the status service host; the OpenAPI documents in this corpus were captured from https://hcxsbx.abdm.gov.in//api-docs, and the status service declares the server prefix /statushcxservice. + - No JWE envelope, no x-hcx-* protocol headers and no correlation id; the docs do not state that a Bearer token is required for these discovery endpoints. + - No request body. + + ### Postconditions + + The service returns HTTP 200 with a JSON Swagger 2 document (swagger: 2.0) describing the status service, its base path and the /v1/status operation. Nothing changes on NHCX and no callback follows. Where the served document and the handbook disagree on URL shape, the docs advise treating the per-service spec host as the exploration surface and the handbook's gateway base as the integration surface. + + ### Common mistakes + + - Pointing at the gateway base https://apisbx.abdm.gov.in/pmjay/sbxhcx and expecting the per-service spec host; the docs advise swapping between the two URL shapes when a path 404s. + - Treating the served document as the integration contract for gateway traffic; the handbook's gateway base and header conventions take precedence where the two disagree. + - Sending a POST or a JSON body to a GET discovery endpoint. + - Wrapping the call in JWE or adding x-hcx-* headers, which only apply to protocol APIs such as /v1/status. + + ### Best practices + + - Use these endpoints for exploration and client generation in the sandbox, and cache the document rather than fetching it on every run. + - Diff the served document against the corpus (Status service: OpenAPI 3.0.1, version 1.0.0) when behaviour changes unexpectedly. + - Never let production traffic depend on the availability of the documentation endpoints. + - Keep the /v1/status protocol rules in mind when reading the spec: x-hcx-correlation_id must carry the original request's correlation id. + + ### Related scenario + + A TPA's legacy integration platform only imports Swagger 2 definitions. During onboarding to the status flow the team fetches /v2/api-docs from the status service, imports it, and confirms that the /v1/status operation and its StatusSuccessResponse are represented. They then implement the JWE-wrapped status request for preauthorisations that have not received an on_submit callback, and respond to providers' status requests on the status callback. + + ### Specification + + Chapter [Environments and addresses](/docs/nhcx/v1/reference/environments-and-addresses) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + responses: + "200": + description: "The service returns HTTP 200 with a JSON Swagger 2 document (swagger: 2.0) describing the status service, its base path and the /v1/status operation." + content: + application/json: + schema: + type: object + properties: + swagger: + type: string + info: + type: object + properties: + title: + type: string + version: + type: string + basePath: + type: string + paths: + type: object + properties: + /v1/status: + type: object + properties: + post: + type: object + properties: + operationId: + type: string + responses: + type: object + properties: + "202": + type: object + properties: + description: + type: string + example: + swagger: "2.0" + info: + title: Status service + version: 1.0.0 + basePath: /statushcxservice + paths: + /v1/status: + post: + operationId: status + responses: + "202": + description: Accepted + /swagger-resources: + get: + operationId: other_swagger_resources + x-abdm-use-case: Other + tags: + - Other + summary: Swagger resources list + description: |- + Lists the Swagger resources (API document locations) exposed by the status service; used by Swagger UI, not by integrations. + + ### Business purpose + + Swagger UI discovers which API documents a service offers by reading this list. On the status service it points the UI at the /v2/api-docs and /v3/api-docs documents so that an engineer can browse the /v1/status operation interactively. It carries no claim-settlement data and involves no business logic; the endpoint index describes it simply as the list of Swagger resources. + + ### When to use + + Use it only when hosting or debugging a Swagger UI session against the status service, or when a tool needs to discover the available document URLs before fetching them. The endpoint index lists it as endpoint 21. It is not part of any transaction workflow and is not referenced by the sandbox exit checklists. + + ### Preconditions + + - A GET request to the status service host; the OpenAPI documents in this corpus were captured from https://hcxsbx.abdm.gov.in//api-docs, and the status service declares the server prefix /statushcxservice. + - No JWE envelope, no x-hcx-* protocol headers and no correlation id; the docs do not state that a Bearer token is required for these discovery endpoints. + - No request body. + + ### Postconditions + + The service returns HTTP 200 with a JSON list of resource descriptors that locate the service's API documents. Nothing changes on NHCX and no callback follows. The documentation does not detail the descriptor fields beyond the purpose line, so treat the shape shown here as illustrative and read the live response. + + ### Common mistakes + + - Pointing at the gateway base https://apisbx.abdm.gov.in/pmjay/sbxhcx and expecting the per-service spec host; the docs advise swapping between the two URL shapes when a path 404s. + - Treating the served document as the integration contract for gateway traffic; the handbook's gateway base and header conventions take precedence where the two disagree. + - Sending a POST or a JSON body to a GET discovery endpoint. + - Wrapping the call in JWE or adding x-hcx-* headers, which only apply to protocol APIs such as /v1/status. + + ### Best practices + + - Use these endpoints for exploration and client generation in the sandbox, and cache the document rather than fetching it on every run. + - Diff the served document against the corpus (Status service: OpenAPI 3.0.1, version 1.0.0) when behaviour changes unexpectedly. + - Never let production traffic depend on the availability of the documentation endpoints. + - Keep the /v1/status protocol rules in mind when reading the spec: x-hcx-correlation_id must carry the original request's correlation id. + + ### Related scenario + + An integration engineer opens Swagger UI against the status service in the sandbox to reproduce a colleague's failing status call. The UI first requests /swagger-resources to learn where the API documents live, then loads /v3/api-docs. The engineer inspects the /v1/status operation, notices the colleague had minted a fresh correlation id instead of reusing the original preauth correlation id, and fixes the client before retrying the status request. + + ### Specification + + Chapter [Environments and addresses](/docs/nhcx/v1/reference/environments-and-addresses) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + responses: + "200": + description: The service returns HTTP 200 with a JSON list of resource descriptors that locate the service's API documents. + content: + application/json: + schema: + type: object + properties: + _note: + type: string + resources: + type: array + items: + type: object + properties: + name: + type: string + url: + type: string + swaggerVersion: + type: string + example: + _note: The service returns a JSON array of resource descriptors; wrapped here for display. + resources: + - name: default + url: /v3/api-docs + swaggerVersion: "3.0" + /swagger-resources/configuration/ui: + get: + operationId: other_swagger_resources_configuration_ui + x-abdm-use-case: Other + tags: + - Other + summary: Swagger UI configuration + description: |- + Returns the Swagger UI display configuration for the status service; consumed by Swagger UI, not by integrations. + + ### Business purpose + + Swagger UI reads this endpoint to learn how the service wants its documentation rendered (for example, expansion and deep-linking settings). It supports the interactive exploration of the status service's /v1/status operation and has no role in claim settlement, routing or security. The endpoint index describes it as the Swagger UI configuration. + + ### When to use + + Use it only in the context of a Swagger UI session against the status service; ordinary integrations never call it. The endpoint index lists it as endpoint 22. It is not part of any transaction workflow and does not appear in the sandbox exit checklists. + + ### Preconditions + + - A GET request to the status service host; the OpenAPI documents in this corpus were captured from https://hcxsbx.abdm.gov.in//api-docs, and the status service declares the server prefix /statushcxservice. + - No JWE envelope, no x-hcx-* protocol headers and no correlation id; the docs do not state that a Bearer token is required for these discovery endpoints. + - No request body. + + ### Postconditions + + The service returns HTTP 200 with a small JSON object of UI settings. Nothing changes on NHCX and no callback follows. The documentation does not enumerate the settings, so the example below is illustrative; read the live response if you need specific values. + + ### Common mistakes + + - Pointing at the gateway base https://apisbx.abdm.gov.in/pmjay/sbxhcx and expecting the per-service spec host; the docs advise swapping between the two URL shapes when a path 404s. + - Treating the served document as the integration contract for gateway traffic; the handbook's gateway base and header conventions take precedence where the two disagree. + - Sending a POST or a JSON body to a GET discovery endpoint. + - Wrapping the call in JWE or adding x-hcx-* headers, which only apply to protocol APIs such as /v1/status. + + ### Best practices + + - Use these endpoints for exploration and client generation in the sandbox, and cache the document rather than fetching it on every run. + - Diff the served document against the corpus (Status service: OpenAPI 3.0.1, version 1.0.0) when behaviour changes unexpectedly. + - Never let production traffic depend on the availability of the documentation endpoints. + - Keep the /v1/status protocol rules in mind when reading the spec: x-hcx-correlation_id must carry the original request's correlation id. + + ### Related scenario + + While preparing sandbox exit evidence, a payer's engineer captures screenshots of the status service's Swagger UI. The browser loads /swagger-resources/configuration/ui to decide how to render the page, then the resources list and the OpenAPI document. The engineer uses the rendered /v1/status operation to explain to the certification reviewer how the payer responds on the status callback when a provider asks about a dispatched preauthorisation. + + ### Specification + + Chapter [Environments and addresses](/docs/nhcx/v1/reference/environments-and-addresses) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + responses: + "200": + description: The service returns HTTP 200 with a small JSON object of UI settings. + content: + application/json: + schema: + type: object + properties: + deepLinking: + type: boolean + docExpansion: + type: string + displayRequestDuration: + type: boolean + example: + deepLinking: true + docExpansion: none + displayRequestDuration: false + /swagger-resources/configuration/security: + get: + operationId: other_swagger_resources_configuration_security + x-abdm-use-case: Other + tags: + - Other + summary: Swagger security configuration + description: |- + Returns the Swagger UI security configuration for the status service; consumed by Swagger UI, not by integrations. + + ### Business purpose + + Swagger UI reads this endpoint to learn how to present authorisation inputs (such as a bearer token field) when a user tries operations from the browser. It describes UI behaviour only; it does not issue tokens, and it is unrelated to the client-credentials flow at /get/session or to the JWE encryption that protects protocol payloads. The endpoint index describes it as the Swagger security configuration. + + ### When to use + + Use it only in a Swagger UI session against the status service; integrations never need it. The endpoint index lists it as endpoint 23. It is not part of any transaction workflow, not a source of credentials, and not referenced by the sandbox exit checklists. + + ### Preconditions + + - A GET request to the status service host; the OpenAPI documents in this corpus were captured from https://hcxsbx.abdm.gov.in//api-docs, and the status service declares the server prefix /statushcxservice. + - No JWE envelope, no x-hcx-* protocol headers and no correlation id; the docs do not state that a Bearer token is required for these discovery endpoints. + - No request body. + + ### Postconditions + + The service returns HTTP 200 with a small JSON object describing how Swagger UI should handle security inputs. Nothing changes on NHCX, no token is issued and no callback follows. The documentation does not enumerate the fields, so the example below is illustrative. + + ### Common mistakes + + - Pointing at the gateway base https://apisbx.abdm.gov.in/pmjay/sbxhcx and expecting the per-service spec host; the docs advise swapping between the two URL shapes when a path 404s. + - Treating the served document as the integration contract for gateway traffic; the handbook's gateway base and header conventions take precedence where the two disagree. + - Sending a POST or a JSON body to a GET discovery endpoint. + - Wrapping the call in JWE or adding x-hcx-* headers, which only apply to protocol APIs such as /v1/status. + - Mistaking this endpoint for an authentication API; tokens come only from the client-credentials call documented in the authentication chapter. + + ### Best practices + + - Use these endpoints for exploration and client generation in the sandbox, and cache the document rather than fetching it on every run. + - Diff the served document against the corpus (Status service: OpenAPI 3.0.1, version 1.0.0) when behaviour changes unexpectedly. + - Never let production traffic depend on the availability of the documentation endpoints. + - Keep the /v1/status protocol rules in mind when reading the spec: x-hcx-correlation_id must carry the original request's correlation id. + + ### Related scenario + + A provider's engineer wants to try /v1/status from Swagger UI in the sandbox. The UI fetches /swagger-resources/configuration/security to decide how to show the authorisation dialog, and the engineer pastes a Bearer token obtained separately from the client-credentials call. Because the status request body must be a JWE built with the payer's certificate, the engineer ultimately uses the UI only to confirm the schema and runs the real status request from the integration code, which reuses the original preauth correlation id. + + ### Specification + + Chapter [Environments and addresses](/docs/nhcx/v1/reference/environments-and-addresses) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + responses: + "200": + description: The service returns HTTP 200 with a small JSON object describing how Swagger UI should handle security inputs. + content: + application/json: + schema: + type: object + properties: + apiKeyVehicle: + type: string + apiKeyName: + type: string + scopeSeparator: + type: string + example: + apiKeyVehicle: header + apiKeyName: bearer_auth + scopeSeparator: "," + /v1/on_status: + post: + operationId: other_v1_on_status + x-abdm-use-case: Other + tags: + - Other + summary: Status callback + description: |- + The answer to a status request, delivered to the sender that asked. The `x-hcx-status` in the protected header says where the message you asked about got to. The payload is an empty string. + + ### Business purpose + + It separates "did my message arrive" from "what did the payer decide". A sender learns whether a quiet case is still held by the exchange, has reached the recipient, or is dead, without resubmitting it and creating a duplicate. + + ### When to use + + Hosted by every participant that sends `/v1/status`. It arrives in answer to a status request you sent. + + ### Preconditions + + - You sent `/v1/status` with `x-hcx-correlation_id` set to the `api_call_id` of the message you were asking about, and you kept that mapping. + - Your callback address is registered and answers 202 within 30 seconds. + + ### Postconditions + + Read `x-hcx-status` from the protected header. `request.dispatched` means the message reached the recipient, and `request.queued` that the exchange still holds it. `request.stopped` means redelivery was exhausted and the correlation ID retired, so the original request is dead and a retry needs a fresh correlation ID. `x-hcx-error_details`, with `code`, `message` and `trace`, is present where the original failed. Answer 202 with the receipt. + + ### Common mistakes + + - Expecting a bundle. The payload is an empty string and everything travels in the header. + - Matching the answer on the original request's correlation ID. It carries the correlation of your status request. + - Retrying a `request.stopped` message on its old correlation ID. + - Offering a refresh or chase control in the user interface with no status exchange behind it. + + ### Best practices + + - Keep every `api_call_id` you send. Without it you cannot ask the question at all. + - Act on `request.stopped` at once, and treat `request.dispatched` as a reason to wait for the payer. + - Ask from a support screen when a case has gone quiet for longer than the payer's expected turnaround, not on a timer. + + ### Related scenario + + A pre-authorisation has had no answer for longer than the payer's usual turnaround. The support screen sends `/v1/status` with that request's `api_call_id` as the correlation ID. The answer arrives here with an empty payload and `x-hcx-status` `request.stopped`, so the desk knows the request is dead rather than slow, and resubmits it with a fresh correlation ID. + + ### Specification + + Chapter [NHCX adapter (Optional)](/docs/nhcx/v1/getting-started/nhcx-adapter) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: + - $ref: "#/components/parameters/XHcxApiCallId" + - name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: + responses: + "200": + description: Read `x-hcx-status` from the protected header. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 19/03/2026 11:46:35:120 + api_call_id: "{{$guid}}" + correlation_id: "{{correlationId}}" + error: + code: "" + message: "" + /v1/error: + post: + operationId: other_v1_error + x-abdm-use-case: Other + tags: + - Other + summary: Error report (callback) + description: |- + Where the exchange tells a sender that a request could not be delivered after five attempts. Received by every participant under its registered address. There is no outbound form. + + ### Business purpose + + When the exchange cannot deliver a request, it tries five times, retires the correlation ID and tells the original sender here. A system without this endpoint never learns that its request died, and a dead request looks exactly like a case still under review. Every participant must host it. + + ### When to use + + Hosted, never called. Implement it before anything else that is asynchronous. Providers and payers both host it. + + ### Preconditions + + - Your callback address is registered: a domain name over HTTPS with TLS 1.2 or newer, hosted in India, reachable from the exchange's outbound addresses and answering within 30 seconds. + - The handler accepts a body it does not recognise. What arrives is a plain JSON report of the request the exchange gave up on, with the rejection details, not a sealed `JWEPayload`. Its field names are not published, so the body in this request is an illustration rather than a schema. + + ### Postconditions + + Answer 202 with the receipt, like every other delivery, filling in whatever identifiers the report carries and leaving the rest empty. The original request is dead: its correlation ID has been retired, so a retry needs a fresh one. + + ### Common mistakes + + - Not hosting it, so failed deliveries are never seen. + - Parsing the report against a fixed schema and answering `4xx` when it does not match. + - Retrying the failed request on the retired correlation ID. + + ### Best practices + + - Store the report whole before doing anything with it. + - Mark the case it names as undelivered, so the desk does not wait for a decision that will not come. + - Check it first when a case goes quiet, before asking the exchange with `/v1/status`. + + ### Related scenario + + A hospital posts a pre-authorisation and gets its receipt, but the payer's endpoint is down. The exchange tries five times, retires the correlation ID and posts a report to the hospital's `/v1/error`. The handler stores the report whole, answers 202 with the receipt, and marks the pre-authorisation undelivered. The desk resubmits it with a fresh correlation ID once the payer is reachable. + + ### Specification + + Chapter [Building and sending a JWE](/docs/nhcx/v1/getting-started/building-and-sending-a-jwe) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: nhcx-gateway@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.error + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + type: + type: string + x-hcx-sender_code: + type: string + x-hcx-recipient_code: + type: string + x-hcx-api_call_id: + type: string + x-hcx-correlation_id: + type: string + x-hcx-workflow_id: + type: string + x-hcx-timestamp: + type: string + x-hcx-status: + type: string + x-hcx-error_details: + type: object + properties: + code: + type: string + message: + type: string + trace: + type: string + x-hcx-entity-type: + type: string + example: + type: ProtocolResponse + x-hcx-sender_code: nhcx-gateway@hcx + x-hcx-recipient_code: 1000004446@hcx + x-hcx-api_call_id: + x-hcx-correlation_id: + x-hcx-workflow_id: "12" + x-hcx-timestamp: + x-hcx-status: response.error + x-hcx-error_details: + code: ERR_DELIVERY_FAILED + message: Recipient endpoint unreachable after five attempts + trace: "" + x-hcx-entity-type: preauth + responses: + "200": + description: Answer 202 with the receipt, like every other delivery, filling in whatever identifiers the report carries and leaving the rest empty. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" +webhooks: + v1_task_submit: + post: + operationId: other_webhook_v1_task_submit + x-abdm-triggered-by: other_v1_task_submit + x-abdm-use-case: Webhooks + tags: + - Other + summary: Receive task submit (reprocess or cancel) + description: |- + Hosted by the payer. The exchange posts this message to the `endpoint_url` you registered, at `/v1/task/submit`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Provider sends a FHIR Task asking the payer to reprocess a rejected or short-paid claim or to cancel a preauth; Task.code and reasonCode set the intent. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxMDAwMDA0NDQ2QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" + v1_task_on_submit: + post: + operationId: other_webhook_v1_task_on_submit + x-abdm-triggered-by: other_v1_task_on_submit + x-abdm-use-case: Webhooks + tags: + - Other + summary: Receive task callback (reprocess or cancel outcome) + description: |- + Hosted by the provider. The exchange posts this message to the `endpoint_url` you registered, at `/v1/task/on_submit`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Payer returns a Task bundle with Task.status completed whose Task.output references a ClaimResponse carrying the reprocess or cancellation outcome. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "252" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxNTE4QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" + v1_on_status: + post: + operationId: other_webhook_v1_on_status + x-abdm-triggered-by: other_v1_on_status + x-abdm-use-case: Webhooks + tags: + - Other + summary: Receive status callback + description: |- + Hosted by the provider. The exchange posts this message to the `endpoint_url` you registered, at `/v1/on_status`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + The answer to a status request, delivered to the sender that asked. The `x-hcx-status` in the protected header says where the message you asked about got to. The payload is an empty string. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: + - $ref: "#/components/parameters/XHcxApiCallId" + - name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" + v1_error: + post: + operationId: other_webhook_v1_error + x-abdm-triggered-by: other_v1_error + x-abdm-use-case: Webhooks + tags: + - Other + summary: Receive error report (callback) + description: |- + Hosted by every participant. The exchange posts this message to the `endpoint_url` you registered, at `/v1/error`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Where the exchange tells a sender that a request could not be delivered after five attempts. Received by every participant under its registered address. There is no outbound form. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: nhcx-gateway@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.error + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + type: + type: string + x-hcx-sender_code: + type: string + x-hcx-recipient_code: + type: string + x-hcx-api_call_id: + type: string + x-hcx-correlation_id: + type: string + x-hcx-workflow_id: + type: string + x-hcx-timestamp: + type: string + x-hcx-status: + type: string + x-hcx-error_details: + type: object + properties: + code: + type: string + message: + type: string + trace: + type: string + x-hcx-entity-type: + type: string + example: + type: ProtocolResponse + x-hcx-sender_code: nhcx-gateway@hcx + x-hcx-recipient_code: 1000004446@hcx + x-hcx-api_call_id: + x-hcx-correlation_id: + x-hcx-workflow_id: "12" + x-hcx-timestamp: + x-hcx-status: response.error + x-hcx-error_details: + code: ERR_DELIVERY_FAILED + message: Recipient endpoint unreachable after five attempts + trace: "" + x-hcx-entity-type: preauth + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + description: "On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value." + parameters: + BearerAuth: + name: bearer_auth + in: header + required: true + description: It is `bearer_auth`, not `Authorization`, on NHCX's own endpoints. + schema: + type: string + example: Bearer + XHcxSenderCode: + name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + XHcxRecipientCode: + name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + XHcxApiCallId: + name: x-hcx-api_call_id + in: header + required: true + description: Fresh on every message, including responses. Mandatory on the envelope. + schema: + type: string + example: + XHcxRequestId: + name: x-hcx-request_id + in: header + required: false + description: One per originating request. The Open Protocol page marks it Mandatory; the Technical Specifications page marks it Optional. Optional on the envelope. + schema: + type: string + example: + XHcxCorrelationId: + name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + XHcxWorkflowId: + name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "18" + XHcxTimestamp: + name: x-hcx-timestamp + in: header + required: true + description: See the format note below. Mandatory on the envelope. + schema: + type: string + example: + XHcxStatus: + name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: request.initiated + XHcxBenAbhaId: + name: x-hcx-ben-abha-id + in: header + required: true + description: The beneficiary's ABHA number. Mandatory on every exchange, including those with no beneficiary in the payload. Mandatory on the envelope. + schema: + type: string + example: "91711234567890" +x-abdm-errors: + notes: |- + Codes any exchange call can meet are recorded once, in the [Other](/docs/nhcx/v1/api/other) specification: the gateway's NHCX- codes, the standard payer codes, and the reference payer's structure and transport codes. The reference payer's other codes sit with the exchange they reject: coverage eligibility, preauthorisation, claim and insurance plan. [Reading error codes](/docs/nhcx/v1/reference/error-code-guide) explains the code spaces. + + 18 codes from PAYR-1003 to PAYR-1020 mean one thing on the standard payer sheet and another on the reference payer's sheet. Read the code together with its message. + ranges: + - range: NHCX-1xxx + covers: The exchange, on the envelope. The message never reached the payer. + examples: "`NHCX-1001`, `NHCX-1002`" + - range: PAYR-10xx + covers: Transport and bundle structure. An element, id, sequence or type is missing. Not a value problem. + examples: "`PAYR-1001`, `PAYR-1002`" + - range: PAYR-11xx + covers: Coverage eligibility. The policy, the beneficiary or the hospital configuration. + examples: "`PAYR-1101`, `PAYR-1102`" + - range: PAYR-12xx + covers: Preauthorisation. Codes, amounts, dates, sequencing and scheme rules. + examples: "`PAYR-1201`, `PAYR-1202`" + - range: PAYR-13xx + covers: Claim. The same, against the approved preauthorisation. + examples: "`PAYR-1301`, `PAYR-1302`" + - range: PAYR-14xx + covers: Insurance plan, and the scheme's outer rules. Empanelment, policy association, plan configuration. + examples: "`PAYR-1401`, `PAYR-1402`" +x-abdm-errors-gateway: + source: Gateway codes, NHCX-. Sent by the exchange; they arrive synchronously on your own call, or on /v1/error. + codes: + - code: NHCX-401 + message: User Unauthorized + action: "" + - code: NHCX-1001 + message: Receiver system is not reachable. + action: "" + - code: NHCX-1002 + message: Sender not registered in NHCX. Please register in NHCX portal and try again. + action: "" + - code: NHCX-1003 + message: Receiver not registered in NHCX. Please try again with valid receiver details. + action: "" + - code: NHCX-1004 + message: No receiver registered in NHCX for the requested scheme. Please try again with valid receiver details for the scheme. + action: "" + - code: NHCX-1005 + message: Invalid request header. Please try again with valid headers. + action: "" + - code: NHCX-1006 + message: Duplicate request. Request with same correlation id already exist in the system. + action: "" + - code: NHCX-1007 + message: Something went wrong while processing the request. Please check the request structure and values and try again. + action: "" + - code: NHCX-1008 + message: Something went wrong while processing the request. Please try again after sometime. + action: "" + - code: NHCX-1009 + message: Something went wrong while processing the request. Please check log for more details. + action: "" + - code: NHCX-1010 + message: No Data with given Correlation id for call back request, please check status for more details + action: "" + - code: NHCX-1011 + message: Invalid Status, please check x-hcx-status value from the protected header + action: "" + - code: NHCX-1012 + message: No records found with the requested api caller id. Please try again with a valid api caller id. + action: "" + - code: NHCX-1013 + message: Invalid or blank request found. + action: "" + - code: NHCX-1014 + message: Unable to send protocol response to sender. + action: "" + - code: NHCX-1015 + message: Invalid response received from receiver. + action: "" + - code: NHCX-1016 + message: Invalid Api Action, please check the request action for this correlationId before trying again + action: "" + - code: NHCX-1017 + message: Invalid response received from receiver + action: "" + - code: NHCX-1018 + message: Invalid ABHA number received. ABHA number should be sent in the format XX-XXXX-XXXX-XXXX + action: "" +x-abdm-errors-standard-payer: + source: Standard payer codes, PAYR-1001 to PAYR-1020. Sent by A payer implementing the published standard; they arrive inside the sealed response. + codes: + - code: PAYR-1001 + message: Error while decrypting request. Please reprocess the request encrypting with valid certificate of the payer. + action: "" + - code: PAYR-1002 + message: Error while encrypting request. Please update encryption certificate in NHCX. + action: "" + - code: PAYR-1003 + message: Error while connecting to NHCX. System will try to resend the message to NHCX after some time. + action: "" + - code: PAYR-1004 + message: Provider is not registered with the payer for requested policy. + action: "" + - code: PAYR-1005 + message: Beneficiary is not a covered member for requested policy. Please enroll beneficiary for the policy and try again. + action: "" + - code: PAYR-1006 + message: Policy does not exist. Please try with a valid policy. + action: "" + - code: PAYR-1007 + message: Requested policy is expired. Please try with a valid policy. + action: "" + - code: PAYR-1008 + message: Eligible coverage amount of the beneficiary for the requested policy is insufficient to process the request. + action: "" + - code: PAYR-1009 + message: Requested items are not valid or not covered. Please try again with valid or covered items. + action: "" + - code: PAYR-1010 + message: Preauthorization is required to process the request but was not obtained. + action: "" + - code: PAYR-1011 + message: Enhancement request can not be processed as the prior approved package/procedure does not support enhancement. + action: "" + - code: PAYR-1012 + message: Claim amount requested is more than the preauthorization approved amount. + action: "" + - code: PAYR-1013 + message: No prior approval for the requested procedures/packages obtained. + action: "" + - code: PAYR-1014 + message: Date of birth of the beneficiary can not be after date of service. + action: "" + - code: PAYR-1015 + message: Date of service cannot be after date of death. + action: "" + - code: PAYR-1016 + message: Duplicate claim submitted based on service codes and dates. + action: "" + - code: PAYR-1017 + message: Amount calculations are not correct. Please verify calculated amount. + action: "" + - code: PAYR-1018 + message: Time limit for submission expired. + action: "" + - code: PAYR-1019 + message: Requested additional information was not received or was not received within time limit + action: "" + - code: PAYR-1020 + message: Unable to process payment as no valid bank details found for the provider. + action: "" +x-abdm-errors-reference-payer: + source: Reference payer codes, PAYR-1001 to PAYR-1520. Sent by the PMJAY reference implementation; they arrive inside the sealed response. + codes: + - code: PAYR-1001 + message: Error occurred while decrypting payload for receiver code with correlation id . + action: "" + - code: PAYR-1002 + message: Error occurred while encrypting payload for receiver code with correlation id . + action: "" + - code: PAYR-1003 + message: Invalid workflow requested. Hence request will not be processed further. + action: "" + - code: PAYR-1004 + message: Received FHIR bundle is malformed. Please correct the bundle and try again. + action: "" + - code: PAYR-1005 + message: Maximum time limit exceeded in receiving the request. Please try again. + action: "" + - code: PAYR-1006 + message: Invalid name in request. Hence request will not be processed further. + action: "" + - code: PAYR-1007 + message: Invalid gender in request. Hence request will not be processed further. + action: "" + - code: PAYR-1008 + message: Invalid FHIR bundle received. Hence request will not be processed further. + action: "" + - code: PAYR-1009 + message: No identifier found for patient component. Hence request will not be processed further. https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html + action: "" + - code: PAYR-1010 + message: No type found for patient component identifier. Hence request will not be processed further. https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html + action: "" + - code: PAYR-1011 + message: No identifier found for claim component. Hence request will not be processed further. + action: "" + - code: PAYR-1012 + message: No type found for claim component identifier. Hence request will not be processed further. + action: "" + - code: PAYR-1013 + message: No identifier found for organization component for provider. Hence request will not be processed further. + action: "" + - code: PAYR-1014 + message: No type found for organization component identifier for provider. Hence request will not be processed further. + action: "" + - code: PAYR-1015 + message: No identifier found for organization component for payer. Hence request will not be processed further. + action: "" + - code: PAYR-1016 + message: No type found for organization component identifier for payer. Hence request will not be processed further. + action: "" + - code: PAYR-1017 + message: No task code received. Hence request will not be processed further. + action: "" + - code: PAYR-1018 + message: No task reason code received. Hence request will not be processed further. + action: "" + - code: PAYR-1019 + message: Invalid sequence received in supporting info element. Hence request will not be processed further. + action: "" + - code: PAYR-1020 + message: Invalid category received in supporting info element for sequence %s. Hence request will not be processed further. + action: "" + - code: PAYR-1021 + message: Invalid code received in supporting info element for sequence %s. Hence request will not be processed further. + action: "" + - code: PAYR-1023 + message: Invalid procedure category received for procedure component. Hence request will not be processed further. + action: "" + - code: PAYR-1024 + message: Invalid procedure status received for procedure component. Hence request will not be processed further. + action: "" + - code: PAYR-1025 + message: Invalid procedure sequence received for procedure component. Hence request will not be processed further. + action: "" + - code: PAYR-1026 + message: No procedure component found for reference in claim component. Hence request will not be processed further. + action: "" + - code: PAYR-1027 + message: Invalid item id found for item in claim component. Hence request will not be processed further. + action: "" + - code: PAYR-1028 + message: Invalid item sequence received for item in claim component. Hence request will not be processed further. + action: "" + - code: PAYR-1029 + message: Invalid bundle id received for FHIR bundle. Hence request will not be processed further. + action: "" + - code: PAYR-1030 + message: Invalid questionnaire id received in FHIR bundle for questionnaire component. Hence request will not be processed further. + action: "" + - code: PAYR-1031 + message: Invalid url received for bundle entry in FHIR bundle. Hence request will not be processed further. Please reach out to technical team. + action: "" + - code: PAYR-1032 + message: Invalid purpose received for coverage eligibility request. Hence request will not be processed further. Please try again with valid purpose details. + action: "" + - code: PAYR-1033 + message: No items received for coverage eligibility purpose. Since items are mandatory for the requested purpose, hence request will not be processed further. Please try again with valid item details. + action: "" + - code: PAYR-1034 + message: Invalid procedure code received. Please try again with valid procedure details. + action: "" + - code: PAYR-1035 + message: Invalid policy code received. Please try again with valid policy details. + action: "" + - code: PAYR-1036 + message: Invalid attachment received in supporting info with sequence number %s. Please try again with valid attachment details as attachment value is expected. If issue is not resolved, please reach out to technical team. + action: "" + - code: PAYR-1037 + message: No identifier found for communication component. Hence request will not be processed further. + action: "" + - code: PAYR-1038 + message: No type found for communication component identifier. Hence request will not be processed further. + action: "" + - code: PAYR-1039 + message: No payload found for communication component. Hence request will not be processed further. + action: "" + - code: PAYR-1040 + message: No component found for given reference. Hence request will not be processed further. + action: "" + - code: PAYR-1041 + message: No identifier found for procedure component. Hence request will not be processed further. + action: "" + - code: PAYR-1042 + message: No type found for procedure component identifier. Hence request will not be processed further. + action: "" + - code: PAYR-1043 + message: Date received in the request does not adhere to the NRCES date datatype format. Hence request will not be processed further. Please refere to the date format in NRCES portal. + action: "" + - code: PAYR-1044 + message: Date and time received in the request does not adhere to the NRCES date datatype format. Hence request will not be processed further. Please refere to the date time format in NRCES portal. + action: "" + - code: PAYR-1045 + message: Invalid quantity received for item. Hence request will not be processed further. + action: "" + - code: PAYR-1046 + message: No value or timing details received for supporting info for sequence %s. Hence request will not be processed further. Please reach out to technical team. + action: "" + - code: PAYR-1047 + message: Invalid reference received in supporting info with sequence number %s. Please try again with valid resource as reference value. + action: "" + - code: PAYR-1048 + message: No reference resource received for supporting info with sequence number %s. Please try again with valid resource for reference value. + action: "" + - code: PAYR-1049 + message: Invalid FHIR bundle received. Hence request will not be processed further. please reach out to technical team. + action: "" + - code: PAYR-1050 + message: No type found for practitioner component identifier. Hence request will not be processed further. + action: "" + - code: PAYR-1051 + message: No section found for composition component. Hence request will not be processed further. + action: "" + - code: PAYR-1052 + message: No references found in composition section. Hence request will not be processed further. + action: "" + - code: PAYR-1053 + message: Invalid reference found in child sections of composition section. Hence request will not be processed further. + action: "" + - code: PAYR-1054 + message: No section content found for composition component. Hence request will not be processed further. + action: "" + - code: PAYR-1055 + message: Invalid subject type found for composition component. This should be of type Patient. Hence request will not be processed further. Please try again with valid subject type for the composition. + action: "" + - code: PAYR-1056 + message: Invalid contact organization found for subject in composition component. This should be of type Organization. Hence request will not be processed further. Please try again with valid data. + action: "" + - code: PAYR-1057 + message: Invalid general practioner type found for subject in composition component. This should be of type Organization/Practitioner/PractitionerRole. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html + action: "" + - code: PAYR-1058 + message: Invalid managing organization type found for subject in composition component. This should be of type Organization. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html + action: "" + - code: PAYR-1059 + message: Invalid encounter type found for composition/observation component. This should be of type Encounter. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-DiagnosticReportRecord.html + action: "" + - code: PAYR-1060 + message: No subject found for encounter in composition component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + action: "" + - code: PAYR-1061 + message: Invalid subject type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + action: "" + - code: PAYR-1062 + message: No episode of care found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + action: "" + - code: PAYR-1063 + message: Invalid episode of care type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + action: "" + - code: PAYR-1064 + message: No based on found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + action: "" + - code: PAYR-1065 + message: Invalid based on type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + action: "" + - code: PAYR-1066 + message: No appointment found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + action: "" + - code: PAYR-1067 + message: Invalid appointment type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + action: "" + - code: PAYR-1068 + message: No reason reference found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + action: "" + - code: PAYR-1069 + message: Invalid reason reference type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + action: "" + - code: PAYR-1070 + message: No author found for composition component. Hence request will not be processed further. + action: "" + - code: PAYR-1071 + message: Invalid author type found for composition component. This should be of type Practitioner / PractitionerRole / Organization / Patient / Device / RelatedPerson. Hence request will not be processed further. Please try again with valid author type for the composition. + action: "" + - code: PAYR-1072 + message: No procedure reference received for procedure element in claim resource. Hence request will not be processed further. + action: "" + - code: PAYR-1073 + message: No based on found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html + action: "" + - code: PAYR-1074 + message: Invalid based on type found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html + action: "" + - code: PAYR-1075 + message: No part of found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html + action: "" + - code: PAYR-1076 + message: Invalid part of type found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html + action: "" + - code: PAYR-1077 + message: No subject found for observation component. Hence request will not be processed further. + action: "" + - code: PAYR-1078 + message: Invalid subject type found for observation component. This should be of type Patient. Hence request will not be processed further. Please try again with valid subject type for the observation. + action: "" + - code: PAYR-1079 + message: No care team details received. Hence request will not be processed further. Please add the care team details and try again. + action: "" + - code: PAYR-1080 + message: Invalid HPR details received for practioner resource with url %s. Hence request will not be processed further. Please try again with valid HPR id. + action: "" + - code: PAYR-1081 + message: Invalid service date received for item with sequence %s in claim resource. Hence request will not be processed further. Please try again with valid item service date. + action: "" + - code: PAYR-1082 + message: Invalid title received for composition for supporting info with sequence %s in claim resource. Hence request will not be processed further. Please try again with valid composition title. + action: "" + - code: PAYR-1083 + message: No HPR details found for the practitioner for resource %s. Hence request will not be processed further. Please send the details in the identifier for Practitioner resource with category code as HPIN. + action: "" + - code: PAYR-1084 + message: No questionnaire response resource found for url %s. Hence request will not be processed further. Please add the resources for all the references given in the FHIR bundle and try again. + action: "" + - code: PAYR-1085 + message: Invalid questionnaire response resource type found in the FHIR bundle for url %s. Hence request will not be processed further. + action: "" + - code: PAYR-1086 + message: No procedure resource found for url %s. Hence request will not be processed further. Please add the resources for all the references given in the FHIR bundle and try again. + action: "" + - code: PAYR-1087 + message: Invalid procedure resource type found in the FHIR bundle for url %s. Hence request will not be processed further. Procedure resource type is expected. + action: "" + - code: PAYR-1088 + message: Invalid composition details. + action: "" + - code: PAYR-1089 + message: No billing items found. Hence request will not be processed further. Please try again with valid billing items. + action: "" + - code: PAYR-1090 + message: No identifier found for coverage component. Hence request will not be processed further. + action: "" + - code: PAYR-1091 + message: No type found for coverage component identifier. Hence request will not be processed further. + action: "" + - code: PAYR-1092 + message: Something went wrong while processing request, kindly intiate new request + action: "" + - code: PAYR-1093 + message: No subject found for encounter in composition component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + action: "" + - code: PAYR-1094 + message: Invalid subject type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + action: "" + - code: PAYR-1095 + message: Invalid discharge information received for claim request. Hence request will not be processed further. Please send the discharge information in supporting info in claim resource, with category as DIS (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-category.html), and codes in LAMA/DAMA/DTH/DTM (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-code.html). + action: "" + - code: PAYR-1096 + message: Invalid death date received for claim request. Hence request will not be processed further. Please send the death date information in supporting info in claim resource, with category as ONS (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-category.html), and code as DTM (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-code.html). + action: "" + - code: PAYR-1097 + message: No payload found in the request. Please ensure that the request that is being sent, contains encrypted payload within the mandatory payload properties. + action: "" + - code: PAYR-1098 + message: Value type received as %s for category - OTH and code - EDT for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - OTH and code - EDT combination is used to get the registration date. So the registration date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - OTH and code - EDT. + action: "" + - code: PAYR-1099 + message: Value type received as %s for category - ONS and code - DSDE for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - ONS and code - DSDE combination is used to get the discharge date. So the discharge date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - DSDE. + action: "" +x-abdm-errors-observed: + source: Observed live codes, ERR-PYR-. Sent by the PMJAY reference implementation, on none of its published sheets; they arrive inside the sealed response. + codes: + - code: ERR-PYR-CLM-007 + message: No prior preauthorization or claim record found for case number + action: On none of the seven sheets. The SHA HP sandbox sent it for a claim raised under a number of its own rather than the preauthorisation's. diff --git a/catalogue/openapi/nhcx/v1/nhcx-participant.yaml b/catalogue/openapi/nhcx/v1/nhcx-participant.yaml deleted file mode 100644 index 80566a26c..000000000 --- a/catalogue/openapi/nhcx/v1/nhcx-participant.yaml +++ /dev/null @@ -1,480 +0,0 @@ -openapi: 3.1.1 -info: - title: NHCX participant service - version: abdm-v3 - summary: Registering on the exchange, finding who to send to, and linking policies. - description: > - The registry half of NHCX. None of these calls carries a FHIR bundle and - none of them is encrypted: they are how a participant joins the network, - how participants find and address each other, and how a payer links a - policy to the beneficiary who holds it. - - - Sandbox and production differ. Sandbox is one call each way. Production - adds a one-time passcode to the registered mobile number at every step, - so nobody can register a hospital they do not control, and the two - confirmation calls are GETs. - contact: - name: NHCX integration support - url: https://hcxsbx.abdm.gov.in/#/documents - email: hcx.integration@nha.gov.in - x-abdm-gateway: nhcx - x-abdm-module: participant - x-abdm-phase: 1 - x-abdm-roles: [provider, payer, tpa] -x-abdm-sources: - - file: NHCX-site/documents/AWS(Sandbox) NHCX-OnBoarding APIs Postman Collection.zip - role: upstream - status: not-yet-hashed - note: SANDBOX_NHCX-OnBoarding APIs, 2 requests. - - file: NHCX-site/documents/AWS(PROD) NHCX-OnBoarding APIs Postman Collection.zip - role: upstream - status: not-yet-hashed - note: PROD_NHCX-OnBoarding APIs, 4 requests. - - file: NHCX-site/documents/AWS(Sandbox) PARTICIPANT SERVICE APIs Postman Collection.zip - role: upstream - status: not-yet-hashed - note: SANDBOX-Participant_APIs, 5 requests. - - url: https://hcxsbx.abdm.gov.in/participanthcxservice/swagger-ui/index.html - role: upstream - status: not-yet-fetched - note: NHA's own Swagger for this service, live on the sandbox portal. -servers: - - url: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice - description: Sandbox participant service - - url: https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice - description: Production participant service -tags: - - name: Onboarding - description: Creating and updating the participant record that is your identity on the exchange. - - name: Discovery - description: Finding the participant a message goes to, and the key to seal it with. - - name: Policy linking - description: The payer side. Linking a policy to the ABHA number that will be used to find it. -paths: - /participant/create: - post: - operationId: nhcx_participant_create_sandbox - tags: [Onboarding] - summary: Create a participant record (sandbox) - description: > - Creates your identity on the sandbox exchange in one call, with no - passcode step. The response carries the participant code that becomes - `x-hcx-sender_code` on everything you send from then on. A hospital - group creates one participant per facility, each with its own HFR ID, - using the same credentials. - parameters: - - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} - - {name: source, in: header, required: false, description: "Set to `internal` on the sandbox.", schema: {type: string}} - requestBody: - required: true - content: - application/json: - schema: - type: object - required: [linked_registry_codes, registryid, roles, primaryMobile, encryption_cert] - properties: - linked_registry_codes: - type: array - items: {type: string, enum: ["10001", "10002", "10003", "10004"]} - description: "Which registry vouches for you. 10001 HFR, 10002 NIN, 10003 ROHINI, 10004 payer registry." - registryid: - type: string - description: On the sandbox, your ABDM client ID. In production, the HFR ID for a hospital or the IRDAI ID for a payer. - participant_name: {type: string} - scheme_code: {type: string, example: PMJAY} - state: {type: string} - district: {type: string} - roles: - type: array - items: {type: string, enum: ["10001","10002","10003","10004","10005","10006","10007","10008","10009"]} - description: > - 10001 provider, 10002 payer, 10003 TPA, 10004 regulator, - 10005 research, 10006 insurance marketplace, 10007 scheme - sponsor, 10008 another exchange, 10009 patient app. - primaryEmail: {type: string, format: email} - phone: {type: array, items: {type: string}} - primaryMobile: {type: string, description: Must be the number on the HFR record, or for a payer the one NHA holds.} - signing_cert_path: {type: string, description: Optional. Leave empty.} - encryption_cert: - type: string - description: Your X.509 certificate as a single base64 string. It begins `LS0tLS1CRUdJTi`. - endpoint_url: - type: string - description: > - The base of your callback server, sometimes called the - bridge URL. A domain name over HTTPS, hosted in India. The - exchange appends the callback path to it. - example: - linked_registry_codes: ["10001"] - registryid: "" - participant_name: Test Hospital - scheme_code: PMJAY - state: Haryana - district: Panchkula - roles: ["10001"] - primaryEmail: integration@hospital.example - phone: ["01123456789"] - primaryMobile: "9876543210" - signing_cert_path: "" - encryption_cert: "" - endpoint_url: https://nhcx.hospital.example - responses: - "200": - description: The participant code, which is your address on the exchange. - content: - application/json: - schema: - type: object - properties: - participant_code: {type: string, example: 1000004446@hcx} - /participant/update: - post: - operationId: nhcx_participant_update_sandbox - tags: [Onboarding] - summary: Update a participant record (sandbox) - description: > - The same shape as create, keyed on the participant code. Used to - change the encryption certificate or the callback address. - parameters: - - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} - requestBody: - required: true - content: - application/json: - schema: - type: object - required: [participant_code] - properties: - participant_code: {type: string, example: 1000004446@hcx} - participant_name: {type: string} - scheme_code: {type: string} - roles: {type: array, items: {type: string}} - primaryEmail: {type: string, format: email} - phone: {type: array, items: {type: string}} - primaryMobile: {type: string} - endpoint_url: {type: string} - signing_cert_path: {type: string} - encryption_cert: {type: string} - responses: - "200": {description: The record is updated.} - /v2/participant/create: - post: - operationId: nhcx_participant_create_production - tags: [Onboarding] - summary: Create a participant record (production, step 1 of 4) - description: > - Production onboarding is four calls. This is the first. It returns a - participant ID and a transaction ID, and sends a passcode to the - registered mobile number. The participant exists but is pending until - the passcode is confirmed. Passcodes and transaction IDs last 24 - hours; lose one and you repeat the step. - parameters: - - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} - requestBody: - required: true - content: - application/json: - schema: - type: object - required: [registrytype, registryid, role, mobilenumber, email] - properties: - registrytype: {type: string, enum: ["10001","10002","10003","10004"]} - registryid: - type: string - description: > - The HFR ID for a provider. For a payer or TPA the IRDAI - registry ID, sent without leading zeros, so 0123 becomes 123. - role: {type: array, items: {type: string}} - endpoint_url: {type: string, description: May be left empty here and set at the configure step.} - mobilenumber: {type: string, description: Must match the number on the HFR record exactly.} - email: {type: string, format: email} - example: - registrytype: "10001" - registryid: "" - role: ["10001"] - endpoint_url: "" - mobilenumber: "" - email: integration@hospital.example - responses: - "200": - description: A participant ID and a transaction ID. A passcode is sent to the mobile number. - content: - application/json: - schema: - type: object - properties: - participantid: {type: string} - transactionid: {type: string} - /validate: - get: - operationId: nhcx_participant_validate_create - tags: [Onboarding] - summary: Confirm the create passcode (production, step 2 of 4) - description: > - Confirms the passcode sent by the create call and makes the - participant active. Note the method: both confirmation calls are - GETs, not POSTs. - parameters: - - {name: transactionId, in: query, required: true, schema: {type: string}} - - {name: passcode, in: query, required: true, schema: {type: string}} - - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} - responses: - "200": {description: The participant is active.} - /v2/participant/update: - post: - operationId: nhcx_participant_update_production - tags: [Onboarding] - summary: Configure certificate and callback (production, step 3 of 4) - description: > - Sends the encryption certificate and the callback address. A second - transaction ID and passcode arrive on the registered mobile. - parameters: - - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} - requestBody: - required: true - content: - application/json: - schema: - type: object - required: [participantcode] - properties: - participantcode: {type: string, example: 12345678934@hcx} - encryptioncert: {type: string, description: The X.509 certificate as a single base64 string.} - endpointurl: {type: string, description: The bridge URL the exchange will call back on.} - responses: - "200": - description: A second transaction ID, pending its passcode. - content: - application/json: - schema: - type: object - properties: - transactionid: {type: string} - /update/validate: - get: - operationId: nhcx_participant_validate_update - tags: [Onboarding] - summary: Confirm the update passcode (production, step 4 of 4) - description: The certificate and address go live. The exchange can now reach you. - parameters: - - {name: transactionId, in: query, required: true, schema: {type: string}} - - {name: passcode, in: query, required: true, schema: {type: string}} - - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} - responses: - "200": {description: The certificate and callback address are live.} - /v2/update/cert: - post: - operationId: nhcx_participant_update_certificate - tags: [Onboarding] - summary: Replace only the encryption certificate (production) - description: > - A shorter path that skips the passcode, for the yearly key rotation - NHA recommends. Not present in the Postman collection; documented on - the onboarding page. - requestBody: - required: true - content: - application/json: - schema: - type: object - required: [participantId, certificate] - properties: - participantId: {type: string} - certificate: {type: string, description: The new X.509 certificate, base64 encoded.} - responses: - "200": {description: The certificate is replaced.} - /fetch/participants/list: - post: - operationId: nhcx_participant_list - tags: [Discovery] - summary: List participants by role - description: > - How a hospital system builds its list of payers, and how a payer - finds hospitals. The list is not searchable by name on the server - side: fetch it, filter by name in your own code, and cache it for the - day, because it changes rarely. - parameters: - - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} - - {name: X-CM-ID, in: header, required: false, schema: {type: string, example: sbx}} - requestBody: - required: true - content: - application/json: - schema: - type: object - required: [role] - properties: - role: {type: string, enum: [PAYER, PROVIDER, TPA]} - fromdate: {type: string, description: "Registration date lower bound, dd/MM/yyyy only.", example: 01/04/2021} - todate: {type: string, description: "Registration date upper bound, dd/MM/yyyy only.", example: 31/03/2027} - entitytype: {type: string, description: "Optional. `Gov` narrows to government schemes; omit for everyone."} - responses: - "200": - description: Participant records, each with its code, name, roles and entity type. - /fetch/certs: - post: - operationId: nhcx_participant_fetch_certificate - tags: [Discovery] - summary: Fetch a participant's public key - description: > - Returns the key material to seal a message for that participant, as - PEM text. Usually a full X.509 certificate; for a participant who - registered a bare key, an SPKI public key instead. Try the - certificate import first and fall back to the key. The handbook's - rule of thumb is that anything under about 400 bytes is a bare key. - - - Fetch against the `processingid` from the policy lookup, not the - insurer's `payerid`. Cache by participant code for 24 hours. - parameters: - - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} - requestBody: - required: true - content: - application/json: - schema: - type: object - required: [participantid] - properties: - participantid: {type: string, example: 1000003538@hcx} - responses: - "200": - description: > - Key material in PEM text. None of the published sources gives the - JSON envelope it arrives in, so inspect one response before - writing the parser. - /participant/get/policies: - post: - operationId: nhcx_participant_get_policies - tags: [Discovery] - summary: Look up a beneficiary's policies - description: > - Given something that identifies the patient, returns every policy - linked to them. The three identifier types are not equal: try - `AbhaNumber` first, then `MemberId`, then `MobileNo`, and stop at the - first that returns a policy. - - - What comes back decides the address on every later envelope. - `processingid` is the recipient, not `payerid`. Pointing at `payerid` - is the portal's seventh most common mistake. - parameters: - - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} - requestBody: - required: true - content: - application/json: - schema: - type: object - required: [identifiertype, identifiervalue] - properties: - identifiertype: {type: string, enum: [AbhaNumber, MemberId, MobileNo]} - identifiervalue: {type: string, description: "The ABHA number without hyphens, the member ID, or the mobile number."} - example: - identifiertype: AbhaNumber - identifiervalue: "91123456781234" - responses: - "200": - description: One entry per policy. - content: - application/json: - schema: - type: object - properties: - policies: - type: array - items: - type: object - properties: - payerid: {type: string, description: The insurer's participant code. Goes inside the bundle as the insurer.} - processingid: {type: string, description: Who processes claims for this policy. This is the recipient on the envelope.} - memberid: {type: string, description: Identifies the beneficiary in eligibility and claim bundles.} - productid: {type: string, description: The product code, used to fetch the insurance plan.} - productname: {type: string, description: Human readable.} - example: - policies: - - payerid: 1518@hcx - processingid: 1000000109@hcx - memberid: MD5SLS4X5 - productid: PMJAY/HP/S/G - productname: PMJAY Himachal Pradesh - /participant/link/abha/policy: - post: - operationId: nhcx_participant_link_abha_policy - tags: [Policy linking] - summary: Link a policy to an ABHA number - description: > - The payer's half, performed when the policy is written or renewed. It - is what makes the beneficiary findable by ABHA number at the point of - care. Only the participants named as `payerid` or `processingid` may - change the link later, and the exchange checks the caller's token - against them, so the linking job must run under the same credentials - that created the participant. - parameters: - - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} - requestBody: - required: true - content: - application/json: - schema: - type: object - required: [requestid, payerid, processingid, memberid, policies] - properties: - requestid: {type: string, format: uuid} - abhanumber: {type: string, description: The policy holder's ABHA number, without hyphens.} - mobilenumber: {type: string} - memberid: {type: string, description: The policy holder ID.} - payerid: {type: string, description: The insurer's own participant code. Every insurer has one, even when it works through a TPA.} - processingid: {type: string, description: The TPA's participant code, or the insurer's own if it processes its own claims.} - policies: - type: array - items: - type: object - properties: - productid: {type: string} - productname: {type: string} - responses: - "200": {description: The policy is linked.} - /participant/delink/abha/policy: - post: - operationId: nhcx_participant_delink_abha_policy - tags: [Policy linking] - summary: Remove a policy link - description: > - Only products already on the link can be removed; naming one that is - not there returns "There is no policies with requested details". The - commonest reason to de-link is a change of TPA, and there is no edit - call, so plan that as a batch job. - parameters: - - {name: Accept, in: header, required: true, schema: {type: string, const: application/json}} - requestBody: - required: true - content: - application/json: - schema: - type: object - required: [requestid, payerid, processingid, memberid, policies] - properties: - requestid: {type: string, format: uuid} - payerid: {type: string} - processingid: {type: string} - memberid: {type: string} - policies: - type: array - items: - type: object - properties: - productid: {type: string} - productname: {type: string} - responses: - "200": {description: The link is removed.} -components: - securitySchemes: - bearer_auth: - type: apiKey - in: header - name: bearer_auth - description: The ABDM session token, prefixed with `Bearer ` and a space. -security: - - bearer_auth: [] diff --git a/catalogue/openapi/nhcx/v1/nhcx-payment-notice.yaml b/catalogue/openapi/nhcx/v1/nhcx-payment-notice.yaml new file mode 100644 index 000000000..1f15f87aa --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-payment-notice.yaml @@ -0,0 +1,846 @@ +# NHCX payment notice, from the NHCX package's Bruno folder apis/06-payment-notice. +# +# Written by the package's system/build-ekadocs.mjs (make ekadocs); change the .bru +# requests there and port again rather than editing this file. +# +# Rules this file follows: catalogue/openapi/CONVENTIONS.md +openapi: 3.1.1 +info: + x-portal: + module: payment-notice + label: Payment notice + position: 6 + title: NHCX payment notice + summary: Every other flow exchanges decisions; the payment notice is the only one that tells the hospital whether the money actually moved. + description: |- + The Payment notice calls on the National Health Claims Exchange (NHCX): 4 operations, and 2 callbacks you host. + + Every other flow exchanges decisions; the payment notice is the only one that tells the hospital whether the money actually moved. + + Guides that use these calls: [Payment notice and acknowledgement](/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement). + + Production address for the NHCX exchange: shared by NHA after sandbox exit. + version: nhcx-v1 + license: + name: MIT + identifier: MIT + contact: + name: NHCX sandbox + url: https://hcxsbx.abdm.gov.in + x-abdm-gateway: nhcx + x-abdm-module: payment-notice + x-abdm-phase: 1 + x-abdm-roles: + - provider + - payer +x-abdm-sources: + - file: nhcx-package/apis/06-payment-notice + role: upstream + hash: sha256:ecbc5eba98524e6d102f3375c652f11a4aab2a32272cbef94c0993e8efe0d0f6 + note: The package's Bruno collection, one request per operation. + - file: nhcx-package/baseurl.yaml + role: upstream + hash: sha256:47d8412abbfc53b1e1038410e7980eee029d7b1be5082f4ae6c1d4e16ae0dd0f + note: The sandbox and production hosts. +servers: + - url: https://apisbx.abdm.gov.in/hcx + description: Sandbox, NHCX exchange. +tags: + - name: Payment notice + description: Every other flow exchanges decisions; the payment notice is the only one that tells the hospital whether the money actually moved. + - name: Adapter + description: Exposed for the NHCX adapter deployment rather than for direct integration. +security: + - bearerAuth: [] +paths: + /v1/paymentnotice/request: + post: + operationId: payment_notice_v1_paymentnotice_request + x-abdm-use-case: Payment notice + tags: + - Payment notice + summary: Payment notice request + description: |- + Payer pushes a Task bundle with PaymentNotice and PaymentReconciliation (amount, TDS, UTR) to the provider via NHCX after approving a claim. + + ### Business purpose + + Every other flow exchanges decisions; the payment notice is the only one that tells the hospital whether the money actually moved. It formally notifies the provider that a payment has been initiated, processed or settled against an approved claim, carrying the net amount, TDS deduction, payment date and the UTR. Hospitals need it to reconcile bank receipts to claims and close the episode; payers need it as the structured, auditable record of settlement. + + ### When to use + + Payer-initiated, after the final claim is approved (workflow 26). The same bundle shape is sent up to three times as the money progresses: 30 PAYMENT_INITIATED, 31 PAYMENT_PROCESSED and 33 PAYMENT_SETTLED, when the UTR becomes available in PaymentReconciliation.paymentIdentifier.value. The NHA status sheet frames these as x-hcx-status request.initiated because the payer is authoring a new request to the provider; the workbook sample shows x-hcx-workflow_id 11 as a placeholder. The bundle is a Task with code deliver and status requested, plus PaymentNotice (paymentStatus paid), PaymentReconciliation and both Organisations. + + ### Preconditions + + - The claim has received a response.complete approval and a payment has been initiated in the payer's banking system. + - The payer holds a valid Bearer token and has fetched the provider's certificate; the bundle is JWE-encrypted for the provider. + - Protected header carries request.initiated, a fresh correlation UUID for this notice cycle (the workbook says same as the API caller ID), the payer as sender and the provider as recipient, and an IST timestamp. + - PaymentNotice.amount and PaymentReconciliation.paymentAmount carry the net amount; detail lines itemise TDS and Payment; the claim number is carried as identifier type CLN. + - Valid provider bank details exist on the payer side (PAYR-1020 otherwise). + + ### Postconditions + + NHCX returns HTTP 202 Accepted with a StatusSuccessResponse acknowledgement (entity_type payment) and forwards the bundle asynchronously to the provider's registered callback endpoint, which must acknowledge with 202 within 30 seconds. The provider then sends its own acknowledgement Task (status completed, output paymentack, workflow 17) on /v1/paymentnotice/on_request; only after that acknowledgement is the payment lifecycle considered closed. Protocol failures at the provider come back as a ProtocolResponse with x-hcx-error_details. Statuses 400, 404 and 500 carry the same schema. + + ### Common mistakes + + - Provider side: expecting a Claim or ClaimResponse; the payment notice is a Task bundle and the money fields live in PaymentReconciliation. + - Provider side: reading the UTR before workflow 33, or parsing the scroll-style UTR (for example UTR000000000001) as a bank RRN. + - Provider side: relying on Task.description text for logic; the published sample contains a typo (Recived the payment). + - Provider side: returning 200 or a malformed body on receipt, which triggers five retries and deletion. + - Payer side: sending the notice before the claim is closed by response.complete, or without valid provider bank details (PAYR-1020). + - Both sides: the FAQ's sandbox base URL for payment notice is printed without a slash between host and path; cross-check against the endpoint index. + + ### Best practices + + - Payer: send 30, 31 and 33 as the transfer progresses and populate paymentIdentifier with the UTR at 33; keep TDS and Payment detail lines consistent with the gross claim amount. + - Provider: persist the UTR, TDS and net amount against the claim for audit and dispute resolution, and mark the claim SETTLED only on 33. + - Provider: acknowledge with 202 within 30 seconds, be idempotent on correlation ID, then send the paymentack Task. + - Both: note the source conflict on whether the acknowledgement goes to /v1/paymentnotice/on_request or /v1/task/submit; the API contract supports on_request, so confirm with the counterparty during onboarding. + - Both: use IST timestamps and echo the correlation ID through the acknowledgement. + + ### Related scenario + + Three days after approving claim CL0000000001 for 2430 INR, the state health agency initiates a bank transfer of 2187 INR after 243 INR TDS. Its bridge builds a Task bundle with code deliver, a PaymentNotice with amount 2187 and status paid, and a PaymentReconciliation with the TDS and Payment detail lines, and posts it to /v1/paymentnotice/request under workflow 30. NHCX returns 202 and delivers it to the hospital, which acknowledges within 30 seconds. When the transfer settles the payer sends a second notice under 33 carrying the UTR; the hospital persists it and responds on /v1/paymentnotice/on_request with a paymentack Task. + + ### Specification + + Chapter [Payment notice and acknowledgement](/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: NHCX returns HTTP 202 Accepted with a StatusSuccessResponse acknowledgement (entity_type payment) and forwards the bundle asynchronously to the provider's registered callback endpoint, which must acknowledge with 202 within 30 seconds. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 27/02/2026 15:36:09:004 + api_call_id: c3d2e1f0-a9b8-4c7d-9e6f-5a4b3c2d1e0f + correlation_id: c3d2e1f0-a9b8-4c7d-9e6f-5a4b3c2d1e0f + result: + sender_code: 1518@hcx + recipient_code: 1000004446@hcx + entity_type: payment + protocol_status: request.queued + error: + code: "" + message: "" + /internal/v1/paymentnotice/request: + post: + operationId: payment_notice_internal_v1_paymentnotice_request + x-abdm-use-case: Adapter + tags: + - Adapter + summary: Payment notice request (internal) (adapter) + description: |- + Internal twin of /v1/paymentnotice/request (operationId paymentNoticeRequestPostInternal) with the same JWEPayload body and response set. Exposed for the NHCX adapter deployment rather than for direct integration. + + ### Business purpose + + The paymentnotice service publishes its request operation twice, at /v1 and at /internal/v1, with identical descriptions, request bodies and response sets. Only the operationId differs, by an Internal suffix. The /internal prefix is the route the NHCX adapter sits on: a participant running the adapter alongside its own system calls the internal path, and the adapter handles the encryption, headers and gateway hop. A participant integrating directly against NHCX calls the public path and does that work itself. No separate business purpose is documented for the internal route beyond that. + + ### When to use + + Use it only when you are running the NHCX adapter and it is configured to serve this path; otherwise call /v1/paymentnotice/request. Everything else is unchanged: the same JWEPayload body, the same x-hcx-* protected header, the same workflow discriminators and the same asynchronous callback. The specs do not document what makes the internal variant different beyond the operationId, so treat it as a mirror of the public path and confirm with NHCX onboarding before pointing production at it. + + ### Preconditions + + Identical to /v1/paymentnotice/request. Nothing additional is documented for the internal route, beyond an adapter deployment that actually serves the /internal prefix. + + ### Postconditions + + NHCX returns HTTP 202 Accepted with a StatusSuccessResponse acknowledgement (entity_type payment) and forwards the bundle asynchronously to the provider's registered callback endpoint, which must acknowledge with 202 within 30 seconds. The provider then sends its own acknowledgement Task (status completed, output paymentack, workflow 17) on /v1/paymentnotice/on_request; only after that acknowledgement is the payment lifecycle considered closed. Protocol failures at the provider come back as a ProtocolResponse with x-hcx-error_details. Statuses 400, 404 and 500 carry the same schema. + + ### Common mistakes + + - Assuming a different body or different semantics for the internal route; the spec gives it the same JWEPayload body and the same responses. + - Calling it without an adapter deployment behind it and then chasing a 404. + - Every pitfall of the public path applies unchanged. + + ### Best practices + + - Default to /v1/paymentnotice/request and keep the internal path as a configuration option only. + - Share one client implementation across both paths, so header hygiene, encryption and correlation handling cannot diverge between them. + - Record which variant carried each correlation ID, for support conversations. + + ### Related scenario + + A vendor reading the paymentnotice OpenAPI document sees paymentNoticeRequestPostInternal sitting beside its public twin and asks which one to build against. The answer is the public path, unless NHCX onboarding has given them an adapter deployment, in which case the adapter takes the bundle unencrypted on the internal path and does the JWE and the gateway hop for them. The end-to-end flow is identical either way. + + ### Specification + + Chapter [Payment notice and acknowledgement](/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: NHCX returns HTTP 202 Accepted with a StatusSuccessResponse acknowledgement (entity_type payment) and forwards the bundle asynchronously to the provider's registered callback endpoint, which must acknowledge with 202 within 30 seconds. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 27/02/2026 15:36:09:004 + api_call_id: c3d2e1f0-a9b8-4c7d-9e6f-5a4b3c2d1e0f + correlation_id: c3d2e1f0-a9b8-4c7d-9e6f-5a4b3c2d1e0f + result: + sender_code: 1518@hcx + recipient_code: 1000004446@hcx + entity_type: payment + protocol_status: request.queued + error: + code: "" + message: "" + /v1/paymentnotice/on_request: + post: + operationId: payment_notice_v1_paymentnotice_on_request + x-abdm-use-case: Payment notice + tags: + - Payment notice + summary: Payment notice acknowledgement + description: |- + Provider acknowledges a payment notice with a Task bundle (status completed, output paymentack), closing the payment lifecycle via NHCX. + + ### Business purpose + + The acknowledgement confirms to the payer that the provider has received and recorded the payment notice for a specific claim. It closes the payment lifecycle from the provider side and completes the audit trail from claim approval through settlement. Failure to acknowledge does not block the payer, but the acknowledgement is required for complete lifecycle tracking, which matters for reconciliation, dispute resolution and scheme reporting. + + ### When to use + + Called by the provider after processing a /v1/paymentnotice/request message, using the same correlation ID, with x-hcx-workflow_id 17 PAYMENT_RECEIVED and x-hcx-status response.complete (the NHA sheet lists 17 Payment Notice Received as response.complete). The plaintext is a Task with status completed, intent order, code status from the HL7 financialtaskcode system, output[0] paymentack (Payment is acknowledged) and output[1] claimNumber carrying the acknowledged claim number; Task.requester is the provider and Task.owner the payer, the reverse of the notice. The handbook narrative alternatively places this acknowledgement on /v1/task/submit; the OpenAPI contract and the Payment use-case document support this endpoint. + + ### Preconditions + + - A payment notice with this correlation ID has been received and acknowledged with 202 (NHCX-1010 if NHCX has no record of it). + - The provider holds a valid Bearer token and the payer's certificate, and encrypts the acknowledgement Task for the payer. + - x-hcx-correlation_id echoes the notice; x-hcx-api_call_id is new; the provider is sender and the payer is recipient. + - Task.output[0].valueCodeableConcept.coding.code is paymentack and Task.output[1].valueString is the claim number from the notice; Task.status is completed. + - x-hcx-status is response.complete, or response.error with x-hcx-error_details for a protocol-level problem. + + ### Postconditions + + NHCX returns HTTP 202 Accepted with a StatusSuccessResponse acknowledgement (entity_type payment) and forwards the Task to the payer asynchronously; the payer's endpoint must acknowledge with 202 within 30 seconds or NHCX retries up to five times. If the payer cannot process the acknowledgement (invalid provider, decryption failure, missing mandatory protocol attributes) it returns a protocol response with x-hcx-error_details populated. On success the payment lifecycle for that claim is closed on both sides. + + ### Common mistakes + + - Sending the acknowledgement as a JWEPayload of a different resource type or with the workbook's alternative output text (ACKNOWLEDGED, RECEIVED) instead of paymentack. + - Keeping the notice's Task direction; on the acknowledgement requester must be the provider and owner the payer. + - Minting a new correlation ID instead of echoing the notice's, or reusing a correlation ID that NHCX has deleted after failed deliveries. + - Using the wrong status; the response leg carries response.complete, not request.initiated. + - Skipping the acknowledgement altogether because the payer is not blocked by it, which leaves the lifecycle open in NHCX tracking. + - Payer side: returning 200 or a non-conforming body on receipt, which is treated as an error and retried. + + ### Best practices + + - Send the acknowledgement only after the UTR, TDS and net amount have been persisted against the claim. + - Echo the claim number from PaymentNotice.identifier (type CLN) into Task.output[1].valueString so the payer can match it without decrypting the original. + - Confirm with the payer during onboarding whether it expects the acknowledgement here or on /v1/task/submit, given the documented source conflict. + - Be idempotent: if the same notice is redelivered, acknowledge again with the same content rather than creating a second ledger entry. + - Log api_call_id and correlation ID for the acknowledgement so the closed lifecycle can be evidenced. + + ### Related scenario + + The hospital finance team receives the settlement notice under workflow 33 for claim CL0000000001 with UTR UTR000000000001, net 2187 INR and TDS 243 INR. After matching the bank credit and persisting the UTR, the HMIS builds a Task with status completed, code status, output paymentack and claimNumber CL0000000001, encrypts it for the payer and posts it to /v1/paymentnotice/on_request under workflow 17 with the notice's correlation ID. NHCX returns 202 and delivers it to the payer's bridge, which acknowledges within 30 seconds; the claim is now closed on both ledgers. + + ### Specification + + Chapter [Payment notice and acknowledgement](/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "17" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxDebugFlag" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: NHCX returns HTTP 202 Accepted with a StatusSuccessResponse acknowledgement (entity_type payment) and forwards the Task to the payer asynchronously; the payer's endpoint must acknowledge with 202 within 30 seconds or NHCX retries up to five times. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 27/02/2026 10:06:19:310 + api_call_id: b1a2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d + correlation_id: c3d2e1f0-a9b8-4c7d-9e6f-5a4b3c2d1e0f + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: payment + protocol_status: request.dispatched + error: + code: "" + message: "" + /internal/v1/paymentnotice/on_request: + post: + operationId: payment_notice_internal_v1_paymentnotice_on_request + x-abdm-use-case: Adapter + tags: + - Adapter + summary: Payment notice acknowledgement (internal) (adapter) + description: |- + Internal twin of /v1/paymentnotice/on_request (operationId paymentNoticeOnRequestPostInternal) with the same JWEPayload body and response set. Exposed for the NHCX adapter deployment rather than for direct integration. + + ### Business purpose + + The paymentnotice service publishes its on_request operation twice, at /v1 and at /internal/v1, with identical descriptions, request bodies and response sets. Only the operationId differs, by an Internal suffix. The /internal prefix is the route the NHCX adapter sits on: a participant running the adapter alongside its own system calls the internal path, and the adapter handles the encryption, headers and gateway hop. A participant integrating directly against NHCX calls the public path and does that work itself. No separate business purpose is documented for the internal route beyond that. + + ### When to use + + Use it only when you are running the NHCX adapter and it is configured to serve this path; otherwise call /v1/paymentnotice/on_request. Everything else is unchanged: the same JWEPayload body, the same x-hcx-* protected header, the same workflow discriminators and the same asynchronous callback. The specs do not document what makes the internal variant different beyond the operationId, so treat it as a mirror of the public path and confirm with NHCX onboarding before pointing production at it. + + ### Preconditions + + Identical to /v1/paymentnotice/on_request. Nothing additional is documented for the internal route, beyond an adapter deployment that actually serves the /internal prefix. + + ### Postconditions + + NHCX returns HTTP 202 Accepted with a StatusSuccessResponse acknowledgement (entity_type payment) and forwards the Task to the payer asynchronously; the payer's endpoint must acknowledge with 202 within 30 seconds or NHCX retries up to five times. If the payer cannot process the acknowledgement (invalid provider, decryption failure, missing mandatory protocol attributes) it returns a protocol response with x-hcx-error_details populated. On success the payment lifecycle for that claim is closed on both sides. + + ### Common mistakes + + - Assuming a different body or different semantics for the internal route; the spec gives it the same JWEPayload body and the same responses. + - Calling it without an adapter deployment behind it and then chasing a 404. + - Every pitfall of the public path applies unchanged. + + ### Best practices + + - Default to /v1/paymentnotice/on_request and keep the internal path as a configuration option only. + - Share one client implementation across both paths, so header hygiene, encryption and correlation handling cannot diverge between them. + - Record which variant carried each correlation ID, for support conversations. + + ### Related scenario + + A vendor reading the paymentnotice OpenAPI document sees paymentNoticeOnRequestPostInternal sitting beside its public twin and asks which one to build against. The answer is the public path, unless NHCX onboarding has given them an adapter deployment, in which case the adapter takes the bundle unencrypted on the internal path and does the JWE and the gateway hop for them. The end-to-end flow is identical either way. + + ### Specification + + Chapter [Payment notice and acknowledgement](/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "17" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxDebugFlag" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: NHCX returns HTTP 202 Accepted with a StatusSuccessResponse acknowledgement (entity_type payment) and forwards the Task to the payer asynchronously; the payer's endpoint must acknowledge with 202 within 30 seconds or NHCX retries up to five times. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 27/02/2026 10:06:19:310 + api_call_id: b1a2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d + correlation_id: c3d2e1f0-a9b8-4c7d-9e6f-5a4b3c2d1e0f + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: payment + protocol_status: request.dispatched + error: + code: "" + message: "" +webhooks: + v1_paymentnotice_request: + post: + operationId: payment_notice_webhook_v1_paymentnotice_request + x-abdm-triggered-by: payment_notice_v1_paymentnotice_request + x-abdm-use-case: Webhooks + tags: + - Payment notice + summary: Receive payment notice request + description: |- + Hosted by the provider. The exchange posts this message to the `endpoint_url` you registered, at `/v1/paymentnotice/request`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Payer pushes a Task bundle with PaymentNotice and PaymentReconciliation (amount, TDS, UTR) to the provider via NHCX after approving a claim. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" + v1_paymentnotice_on_request: + post: + operationId: payment_notice_webhook_v1_paymentnotice_on_request + x-abdm-triggered-by: payment_notice_v1_paymentnotice_on_request + x-abdm-use-case: Webhooks + tags: + - Payment notice + summary: Receive payment notice acknowledgement + description: |- + Hosted by the payer. The exchange posts this message to the `endpoint_url` you registered, at `/v1/paymentnotice/on_request`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Provider acknowledges a payment notice with a Task bundle (status completed, output paymentack), closing the payment lifecycle via NHCX. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "17" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxDebugFlag" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + description: "On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value." + parameters: + BearerAuth: + name: bearer_auth + in: header + required: true + description: It is `bearer_auth`, not `Authorization`, on NHCX's own endpoints. + schema: + type: string + example: Bearer + XHcxSenderCode: + name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + XHcxRecipientCode: + name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + XHcxApiCallId: + name: x-hcx-api_call_id + in: header + required: true + description: Fresh on every message, including responses. Mandatory on the envelope. + schema: + type: string + example: + XHcxRequestId: + name: x-hcx-request_id + in: header + required: false + description: One per originating request. The Open Protocol page marks it Mandatory; the Technical Specifications page marks it Optional. Optional on the envelope. + schema: + type: string + example: + XHcxCorrelationId: + name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + XHcxWorkflowId: + name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "30" + XHcxTimestamp: + name: x-hcx-timestamp + in: header + required: true + description: See the format note below. Mandatory on the envelope. + schema: + type: string + example: + XHcxStatus: + name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: request.initiated + XHcxBenAbhaId: + name: x-hcx-ben-abha-id + in: header + required: true + description: The beneficiary's ABHA number. Mandatory on every exchange, including those with no beneficiary in the payload. Mandatory on the envelope. + schema: + type: string + example: "91711234567890" + XHcxDebugFlag: + name: x-hcx-debug_flag + in: header + required: false + description: "`Error`, `Info` or `Debug`. A server may ignore it. Optional on the envelope." + schema: + type: string + example: INFO +x-abdm-errors: + notes: "Codes any exchange call can meet are recorded once, in the [Other](/docs/nhcx/v1/api/other) specification: the gateway's NHCX- codes, the standard payer codes, and the reference payer's structure and transport codes. The reference payer's other codes sit with the exchange they reject: coverage eligibility, preauthorisation, claim and insurance plan. [Reading error codes](/docs/nhcx/v1/reference/error-code-guide) explains the code spaces." diff --git a/catalogue/openapi/nhcx/v1/nhcx-preauth.yaml b/catalogue/openapi/nhcx/v1/nhcx-preauth.yaml new file mode 100644 index 000000000..997ac5fdb --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-preauth.yaml @@ -0,0 +1,1106 @@ +# NHCX pre-authorisation, from the NHCX package's Bruno folder apis/03-preauth. +# +# Written by the package's system/build-ekadocs.mjs (make ekadocs); change the .bru +# requests there and port again rather than editing this file. +# +# Rules this file follows: catalogue/openapi/CONVENTIONS.md +openapi: 3.1.1 +info: + x-portal: + module: preauth + label: Pre-authorisation + position: 3 + title: NHCX pre-authorisation + summary: Pre-authorisation is the provider's formal request for the payer's approval to deliver a specific treatment to a covered beneficiary. + description: |- + The Pre-authorisation calls on the National Health Claims Exchange (NHCX): 4 operations, and 2 callbacks you host. + + Pre-authorisation is the provider's formal request for the payer's approval to deliver a specific treatment to a covered beneficiary. + + Guides that use these calls: [Building and sending a JWE](/docs/nhcx/v1/getting-started/building-and-sending-a-jwe), [Preauthorisation request](/docs/nhcx/v1/reference/fhir/preauthorisation-request), [Preauthorisation response](/docs/nhcx/v1/reference/fhir/preauthorisation-response), [Preauthorisation enhancement](/docs/nhcx/v1/reference/fhir/preauthorisation-enhancement), [Preauthorisation query and answer](/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer). + + Production address for the NHCX exchange: shared by NHA after sandbox exit. + version: nhcx-v1 + license: + name: MIT + identifier: MIT + contact: + name: NHCX sandbox + url: https://hcxsbx.abdm.gov.in + x-abdm-gateway: nhcx + x-abdm-module: preauth + x-abdm-phase: 1 + x-abdm-roles: + - provider + - payer +x-abdm-sources: + - file: nhcx-package/apis/03-preauth + role: upstream + hash: sha256:270ab9c7c4783d9042ee4c4adbd8141d8fd69037d358a330808f23e3d945deca + note: The package's Bruno collection, one request per operation. + - file: nhcx-package/baseurl.yaml + role: upstream + hash: sha256:47d8412abbfc53b1e1038410e7980eee029d7b1be5082f4ae6c1d4e16ae0dd0f + note: The sandbox and production hosts. + - file: nhcx-package/nhcx-error.yaml + role: upstream + hash: sha256:d24ac927ed4dd722e60d7bd1d6fed15de370cc29f750d68999ee56fac93c941b + note: The error codes. +servers: + - url: https://apisbx.abdm.gov.in/hcx + description: Sandbox, NHCX exchange. +tags: + - name: Pre-authorisation + description: Pre-authorisation is the provider's formal request for the payer's approval to deliver a specific treatment to a covered beneficiary. + - name: Adapter + description: Exposed for the NHCX adapter deployment rather than for direct integration. +security: + - bearerAuth: [] +paths: + /v1/preauth/submit: + post: + operationId: preauth_v1_preauth_submit + x-abdm-use-case: Pre-authorisation + tags: + - Pre-authorisation + summary: Pre-authorisation submit + description: |- + Provider submits, resubmits, enhances or answers a query on a pre-authorisation Claim bundle (Claim.use preauthorization); NHCX routes it to the payer. + + ### Business purpose + + Pre-authorisation is the provider's formal request for the payer's approval to deliver a specific treatment to a covered beneficiary. An approved preAuthRef is the payer's binding commitment to reimburse the approved amount and is required before the final claim can proceed through NHCX. Settling the money question before the patient enters theatre protects the hospital from unpaid treatment, gives the payer control over admissibility, and gives the patient certainty about cashless cover. + + ### When to use + + Called after eligibility has confirmed cover and the mandatory documents are in hand. The same endpoint carries several business steps; the x-hcx-workflow_id header (and the optional x-hcx-use_case header with values New, Enhancement or Resubmit) is the discriminator: 12 PREAUTH_REQUEST_INITIATED for a new preauth; 121 PREAUTH_REQUEST_RESUBMITTED after a query or rejection; 19 PREAUTH_QUERY_RESPONSE_SUBMITTED to answer a payer query received under 24; 13 ENHANCEMENT_REQUEST_INITIATED for an additional amount on an already approved preauth, with 131 answering an enhancement query (241); and 14 DISCHARGE_SUBMITTED for the provisional pre-discharge submission that the claim chapter describes for non-PMJAY schemes (answered by 261, 262 or 263), with 141 answering a discharge query. Send x-hcx-status request.initiated on every one of these. Cancellation is not sent here; it goes to /v1/task/submit (PC01 or 122). + + ### Preconditions + + - Provider is an active NHCX participant with a valid NPI facility code and a current Bearer token. + - Patient resource carries the PMJAY Member ID and ABHA number; an active Coverage resource with a valid policy identifier is included. + - Diagnosis (ICD-10), procedure (NRCes ndhm-procedure-code), care team and supportingInfo are present, and the mandatory documents named by the InsurancePlan or the eligibility auth-requirements response are attached. + - For a new PMJAY preauth, either biometric authentication or the Authentication Consent questionnaire response is included (PAYR-1256, PAYR-1271). + - For 13, 19, 121 or 131 a prior preauth in the right state exists (PAYR-1212, PAYR-1214, PAYR-1218, PAYR-1219 otherwise) and the message reuses the episode's correlation identity. + - Payer certificate fetched, bundle JWE-encrypted, recipient code taken from processingID, timestamp in IST. + + ### Postconditions + + NHCX returns HTTP 202 Accepted with a StatusSuccessResponse acknowledgement (entity_type preauth, protocol_status request.queued or request.dispatched). This is not an adjudication; the gateway validates structure and open headers, then forwards asynchronously. The payer may first acknowledge under workflow 20, then answer on /v1/preauth/on_submit with a ClaimResponseBundle: 21 approved (preAuthRef issued), 23 rejected, 24 queried, 22 enhancement approved or 241 enhancement queried, 261, 262 or 263 for discharge. Protocol failures return a ProtocolResponse with x-hcx-error_details. Errors marked 400, 404 and 500 carry the same schema. + + ### Common mistakes + + - Answering a query (24) with a fresh 12 instead of 19, or answering an enhancement query (241) with 19 instead of 131; both arrive on the same callback and are easily crossed. + - Sending an enhancement (13) against a preauth that is not yet approved (PAYR-1212) or while another case is in progress (PAYR-1213), or a new 12 when an approved preauth already exists (PAYR-1217). + - Reusing a correlation ID across cycles (NHCX-1006) or after a failure, when NHCX has marked it inactive. + - Leaving out x-hcx-workflow_id and x-hcx-use_case because the spec marks them Optional; without them the payer cannot tell an enhancement from a duplicate. + - Item and amount errors: PAYR-1017 incorrect calculations, PAYR-1209 net amount not greater than zero, PAYR-1248 invalid item code, PAYR-1254 missing STG questionnaire response, PAYR-1270 sending LM100 at preauth stage. + - Branching on ClaimResponse.outcome alone when the callback arrives; complete means approved or rejected depending on adjudication reason. + + ### Best practices + + - Build one ClaimBundle and switch Claim.use between preauthorization and claim; keep careTeamSequence, diagnosisSequence, procedureSequence and informationSequence internally consistent. + - Always send both x-hcx-workflow_id and x-hcx-use_case, and persist them with the correlation ID and the case number. + - Attach every document the auth-requirements response listed (MAND codes) before submitting; the document list is per package, not static. + - Raise enhancements while the patient is admitted, not retrospectively at discharge (PAYR-1018 time limit expired). + - Persist preAuthRef from an approved or partially approved response; it is required at final claim. + - Implement v1/error and /v1/status so a preauth that never reached the payer is visible at the desk. + + ### Related scenario + + After the eligibility callback confirms cover for corneal grafting (SE012A) and lists the required documents, the hospital builds a Claim bundle with use preauthorization, ICD-10 H18.6, a total of 13700 INR and the investigation and consent attachments, and posts it to /v1/preauth/submit under workflow 12 with use_case New. NHCX returns 202. The payer queries under 24 asking for detailed ICPs; the hospital answers on the same endpoint under 19 with the same correlation ID. Approval arrives under 21 with preAuthRef PREAUTH-HP-2026-78901. Two days later the surgeon needs a higher bed category, so the hospital posts an enhancement under 13 with use_case Enhancement, and after discharge it moves to /v1/claim/submit. + + ### Specification + + Chapter [Preauthorisation request](/docs/nhcx/v1/reference/fhir/preauthorisation-request) of the NHCX integration specification. + + ### Also sent as pre-authorisation enhancement + + The same address, with other headers and body. + + Provider asks for more against an approved pre-authorisation, a longer stay or an added package, on the same endpoint and case number as the first request, under workflow 13 with x-hcx-use_case Enhancement. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxUseCase" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + examples: + v1_preauth_submit: + summary: Pre-authorisation submit + value: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + v1_preauth_enhancement: + summary: Pre-authorisation enhancement + value: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: NHCX returns HTTP 202 Accepted with a StatusSuccessResponse acknowledgement (entity_type preauth, protocol_status request.queued or request.dispatched). + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 19/03/2026 11:46:35:120 + api_call_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + correlation_id: 11223344-5566-7788-99aa-bbccddeeff00 + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" + /internal/v1/preauth/submit: + post: + operationId: preauth_internal_v1_preauth_submit + x-abdm-use-case: Adapter + tags: + - Adapter + summary: Pre-authorisation submit (internal) (adapter) + description: |- + Internal twin of /v1/preauth/submit (operationId preauthSubmitPostInternal) with the same JWEPayload body and response set. Exposed for the NHCX adapter deployment rather than for direct integration. + + ### Business purpose + + The preauth service publishes its submit operation twice, at /v1 and at /internal/v1, with identical descriptions, request bodies and response sets. Only the operationId differs, by an Internal suffix. The /internal prefix is the route the NHCX adapter sits on: a participant running the adapter alongside its own system calls the internal path, and the adapter handles the encryption, headers and gateway hop. A participant integrating directly against NHCX calls the public path and does that work itself. No separate business purpose is documented for the internal route beyond that. + + ### When to use + + Use it only when you are running the NHCX adapter and it is configured to serve this path; otherwise call /v1/preauth/submit. Everything else is unchanged: the same JWEPayload body, the same x-hcx-* protected header, the same workflow discriminators and the same asynchronous callback. The specs do not document what makes the internal variant different beyond the operationId, so treat it as a mirror of the public path and confirm with NHCX onboarding before pointing production at it. + + ### Preconditions + + Identical to /v1/preauth/submit. Nothing additional is documented for the internal route, beyond an adapter deployment that actually serves the /internal prefix. + + ### Postconditions + + NHCX returns HTTP 202 Accepted with a StatusSuccessResponse acknowledgement (entity_type preauth, protocol_status request.queued or request.dispatched). This is not an adjudication; the gateway validates structure and open headers, then forwards asynchronously. The payer may first acknowledge under workflow 20, then answer on /v1/preauth/on_submit with a ClaimResponseBundle: 21 approved (preAuthRef issued), 23 rejected, 24 queried, 22 enhancement approved or 241 enhancement queried, 261, 262 or 263 for discharge. Protocol failures return a ProtocolResponse with x-hcx-error_details. Errors marked 400, 404 and 500 carry the same schema. + + ### Common mistakes + + - Assuming a different body or different semantics for the internal route; the spec gives it the same JWEPayload body and the same responses. + - Calling it without an adapter deployment behind it and then chasing a 404. + - Every pitfall of the public path applies unchanged. + + ### Best practices + + - Default to /v1/preauth/submit and keep the internal path as a configuration option only. + - Share one client implementation across both paths, so header hygiene, encryption and correlation handling cannot diverge between them. + - Record which variant carried each correlation ID, for support conversations. + + ### Related scenario + + A vendor reading the preauth OpenAPI document sees preauthSubmitPostInternal sitting beside its public twin and asks which one to build against. The answer is the public path, unless NHCX onboarding has given them an adapter deployment, in which case the adapter takes the bundle unencrypted on the internal path and does the JWE and the gateway hop for them. The end-to-end flow is identical either way. + + ### Specification + + Chapter [Preauthorisation request](/docs/nhcx/v1/reference/fhir/preauthorisation-request) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxUseCase" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: NHCX returns HTTP 202 Accepted with a StatusSuccessResponse acknowledgement (entity_type preauth, protocol_status request.queued or request.dispatched). + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 19/03/2026 11:46:35:120 + api_call_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + correlation_id: 11223344-5566-7788-99aa-bbccddeeff00 + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" + /v1/preauth/on_submit: + post: + operationId: preauth_v1_preauth_on_submit + x-abdm-use-case: Pre-authorisation + tags: + - Pre-authorisation + summary: Pre-authorisation callback + description: |- + Payer returns the ClaimResponseBundle for a pre-authorisation (approved, partially approved, queried or rejected) to the provider via NHCX. + + ### Business purpose + + This callback carries the payer's decision on a preauth. For the hospital it is the moment the money question is settled: an approval with a preAuthRef lets treatment proceed under a binding commitment, a partial approval tells the desk the amount was capped and why, a query says what evidence is missing, and a rejection closes the request. For the payer it is the channel through which adjudication results, package-rate caps and query text reach the provider in a structured, auditable form. + + ### When to use + + Called by the payer or its TPA after adjudicating a /v1/preauth/submit message, using the same correlation ID. The x-hcx-workflow_id identifies the outcome: 20 received, 21 approved, 23 rejected, 24 queried, 22 enhancement approved, 241 enhancement queried, 231 enhancement denied, 261, 262 and 263 for discharge. The NHA status sheet frames approvals and rejections as response.complete and queries (24, 241) as request.initiated because the payer is authoring a new request to the provider. ClaimResponse.outcome is complete for approved and rejected, partial for partially approved and queried; adjudication[0].reason.coding.code (approved, queried, cancelled) is the real discriminator. + + ### Preconditions + + - A preauth request with this correlation ID exists in NHCX and has not been deleted after failed deliveries (NHCX-1010 otherwise). + - The payer holds a valid Bearer token and the provider's certificate, and encrypts the ClaimResponseBundle for the provider. + - x-hcx-correlation_id is echoed from the request; x-hcx-api_call_id is new; sender and recipient codes are swapped. + - x-hcx-status is response.complete, response.partial or response.error; on error the body is a ProtocolResponse with x-hcx-error_details mandatory. + - preAuthRef is populated on approval and partial approval; processNote explains any reduction; clinical or business error detail stays inside the encrypted resource. + + ### Postconditions + + HTTP 202 Accepted with the StatusSuccessResponse acknowledgement (entity_type preauth) from NHCX, then asynchronous delivery to the provider's registered /v1/preauth/on_submit. The provider must acknowledge with 202 within 30 seconds; otherwise NHCX retries, and after five failures the request is deleted and the sender is notified via v1/error. On an approved or partially approved response the provider persists preAuthRef and may treat; on a query the conversation stays open awaiting 19, 131 or 121; on a rejection the preauth is closed and a new case number is needed to proceed. + + ### Common mistakes + + - Provider side: branching on outcome alone; complete plus reason cancelled is a rejection, complete plus approved is an approval. + - Provider side: treating the pipe-delimited query audit trail (USER~datetime~type~comment~trust) as a FHIR coding and failing to parse it. + - Provider side: returning 200 or a bare body instead of the 202 acceptance shape, which triggers retries and eventual deletion. + - Payer side: minting a new correlation ID, or sending a JWEPayloadResponse where a ProtocolResponse is expected (PAYR-1517). + - Payer side: using the superseded status spelling; the sources show both response.fail and response.error for failures, and the technical specification vocabulary is response.error. + - Both sides: relying on the position of ClaimResponse.total[] entries rather than total[].category.coding.code. + + ### Best practices + + - Provider: acknowledge first, adjudicate later; queue the decrypt and state change and be idempotent on correlation ID. + - Provider: branch on x-hcx-workflow_id, ClaimResponse.outcome and adjudication[0].reason.coding.code together, and surface processNote text to the desk. + - Provider: persist preAuthRef and the payer identifier (identifier[0].value) against the case for the claim stage. + - Payer: fill disposition, adjudication categories (submitted, eligible, copay, benefit) and processNote so a partial approval is explainable. + - Payer: put protocol errors in x-hcx-error_details with catalogued codes and business errors inside the encrypted ClaimResponse. + - Provider: expose the callback on a domain name on an India-based server and whitelist the NHCX NAT IPs. + + ### Related scenario + + The insurer's adjudication engine reviews a corneal grafting preauth submitted for 25000 INR and caps it at the package rate of 13700 INR. Its bridge builds a ClaimResponseBundle with outcome partial, preAuthRef PREAUTH-HP-2026-78902 and a processNote explaining the cap, sets x-hcx-workflow_id 21 and x-hcx-status response.complete with the request's correlation ID, encrypts it for the hospital and posts to /v1/preauth/on_submit. NHCX acknowledges with 202 and delivers it to the hospital, whose callback acknowledges inside 30 seconds and shows the desk the reduced amount and reason. Treatment proceeds, and after discharge the hospital submits the final claim on /v1/claim/submit referencing that preAuthRef. + + ### Specification + + Chapter [Preauthorisation response](/docs/nhcx/v1/reference/fhir/preauthorisation-response) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "21" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxDebugFlag" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: HTTP 202 Accepted with the StatusSuccessResponse acknowledgement (entity_type preauth) from NHCX, then asynchronous delivery to the provider's registered /v1/preauth/on_submit. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 19/03/2026 11:46:35:120 + api_call_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + correlation_id: 11223344-5566-7788-99aa-bbccddeeff00 + result: + sender_code: 1518@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.dispatched + error: + code: "" + message: "" + /internal/v1/preauth/on_submit: + post: + operationId: preauth_internal_v1_preauth_on_submit + x-abdm-use-case: Adapter + tags: + - Adapter + summary: Pre-authorisation callback (internal) (adapter) + description: |- + Internal twin of /v1/preauth/on_submit (operationId preauthOnSubmitPostInternal) with the same JWEPayload body and response set. Exposed for the NHCX adapter deployment rather than for direct integration. + + ### Business purpose + + The preauth service publishes its on_submit operation twice, at /v1 and at /internal/v1, with identical descriptions, request bodies and response sets. Only the operationId differs, by an Internal suffix. The /internal prefix is the route the NHCX adapter sits on: a participant running the adapter alongside its own system calls the internal path, and the adapter handles the encryption, headers and gateway hop. A participant integrating directly against NHCX calls the public path and does that work itself. No separate business purpose is documented for the internal route beyond that. + + ### When to use + + Use it only when you are running the NHCX adapter and it is configured to serve this path; otherwise call /v1/preauth/on_submit. Everything else is unchanged: the same JWEPayload body, the same x-hcx-* protected header, the same workflow discriminators and the same asynchronous callback. The specs do not document what makes the internal variant different beyond the operationId, so treat it as a mirror of the public path and confirm with NHCX onboarding before pointing production at it. + + ### Preconditions + + Identical to /v1/preauth/on_submit. Nothing additional is documented for the internal route, beyond an adapter deployment that actually serves the /internal prefix. + + ### Postconditions + + HTTP 202 Accepted with the StatusSuccessResponse acknowledgement (entity_type preauth) from NHCX, then asynchronous delivery to the provider's registered /v1/preauth/on_submit. The provider must acknowledge with 202 within 30 seconds; otherwise NHCX retries, and after five failures the request is deleted and the sender is notified via v1/error. On an approved or partially approved response the provider persists preAuthRef and may treat; on a query the conversation stays open awaiting 19, 131 or 121; on a rejection the preauth is closed and a new case number is needed to proceed. + + ### Common mistakes + + - Assuming a different body or different semantics for the internal route; the spec gives it the same JWEPayload body and the same responses. + - Calling it without an adapter deployment behind it and then chasing a 404. + - Every pitfall of the public path applies unchanged. + + ### Best practices + + - Default to /v1/preauth/on_submit and keep the internal path as a configuration option only. + - Share one client implementation across both paths, so header hygiene, encryption and correlation handling cannot diverge between them. + - Record which variant carried each correlation ID, for support conversations. + + ### Related scenario + + A vendor reading the preauth OpenAPI document sees preauthOnSubmitPostInternal sitting beside its public twin and asks which one to build against. The answer is the public path, unless NHCX onboarding has given them an adapter deployment, in which case the adapter takes the bundle unencrypted on the internal path and does the JWE and the gateway hop for them. The end-to-end flow is identical either way. + + ### Specification + + Chapter [Preauthorisation response](/docs/nhcx/v1/reference/fhir/preauthorisation-response) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "21" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxDebugFlag" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: HTTP 202 Accepted with the StatusSuccessResponse acknowledgement (entity_type preauth) from NHCX, then asynchronous delivery to the provider's registered /v1/preauth/on_submit. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 19/03/2026 11:46:35:120 + api_call_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + correlation_id: 11223344-5566-7788-99aa-bbccddeeff00 + result: + sender_code: 1518@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.dispatched + error: + code: "" + message: "" +webhooks: + v1_preauth_submit: + post: + operationId: preauth_webhook_v1_preauth_submit + x-abdm-triggered-by: preauth_v1_preauth_submit + x-abdm-use-case: Webhooks + tags: + - Pre-authorisation + summary: Receive pre-authorisation submit + description: |- + Hosted by the payer. The exchange posts this message to the `endpoint_url` you registered, at `/v1/preauth/submit`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Provider submits, resubmits, enhances or answers a query on a pre-authorisation Claim bundle (Claim.use preauthorization); NHCX routes it to the payer. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxWorkflowId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxUseCase" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + examples: + v1_preauth_submit: + summary: Pre-authorisation submit + value: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + v1_preauth_enhancement: + summary: Pre-authorisation enhancement + value: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" + v1_preauth_on_submit: + post: + operationId: preauth_webhook_v1_preauth_on_submit + x-abdm-triggered-by: preauth_v1_preauth_on_submit + x-abdm-use-case: Webhooks + tags: + - Pre-authorisation + summary: Receive pre-authorisation callback + description: |- + Hosted by the provider. The exchange posts this message to the `endpoint_url` you registered, at `/v1/preauth/on_submit`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Payer returns the ClaimResponseBundle for a pre-authorisation (approved, partially approved, queried or rejected) to the provider via NHCX. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "21" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + - $ref: "#/components/parameters/XHcxDebugFlag" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + description: "On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value." + parameters: + BearerAuth: + name: bearer_auth + in: header + required: true + description: It is `bearer_auth`, not `Authorization`, on NHCX's own endpoints. + schema: + type: string + example: Bearer + XHcxSenderCode: + name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + XHcxRecipientCode: + name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + XHcxApiCallId: + name: x-hcx-api_call_id + in: header + required: true + description: Fresh on every message, including responses. Mandatory on the envelope. + schema: + type: string + example: + XHcxRequestId: + name: x-hcx-request_id + in: header + required: false + description: One per originating request. The Open Protocol page marks it Mandatory; the Technical Specifications page marks it Optional. Optional on the envelope. + schema: + type: string + example: + XHcxCorrelationId: + name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + XHcxWorkflowId: + name: x-hcx-workflow_id + in: header + required: false + description: Which step, or which case. See the two readings below. Optional on the envelope. + schema: + type: string + example: "12" + XHcxTimestamp: + name: x-hcx-timestamp + in: header + required: true + description: See the format note below. Mandatory on the envelope. + schema: + type: string + example: + XHcxStatus: + name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: request.initiated + XHcxBenAbhaId: + name: x-hcx-ben-abha-id + in: header + required: true + description: The beneficiary's ABHA number. Mandatory on every exchange, including those with no beneficiary in the payload. Mandatory on the envelope. + schema: + type: string + example: "91711234567890" + XHcxUseCase: + name: x-hcx-use_case + in: header + required: false + description: Values differ by exchange, see below. Optional on the envelope. + schema: + type: string + example: New + XHcxDebugFlag: + name: x-hcx-debug_flag + in: header + required: false + description: "`Error`, `Info` or `Debug`. A server may ignore it. Optional on the envelope." + schema: + type: string + example: INFO +x-abdm-errors: + notes: "Codes any exchange call can meet are recorded once, in the [Other](/docs/nhcx/v1/api/other) specification: the gateway's NHCX- codes, the standard payer codes, and the reference payer's structure and transport codes. The reference payer's other codes sit with the exchange they reject: coverage eligibility, preauthorisation, claim and insurance plan. [Reading error codes](/docs/nhcx/v1/reference/error-code-guide) explains the code spaces." +x-abdm-errors-reference-payer: + source: Reference payer codes, PAYR-1001 to PAYR-1520. Sent by the PMJAY reference implementation; they arrive inside the sealed response. + codes: + - code: PAYR-1201 + message: Invalid claimed amount received for case number %s. Please try again with a valid claim amount. Claimed amount should be greater than INR 0 and less than equals to balance wallet amount of the beneficiary. + action: "" + - code: PAYR-1202 + message: Invalid speciality code received as %s for item %s for case number %s. Please try again with valid data. Speciality code is available as the code of the category for specific cost of plan in isurance plan. + action: "" + - code: PAYR-1203 + message: Invalid speciality description received as %s for procedure %s for case number %s. Please try again with valid data. Speciality description is available as the display of the category for specific cost of plan in isurance plan. + action: "" + - code: PAYR-1204 + message: Invalid procedure code received as %s for case number %s. Please try again with valid data. Procedure code is available as the code of the type for benefit component, of specific cost, of plan in isurance plan. + action: "" + - code: PAYR-1205 + message: Invalid procedure description received as %s for procedure %s for case number %s. Please try again with valid data. Procedure description is available as the display of the type for benefit component, of specific cost, of plan in isurance plan. + action: "" + - code: PAYR-1206 + message: Invalid procedure type received as %s for procedure %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1207 + message: Invalid procedure factor received as %s for procedure %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1208 + message: Invalid procedure quantity received as %s for item %s for case number %s. Please try again with valid data. Item quantity should be greater than 1. + action: "" + - code: PAYR-1209 + message: Invalid net amount received as INR %s for item %s for case number %s. Please try again with valid data. Item net amount should be greater than INR 0. + action: "" + - code: PAYR-1210 + message: Invalid procedure status received as %s for procedure %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1211 + message: Requested beneficary details and careplan details does not match any criteria for processing the case at this hospital. Please try again with valid data. + action: "" + - code: PAYR-1212 + message: No previous preauthorization approved record found for the enhancement request for case number %s. Hence request will not be processed further. Please initiate a new preauthorization. + action: "" + - code: PAYR-1213 + message: Existing case in progress found for case number %s. Hence enhancement request will not be accepted. Please try after the adjudication is completed for the current case. + action: "" + - code: PAYR-1214 + message: No previous preauthorization approved record found for the resubmission request for case number %s. Hence request will not be processed further. Please initiate a new preauthorization. + action: "" + - code: PAYR-1215 + message: Existing case in progress found for case number %s. Hence resubmission request will not be accepted. Please try after the adjudication is completed for the current case. + action: "" + - code: PAYR-1216 + message: Existing case in progress found for case number %s. Hence new preauthorization request will not be accepted. + action: "" + - code: PAYR-1217 + message: Previous preauthorization approved record found for the new preauthorization request for case number %s. Hence request will not be processed further. Please initiate enhancement/resubmission. + action: "" + - code: PAYR-1218 + message: No queried preauthorization record found for the query update request for case number %s. Hence request will not be processed further. + action: "" + - code: PAYR-1219 + message: Case number %s is not queried. Hence query updation request will not be processed further. + action: "" + - code: PAYR-1220 + message: Invalid investigation description received as %s for investigation code %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1221 + message: Invalid investigation code received as %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1222 + message: Invalid investigation status received as %s for investigation %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1223 + message: Invalid investigation attachment received for investigation %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1224 + message: Invalid implant description received as %s for implant code %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1225 + message: Invalid implant code received as %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1226 + message: Invalid implant status received as %s for investigation %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1227 + message: Invalid implant attachment received for investigation %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1228 + message: Invalid implant quantity received as %s for implant %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1229 + message: Invalid implant net amount received as INR %s for implant %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1230 + message: Invalid implant unit price received as INR %s for implant %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1231 + message: Claim has already been raised for case number %s. Hence preauthorization request will not be accepted. + action: "" + - code: PAYR-1232 + message: No investigation found for case number %s. Investigation details are mandatory for private hospitals. + action: "" + - code: PAYR-1233 + message: Patient liability is not aplicable for the hospital and beneficiary do not have enough wallet balance with deficit amount INR %s for the requested preauthorization for case number %s. + action: "" + - code: PAYR-1234 + message: No preauthorization record found for case number %s. Hence the request will not be processed. + action: "" + - code: PAYR-1235 + message: Insufficient wallet balance. Hence the request will not be processed. + action: "" + - code: PAYR-1236 + message: Invalid claim type (in-patient/out-patient) received. Hence the request will not be processed. + action: "" + - code: PAYR-1237 + message: Beneficiary is having an active preauthorization request at %s. Hence the request will not be processed. Kindly inform %s to cancel the active preauthorization request or raise a claim to proceed with current preauthorization. + action: "" + - code: PAYR-1238 + message: Beneficiary is having an active preauthorization request at this hospital with reference number %s. Hence the request will not be processed. Kindly cancel the active preauthorization request or raise a claim to proceed with current preauthorization. + action: "" + - code: PAYR-1239 + message: Hospital configuration not found. Please contact support team. + action: "" + - code: PAYR-1240 + message: No details found for the requested procedures in the system. + action: "" + - code: PAYR-1241 + message: Invalid registration date received for case number %s. Hence the request will not be processed. + action: "" + - code: PAYR-1242 + message: Invalid registration date format received for case number %s. Hence the request will not be processed. + action: "" + - code: PAYR-1243 + message: Invalid admission date received for case number %s. Hence the request will not be processed. + action: "" + - code: PAYR-1244 + message: Invalid admission date format received for case number %s. Hence the request will not be processed. + action: "" + - code: PAYR-1245 + message: Rule failure. + action: The SHA HP sandbox sent this code as "Only one conservative procedure can be booked for a case", on an enhancement that added a second Conservative package. + - code: PAYR-1246 + message: Invalid payer id received as %s. Please try again with valid payer id. + action: "" + - code: PAYR-1247 + message: Payer details for payer id %s is not received from HCX for the request. Hence the request will not be processed. + action: "" + - code: PAYR-1248 + message: Invalid item code received as %s for item sequence %s case number %s. Please try again with valid data. + action: "" + - code: PAYR-1249 + message: Invalid item sequence received as %s for case number %s. Please try again with valid data. + action: "" + - code: PAYR-1250 + message: Requested policy %s is not listed. Please try again with valid policy code. + action: "" + - code: PAYR-1251 + message: No billable treatment plan received for case number %s. Please try again with valid treatment plan data. + action: "" + - code: PAYR-1252 + message: Case number %s is not in active preauthorization state with the current status of the case with the payer system is %s. Hence the preauthorization can not be cancelled. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled. + action: "" + - code: PAYR-1253 + message: Case number %s is already cancelled. Hence the preauthorization can not be cancelled again. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled. + action: "" + - code: PAYR-1254 + message: Response for STG Questionnaire id %s is mandatory for procedure code %s. Hence the preauthorization request will not be processed as the questionnaire response is not received for procedure code. + action: "" + - code: PAYR-1255 + message: Case number %s is already cancelled. Hence no preauthorization request will be accepted for this case number. New preauthorization request needs to be raised with new case/reference number to proceed further. + action: "" + - code: PAYR-1256 + message: Response for Authentication Consent Questionnaire is missing for case number %s. This must be sent if the biometric authentication for patient is not available. For new preauthorization request, either biometric authentication for patient or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. Please adhere to the response of the coverage eligibility for auth-requirements purpose to check the mandatory documents to be attached with the request + action: "" + - code: PAYR-1257 + message: Payment is initiated for case number %s. Hence the preauthorization can not be cancelled again. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled + action: "" + - code: PAYR-1258 + message: Payment is accomplished/cleared for case number %s. Hence the preauthorization can not be cancelled again. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled + action: "" + - code: PAYR-1259 + message: DOB is missing for new born for the case number (%s) with correlation id as (%s) at (%s) + action: "" + - code: PAYR-1260 + message: DOB cannot be a future date for the case number (%s) with correlation id as (%s) at (%s) + action: "" + - code: PAYR-1261 + message: Invalid new born details for the case number (%s) with correlation id as (%s) at (%s) + action: "" + - code: PAYR-1262 + message: Gender is mandatory for the new born beneficiary + action: "" + - code: PAYR-1263 + message: Documents are mandatory for the new born beneficiary + action: "" + - code: PAYR-1264 + message: Documents are mandatory for the new born beneficiary + action: "" + - code: PAYR-1265 + message: Documents are mandatory for the new born beneficiary + action: "" + - code: PAYR-1266 + message: Documents are mandatory for the new born beneficiary + action: "" + - code: PAYR-1267 + message: Beneficiary is having an active preauthorization request for new born case at this hospital with reference number %s. Hence the request will not be processed. Kindly cancel the active preauthorization request or raise a claim to proceed with current preauthorization + action: "" + - code: PAYR-1268 + message: Beneficiary is having an active preauthorization request for new born case at %s. Hence the request will not be processed. Kindly inform %s to cancel the active preauthorization request or raise a claim to proceed with current preauthorization + action: "" + - code: PAYR-1269 + message: Date of birth received for new born beneficiary exceeds 6 years before the current date. New born cases can be raised only for the beneficiary whose date of birth is within 6 years of current date + action: "" + - code: PAYR-1270 + message: Item LM100 is not applicable for preauthorization request. This item is expected/mandated only during claim submission if the patient is discharged after/during surgery under LAMA/DAMA category for PMJAY cases. + action: "" + - code: PAYR-1271 + message: No value received for link id %s for Authentication Consent Questionnaire for preauthorization request. This must be sent if the biometric authentication for patient is not available. For new preauthorization request, either biometric authentication for patient or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. Please adhere to the response of the coverage eligibility for auth-requirements purpose to check the mandatory documents to be attached with the request. + action: "" + - code: PAYR-1272 + message: Invalid biometric user token received. Please try again with valid valid biometric details of the beneficiary. For any issues with biometric, please try with Authentication Consent Questionnaire, details for which has been received in response for coverage eligibliity auth-requirements. + action: "" + - code: PAYR-1273 + message: No questionnaire found for the received selection. Please validate the questionnaire url from insurance plan/coverage auth-requirements response. + action: "" diff --git a/catalogue/openapi/nhcx/v1/nhcx-predetermination.yaml b/catalogue/openapi/nhcx/v1/nhcx-predetermination.yaml new file mode 100644 index 000000000..08cc07081 --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-predetermination.yaml @@ -0,0 +1,474 @@ +# NHCX predetermination, from the NHCX package's Bruno folder apis/04-predetermination. +# +# Written by the package's system/build-ekadocs.mjs (make ekadocs); change the .bru +# requests there and port again rather than editing this file. +# +# Rules this file follows: catalogue/openapi/CONVENTIONS.md +openapi: 3.1.1 +info: + x-portal: + module: predetermination + label: Predetermination + position: 4 + title: NHCX predetermination + summary: A hospital planning a treatment can learn the benefit a payer would approve for it before the patient is admitted, and plan the admission and the patient's share of the cost around the answer. + description: |- + The Predetermination calls on the National Health Claims Exchange (NHCX): 2 operations, and 2 callbacks you host. + + A hospital planning a treatment can learn the benefit a payer would approve for it before the patient is admitted, and plan the admission and the patient's share of the cost around the answer. + + Guides that use these calls: [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search). + + Production address for the NHCX exchange: shared by NHA after sandbox exit. + version: nhcx-v1 + license: + name: MIT + identifier: MIT + contact: + name: NHCX sandbox + url: https://hcxsbx.abdm.gov.in + x-abdm-gateway: nhcx + x-abdm-module: predetermination + x-abdm-phase: 1 + x-abdm-roles: + - provider + - payer +x-abdm-sources: + - file: nhcx-package/apis/04-predetermination + role: upstream + hash: sha256:da5c7e0c3ac3d14b8cc2d9fec234a206902baec3deda955354e07fd1172554ad + note: The package's Bruno collection, one request per operation. + - file: nhcx-package/baseurl.yaml + role: upstream + hash: sha256:47d8412abbfc53b1e1038410e7980eee029d7b1be5082f4ae6c1d4e16ae0dd0f + note: The sandbox and production hosts. +servers: + - url: https://apisbx.abdm.gov.in/hcx + description: Sandbox, NHCX exchange. +tags: + - name: Predetermination + description: A hospital planning a treatment can learn the benefit a payer would approve for it before the patient is admitted, and plan the admission and the patient's share of the cost around the answer. +security: + - bearerAuth: [] +paths: + /v1/predetermination/submit: + post: + operationId: predetermination_v1_predetermination_submit + x-abdm-use-case: Predetermination + tags: + - Predetermination + summary: Predetermination request + description: |- + Provider asks the payer what it would approve for a proposed treatment before committing to a pre-authorisation. The bundle has the pre-authorisation's shape with `Claim.use` `predetermination`. This is use case B9. + + ### Business purpose + + A hospital planning a treatment can learn the benefit a payer would approve for it before the patient is admitted, and plan the admission and the patient's share of the cost around the answer. The payer gives an estimate only. Nothing is reserved, and the treatment still needs a pre-authorisation when it happens. + + ### When to use + + Before a planned admission, with a payer that has confirmed it supports predetermination. The exchange is specified but seldom used, so confirm support with the payer before building it. Send `x-hcx-status` `request.initiated` with a new correlation ID. The payer's answer, use case C11, arrives on `/v1/predetermination/on_submit`. + + ### Preconditions + + - The payer has confirmed that it answers predetermination requests. + - The bundle carries `Claim`, `Patient`, the provider and payer `Organization`, `Coverage`, `Practitioner` and `Procedure`, shaped as in the pre-authorisation chapters. + - `Claim.use` is `predetermination`, and `Claim.identifier[0].value` carries your predetermination reference. + - A valid session token, the recipient's certificate, and the bundle sealed as a JWE in `payload`, with the protected headers mirrored onto the wire. + - A fresh `x-hcx-api_call_id` and a new `x-hcx-correlation_id` for the cycle. + + ### Postconditions + + NHCX returns HTTP 202 with the acknowledgement and forwards the request asynchronously. The payer answers on `/v1/predetermination/on_submit` with a `ClaimResponse` whose `use` is `predetermination`, carrying the estimated approved benefit in `ClaimResponse.total` under category `benefit`. Nothing is reserved against the policy. + + ### Common mistakes + + - Building the exchange before the payer has confirmed it supports it. + - Leaving `Claim.use` as `preauthorization` when reusing the pre-authorisation builder. + - Treating the estimate as an approval and skipping the pre-authorisation at admission. + - Reusing a correlation ID from an earlier cycle, which NHCX refuses as a duplicate (`NHCX-1006`). + + ### Best practices + + - Reuse the pre-authorisation bundle builder and change only `Claim.use` and the reference. + - Store the answer against the planned case, labelled as an estimate. + - Key the request on its correlation ID, and host `/v1/error` so an undelivered request does not look like one still under review. + + ### Related scenario + + A hospital planning an elective admission asks the payer what it would approve for procedure `MG004A`. It builds the pre-authorisation bundle with `Claim.use` `predetermination` and reference `PD0000000001`, posts it here with a new correlation ID, and gets 202 back. The payer's `ClaimResponse` arrives later on `/v1/predetermination/on_submit` with an estimated benefit of 15500.00. The desk records it as an estimate, and raises a pre-authorisation when the patient is admitted. + + ### Specification + + Chapter [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: + responses: + "202": + description: NHCX returns HTTP 202 with the acknowledgement and forwards the request asynchronously. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 19/03/2026 11:46:35:120 + api_call_id: "{{$guid}}" + correlation_id: "{{correlationId}}" + error: + code: "" + message: "" + /v1/predetermination/on_submit: + post: + operationId: predetermination_v1_predetermination_on_submit + x-abdm-use-case: Predetermination + tags: + - Predetermination + summary: Predetermination callback + description: |- + Payer returns its estimate for a predetermination request to the provider: a `ClaimResponse` with `use` `predetermination` and the benefit it would approve. This is use case C11. + + ### Business purpose + + The callback carries the payer's view of what it would pay for a proposed treatment, so the hospital can plan the admission and counsel the patient before any money is committed. For the payer it is the record of the estimate it gave. + + ### When to use + + Called by the payer after it has assessed a request received on `/v1/predetermination/submit`, echoing that request's correlation ID with `x-hcx-status` `response.complete`. Only payers that have agreed to support predetermination send it. + + ### Preconditions + + - A predetermination request with this correlation ID exists in NHCX. A callback for an unknown one is refused with `NHCX-1010`. + - The bundle carries `ClaimResponse`, `Patient`, the payer and provider `Organization` and `Coverage`. + - `ClaimResponse.use` is `predetermination`, and the estimated approved benefit is in `ClaimResponse.total` under category `benefit`. + - The payer holds a valid session token and the provider's certificate, and seals the bundle for the provider. + - `x-hcx-correlation_id` echoes the request, `x-hcx-api_call_id` is new, and the sender and recipient codes are swapped. + + ### Postconditions + + NHCX returns HTTP 202 with the acknowledgement and delivers the callback to the provider, which must answer 202 with a receipt within 30 seconds. A delivery that is not acknowledged is retried five times, after which the exchange retires the correlation ID and reports the failure on `/v1/error`. The estimate reserves nothing against the policy. + + ### Common mistakes + + - Minting a new correlation ID instead of echoing the request's. + - Reading the estimate as an approval on the provider side. + - The provider answering with anything other than 202 and the receipt, which triggers retries. + + ### Best practices + + - Provider: acknowledge first, then decrypt, then store the estimate against the planned case. + - Provider: make the handler idempotent, since a missed receipt means the same message arrives again with the same `x-hcx-api_call_id`. + - Payer: explain the estimate in `ClaimResponse.disposition`, as the reference sample does. + + ### Related scenario + + A payer receives a predetermination request for procedure `MG004A` under reference `PD0000000001`. Its adjudicator assesses the proposed treatment, and the payer posts a `ClaimResponse` with `use` `predetermination`, outcome `complete` and a benefit total of 15500.00 to this endpoint on the request's correlation ID. The hospital's callback answers 202 within 30 seconds and files the figure as an estimate for the planned admission. + + ### Specification + + Chapter [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: + responses: + "202": + description: NHCX returns HTTP 202 with the acknowledgement and delivers the callback to the provider, which must answer 202 with a receipt within 30 seconds. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 19/03/2026 11:46:35:120 + api_call_id: "{{$guid}}" + correlation_id: "{{correlationId}}" + error: + code: "" + message: "" +webhooks: + v1_predetermination_submit: + post: + operationId: predetermination_webhook_v1_predetermination_submit + x-abdm-triggered-by: predetermination_v1_predetermination_submit + x-abdm-use-case: Webhooks + tags: + - Predetermination + summary: Receive predetermination request + description: |- + Hosted by the payer. The exchange posts this message to the `endpoint_url` you registered, at `/v1/predetermination/submit`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Provider asks the payer what it would approve for a proposed treatment before committing to a pre-authorisation. The bundle has the pre-authorisation's shape with `Claim.use` `predetermination`. This is use case B9. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" + v1_predetermination_on_submit: + post: + operationId: predetermination_webhook_v1_predetermination_on_submit + x-abdm-triggered-by: predetermination_v1_predetermination_on_submit + x-abdm-use-case: Webhooks + tags: + - Predetermination + summary: Receive predetermination callback + description: |- + Hosted by the provider. The exchange posts this message to the `endpoint_url` you registered, at `/v1/predetermination/on_submit`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Payer returns its estimate for a predetermination request to the provider: a `ClaimResponse` with `use` `predetermination` and the benefit it would approve. This is use case C11. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + description: "On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value." + parameters: + BearerAuth: + name: bearer_auth + in: header + required: true + description: It is `bearer_auth`, not `Authorization`, on NHCX's own endpoints. + schema: + type: string + example: Bearer + XHcxSenderCode: + name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: + XHcxRecipientCode: + name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: + XHcxApiCallId: + name: x-hcx-api_call_id + in: header + required: true + description: Fresh on every message, including responses. Mandatory on the envelope. + schema: + type: string + example: + XHcxCorrelationId: + name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + XHcxTimestamp: + name: x-hcx-timestamp + in: header + required: true + description: See the format note below. Mandatory on the envelope. + schema: + type: string + example: + XHcxStatus: + name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: request.initiated +x-abdm-errors: + notes: "Codes any exchange call can meet are recorded once, in the [Other](/docs/nhcx/v1/api/other) specification: the gateway's NHCX- codes, the standard payer codes, and the reference payer's structure and transport codes. The reference payer's other codes sit with the exchange they reject: coverage eligibility, preauthorisation, claim and insurance plan. [Reading error codes](/docs/nhcx/v1/reference/error-code-guide) explains the code spaces." diff --git a/catalogue/openapi/nhcx/v1/nhcx-registry.yaml b/catalogue/openapi/nhcx/v1/nhcx-registry.yaml new file mode 100644 index 000000000..845486ae2 --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-registry.yaml @@ -0,0 +1,2218 @@ +# NHCX participant registry, from the NHCX package's Bruno folder apis/10-registry. +# +# Written by the package's system/build-ekadocs.mjs (make ekadocs); change the .bru +# requests there and port again rather than editing this file. +# +# Rules this file follows: catalogue/openapi/CONVENTIONS.md +openapi: 3.1.1 +info: + x-portal: + module: registry + label: Participant registry + position: 10 + title: NHCX participant registry + summary: Every NHCX API call, whether a registry lookup, a certificate fetch or a claim submission, is rejected unless it carries a valid Bearer token, so this is the first call any integration makes and... + description: |- + The Participant registry calls on the National Health Claims Exchange (NHCX): 23 operations. + + Every NHCX API call, whether a registry lookup, a certificate fetch or a claim submission, is rejected unless it carries a valid Bearer token, so this is the first call any integration makes and the first thing to check when a working integration starts failing. + + Guides that use these calls: [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant), [Finding participants and policies](/docs/nhcx/v1/getting-started/finding-participants-and-policies), [Fetching a recipient certificate](/docs/nhcx/v1/getting-started/fetching-a-recipient-certificate). + version: nhcx-v1 + license: + name: MIT + identifier: MIT + contact: + name: NHCX sandbox + url: https://hcxsbx.abdm.gov.in + x-abdm-gateway: nhcx + x-abdm-module: registry + x-abdm-phase: 1 + x-abdm-roles: + - provider + - payer +x-abdm-sources: + - file: nhcx-package/apis/10-registry + role: upstream + hash: sha256:24a781be25eb64996be9a7eb98c1f941a9dc74485129740b4831edcc54c55df0 + note: The package's Bruno collection, one request per operation. + - file: nhcx-package/baseurl.yaml + role: upstream + hash: sha256:47d8412abbfc53b1e1038410e7980eee029d7b1be5082f4ae6c1d4e16ae0dd0f + note: The sandbox and production hosts. +servers: + - url: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice + description: Sandbox, Participant service. + - url: https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice + description: Production. +tags: + - name: Participant registry + description: Every NHCX API call, whether a registry lookup, a certificate fetch or a claim submission, is rejected unless it carries a valid Bearer token, so this is the first call any integration makes and the first thing to check when a working integration starts failing. +security: + - bearerAuth: [] +paths: + /get/session: + post: + operationId: registry_get_session + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Get session token + description: |- + Exchanges the participant's client_id and client_secret (OAuth 2.0 client credentials) for a Bearer access_token valid for 1200 seconds. + + ### Business purpose + + Every NHCX API call, whether a registry lookup, a certificate fetch or a claim submission, is rejected unless it carries a valid Bearer token, so this is the first call any integration makes and the first thing to check when a working integration starts failing. It answers the question of who is calling the gateway. It is deliberately separate from payload confidentiality: a request can be perfectly encrypted and still fail with 401, and vice versa. + + ### When to use + + Call it at start-up and whenever the cached token is close to expiry. The Integration Handbook documents it as POST /get/session on host apisbx.abdm.gov.in with Content-Type application/x-www-form-urlencoded and body client_id=&client_secret=&grant_type=client_credentials. The response carries access_token, expires_in 1200 and token_type Bearer. Both sandbox-exit checklists list /get/session as the auth-token API. Note that the FAQ instead lists https://dev.abdm.gov.in/api/hiecm/gateway/v3/sessions as the Session API, and the OpenAPI entry (operationId getSession) calls the operation internal and returns ParticipantSessionResponse with a single accessToken field; confirm the current host with your onboarding contact. There is no refresh token: renewal is simply another client-credentials call. + + ### Preconditions + + - client_id and client_secret issued at the end of onboarding; client_secret is generated by the NHCX instance, stored encrypted and never returned by any registry API, so a lost secret must be reissued. + - Credentials scoped to the right environment; sandbox credentials do not work against production and vice versa. + - Content-Type application/x-www-form-urlencoded with grant_type=client_credentials fixed; the two secrets are the only variables. + - No Bearer token is needed for this call itself. + + ### Postconditions + + HTTP 200 with { access_token, expires_in: 1200, token_type: Bearer }. The access_token is a JWT that should be treated as opaque; place it in the Authorization (bearer_auth) header as Bearer on every subsequent call. Its lifetime is 1200 seconds (20 minutes); after that any call returns 401. The OpenAPI schema names the field accessToken and omits expiry, so read whichever key is present and assume 1200 seconds when expires_in is absent. A 400 indicates a malformed body. Nothing asynchronous follows. + + ### Common mistakes + + - Not implementing automatic refresh, so calls that worked minutes ago start returning 401 or 401 Unauthorized - Sender is not authorized to execute the operation once 20 minutes pass. + - Sending the token without the Bearer prefix in bearer_auth, which also produces a plain 401. + - Using the wrong Content-Type (JSON instead of form-urlencoded), omitting grant_type=client_credentials, or misspelling a credential field, which yields 400. + - Minting a fresh token for every transaction instead of caching it. + - Continuing to use a cached client_secret after the instance rotated it; every token minted from the old secret stops working. + - Pairing a sandbox token with the production gateway. + + ### Best practices + + - Cache the token in memory keyed by environment and refresh proactively at roughly 80 to 90 percent of the lifetime computed from the expires_in actually received. + - Serialise refresh behind a lock so concurrent workers do not fire simultaneous token requests. + - On any 401, discard the cached token, mint a new one and replay the original request exactly once; if the second attempt also fails, stop and alert, since the credentials are wrong or revoked. + - Never log the access_token or client_secret; log the expiry timestamp instead. + - Store secrets so they can be rotated without a code deploy. + - The token is validated by ABDM, so a 401 on any NHCX call carries no hint that expiry is the cause; treat 401 as refresh-and-retry first. + + ### Related scenario + + At 09:00 a hospital's claims engine starts and POSTs its client_id and client_secret to /get/session, receiving an access_token with expires_in 1200. It caches the token and immediately calls /fetch/certs for the payer it will submit to. At 09:17 a background timer renews the token before the 20-minute mark, so the /v1/preauth/submit sent at 09:21 carries a fresh Bearer header. Later a worker receives a 401 after a network stall; it drops the cached token, calls /get/session once more, replays the request and succeeds. Had the second attempt also failed, the engine would have alerted operations rather than looping. + + ### Specification + + Chapter [Base URLs](/docs/nhcx/v1/getting-started/base-urls) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + _contentType: + type: string + client_id: + type: string + client_secret: + type: string + grant_type: + type: string + example: + _contentType: application/x-www-form-urlencoded + client_id: + client_secret: + grant_type: client_credentials + responses: + "200": + description: "HTTP 200 with { access_token, expires_in: 1200, token_type: Bearer }." + content: + application/json: + schema: + type: object + properties: + access_token: + type: string + expires_in: + type: integer + token_type: + type: string + example: + access_token: eyJhbGciOiJSUzI1NiIs... + expires_in: 1200 + token_type: Bearer + /participant/update: + post: + operationId: registry_participant_update + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Participant update (v1) + description: |- + Updates a participant's registry record; participant_code and roles are mandatory, every other field (certificate, endpoint, contacts, status) is optional. + + ### Business purpose + + Participant details change over the life of an integration: callback endpoints move, encryption certificates are rotated annually, contact numbers and payment details change. The registry is the source of truth that the gateway routes from, so those changes must land there, not just in the participant's own configuration. This v1 update lets an organisation amend any attribute of its full record in one synchronous call, and the sandbox onboarding document names it as the way to update the bridge URL, the encryption certificate or any other attribute. + + ### When to use + + Use it after registration whenever a registry attribute must change. The FAQ lists the sandbox Update Participant URL as https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/update, while production onboarding documents the narrower /v2/participant/update plus /update/validate for certificate and bridge changes. It is a plain JSON registry call outside the JWE protocol, with no workflow or x-hcx-status codes. For a certificate-only change without passcode validation, /v2/update/cert is the documented shortcut. + + ### Preconditions + + - The participant already exists and you hold its participant_code. + - Bearer token with the Bearer prefix in bearer_auth, plus Accept and Content-Type: application/json. + - Body per ParticipantUpdateBody: participant_code and roles are the only required fields; participant_name, scheme_code, linked_registry_codes, address, contact fields, status, signing_cert_path, encryption_cert, endpoint_url and payment_details are optional. + - If updating encryption_cert, the new certificate is Base64-encoded and its private key is already deployed on the callback host. + - Linked registry codes must validate. + + ### Postconditions + + HTTP 200 with a string body (the OpenAPI declares string; the sandbox onboarding document shows the participant code echoed back, for example 100001@sbx). The registry record now carries the amended values, and because the gateway reads endpoint_url and encryption_cert from the registry on every leg, callback routing and counterparties' certificate fetches reflect the change from the next call onwards, subject to their 24-hour certificate cache. No asynchronous callback follows. Failures use the 400/404/500 ErrorResponse envelope. + + ### Common mistakes + + - Omitting roles on a partial update; it is required even when the change has nothing to do with roles, and its absence yields a 400. + - Copying v2 field names (participantcode, encryptioncert, endpointurl) into this snake_case body. + - Setting an endpoint_url that uses an IP address or port, or a server outside India, which breaks callback delivery at go-live. + - Rotating the certificate in the registry before the new private key is live on the callback host, so inbound callbacks can no longer be decrypted. + - Missing the Accept header or the Bearer prefix. + + ### Best practices + + - Read the current record with /participant/search first and send the full intended state, so a partial body does not unintentionally blank optional fields. + - Rotate certificates in two phases and keep the old private key for at least 24 hours, the documented certificate cache TTL. + - Confirm callback reachability (domain name, India-based host, NAT IPs 3.109.99.210, 13.126.152.0 and 13.200.129.223 whitelisted) before pointing endpoint_url at a new host. + - Log the change with who requested it; registry changes affect where encrypted health data is delivered. + + ### Related scenario + + A hospital migrates its claims callback service to a new domain. Before touching the registry the team deploys the service, verifies the NHCX NAT IPs are whitelisted and copies the existing PKCS8 private key across. They fetch a Bearer token via /get/session, read the current record with /participant/search, and call /participant/update with participant_code, roles and the new endpoint_url. The registry returns 200. The next /v1/preauth/on_submit callback from the payer arrives at the new domain and is acknowledged with 202 within 30 seconds. + + ### Specification + + Chapter [Your certificate](/docs/nhcx/v1/getting-started/your-certificate) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + participant_code: + type: string + participant_name: + type: string + scheme_code: + type: string + roles: + type: array + items: + type: string + primaryEmail: + type: string + phone: + type: array + items: + type: string + primaryMobile: + type: string + endpoint_url: + type: string + signing_cert_path: + type: string + encryption_cert: + type: string + example: + participant_code: + participant_name: Test Hospital + scheme_code: PMJAY + roles: + - "10001" + primaryEmail: integration@hospital.example + phone: + - "01123456789" + primaryMobile: "9876543210" + endpoint_url: https://nhcx.hospital.example + signing_cert_path: "" + encryption_cert: + responses: + "200": + description: HTTP 200 with a string body (the OpenAPI declares string; the sandbox onboarding document shows the participant code echoed back, for example 100001@sbx). + content: + application/json: + schema: + type: object + properties: + _contentType: + type: string + _body: + type: string + example: + _contentType: string + _body: 100001@sbx + /v2/participant/update: + post: + operationId: registry_v2_participant_update + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Participant certificate and bridge update (v2) + description: |- + Stages a change to a participant encryption certificate and/or endpoint URL; returns a transactionid for passcode confirmation via /update/validate. + + ### Business purpose + + Exactly two operational values rotate over a participant's life: the public encryption certificate that counterparties encrypt claims data with, and the endpoint (bridge) URL that the gateway delivers callbacks to. Both are security-sensitive, so the v2 update takes only those fields and gates the change behind an SMS passcode to the registered mobile number. It is step 3 of the production onboarding sequence, where a newly confirmed participant publishes its certificate for the first time, and the documented route for annual key rotation thereafter. + + ### When to use + + Use it immediately after creation confirmation (/validate) to upload encryptioncert and endpointurl, and again whenever either value changes; always follow with GET /update/validate within 24 hours. The production URL is https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice/v2/participant/update. If only the certificate changes and passcode validation is not wanted, /v2/update/cert is the documented alternative. This is a synchronous JSON registry call with no workflow or x-hcx-status codes. + + ### Preconditions + + - participantcode is a valid code already registered in NHCX and its creation confirmation has been completed. + - The certificate (public key) is Base64-encoded; the update validation explicitly requires this. + - Bearer token in bearer_auth with the Bearer prefix, Accept and Content-Type: application/json. + - ParticipantCertUpdateRequest: participantcode required; encryptioncert and endpointurl optional (the base URL). + - The new private key is already deployed on the callback host so decryption works the moment the change goes live. + + ### Postconditions + + HTTP 200 with ParticipantCertUpdateResp: participant_code, status and transactionid. A passcode is sent to the registered mobile number; the pair is valid for 24 hours and each new trigger replaces it. The change is not live until GET /update/validate succeeds, after which /fetch/certs returns the new certificate and callbacks go to the new endpoint. Counterparties may serve a cached copy for up to 24 hours. Errors use the 400/404/500 ErrorResponse envelope. + + ### Common mistakes + + - Calling it before creation has been confirmed with /validate; the validations require a confirmed participant code. + - Sending the raw PEM instead of the Base64-encoded certificate. + - Using v1 field names (participant_code, encryption_cert, endpoint_url) in this flattened lowercase body. + - Treating the 200 as completion and skipping /update/validate, so the old certificate stays live. + - Re-triggering the update while a passcode is pending, invalidating the earlier transaction id. + - Losing the transaction id, which forces the update to be issued again. + + ### Best practices + + - Prepare the new key pair, deploy the PKCS8 private key to the callback host and only then publish the certificate. + - Keep the previous private key available for at least 24 hours after validation to decrypt callbacks encrypted against a cached certificate. + - Persist transactionid with its 24-hour expiry and complete /update/validate promptly. + - Rotate encryption keys once a year, matching the 365-day validity of the self-signed certificate. + - Verify the new endpointurl is a domain name on an India-based server with the NHCX NAT IPs whitelisted before submitting. + + ### Related scenario + + A TPA has just confirmed its production participant with /validate. Its engineers generate a 2048-bit RSA key, a 365-day self-signed X.509 certificate, Base64-encode it and deploy the private key to the callback host. They call /v2/participant/update with participantcode, encryptioncert and endpointurl; the response returns status and a transactionid, and the registered phone receives a passcode. After GET /update/validate succeeds, the first provider to call /fetch/certs for the TPA receives the new certificate and can encrypt a pre-authorisation for it. + + ### Specification + + Chapter [Your certificate](/docs/nhcx/v1/getting-started/your-certificate) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + participantcode: + type: string + encryptioncert: + type: string + endpointurl: + type: string + example: + participantcode: XXXXX7583@hcx + encryptioncert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t... + endpointurl: https://nhcx.demotpa.example.in + responses: + "200": + description: "HTTP 200 with ParticipantCertUpdateResp: participant_code, status and transactionid." + content: + application/json: + schema: + type: object + properties: + participant_code: + type: string + status: + type: string + transactionid: + type: string + example: + participant_code: XXXXX7583@hcx + status: Update initiated + transactionid: 1vouv8tlz2tnl-1fpspjhwj07c6 + /participant/search: + post: + operationId: registry_participant_search + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Participant search + description: |- + Reads a participant's full registry record by participant_code, including roles, status, encryption_cert and endpoint_url. + + ### Business purpose + + Before addressing a transaction to a counterparty, an integrator needs to know that the participant exists, is active, holds the expected role and publishes an encryption certificate and callback endpoint. The registry is the phone book of NHCX, and this call is the direct lookup by code. Providers use it to inspect a payer they have selected; payers use it to confirm the sender of an inbound request; everyone uses it to verify their own record after an update. + + ### When to use + + Call it once a participant_code is known, typically after /fetch/participants/list has produced candidates, or before building the first JWE for a new recipient. It is also the natural post-update check after /participant/update, /v2/participant/update or /v2/update/cert. It is a synchronous JSON registry call with no workflow or x-hcx-status codes. /participant/details takes the same body and returns the same response; the OpenAPI identifies it only as the v2 variant. + + ### Preconditions + + - A Bearer token from /get/session in bearer_auth with the Bearer prefix; Accept and Content-Type: application/json. + - The target's participant_code in xxxxx@hcx (or @sbx) form, exactly the value later placed in x-hcx-recipient_code. + - Sandbox base https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/search; production under https://apis.abdm.gov.in/pmjay/hcx. + + ### Postconditions + + HTTP 200 with ParticipantSearchResponse: timestamp (Unix timestamp when the request is sent) and participants, an array of full participant records with participant_code, linked_registry_codes, participant_name, scheme_code, roles, address, primaryEmail, additionalEmail, phone, primaryMobile, additionalMobile, status, signing_cert_path, encryption_cert, endpoint_url and payment_details. No state changes and no callback. An unknown code returns 404 with the ErrorResponse envelope; 400 and 500 are the other documented outcomes. + + ### Common mistakes + + - Passing participantid or participantcode instead of the snake_case participant_code this body requires. + - Assuming a record in the registry means the participant can transact; status must be Active, and NHCX-1003 (receiver not registered) still results if the code is wrong or inactive. + - Reading encryption_cert as the certificate content when it is documented as a URI or file path to the certificate; use /fetch/certs to obtain the key material. + - Forgetting the Accept header, which causes rejection before business logic. + - Sending an expired token and misreading the flat 401. + + ### Best practices + + - Cache the record for the session and re-read it when a transport error (NHCX-1001) or decrypt failure (PAYR-1001/PAYR-1002) suggests stale routing or key data. + - Check roles and status before selecting the counterparty for x-hcx-recipient_code. + - Call it against your own code after every registry update to confirm the change is live. + - Never log payment_details from the response. + - Treat the participants array as possibly empty and handle 404 gracefully. + + ### Related scenario + + A hospital's TPA desk has selected a payer code from /fetch/participants/list for a PMJAY patient. Before submitting anything the integration calls /participant/search with that participant_code and receives the payer's record: roles include payer, status is Active, scheme_code matches, and endpoint_url and encryption_cert are populated. The engine stores the code as the payerId that will become x-hcx-recipient_code, calls /fetch/certs to obtain the actual certificate, and then encrypts and sends /v1/coverageeligibility/check. + + ### Specification + + Chapter [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + participant_code: + type: string + example: + participant_code: 1518@hcx + responses: + "200": + description: "HTTP 200 with ParticipantSearchResponse: timestamp (Unix timestamp when the request is sent) and participants, an array of full participant records with participant_code, linked_registry_codes, participant_name, scheme_code, roles, address, primaryEmail, additionalEmail, phone, primaryMobile, additionalMobile, status, signing_cert_path, encryption_cert, endpoint_url and payment_details." + content: + application/json: + schema: + type: object + properties: + timestamp: + type: integer + participants: + type: array + items: + type: object + properties: + participant_code: + type: string + participant_name: + type: string + linked_registry_codes: + type: array + items: + type: string + scheme_code: + type: string + roles: + type: array + items: + type: string + status: + type: array + items: + type: string + primaryEmail: + type: string + primaryMobile: + type: string + encryption_cert: + type: string + endpoint_url: + type: string + example: + timestamp: 1716204567358 + participants: + - participant_code: 1518@hcx + participant_name: Demo Insurance Company + linked_registry_codes: + - 125@payer + scheme_code: default + roles: + - payer + status: + - Active + primaryEmail: claims@demoinsurer.example.in + primaryMobile: "9800000001" + encryption_cert: https://registry.example.in/certs/1518.pem + endpoint_url: https://nhcx.demoinsurer.example.in + /participant/details: + post: + operationId: registry_participant_details + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Participant details (v2 search) + description: |- + V2 variant of participant search: takes participant_code and returns the matching full registry records. + + ### Business purpose + + This is the second of two endpoints that read a single participant by code. It exists as the v2 generation of the registry lookup (operationId participantV2SearchPost) and serves the same business need as /participant/search: confirming that a counterparty exists, is active, holds the expected role and publishes an encryption certificate and callback endpoint before any encrypted transaction is addressed to it. + + ### When to use + + Use it wherever /participant/search would be used: after payer discovery via /fetch/participants/list, before the first JWE to a new recipient, or to verify your own record after an update. The OpenAPI gives both endpoints the identical description and the same ParticipantSearchReq and ParticipantSearchResponse schemas, and documents no behavioural difference beyond the operationId; the chapter advises treating them as interchangeable unless your HCX instance says otherwise. Synchronous JSON, no workflow or x-hcx-status codes. + + ### Preconditions + + - Bearer token from /get/session in bearer_auth with the Bearer prefix; Accept and Content-Type: application/json. + - Body per ParticipantSearchReq: participant_code (string, required) in xxxxx@hcx or @sbx form. + - Served under the participanthcxservice prefix on the environment gateway base. + + ### Postconditions + + HTTP 200 with ParticipantSearchResponse: timestamp and a participants array of full participant records (participant_code, linked_registry_codes, participant_name, scheme_code, roles, address, contact fields, status, signing_cert_path, encryption_cert, endpoint_url, payment_details). Read-only; nothing changes and no callback follows. 400, 404 and 500 return the ErrorResponse envelope with timestamp and error code, message and trace. + + ### Common mistakes + + - Expecting a different or richer response than /participant/search; the documented schemas are identical. + - Using participantcode or participantid instead of participant_code. + - Treating encryption_cert (a URI or file path in the schema) as the PEM itself instead of calling /fetch/certs. + - Omitting the Accept header or the Bearer prefix. + - Hard-coding one of the two lookup paths without a fallback when the instance serves only the other. + + ### Best practices + + - Wrap both lookup endpoints behind one client function so the path can be switched by configuration. + - Check status and roles before choosing a recipient code. + - Cache the record and refresh on routing or decryption errors rather than on every transaction. + - Do not log payment_details. + + ### Related scenario + + A payer's inbound gateway receives a /v1/claim/submit whose protected header names x-hcx-sender_code 100001@sbx. Before decrypting and processing, its integration calls /participant/details with that participant_code to confirm the sender is a registered provider with status Active and to record participant_name for the adjudication file. The claim is then decrypted with the payer's private key and passed to the claims team, whose decision goes back on /v1/claim/on_submit. + + ### Specification + + Chapter [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + participant_code: + type: string + example: + participant_code: 100001@sbx + responses: + "200": + description: "HTTP 200 with ParticipantSearchResponse: timestamp and a participants array of full participant records (participant_code, linked_registry_codes, participant_name, scheme_code, roles, address, contact fields, status, signing_cert_path, encryption_cert, endpoint_url, payment_details)." + content: + application/json: + schema: + type: object + properties: + timestamp: + type: integer + participants: + type: array + items: + type: object + properties: + participant_code: + type: string + participant_name: + type: string + linked_registry_codes: + type: array + items: + type: string + roles: + type: array + items: + type: string + status: + type: array + items: + type: string + primaryEmail: + type: string + primaryMobile: + type: string + encryption_cert: + type: string + endpoint_url: + type: string + example: + timestamp: 1716204567358 + participants: + - participant_code: 100001@sbx + participant_name: Demo Multispeciality Hospital + linked_registry_codes: + - IN2910001234@hfr + roles: + - provider + status: + - Active + primaryEmail: claims@demohospital.example.in + primaryMobile: "9800000000" + encryption_cert: https://registry.example.in/certs/100001.pem + endpoint_url: https://nhcx.demohospital.example.in + /fetch/participants/list: + post: + operationId: registry_fetch_participants_list + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Fetch participants list + description: |- + Payer discovery: lists participants filtered by role, registration date window and optional entity type; the first step of the cashless workflow. + + ### Business purpose + + A patient is not cashless merely by having insurance. The hospital must first discover which payer to deal with, and that payer's participantcode becomes the payerId used for NHCX routing and the x-hcx-recipient_code header. This endpoint is the discovery workhorse: it returns every participant of a given role registered within a date window, which is how a hospital builds its payer picker and how a payer sees the providers on the exchange. It is item 1 of the provider sandbox-exit checklist. + + ### When to use + + Call it at the very start of the handbook's fixed operational order: payer search, payer selection, policy discovery, policy cache normalisation, effective payer resolution, InsurancePlan and benefit retrieval, optional eligibility verification, then preauth submission. Refresh the list periodically rather than per patient. Sandbox URL https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/fetch/participants/list. Synchronous JSON; no workflow or x-hcx-status codes. + + ### Preconditions + + - Bearer token in bearer_auth with the Bearer prefix; Accept and Content-Type: application/json. + - FetchParticipantRequest: role (PAYER, PROVIDER or TPA), fromdate and todate in dd/MM/yyyy format only, all required; entitytype optional (for example Gov). + - A date window wide enough to cover the registration dates of the participants you expect; the handbook example spans 01/04/2021 to 20/03/2026. + + ### Postconditions + + HTTP 200 with ParticipantListResponse: a participantdetails array of ParticipantDetails with participantcode, participantname, address and state. The handbook notes the response shape is not stable and the documented search logic normalises participantdetails, participants or a raw array. No state changes and no callback. 400, 404 and 500 carry the ErrorResponse envelope. In the sandbox, the dummy payer 1000003538@hcx is the counterparty you will find and use. + + ### Common mistakes + + - Supplying dates in ISO or any format other than dd/MM/yyyy. + - Using a date window that is too narrow, which silently drops payers that registered outside it. + - Expecting a name filter; there is none, so text search and GOVT versus PRIVATE classification (from entitytype) must be done client-side. + - Being misled by the OpenAPI description, which is copy-pasted from the update API; the request schema defines the real behaviour. + - Parsing only participantdetails and breaking when the instance returns participants or a raw array. + - Missing Accept header or Bearer prefix. + + ### Best practices + + - Fetch once with a wide window, cache the list, and filter by name and scheme type locally, as the handbook's internal payers endpoint does. + - Accept all three response shapes defensively. + - Follow selection with /participant/search or /participant/details to confirm status and roles, and /fetch/certs to obtain the certificate before encrypting. + - Remove any hard-coded reference to 1000003538@hcx at go-live; production counterparties are resolved from this call. + - Refresh the cached list on a schedule so newly registered payers appear. + + ### Related scenario + + A hospital's admission desk opens the cashless screen for a patient holding a government scheme card. The integration has already called /fetch/participants/list with role PAYER, a window from 01/04/2021 to today and entitytype Gov, and cached the result. The desk types the scheme name, the client filters the cached list, and the operator selects the state health agency's participantcode. The engine then calls /participant/get/policies to link the patient's policy, /fetch/certs for the payer certificate, and submits /v1/insuranceplan/request followed by /v1/preauth/submit. + + ### Specification + + Chapter [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + role: + type: string + fromdate: + type: string + todate: + type: string + entitytype: + type: string + example: + role: PAYER + fromdate: 01/04/2021 + todate: 20/03/2026 + entitytype: Gov + responses: + "200": + description: "HTTP 200 with ParticipantListResponse: a participantdetails array of ParticipantDetails with participantcode, participantname, address and state." + content: + application/json: + schema: + type: object + properties: + participantdetails: + type: array + items: + type: object + properties: + participantcode: + type: string + participantname: + type: string + address: + type: string + state: + type: string + example: + participantdetails: + - participantcode: 1000003538@hcx + participantname: NHCX Dummy Payer + address: New Delhi + state: Delhi + - participantcode: 1518@hcx + participantname: Demo Insurance Company + address: Bengaluru + state: Karnataka + /fetch/certs: + post: + operationId: registry_fetch_certs + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Fetch certificate + description: |- + Returns a participant's public encryption certificate (PEM X.509 or SPKI key) by participantid; cache it for 24 hours and use it to build the JWE. + + ### Business purpose + + Every NHCX payload is encrypted end-to-end for exactly one recipient so that even the exchange cannot read the clinical and financial content it routes. That guarantee rests on each participant publishing a public certificate in the registry at onboarding. This call is how a sender obtains a counterparty's certificate before encrypting a request or a callback for it. It is item 3 of both sandbox-exit checklists and the endpoint the Integration Handbook names in its encryption steps. + + ### When to use + + Call it before encrypting the first message to a recipient and whenever the 24-hour cache entry for that participantid expires or is evicted after a decrypt or encrypt failure. Providers fetch the payer's certificate before /v1/coverageeligibility/check, /v1/preauth/submit and /v1/claim/submit; payers fetch the provider's certificate before encrypting on_* callbacks. Handbook call: POST /fetch/certs on host apisbx.abdm.gov.in/pmjay/sbxhcx with bearer_auth Bearer . Synchronous; no workflow or x-hcx-status codes. + + ### Preconditions + + - Bearer token from /get/session in bearer_auth with the Bearer prefix; Content-Type: application/json (add Accept: application/json per the common-mistakes guidance). + - ParticipantCertRequest with the single required field participantid, the recipient's participant code in @hcx form, identical to the value you will place in x-hcx-recipient_code. + - The recipient has completed onboarding with a certificate registered (mandatory at creation). + + ### Postconditions + + HTTP 200 with a string body containing a PEM-encoded X.509 certificate or an SPKI public key, as uploaded by that participant. Import X.509 first and fall back to SPKI (keys under roughly 400 bytes are typically SPKI), then use the key with RSA-OAEP-256 for alg and A256GCM for enc. Nothing changes in the registry and no callback follows. 400, 404 and 500 return the ErrorResponse envelope; an unregistered code is a 404 here and NHCX-1003 at the gateway. + + ### Common mistakes + + - Fetching the certificate before every request instead of caching for 24 hours, adding a round trip to the critical path of every claim. + - Assuming the response is always a full X.509 certificate and failing when a participant uploaded a bare SPKI key. + - Encrypting with the sender's own certificate instead of the recipient's; the recipient's private key then cannot open it, surfacing as PAYR-1001 decrypt errors. + - Passing participant_code or participantcode instead of participantid. + - Serving a stale cached certificate after the counterparty rotated its key; PAYR-1001 or PAYR-1002 is the signal to evict and re-fetch. + - Sending the token without the Bearer prefix or omitting Accept. + + ### Best practices + + - Cache per participantid with a 24-hour TTL, plus a negative path that evicts and re-fetches on encrypt or decrypt failures. + - Implement the import routine as X.509 first, SPKI fallback, treating the 400-byte size hint as diagnostic rather than a hard branch. + - Use the documented algorithm pair RSA-OAEP-256 and A256GCM. + - Re-fetch from the production registry at go-live; sandbox certificates do not carry over. + - Expect annual key rotation by counterparties; the 24-hour cache bounds exposure to a rotation you were not told about. + + ### Related scenario + + A hospital is about to send its first pre-authorisation to payer 1518@hcx. The engine checks its certificate cache, finds no entry, and calls /fetch/certs with participantid 1518@hcx and a Bearer token. The response is a PEM X.509 certificate, which is parsed and cached for 24 hours. The engine builds the JWE protected header with x-hcx-sender_code, x-hcx-recipient_code 1518@hcx and the other x-hcx headers, encrypts the FHIR bundle with RSA-OAEP-256 and A256GCM using the fetched key, and POSTs to /v1/preauth/submit. Later that week the payer rotates its certificate; a PAYR-1001 on the next submission triggers eviction and a fresh fetch. + + ### Specification + + Chapter [Finding participants and policies](/docs/nhcx/v1/getting-started/finding-participants-and-policies) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + participantid: + type: string + example: + participantid: 1518@hcx + responses: + "200": + description: HTTP 200 with a string body containing a PEM-encoded X.509 certificate or an SPKI public key, as uploaded by that participant. + content: + application/json: + schema: + type: object + properties: + _contentType: + type: string + _body: + type: string + example: + _contentType: string + _body: |- + -----BEGIN CERTIFICATE----- + MIIDdzCCAl+gAwIBAgIEbXq... + -----END CERTIFICATE----- + /fetch/certs/path: + post: + operationId: registry_fetch_certs_path + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Fetch certificate path + description: |- + Companion to /fetch/certs: takes the same participantid body and returns a string described as the participant's certificate path. + + ### Business purpose + + The registry stores a participant's encryption certificate as a URI or file path in the encryption_cert field, and this endpoint exposes that reference for a given participant. It exists alongside /fetch/certs, which the Integration Handbook names as the call to use when obtaining key material for encryption. Both serve the same underlying need, resolving a counterparty's public key before building a JWE, but the OpenAPI documents them identically and does not describe how their returned strings differ. + + ### When to use + + Use it only if your HCX instance or onboarding contact tells you to; the chapter's guidance is to treat /fetch/certs as the one to use for encryption. Both endpoints are POST, both carry the Registry APIs tag, both take ParticipantCertRequest and both declare a string 200 response with 400, 404 and 500 ErrorResponse outcomes. It is a synchronous JSON registry call with no workflow or x-hcx-status codes. + + ### Preconditions + + - Bearer token from /get/session in bearer_auth with the Bearer prefix; Accept and Content-Type: application/json. + - ParticipantCertRequest with participantid (required), the target's participant code in @hcx form. + - The target participant has completed onboarding with an encryption certificate registered. + + ### Postconditions + + HTTP 200 with a string body. The spec describes the operation (fetchCertsPath) with the same text as /fetch/certs, so the precise content of the string beyond being a certificate path is not documented. No registry state changes and no callback. Errors use the ErrorResponse envelope on 400, 404 and 500. + + ### Common mistakes + + - Assuming this returns the same PEM as /fetch/certs and feeding a path string into a key-import routine. + - Choosing it over /fetch/certs for encryption without instance-specific guidance; the handbook names /fetch/certs. + - Passing participant_code instead of participantid. + - Omitting Accept or the Bearer prefix on the token. + + ### Best practices + + - Prefer /fetch/certs for obtaining key material; use this endpoint only where the instance documents a use for the path form. + - If you do use it, log the returned string shape once so a change in behaviour is noticed. + - Apply the same 24-hour cache discipline keyed by participantid. + - Keep both calls behind one client function so the choice is a configuration switch. + + ### Related scenario + + An integrator building a registry inspection tool for a TPA wants to show, for each payer, where the registry references its certificate as well as the certificate itself. The tool obtains a Bearer token, calls /fetch/certs/path with participantid 1518@hcx and displays the returned path string, then calls /fetch/certs for the PEM used for actual encryption. The production claims engine itself only uses /fetch/certs, as the Integration Handbook prescribes, before each /v1/claim/submit. + + ### Specification + + Chapter [Finding participants and policies](/docs/nhcx/v1/getting-started/finding-participants-and-policies) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + participantid: + type: string + example: + participantid: 1518@hcx + responses: + "200": + description: HTTP 200 with a string body. + content: + application/json: + schema: + type: object + properties: + _contentType: + type: string + _body: + type: string + example: + _contentType: string + _body: + /v2/update/cert: + post: + operationId: registry_v2_update_cert + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Update certificate (v2, no passcode) + description: |- + Replaces a participant's public encryption certificate by participantId without passcode validation; the same schema is echoed back on success. + + ### Business purpose + + Encryption keys are recommended to be rotated once a year, and a compromised key must be replaced immediately. The passcode-gated /v2/participant/update is the safer general route, but it needs a person with the registered phone and a 24-hour confirmation step. This endpoint exists for certificate-only updates without that validation, so an organisation can publish a new public certificate quickly. Only the certificate changes; the endpoint URL is untouched. + + ### When to use + + Use it for scheduled annual rotation or emergency replacement of the certificate when passcode validation is not wanted. The production URL is https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice/v2/update/cert. To change the callback URL as well, use /v2/participant/update instead. It is the last item of the certificates checklist alongside the v2 participant update. Synchronous JSON; no workflow or x-hcx-status codes. + + ### Preconditions + + - Bearer token from /get/session in bearer_auth with the Bearer prefix; Accept and Content-Type: application/json. + - UpdateCertV2 body: participantId and certificate, both mandatory; the certificate must be Base64-encoded (the NHA steps produce a self-signed X.509 RSA certificate, then Base64-encode the whole PEM text). + - The matching new private key, in PKCS8 form, is already deployed on the callback host. + - Note the camelCase field participantId, unlike participant_code (v1) and participantcode (v2 update). + + ### Postconditions + + HTTP 200 with the UpdateCertV2 schema echoed back (participantId and certificate). The registry's encryption certificate for that participant is replaced, so /fetch/certs returns the new one from the next call; counterparties may serve a cached copy for up to 24 hours. No transactionid is issued and no /update/validate step follows. No callback. 400, 404 and 500 use the ErrorResponse envelope. + + ### Common mistakes + + - Sending the raw PEM rather than the Base64-encoded certificate, which the validation explicitly requires. + - Using participant_code, participantcode or encryptioncert; this schema is participantId and certificate. + - Publishing the new certificate before the new private key is live on the callback host, so inbound callbacks fail to decrypt (PAYR-1001 on the counterparty side, undecryptable payloads on yours). + - Discarding the old private key immediately, even though counterparties can hold the old certificate for 24 hours. + - Trying to change the endpoint URL here; only the certificate is accepted. + + ### Best practices + + - Rotate in two phases: deploy the new PKCS8 private key, publish the certificate, and keep the old key for at least 24 hours. + - Generate a 2048-bit RSA key and a 365-day self-signed X.509 certificate so the validity matches the annual rotation recommendation. + - Verify with /participant/search or a /fetch/certs call against your own code that the new certificate is served. + - Restrict who can call this endpoint inside your organisation, since it replaces the key that protects all inbound health data without a passcode. + - Notify the ecosystem promptly if rotation is due to suspected compromise, as the protocol expects. + + ### Related scenario + + A hospital's security audit finds its NHCX private key was copied to a shared drive. The team generates a new 2048-bit RSA key pair and 365-day self-signed certificate, deploys the PKCS8 private key to the callback host and Base64-encodes the certificate. With a Bearer token they call /v2/update/cert with participantId XXXXX7583@hcx and the certificate; the registry echoes the schema back. They keep the old key available for one day so payers still holding the cached certificate can be decrypted, then destroy it. The next /v1/preauth/on_submit from the payer, encrypted against the new certificate, decrypts cleanly. + + ### Specification + + Chapter [Your certificate](/docs/nhcx/v1/getting-started/your-certificate) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + participantId: + type: string + certificate: + type: string + example: + participantId: XXXX@hcx + certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t... + responses: + "200": + description: HTTP 200 with the UpdateCertV2 schema echoed back (participantId and certificate). + content: + application/json: + schema: + type: object + properties: + participantId: + type: string + certificate: + type: string + example: + participantId: XXXX@hcx + certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t... + /get/linked/registry/mst: + post: + operationId: registry_get_linked_registry_mst + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Get linked registry master (internal) + description: |- + Internal-use participant-service operation that fetches the linked registry master; listed in the OpenAPI but not intended for integrators. + + ### Business purpose + + The participant registry can be extended from or linked to external registries such as the ABDM Health Facility Registry and the payer registry, and participant records carry linked_registry_codes in identifier@registry form with supported registry codes configured at instance level. This operation, described in the OpenAPI as for internal use and fetching the linked registry, appears to serve that master configuration to the platform itself. It is documented here for completeness of the 63-endpoint index, not as an integration point. + + ### When to use + + Do not call it from an integration. The Participant Registry chapter names it, together with /get/session in its OpenAPI form, as one of two internal-use endpoints that should not be called by integrators. If you need registry linkage information for a participant, read linked_registry_codes from /participant/search or /participant/details, and use the Valid Registry Enums (HFR 10001, NIN 10002, ROHINI 10003, PAYER 10004) documented for onboarding. No workflow or x-hcx-status codes apply. + + ### Preconditions + + - Served under the participanthcxservice prefix with the Registry APIs tag, so the usual bearer_auth Bearer token and Accept: application/json headers would apply. + - The OpenAPI entry documents no request body and no parameters. + - Access to internal operations is controlled by the NHCX instance provider; the chapter states integrators should not call it. + + ### Postconditions + + The OpenAPI declares a 200 response of type string, with 400 Client Error, 404 Resource not found and 500 Downstream systems down each returning the ErrorResponse envelope (timestamp plus error code, message and trace). No state change is described and no callback follows. The content of the returned string is not documented. + + ### Common mistakes + + - Treating it as a public registry lookup and building a dependency on an operation the platform reserves for internal use. + - Confusing it with linked_registry_codes on a participant record, which is the documented way to see a participant's external registry identifiers. + - Confusing the registry master with the Valid Registry Enums used in registrytype during onboarding. + + ### Best practices + + - Leave it out of client libraries and Postman collections used for certification. + - Source registry codes from the onboarding documentation and participant records instead. + - If an onboarding contact directs you to it, record their exact instruction, since the specification documents neither a body nor the response content. + + ### Related scenario + + While generating a client from the participanthcxservice OpenAPI document, a hospital integrator notices /get/linked/registry/mst next to /participant/search and asks whether to wire it into the payer picker. The answer from the documentation is no: it is an internal operation, and the picker should be built on /fetch/participants/list, with each selected payer confirmed through /participant/search and its linked_registry_codes read from that record. The generated method is left unused and excluded from the sandbox-exit test evidence. + + ### Specification + + Chapter [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + _body: + type: string + example: + _body: No request body or parameters are documented in the OpenAPI entry for this internal operation. + responses: + "200": + description: The OpenAPI declares a 200 response of type string, with 400 Client Error, 404 Resource not found and 500 Downstream systems down each returning the ErrorResponse envelope (timestamp plus error code, message and trace). + content: + application/json: + schema: + type: object + properties: + _contentType: + type: string + _body: + type: string + example: + _contentType: string + _body: + /participant/link/abha/policy: + post: + operationId: registry_participant_link_abha_policy + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Link ABHA number to policies + description: |- + Payer-side write that links a beneficiary's ABHA number and member id to one or more products, so provider policy lookups can find them. + + ### Business purpose + + NHCX does not hold a national policy database of its own. Payers push their beneficiary-to-product links into the participant registry with this call, and providers pull them back with /participant/get/policies. Without a link, a hospital's policy lookup returns nothing and the patient cannot be processed as cashless on NHCX, regardless of what the admission record says. The insurer benefits by making its members discoverable; the hospital benefits by getting the payerId, memberId and productId it needs for every downstream claim call. + + ### When to use + + Use it when a policy is issued or renewed, when a member is added to a product, and after any de-link that must be re-established (for example, when an insurance company moves from one TPA to another). It sits at the very start of the member lifecycle, well before any coverage-eligibility, preauthorisation or claim workflow (workflow codes 12, 121, 13 and so on) is triggered. In the sandbox exit checklist for payers it is use case 1, Link ABHA with Policy, followed by Get Policy and De-Link. + + ### Preconditions + + - A valid Bearer token from the client-credentials call (POST /get/session, form-urlencoded client_id, client_secret, grant_type=client_credentials); tokens last 1200 seconds, so refresh before expiry. + - HTTP headers Accept: application/json, Content-Type: application/json and bearer_auth: Bearer (the participant service uses bearer_auth, not Authorization). + - Base path for the participant service: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice (sandbox) or https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice (production). + - This is a synchronous plain-JSON registry call: no JWE envelope, no x-hcx-* protocol headers and no correlation id are involved. + - The caller must be the participant named as payerid (the insurance company) or as processingid (its TPA), and the token must be minted with the client_id used when that participant was created. + - Both the payer and, where applicable, the TPA must already exist in the registry with their own participant codes; every payer has an individual participant code even when it sits under a TPA. + + ### Postconditions + + On success the service returns HTTP 200 with ParticipantLinkAbhaResponse, whose two optional fields are result (a string) and errormessage (errorcode and errordescription). There is no asynchronous callback; the write is immediately visible to /participant/get/policies and /V2/participant/get/policies keyed by ABHA number, member id or mobile number. The linked payerid and processingid become the values that providers later resolve as the payer and the receiver code for NHCX routing. Failures return 400, 404 or 500 with the ErrorResponse envelope (timestamp plus Error with code, message and trace). + + ### Common mistakes + + - Calling with a token minted from a client_id other than the one used at participant creation for the payer or TPA; NHA lists this as common mistake 10 and the call is refused even though the token itself is valid. + - Confusing payerid and processingid: payerid is always the insurance company's own participant code; processingid is only the TPA code when the payer is mapped under a TPA. + - Trying to move a payer to a new TPA by re-linking in place; the documented path is de-link, then link again with the new TPA's code as processingid. + - Omitting one of the required fields (requestid, abhanumber, memberid, payerid, policies with productid and productname) or reusing a non-UUID requestid, which returns 400 with the ErrorResponse envelope. + - Sending the token without the Bearer prefix, or omitting the Accept header, both of which reject the call before business logic (401 or 400). + + ### Best practices + + - Generate a fresh UUID for requestid on every call and log it with the response so a duplicate submission can be traced. + - Keep the ABHA number in the form the member layer expects (the identifier table and get/policies documentation both specify ABHA without hyphens) and store it in that form. + - Make sure productid and productname exactly match the payer's product catalogue as registered through /product/link, because providers will later match on these values. + - Cache and proactively refresh the Bearer token; retry once on 401 with a new token, then stop and alert. + - After linking, verify the result with /participant/get/policies using the same identifier before telling the provider the member is ready. + + ### Related scenario + + A private insurer onboards a new group policy for a corporate client and issues a family floater to a beneficiary who already holds an ABHA. Its policy administration system has previously registered the product through /product/link and now calls /participant/link/abha/policy with the beneficiary's ABHA number, member id, the insurer's own participant code as payerid and the TPA's code as processingid. A week later the beneficiary is admitted to a network hospital; the hospital's desk calls /participant/get/policies with the ABHA number, receives the linked details and uses the processingid as x-hcx-recipient_code for the coverage-eligibility check and the preauthorisation that follow. + + ### Specification + + Chapter [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + requestid: + type: string + abhanumber: + type: string + mobilenumber: + type: string + memberid: + type: string + payerid: + type: string + policies: + type: array + items: + type: object + properties: + productid: + type: string + productname: + type: string + processingid: + type: string + example: + requestid: 7f3f2a4e-0c6b-4b7a-9e2d-2c1f8a5b6d90 + abhanumber: "12345678910111" + mobilenumber: "9876543210" + memberid: MEM-2026-000123 + payerid: 100234@sbx + policies: + - productid: PRD-FLOATER-01 + productname: Family Floater Gold + processingid: 100235@sbx + responses: + "200": + description: On success the service returns HTTP 200 with ParticipantLinkAbhaResponse, whose two optional fields are result (a string) and errormessage (errorcode and errordescription). + content: + application/json: + schema: + type: object + properties: + result: + type: string + example: + result: success + /V2/participant/link/abha/policy: + post: + operationId: registry_v2_participant_link_abha_policy + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Link ABHA number to policies (V2) + description: |- + V2 variant of the ABHA policy link; same ParticipantLinkAbhaRequest body and ParticipantLinkAbhaResponse as the unversioned call. + + ### Business purpose + + This endpoint serves the same business need as /participant/link/abha/policy: it lets a payer (or the TPA processing on its behalf) record which products a beneficiary holds, keyed by ABHA number and member id, so that providers can discover the policy and route claims correctly. The OpenAPI document exposes it as operation participantLinkAbhaPolicyV2 with an identical request and response schema to the v1 path; the documentation does not describe any behavioural difference beyond the path and operationId. + + ### When to use + + Use it in exactly the situations where the v1 link call applies: policy issue, renewal, member addition, or re-linking after a de-link when a payer changes TPA. It belongs to the member-layer setup that precedes every claim-side workflow (coverage eligibility, preauthorisation with workflow code 12, enhancement with code 13, claim). Choose this path or the v1 path consistently across your integration; the docs give no reason to mix them. + + ### Preconditions + + - A valid Bearer token from the client-credentials call (POST /get/session, form-urlencoded client_id, client_secret, grant_type=client_credentials); tokens last 1200 seconds, so refresh before expiry. + - HTTP headers Accept: application/json, Content-Type: application/json and bearer_auth: Bearer (the participant service uses bearer_auth, not Authorization). + - Base path for the participant service: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice (sandbox) or https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice (production). + - This is a synchronous plain-JSON registry call: no JWE envelope, no x-hcx-* protocol headers and no correlation id are involved. + - The token must belong to the participant named as payerid or processingid, generated with the client_id used at participant creation. + - Note the capital V in the path (/V2/participant/...), which differs from the lower-case /v2/ used by the init and validate variants. + + ### Postconditions + + A successful call returns HTTP 200 with ParticipantLinkAbhaResponse (optional result string and optional errormessage with errorcode and errordescription). No asynchronous callback follows; the beneficiary's products are immediately discoverable through /participant/get/policies or /V2/participant/get/policies. Errors come back as 400, 404 or 500 with the registry ErrorResponse envelope. The link can later be reversed only through the de-link endpoints, which check that the caller is the payerid or processingid participant. + + ### Common mistakes + + - Calling with a token minted from a client_id other than the one used at participant creation for the payer or TPA; NHA lists this as common mistake 10 and the call is refused even though the token itself is valid. + - Confusing payerid and processingid: payerid is always the insurance company's own participant code; processingid is only the TPA code when the payer is mapped under a TPA. + - Trying to move a payer to a new TPA by re-linking in place; the documented path is de-link, then link again with the new TPA's code as processingid. + - Omitting one of the required fields (requestid, abhanumber, memberid, payerid, policies with productid and productname) or reusing a non-UUID requestid, which returns 400 with the ErrorResponse envelope. + - Sending the token without the Bearer prefix, or omitting the Accept header, both of which reject the call before business logic (401 or 400). + - Lower-casing the path to /v2/participant/link/abha/policy, which is not the same route; the lower-case /v2/ prefix belongs to the init and validate pair. + + ### Best practices + + - Generate a fresh UUID for requestid on every call and log it with the response so a duplicate submission can be traced. + - Keep the ABHA number in the form the member layer expects (the identifier table and get/policies documentation both specify ABHA without hyphens) and store it in that form. + - Make sure productid and productname exactly match the payer's product catalogue as registered through /product/link, because providers will later match on these values. + - Cache and proactively refresh the Bearer token; retry once on 401 with a new token, then stop and alert. + - After linking, verify the result with /participant/get/policies using the same identifier before telling the provider the member is ready. + + ### Related scenario + + A TPA that processes claims for several insurers migrates its integration to the V2 participant APIs. When one of its insurers issues a new individual health policy, the TPA's system calls /V2/participant/link/abha/policy with the insurer's participant code as payerid and its own code as processingid, listing the product from the insurer's catalogue. The TPA then confirms the link with /V2/participant/get/policies using the member's ABHA number. When the beneficiary later visits a hospital, the provider resolves the processingid as the receiver code and submits the coverage-eligibility check and preauthorisation to the TPA. + + ### Specification + + Chapter [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + requestid: + type: string + abhanumber: + type: string + mobilenumber: + type: string + memberid: + type: string + payerid: + type: string + policies: + type: array + items: + type: object + properties: + productid: + type: string + productname: + type: string + processingid: + type: string + example: + requestid: 0b1d6c1e-6a5f-4d3c-8b9a-4f2e7c0d1a22 + abhanumber: "12345678910111" + mobilenumber: "9876543210" + memberid: MEM-2026-000123 + payerid: 100234@sbx + policies: + - productid: PRD-INDIV-07 + productname: Individual Health Silver + processingid: 100235@sbx + responses: + "200": + description: A successful call returns HTTP 200 with ParticipantLinkAbhaResponse (optional result string and optional errormessage with errorcode and errordescription). + content: + application/json: + schema: + type: object + properties: + result: + type: string + example: + result: success + /v2/participant/link/abha/policy/init: + post: + operationId: registry_v2_participant_link_abha_policy_init + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Initiate ABHA policy link (v2) + description: |- + First half of the two-step v2 link: submits the ABHA policy link request, to be confirmed with a passcode via the validate endpoint. + + ### Business purpose + + The init variant exists so that a policy link can be confirmed out of band before it takes effect. It takes the same ParticipantLinkAbhaRequest as the direct link calls but pairs with GET /v2/participant/link/abha/policy/validate, which accepts a passcode and transactionId. This mirrors the passcode-confirmed pattern already used for participant creation (/validate) and update (/update/validate), giving payers and TPAs an approval gate on member-layer writes. The documentation describes the pairing but does not detail how the passcode is delivered for this endpoint. + + ### When to use + + Use it when your NHCX instance requires the confirmed (init then validate) form of linking rather than the single-call form. It is part of member-layer setup and precedes any claim-side workflow. Call init with the full link request, keep the transaction identifier the flow returns, and then complete the link with the validate call carrying passcode and transactionId. If the confirmation is never completed, the link should not be assumed to exist; verify with /participant/get/policies. + + ### Preconditions + + - A valid Bearer token from the client-credentials call (POST /get/session, form-urlencoded client_id, client_secret, grant_type=client_credentials); tokens last 1200 seconds, so refresh before expiry. + - HTTP headers Accept: application/json, Content-Type: application/json and bearer_auth: Bearer (the participant service uses bearer_auth, not Authorization). + - Base path for the participant service: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice (sandbox) or https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice (production). + - This is a synchronous plain-JSON registry call: no JWE envelope, no x-hcx-* protocol headers and no correlation id are involved. + - The caller must be the participant named as payerid or processingid, with a token minted from the client_id used at participant creation. + - The request body is ParticipantLinkAbhaRequest: requestid (UUID), abhanumber, memberid, payerid and policies (productid, productname) are required; mobilenumber and processingid are optional. + + ### Postconditions + + The service answers synchronously with HTTP 200 and ParticipantLinkAbhaResponse (optional result and errormessage). Per the documented pattern, the link is then confirmed by GET /v2/participant/link/abha/policy/validate with the passcode and transactionId; the docs do not state that the link is visible in policy lookups before that confirmation. There is no NHCX callback. Errors return 400, 404 or 500 with the ErrorResponse envelope. For the sibling participant flows the transaction id and passcode are valid for 24 hours; the docs do not state a separate validity for the policy link pair. + + ### Common mistakes + + - Treating init as the complete link and never calling /v2/participant/link/abha/policy/validate, then reporting that get/policies returns nothing. + - Using a token from a client_id other than the one used at participant creation for the payer or TPA (common mistake 10 in the NHA list); linking is refused for unauthorised parties. + - Mixing the case of the path: init and validate live under lower-case /v2/, while the direct V2 link uses /V2/. + - Swapping payerid and processingid, or omitting required fields such as requestid, memberid or the policies array. + + ### Best practices + + - Persist the requestid you sent and the transaction identifier you receive together, so the validate step can be completed by a different process or after a restart. + - Complete the validate step promptly; the sibling participant create and update passcodes expire after 24 hours, so do not assume a longer window here. + - Use the same product identifiers as registered through /product/link. + - Confirm the outcome with /participant/get/policies before informing the provider or beneficiary. + - Refresh the Bearer token proactively and retry once on 401. + + ### Related scenario + + An insurer's policy administration team is required by its NHCX instance to confirm member links by passcode. When a new policy is issued, the system posts the ParticipantLinkAbhaRequest to /v2/participant/link/abha/policy/init and records the transaction identifier. The authorised operator receives the passcode and the system calls GET /v2/participant/link/abha/policy/validate with passcode and transactionId to complete the link. The team then checks /V2/participant/get/policies for the member's ABHA number and, satisfied, closes the case; the hospital will discover the policy on the beneficiary's next admission. + + ### Specification + + Chapter [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + requestid: + type: string + abhanumber: + type: string + mobilenumber: + type: string + memberid: + type: string + payerid: + type: string + policies: + type: array + items: + type: object + properties: + productid: + type: string + productname: + type: string + processingid: + type: string + example: + requestid: 3c9e8d2f-5b4a-4e1c-9f7d-8a6b5c4d3e21 + abhanumber: "12345678910111" + mobilenumber: "9876543210" + memberid: MEM-2026-000123 + payerid: 100234@sbx + policies: + - productid: PRD-FLOATER-01 + productname: Family Floater Gold + processingid: 100235@sbx + responses: + "200": + description: The service answers synchronously with HTTP 200 and ParticipantLinkAbhaResponse (optional result and errormessage). + content: + application/json: + schema: + type: object + properties: + result: + type: string + example: + result: success + /v2/participant/link/abha/policy/validate: + get: + operationId: registry_v2_participant_link_abha_policy_validate + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Validate ABHA policy link (v2) + description: |- + Second half of the two-step v2 link: confirms an initiated ABHA policy link with the passcode and transactionId query parameters. + + ### Business purpose + + This GET endpoint closes the approval loop opened by /v2/participant/link/abha/policy/init. By requiring a passcode tied to a transactionId, it ensures that a member-layer write attributed to a payer or TPA was actually authorised by that organisation, in the same way that participant creation and update are confirmed through /validate and /update/validate. The value to the ecosystem is trust in the registry: providers rely on the policy lookup, so the links behind it should be deliberate and traceable. + + ### When to use + + Call it after a successful init call, once the passcode is available, passing both required query parameters: passcode (string) and transactionId (string). It is the last step of the confirmed link flow and must be completed before the link is relied on. It has no role in claim-side workflows (eligibility, preauthorisation, claim) beyond making the member discoverable so that those flows can start. + + ### Preconditions + + - A prior POST /v2/participant/link/abha/policy/init that returned a transaction identifier. + - The passcode associated with that transaction; the documentation for the sibling participant flows says the passcode is specific to each transaction id and valid for 24 hours. + - A valid Bearer token in bearer_auth: Bearer , plus Accept: application/json; there is no request body, and no JWE or x-hcx-* headers are involved. + - The participant service base path, sandbox https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice. + + ### Postconditions + + On success the endpoint returns HTTP 200 with ParticipantLinkAbhaResponse (optional result and errormessage). The initiated link is confirmed and the beneficiary's products become discoverable through the policy lookup endpoints. No asynchronous callback follows. Errors return 400, 404 or 500 with the ErrorResponse envelope. If the transaction cannot be found or the passcode is wrong, the documented remedy for the sibling participant flows is to trigger the init request again, which generates a new transaction id and passcode. + + ### Common mistakes + + - Sending passcode and transactionId in a JSON body instead of as query parameters; this is a GET with two required query parameters. + - Using a transactionId from a different init call or from a participant create/update flow. + - Letting the passcode age out; the sibling flows document a 24-hour validity for transaction id and passcode. + - Calling with a token from a client_id other than the one used at participant creation, which fails the link authorisation check. + - Omitting the Accept header or the Bearer prefix on bearer_auth. + + ### Best practices + + - URL-encode both query parameters and log the transactionId with the outcome. + - Treat a 404 or an errormessage as a signal to restart from init rather than retrying the same passcode indefinitely. + - Verify the confirmed link with /participant/get/policies using the same ABHA number. + - Keep the init and validate calls under the same participant token so the identity check passes. + + ### Related scenario + + A TPA's operations desk initiated a policy link for a new member earlier in the day through /v2/participant/link/abha/policy/init and stored the transaction identifier against the case. When the authorised approver supplies the passcode, the system calls GET /v2/participant/link/abha/policy/validate?passcode=...&transactionId=... and receives a 200 with a result string. The desk then runs /V2/participant/get/policies for the member's ABHA number, sees the product listed, and closes the linking task; the next call in the member's journey will be the hospital's coverage-eligibility check. + + ### Specification + + Chapter [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + responses: + "200": + description: On success the endpoint returns HTTP 200 with ParticipantLinkAbhaResponse (optional result and errormessage). + content: + application/json: + schema: + type: object + properties: + result: + type: string + example: + result: success + /participant/delink/abha/policy: + post: + operationId: registry_participant_delink_abha_policy + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: De-link ABHA policies + description: |- + Removes specific products from a member's policy link for a payer, keyed on payerid, memberid and the products listed. + + ### Business purpose + + Policies lapse, members leave a product, and insurance companies move between TPAs. This call is the only documented way to reverse a link written through /participant/link/abha/policy, which keeps the registry honest so that providers do not route claims against coverage that no longer exists. Because there is no in-place re-parenting operation, de-link followed by a fresh link is also the documented procedure when a payer changes its processing TPA. The insurer and TPA control their own data; providers get accurate policy lookups. + + ### When to use + + Use it when a product should no longer be discoverable for a member: policy termination, member removal, product migration, or the first half of a TPA change. It belongs to the member layer and precedes no claim-side workflow; it is the payer's use case 3 in the sandbox exit checklist (Link, Get Policy, De-Link). Do not use it to correct an ABHA number, which is what /update/abhanumber is for. + + ### Preconditions + + - A valid Bearer token from the client-credentials call (POST /get/session, form-urlencoded client_id, client_secret, grant_type=client_credentials); tokens last 1200 seconds, so refresh before expiry. + - HTTP headers Accept: application/json, Content-Type: application/json and bearer_auth: Bearer (the participant service uses bearer_auth, not Authorization). + - Base path for the participant service: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice (sandbox) or https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice (production). + - This is a synchronous plain-JSON registry call: no JWE envelope, no x-hcx-* protocol headers and no correlation id are involved. + - The caller must be the participant named as payerid or processingid when the policies were linked; NHCX extracts the client id from the token and allows the call only on a match. + - The body is ParticipantDeLinkAbhaRequest: requestid (UUID), payerid, memberid and policies (productid, productname) are required; processingid is optional. There is no abhanumber field. + + ### Postconditions + + A successful call returns HTTP 200 with ParticipantDeLinkAbhaResponse and the listed products are no longer returned by /participant/get/policies for that payer and member. No asynchronous callback follows. If the caller is not the linking payer or TPA the call is refused with an error message; if a listed product is not linked the response carries "There is no policies with requested details". Other failures return 400, 404 or 500 with the ErrorResponse envelope. To re-establish coverage, call the link endpoint again, optionally with a new processingid. + + ### Common mistakes + + - Calling from a participant that is neither the payerid nor the processingid used at link time; NHCX checks the client id in the token, not the body, and refuses the call (common mistake 10). + - Listing a product that is not actually linked for that payerid and memberid, which returns the error message "There is no policies with requested details". + - Including abhanumber or mobilenumber in the body; the de-link request is keyed on payerid, memberid and the products listed, and has no ABHA field. + - Expecting provider-side caches to update: the handbook documents the policy cache as permanent with no TTL, so a de-linked policy keeps appearing until the provider passes forceRefresh: true. + - Using a token generated with a different client_id from the one used when the payer or TPA participant was created. + + ### Best practices + + - De-link only the specific products that need removing; the policies array is the unit of work. + - When moving an insurer to a new TPA, follow the documented order: de-link the existing policies, then link them again with the new TPA's participant code as processingid. + - Generate a fresh UUID for requestid on every call and log it with the response. + - Confirm the result with /participant/get/policies afterwards, and remember that providers may need a forced refresh of their own policy cache. + - Refresh the Bearer token proactively and retry once on 401 before escalating. + + ### Related scenario + + An insurance company ends its contract with one TPA and appoints another. Its integration first calls /participant/get/policies to enumerate the products linked for each affected member, then calls /participant/delink/abha/policy for each member with the insurer's participant code as payerid, the member id and the products to remove. Once every de-link returns success, it calls /participant/link/abha/policy again with the new TPA's participant code as processingid. Hospitals that have cached these members' policies are told to refresh, so that their next coverage-eligibility check is addressed to the new TPA. + + ### Specification + + Chapter [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + requestid: + type: string + payerid: + type: string + memberid: + type: string + policies: + type: array + items: + type: object + properties: + productid: + type: string + productname: + type: string + processingid: + type: string + example: + requestid: 9a7c5e3d-1b2f-4c8a-b6d4-0e9f8a7b6c55 + payerid: 100234@sbx + memberid: MEM-2026-000123 + policies: + - productid: PRD-FLOATER-01 + productname: Family Floater Gold + processingid: 100235@sbx + responses: + "200": + description: A successful call returns HTTP 200 with ParticipantDeLinkAbhaResponse and the listed products are no longer returned by /participant/get/policies for that payer and member. + content: + application/json: + schema: + type: object + properties: + result: + type: string + example: + result: success + /V2/participant/delink/abha/policy: + post: + operationId: registry_v2_participant_delink_abha_policy + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: De-link ABHA policies (V2) + description: |- + V2 variant of the ABHA policy de-link; same ParticipantDeLinkAbhaRequest body and response as the unversioned call. + + ### Business purpose + + This endpoint performs the same member-layer removal as /participant/delink/abha/policy: it takes products out of a member's link for a given payer so that providers stop discovering lapsed or migrated coverage. The OpenAPI document exposes it as participantDeLinkAbhaPolicyV2 with an identical request and response schema; the documentation does not describe any behavioural difference beyond the path and operationId. It is the natural partner of /V2/participant/link/abha/policy for integrations that have standardised on the V2 paths. + + ### When to use + + Use it in the same situations as the v1 de-link: policy termination, member removal, product migration, or as the first step when an insurer changes TPA (de-link, then link again with the new processingid). It is part of member-layer maintenance and is not tied to any claim workflow code. Pair it consistently with the V2 link and V2 get-policies calls. + + ### Preconditions + + - A valid Bearer token from the client-credentials call (POST /get/session, form-urlencoded client_id, client_secret, grant_type=client_credentials); tokens last 1200 seconds, so refresh before expiry. + - HTTP headers Accept: application/json, Content-Type: application/json and bearer_auth: Bearer (the participant service uses bearer_auth, not Authorization). + - Base path for the participant service: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice (sandbox) or https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice (production). + - This is a synchronous plain-JSON registry call: no JWE envelope, no x-hcx-* protocol headers and no correlation id are involved. + - The caller must be the payerid or processingid participant from the original link, using a token minted with the client_id used at participant creation. + - Body: requestid (UUID), payerid, memberid and policies are required; processingid is optional; there is no abhanumber field. + - Note the capital V in /V2/. + + ### Postconditions + + On success the service returns HTTP 200 with ParticipantDeLinkAbhaResponse and the products are no longer visible through the get-policies endpoints for that payer and member. There is no callback. An unauthorised caller is refused with an error message, and a product that is not linked yields "There is no policies with requested details". Other errors use the 400/404/500 ErrorResponse envelope. Provider-side policy caches are documented as permanent, so they will keep the old answer until forced to refresh. + + ### Common mistakes + + - Calling from a participant that is neither the payerid nor the processingid used at link time; NHCX checks the client id in the token, not the body, and refuses the call (common mistake 10). + - Listing a product that is not actually linked for that payerid and memberid, which returns the error message "There is no policies with requested details". + - Including abhanumber or mobilenumber in the body; the de-link request is keyed on payerid, memberid and the products listed, and has no ABHA field. + - Expecting provider-side caches to update: the handbook documents the policy cache as permanent with no TTL, so a de-linked policy keeps appearing until the provider passes forceRefresh: true. + - Using a token generated with a different client_id from the one used when the payer or TPA participant was created. + - Lower-casing the path; /v2/participant/delink/abha/policy is not a documented route. + + ### Best practices + + - De-link only the specific products that need removing; the policies array is the unit of work. + - When moving an insurer to a new TPA, follow the documented order: de-link the existing policies, then link them again with the new TPA's participant code as processingid. + - Generate a fresh UUID for requestid on every call and log it with the response. + - Confirm the result with /participant/get/policies afterwards, and remember that providers may need a forced refresh of their own policy cache. + - Refresh the Bearer token proactively and retry once on 401 before escalating. + + ### Related scenario + + A TPA is informed by one of its insurers that a corporate group policy has been cancelled mid-term. The TPA's system lists the affected members from its own records, calls /V2/participant/get/policies to confirm what NHCX currently holds, and then calls /V2/participant/delink/abha/policy per member with the insurer's participant code as payerid, its own code as processingid and the cancelled product. Each success is logged against the member. When a former member later presents at a hospital, the provider's policy lookup (after a forced cache refresh) no longer shows the product, and the desk proceeds as a self-pay case rather than submitting a coverage-eligibility check. + + ### Specification + + Chapter [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + requestid: + type: string + payerid: + type: string + memberid: + type: string + policies: + type: array + items: + type: object + properties: + productid: + type: string + productname: + type: string + processingid: + type: string + example: + requestid: c4d2e1f0-8b7a-4c6d-9e5f-1a2b3c4d5e66 + payerid: 100234@sbx + memberid: MEM-2026-000123 + policies: + - productid: PRD-INDIV-07 + productname: Individual Health Silver + processingid: 100235@sbx + responses: + "200": + description: On success the service returns HTTP 200 with ParticipantDeLinkAbhaResponse and the products are no longer visible through the get-policies endpoints for that payer and member. + content: + application/json: + schema: + type: object + properties: + result: + type: string + example: + result: success + /participant/get/policies: + post: + operationId: registry_participant_get_policies + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Get beneficiary policies + description: |- + Looks up the policies linked to a beneficiary by ABHA number, member id or mobile number, returning the payer and product details needed for claims. + + ### Business purpose + + This is the provider's window into the member layer that payers populate through the link API. A hospital cannot submit a coverage-eligibility check, preauthorisation or claim until it knows the payer participant code, member id and product for the patient, and this call is where those values come from. The handbook lists policy discovery as step three of the fixed cashless sequence (payer search, payer selection, policy discovery, cache normalisation, effective payer resolution, InsurancePlan retrieval, optional eligibility, preauth). Payers and TPAs also use it to verify that their links were recorded. + + ### When to use + + Call it after patient registration or admission, when the desk needs to confirm that the patient is linked to a scheme or policy, and again (with a forced refresh) whenever a payer-side change is suspected. It precedes /v1/insuranceplan/request, /v1/coverageeligibility/check and /v1/preauth/submit (workflow code 12). If no payer id can be derived from the result, the backend must refuse preauth with "Unable to resolve payerId from policy bundle. Please fetch eligibility/policies before pre-auth submission." It is use case 2 in both the provider and payer sandbox exit checklists. + + ### Preconditions + + - A valid Bearer token from the client-credentials call (POST /get/session, form-urlencoded client_id, client_secret, grant_type=client_credentials); tokens last 1200 seconds, so refresh before expiry. + - HTTP headers Accept: application/json, Content-Type: application/json and bearer_auth: Bearer (the participant service uses bearer_auth, not Authorization). + - Base path for the participant service: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice (sandbox) or https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice (production). + - This is a synchronous plain-JSON registry call: no JWE envelope, no x-hcx-* protocol headers and no correlation id are involved. + - The beneficiary must already have been linked by the payer or TPA; if no link exists the lookup returns nothing regardless of the hospital's own records. + - Body is FetchParticipantPoliciesRequest with two required strings: identifiertype (AbhaNumber, MemberId or MobileNo) and identifiervalue; ABHA must be supplied without hyphens. + + ### Postconditions + + The service answers synchronously with HTTP 200 and ParticipantListResponse: an optional participantdetails array whose entries carry optional participantcode, participantname, address and state. No callback follows. Integrators cache the normalised result keyed by patient (the handbook documents this cache as permanent, with forceRefresh: true as the only bypass) and resolve payerId, memberId, productId, productName and policyNumber from it. NHA guidance stresses that the processingID in the response, not the PayerID, is what goes into x-hcx-recipient_code. Failures return 400, 404 or 500 with the ErrorResponse envelope. + + ### Common mistakes + + - Sending the ABHA number with hyphens; the identifier table specifies ABHA without hyphens for this lookup and a hyphenated value is a common cause of an empty result. + - Using the PayerID from the response as x-hcx-recipient_code; NHA's common mistake 7 says providers must use the processingID from the get/Policies response as the receiver code, otherwise NHCX-1003 (receiver not registered) or PAYR-1331 follows. + - Trying only one identifier type; the handbook prescribes a cascade of AbhaNumber, then MemberId, then MobileNo. + - Dereferencing fields blindly; every field of ParticipantDetails is optional and the response shape may arrive as participantdetails, participants or a raw array. + - Trusting a permanent policy cache after a payer-side change instead of passing forceRefresh: true. + + ### Best practices + + - Normalise the ABHA number (strip separators) before the call and try identifiers in the documented priority order: ABHA, then MemberId from the latest admission, then mobile number. + - Cache successful lookups keyed by patient, but expose a forceRefresh path and use it as the first diagnostic step when a preauth is rejected for a coverage mismatch. + - Store payerId, memberId, productId, productName and policyNumber from the result; these feed x-hcx-recipient_code, the Coverage and Patient identifiers and the InsurancePlan lookup. + - If the lookup yields nothing, fall back to a coverage-eligibility check with purpose discovery to obtain the active policy code. + - Keep the token fresh; retry once on 401. + + ### Related scenario + + A patient is admitted to a network hospital and the registration desk captures an ABHA number and a member id. The HMIS has already called /fetch/participants/list to discover payers, and now calls /participant/get/policies with identifiertype AbhaNumber and the hyphen-free ABHA value. The response is normalised and cached against the patient, and the processingID becomes the receiver code. The desk then requests the plan through /v1/insuranceplan/request, optionally runs /v1/coverageeligibility/check, and submits the preauthorisation with /v1/preauth/submit; when the payer later queries a coverage detail, the desk forces a refresh of this lookup before responding. + + ### Specification + + Chapter [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + identifiertype: + type: string + identifiervalue: + type: string + example: + identifiertype: AbhaNumber + identifiervalue: "12345678910111" + responses: + "200": + description: "The service answers synchronously with HTTP 200 and ParticipantListResponse: an optional participantdetails array whose entries carry optional participantcode, participantname, address and state." + content: + application/json: + schema: + type: object + properties: + participantdetails: + type: array + items: + type: object + properties: + participantcode: + type: string + participantname: + type: string + address: + type: string + state: + type: string + example: + participantdetails: + - participantcode: 100234@sbx + participantname: Demo Health Insurance Co + address: Plot 12, Sector 5, Gurugram + state: Haryana + /V2/participant/get/policies: + post: + operationId: registry_v2_participant_get_policies + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Get beneficiary policies (V2) + description: |- + V2 variant of the beneficiary policy lookup; same FetchParticipantPoliciesRequest body and ParticipantListResponse as the unversioned call. + + ### Business purpose + + This endpoint answers the same question as /participant/get/policies: which payer products is this beneficiary linked to, and therefore which payer or TPA should the hospital address. The OpenAPI document exposes it as getParticipantGetPoliciesV2 with an identical request and response schema and the same Registry APIs tag; the documentation records no behavioural difference beyond the path. Integrations that use the V2 link and de-link calls typically read back through this endpoint. + + ### When to use + + Use it at the same point in the journey as the v1 lookup: after registration, before InsurancePlan retrieval, coverage eligibility and preauthorisation (workflow code 12), and whenever a cached policy needs to be re-validated with forceRefresh. Payers and TPAs use it to confirm a link or de-link they have just written. Pick one of the two get-policies paths and use it consistently. + + ### Preconditions + + - A valid Bearer token from the client-credentials call (POST /get/session, form-urlencoded client_id, client_secret, grant_type=client_credentials); tokens last 1200 seconds, so refresh before expiry. + - HTTP headers Accept: application/json, Content-Type: application/json and bearer_auth: Bearer (the participant service uses bearer_auth, not Authorization). + - Base path for the participant service: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice (sandbox) or https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice (production). + - This is a synchronous plain-JSON registry call: no JWE envelope, no x-hcx-* protocol headers and no correlation id are involved. + - A payer or TPA must already have linked the beneficiary. + - Body: identifiertype (AbhaNumber, MemberId or MobileNo) and identifiervalue, both required; ABHA without hyphens. + - Note the capital V in /V2/. + + ### Postconditions + + Returns HTTP 200 with ParticipantListResponse (optional participantdetails array of participantcode, participantname, address, state). No callback follows. The result is normalised and cached by the caller; the handbook documents that cache as permanent until forceRefresh: true is passed. The processingID from the response is the receiver code for NHCX routing, and payerId, memberId, productId, productName and policyNumber are resolved from the cached policies for the preauth. Errors return 400, 404 or 500 with the ErrorResponse envelope. + + ### Common mistakes + + - Sending the ABHA number with hyphens; the identifier table specifies ABHA without hyphens for this lookup and a hyphenated value is a common cause of an empty result. + - Using the PayerID from the response as x-hcx-recipient_code; NHA's common mistake 7 says providers must use the processingID from the get/Policies response as the receiver code, otherwise NHCX-1003 (receiver not registered) or PAYR-1331 follows. + - Trying only one identifier type; the handbook prescribes a cascade of AbhaNumber, then MemberId, then MobileNo. + - Dereferencing fields blindly; every field of ParticipantDetails is optional and the response shape may arrive as participantdetails, participants or a raw array. + - Trusting a permanent policy cache after a payer-side change instead of passing forceRefresh: true. + - Lower-casing the path to /v2/participant/get/policies, which is not a documented route. + + ### Best practices + + - Normalise the ABHA number (strip separators) before the call and try identifiers in the documented priority order: ABHA, then MemberId from the latest admission, then mobile number. + - Cache successful lookups keyed by patient, but expose a forceRefresh path and use it as the first diagnostic step when a preauth is rejected for a coverage mismatch. + - Store payerId, memberId, productId, productName and policyNumber from the result; these feed x-hcx-recipient_code, the Coverage and Patient identifiers and the InsurancePlan lookup. + - If the lookup yields nothing, fall back to a coverage-eligibility check with purpose discovery to obtain the active policy code. + - Keep the token fresh; retry once on 401. + + ### Related scenario + + A TPA has just linked a new member through /V2/participant/link/abha/policy and wants to verify the write before closing the ticket. It calls /V2/participant/get/policies with identifiertype AbhaNumber and the member's hyphen-free ABHA number and sees the product returned. Months later the same member is admitted; the hospital's HMIS runs the identifier cascade (ABHA, then member id, then mobile) against this endpoint, caches the result, and proceeds to /v1/insuranceplan/request and /v1/preauth/submit addressed to the TPA's participant code taken from processingID. + + ### Specification + + Chapter [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + identifiertype: + type: string + identifiervalue: + type: string + example: + identifiertype: MemberId + identifiervalue: MEM-2026-000123 + responses: + "200": + description: Returns HTTP 200 with ParticipantListResponse (optional participantdetails array of participantcode, participantname, address, state). + content: + application/json: + schema: + type: object + properties: + participantdetails: + type: array + items: + type: object + properties: + participantcode: + type: string + participantname: + type: string + address: + type: string + state: + type: string + example: + participantdetails: + - participantcode: 100234@sbx + participantname: Demo Health Insurance Co + address: Plot 12, Sector 5, Gurugram + state: Haryana + /update/abhanumber: + post: + operationId: registry_update_abhanumber + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Update ABHA number + description: |- + Replaces a placeholder (dummy) ABHA number with the beneficiary's real ABHA number in the ABHA_AUTH_TRANSACTION table. + + ### Business purpose + + Beneficiaries are sometimes onboarded before their real ABHA is known, using a placeholder value. Because the member layer and the Patient resource both key on the ABHA number, a placeholder that is never corrected leaves the beneficiary undiscoverable and breaks the identifier rules for claim bundles. This endpoint, tagged Retrieving API and implemented by updateAbhaNumberController, lets the placeholder be swapped for the real number so that later policy lookups and claim transactions line up. The docs describe it as updating the ABHA number in the ABHA_AUTH_TRANSACTION table. + + ### When to use + + Use it once the beneficiary's genuine ABHA number becomes available after an onboarding that used a dummy value, and before relying on ABHA-keyed policy lookups or building Patient identifiers for coverage-eligibility, preauth (workflow code 12) or claim bundles. The documentation does not restrict which participant role calls it, so treat it as a member-data correction step rather than part of any transaction workflow. + + ### Preconditions + + - A valid Bearer token from the client-credentials call (POST /get/session, form-urlencoded client_id, client_secret, grant_type=client_credentials); tokens last 1200 seconds, so refresh before expiry. + - HTTP headers Accept: application/json, Content-Type: application/json and bearer_auth: Bearer (the participant service uses bearer_auth, not Authorization). + - Base path for the participant service: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice (sandbox) or https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice (production). + - This is a synchronous plain-JSON registry call: no JWE envelope, no x-hcx-* protocol headers and no correlation id are involved. + - Both the placeholder and the real ABHA must be known; the body is UpdateAbhaRequest with two optional strings, dummyAbha and realAbha. + - The gateway's error catalogue expects ABHA numbers in XX-XXXX-XXXX-XXXX form (NHCX-1018), while the member layer stores them without hyphens; the docs do not state which form this endpoint expects, so follow your instance's guidance. + + ### Postconditions + + A successful call returns HTTP 200 with UpdateAbhaResponse, which carries optional successMessage and errorMessage strings. Unusually for this service, the 400, 404 and 500 responses also use UpdateAbhaResponse rather than the registry ErrorResponse envelope, so clients must read errorMessage rather than Error.code on failure. No callback follows. After the update, policy lookups and Patient identifiers should use the real ABHA; any provider-side policy cache built on the placeholder needs a forced refresh. + + ### Common mistakes + + - Parsing failures as ErrorResponse; this endpoint returns UpdateAbhaResponse for 400, 404 and 500 as well as for success. + - Sending an empty body; both fields are optional in the schema, but the operation is meaningless without dummyAbha and realAbha. + - Inconsistent ABHA formatting between systems: NHCX-1018 requires XX-XXXX-XXXX-XXXX at the gateway, while x-hcx-ben-abha-id and the member-layer lookups take the number without hyphens. + - Forgetting to refresh cached policies and stored Patient identifiers that still carry the placeholder. + - Omitting the Accept header or the Bearer prefix on bearer_auth. + + ### Best practices + + - Record both the placeholder and the real ABHA with the timestamp of the change for audit purposes. + - Read successMessage and errorMessage on every response and treat a non-200 status as failure even if the body parses. + - Immediately re-run /participant/get/policies with forceRefresh: true for the affected beneficiary. + - Keep the ABHA formatting rule per field: hyphen-free for member lookups and x-hcx-ben-abha-id, XX-XXXX-XXXX-XXXX where NHCX-1018 applies. + - Never log the token; log the ABHA change with the request identifier only. + + ### Related scenario + + A state scheme enrols a beneficiary in a hurry with a dummy ABHA so that a policy can be linked and an emergency admission can proceed. After discharge the beneficiary completes ABHA creation and the real number is captured. The payer's system calls /update/abhanumber with dummyAbha and realAbha, receives a successMessage, and then calls /participant/get/policies with forceRefresh to make sure the real ABHA resolves the linked product. The hospital's billing team, preparing the final claim, refreshes its own policy cache so that the Claim bundle's Patient identifiers carry the PMJAY member id and the real hyphen-free ABHA. + + ### Specification + + Chapter [Participants and policies](/docs/nhcx/v1/registries) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + dummyAbha: + type: string + realAbha: + type: string + example: + dummyAbha: "99999999999999" + realAbha: "12345678910111" + responses: + "200": + description: A successful call returns HTTP 200 with UpdateAbhaResponse, which carries optional successMessage and errorMessage strings. + content: + application/json: + schema: + type: object + properties: + successMessage: + type: string + example: + successMessage: ABHA number updated successfully + /product/link: + post: + operationId: registry_product_link + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Link payer product + description: |- + Registers a product (product id and name) against a payer's participant code, so that it can be referenced in ABHA policy links. + + ### Business purpose + + Products are the payer's catalogue entries that policies[].productid and productname refer to when a beneficiary is linked. This Retrieving API call, described in the OpenAPI document as the API to list products by the payers or insurance companies, is how an insurer places a product in the registry under its own participant code. Doing so makes the product ownership resolvable through /product/getowner and gives providers a stable productId and productName to match against when they resolve coverage for InsurancePlan and preauth. + + ### When to use + + Use it when a payer introduces a new product, and before any /participant/link/abha/policy call that references that product. It is part of payer-side catalogue setup, ahead of member linking and well ahead of any claim-side workflow. When a product is retired, the counterpart /product/delink removes it. The documentation does not describe versioning or renaming of products; treat a rename as de-link and re-link. + + ### Preconditions + + - A valid Bearer token from the client-credentials call (POST /get/session, form-urlencoded client_id, client_secret, grant_type=client_credentials); tokens last 1200 seconds, so refresh before expiry. + - HTTP headers Accept: application/json, Content-Type: application/json and bearer_auth: Bearer (the participant service uses bearer_auth, not Authorization). + - Base path for the participant service: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice (sandbox) or https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice (production). + - This is a synchronous plain-JSON registry call: no JWE envelope, no x-hcx-* protocol headers and no correlation id are involved. + - The payer or insurance company must already be a registered participant with its own participant code. + - Body is ProductLinkRequest with all three fields required: productid, productname and participantcode. + + ### Postconditions + + On success the endpoint returns HTTP 200 with ParticipantCreateResponse, whose single optional field participant_code is the machine-generated participant identifier on the HCX instance. No callback follows. The product becomes the value that /product/getowner resolves back to the owning participant and that policy links refer to. Failures return 400, 404 or 500 with the ErrorResponse envelope (timestamp plus Error with code, message and trace). + + ### Common mistakes + + - Omitting one of the three required fields; productid, productname and participantcode are all mandatory. + - Using a participantcode in the wrong casing or from the wrong environment (sandbox codes look like 100001@sbx, production codes end in @hcx). + - Referencing a product in a policy link before it has been linked here, so provider-side product matching later fails. + - Expecting product details in the response; only participant_code is returned. + - Missing the Accept header or the Bearer prefix on bearer_auth. + + ### Best practices + + - Keep productid values stable and unique within the payer; providers use productId for product-level matching and productName as the practical policy or coverage code for plan lookup. + - Register products before linking members, and verify with /product/getowner that the product resolves to your participant code. + - Log the participant_code returned with the product identifiers for reconciliation. + - Refresh the Bearer token proactively and retry once on 401. + + ### Related scenario + + An insurer launches a new family floater plan. Before its policy administration system can link any member, it calls /product/link with the product id, the product name that hospitals will see, and the insurer's participant code, receiving its participant_code back in the response. It then checks /product/getowner with the product id to confirm ownership, and begins linking members with /participant/link/abha/policy. Hospitals that later call /participant/get/policies will see the product id and name, use productName for the InsurancePlan lookup and productId for coverage matching in the preauth. + + ### Specification + + Chapter [Participants and policies](/docs/nhcx/v1/registries) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + productid: + type: string + productname: + type: string + participantcode: + type: string + example: + productid: PRD-FLOATER-01 + productname: Family Floater Gold + participantcode: 100234@sbx + responses: + "200": + description: On success the endpoint returns HTTP 200 with ParticipantCreateResponse, whose single optional field participant_code is the machine-generated participant identifier on the HCX instance. + content: + application/json: + schema: + type: object + properties: + participant_code: + type: string + example: + participant_code: 100234@sbx + /product/delink: + post: + operationId: registry_product_delink + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: De-link payer product + description: |- + Removes a product (product id and name) from a payer's participant code in the registry. + + ### Business purpose + + When a payer withdraws a product from the market or replaces it, the registry entry created by /product/link should be removed so that it is no longer resolvable and cannot be referenced by new member links. The OpenAPI document describes this Retrieving API call as the API to de-link products by the payers or insurance companies. Keeping the catalogue accurate protects providers from matching on retired products when they resolve coverage for InsurancePlan and preauthorisation. + + ### When to use + + Use it when a product is discontinued or renamed (the docs give no rename operation, so de-link and re-link), after the member links that reference it have been handled through /participant/delink/abha/policy. It is a payer-side catalogue maintenance step and is not tied to any claim workflow code. The documentation does not state whether de-linking a product that still has member links is refused, so remove member links first. + + ### Preconditions + + - A valid Bearer token from the client-credentials call (POST /get/session, form-urlencoded client_id, client_secret, grant_type=client_credentials); tokens last 1200 seconds, so refresh before expiry. + - HTTP headers Accept: application/json, Content-Type: application/json and bearer_auth: Bearer (the participant service uses bearer_auth, not Authorization). + - Base path for the participant service: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice (sandbox) or https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice (production). + - This is a synchronous plain-JSON registry call: no JWE envelope, no x-hcx-* protocol headers and no correlation id are involved. + - The payer or insurance company must already be a registered participant with its own participant code. + - Body is ProductLinkRequest with all three fields required: productid, productname and participantcode. + + ### Postconditions + + On success the endpoint returns HTTP 200 with ParticipantCreateResponse containing the optional participant_code. No callback follows. The product should no longer resolve to the payer through /product/getowner. Failures return 400, 404 or 500 with the ErrorResponse envelope. Provider-side policy caches are documented as permanent, so a product that hospitals have already cached will still appear there until they pass forceRefresh: true. + + ### Common mistakes + + - Sending only productid; ProductLinkRequest requires productid, productname and participantcode for de-link as well. + - De-linking a product while members are still linked to it, then finding those member links inconsistent; de-link members first. + - Using a participantcode from the wrong environment or with wrong casing. + - Assuming providers see the change immediately; their cached policies persist without TTL. + - Missing the Accept header or sending the token without the Bearer prefix. + + ### Best practices + + - Enumerate and de-link affected member policies before removing the product. + - Use the exact productid and productname that were registered with /product/link. + - Verify afterwards with /product/getowner that the product no longer resolves to your participant code. + - Log the request and the returned participant_code for audit. + - Refresh the Bearer token proactively and retry once on 401. + + ### Related scenario + + An insurer retires its old Individual Health Silver product at the end of a policy year, having migrated every member to a successor product. Its system first runs /participant/delink/abha/policy for each member still linked to the old product, then calls /product/delink with the product id, product name and the insurer's participant code. A confirmation call to /product/getowner shows the product no longer resolves. The insurer notifies its network hospitals, whose desks force a refresh of cached policies so that the next coverage-eligibility check and preauthorisation reference the successor product. + + ### Specification + + Chapter [Participants and policies](/docs/nhcx/v1/registries) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + productid: + type: string + productname: + type: string + participantcode: + type: string + example: + productid: PRD-INDIV-07 + productname: Individual Health Silver + participantcode: 100234@sbx + responses: + "200": + description: On success the endpoint returns HTTP 200 with ParticipantCreateResponse containing the optional participant_code. + content: + application/json: + schema: + type: object + properties: + participant_code: + type: string + example: + participant_code: 100234@sbx + /product/getowner: + post: + operationId: registry_product_getowner + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Get product owner + description: |- + Resolves a product id to the participant code of the payer that owns it. + + ### Business purpose + + Given only a product identifier, an integrator often needs to know which payer stands behind it. This Retrieving API call takes a ProductOwnerRequest with productid and returns ParticipantCreateResponse, whose participant_code is the owning participant's identifier on the HCX instance. That makes it a useful bridge between a product seen on a policy document or in a policy lookup and the participant code that must go into routing. Note that the OpenAPI description reads "This API is to generate the product Id and product Name", which does not match the response schema; the source does not resolve this conflict. + + ### When to use + + Use it when you hold a product id but not the payer participant code, for example while normalising a policy lookup or verifying a newly linked product. It is a synchronous helper in the member layer, used before InsurancePlan retrieval, coverage eligibility or preauthorisation rather than during them. Payers use it after /product/link or /product/delink to confirm the registry state. + + ### Preconditions + + - A valid Bearer token from the client-credentials call (POST /get/session, form-urlencoded client_id, client_secret, grant_type=client_credentials); tokens last 1200 seconds, so refresh before expiry. + - HTTP headers Accept: application/json, Content-Type: application/json and bearer_auth: Bearer (the participant service uses bearer_auth, not Authorization). + - Base path for the participant service: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice (sandbox) or https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice (production). + - This is a synchronous plain-JSON registry call: no JWE envelope, no x-hcx-* protocol headers and no correlation id are involved. + - Body is ProductOwnerRequest with a single optional string, productid; supply it, since the lookup has no other input. + - The product must have been registered by its payer through /product/link. + + ### Postconditions + + Returns HTTP 200 with ParticipantCreateResponse containing the optional participant_code of the owning participant. No callback follows and no state changes. Failures return 400, 404 or 500 with the ErrorResponse envelope. The returned code identifies the payer (the payerid used in policy links); remember that for NHCX routing the receiver code should come from the processingID given by the get-policies response, which may be a TPA rather than this owner. + + ### Common mistakes + + - Using the returned participant_code directly as x-hcx-recipient_code when the payer is processed by a TPA; NHA's common mistake 7 says the receiver code is the processingID from get/Policies. + - Expecting product name or other product details in the response; only participant_code is returned. + - Sending an empty body; productid is optional in the schema but the lookup needs it. + - Confusing this endpoint with /participant/getProductIdName, which carries the same description but a different request shape. + - Omitting the Accept header or the Bearer prefix. + + ### Best practices + + - Treat the result as the product owner (payerid), then resolve the effective receiver through the policy lookup. + - Cache owner lookups by productid; ownership changes rarely and only through /product/link and /product/delink. + - Handle a missing participant_code gracefully; every field in the response is optional. + - Refresh the Bearer token proactively and retry once on 401. + + ### Related scenario + + A hospital receives a scanned policy card that shows only a product id, and the patient's ABHA-based policy lookup returned more than one payer. The HMIS calls /product/getowner with the product id and gets back the participant code of the insurer that owns it, which lets the desk pick the right entry from the /participant/get/policies result. With the matched policy in hand the system reads the processingID as the receiver code, requests the plan through /v1/insuranceplan/request and goes on to submit the preauthorisation. + + ### Specification + + Chapter [Participants and policies](/docs/nhcx/v1/registries) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + productid: + type: string + example: + productid: PRD-FLOATER-01 + responses: + "200": + description: Returns HTTP 200 with ParticipantCreateResponse containing the optional participant_code of the owning participant. + content: + application/json: + schema: + type: object + properties: + participant_code: + type: string + example: + participant_code: 100234@sbx + /participant/getProductIdName: + post: + operationId: registry_participant_getproductidname + x-abdm-use-case: Participant registry + tags: + - Participant registry + summary: Get product id and name + description: |- + Retrieving API described as generating the product id and product name; declared with a bare string request body and a participant-code response. + + ### Business purpose + + The OpenAPI document describes this endpoint with the same sentence as /product/getowner, "This API is to generate the product Id and product Name", and it belongs to the payer product lifecycle alongside /product/link, /product/delink and /product/getowner. Its documented purpose is to resolve product identity information within the participant service. The specification is thin: the request body is declared as a bare string, the response is ParticipantCreateResponse (participant_code only), and the operationId participantCreatePost is reused from the participant-creation endpoints, so treat the operationId as non-unique. + + ### When to use + + Use it only where your NHCX instance documents a concrete contract for it, typically when you need product identity resolved from a string key held by the participant service. It plays no part in claim-side workflows and is not listed in either sandbox exit checklist. For resolving a product to its owning payer, /product/getowner has the clearer request schema; for discovering a member's products, use /participant/get/policies. + + ### Preconditions + + - A valid Bearer token from the client-credentials call (POST /get/session, form-urlencoded client_id, client_secret, grant_type=client_credentials); tokens last 1200 seconds, so refresh before expiry. + - HTTP headers Accept: application/json, Content-Type: application/json and bearer_auth: Bearer (the participant service uses bearer_auth, not Authorization). + - Base path for the participant service: https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice (sandbox) or https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice (production). + - This is a synchronous plain-JSON registry call: no JWE envelope, no x-hcx-* protocol headers and no correlation id are involved. + - The request body is declared in the OpenAPI document as a bare JSON string rather than an object; the docs do not say what the string should contain. + - The product concerned should have been registered by its payer through /product/link. + + ### Postconditions + + Returns HTTP 200 with ParticipantCreateResponse, whose only field, participant_code, is optional. No callback follows and no state change is documented. Failures return 400, 404 or 500 with the ErrorResponse envelope. Because the description promises a product id and name while the schema returns a participant code, verify the actual body returned by your instance before depending on either interpretation. + + ### Common mistakes + + - Posting a JSON object when the schema declares a bare string body, or the reverse, and getting a 400. + - Expecting productid and productname fields in the response; the declared response carries only participant_code. + - Confusing it with /product/getowner because both carry the same description. + - Matching on operationId participantCreatePost in generated clients, which collides with the participant-creation operations. + - Omitting the Accept header or the Bearer prefix on bearer_auth. + + ### Best practices + + - Confirm the request and response contract against your instance's live OpenAPI document before integrating. + - Prefer /product/getowner for owner resolution and /participant/get/policies for member products; use this call only where it is specifically required. + - Log both the raw request string and the full response body so the actual behaviour can be reconciled with the specification. + - Keep the Bearer token fresh and retry once on 401. + + ### Related scenario + + A TPA's integration team is generating a client from the participant service OpenAPI document and notices that /participant/getProductIdName shares its operationId with participant creation and its description with /product/getowner. Rather than wire it into the admission flow, they exercise it once in the sandbox with a product key, record the participant_code returned, and decide to rely on /product/getowner and /participant/get/policies for production. The member journey therefore runs link, get policies, InsurancePlan request and preauthorisation without this call. + + ### Specification + + Chapter [Participants and policies](/docs/nhcx/v1/registries) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + _note: + type: string + _body: + type: string + example: + _note: The OpenAPI document declares the request body as a bare JSON string; shown here as the string value that would be posted. + _body: PRD-FLOATER-01 + responses: + "200": + description: Returns HTTP 200 with ParticipantCreateResponse, whose only field, participant_code, is optional. + content: + application/json: + schema: + type: object + properties: + participant_code: + type: string + example: + participant_code: 100234@sbx +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + description: "On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value." + parameters: + BearerAuth: + name: bearer_auth + in: header + required: true + description: It is `bearer_auth`, not `Authorization`, on NHCX's own endpoints. + schema: + type: string + example: Bearer diff --git a/catalogue/openapi/nhcx/v1/nhcx-session.yaml b/catalogue/openapi/nhcx/v1/nhcx-session.yaml new file mode 100644 index 000000000..4f1b7ddf2 --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-session.yaml @@ -0,0 +1,183 @@ +# NHCX session, from the NHCX package's Bruno folder apis/01-session. +# +# Written by the package's system/build-ekadocs.mjs (make ekadocs); change the .bru +# requests there and port again rather than editing this file. +# +# Rules this file follows: catalogue/openapi/CONVENTIONS.md +openapi: 3.1.1 +info: + x-portal: + module: session + label: Session + position: 1 + title: NHCX session + summary: The token does not come from NHCX. + description: |- + The Session calls on the National Health Claims Exchange (NHCX): 1 operation. + + The token does not come from NHCX. + + Guides that use these calls: [Session token](/docs/nhcx/v1/getting-started/session-token). + version: nhcx-v1 + license: + name: MIT + identifier: MIT + contact: + name: NHCX sandbox + url: https://hcxsbx.abdm.gov.in + x-abdm-gateway: nhcx + x-abdm-module: session + x-abdm-phase: 1 + x-abdm-roles: + - provider + - payer +x-abdm-sources: + - file: nhcx-package/apis/01-session + role: upstream + hash: sha256:04dbfe1121fdee8812399abb612d00cac445a312b9a88dc30881f34ce2b1059b + note: The package's Bruno collection, one request per operation. + - file: nhcx-package/baseurl.yaml + role: upstream + hash: sha256:47d8412abbfc53b1e1038410e7980eee029d7b1be5082f4ae6c1d4e16ae0dd0f + note: The sandbox and production hosts. +servers: + - url: https://dev.abdm.gov.in + description: Sandbox, ABDM session token. + - url: https://apis.abdm.gov.in + description: Production. ABDM's published production gateway. Confirm it in your onboarding letter. +tags: + - name: Session + description: The token does not come from NHCX. +security: + - bearerAuth: [] +paths: + /api/hiecm/gateway/v3/sessions: + post: + operationId: session_session_token + x-abdm-use-case: Session + tags: + - Session + summary: Session token + description: |- + Mints the ABDM gateway session token that every NHCX call carries, from the client ID and secret issued for Milestone 1. + + ### Business purpose + + The token does not come from NHCX. It comes from the ABDM gateway, and one token serves every call: the participant service, the use-case endpoints and the status check. Nothing else in this collection works without it, which is why the post-response script below stores it in `token`, so that running this request once arms the rest of the collection. + + ### When to use + + Before the first call, and again whenever the token you hold is more than a few minutes old or any call answers `401`. Build against this v3 address. + + ### Preconditions + + - Milestone 1 is complete and you hold its client ID and secret. + - `REQUEST-ID` is a fresh UUID generated for this call. + - `TIMESTAMP` is the current time in UTC, ISO 8601 with milliseconds and a trailing `Z`, as in `2026-09-04T06:15:51.975Z`, taken from a synchronised system clock. + - `X-CM-ID` is `sbx` on the sandbox. + - The body carries `grantType` `client_credentials`, which the v3 address requires. + + ### Postconditions + + The gateway returns `accessToken`, `expiresIn`, `refreshToken` and `tokenType` `bearer`. On every NHCX call the token goes in `bearer_auth` as `Bearer `. Some pages and the notification endpoint use `Authorization` instead, so this collection sends both with the same value. The documents put the token's life at 300, 1200 and 6000 seconds in different places, so do not rely on any of them. + + ### Common mistakes + + - Reusing a `REQUEST-ID` copied from an example instead of generating a new one. + - A `TIMESTAMP` built by hand or read from a drifted clock, which is refused. + - Omitting `grantType`, as older samples do, which the v3 address rejects. + - Sending the token without the `Bearer ` prefix, the portal's own example of a `401`. + - Retrying a `401` with the same token. It fails the same way. + - Writing the token or the client secret to a log. + + ### Best practices + + - Keep the token together with the time you got it, and fetch a new one before a call if it is more than a few minutes old. + - On any `401`, get a new token and retry that call once. + - Send the token on both `bearer_auth` and `Authorization`. + - Keep the clock synchronised with NTP and let a date library format the timestamp. + + ### Related scenario + + A hospital's integration starts its first eligibility check of the day. It posts this request with a new `REQUEST-ID`, the current UTC `TIMESTAMP` and `X-CM-ID` `sbx`, stores the `accessToken` with the time it arrived, and sends it on the check as `bearer_auth: Bearer `. Later a claim call answers `401 Sender is not authorized to execute the operation`. The integration mints a fresh token, retries the claim once, and it goes through. + + ### Specification + + Chapter [Base URLs](/docs/nhcx/v1/getting-started/base-urls) of the NHCX integration specification. + security: [] + parameters: + - $ref: "#/components/parameters/RequestId" + - $ref: "#/components/parameters/Timestamp" + - $ref: "#/components/parameters/XCmId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + clientId: + type: string + clientSecret: + type: string + grantType: + type: string + example: + clientId: + clientSecret: + grantType: client_credentials + responses: + "200": + description: The gateway returns `accessToken`, `expiresIn`, `refreshToken` and `tokenType` `bearer`. + content: + application/json: + schema: + type: object + properties: + accessToken: + type: string + expiresIn: + type: integer + refreshTokenIn: + type: integer + refreshToken: + type: string + tokenType: + type: string + example: + accessToken: eyJhbGciOiJSUzI1NiIs... + expiresIn: 300 + refreshTokenIn: 300 + refreshToken: eyJhbGciOiJSUzI1NiIs... + tokenType: bearer +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + description: "On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value." + parameters: + RequestId: + name: REQUEST-ID + in: header + required: true + description: "`REQUEST-ID` is a fresh UUID that you generate for every call. Sending the same one twice is the mistake to avoid; generate it, do not copy it from an example." + schema: + type: string + example: + Timestamp: + name: TIMESTAMP + in: header + required: true + description: "`TIMESTAMP` is the current time in UTC, ISO 8601 with milliseconds and a trailing `Z`, as in `2026-09-04T06:15:51.975Z`. A clock that has drifted will be refused, so take the time from the system rather than constructing it by hand. How to produce it in each language is at the end of this chapter." + schema: + type: string + example: + XCmId: + name: X-CM-ID + in: header + required: true + description: "`X-CM-ID` names the environment. It is `sbx` on the sandbox. The mirror and the adapter both use lowercase." + schema: + type: string + example: sbx diff --git a/catalogue/openapi/nhcx/v1/nhcx-status.yaml b/catalogue/openapi/nhcx/v1/nhcx-status.yaml new file mode 100644 index 000000000..841da34e9 --- /dev/null +++ b/catalogue/openapi/nhcx/v1/nhcx-status.yaml @@ -0,0 +1,783 @@ +# NHCX status and search, from the NHCX package's Bruno folder apis/08-status. +# +# Written by the package's system/build-ekadocs.mjs (make ekadocs); change the .bru +# requests there and port again rather than editing this file. +# +# Rules this file follows: catalogue/openapi/CONVENTIONS.md +openapi: 3.1.1 +info: + x-portal: + module: status + label: Status and search + position: 8 + title: NHCX status and search + summary: Asynchronous exchanges lose messages, stall in queues and outlive the shift of the desk operator who started them. + description: |- + The Status and search calls on the National Health Claims Exchange (NHCX): 3 operations, and 3 callbacks you host. + + Asynchronous exchanges lose messages, stall in queues and outlive the shift of the desk operator who started them. + + Guides that use these calls: [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search). + + Production address for the NHCX exchange: shared by NHA after sandbox exit. + version: nhcx-v1 + license: + name: MIT + identifier: MIT + contact: + name: NHCX sandbox + url: https://hcxsbx.abdm.gov.in + x-abdm-gateway: nhcx + x-abdm-module: status + x-abdm-phase: 1 + x-abdm-roles: + - provider + - payer +x-abdm-sources: + - file: nhcx-package/apis/08-status + role: upstream + hash: sha256:e5e337293f9f33700c21ac9873f20c627e22a26e0cbb9338ef46acb6ac3cbfe2 + note: The package's Bruno collection, one request per operation. + - file: nhcx-package/baseurl.yaml + role: upstream + hash: sha256:47d8412abbfc53b1e1038410e7980eee029d7b1be5082f4ae6c1d4e16ae0dd0f + note: The sandbox and production hosts. +servers: + - url: https://apisbx.abdm.gov.in/hcx + description: Sandbox, NHCX exchange. +tags: + - name: Status and search + description: Asynchronous exchanges lose messages, stall in queues and outlive the shift of the desk operator who started them. +security: + - bearerAuth: [] +paths: + /v1/status: + post: + operationId: status_v1_status + x-abdm-use-case: Status and search + tags: + - Status and search + summary: Status check + description: |- + Sender asks NHCX where its own in-flight request stands; the gateway answers request.queued or request.dispatched, and only dispatched yields a callback. + + ### Business purpose + + Asynchronous exchanges lose messages, stall in queues and outlive the shift of the desk operator who started them. The Status API exists so the original sender can find out which side of the exchange is holding a request without resubmitting it and creating a duplicate. It answers the hospital desk's most common question, where is my preauth, by telling it whether the gateway has forwarded the request to the payer at all. Providers, payers and TPAs all benefit because it separates gateway delay from payer delay before anyone escalates. + + ### When to use + + Call it after a submission whose callback has not arrived within your operational tolerance, for example a preauth (workflow 12) or claim (workflow 15) still awaiting its on_submit. It is only for requests you originated; x-hcx-correlation_id carries the x-hcx-api_call_id of the request being checked (the Status sheet: "same as API caller ID of the request that requires a status check"). Send x-hcx-status request.initiated. x-hcx-workflow_id and x-hcx-use_case (New, Enhancement or Resubmit) are optional on this call; x-hcx-ben-abha-id is mandatory. If the reply is request.queued, the payer has never seen the request and no callback will come; if request.dispatched, the payer holds it and will answer on the status callback. + + ### Preconditions + + - You are the original sender of the request being queried and have its api_call_id persisted. + - Valid Bearer token; the request body is a JWE per RFC-7516 like every protocol API. + - The payload inside the JWE is an empty string: no bundle, no Task, no resource. The Status sheet of the requests-and-responses workbook says "Payload should be empty string". The sandbox exit checklists word it as the "encrypted payload of request for which the status is seeking for" and describe no bundle for it. + - Protected header with sender_code, recipient_code, a fresh api_call_id, the original request's api_call_id as correlation_id, an IST timestamp and status request.initiated. + - HTTP headers Accept, Content-Type and bearer_auth. + + ### Postconditions + + The gateway validates the request and returns the protocol status synchronously in the HTTP response: HTTP 202 with a StatusSuccessResponse whose result carries sender_code, recipient_code, entity_type and protocol_status of request.queued or request.dispatched. On request.queued nothing further happens; the original request is still inside NHCX. On request.dispatched the gateway forwards the status request to the recipient, who responds asynchronously on the status callback (named /v1/on_status and /hcx/on_status in different sentences of the source). A 404 against a correlation id you believe you sent strongly suggests the original submission never landed; NHCX-1012 reports no records for the api caller id. + + ### Common mistakes + + - Minting a fresh correlation id for the status call itself instead of setting it to the original request's api_call_id; this is the single most common status-integration error and yields NHCX-1012 or 404. + - Polling in a tight loop; a request.queued answer means the gateway is still working and there is no callback for that branch. + - Resubmitting the original request after a request.queued response, which duplicates it (NHCX-1006). + - Reading the Appendix C lifecycle statuses (request.acknowledged, request.queried, request.complete) as Status API outcomes; the API returns only the two gateway values. + - Querying a correlation id after NHCX deleted it following five failed deliveries; it is gone. + - Querying a request another participant originated; senders may only query their own. + + ### Best practices + + - Persist the correlation id against the case record before every submission so a status check is always possible. + - Use a bounded, spaced schedule tied to the correlation id, then escalate; do not poll aggressively. + - Branch on protocol_status: wait on request.queued, expect the status callback on request.dispatched. + - Use a fresh x-hcx-api_call_id per status call and IST timestamps. + - Treat Status as transport position only; the decision lives in the original on_ callback or a Search for the claim document. + - Implement the status callback and v1/error so both branches of the answer have somewhere to land. + + ### Related scenario + + A hospital's TPA desk submitted a preauth on /v1/preauth/submit at 09:00 and by 13:00 nothing has arrived on /v1/preauth/on_submit. Rather than resubmit, the integration posts /v1/status with the preauth's correlation id. The synchronous reply shows protocol_status request.dispatched, so the request is with the payer, not stuck at the gateway; the desk stops worrying about a lost message and waits for the status callback and the eventual preauth decision. Had the reply been request.queued, the desk would have waited on the gateway and, if the delay persisted, escalated to NHCX support with the correlation id. + + ### Specification + + Chapter [NHCX adapter (Optional)](/docs/nhcx/v1/getting-started/nhcx-adapter) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxMDAwMDA0NDQ2QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: "The gateway validates the request and returns the protocol status synchronously in the HTTP response: HTTP 202 with a StatusSuccessResponse whose result carries sender_code, recipient_code, entity_type and protocol_status of request.queued or request.dispatched." + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 25/08/2026 13:00:00:215 + api_call_id: e5f6a7b8-c9d0-1234-ef01-345678901234 + correlation_id: 11223344-5566-7788-99aa-bbccddeeff00 + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: preauth + protocol_status: request.dispatched + error: + code: "" + message: "" + /v1/search/submit: + post: + operationId: status_v1_search_submit + x-abdm-use-case: Status and search + tags: + - Status and search + summary: Search submit + description: |- + Authorised entity such as NHA or IRDAI sends a Task to retrieve claim information for a case; the payer returns the documents on the search callback. + + ### Business purpose + + Regulators and scheme authorities need to see what was actually claimed and decided for a given case without being a party to the original exchange. The Search API is that privileged pull path: an authorised entity submits a Task naming the case, and the payer supplies the claim documents. It supports oversight, audit and dispute review, and it lets payers answer such requests through the same encrypted, correlated channel as everything else on NHCX. The documented callers are NHA and IRDAI; a provider integration usually implements only the responding side. + + ### When to use + + Use it when an authorised entity needs the claim documents for a known case number, for example during a regulatory audit or a dispute. It is a pull, not a lifecycle step, and sits outside the workflow-code sequence. The protected header's x-hcx-correlation_id carries the correlation id of the request being queried, and x-hcx-status is request.initiated. The result arrives asynchronously on /v1/search/on_submit with task type code=poll; if the search is for a claim document, the callback payload is the ClaimResponse for the reference number. + + ### Preconditions + + - The caller is an entity authorised to search claim information (the source names NHA and IRDAI) and is registered on NHCX with a valid Bearer token. + - Request body is a JWE per RFC-7516 with protocol headers per the ProtocolHeader schema. + - Domain payload is an encrypted Task built per the TaskBundle, with the entity being queried referenced in the about element using the sender's reference id. + - Protected header carries sender_code, recipient_code, a fresh api_call_id, the correlation id of the request being queried, an IST timestamp and status request.initiated. + - HTTP headers Accept, Content-Type and bearer_auth. + + ### Postconditions + + The gateway returns HTTP 202 with a StatusSuccessResponse (timestamp, api_call_id, correlation_id, result with sender_code, recipient_code, entity_type and protocol_status, and error), or 400, 404 or 500 in the same envelope. It forwards the Task to the payer, who responds later on /v1/search/on_submit with the claim document: a ClaimResponse whose basedOn carries the sender's reference id and whose about carries the recipient's reference id and the current status of the response entity. No case state changes; Search only reads. + + ### Common mistakes + + - Using Search as a general status lookup; Status answers where a request is, Search returns documents. + - Sending a CommunicationRequest as the domain payload; Search uses a Task (Status is the one that uses CommunicationRequest). + - Forgetting the about reference with the sender's reference id, leaving the payer with nothing to search for (PAYR-1102 Invalid search parameter requested). + - Minting a new correlation id rather than carrying the one for the request being queried. + - Calling it from a participant that is not an authorised entity; the description scopes it explicitly. + - Expecting the documents in the synchronous 202. + + ### Best practices + + - Reference the case in Task.about using the sender's own reference id and keep it consistent with the correlation id you carry. + - Persist the correlation id so the on_submit result can be matched. + - Use fresh api_call_id values, IST timestamps and request.initiated on the outbound header. + - Handle 404 as a signal that the correlation id is unknown to the gateway, not as a retry trigger. + - Implement v1/error and the on_submit receiver before submitting searches. + + ### Related scenario + + A scheme authority reviewing a grievance about a rejected claim needs the payer's adjudication record. Its integration posts /v1/search/submit with a Task whose about element names the case and whose header carries the claim's correlation id. The gateway acknowledges with 202 and forwards the Task to the payer. The payer's system locates the ClaimResponse for the reference number and returns it on /v1/search/on_submit with basedOn holding the authority's reference and about holding the payer's reference and current status. The authority then compares it with the provider's original /v1/claim/submit bundle. + + ### Specification + + Chapter [NHCX adapter (Optional)](/docs/nhcx/v1/getting-started/nhcx-adapter) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiJOSEExQGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: The gateway returns HTTP 202 with a StatusSuccessResponse (timestamp, api_call_id, correlation_id, result with sender_code, recipient_code, entity_type and protocol_status, and error), or 400, 404 or 500 in the same envelope. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 25/08/2026 14:00:00:098 + api_call_id: f6a7b8c9-d0e1-2345-f012-456789012345 + correlation_id: 33445566-7788-99aa-bbcc-ddeeff001122 + result: + sender_code: 1000004446@hcx + recipient_code: 1518@hcx + entity_type: task + protocol_status: request.queued + error: + code: "" + message: "" + /v1/search/on_submit: + post: + operationId: status_v1_search_on_submit + x-abdm-use-case: Status and search + tags: + - Status and search + summary: Search result callback + description: |- + Callback returning a search result for task type code=poll; for a claim-document search the payload is the ClaimResponse for the reference number. + + ### Business purpose + + This is how a payer answers an authorised entity's search. It completes the oversight loop: the regulator or scheme authority asked for the claim documents for a case, and the payer returns the adjudication record through NHCX rather than by email or portal download. That keeps the answer encrypted, correlated to the original request and auditable. Providers benefit indirectly, because disputes and audits can be resolved from the record of what was actually submitted and decided rather than from reconstructed paperwork. + + ### When to use + + The payer calls it after receiving a /v1/search/submit Task, acknowledging it with 202 within 30 seconds and locating the requested documents. The task type code=poll is the discriminator that tells the recipient this is a search poll and not another Task-driven flow. For a claim document the domain payload is the ClaimResponse for the reference number, with basedOn holding the sender's reference id and about holding the recipient's reference id and the current status. Carry the same x-hcx-correlation_id as the search and a responder status such as response.complete. + + ### Preconditions + + - The inbound search Task was decrypted and its correlation id, status and workflow id captured; the 202 acceptance body was already returned. + - The payer is a registered participant with a valid Bearer token and the requester's certificate for encryption. + - The response is a JWE whose plaintext carries the ClaimResponse (for claim-document searches) with basedOn and about populated as documented; the loosely typed HcxOnSearchBody requires only a type property. + - Protected header echoes the search's x-hcx-correlation_id, carries a fresh api_call_id, an IST timestamp and a responder status. + + ### Postconditions + + The gateway returns HTTP 202 with the StatusSuccessResponse envelope (or 400, 404, 500 in the same shape) and delivers the result to the requester's registered endpoint, which must acknowledge with 202 within 30 seconds. The requester reads the recipient's reference id and the current status of the response entity from the about element. Nothing about the underlying claim changes; the search is read-only. The endpoint is tagged V1.0 APIs-Provider side because the callback is delivered to the provider side of the exchange, with operationId hcxOnSearchPost. + + ### Common mistakes + + - Returning the search result in the synchronous 202 instead of on this callback. + - Minting a new correlation id on the response so the requester cannot match it (NHCX-1010). + - Omitting basedOn or about, or swapping them: basedOn carries the sender's id, about the recipient's id and current status. + - Sending a Task or bare Bundle where the claim-document search expects the ClaimResponse resource. + - Reading the ClaimResponse outcome as approval without checking adjudication; a rejected claim still carries outcome complete. + - Missing the 30-second window on the inbound search, which causes redeliveries. + + ### Best practices + + - Key the search on the sender's reference id from Task.about and echo it in basedOn. + - Populate about with your own reference id and the current status so the requester needs no further call. + - Return 202 to the inbound search first, resolve documents asynchronously, then post this callback. + - Be idempotent on correlation id; the same search may be redelivered up to five times. + - Use a fresh api_call_id, IST timestamp and a responder status from response.complete, response.partial or response.error. + + ### Related scenario + + An insurer receives a search Task from the scheme authority for a claim its TPA rejected last quarter. The gateway-facing endpoint acknowledges with 202, and a worker retrieves the stored ClaimResponse for the reference number. The TPA posts /v1/search/on_submit with the ClaimResponse, basedOn set to the authority's reference id and about set to the insurer's claim id and current status, under the same correlation id as the search. The authority's system acknowledges within 30 seconds and the reviewer compares the adjudication against the provider's original claim and any reprocess Task submitted on /v1/task/submit. + + ### Specification + + Chapter [NHCX adapter (Optional)](/docs/nhcx/v1/getting-started/nhcx-adapter) of the NHCX integration specification. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxNTE4QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: The gateway returns HTTP 202 with the StatusSuccessResponse envelope (or 400, 404, 500 in the same shape) and delivers the result to the requester's registered endpoint, which must acknowledge with 202 within 30 seconds. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 25/08/2026 14:20:00:341 + api_call_id: a7b8c9d0-e1f2-3456-0123-567890123456 + correlation_id: 33445566-7788-99aa-bbcc-ddeeff001122 + result: + sender_code: 1518@hcx + recipient_code: 1000004446@hcx + entity_type: task + protocol_status: request.queued + error: + code: "" + message: "" +webhooks: + v1_status: + post: + operationId: status_webhook_v1_status + x-abdm-triggered-by: status_v1_status + x-abdm-use-case: Webhooks + tags: + - Status and search + summary: Receive status check + description: |- + Hosted by the payer. The exchange posts this message to the `endpoint_url` you registered, at `/v1/status`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Sender asks NHCX where its own in-flight request stands; the gateway answers request.queued or request.dispatched, and only dispatched yields a callback. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - $ref: "#/components/parameters/XHcxCorrelationId" + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxMDAwMDA0NDQ2QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" + v1_search_submit: + post: + operationId: status_webhook_v1_search_submit + x-abdm-triggered-by: status_v1_search_submit + x-abdm-use-case: Webhooks + tags: + - Status and search + summary: Receive search submit + description: |- + Hosted by the payer. The exchange posts this message to the `endpoint_url` you registered, at `/v1/search/submit`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Authorised entity such as NHA or IRDAI sends a Task to retrieve claim information for a case; the payer returns the documents on the search callback. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - $ref: "#/components/parameters/XHcxSenderCode" + - $ref: "#/components/parameters/XHcxRecipientCode" + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + - $ref: "#/components/parameters/XHcxTimestamp" + - $ref: "#/components/parameters/XHcxStatus" + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiJOSEExQGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" + v1_search_on_submit: + post: + operationId: status_webhook_v1_search_on_submit + x-abdm-triggered-by: status_v1_search_on_submit + x-abdm-use-case: Webhooks + tags: + - Status and search + summary: Receive search result callback + description: |- + Hosted by the provider. The exchange posts this message to the `endpoint_url` you registered, at `/v1/search/on_submit`, with the headers and the sealed payload the sender posted. Answer HTTP 202 with the receipt first and process afterwards; [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) has the rules. + + Callback returning a search result for task type code=poll; for a claim-document search the payload is the ClaimResponse for the reference number. + parameters: + - $ref: "#/components/parameters/BearerAuth" + - name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + - name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + - $ref: "#/components/parameters/XHcxApiCallId" + - $ref: "#/components/parameters/XHcxRequestId" + - name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + - $ref: "#/components/parameters/XHcxTimestamp" + - name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: response.complete + - $ref: "#/components/parameters/XHcxBenAbhaId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + payload: + type: string + example: + payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOiIxNTE4QGhjeCJ9.encrypted_key.iv.ciphertext.tag + responses: + "202": + description: Received. The receipt names the message it answers; the answer itself follows as a call of your own. + content: + application/json: + schema: + type: object + properties: + timestamp: + type: string + api_call_id: + type: string + correlation_id: + type: string + result: + type: object + properties: + sender_code: + type: string + recipient_code: + type: string + entity_type: + type: string + protocol_status: + type: string + error: + type: object + properties: + code: + type: string + message: + type: string + example: + timestamp: 04/09/2026 11:46:41:305 + api_call_id: + correlation_id: + result: + sender_code: 1000003538@hcx + recipient_code: 1000004446@hcx + entity_type: preauth + protocol_status: request.queued + error: + code: "" + message: "" +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + description: "On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value." + parameters: + BearerAuth: + name: bearer_auth + in: header + required: true + description: It is `bearer_auth`, not `Authorization`, on NHCX's own endpoints. + schema: + type: string + example: Bearer + XHcxSenderCode: + name: x-hcx-sender_code + in: header + required: true + description: Your participant code. Mandatory on the envelope. + schema: + type: string + example: 1000004446@hcx + XHcxRecipientCode: + name: x-hcx-recipient_code + in: header + required: true + description: The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. + schema: + type: string + example: 1518@hcx + XHcxApiCallId: + name: x-hcx-api_call_id + in: header + required: true + description: Fresh on every message, including responses. Mandatory on the envelope. + schema: + type: string + example: + XHcxRequestId: + name: x-hcx-request_id + in: header + required: false + description: One per originating request. The Open Protocol page marks it Mandatory; the Technical Specifications page marks it Optional. Optional on the envelope. + schema: + type: string + example: + XHcxCorrelationId: + name: x-hcx-correlation_id + in: header + required: true + description: The thread. See the rule below. Mandatory on the envelope. + schema: + type: string + example: + XHcxTimestamp: + name: x-hcx-timestamp + in: header + required: true + description: See the format note below. Mandatory on the envelope. + schema: + type: string + example: + XHcxStatus: + name: x-hcx-status + in: header + required: true + description: Where this message stands. Values below. Mandatory on the envelope. + schema: + type: string + example: request.initiated + XHcxBenAbhaId: + name: x-hcx-ben-abha-id + in: header + required: true + description: The beneficiary's ABHA number. Mandatory on every exchange, including those with no beneficiary in the payload. Mandatory on the envelope. + schema: + type: string + example: "91711234567890" +x-abdm-errors: + notes: "Codes any exchange call can meet are recorded once, in the [Other](/docs/nhcx/v1/api/other) specification: the gateway's NHCX- codes, the standard payer codes, and the reference payer's structure and transport codes. The reference payer's other codes sit with the exchange they reject: coverage eligibility, preauthorisation, claim and insurance plan. [Reading error codes](/docs/nhcx/v1/reference/error-code-guide) explains the code spaces." diff --git a/catalogue/openapi/nhcx/v1/nhcx-usecases.yaml b/catalogue/openapi/nhcx/v1/nhcx-usecases.yaml deleted file mode 100644 index 477df16b2..000000000 --- a/catalogue/openapi/nhcx/v1/nhcx-usecases.yaml +++ /dev/null @@ -1,881 +0,0 @@ -openapi: 3.1.1 -info: - title: NHCX use case endpoints - version: abdm-v3 - summary: The ten claim exchanges, each an action endpoint and its callback. - description: > - Every substantive NHCX exchange is an asynchronous pair. The initiator - posts a sealed message to an action endpoint and gets a receipt. The - responder does its work, then posts the outcome to the matching `on_` - endpoint, and the exchange delivers it to the initiator's registered - bridge URL. - - - Every request body on this service is the same one-field object carrying - a JWE. The exchange reads only the protected header, which is why every - operation below shares one request schema: what separates a - preauthorisation from an enhancement is the workflow code in that header, - not the path and not the body. - - - The `on_` paths appear twice in an integration. You POST to them here to - deliver your answer, and the exchange POSTs the same shape to your own - bridge URL to deliver someone else's. The webhooks section describes that - second half. - contact: - name: NHCX integration support - url: https://hcxsbx.abdm.gov.in/#/documents - email: hcx.integration@nha.gov.in - x-abdm-gateway: nhcx - x-abdm-module: usecases - x-abdm-phase: 1 - x-abdm-roles: [provider, payer, tpa, regulator] -x-abdm-sources: - - file: NHCX-site/documents/AWS(Sandbox) NHCX USECASE Postman Collection.zip - role: upstream - status: not-yet-hashed - note: AWS(Sandbox)-NHCX USECASE POSTMAN COLLECTION, 20 requests. - - url: https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications - role: upstream - status: not-yet-fetched - note: > - NHA publishes a Swagger UI per service on the sandbox portal, one each - for coverage eligibility, preauth, claim, communication, payment, - status, task, search, insurance plan and subscription. The portal warns - that for use case payloads its value-set sheets and code snippets are - the authority rather than the Swagger. - - url: https://hcxsbx.abdm.gov.in/#/documents - role: upstream - status: not-yet-hashed - note: Workflow Status Sheets (18 Aug 2026), for the codes named on each operation. -servers: - - url: https://apisbx.abdm.gov.in/hcx - description: Sandbox use case endpoints -tags: - - name: Coverage eligibility - description: Is this policy in force, what does it cover, and what will a package need. - - name: Insurance plan - description: The policy as data, fetched once per policy and cached. - - name: Preauthorisation - description: Approval before treatment, and the cycle of enhancement, resubmission and query around it. - - name: Claim - description: The request for payment at discharge, and its adjudication. - - name: Task - description: Cancel, reprocess and shortfall, told apart by the Task's code. - - name: Communication - description: The payer's channel for alerts, grievances and changes. - - name: Search - description: Claim lookup by a provider, a regulator or a scheme sponsor. - - name: Predetermination - description: What the payer would pay, without committing anyone. - - name: Payment - description: Notices as money moves, and the provider's acknowledgement. - - name: Status - description: The state of a request already triggered. -paths: - /v1/coverageeligibility/check: - post: - operationId: nhcx_coverageeligibility_check - tags: [Coverage eligibility] - summary: "Coverage eligibility: send the request" - description: > - Ask whether a policy is in force, what it covers, and what a package will need. `purpose` decides which of the four questions is being asked: validation, discovery, benefits or auth-requirements. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: none listed. The check sits alongside registration, code 10, and admission, code 11. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/coverageeligibility/on_check: - post: - operationId: nhcx_coverageeligibility_on_check - tags: [Coverage eligibility] - summary: "Coverage eligibility: deliver the answer" - description: > - Answer an eligibility check with a CoverageEligibilityResponse. The payer may instead answer with a forward instruction, asking the exchange to pass the same request to another payer. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: none listed. The check sits alongside registration, code 10, and admission, code 11. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/insuranceplan/request: - post: - operationId: nhcx_insuranceplan_request - tags: [Insurance plan] - summary: "Insurance plan: send the request" - description: > - Ask a payer for the plan behind a policy. The body is a Task with code `poll`, keyed on policy number and provider ID. Sent once per policy the hospital handles, not once per patient. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: none listed. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/insuranceplan/on_request: - post: - operationId: nhcx_insuranceplan_on_request - tags: [Insurance plan] - summary: "Insurance plan: deliver the answer" - description: > - Answer with the insurance plan, scoped to the requesting provider's empanelment. A scheme plan is package-based and can run to 21 MB; a private insurer's is coverage-based. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: none listed. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/preauth/submit: - post: - operationId: nhcx_preauth_submit - tags: [Preauthorisation] - summary: "Preauthorisation: send the request" - description: > - Submit a preauthorisation, a resubmission, an enhancement, or an answer to a query. All four carry the same Claim bundle with `use` set to `preauthorization`; the workflow code in the header is what tells them apart. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: 12 new, 121 resubmission, 13 enhancement, 19 a query answer under PMJAY; the payer answers 20 received, 21 approved, 23 rejected, 24 queried. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/preauth/on_submit: - post: - operationId: nhcx_preauth_on_submit - tags: [Preauthorisation] - summary: "Preauthorisation: deliver the answer" - description: > - Return the adjudicated preauthorisation as a ClaimResponse. Read `outcome` and the adjudication reason together: `complete` alone means approved or rejected. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: 12 new, 121 resubmission, 13 enhancement, 19 a query answer under PMJAY; the payer answers 20 received, 21 approved, 23 rejected, 24 queried. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/claim/submit: - post: - operationId: nhcx_claim_submit - tags: [Claim] - summary: "Claim: send the request" - description: > - Submit the claim at discharge, or a provisional discharge submission, or an answer to a query on a claim. The same Claim resource as the preauthorisation with `use` switched to `claim`. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: 15 the claim, 151 a query answer, 14 a provisional discharge submission; the payer answers 25 received, 26 approved, 27 queried, 28 in process, 29 forwarded, 291 denied. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/claim/on_submit: - post: - operationId: nhcx_claim_on_submit - tags: [Claim] - summary: "Claim: deliver the answer" - description: > - Return the adjudicated claim. Several interim answers may arrive on one correlation ID before the final one; only the final carries `response.complete`. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: 15 the claim, 151 a query answer, 14 a provisional discharge submission; the payer answers 25 received, 26 approved, 27 queried, 28 in process, 29 forwarded, 291 denied. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/task/submit: - post: - operationId: nhcx_task_submit - tags: [Task] - summary: "Task: send the request" - description: > - One endpoint, several jobs, told apart by the Task's code and reason. Cancel a preauthorisation, reprocess a rejected claim, or claim a shortfall on a partly paid one. A supporting document is mandatory on a reprocess. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: PC01 cancel, 36 reprocess or shortfall; the payer answers 251 acknowledged, 252 approved, 253 rejected, 254 queried, PC02 cancellation done. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/task/on_submit: - post: - operationId: nhcx_task_on_submit - tags: [Task] - summary: "Task: deliver the answer" - description: > - Answer a Task with a Task whose output references a ClaimResponse, read by the same parser as any other decision. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: PC01 cancel, 36 reprocess or shortfall; the payer answers 251 acknowledged, 252 approved, 253 rejected, 254 queried, PC02 cancellation done. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/communication/request: - post: - operationId: nhcx_communication_request - tags: [Communication] - summary: "Communication: send the request" - description: > - The payer's asynchronous channel to the provider. Raise a turnaround-time alert, pass on a grievance, announce a wallet or policy change, ask for information outside a formal query, or acknowledge an arbitration request. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: as carried on the payer's request. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/communication/on_request: - post: - operationId: nhcx_communication_on_request - tags: [Communication] - summary: "Communication: deliver the answer" - description: > - Acknowledge or answer a communication. Send the acknowledgement within the 30 second window whether or not the underlying issue is resolved. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: as carried on the payer's request. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/search/submit: - post: - operationId: nhcx_search_submit - tags: [Search] - summary: "Search: send the request" - description: > - Search claim information across payers. A provider may search only its own cases; a regulator or scheme sponsor may search any. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: none listed. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/search/on_submit: - post: - operationId: nhcx_search_on_submit - tags: [Search] - summary: "Search: deliver the answer" - description: > - Answer a search with the matching ClaimResponse resources. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: none listed. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/predetermination/submit: - post: - operationId: nhcx_predetermination_submit - tags: [Predetermination] - summary: "Predetermination: send the request" - description: > - Ask what the payer would pay for a proposed course of treatment, without committing the provider to deliver it and without reserving a benefit. Reuses the Claim bundle with `use` set to `predetermination`. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: none listed. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/predetermination/on_submit: - post: - operationId: nhcx_predetermination_on_submit - tags: [Predetermination] - summary: "Predetermination: deliver the answer" - description: > - Answer with what the payer would approve. Defined by the specification and never observed in a published payload. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: none listed. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/paymentnotice/request: - post: - operationId: nhcx_paymentnotice_request - tags: [Payment] - summary: "Payment: send the request" - description: > - Tell the provider that money has moved against an approved claim. Three notices can arrive for one case as the transfer progresses, and only the last carries the bank reference. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: 30 initiated, 31 processed, 33 settled; 17 for the acknowledgement. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/paymentnotice/on_request: - post: - operationId: nhcx_paymentnotice_on_request - tags: [Payment] - summary: "Payment: deliver the answer" - description: > - Acknowledge a payment notice. The portal's Payment document puts the acknowledgement here; the PMJAY handbook puts it on /v1/task/submit. Confirm which the payer expects. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: 30 initiated, 31 processed, 33 settled; 17 for the acknowledgement. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/status: - post: - operationId: nhcx_status_check - tags: [Status] - summary: "Status: ask where a request has got to" - description: > - Ask the exchange for the state of a request already triggered, so neither side has to infer what happened from silence. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: none listed. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. - /v1/on_status: - post: - operationId: nhcx_status_on_check - tags: [Status] - summary: "Status: deliver the state" - description: > - Deliver the state of a request back to whoever asked for it. - - - The body is one JSON object with a single `payload` field carrying the - JWE. The exchange answers `202 Accepted` with a receipt; the decision - arrives later on the matching callback. - - - Workflow codes: none listed. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/JWERequest' - responses: - "202": - description: Accepted and queued for the recipient. This is not the decision. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - "400": - description: The envelope failed validation. Nothing about the sealed bundle shows up here. - "401": - description: The token is missing, malformed or expired. Fetch a new one and retry once. -webhooks: - delivery: - post: - operationId: nhcx_webhook_delivery - summary: The exchange delivers a message to your bridge URL - description: > - The exchange POSTs to your registered `endpoint_url` plus the path of - the exchange concerned, so a preauthorisation decision arrives at - `/v1/preauth/on_submit`. Build one handler and route by - path. - - - Answer within 30 seconds with `202` and the receipt, then process. - Anything slower, including a slow `200`, is read as a failed delivery - and retried up to five times before the correlation ID is retired. - - - Two body shapes arrive. `JWEPayload` carries a sealed bundle. - `ProtocolResponse` carries a refusal, with the `x-hcx-` fields in the - clear and the reason in `x-hcx-error_details`. - - - The exchange signs its calls to you with a JWT in the authorisation - header. No published source gives the public key to verify against, - an address to fetch it from, or the name of the header it arrives in, - so build the check and treat a missing key as a deliberate, logged, - temporary state rather than a silent default. - requestBody: - required: true - content: - application/json: - schema: - oneOf: - - $ref: '#/components/schemas/JWERequest' - - $ref: '#/components/schemas/ProtocolResponse' - responses: - "202": - description: Required. Anything else is treated as a failed delivery. - content: - application/json: - schema: - $ref: '#/components/schemas/Receipt' - error: - post: - operationId: nhcx_webhook_error - summary: The exchange reports a message it could not deliver - description: > - Every participant must host `/v1/error`. The exchange calls it to - report a request that could not be delivered after five attempts. - Without it, a sender never learns that its request died. - - - This is the one path that carries neither of the two usual shapes. It - has no `payload` and no `x-hcx-` fields: what arrives is a plain JSON - report whose field names are not published. Store it whole rather - than parsing it against a fixed schema, and still answer `202`. - requestBody: - required: true - content: - application/json: - schema: - type: object - description: An unpublished report shape. Store it whole. - additionalProperties: true - responses: - "202": - description: Required, even though the body is not a shape you recognise. -components: - securitySchemes: - bearer_auth: - type: apiKey - in: header - name: bearer_auth - description: The ABDM session token, prefixed with `Bearer ` and a space. - schemas: - JWERequest: - type: object - required: [payload] - properties: - type: - type: string - const: JWEPayload - description: Present on a delivery to your bridge URL. Not sent on a call to the gateway. - payload: - type: string - description: > - The message as a JWE in compact serialisation: five base64url - parts joined by dots. The protected header carries the `x-hcx-` - routing fields in the clear; the FHIR bundle is sealed with the - recipient's public key and the exchange cannot read it. - - - Use `alg` `RSA-OAEP-256` with `enc` `A256GCM`. One protocol page - says `RSA-OAEP`; the handbook, the samples and the Postman bodies - all say `-256`. - - - The header fields are `x-hcx-sender_code`, - `x-hcx-recipient_code`, `x-hcx-api_call_id`, `x-hcx-request_id`, - `x-hcx-correlation_id`, `x-hcx-workflow_id`, `x-hcx-timestamp`, - `x-hcx-status` and `x-hcx-ben-abha-id`. - example: - payload: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIi.... - ProtocolResponse: - type: object - description: > - A refusal delivered in the clear, when the recipient could not - decrypt the bundle or the bundle failed validation. - required: [type] - properties: - type: - type: string - const: ProtocolResponse - x-hcx-sender_code: {type: string} - x-hcx-recipient_code: {type: string} - x-hcx-api_call_id: {type: string, format: uuid} - x-hcx-correlation_id: {type: string, format: uuid} - x-hcx-workflow_id: {type: string} - x-hcx-timestamp: {type: string} - x-hcx-status: - type: string - const: response.error - x-hcx-entity-type: {type: string} - x-hcx-error_details: - type: object - properties: - code: {type: string} - message: {type: string} - trace: {type: string} - Receipt: - type: object - description: > - The acknowledgement both the exchange and your own callback return. - It says the message was taken in. It is never the decision. - properties: - timestamp: {type: string} - api_call_id: {type: string, format: uuid} - correlation_id: {type: string, format: uuid} - result: - type: object - properties: - sender_code: {type: string} - recipient_code: {type: string} - entity_type: {type: string, example: preauth} - protocol_status: - type: string - enum: [request.queued, request.dispatched, request.error] - error: - type: object - properties: - code: {type: string} - message: {type: string} - example: - timestamp: 04/09/2026 11:46:35:120 - api_call_id: a1b2c3d4-e5f6-4890-abcd-ef1234567890 - correlation_id: 11223344-5566-4788-99aa-bbccddeeff00 - result: - sender_code: 1000004446@hcx - recipient_code: 1000003538@hcx - entity_type: preauth - protocol_status: request.queued - error: - code: "" - message: "" -security: - - bearer_auth: [] diff --git a/site/docs/nhcx/v1/README.md b/site/docs/nhcx/v1/README.md index c025be915..356834701 100644 --- a/site/docs/nhcx/v1/README.md +++ b/site/docs/nhcx/v1/README.md @@ -1,17 +1,16 @@ # NHCX V1 -The sections of this version. Each folder is a sidebar section; `index.md` -here is the landing page readers see first. - -| Folder | Renders as | -| --- | --- | -| `getting-started/` | Overview tab, first section: orientation, onboarding, glossary | -| `registries/` | Overview tab: the registries this gateway touches | -| `concepts/` | Overview tab: core concepts, one page per concept | -| `api/` | API references tab: module guide pages; endpoint pages are generated from the OpenAPI specs | -| `reference/` | API references tab: cross-module reference material | - -Drop a `.md` file in the right folder and it renders. Order pages with -`sidebar_position` in the frontmatter; name and order a folder with -`_category_.json`. +Ported from the NHCX package by its `make ekadocs` target (`system/build-ekadocs.mjs`). +Everything in this folder is replaced on every port, so change the package and port again +rather than editing a page here. +| Folder | Renders as | From the package | +| --- | --- | --- | +| `index.md` | The landing page | `docs/01-Overview/01-Introduction.md` | +| `getting-started/` | Overview tab: the base framework, first to last | `docs/02-Getting Started`, and the glossary | +| `roles/` | Overview tab: one path per role | `docs/03-Building a Provider`, `docs/04-Building a Payer` | +| `registries/` | Overview tab: participants and policies | `docs/01-Overview/03-Participants and Policies.md` | +| `concepts/` | Overview tab: how a claim moves, use cases, workflow codes, PMJAY | `docs/01-Overview` | +| `go-live/` | Overview tab: leaving the sandbox | `docs/07-Go Live` | +| `api/` | API references tab: one module per Bruno folder | `apis/` | +| `reference/` | API references tab: lookups, and the FHIR bundles under `fhir/` | `docs/06-Reference`, `docs/05-FHIR Reference` | diff --git a/site/docs/nhcx/v1/api/README.md b/site/docs/nhcx/v1/api/README.md index 58eeaecf2..b0076a97f 100644 --- a/site/docs/nhcx/v1/api/README.md +++ b/site/docs/nhcx/v1/api/README.md @@ -1,10 +1,5 @@ # API references -Module guide pages live here, one folder per module. The endpoint pages, each -module's `_category_.json` and everything under `endpoints/` are generated -from `catalogue/openapi/nhcx/v1/` on every build; never edit them by hand. - -Hand-written pages for a module (overview `index.md`, `user-journey`, `apis`, -`sequence`) sit in the module's folder next to the generated content and are -ordered by `sidebar_position` (10, 20, 30; generated errors pages use 98). - +One module per folder of the package's Bruno collection. `index.md` in each module is the +overview the port writes. `endpoints/`, `errors.md` and `_category_.json` are generated +from `catalogue/openapi/nhcx/v1/` by the site's build, as for every gateway. diff --git a/site/docs/nhcx/v1/api/adjudicator/index.md b/site/docs/nhcx/v1/api/adjudicator/index.md new file mode 100644 index 000000000..2de01184f --- /dev/null +++ b/site/docs/nhcx/v1/api/adjudicator/index.md @@ -0,0 +1,36 @@ +--- +title: PMJAY adjudicator +sidebar_label: Overview +sidebar_position: 0 +description: "The PMJAY adjudicator calls on NHCX: what each one does, the hosts they go to, and the guides that use them." +verification: unverified +source: nhcx-package/apis/12-adjudicator +generated: true +--- + +# PMJAY adjudicator + +A PMJAY case is not decided over NHCX. + +## Calls + +| Call | Method and path | What it does | +| --- | --- | --- | +| [Adjudicator: role for a case](/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-adjudicator-role) | `POST /pmjay/sbxhcx/nhcxpayerservice/v1/get/user-role` | Asks the NHCX Payer Service which role in the State Health Agency's Transaction Management System holds a PMJAY case, and so which actions may be taken on it next. | +| [Adjudicator: act on a case](/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-adjudicator-process) | `POST /pmjay/hcx/nhcxpayerservice/wrapper/process/case` | Approves, rejects, queries or forwards a PMJAY case in the State Health Agency's Transaction Management System, as the role that currently holds it. | +| [Dummy payer, act on a request](/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-dummy-payer-process-request) | `POST /process/request` | Makes the sandbox dummy payer, participant `1000003538@hcx`, approve, reject or query a pre-authorisation or claim you have submitted, by correlation ID. | +| [Dummy payer, send a payment notice](/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-dummy-payer-paymentnotice-init) | `POST /paymentNotice/init` | Makes the sandbox dummy payer send a payment notice to the provider named, on `/v1/paymentnotice/request`. | + +## Base URLs + +| Environment | Base URL | +| --- | --- | +| Sandbox, Dummy payer. | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer` | + +## Guides that use these calls + +- [Receiving a callback](/docs/nhcx/v1/getting-started/receiving-a-callback) +- [PMJAY sandbox run](/docs/nhcx/v1/roles/provider/pmjay-sandbox-run) +- [PMJAY adjudication APIs](/docs/nhcx/v1/roles/provider/pmjay-adjudication-apis) + +The whole specification, with a request you can send from the page, is the [PMJAY adjudicator API reference](/reference/nhcx-adjudicator). diff --git a/site/docs/nhcx/v1/api/biometric/index.md b/site/docs/nhcx/v1/api/biometric/index.md new file mode 100644 index 000000000..454dc908e --- /dev/null +++ b/site/docs/nhcx/v1/api/biometric/index.md @@ -0,0 +1,36 @@ +--- +title: ABHA biometric authentication +sidebar_label: Overview +sidebar_position: 0 +description: "The ABHA biometric authentication calls on NHCX: what each one does, the hosts they go to, and the guides that use them." +verification: unverified +source: nhcx-package/apis/14-biometric +generated: true +--- + +# ABHA biometric authentication + +PMJAY requires proof that the beneficiary was physically present. + +## Calls + +| Call | Method and path | What it does | +| --- | --- | --- | +| [Biometric auth init](/docs/nhcx/v1/api/biometric/endpoints/biometric-auth-init) | `POST /hcx/abha/biometric/auth/init` | Starts a fingerprint or iris authentication of a PMJAY beneficiary against the ABHA registry and returns the `txnId` the verify call needs. | +| [Biometric auth verify](/docs/nhcx/v1/api/biometric/endpoints/biometric-auth-verify) | `POST /hcx/abha/biometric/auth/verify` | Completes the authentication started by `Biometric auth init` with the captured PID block, and returns the beneficiary's user token, valid thirty minutes. | +| [Biometric auth refresh token](/docs/nhcx/v1/api/biometric/endpoints/biometric-auth-refresh-token) | `GET /hcx/abha/biometric/auth/refresh/token` | Exchanges the refresh token from `Biometric auth verify` for a new thirty-minute user token without a fresh capture. | +| [Face auth init](/docs/nhcx/v1/api/biometric/endpoints/biometric-faceauth-init) | `POST /pmjay/sbxhcx/abdmproxy/abha/biometric/faceauth/init` | Starts a face authentication on the ABDM proxy host and returns the `txnId` the rest of the face flow quotes. | +| [Face auth capture PID](/docs/nhcx/v1/api/biometric/endpoints/biometric-faceauth-capture-pid) | `POST /pmjay/sbxhcx/abdmproxy/abha/biometric/capture/pid` | Polls for the face capture the patient completes in the ABHA app after scanning the QR code for the `txnId` from `Face auth init`. | +| [Face auth verify](/docs/nhcx/v1/api/biometric/endpoints/biometric-faceauth-v2-auth-verify) | `POST /pmjay/sbxhcx/abdmproxy/abha/biometric/v2/auth/verify` | Completes a face authentication with the encrypted Aadhaar number, the Aadhaar-linked mobile and the `txnId`, and returns the beneficiary's user token. | + +## Base URLs + +| Environment | Base URL | +| --- | --- | +| Sandbox. | `https://apisbx.abdm.gov.in` | + +## Guides that use these calls + +- [Biometric authentication](/docs/nhcx/v1/roles/provider/biometric-authentication) + +The whole specification, with a request you can send from the page, is the [ABHA biometric authentication API reference](/reference/nhcx-biometric). diff --git a/site/docs/nhcx/v1/api/claim/index.md b/site/docs/nhcx/v1/api/claim/index.md new file mode 100644 index 000000000..f65ac84cf --- /dev/null +++ b/site/docs/nhcx/v1/api/claim/index.md @@ -0,0 +1,45 @@ +--- +title: Claim +sidebar_label: Overview +sidebar_position: 0 +description: "The Claim calls on NHCX: what each one does, the hosts they go to, and the guides that use them." +verification: unverified +source: nhcx-package/apis/05-claim +generated: true +--- + +# Claim + +The claim is where money actually moves. + +## Calls + +| Call | Method and path | What it does | +| --- | --- | --- | +| [Claim submit](/docs/nhcx/v1/api/claim/endpoints/claim-v1-claim-submit) | `POST /v1/claim/submit` | Provider submits the final itemised Claim bundle (Claim.use claim), or a claim query response or resubmission; NHCX routes it to the payer. | +| [Claim callback](/docs/nhcx/v1/api/claim/endpoints/claim-v1-claim-on-submit) | `POST /v1/claim/on_submit` | Payer returns interim (response.partial) and final (response.complete) ClaimResponseBundles for a claim to the provider via NHCX. | +| [Claim submit (internal) (adapter)](/docs/nhcx/v1/api/claim/endpoints/claim-internal-v1-claim-submit) | `POST /internal/v1/claim/submit` | Internal twin of /v1/claim/submit (operationId claimSubmitPostInternal) with the same JWEPayload body and response set. | +| [Claim callback (internal) (adapter)](/docs/nhcx/v1/api/claim/endpoints/claim-internal-v1-claim-on-submit) | `POST /internal/v1/claim/on_submit` | Internal twin of /v1/claim/on_submit (operationId claimOnSubmitPostInternal) taking the same bare object body. | + +## Callbacks you host + +The exchange posts these to the `endpoint_url` you registered. Answer each with HTTP 202 first. + +| Path | Hosted by | +| --- | --- | +| `/v1/claim/submit` | The payer | +| `/v1/claim/on_submit` | The provider | + +## Base URLs + +| Environment | Base URL | +| --- | --- | +| Sandbox, NHCX exchange. | `https://apisbx.abdm.gov.in/hcx` | + +## Guides that use these calls + +- [Claim request](/docs/nhcx/v1/reference/fhir/claim-request) +- [Claim response](/docs/nhcx/v1/reference/fhir/claim-response) +- [Claim query and answer](/docs/nhcx/v1/reference/fhir/claim-query-and-answer) + +The whole specification, with a request you can send from the page, is the [Claim API reference](/reference/nhcx-claim). diff --git a/site/docs/nhcx/v1/api/communication/index.md b/site/docs/nhcx/v1/api/communication/index.md new file mode 100644 index 000000000..2a4a56434 --- /dev/null +++ b/site/docs/nhcx/v1/api/communication/index.md @@ -0,0 +1,43 @@ +--- +title: Communication +sidebar_label: Overview +sidebar_position: 0 +description: "The Communication calls on NHCX: what each one does, the hosts they go to, and the guides that use them." +verification: unverified +source: nhcx-package/apis/07-communication +generated: true +--- + +# Communication + +Every other NHCX exchange is provider-initiated and expects a matching response. + +## Calls + +| Call | Method and path | What it does | +| --- | --- | --- | +| [Communication request](/docs/nhcx/v1/api/communication/endpoints/communication-v1-communication-request) | `POST /v1/communication/request` | Payer pushes a Task plus Communication bundle to a provider mid-claim: TAT alerts, wallet or policy changes, grievances or extra-information requests. | +| [Communication acknowledgement callback](/docs/nhcx/v1/api/communication/endpoints/communication-v1-communication-on-request) | `POST /v1/communication/on_request` | Provider returns the acknowledgement Task bundle for a payer communication, echoing the reason code and correlation id so the payer can close the loop. | +| [Communication request (internal variant) (adapter)](/docs/nhcx/v1/api/communication/endpoints/communication-internal-v1-communication-request) | `POST /internal/v1/communication/request` | Internal twin of /v1/communication/request: same JWEPayload body, description and 202 envelope, operationId communicationRequestPostInternal. | +| [Communication acknowledgement callback (internal variant) (adapter)](/docs/nhcx/v1/api/communication/endpoints/communication-internal-v1-communication-on-request) | `POST /internal/v1/communication/on_request` | Internal twin of /v1/communication/on_request: the provider acknowledgement Task bundle, operationId communicationOnRequestPostInternal. | + +## Callbacks you host + +The exchange posts these to the `endpoint_url` you registered. Answer each with HTTP 202 first. + +| Path | Hosted by | +| --- | --- | +| `/v1/communication/request` | The provider | +| `/v1/communication/on_request` | The payer | + +## Base URLs + +| Environment | Base URL | +| --- | --- | +| Sandbox, NHCX exchange. | `https://apisbx.abdm.gov.in/hcx` | + +## Guides that use these calls + +- [Communication](/docs/nhcx/v1/reference/fhir/communication) + +The whole specification, with a request you can send from the page, is the [Communication API reference](/reference/nhcx-communication). diff --git a/site/docs/nhcx/v1/api/eligibility/index.md b/site/docs/nhcx/v1/api/eligibility/index.md new file mode 100644 index 000000000..39336436c --- /dev/null +++ b/site/docs/nhcx/v1/api/eligibility/index.md @@ -0,0 +1,44 @@ +--- +title: Coverage eligibility +sidebar_label: Overview +sidebar_position: 0 +description: "The Coverage eligibility calls on NHCX: what each one does, the hosts they go to, and the guides that use them." +verification: unverified +source: nhcx-package/apis/02-eligibility +generated: true +--- + +# Coverage eligibility + +Coverage eligibility is the pre-check a hospital desk runs before committing a patient to a cashless pathway. + +## Calls + +| Call | Method and path | What it does | +| --- | --- | --- | +| [Coverage eligibility check](/docs/nhcx/v1/api/eligibility/endpoints/eligibility-v1-coverageeligibility-check) | `POST /v1/coverageeligibility/check` | Provider asks the payer, via NHCX, whether a beneficiary's policy is in force, what it covers and which documents a preauth will need. | +| [Coverage eligibility callback](/docs/nhcx/v1/api/eligibility/endpoints/eligibility-v1-coverageeligibility-on-check) | `POST /v1/coverageeligibility/on_check` | Payer returns the CoverageEligibilityResponse (policy in force, benefits, auth requirements) or an error to the provider through NHCX. | +| [Coverage eligibility check (internal) (adapter)](/docs/nhcx/v1/api/eligibility/endpoints/eligibility-internal-v1-coverageeligibility-check) | `POST /internal/v1/coverageeligibility/check` | Internal twin of /v1/coverageeligibility/check with the same JWEPayload body and response set; only the operationId differs. | +| [Coverage eligibility callback (internal) (adapter)](/docs/nhcx/v1/api/eligibility/endpoints/eligibility-internal-v1-coverageeligibility-on-check) | `POST /internal/v1/coverageeligibility/on_check` | Internal twin of /v1/coverageeligibility/on_check taking the same bare object body; only the operationId differs. | + +## Callbacks you host + +The exchange posts these to the `endpoint_url` you registered. Answer each with HTTP 202 first. + +| Path | Hosted by | +| --- | --- | +| `/v1/coverageeligibility/check` | The payer | +| `/v1/coverageeligibility/on_check` | The provider | + +## Base URLs + +| Environment | Base URL | +| --- | --- | +| Sandbox, NHCX exchange. | `https://apisbx.abdm.gov.in/hcx` | + +## Guides that use these calls + +- [Coverage eligibility request](/docs/nhcx/v1/reference/fhir/coverage-eligibility-request) +- [Coverage eligibility response](/docs/nhcx/v1/reference/fhir/coverage-eligibility-response) + +The whole specification, with a request you can send from the page, is the [Coverage eligibility API reference](/reference/nhcx-eligibility). diff --git a/site/docs/nhcx/v1/api/index.md b/site/docs/nhcx/v1/api/index.md deleted file mode 100644 index a415b68ed..000000000 --- a/site/docs/nhcx/v1/api/index.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: API references -sidebar_label: All endpoints -sidebar_position: 1 -description: Every operation published for this gateway, module by module. -verification: unverified -source: the published OpenAPI specifications -generated: true ---- - -# API references - -Every endpoint below is generated from the specification that declares it. Each one has its own page with the headers, the body and a request you can send. - -This page lists every module, including any that the role you have chosen does not use. The sidebar shows only yours. - -## NHCX biometric authentication - -6 endpoints across 2 use cases: Fingerprint and iris, Face. Each endpoint has its own page in the sidebar. - -[Read the whole specification](/reference/nhcx-biometric) - -## NHCX session token - -1 endpoint across 1 use case: Sessions. Each endpoint has its own page in the sidebar. - -[Read the whole specification](/reference/nhcx-gateway) - -## NHCX participant service - -12 endpoints across 3 use cases: Onboarding, Discovery, Policy linking. Each endpoint has its own page in the sidebar. - -[Read the whole specification](/reference/nhcx-participant) - -## NHCX use case endpoints - -22 endpoints across 11 use cases: Coverage eligibility, Insurance plan, Preauthorisation, Claim, Task, Communication, Search, Predetermination, Payment, Status, Endpoints. Each endpoint has its own page in the sidebar. - -[Read the whole specification](/reference/nhcx-usecases) - -## Callbacks with no documented trigger - -2 callbacks are declared at module level with no call named against them. Which call produces each one is not documented, so this page does not say. - -| Module | Method | Arrives at | What it carries | -| --- | --- | --- | --- | -| NHCX use case endpoints | POST | [`delivery`](/docs/nhcx/v1/api/nhcx-usecases/endpoints/nhcx-webhook-delivery) | The exchange delivers a message to your bridge URL | -| NHCX use case endpoints | POST | [`error`](/docs/nhcx/v1/api/nhcx-usecases/endpoints/nhcx-webhook-error) | The exchange reports a message it could not deliver | - diff --git a/site/docs/nhcx/v1/api/insurance-plan/index.md b/site/docs/nhcx/v1/api/insurance-plan/index.md new file mode 100644 index 000000000..8be6e67db --- /dev/null +++ b/site/docs/nhcx/v1/api/insurance-plan/index.md @@ -0,0 +1,44 @@ +--- +title: Insurance plan +sidebar_label: Overview +sidebar_position: 0 +description: "The Insurance plan calls on NHCX: what each one does, the hosts they go to, and the guides that use them." +verification: unverified +source: nhcx-package/apis/09-insurance-plan +generated: true +--- + +# Insurance plan + +Policies have traditionally been PDFs that hospital desks interpret by hand, producing ambiguity about benefits, claim conditions and documents, and rework and rejections downstream. + +## Calls + +| Call | Method and path | What it does | +| --- | --- | --- | +| [Insurance plan request](/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-v1-insuranceplan-request) | `POST /v1/insuranceplan/request` | Provider sends a Task with code poll naming a policy number and/or its HFR id to fetch the payer's machine-readable InsurancePlan for that pairing. | +| [Insurance plan callback](/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-v1-insuranceplan-on-request) | `POST /v1/insuranceplan/on_request` | Payer returns the InsurancePlan collection Bundle (InsurancePlan, Organization, optional Questionnaire) under the request correlation id. | +| [Insurance plan request (internal variant) (adapter)](/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-internal-v1-insuranceplan-request) | `POST /internal/v1/insuranceplan/request` | Internal twin of /v1/insuranceplan/request on the insuranceplanhcxservice: same TaskBundle payload, same 202 envelope, distinct operationId. | +| [Insurance plan callback (internal variant) (adapter)](/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-internal-v1-insuranceplan-on-request) | `POST /internal/v1/insuranceplan/on_request` | Internal twin of /v1/insuranceplan/on_request: the payer InsuranceplanBundle callback with identical semantics, distinct operationId. | + +## Callbacks you host + +The exchange posts these to the `endpoint_url` you registered. Answer each with HTTP 202 first. + +| Path | Hosted by | +| --- | --- | +| `/v1/insuranceplan/request` | The payer | +| `/v1/insuranceplan/on_request` | The provider | + +## Base URLs + +| Environment | Base URL | +| --- | --- | +| Sandbox, NHCX exchange. | `https://apisbx.abdm.gov.in/hcx` | + +## Guides that use these calls + +- [Insurance plan request](/docs/nhcx/v1/reference/fhir/insurance-plan-request) +- [Insurance plan response](/docs/nhcx/v1/reference/fhir/insurance-plan-response-overview) + +The whole specification, with a request you can send from the page, is the [Insurance plan API reference](/reference/nhcx-insurance-plan). diff --git a/site/docs/nhcx/v1/api/nhcx-biometric/_category_.json b/site/docs/nhcx/v1/api/nhcx-biometric/_category_.json deleted file mode 100644 index b0cc3412a..000000000 --- a/site/docs/nhcx/v1/api/nhcx-biometric/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "NHCX biometric authentication", - "position": 2 -} diff --git a/site/docs/nhcx/v1/api/nhcx-gateway/_category_.json b/site/docs/nhcx/v1/api/nhcx-gateway/_category_.json deleted file mode 100644 index da8c9bb52..000000000 --- a/site/docs/nhcx/v1/api/nhcx-gateway/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "NHCX session token", - "position": 3 -} diff --git a/site/docs/nhcx/v1/api/nhcx-participant/_category_.json b/site/docs/nhcx/v1/api/nhcx-participant/_category_.json deleted file mode 100644 index cefa78f5f..000000000 --- a/site/docs/nhcx/v1/api/nhcx-participant/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "NHCX participant service", - "position": 4 -} diff --git a/site/docs/nhcx/v1/api/nhcx-usecases/_category_.json b/site/docs/nhcx/v1/api/nhcx-usecases/_category_.json deleted file mode 100644 index e82ff249e..000000000 --- a/site/docs/nhcx/v1/api/nhcx-usecases/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "NHCX use case endpoints", - "position": 5 -} diff --git a/site/docs/nhcx/v1/api/onboarding/index.md b/site/docs/nhcx/v1/api/onboarding/index.md new file mode 100644 index 000000000..4007fac45 --- /dev/null +++ b/site/docs/nhcx/v1/api/onboarding/index.md @@ -0,0 +1,36 @@ +--- +title: Onboarding +sidebar_label: Overview +sidebar_position: 0 +description: "The Onboarding calls on NHCX: what each one does, the hosts they go to, and the guides that use them." +verification: unverified +source: nhcx-package/apis/11-onboarding +generated: true +--- + +# Onboarding + +Nothing moves through NHCX until both the sender and the recipient exist in the participant registry, which the platform treats as the source of truth for who may exchange claims data. + +## Calls + +| Call | Method and path | What it does | +| --- | --- | --- | +| [Participant create (v1)](/docs/nhcx/v1/api/onboarding/endpoints/onboarding-participant-create) | `POST /participant/create` | Creates a participant record in the NHCX registry from a full v1 profile and returns the generated participant_code. | +| [Participant create (v2)](/docs/nhcx/v1/api/onboarding/endpoints/onboarding-v2-participant-create) | `POST /v2/participant/create` | Registry-linked creation: registry type and ID, role codes, endpoint URL and contacts; returns participantid and a transactionid for /validate. | +| [HEM-entity participant create](/docs/nhcx/v1/api/onboarding/endpoints/onboarding-v2-participant-hementity-create) | `POST /v2/participant/hementity/create` | Creates a hospital (HEM-entity) participant from the full empanelment payload (bank, tax, beds, specialities, doctors); returns status and hospitalid. | +| [Validate participant creation](/docs/nhcx/v1/api/onboarding/endpoints/onboarding-validate) | `GET /validate` | Confirms a participant creation by presenting the SMS passcode and the transactionId returned by /v2/participant/create. | +| [Validate participant update](/docs/nhcx/v1/api/onboarding/endpoints/onboarding-update-validate) | `GET /update/validate` | Confirms a participant update by presenting the SMS passcode and the transactionId returned by /v2/participant/update. | + +## Base URLs + +| Environment | Base URL | +| --- | --- | +| Sandbox, Participant service. | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | +| Production. | `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` | + +## Guides that use these calls + +- [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant) + +The whole specification, with a request you can send from the page, is the [Onboarding API reference](/reference/nhcx-onboarding). diff --git a/site/docs/nhcx/v1/api/other/index.md b/site/docs/nhcx/v1/api/other/index.md new file mode 100644 index 000000000..563a75724 --- /dev/null +++ b/site/docs/nhcx/v1/api/other/index.md @@ -0,0 +1,57 @@ +--- +title: Other +sidebar_label: Overview +sidebar_position: 0 +description: "The Other calls on NHCX: what each one does, the hosts they go to, and the guides that use them." +verification: unverified +source: nhcx-package/apis/13-other +generated: true +--- + +# Other + +Claims are often not fully approved first time, for mundane reasons: missing documents, policy interpretation differences, package or pricing discrepancies. + +## Calls + +| Call | Method and path | What it does | +| --- | --- | --- | +| [Task submit (reprocess or cancel)](/docs/nhcx/v1/api/other/endpoints/other-v1-task-submit) | `POST /v1/task/submit` | Provider sends a FHIR Task asking the payer to reprocess a rejected or short-paid claim or to cancel a preauth; Task.code and reasonCode set the intent. | +| [Task callback (reprocess or cancel outcome)](/docs/nhcx/v1/api/other/endpoints/other-v1-task-on-submit) | `POST /v1/task/on_submit` | Payer returns a Task bundle with Task.status completed whose Task.output references a ClaimResponse carrying the reprocess or cancellation outcome. | +| [Task submit (internal variant) (adapter)](/docs/nhcx/v1/api/other/endpoints/other-internal-v1-task-submit) | `POST /internal/v1/task/submit` | Internal twin of /v1/task/submit on the taskhcxservice, operationId hcxTaskPostInternal, with the same JWEPayload Task body and 202 envelope. | +| [Task callback (internal variant) (adapter)](/docs/nhcx/v1/api/other/endpoints/other-internal-v1-task-on-submit) | `POST /internal/v1/task/on_submit` | Internal twin of /v1/task/on_submit (hcxOnTaskPostInternal): the payer Task bundle wrapping the ClaimResponse outcome of a reprocess or cancel. | +| [Notification subscribe](/docs/nhcx/v1/api/other/endpoints/other-v1-notification-subscribe) | `POST /v1/notification/subscribe` | A Beneficiary Service Provider (PHR app) subscribes an ABHA id to notification topics; NHCX persists it synchronously, Last-Linked-Wins per ABHA id. | +| [Notification on_subscribe](/docs/nhcx/v1/api/other/endpoints/other-v1-notification-on-subscribe) | `POST /v1/notification/on_subscribe` | BSP-side subscription acknowledgement; the same name denotes the callback where NHCX pushes claim-event notifications for a subscribed ABHA id. | +| [Delete records (troubleshooting)](/docs/nhcx/v1/api/other/endpoints/other-v1-delete) | `POST /v1/delete` | Internal troubleshooting operation on the claim service that deletes records by correlationid and action; not part of the business transaction flows. | +| [OpenAPI 3 document (status service)](/docs/nhcx/v1/api/other/endpoints/other-v3-api-docs) | `GET /v3/api-docs` | Serves the status service's OpenAPI 3 document, optionally filtered by a group query parameter; a discovery endpoint, not a protocol API. | +| [Swagger 2 document (status service)](/docs/nhcx/v1/api/other/endpoints/other-v2-api-docs) | `GET /v2/api-docs` | Serves the status service's Swagger 2 document, optionally filtered by a group query parameter; a discovery endpoint, not a protocol API. | +| [Swagger resources list](/docs/nhcx/v1/api/other/endpoints/other-swagger-resources) | `GET /swagger-resources` | Lists the Swagger resources (API document locations) exposed by the status service; used by Swagger UI, not by integrations. | +| [Swagger UI configuration](/docs/nhcx/v1/api/other/endpoints/other-swagger-resources-configuration-ui) | `GET /swagger-resources/configuration/ui` | Returns the Swagger UI display configuration for the status service; consumed by Swagger UI, not by integrations. | +| [Swagger security configuration](/docs/nhcx/v1/api/other/endpoints/other-swagger-resources-configuration-security) | `GET /swagger-resources/configuration/security` | Returns the Swagger UI security configuration for the status service; consumed by Swagger UI, not by integrations. | +| [Status callback](/docs/nhcx/v1/api/other/endpoints/other-v1-on-status) | `POST /v1/on_status` | The answer to a status request, delivered to the sender that asked. | +| [Error report (callback)](/docs/nhcx/v1/api/other/endpoints/other-v1-error) | `POST /v1/error` | Where the exchange tells a sender that a request could not be delivered after five attempts. | + +## Callbacks you host + +The exchange posts these to the `endpoint_url` you registered. Answer each with HTTP 202 first. + +| Path | Hosted by | +| --- | --- | +| `/v1/task/submit` | The payer | +| `/v1/task/on_submit` | The provider | +| `/v1/on_status` | The provider | +| `/v1/error` | Every participant | + +## Base URLs + +| Environment | Base URL | +| --- | --- | +| Sandbox, NHCX exchange. | `https://apisbx.abdm.gov.in/hcx` | + +## Guides that use these calls + +- [Cancel, reprocess and shortfall](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall) +- [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search) +- [Notifications and patient apps](/docs/nhcx/v1/reference/notifications-and-patient-apps) + +The whole specification, with a request you can send from the page, is the [Other API reference](/reference/nhcx-other). diff --git a/site/docs/nhcx/v1/api/payment-notice/index.md b/site/docs/nhcx/v1/api/payment-notice/index.md new file mode 100644 index 000000000..ce0d58b15 --- /dev/null +++ b/site/docs/nhcx/v1/api/payment-notice/index.md @@ -0,0 +1,43 @@ +--- +title: Payment notice +sidebar_label: Overview +sidebar_position: 0 +description: "The Payment notice calls on NHCX: what each one does, the hosts they go to, and the guides that use them." +verification: unverified +source: nhcx-package/apis/06-payment-notice +generated: true +--- + +# Payment notice + +Every other flow exchanges decisions; the payment notice is the only one that tells the hospital whether the money actually moved. + +## Calls + +| Call | Method and path | What it does | +| --- | --- | --- | +| [Payment notice request](/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-v1-paymentnotice-request) | `POST /v1/paymentnotice/request` | Payer pushes a Task bundle with PaymentNotice and PaymentReconciliation (amount, TDS, UTR) to the provider via NHCX after approving a claim. | +| [Payment notice request (internal) (adapter)](/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-internal-v1-paymentnotice-request) | `POST /internal/v1/paymentnotice/request` | Internal twin of /v1/paymentnotice/request (operationId paymentNoticeRequestPostInternal) with the same JWEPayload body and response set. | +| [Payment notice acknowledgement](/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-v1-paymentnotice-on-request) | `POST /v1/paymentnotice/on_request` | Provider acknowledges a payment notice with a Task bundle (status completed, output paymentack), closing the payment lifecycle via NHCX. | +| [Payment notice acknowledgement (internal) (adapter)](/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-internal-v1-paymentnotice-on-request) | `POST /internal/v1/paymentnotice/on_request` | Internal twin of /v1/paymentnotice/on_request (operationId paymentNoticeOnRequestPostInternal) with the same JWEPayload body and response set. | + +## Callbacks you host + +The exchange posts these to the `endpoint_url` you registered. Answer each with HTTP 202 first. + +| Path | Hosted by | +| --- | --- | +| `/v1/paymentnotice/request` | The provider | +| `/v1/paymentnotice/on_request` | The payer | + +## Base URLs + +| Environment | Base URL | +| --- | --- | +| Sandbox, NHCX exchange. | `https://apisbx.abdm.gov.in/hcx` | + +## Guides that use these calls + +- [Payment notice and acknowledgement](/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement) + +The whole specification, with a request you can send from the page, is the [Payment notice API reference](/reference/nhcx-payment-notice). diff --git a/site/docs/nhcx/v1/api/preauth/index.md b/site/docs/nhcx/v1/api/preauth/index.md new file mode 100644 index 000000000..e4bd0b242 --- /dev/null +++ b/site/docs/nhcx/v1/api/preauth/index.md @@ -0,0 +1,47 @@ +--- +title: Pre-authorisation +sidebar_label: Overview +sidebar_position: 0 +description: "The Pre-authorisation calls on NHCX: what each one does, the hosts they go to, and the guides that use them." +verification: unverified +source: nhcx-package/apis/03-preauth +generated: true +--- + +# Pre-authorisation + +Pre-authorisation is the provider's formal request for the payer's approval to deliver a specific treatment to a covered beneficiary. + +## Calls + +| Call | Method and path | What it does | +| --- | --- | --- | +| [Pre-authorisation submit](/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-submit) | `POST /v1/preauth/submit` | Provider submits, resubmits, enhances or answers a query on a pre-authorisation Claim bundle (Claim.use preauthorization); NHCX routes it to the payer. Also sent as pre-authorisation enhancement. | +| [Pre-authorisation submit (internal) (adapter)](/docs/nhcx/v1/api/preauth/endpoints/preauth-internal-v1-preauth-submit) | `POST /internal/v1/preauth/submit` | Internal twin of /v1/preauth/submit (operationId preauthSubmitPostInternal) with the same JWEPayload body and response set. | +| [Pre-authorisation callback](/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-on-submit) | `POST /v1/preauth/on_submit` | Payer returns the ClaimResponseBundle for a pre-authorisation (approved, partially approved, queried or rejected) to the provider via NHCX. | +| [Pre-authorisation callback (internal) (adapter)](/docs/nhcx/v1/api/preauth/endpoints/preauth-internal-v1-preauth-on-submit) | `POST /internal/v1/preauth/on_submit` | Internal twin of /v1/preauth/on_submit (operationId preauthOnSubmitPostInternal) with the same JWEPayload body and response set. | + +## Callbacks you host + +The exchange posts these to the `endpoint_url` you registered. Answer each with HTTP 202 first. + +| Path | Hosted by | +| --- | --- | +| `/v1/preauth/submit` | The payer | +| `/v1/preauth/on_submit` | The provider | + +## Base URLs + +| Environment | Base URL | +| --- | --- | +| Sandbox, NHCX exchange. | `https://apisbx.abdm.gov.in/hcx` | + +## Guides that use these calls + +- [Building and sending a JWE](/docs/nhcx/v1/getting-started/building-and-sending-a-jwe) +- [Preauthorisation request](/docs/nhcx/v1/reference/fhir/preauthorisation-request) +- [Preauthorisation response](/docs/nhcx/v1/reference/fhir/preauthorisation-response) +- [Preauthorisation enhancement](/docs/nhcx/v1/reference/fhir/preauthorisation-enhancement) +- [Preauthorisation query and answer](/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer) + +The whole specification, with a request you can send from the page, is the [Pre-authorisation API reference](/reference/nhcx-preauth). diff --git a/site/docs/nhcx/v1/api/predetermination/index.md b/site/docs/nhcx/v1/api/predetermination/index.md new file mode 100644 index 000000000..c19d7202d --- /dev/null +++ b/site/docs/nhcx/v1/api/predetermination/index.md @@ -0,0 +1,41 @@ +--- +title: Predetermination +sidebar_label: Overview +sidebar_position: 0 +description: "The Predetermination calls on NHCX: what each one does, the hosts they go to, and the guides that use them." +verification: unverified +source: nhcx-package/apis/04-predetermination +generated: true +--- + +# Predetermination + +A hospital planning a treatment can learn the benefit a payer would approve for it before the patient is admitted, and plan the admission and the patient's share of the cost around the answer. + +## Calls + +| Call | Method and path | What it does | +| --- | --- | --- | +| [Predetermination request](/docs/nhcx/v1/api/predetermination/endpoints/predetermination-v1-predetermination-submit) | `POST /v1/predetermination/submit` | Provider asks the payer what it would approve for a proposed treatment before committing to a pre-authorisation. | +| [Predetermination callback](/docs/nhcx/v1/api/predetermination/endpoints/predetermination-v1-predetermination-on-submit) | `POST /v1/predetermination/on_submit` | Payer returns its estimate for a predetermination request to the provider: a `ClaimResponse` with `use` `predetermination` and the benefit it would approve. | + +## Callbacks you host + +The exchange posts these to the `endpoint_url` you registered. Answer each with HTTP 202 first. + +| Path | Hosted by | +| --- | --- | +| `/v1/predetermination/submit` | The payer | +| `/v1/predetermination/on_submit` | The provider | + +## Base URLs + +| Environment | Base URL | +| --- | --- | +| Sandbox, NHCX exchange. | `https://apisbx.abdm.gov.in/hcx` | + +## Guides that use these calls + +- [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search) + +The whole specification, with a request you can send from the page, is the [Predetermination API reference](/reference/nhcx-predetermination). diff --git a/site/docs/nhcx/v1/api/registry/index.md b/site/docs/nhcx/v1/api/registry/index.md new file mode 100644 index 000000000..2973db080 --- /dev/null +++ b/site/docs/nhcx/v1/api/registry/index.md @@ -0,0 +1,56 @@ +--- +title: Participant registry +sidebar_label: Overview +sidebar_position: 0 +description: "The Participant registry calls on NHCX: what each one does, the hosts they go to, and the guides that use them." +verification: unverified +source: nhcx-package/apis/10-registry +generated: true +--- + +# Participant registry + +Every NHCX API call, whether a registry lookup, a certificate fetch or a claim submission, is rejected unless it carries a valid Bearer token, so this is the first call any integration makes and... + +## Calls + +| Call | Method and path | What it does | +| --- | --- | --- | +| [Get session token](/docs/nhcx/v1/api/registry/endpoints/registry-get-session) | `POST /get/session` | Exchanges the participant's client_id and client_secret (OAuth 2.0 client credentials) for a Bearer access_token valid for 1200 seconds. | +| [Participant update (v1)](/docs/nhcx/v1/api/registry/endpoints/registry-participant-update) | `POST /participant/update` | Updates a participant's registry record; participant_code and roles are mandatory, every other field (certificate, endpoint, contacts, status) is optional. | +| [Participant certificate and bridge update (v2)](/docs/nhcx/v1/api/registry/endpoints/registry-v2-participant-update) | `POST /v2/participant/update` | Stages a change to a participant encryption certificate and/or endpoint URL; returns a transactionid for passcode confirmation via /update/validate. | +| [Participant search](/docs/nhcx/v1/api/registry/endpoints/registry-participant-search) | `POST /participant/search` | Reads a participant's full registry record by participant_code, including roles, status, encryption_cert and endpoint_url. | +| [Participant details (v2 search)](/docs/nhcx/v1/api/registry/endpoints/registry-participant-details) | `POST /participant/details` | V2 variant of participant search: takes participant_code and returns the matching full registry records. | +| [Fetch participants list](/docs/nhcx/v1/api/registry/endpoints/registry-fetch-participants-list) | `POST /fetch/participants/list` | Payer discovery: lists participants filtered by role, registration date window and optional entity type; the first step of the cashless workflow. | +| [Fetch certificate](/docs/nhcx/v1/api/registry/endpoints/registry-fetch-certs) | `POST /fetch/certs` | Returns a participant's public encryption certificate (PEM X.509 or SPKI key) by participantid; cache it for 24 hours and use it to build the JWE. | +| [Fetch certificate path](/docs/nhcx/v1/api/registry/endpoints/registry-fetch-certs-path) | `POST /fetch/certs/path` | Companion to /fetch/certs: takes the same participantid body and returns a string described as the participant's certificate path. | +| [Update certificate (v2, no passcode)](/docs/nhcx/v1/api/registry/endpoints/registry-v2-update-cert) | `POST /v2/update/cert` | Replaces a participant's public encryption certificate by participantId without passcode validation; the same schema is echoed back on success. | +| [Get linked registry master (internal)](/docs/nhcx/v1/api/registry/endpoints/registry-get-linked-registry-mst) | `POST /get/linked/registry/mst` | Internal-use participant-service operation that fetches the linked registry master; listed in the OpenAPI but not intended for integrators. | +| [Link ABHA number to policies](/docs/nhcx/v1/api/registry/endpoints/registry-participant-link-abha-policy) | `POST /participant/link/abha/policy` | Payer-side write that links a beneficiary's ABHA number and member id to one or more products, so provider policy lookups can find them. | +| [Link ABHA number to policies (V2)](/docs/nhcx/v1/api/registry/endpoints/registry-v2-participant-link-abha-policy) | `POST /V2/participant/link/abha/policy` | V2 variant of the ABHA policy link; same ParticipantLinkAbhaRequest body and ParticipantLinkAbhaResponse as the unversioned call. | +| [Initiate ABHA policy link (v2)](/docs/nhcx/v1/api/registry/endpoints/registry-v2-participant-link-abha-policy-init) | `POST /v2/participant/link/abha/policy/init` | First half of the two-step v2 link: submits the ABHA policy link request, to be confirmed with a passcode via the validate endpoint. | +| [Validate ABHA policy link (v2)](/docs/nhcx/v1/api/registry/endpoints/registry-v2-participant-link-abha-policy-validate) | `GET /v2/participant/link/abha/policy/validate` | Second half of the two-step v2 link: confirms an initiated ABHA policy link with the passcode and transactionId query parameters. | +| [De-link ABHA policies](/docs/nhcx/v1/api/registry/endpoints/registry-participant-delink-abha-policy) | `POST /participant/delink/abha/policy` | Removes specific products from a member's policy link for a payer, keyed on payerid, memberid and the products listed. | +| [De-link ABHA policies (V2)](/docs/nhcx/v1/api/registry/endpoints/registry-v2-participant-delink-abha-policy) | `POST /V2/participant/delink/abha/policy` | V2 variant of the ABHA policy de-link; same ParticipantDeLinkAbhaRequest body and response as the unversioned call. | +| [Get beneficiary policies](/docs/nhcx/v1/api/registry/endpoints/registry-participant-get-policies) | `POST /participant/get/policies` | Looks up the policies linked to a beneficiary by ABHA number, member id or mobile number, returning the payer and product details needed for claims. | +| [Get beneficiary policies (V2)](/docs/nhcx/v1/api/registry/endpoints/registry-v2-participant-get-policies) | `POST /V2/participant/get/policies` | V2 variant of the beneficiary policy lookup; same FetchParticipantPoliciesRequest body and ParticipantListResponse as the unversioned call. | +| [Update ABHA number](/docs/nhcx/v1/api/registry/endpoints/registry-update-abhanumber) | `POST /update/abhanumber` | Replaces a placeholder (dummy) ABHA number with the beneficiary's real ABHA number in the ABHA_AUTH_TRANSACTION table. | +| [Link payer product](/docs/nhcx/v1/api/registry/endpoints/registry-product-link) | `POST /product/link` | Registers a product (product id and name) against a payer's participant code, so that it can be referenced in ABHA policy links. | +| [De-link payer product](/docs/nhcx/v1/api/registry/endpoints/registry-product-delink) | `POST /product/delink` | Removes a product (product id and name) from a payer's participant code in the registry. | +| [Get product owner](/docs/nhcx/v1/api/registry/endpoints/registry-product-getowner) | `POST /product/getowner` | Resolves a product id to the participant code of the payer that owns it. | +| [Get product id and name](/docs/nhcx/v1/api/registry/endpoints/registry-participant-getproductidname) | `POST /participant/getProductIdName` | Retrieving API described as generating the product id and product name; declared with a bare string request body and a participant-code response. | + +## Base URLs + +| Environment | Base URL | +| --- | --- | +| Sandbox, Participant service. | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | +| Production. | `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` | + +## Guides that use these calls + +- [Creating and updating a participant](/docs/nhcx/v1/getting-started/creating-and-updating-a-participant) +- [Finding participants and policies](/docs/nhcx/v1/getting-started/finding-participants-and-policies) +- [Fetching a recipient certificate](/docs/nhcx/v1/getting-started/fetching-a-recipient-certificate) + +The whole specification, with a request you can send from the page, is the [Participant registry API reference](/reference/nhcx-registry). diff --git a/site/docs/nhcx/v1/api/session/index.md b/site/docs/nhcx/v1/api/session/index.md new file mode 100644 index 000000000..c2d0ab6c4 --- /dev/null +++ b/site/docs/nhcx/v1/api/session/index.md @@ -0,0 +1,32 @@ +--- +title: Session +sidebar_label: Overview +sidebar_position: 0 +description: "The Session calls on NHCX: what each one does, the hosts they go to, and the guides that use them." +verification: unverified +source: nhcx-package/apis/01-session +generated: true +--- + +# Session + +The token does not come from NHCX. + +## Calls + +| Call | Method and path | What it does | +| --- | --- | --- | +| [Session token](/docs/nhcx/v1/api/session/endpoints/session-session-token) | `POST /api/hiecm/gateway/v3/sessions` | Mints the ABDM gateway session token that every NHCX call carries, from the client ID and secret issued for Milestone 1. | + +## Base URLs + +| Environment | Base URL | +| --- | --- | +| Sandbox, ABDM session token. | `https://dev.abdm.gov.in` | +| Production. ABDM's published production gateway. Confirm it in your onboarding letter. | `https://apis.abdm.gov.in` | + +## Guides that use these calls + +- [Session token](/docs/nhcx/v1/getting-started/session-token) + +The whole specification, with a request you can send from the page, is the [Session API reference](/reference/nhcx-session). diff --git a/site/docs/nhcx/v1/api/status/index.md b/site/docs/nhcx/v1/api/status/index.md new file mode 100644 index 000000000..8b778e33e --- /dev/null +++ b/site/docs/nhcx/v1/api/status/index.md @@ -0,0 +1,43 @@ +--- +title: Status and search +sidebar_label: Overview +sidebar_position: 0 +description: "The Status and search calls on NHCX: what each one does, the hosts they go to, and the guides that use them." +verification: unverified +source: nhcx-package/apis/08-status +generated: true +--- + +# Status and search + +Asynchronous exchanges lose messages, stall in queues and outlive the shift of the desk operator who started them. + +## Calls + +| Call | Method and path | What it does | +| --- | --- | --- | +| [Status check](/docs/nhcx/v1/api/status/endpoints/status-v1-status) | `POST /v1/status` | Sender asks NHCX where its own in-flight request stands; the gateway answers request.queued or request.dispatched, and only dispatched yields a callback. | +| [Search submit](/docs/nhcx/v1/api/status/endpoints/status-v1-search-submit) | `POST /v1/search/submit` | Authorised entity such as NHA or IRDAI sends a Task to retrieve claim information for a case; the payer returns the documents on the search callback. | +| [Search result callback](/docs/nhcx/v1/api/status/endpoints/status-v1-search-on-submit) | `POST /v1/search/on_submit` | Callback returning a search result for task type code=poll; for a claim-document search the payload is the ClaimResponse for the reference number. | + +## Callbacks you host + +The exchange posts these to the `endpoint_url` you registered. Answer each with HTTP 202 first. + +| Path | Hosted by | +| --- | --- | +| `/v1/status` | The payer | +| `/v1/search/submit` | The payer | +| `/v1/search/on_submit` | The provider | + +## Base URLs + +| Environment | Base URL | +| --- | --- | +| Sandbox, NHCX exchange. | `https://apisbx.abdm.gov.in/hcx` | + +## Guides that use these calls + +- [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search) + +The whole specification, with a request you can send from the page, is the [Status and search API reference](/reference/nhcx-status). diff --git a/site/docs/nhcx/v1/building-a-payer/README.md b/site/docs/nhcx/v1/building-a-payer/README.md deleted file mode 100644 index c12863a6d..000000000 --- a/site/docs/nhcx/v1/building-a-payer/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Building a payer - -The insurer, scheme or TPA side: the queues, the callbacks to host, the answers -to build, the screens each desk works from, and the sandbox exit checklist. - -Order pages with `sidebar_position` in the frontmatter. diff --git a/site/docs/nhcx/v1/building-a-payer/_category_.json b/site/docs/nhcx/v1/building-a-payer/_category_.json deleted file mode 100644 index 7351372b5..000000000 --- a/site/docs/nhcx/v1/building-a-payer/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Building a payer", - "position": 6 -} diff --git a/site/docs/nhcx/v1/building-a-payer/checklist.md b/site/docs/nhcx/v1/building-a-payer/checklist.md deleted file mode 100644 index 614f0a3a7..000000000 --- a/site/docs/nhcx/v1/building-a-payer/checklist.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Payer sandbox checklist -sidebar_label: Payer checklist -description: The fifteen use cases a payer demonstrates to leave the sandbox, the four validations on every response, and where payers go wrong. -verification: unverified -source: NHCX Payer Side Use Cases, Sandbox Exit Process; NHCX-PMJAY-HMIS Test Cases; Sample FHIR bundles; Standard Error Codes; Guidelines for Participant Onboarding, payer onboarding -sidebar_position: 8 ---- - -# Payer sandbox checklist -What a payer has to demonstrate to leave the sandbox, the validations the certification checks on every response, and how to test without a real provider. - -## In short - -- NHA's payer exit process names fifteen use cases, plus `/v1/error` and, for a scheme, biometric validation. -- Four validations are checked on every answering use case. -- There is no dummy provider on the sandbox: build the calling half yourself and point it at your own code. -- The commonest payer mistakes are a missing adjudication reason and an unversioned rate change. - -## The sandbox exit list - -NHA's payer exit process names fifteen use cases. - -| | Use case | Call | Host | -| :---- | :---- | :---- | :---- | -| 1 | Link ABHA with policy | `/participant/link/abha/policy` | | -| 2 | Get policy | `/participant/get/policies` | | -| 3 | De-link ABHA from policy | `/participant/delink/abha/policy` | | -| 4 | Get participant list | `/fetch/participants/list` | | -| 5 | Get public key | `/fetch/certs` | | -| 6 | Get auth token | `/get/session` | | -| 7 | Respond to coverage eligibility | `/v1/coverageeligibility/on_check` | `/v1/coverageeligibility/check` | -| 8 | Respond to insurance plan request | `/v1/insuranceplan/on_request` | `/v1/insuranceplan/request` | -| 9 | Respond to preauthorisation | `/v1/preauth/on_submit` | `/v1/preauth/submit` | -| 10 | Raise communication request | `/v1/communication/request` | `/v1/communication/on_request` | -| 11 | Respond to claim | `/v1/claim/on_submit` | `/v1/claim/submit` | -| 12 | Respond to search | `/v1/search/on_submit` | `/v1/search/submit` | -| 13 | Send payment notice | `/v1/paymentnotice/request` | `/v1/paymentnotice/on_request` | -| 14 | Respond to task request | `/v1/task/on_submit` | `/v1/task/submit` | -| 15 | Get status | `/v1/status` | `/v1/on_status` | - -Plus `/v1/error` and, where the payer is a scheme, the biometric token validation. - -## The four validations on every response - -The checklist repeats them for every answering use case, so the certification will check them on every one: - -1. Payload validates against the NRCeS profiles. -2. `api_call_id` and `correlation_id` are different values. -3. `correlation_id` matches the request being answered. -4. `recipient_code` equals the request's `sender_code`. - -And each answer is prepared one of two ways: a sealed bundle when the request was processed, or a protocol response when it could not be opened or failed validation. - -## Testing without a provider - -There is no dummy provider on the sandbox. The practical route is to build the provider's calling half from Getting Started and the provider section, point it at your own participant code, and drive your queues from it. The 22 sample bundles on the portal give you real PMJAY-shaped requests to feed in: every eligibility purpose, a preauthorisation and its query answer, an enhancement, a cancellation, a claim and its query answer. - -Scenarios to cover, from the test matrix and the FAQ: - -- Eligibility for each purpose; a beneficiary with an exhausted family wallet; a hospital not authorised for the policy. -- Preauthorisation: auto-approve on flags, TAT approve, manual approve, reduce with a note, query and receive the answer, reject with a denial code; enhancement approved and denied; resubmission; cancel before and after payment. -- Claim: approve, reduce, query, in process, forward, reject; each discharge type; `LM100` before surgery. -- Appeal after rejection; shortfall after partial payment, refused before 33; the Committee's answer inside a Task. -- Payment 30, 31, 33 with UTR and TDS; the acknowledgement; a return payment. -- Communication for each reason; the acknowledgement. -- Unspecified, cyclic with per-visit biometrics, newborn and twins, implants within maximums. -- Duplicate requests on one correlation ID; a request while another is in progress; a malformed bundle answered with a protocol response. - -## Where payers go wrong - -- Answering with `outcome = complete` and no adjudication reason, so the provider cannot tell approval from rejection. -- Reusing the request's `api_call_id` as the response's. -- Sending business refusals in the envelope, where the exchange logs them, instead of inside the sealed response. -- Rates changed in the plan master without a version bump, so every provider's next claim looks tampered. -- Sending 33 before the bank has confirmed, which opens the shortfall window early. -- TAT auto-approval firing because the queue was not ordered by time remaining. - -## Exchanges this documentation does not cover - -The workflow sheet defines several families that no NHA document describes beyond their codes. They exist on the network, a participant may receive one, and none is covered here: - -- **Final bill.** 45 submitted, 46 approved, 47 queried, 181 query answered, 491 denied. A settlement stage between claim and payment in schemes that use it. -- **Reimbursement claims.** R15, R151, R26, R27, R28, R291, R122, R252 to R254. The member-reimbursement lifecycle, mirroring the cashless one. -- **Discharge correction.** DC01, DC02. Amending a discharge already submitted. -- **Preauthorisation arbitration.** 41, 42. An appeal against a preauthorisation decision, distinct from claim arbitration. -- **Wallet upgrade.** 34, 35. **Fraud alert.** 38, 39. **Grievance.** G11, G12, G13. Each has its own code pair, although the handbook routes wallet and grievance through the communication channel instead. -- **Claim document query.** 161, and 16 for a preauthorisation resubmission, both in the value set without further description. - -Treat an incoming code from these families as one to log and escalate rather than one to ignore. - -## Before going live - -- Enrolment through the NHA or IRDAI portal with the payer or TPA role, the IRDAI registry ID without leading zeros, and the production certificate and callback address. -- Every policy linked with the correct processor. -- The plan master versioned and published for every empanelled hospital. -- FHIR bundles validated by NRCeS; internal demo; HTC demo. diff --git a/site/docs/nhcx/v1/building-a-provider/README.md b/site/docs/nhcx/v1/building-a-provider/README.md deleted file mode 100644 index 32d9f35fd..000000000 --- a/site/docs/nhcx/v1/building-a-provider/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Building a provider - -The hospital side of the exchange, screen by screen and call by call. Generic -flow first (02 to 06), PMJAY differences in one page (07), then the UI guide, -the sandbox exit checklist, and the record of a live PMJAY sandbox run. - -Order pages with `sidebar_position` in the frontmatter. diff --git a/site/docs/nhcx/v1/building-a-provider/_category_.json b/site/docs/nhcx/v1/building-a-provider/_category_.json deleted file mode 100644 index c0a591e06..000000000 --- a/site/docs/nhcx/v1/building-a-provider/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Building a provider", - "position": 5 -} diff --git a/site/docs/nhcx/v1/building-a-provider/checklist.md b/site/docs/nhcx/v1/building-a-provider/checklist.md deleted file mode 100644 index 5d14b06c3..000000000 --- a/site/docs/nhcx/v1/building-a-provider/checklist.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Provider sandbox checklist -sidebar_label: Provider checklist -description: The thirteen use cases a provider demonstrates to leave the sandbox, what to test first, and where the first week goes wrong. -verification: unverified -source: NHCX Provider Side Use Cases, Sandbox Exit Process; NHCX-PMJAY-HMIS Test Cases; Common Mistakes while implementing through NHCX; NHCX Dummy Payer Implementation; NHCX Guide for Providers; PMJAY Hospital Migration to HMIS via NHCX -sidebar_position: 9 ---- - -# Provider sandbox checklist -What a provider has to demonstrate to leave the sandbox, what to test before asking, and where the first week's failures come from. - -## In short - -- NHA's provider exit process names thirteen use cases, each demonstrated against the dummy payer. -- `/v1/error` is not on the list but is required, and carries neither of the two usual body shapes. -- Test the unhappy paths: duplicate callbacks, unknown correlation IDs, protocol responses, token expiry mid-flow. -- Several workflow-code families exist that no NHA document describes. Log and escalate them rather than ignoring them. - -## The sandbox exit list - -NHA's provider exit process names thirteen use cases. Each must be shown working against the dummy payer in the internal demo, then the HTC demo. - -| | Use case | Call | Host | -| :---- | :---- | :---- | :---- | -| 1 | Get participant list | `/fetch/participants/list` | | -| 2 | Get policy | `/participant/get/policies` | | -| 3 | Get public key | `/fetch/certs` | | -| 4 | Get auth token | `/get/session` | | -| 5 | Check coverage eligibility | `/v1/coverageeligibility/check` | `/v1/coverageeligibility/on_check` | -| 6 | Request insurance plan | `/v1/insuranceplan/request` | `/v1/insuranceplan/on_request` | -| 7 | Preauthorisation submission | `/v1/preauth/submit` | `/v1/preauth/on_submit` | -| 8 | Respond to communication request | `/v1/communication/on_request` | `/v1/communication/request` | -| 9 | Claim submission | `/v1/claim/submit` | `/v1/claim/on_submit` | -| 10 | Claim search | `/v1/search/submit` | `/v1/search/on_submit` | -| 11 | Acknowledge payment notice | `/v1/paymentnotice/on_request` | `/v1/paymentnotice/request` | -| 12 | Reprocess or cancel | `/v1/task/submit` | `/v1/task/on_submit` | -| 13 | Get status | `/v1/status` | `/v1/on_status` | - -Every callback must accept both a `JWEPayload` and a `ProtocolResponse`, and answer with the 202 receipt within 30 seconds. `/v1/error` is not on the list but is required. It is the one path that carries neither of those two shapes: it takes a plain JSON report of an undeliverable request, and must still be answered `202`. - -## Scenarios to test before the demo - -For any payer: - -- Registration; a policy not in force; a limit exhausted. -- Preauthorisation: approve, reduce with a note, query via communication and the answer, reject; enhancement; resubmission; cancel. -- Provisional discharge submission approved, rejected and queried; final claim: approve, reduce, query, in process, forwarded, reject. -- Reprocess after rejection and after a reduced approval; the Task answer parsed as a ClaimResponse. -- Payment 30, 31, 33 and the acknowledgement; a communication of each reason. -- A callback that arrives twice; a callback with an unknown correlation ID; a protocol response. -- Token expiry mid-flow; certificate rotation on the payer side. - -For PMJAY, from the test matrix and the FAQ, in addition: - -- Biometric registration in each of the three modes; the consent fallback; token refresh and expiry. -- Wallet update; registration cancelled. -- Preauthorisation with an implant, with a stratification, with an STG questionnaire; auto-approval on flags; a query answered on the preauthorisation endpoint. -- Discharge in each of the four modes, and the amount calculation for each; `LM100` before surgery. -- Shortfall after partial payment, refused before 33; the Committee path. -- Unspecified procedure; cyclic procedure across several visits; a newborn on the parent's card; twins. - -Under PMJAY, add biometric authentication in all three modes and structured health-information types to the exit list, and expect the PMJAY team demo as an extra step. - -The dummy payer's `process/request` hook drives approve, reject and query on demand; `paymentNotice/init` drives a payment notice. - -## Where the first week goes wrong - -Roughly in the order the portal's own support list has them. Two entries below are reworded from experience rather than quoted, so treat the portal's list as the authority if the two differ: - -1. Wrong status word on a leg of the message. -2. No `/v1/error` endpoint. -3. Callback answering with something other than 202 and the receipt. -4. Envelope headers missing or malformed. -5. Registry ID inside the bundle not matching the participant record. -6. `Accept: application/json` missing. -7. Sending to `payerid` instead of `processingid`. -8. Reusing a correlation ID after an error. -9. Retrying a `401` with the same token. -10. Package code or display not matching the plan, character for character. - -## Exchanges this documentation does not cover - -The workflow sheet defines several families that no NHA document describes beyond their codes. They exist on the network, a participant may receive one, and none is covered here: - -- **Final bill.** 45 submitted, 46 approved, 47 queried, 181 query answered, 491 denied. A settlement stage between claim and payment in schemes that use it. -- **Reimbursement claims.** R15, R151, R26, R27, R28, R291, R122, R252 to R254. The member-reimbursement lifecycle, mirroring the cashless one. -- **Discharge correction.** DC01, DC02. Amending a discharge already submitted. -- **Preauthorisation arbitration.** 41, 42. An appeal against a preauthorisation decision, distinct from claim arbitration. -- **Wallet upgrade.** 34, 35. **Fraud alert.** 38, 39. **Grievance.** G11, G12, G13. Each has its own code pair, although the handbook routes wallet and grievance through the communication channel instead. -- **Claim document query.** 161, and 16 for a preauthorisation resubmission, both in the value set without further description. - -Treat an incoming code from these families as one to log and escalate rather than one to ignore. - -## Before going live - -- FHIR bundles emailed for NRCeS validation and passed. -- Internal demo with NHA, then HTC demo. -- Production participant created through the passcode flow; certificate and callback URL registered; own certificate fetched back and checked. -- Under PMJAY, the HEM-to-participant mapping ticket raised, and staff briefed that in-flight TMS cases finish in TMS; see chapter 07. -- A pilot on a few real cases before switching the whole hospital. diff --git a/site/docs/nhcx/v1/building-a-provider/pmjay-sandbox-run.md b/site/docs/nhcx/v1/building-a-provider/pmjay-sandbox-run.md deleted file mode 100644 index 19e6e811f..000000000 --- a/site/docs/nhcx/v1/building-a-provider/pmjay-sandbox-run.md +++ /dev/null @@ -1,191 +0,0 @@ ---- -title: PMJAY sandbox run -sidebar_label: PMJAY sandbox run -description: What the SHA HP sandbox actually accepted and refused over two days in September 2026, and what each refusal turned out to mean. -verification: verified -source: "the SHCX sandbox run of 5 and 6 September 2026 against `apisbx.abdm.gov.in` and `apisbeta.nha.gov.in`, recorded in the NHCX Adapter's ledger and the provider's exchange ledger; NHCX Payer Service API Workflow Guide for External Integrators; NHCX PMJAY Integration Handbook §4.1 and Appendix A (error codes); Sample FHIR bundles, `preauth/preauth_request.txt`; `apps/reference/provider`, validated with the HL7 validator against ndhm.in 6.5.0" -sidebar_position: 10 ---- - -# PMJAY sandbox run - -Everything before this chapter was written from NHA's documents. This chapter is written from a run against the live NHCX sandbox on 5 and 6 September 2026. In it: the provider participant `1000003463@hcx`, the SHA HP payer `1518@hcx`, the beneficiary `MD5SLS4X5`, the SHA's package master, and the NHCX Payer Service that adjudicates a PMJAY case. It records what the SHA actually accepted and refused, in the order a hospital meets it, and what each refusal turned out to mean. Where this chapter and an earlier one disagree, this one is the evidence. - -On the second day the whole journey went through, over the live sandbox. A pre-authorisation raised in the provider application was accepted, approved at PPD-Trust, enhanced, discharged, claimed, and walked through the claim roles to approval. Nine refusals were met and settled on the way, and each is written up below in the order it arrives. - -## In short - -- Written from a live run against the SHA HP sandbox on 5 and 6 September 2026, end to end to an approved claim. -- Nine refusals were met and settled. Where this page and an earlier one disagree, this one is the evidence. -- `PAYR-1027` is structural: the item needs a FHIR element id, not a different package code. -- A PMJAY case is not decided over NHCX. The integrator drives it through the Payer Service by role. -- The claim goes out under the pre-authorisation's number and bills the package alone. - -## The run in one table - -| Step | Call | What the SHA answered | Where the shape lives | -| :---- | :---- | :---- | :---- | -| Policy search | registry `/participant/get/policies` | The member's cover: `PMJAY for Himachal`, policy `PMJAY/HP/S/G` | | -| Discovery, validation, benefits, auth-requirements | `/v1/coverageeligibility/check` | Answered every time, purpose by purpose; validation says `active` to 2 April 2028 | `apps/reference/provider/coverage/*` | -| Package master | `/v1/insuranceplan/request`, plan Task | `PAYR-1401` for `PMJAY/CH/S/G`; the full master, 1,053 packages, for `PMJAY/HP/S/G` | `apps/reference/provider/insurance` | -| Preauthorisation | `/v1/preauth/submit`, workflow 12 | `PAYR-1027`, then `PAYR-1083`, then `PAYR-1238`, each fixed in turn as below | `apps/reference/provider/preauth/request` | -| Adjudication | Payer Service `get/user-role`, `process/case` | `PPD-Trust` approved the pre-auth and the enhancement; `CEX-Trust`, `CPD-Trust`, `ACO-Trust`, `SHA-Trust` walked the claim to approval | this chapter | -| Enhancement | `/v1/preauth/submit`, workflow 13 | accepted and approved on the same case, ₹1,500 added | `apps/reference/provider/preauth/enhancement` | -| Claim | `/v1/claim/submit`, workflow 15 | accepted, queued, then approved after the role walk | `apps/reference/provider/claim/request` | -| Status enquiry, reprocess | `/v1/task/submit` | refused: `status` and `reprocess` are not combinations the SHA takes | this chapter | - -The coverage and plan flows passed with the reference bundles unchanged. Everything from the pre-authorisation on had something to teach, and the refusals below are in the order they arrive. - -## PAYR-1027: "Invalid item id" means the item has no `id` - -The message reads *Invalid item id found for item in claim component. Hence request will not be processed further.* Every reading of it as a package-code problem was wrong. The same bundle was refused with `MG0111A`, `MG004C` and `MG0105A`, with and without a stratification tier, and with the category as `MG` from the master. It was refused again as the reference bundle itself, byte for byte apart from dates. What the SHA was missing was the FHIR **element id** on each `Claim.item`. - -The NHA sample bundles carry these ids and the reference bundles did not. The payer service reads the Claim's lists by them: - -| Element | `id` | Example | -| :---- | :---- | :---- | -| `Claim` | the claim number | `"id": "PA000247"` | -| `Claim.item[n]` | `Item/n` | `"id": "Item/1"` | -| `Claim.procedure[n]` | `Procedure/n` | `"id": "Procedure/1"` | -| `Claim.supportingInfo[n]` | `SupportingInformation/n` | `"id": "SupportingInformation/3"` | -| `Patient`, `Coverage`, the provider `Organization` | `1` | | -| the payer `Organization` | `2` | | -| `Practitioner`, `Procedure` | their serial | `"id": "1"` | - -With those in place the very same bundle moved past every item check. `PAYR-1028`, *invalid item sequence*, and `PAYR-1029`, *invalid bundle id*, sit in the same block of structural rules. Read them the same way: an element the service addresses by id or sequence is missing that handle, not carrying a wrong value. - -## PAYR-1083: the Practitioner needs an `HPIN` identifier - -*No HPR details found for the practitioner for resource https://nhcx.abdm.gov.in/practitioner. Please send the details in the identifier for Practitioner resource with category code as HPIN.* The reference practitioner carried the HPR id typed `HPID` and the registration number typed `MD`. The SHA looks the doctor up by the identifier typed `HPIN` from `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code`, and the NHA sample carries the same HPR id twice, once as `HPID` and once as `HPIN`, both under `https://hpr.abdm.gov.in`. Send all three: - -```json -"identifier": [ - { "type": { "coding": [{ "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", "code": "HPID", "display": "Healthcare Professional ID (HPID)" }] }, "system": "https://nhcx.abdm.gov.in", "value": "71-5566-2211-8834" }, - { "type": { "coding": [{ "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "MD", "display": "Medical License number" }] }, "system": "https://nhcx.abdm.gov.in", "value": "KMC/2012/22907" }, - { "type": { "coding": [{ "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", "code": "HPIN", "display": "Health Practitioner ID issued by NDHM" }] }, "system": "https://hpr.abdm.gov.in", "value": "71-5566-2211-8834" } -] -``` - -The sandbox did not check the HPR id against the registry; a well-formed 14-digit id was enough. Production may not be as kind. In the same bundle the `careTeam.qualification` went out as a SNOMED specialty concept (`394802001` General medicine) and the `Practitioner.qualification` as a v2-0360 degree code (`MD`), as the reference has them. The SHA did not object to either, and both were free text in the first refused attempt. Treat coding them as prudent rather than proven necessary. - -## PAYR-1238: one live preauthorisation per beneficiary per hospital - -*Beneficiary is having an active preauthorization request at this hospital with reference number PMJAY/HP/S/2024/R2/2026090410000443. Hence the request will not be processed. Kindly cancel the active preauthorization request or raise a claim to proceed.* This is a scheme rule, not a bundle fault, and it will bite any team that shares one sandbox beneficiary across several deployments. The reference number's last sixteen digits, `2026090410000443`, are the SHA's **case id**, and that id is what the Payer Service wants; see the next section. The remedy is either a cancel Task (`PC01`) from the hospital that raised it, or a `Reject` at `PPD-Trust` on the Payer Service. Until one of those happens, every new preauthorisation for that beneficiary at that hospital is refused with this code. The refusal arrives *after* the bundle has passed validation, which is how we know the bundle was right. - -Two earlier refusals are worth naming because they are easy to mistake for bundle faults. `PAYR-1401`, *policy not allowed for the hospital*, on the package master means the policy number is one the hospital is not empanelled under, `PMJAY/CH/S/G` here. Ask again with the beneficiary's own policy from the eligibility answer, `PMJAY/HP/S/G`, and the master arrives. And before any of this, a request whose item had no package code at all, `UNCODED`, was refused with `PAYR-1027` too, because it also had no item id. A package code that is not in the master is a later rule, `PAYR-1248`, which names the code. - -## PAYR-1256 and PAYR-1363: Consent stands in for biometrics - -*Response for Authentication Consent Questionnaire is missing for case number %s. This must be sent if the biometric authentication for patient is not available.* PMJAY authenticates the beneficiary biometrically at admission and again at discharge. A system with no biometric device sends the scheme's own consent questionnaire instead. The questionnaire is the **plan's**: its url and link ids come out of the package master, so they have to be read off the master rather than written into the code. In the SHA HP master they are: - -| Form | `Questionnaire.url` | Questions | -| :---- | :---- | :---- | -| Authentication Consent (pre-authorisation) | `https://payer.gov.in/policy/questionnaire/100024` | `100093` attachment, Medical Superintendent Declaration Form (During Admission); `100095` string, Remarks | -| Discharge Consent (claim) | `https://payer.gov.in/policy/questionnaire/100466` | `135477` attachment, Medical Superintendent Declaration Form (During Discharge) | - -The answers ride exactly as the NHA sample carries them: a `QuestionnaireResponse` naming the questionnaire's url, and a supporting-info entry of category `INF`, code `ODN`, whose `valueReference` points at that response. `PAYR-1363` is the same refusal at the claim, naming the discharge form. - -## PAYR-1019, PAYR-1008 and ERR-PYR-CLM-007: three more on the claim - -**`PAYR-1019`, invalid sequence in supporting info.** Adding the questionnaire entries after the dated ones left them without a `sequence`. Every `supportingInfo` element needs one, numbered from 1 with no gaps, and the numbering has to happen after the list is complete rather than as each piece is built. - -**`PAYR-1008`, invalid content type in attachment for item MB.** The SHA reads `application/pdf`, `application/jpg`, `application/jpeg`, `application/png` and `application/fhir+json`, and nothing else. A generated document sent as `text/plain` is refused, so this application now writes its itemised bill, discharge summary and record extracts as one-page PDFs. - -**`ERR-PYR-CLM-007`, no prior preauthorization or claim record found for case number %s.** The SHA keeps one case per episode and looks the claim up by the number the pre-authorisation was raised under. A claim sent under a number of its own finds no case. The claim goes out under the pre-authorisation's number; the claim row still owns its correlation id, so the answer lands on the right record. - -## PAYR-1245: one conservative Procedure per case - -An enhancement adding a second package coded `Conservative` is refused: *only one conservative procedure can be booked for a case, but received request for 2*. The master's `ProcedureType` decides this, and in the SHA HP master 157 of 200 packages are `Conservative`, 37 `Medical`, 6 `Surgical`. An enhancement on a conservative case has to add a `Medical` package (Acute Haemodialysis `MG072C` went through and was approved at ₹1,500) or an add-on the master flags as enhanceable. - -## The enhancement names no case of its own - -The acknowledgement of an enhancement comes back with `preAuthRef` null: the enhancement is decided on the case its parent opened, and the payer service answers only for that case number. A provider system therefore has to carry the parent's case reference onto the child when it raises one, or its desk call will be refused with *Event Meta Log not found for correlationId*. - -## One request at a time on a case - -`PAYR-1322`, *active instance found for case number %s*, is the rule behind several of the timings above: the scheme takes one request at a time on a case. A claim raised while an enhancement is still queued is refused with it, and the payer service's role lookup still answers `PPD-Trust` because the case has not left the pre-authorisation queue. Two consequences for a provider system: - -- **Read the role before every desk action, and treat a pre-authorisation role on a claim as "not yet".** The role names where the case is, not what you are asking about. -- **The desk refuses an action for a request the exchange has not finished delivering**, with *Event Meta Log not found for correlationId*, and refuses one for a case mid-filing with *Case not found for caseId*. Both mean "try again shortly"; the end-to-end test in `apps/e2e/tests/31-pmjay-happy.spec.ts` retries on exactly those two. - -The SHA also re-queues an enhancement it has been asked to approve, answering `queued` again rather than a verdict, and decides it in its own time. On the run that went end to end the enhancement was approved a minute after the ask; on a later run it was still queued five minutes on. Nothing in the bundle changes that, and a test suite has to report the scheme's pace rather than assert it away. - -## What the sandbox would not take - -Two exchanges this application sends to other payers have no home at PMJAY, and both fail on the same validation: - -- **Status enquiry.** A `Task` coded `status` is refused with `PAYR-1018` (no reason code) and, with one, `PAYR-1008` (*invalid input, code and reason code received … refer to the document*). The scheme's own tables use `status` only for the payment acknowledgement, so where a case stands is read from the payer service's role lookup instead, not asked for over NHCX. -- **Reprocess.** A `Task` coded `reprocess` with reason `partialpayment` on an approved, unpaid claim is refused the same way. The handbook gates a shortfall behind an acknowledged payment notice 33, and the sandbox had sent none, so nothing here proves the shape wrong. It does prove the combination is validated before the case is looked at. - -Both refusals name a document of valid code-and-reason combinations that is not published in the material NHA ships. - -## What the package master decides - -The master the SHA returns for the beneficiary's policy is what the item must be coded from. For `MG0111A` it says: - -| Field | Value | Where it goes on the Claim | -| :---- | :---- | :---- | -| package code and display | `MG0111A`, "Pleural Effusion (Pleural Effusion)" | `item.productOrService`, system `…/ndhm-procedure-code` | -| specialty | `MG`, "General Medicine" | `item.category`, system `…/ndhm-benefit-category` | -| `ProcedureType` | `Conservative` | `Claim.procedure.type`, `https://nhcx.abdm.gov.in/procedure-type`, code `conservative` | -| `StratificationAllowed` | `Y` | whether a ward tier may ride as `item.modifier` | -| stratification tiers | `STRAT006a` Routine Ward 1800, `STRAT006b` HDU 2700, `STRAT006c` ICU without ventilator 3600, `STRAT006d` ICU with ventilator 4500 | `item.modifier.coding`, code and display only, no system | -| `ApprovalNotRequired` | `N` | whether a preauthorisation is needed at all | -| `EnhancementAllowed` | `Y` | whether the package may be added on an enhancement | - -The specialty is the code of the category the master files the package under, exactly as `PAYR-1114` says. A generic category (`GEN`) is wrong for every PMJAY package. The ward the patient is in maps onto the tiers by label. A general, semi-private, private or deluxe bed is the routine ward tier, an HDU bed the HDU tier. An ICU bed is the ICU tier without a ventilator unless the record says otherwise. The amount asked for stays the hospital's own; the tier's rate is what the SHA will pay for it, not what the hospital must claim. - -The master also says what the **claim** may carry. A PMJAY package rate is all-inclusive, so the claim bills the package alone at the whole of what was billed. Room rent, consultations and investigations are not items of their own and would be refused as invalid item codes. The generic flow, where every bill line is an item, stays right for an indemnity payer. - -## Adjudicating on the NHCX payer service - -A PMJAY case is not decided over NHCX. It sits at `request.initiated` until somebody acts on it in the SHA's Transaction Management System. In the sandbox that somebody is the integrator, through two endpoints the *NHCX Payer Service API Workflow Guide for External Integrators* publishes. - -**Token.** Both endpoints take `bearer_auth: Bearer `, and the token is the ordinary ABDM session token: `POST https://dev.abdm.gov.in/api/hiecm/gateway/v3/sessions` with the participant's `clientId`, `clientSecret` and `grantType: client_credentials`, plus `REQUEST-ID`, `TIMESTAMP` and `X-CM-ID: sbx` headers. It lives 1,200 seconds. The gateway that already holds these credentials can hand it out; the NHCX Adapter does at `GET /token`. - -**Who holds the case.** - -``` -POST https://apisbx.abdm.gov.in/pmjay/sbxhcx/nhcxpayerservice/v1/get/user-role -{ "caseid": "2026090410000443", "payerid": "1518" } -→ { "currentuserrole": "PPD-Trust", "errormessage": null } -``` - -`caseid` is the SHA's case id, the sixteen digits at the end of the reference `PMJAY/HP/S/2024/R2/2026090410000443`. It is **not** the hospital's claim number: asked about `PA000239` the service answers `No Data found with the caseid PA000239. Please use the current active case id.` A hospital therefore has to learn the SHA's case id for each preauthorisation it raises. The sandbox gives it out in two places: inside the `PAYR-1238` refusal of the next request, and, once a request is accepted, in the SHA's acknowledgement and status answers on the case. Store it beside the claim number the moment it is seen. - -**Acting on it.** One endpoint, one body, the action spelled as the guide's table has it for the role that currently holds the case: - -``` -POST https://apisbeta.nha.gov.in/pmjay/hcx/nhcxpayerservice/wrapper/process/case -{ - "casenumber": "2026090410000443", "action": "Approve", "usecase": "PREAUTH", - "receivercode": "1518", "sendercode": "1000003463", "memberid": "MD5SLS4X5", - "correlationid": "
", "remarks": "ok" -} -``` - -| Step | Role | Actions | `usecase` | -| :---- | :---- | :---- | :---- | -| preauth | `PPD-Trust` | `Approve`, `Reject`, `Query` | `PREAUTH` | -| claim 1 | `CEX-Trust` | `Forward` | `CLAIM` | -| claim 2 | `CPD-Trust` | `cpdApprove`, `cpdReject`, `Pending` | `CLAIM` | -| claim 3 | Medical Audit Committee | `Approve`, `Reject`, `iQuery` | `Medical Audit Committee` | -| claim 4 | `ACO-Trust` | `Approve`, `Reject`, `Pending` | `CLAIM` | -| claim 5 | `SHA-Trust` | `Approve`, `Reject`, `Pending` | `CLAIM` | -| claim 6 | Claim Review Committee | `Approve`, `Reject`, `Pending` | `Claim Review Committee` | - -Read the role before every action, use the exact spelling, and mint a new correlation id per call. A preauthorisation is one decision; a claim walks all six roles, and the `usecase` changes at the two committees. The decision then comes back to the hospital over NHCX as the `ClaimResponse` on the request's own correlation id, so the desk call and the callback are two halves of one step. - -**The walk, as it ran.** The pre-authorisation was approved at `PPD-Trust` and came back over NHCX as a `ClaimResponse` with `outcome: complete` and a benefit of ₹2,070 against ₹3,300 asked (the SHA prices the package itself). The enhancement was approved on the same case for ₹1,500. The claim was forwarded by `CEX-Trust`, approved by `CPD-Trust` as `cpdApprove`, then by `ACO-Trust` and `SHA-Trust`, after which the role lookup answered with no role at all. The case was decided, and the verdict arrived on the claim's own thread. The Medical Audit Committee and the Claim Review Committee never held this case: the six steps in the guide's table are the roles a case *may* pass through, not a queue every case walks. - -**Reading the role between actions is not optional.** The service moves the case on its own schedule, and the role that answers is the only one whose action names are legal. A cycle that assumes the next step in the table will be refused. - -The provider application in this repository drives both endpoints from the episode screen: `GET /api/preauths/:id/adjudicator`, `POST /api/preauths/:id/adjudicate`, and the same under `/api/claims`. It records every action on its exchange ledger under the family `adjudication`, and gets its token from the adapter's `GET /token`. It stores the SHA's case reference the moment the acknowledgement carries it (`preauths.payer_case_ref`) and addresses the desk by the last segment of it, which is what the whole walk above ran on. - -## What this changes in the earlier chapters - -- **Chapter 05/01, the rules.** Add element ids to every Claim bundle (rule 12) and the `HPIN` identifier to every Practitioner (rule 13). Both are in the reference set under `apps/reference/provider`, which the three applications are held to byte for byte. -- **Chapter 05/06.** The sample's `factor: 0.5`, the `MP` category system and the SNOMED system on the package code are things the SHA tolerates, not things it needs. The reference bundle passed with `factor` 1, category `MG` under `…/ndhm-benefit-category` and the package under `…/ndhm-procedure-code`. -- **Chapter 07 of this part.** The specialty on the item is the master's category code, the ward tier the master's stratification code, the claim the package alone. The four mandatory `MAND…` documents the sample carries were not demanded at submission; expect them to be queried for. -- **The error table.** `PAYR-1027` is structural, not a code lookup, and so are `PAYR-1019` and `PAYR-1029`. `PAYR-1008` is about a content type or a code-and-reason combination, depending on where it lands. -- **Chapter 05/10, the claim.** Under PMJAY the claim carries the pre-authorisation's number, the package alone at the whole amount, the discharge consent questionnaire, and documents in a content type the payer reads. diff --git a/site/docs/nhcx/v1/concepts/README.md b/site/docs/nhcx/v1/concepts/README.md deleted file mode 100644 index 97d322116..000000000 --- a/site/docs/nhcx/v1/concepts/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Core concepts - -One page per concept a developer must hold to integrate with NHCX. Explain -in plain words, link every mention of another concept, endpoint or glossary -term to its page. - diff --git a/site/docs/nhcx/v1/concepts/_category_.json b/site/docs/nhcx/v1/concepts/_category_.json index feb1f299a..543b1dd31 100644 --- a/site/docs/nhcx/v1/concepts/_category_.json +++ b/site/docs/nhcx/v1/concepts/_category_.json @@ -1,4 +1,4 @@ { "label": "Core concepts", - "position": 4 + "position": 5 } diff --git a/site/docs/nhcx/v1/concepts/claim-settlement.md b/site/docs/nhcx/v1/concepts/claim-settlement.md deleted file mode 100644 index b0f24e1db..000000000 --- a/site/docs/nhcx/v1/concepts/claim-settlement.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Claim settlement -sidebar_label: Claim settlement -description: The ten steps of a health insurance claim, the parties to it, and the email-and-portal mechanism NHCX replaces. -verification: unverified -source: NHCX Documentation v1.5.0; NHCX Guide for Providers (NHA) -sidebar_position: 3 ---- - -# Claim settlement - -Claim settlement is the end-to-end process by which a policyholder's or treating hospital's request for payment of medical expenses is evaluated, approved, and fulfilled by the insurance company or its authorised representative. It begins when a formal claim is raised, either cashless at the point of care or as a reimbursement after discharge. It ends when the agreed amount is disbursed to the hospital or refunded to the policyholder. The process involves verifying the validity of the policy, confirming the medical necessity of the treatment, checking the claim against applicable sum assured limits or package rates, and finally releasing payment. A smooth and transparent claim settlement process is central to the value of health insurance, ensuring that policyholders receive the financial protection they were promised without undue delay or documentation burden. - -## In short - -- A claim runs from intimation to payment in ten steps, cashless or as a reimbursement. -- A Provider is the treating hospital's software; a Payer is the insurer's, or a TPA acting for one. -- Today most of this runs over email and some 30-odd insurer portals. -- That model gave traceability per claim, and made handling many insurers a complex affair. - -## What is health insurance? - -Health insurance, or an Insurance Policy, is a contract between an individual and a promisor where the latter pledges to pay the individual's medical bills up to a set limit in case of any ailment. The individual is commonly known as a policyholder or beneficiary, whereas the promisor can be an insurance company acting by itself or on behalf of a government, organisation or corporate entity. It protects personal savings from being drained by unexpected hospital stays, surgeries, and medicines. - -## What is an insurance claim? - -A health insurance claim is a formal request by a policyholder, or by the treating hospital, asking for payment or refund of money for medical care. It goes to an insurance company acting by itself or on behalf of a government, organisation or corporate entity. - -## Types of health insurance claim - -1. **Cashless.** A patient who is a beneficiary of a policy can avail treatment in a hospital without paying any amount out of pocket. That applies where the hospital is under a Preferred Network for the insurance company with an existing agreement executed between them, or is empanelled under a specific scheme governing the policy. The amount of expenses incurred during treatment is capped either by the Sum Assured under the policy or by mutually agreed Package Rates earmarked for a specific medical or surgical procedure. -2. **Reimbursement.** The patient pays the bills directly to the treating hospital and later gets the amount reimbursed by the insurance company upon submission of all relevant documents. This is common practice where the treating hospital is not part of the Preferred Network for that insurance company. NHCX has begun to define reimbursement flows on the network, but this documentation does not cover them yet. - -## Participants - -**Who is a Provider?** -A Provider is the treating hospital providing healthcare services to a patient who is a beneficiary under a policy. The HMIS software that the Provider hospital uses is known as the Provider Application, commonly shortened to just the Provider. - -**Who is a Payer?** -A Payer is the insurance company that has issued the policy and is liable to make payments for medical expenses incurred in treating the policyholder. In some cases independent TPAs act on behalf of an insurance company to settle such medical bills and thereby assume the role of a Payer. Likewise, the software used by a Payer is called the Payer Application, or simply the Payer. - -## Claim settlement process - -This is a two-way communication between the hospital and the insurance company, that is, between Provider and Payer. It concerns the policy, the treatment rendered to the policyholder patient, and the payment of hospital bills upon proper scrutiny of all relevant documents. It starts with the treating hospital conveying to the insurance company an imminent claim for a patient who is to be admitted for treatment. It runs until payment is realised for all expenses incurred while treating that patient. - -The entire journey of claim settlement can be broken down into the following distinct flows or use cases. - -1. **Intimation.** The hospital informs the insurance company that a patient holding one of its policies is about to be treated for the ailments diagnosed. - -2. **Policy verification by the hospital.** The hospital confirms that the patient holds a valid policy from that insurance company, and that the ailments to be treated are covered under it. - -3. **Beneficiary and tie-up verification by the insurer.** The insurance company confirms that a bonafide policyholder has turned up for treatment, and that a proper tie-up is in place with the hospital for providing cashless treatment. - -4. **Treatment plan intimation.** The hospital sets out the plan of treatment, the procedures to be carried out if any, and the expected length of stay necessary for treatment. - -5. **Preauthorisation.** Satisfied with the sanctity of the case, the insurance company sends a preliminary approval, commonly known as Preauthorisation or "PreAuth", authorising the hospital to go ahead with treatment. The patient is thereby admitted. - -6. **Enhancement.** During the course of treatment the hospital may return to the insurance company to notify it that additional procedures may need to be administered, or that an extension of stay is required. This is commonly known as an "Enhancement". - -7. **Discharge and document submission.** On discharge, the hospital submits all necessary documents to the insurance company, including consultation and clinical notes, diagnostic reports, medication details, the discharge summary and all bills. - -8. **Query.** The insurance company may ask for further explanation, or for documents it deems would substantiate the claim and assist its adjudication. Such communication from the insurance company to the hospital is called a "Query". - -9. **Adjudication.** The insurance company carries out a final adjudication and conveys the outcome to the hospital, stating whether the claimed amount is "Granted", "Denied" or "Partially Granted", with reasons. - -10. **Payment.** The insurance company pays the hospital the granted amount and notifies it of the banking transaction, along with other details such as taxation or deductions as applicable. - -```mermaid -sequenceDiagram - box rgb(220,239,227) Provider side - participant H as Hospital - end - box rgb(220,232,245) Payer side - participant I as Insurance company - end - H->>I: 1. Intimation - Note over H: 2. Checks the policy and what it covers - Note over I: 3. Checks the beneficiary and the tie-up - H->>I: 4. Treatment plan - I-->>H: 5. Preauthorisation - H->>I: 6. Enhancement, if the case needs more - H->>I: 7. Discharge and documents - I-->>H: 8. Query, if something is missing - H->>I: Answer to the query - I-->>H: 9. Adjudication: granted, denied or partly granted - I-->>H: 10. Payment and bank details -``` - -## Current mechanism for claim settlement - -Email has been by far the most prevalent practice for exchange of information between hospitals and insurance companies over decades. Tracking and tracing mail correspondence for a large number of patients is a tedious and time-consuming exercise. The absence of any dashboard makes it inconvenient for users at both Provider and Payer ends to identify immediate action items and act upon them. Insurance companies and TPAs have therefore come up with their own individual portals, where hospitals can identify a beneficiary using policy details, fetch basic insurance plans and upload documents. Although this model improved traceability for individual claims, handling policies from different insurance companies across some 30-odd portals makes it a complex affair. diff --git a/site/docs/nhcx/v1/concepts/how-claims-move-on-nhcx.md b/site/docs/nhcx/v1/concepts/how-claims-move-on-nhcx.md new file mode 100644 index 000000000..2ca460588 --- /dev/null +++ b/site/docs/nhcx/v1/concepts/how-claims-move-on-nhcx.md @@ -0,0 +1,156 @@ +--- +title: How claims move on NHCX +sidebar_label: How claims move on NHCX +sidebar_position: 2 +description: End-to-end claim journey in plain language +verification: unverified +source: nhcx-package/docs/01-Overview/02-How Claims Move on NHCX.md +generated: true +--- + +# How claims move on NHCX + +This chapter describes how a health insurance claim moves from point of care to settlement, comparing traditional email-and-portal workflows with the National Health Claims Exchange (NHCX) paradigm. + +--- + +## 1. What Is Claim Settlement? + +Claim settlement is the end-to-end process by which a policyholder's or treating hospital's request for payment of medical expenses is evaluated, approved, and fulfilled by an insurer or State Health Agency (SHA): +- **Cashless Treatment**: The beneficiary receives inpatient care without paying out-of-pocket expenses up to policy limits or package rates, executed between an empanelled hospital (Provider) and the insurer/payer. +- **Reimbursement**: The beneficiary pays the hospital directly upon discharge and subsequently files for reimbursement from the insurer. +- **The Core Participants**: + - **Provider**: The treating hospital and its Hospital Management Information System (HMIS). + - **Payer**: The insurance company, SHA, or Third-Party Administrator (TPA) adjudicating and settling the claim. + - **Exchange**: The NHCX gateway orchestrating routing, security envelopes, protocol audit, and asynchronous delivery. + +--- + +## 2. From Fragmented Portals to a Unified Exchange + +Historically, hospitals interacted with insurers through email correspondence or by logging into 30+ proprietary insurer and TPA portals: +- **Duplication & Cost**: Every insurer required distinct logins, document formats, and upload conventions, creating administrative bottlenecks. +- **Unstructured Scans**: Clinical summaries and bills were transmitted as scanned PDFs or image attachments, requiring manual scrutiny by claim processing doctors and preventing automated adjudication. + +### The NHCX Solution +NHCX operates as a national clearinghouse (analogous to a financial securities exchange or UPI): +1. **Single Connection**: A hospital integrates once with the gateway and immediately reaches all registered insurance companies and state schemes. +2. **Structured FHIR Payloads**: Transactions travel as machine-readable HL7 FHIR Release 4 bundles. Diagnoses (ICD-10), procedures/packages (SNOMED / Scheme masters), observations (LOINC), and itemized tariffs are transmitted as structured data, enabling rules-based auto-adjudication. +3. **End-to-End Encryption**: Payloads are sealed inside JSON Web Encryption (JWE) containers using the recipient's public key; the gateway inspects only routing headers and never sees protected health data. + +--- + +## 3. The Asynchronous Request and Callback Pattern + +Claim decisions cannot be processed synchronously; medical pre-authorisation reviews may require minutes to hours, while complex claim scrutinies may take days. NHCX therefore implements a strict asynchronous two-step exchange for every substantive action: + +1. **Action Request**: The initiator invokes an action endpoint (e.g., `POST /v1/preauth/submit`). + - The exchange validates the envelope headers, verifies the sender, and responds immediately with an **HTTP 202 Accepted receipt**. + - This initial receipt confirms message ingestion into the gateway queue. It is **not** an adjudication decision. +2. **Adjudication Callback**: The recipient decrypts the bundle, processes the business decision, and sends an asynchronous response to the matching callback endpoint (e.g., `POST /v1/preauth/on_submit`). + - The exchange delivers the response to the initiator's registered webhook, which in turn returns an HTTP 202 receipt. + +```mermaid +sequenceDiagram + box Provider side + participant P as Hospital (Provider) + end + box Exchange + participant X as NHCX Gateway + end + box Payer side + participant Y as Insurer / SHA (Payer) + end + P->>X: POST /v1/preauth/submit + X-->>P: 202 Accepted (Receipt: queued & routed) + X->>Y: Delivers encrypted payload + Y-->>X: 202 Accepted + Note over Y: Clinical & financial adjudication + Y->>X: POST /v1/preauth/on_submit (Decision) + X-->>Y: 202 Accepted + X->>P: Delivers decision to Provider callback + P-->>X: 202 Accepted +``` + +--- + +## 4. The 10 Steps of Claim Settlement on NHCX + +The traditional ten stages of claim settlement map directly onto NHCX exchanges. + +### Step 1: Intimation + +Absorbed into eligibility and preauthorisation. There is no separate intimation call; the patient's arrival is declared in the eligibility check or in the preauthorisation. + +### Step 2: Policy verification by the hospital + +On `/v1/coverageeligibility/check`. The provider asks whether the beneficiary's policy is active, in force and within its limits. + +### Step 3: Beneficiary and tie-up verification by the payer + +On `/v1/coverageeligibility/on_check`. The payer confirms member validity, empanelment status and benefit limits in one round trip. + +### Step 4: Treatment plan intimation + +On `/v1/preauth/submit`. The admission and the planned package codes reach the payer. + +### Step 5: Preauthorisation + +On `/v1/preauth/on_submit`. The payer issues the authorisation with its financial limit, and its own case number in `preAuthRef`. + +### Step 6: Enhancement + +On `/v1/preauth/submit` again, with the header `x-hcx-use_case: Enhancement`. The hospital asks for a longer stay or a further surgical package. + +### Step 7: Discharge and document submission + +On `/v1/claim/submit`. The structured discharge summary, operative notes, diagnostic reports and the itemised bill under category `MB`. + +### Step 8: Payer query and resolution + +On `/v1/communication/request` from a private insurer, or on the case's own thread under PMJAY. The payer asks for clinical clarification and the provider answers with supporting evidence. + +### Step 9: Claim adjudication + +On `/v1/claim/on_submit`. The final decision: approved, rejected, or approved with line-item deductions. + +### Step 10: Payment and reconciliation + +On `/v1/paymentnotice/request`. The settlement advice with the bank UTR, TDS and deductions, which the provider acknowledges. + +--- + +## 5. End-to-End Claim Lifecycle Flow + +```mermaid +flowchart TD + + A[Patient Arrives at Hospital] --> B[Coverage Eligibility Check] + B --> C[Fetch Insurance Plan & Tariff Master] + C --> D[Submit Preauthorisation Request] + D --> Q1{Payer Adjudication} + Q1 -- Query Raised --> D3[Answer Query with Documents] --> Q1 + Q1 -- Approved --> E[Inpatient Admission & Treatment] + E --> E2{Case Requires Extension?} + E2 -- Yes --> F[Submit Enhancement Request] --> Q1 + E2 -- No --> G[Discharge Patient & Submit Claim] + G --> Q2{Payer Adjudication} + Q2 -- Query Raised --> G3[Submit Additional Documents] --> Q2 + Q2 -- Decided --> H[Claim Adjudication Decision] + H --> I[Payer Issues Payment Notice with UTR] + I --> J[Hospital Acknowledges Settlement] + H -. Rejected or Partial Shortfall .-> K["Task: Reprocess or Arbitration"] + D -. Voluntary Withdrawal .-> L["Task: Cancel Preauth"] + +``` + +--- + +## 6. What Every Participant Must Implement + +- **The Provider (Hospital HMIS)**: + - Initiates outbound API requests for eligibility, preauthorisation, claim submission, search, and tasks (cancellation, reprocess). + - Hosts inbound callback webhooks for preauth decisions, claim verdicts, payer communications, and payment notices. +- **The Payer (Insurer, SHA, TPA)**: + - Hosts inbound callback endpoints for eligibility checks, plan inquiries, preauthorisations, claims, and tasks. + - Initiates outbound communications, adjudication responses, and payment notices. diff --git a/site/docs/nhcx/v1/concepts/index.md b/site/docs/nhcx/v1/concepts/index.md deleted file mode 100644 index df10fc5dc..000000000 --- a/site/docs/nhcx/v1/concepts/index.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Core concepts -sidebar_label: Core concepts -description: What a claim is made of on NHCX, and the concepts every integration depends on whichever side of the exchange you are building. -verification: unverified -source: NHCX sandbox portal, Technical Specifications and Open Protocol pages; NHCX Integration Handbook v1.0; NHCX FAQs v1.2 -sidebar_position: 1 ---- - -# Core concepts - -The ideas an integration depends on, whichever side of the exchange you are building. Read these -before writing code, and come back to them when a payload or a status word does not behave. - -## In short - -- A claim on NHCX is a FHIR bundle, sealed for one recipient, inside an envelope the exchange routes but cannot read. -- Every substantive exchange is a request and a callback, never a synchronous answer. -- A workflow code in the header says which step a message is; a status word says how far along it is. -- PMJAY runs the same endpoints as any payer, with its own rules layered over them. - -## The pages here - -| Page | What it covers | -| --- | --- | -| [What NHCX is](/docs/nhcx/v1/concepts/what-nhcx-is) | The exchange, its five objectives, its three rulebooks, who is on it, and what changes for a hospital that joins | -| [Claim settlement](/docs/nhcx/v1/concepts/claim-settlement) | The ten steps of a health insurance claim, and the email-and-portal mechanism NHCX replaces | -| [The NHCX way](/docs/nhcx/v1/concepts/nhcx-way-of-claim-settlement) | How those ten steps become six exchanges, and the request-and-callback pattern underneath them | -| [JWE, status and errors](/docs/nhcx/v1/concepts/jwe-status-and-errors) | The envelope and the sealed letter, every header field, the status words, and what to send where sources disagree | -| [PMJAY on NHCX](/docs/nhcx/v1/concepts/pmjay-on-nhcx) | What changes when the payer is PMJAY, and the five stages of an integrator's journey | -| [PMJAY scheme rules](/docs/nhcx/v1/concepts/pmjay-scheme-rules) | Unspecified, cyclic, medical, newborn, implant and stratification cases, and what each does to a bundle | - -## Next - -- [Get started](/docs/nhcx/v1/getting-started), the base framework every participant builds -- [Workflow codes](/docs/nhcx/v1/exchanges/workflow-codes), every code with the status word it expects -- [Registries](/docs/nhcx/v1/registries), who is registered on NHCX diff --git a/site/docs/nhcx/v1/concepts/jwe-status-and-errors.md b/site/docs/nhcx/v1/concepts/jwe-status-and-errors.md index 1ca262a86..7fbc9c052 100644 --- a/site/docs/nhcx/v1/concepts/jwe-status-and-errors.md +++ b/site/docs/nhcx/v1/concepts/jwe-status-and-errors.md @@ -1,24 +1,17 @@ --- title: JWE, status and errors sidebar_label: JWE, status and errors -description: The envelope and the sealed letter, every header field, the status words, receipts, and what to send when the sources disagree. +sidebar_position: 4 +description: Envelope/letter model, cross-gateway relay, unified correlation ID, status lifecycle (`request.stopped`) verification: unverified -source: NHCX sandbox portal, Technical Specifications, Message Security and API Security pages; API Response Handling to avoid Failures; Common Mistakes while implementing through NHCX; Standard Error Codes (Aug 2026); Workflow Status Sheets (Aug 2026); NHCX Integration Handbook v1.0; NHCX FAQs v1.2 -sidebar_position: 5 +source: nhcx-package/docs/01-Overview/04-JWE, Status and Errors.md +generated: true --- # JWE, status and errors The previous chapter got you onto the network. This one is about what a message is, how to tell where it is in its life, and what to do when it is refused. None of it belongs to any single use case, and all of it applies to every one. -## In short - -- A message is a sealed letter inside an addressed envelope. The exchange reads the envelope only. -- A wrong envelope is refused at once; a wrong letter is refused later, on the callback. -- The workflow code says which step a message is; the status word says how far along it is. -- The correlation ID is the thread. Reusing one after an error is how a retry goes nowhere. -- Where the published sources contradict each other, one table here settles what to send. - ## Envelope and letter Picture a sealed letter inside an addressed envelope. @@ -33,7 +26,13 @@ This split explains a pattern that runs through the rest of the documentation. I ## One exchange or several -NHCX is designed so that there can be more than one instance of it, each with its own participants, relaying messages between them when a sender and receiver are on different ones. This is why a participant's address carries the exchange name after the `@`, as in `1518@hcx` or `100001@sbx`. For a hospital talking to a payer on the same exchange, none of this is visible. It matters only in that the address format is fixed and should not be shortened. +NHCX is designed so that more than one exchange instance can run, and messages can be relayed between them. A participant's address carries the instance after the `@`, as in `1518@hcx`. When a hospital and its payer are on the same instance, that instance delivers the message. When they are on different instances, the hospital's instance relays it to the payer's. Each instance does its own registry lookup, validation, audit and routing, and the answer, the payment notice and its acknowledgement come back the same way. An exchange that relays is a participant with the role `HIE/HIO.NHCX`, and it cannot see the payload. + +The Technical Specifications appendix names three cases that need a relay: + +1. The provider is on one instance and the payer for the policy's scheme is on another. +2. A beneficiary is treated in a network hospital in another state, and that hospital is on a different instance from the payer. +3. A top-up case, where the primary insurance is handled by a payer on one instance and the secondary insurance by a payer on another. ## Every field on the envelope @@ -49,22 +48,26 @@ The format is JWE, and every NHCX field on it starts with `x-hcx-`. | `workflow_id` | Which step of the claim this is. The codes are listed in the Workflow Codes chapter. | | `timestamp` | When it was sent. | | `status` | Whether this is a request going out or an answer coming back, and how far along. | -| `ben-abha-id` | The beneficiary's ABHA number, without hyphens. | -| `error_details`, `debug_details`, `debug_flag` | Used only when something has gone wrong. | +| `ben-abha-id` | The beneficiary's ABHA number, without hyphens. Mandatory on every exchange, including those with no beneficiary in the payload. | +| `use_case` | Optional, and the field that distinguishes an enhancement from a resubmission at the protocol layer. The permitted values differ by exchange: `New`, `Enhancement` or `Resubmit` on preauthorisation and status, `New` or `Resubmit` on a claim. | +| `error_details`, `debug_details`, `debug_flag` | Used only when something has gone wrong. The specification gives `debug_flag` as `Error`, `Info` or `Debug`; the workbook and the samples send `INFO`. Envelope Fields says which to send. | Two more fields, `alg` and `enc`, name the encryption used. The specification says `RSA-OAEP` with `A256GCM`; the handbook and the live samples use `RSA-OAEP-256`. Follow the samples. The serialisation is contested too. The message-security page says to assemble the result in flattened JSON serialisation; the FAQ and the handbook both say compact serialisation, the five-part dot-separated string, and every sample is compact. Build compact. -**Domain headers** are a few facts written on the outside of the envelope for the exchange's records, such as the amount claimed, so it can keep an audit trail without opening the letter. Each use case says which facts it allows. +**Domain headers** are a few facts written on the outside of the envelope for the exchange's records, such as the amount claimed, so it can keep an audit trail without opening the letter. Envelope Fields gives their naming convention and the ones the sources name. ## The same conversation -Three of the numbers above are unique identifiers in the UUID format. `api_call_id` is new every time. `request_id` is new per request. `correlation_id` is the one to be careful with. +Three of the numbers above are unique identifiers in the UUID format. `api_call_id` is new every time. `request_id` is new per request. `correlation_id` is the thread that ties an entire transaction together. -The correlation ID is the thread. The initiator picks it when a conversation starts, the responder copies it back on the answer, and the exchange pairs the two. +The correlation ID rule is unified and consistent across the network: +1. **On an outbound request**: The initiator sets `correlation_id = api_call_id`. +2. **On an inbound response**: The responder echoes the request's `correlation_id` (which equals the request's `api_call_id`) while generating a brand-new `api_call_id` for the response itself. +3. **On a status query (`/v1/status`)**: The caller sets `correlation_id` to the specific `api_call_id` of the target transaction being checked. -The sandbox exit checklists, which are what an integrator is certified against, state the rule differently. On a response, the correlation ID should be the **API call ID** of the request being answered, and it must differ from the response's own API call ID. The protocol pages support the simpler reading above. Confirm which the gateway pairs on before certification; both readings are in the corpus. If a request fails, the exchange retires that correlation ID, and the next attempt needs a fresh one; reusing it is how a retry silently goes nowhere. +If a request fails at the gateway layer, the exchange retires that correlation ID. Any subsequent retry must generate a fresh `api_call_id` and fresh `correlation_id`; reusing a failed correlation ID causes silent drops. The timestamp is contested on two axes. Format: the protocol page defines it as a Unix timestamp, and the sample header in Common Mistakes carries epoch milliseconds, while the handbook and FAQ both use ISO 8601. Zone: the FAQ says UTC with a trailing `Z`, the handbook says Indian time with `+05:30` and that UTC will fail validation. The sample bundles use ISO with `+05:30`. It is a validated field; establish the form with the payer before building. @@ -77,7 +80,12 @@ The `status` field says how far along a message is. Only a few values exist, and - `response.complete` is a final answer. - `response.error` means the message was refused. -Three more are the exchange's own: `request.queued`, `request.dispatched` and `request.stopped`. They show up in receipts and status checks, and describe where the exchange has got to in delivering something. +Three more are the exchange's internal lifecycle statuses: +- `request.queued`: The message passed gateway schema and protected header validation and sits in the exchange's dispatch queue. +- `request.dispatched`: The exchange successfully delivered the JWE payload to the recipient's registered callback URL. +- `request.stopped`: The exchange permanently terminated message delivery after exhausting its internal retry schedule (due to recipient timeout, connection drop, or HTTP 5xx failures). A transition to `request.stopped` retires that `correlation_id` forever. Senders must never retry a message with a stopped correlation ID; any subsequent attempt must generate a brand-new `api_call_id` and fresh `correlation_id`. + +The Open Protocol page carries a different seven-value set entirely, `request.initiate`, `request.retry`, `response.success`, `response.fail` and three more. None appears in the workflow sheet, in any sample or in the gateway's validation. It is a superseded draft. Put together, a preauthorisation's life reads like this. @@ -93,10 +101,10 @@ Using the wrong status is the first item on the portal's list of common mistakes ```mermaid sequenceDiagram - box rgb(220,239,227) Provider side + box Provider side participant P as Provider end - box rgb(220,232,245) Payer side + box Payer side participant Y as Payer end P->>Y: 12, request.initiated: new preauthorisation @@ -135,7 +143,6 @@ The error table reads like a list of code lookups, and several of the codes mean | `PAYR-1238` | Beneficiary is having an active preauthorization request at this hospital with reference number … | Scheme rule, not a bundle fault: one live preauthorisation per beneficiary per hospital. The reference number ends in the SHA's case id | | `PAYR-1401` | Policy not allowed for the hospital | The plan was asked for under a policy the hospital is not empanelled under; ask under the beneficiary's own | | `PAYR-1019` | Invalid sequence received in supporting info element | A `supportingInfo` entry with no `sequence`; number the whole list once it is assembled | -| `PAYR-1083` | No HPR details found for the practitioner | The `Practitioner` carries no identifier typed `HPIN` | | `PAYR-1256`, `PAYR-1363` | Response for Authentication Consent Questionnaire is missing | The plan's consent questionnaire, unanswered, where no biometric token was taken | | `PAYR-1008` | Invalid content type … / Invalid input, code and reason code | Two different faults on one code: a document outside pdf, jpg, jpeg, png and fhir+json; or a Task code paired with a reason the scheme does not accept | | `PAYR-1245` | Only one conservative procedure can be booked for a case | The master's `ProcedureType`; an enhancement on a conservative case must add a medical package | @@ -165,27 +172,56 @@ The portal keeps a list. In plain words: The exchange records every call it receives: the envelope, the encryption details, sender and recipient, and whether validation passed. It never records the letter. Participants can query the audit trail for their own transactions, and NHA publishes reports from it for payers, providers, regulators and observers. - ## What to send when the sources disagree -This chapter and the ones after it flag every place the published documents contradict each other, which is the honest thing to do but leaves you with a decision to make on each one. This table makes those decisions once. Every value here is what the published sample payloads actually carry, and where no sample settles it the row says so rather than inventing a ruling. +This chapter and the ones after it flag every place the published documents contradict each other, which is the honest thing to do but leaves you with a decision to make on each one. This section makes those decisions once. Every value here is what the published sample payloads actually carry, and where no sample settles it the entry says so rather than inventing a ruling. Send these. If a payer rejects one, that rejection is better evidence than anything here, and you should follow it. -| Contested point | Send this | Why | -| :---- | :---- | :---- | -| Key wrapping algorithm | `RSA-OAEP-256` | The handbook, the samples and the Postman collection agree. One protocol page says `RSA-OAEP`; it is outnumbered | -| Content encryption | `A256GCM` | Uncontested in the samples | -| Serialisation | Compact, five parts | The message-security page says flattened JSON. The FAQ, the handbook and every sample use compact | -| Timestamp format | ISO 8601 with `+05:30` | The samples use it throughout. Accept a Unix epoch on the way in | -| Correlation ID on a response | Copy the request's `correlation_id` | The protocol pages say so. The exit checklists say use the request's `api_call_id`; that reading makes threading impossible | -| `api_call_id` | A fresh UUID on every message, including responses | So a response and its request never share one | -| Identifier type for an ABHA number | `ABHA` | From the NRCeS identifier-type code system, not the HL7 `JHN` | -| Cancellation Task input name | `initimationNumber` | The misspelling is in the payer's own payload. Send it | -| `entity_type` in a receipt | Derive it from the path | The second-to-last segment, or the last where that is `v1`, with `on_` stripped | +### Key wrapping algorithm + +Send `RSA-OAEP-256`. The handbook, the samples and the Postman collection agree. One protocol page says `RSA-OAEP`; it is outnumbered. + +### Content encryption + +Send `A256GCM`. Uncontested in the samples. + +### Serialisation + +Send the compact serialisation, five parts. The message-security page says flattened JSON. The FAQ, the handbook and every sample use compact. + +### Timestamp format + +Send ISO 8601 with `+05:30`. The samples use it throughout. Accept a Unix epoch on the way in. + +### Correlation ID on a response + +Copy the request's `correlation_id`. Settled. On a **request** set it to that message's own `api_call_id`; on a **response** echo the request's `correlation_id`. The workbook has 25 correlation rows: 8 state the request half, 16 the response half, and 1 gives the status enquiry its own rule. The two halves are one rule, not a clash. Envelope Fields has the table. + +### api_call_id + +Send a fresh UUID on every message, including responses. So a response and its request never share one. + +### Identifier type for an ABHA number + +Send `ABHA`. From the NRCeS identifier-type code system, not the HL7 `JHN`. + +### Cancellation Task input name + +Send `intimationNumber`, on the cancel Task as on the reprocess. + +### entity_type in a receipt + +Derive it from the path. The second-to-last segment, or the last where that is `v1`, with `on_` stripped. + +Two points looked unanswerable in earlier versions of this documentation. Both are answered in the sources, and the answers are recorded here. + +**The workflow code for eligibility, insurance plan, search, predetermination and status.** The workflow sheet lists none because the header is optional. `x-hcx-workflow_id` is marked Optional on all twenty-five rows on which it appears, across all ten sheets of the NHCX Requests and Responses workbook, including the CoverageEligibility and Insurance Plan sheets. Send the step code where the sheet gives one. Send nothing where it does not. There is nothing to negotiate. + +The field also carries two readings, which is why it looks unresolved. The Workflow Status Sheet treats it as a step code; the protocol pages define it as an identifier that "may span over a series of message exchanges" for one case. Envelope Fields sets both out. -Two points genuinely have no answer, and guessing is worse than knowing you are guessing. +**Domain headers.** These are named, and they have a convention. The format is `x-hcx--`, with the use case under sixteen characters and the parameter under thirty-two. The Notification Integration document names four in use: `x-hcx-amount_submitted`, `x-hcx-benefit-category_type`, `x-hcx-benefit_code` and `x-hcx-action`. The eObjects page adds a `Usage` header on the Claim carrying `preauthorization` or `claim`. And the access-control policy requires an insurance marketplace to carry the beneficiary's consent in a domain header before it may be given individual claim data. -**The workflow code for eligibility, insurance plan, search, predetermination and status.** The workflow sheet lists none. The header is not marked optional anywhere. Agree a value with your payer in writing before the first call, and record what you agreed. +Send none to a payer that has not asked for one. But they exist, and Envelope Fields collects them. -**Domain headers.** This chapter says a few facts may be written on the outside of the envelope and that each use case says which it allows. No use case chapter names one, in this documentation or in the sources behind it. Send none until a payer asks for one. +The full field table, with the obligation of every header and the rules that govern it, is Envelope Fields in the Reference section. Every error code either side can send is Error Codes in the same section. diff --git a/site/docs/nhcx/v1/concepts/nhcx-use-cases.md b/site/docs/nhcx/v1/concepts/nhcx-use-cases.md new file mode 100644 index 000000000..e1df35a34 --- /dev/null +++ b/site/docs/nhcx/v1/concepts/nhcx-use-cases.md @@ -0,0 +1,991 @@ +--- +title: NHCX Use Cases +sidebar_label: NHCX Use Cases +sidebar_position: 5 +description: Catalog of all 40 NHA use cases across A, B, C, D, E series +verification: unverified +source: nhcx-package/docs/01-Overview/05-NHCX Use Cases.md +generated: true +--- + +# NHCX Use Cases + +A use case covers each stage of the claims lifecycle: onboarding providers and payers onto the network, verifying coverage, seeking preauthorisation, submitting claims, exchanging supporting information, and reconciling payments. Between them they deliver the core objectives of standardisation, traceability, and predictable auto-adjudication across India's National Health Claims Exchange (NHCX). + +## Key Use Cases Overview + +- **Onboarding Providers and Payers**: Onboard participants onto NHCX to validate and route requests to target applications. +- **Check Coverage Eligibility**: Called by providers to verify beneficiary coverage, policy validity, sum insured, sub-limits, and document requirements. +- **Preauth Request Submission**: Submitted by providers before admission or planned surgery. Payers respond with line-item adjudication via `on_submit`. +- **Predetermination Request**: Inquires expected coverage and deductible calculations for planned procedures without reserving policy balance. +- **Claim Request Submission**: Submitted by providers upon discharge with final bill, discharge summary, and itemised claims. +- **Communication Request**: Enables payers to query providers for additional documents (`additionalinfo`), flag turnaround-time breaches (`tatquery`), or issue policy updates. +- **Payment Notice & Reconciliation**: Payers notify providers of bank transfers (UTR), detailing claimed, approved, TDS, and settled amounts. +- **Reprocess / Cancel / Shortfall**: Providers appeal rejected claims (`reprocess`), request partial payment balance (`partialpayment`), or cancel approved preauthorisations. +- **Beneficiary Notifications**: Push notifications to personal health record (PHR) apps on claim status changes. + +--- + +## Master Use Cases Matrix + +All 40 NHA use cases by role, each with its API call and callback. + +### Shared + +#### A1 Get participant list + +The participants in the registry, by role. + +**API Call:** `/fetch/participants/list` + +#### A2 Get policy + +The policies a beneficiary holds, by mobile number or ABHA. + +**API Call:** `/participant/get/policies` + +#### A3 Get public key + +The recipient's certificate, which is what the bundle is encrypted with. + +**API Call:** `/fetch/certs` + +#### A4 Get auth token + +The ABDM session token every NHCX call carries, minted with the Milestone 1 client id and secret. + +**API Call:** `/get/session` + +#### A5 Get status + +Where any request you made got to, by its correlation id. + +**API Call:** `/v1/status` +**Callback:** `/v1/on_status` + +#### A6 Receive errors + +Where the exchange tells you a request could not be delivered after five attempts. + +**API Call:** hosted only +**Callback:** `/v1/error` + +### Provider + +#### B1 Check coverage eligibility + +Is the policy in force, what is left in the wallet, and what must be attached. + +**API Call:** `/v1/coverageeligibility/check` +**Callback:** `/v1/coverageeligibility/on_check` + +#### B2 Request insurance plan + +A Task with code poll, keyed on policy number and provider id. + +**API Call:** `/v1/insuranceplan/request` +**Callback:** `/v1/insuranceplan/on_request` + +#### B3 Submit pre-authorisation + +Permission to treat. + +**API Call:** `/v1/preauth/submit` +**Callback:** `/v1/preauth/on_submit` + +#### B4 Respond to a communication + +Acknowledge or answer a message the payer sent about a case. + +**API Call:** `/v1/communication/on_request` +**Callback:** `/v1/communication/request` + +#### B5 Submit claim + +Reimbursement after discharge. + +**API Call:** `/v1/claim/submit` +**Callback:** `/v1/claim/on_submit` + +#### B6 Search claims + +Look up claim information by criteria. + +**API Call:** `/v1/search/submit` +**Callback:** `/v1/search/on_submit` + +#### B7 Acknowledge payment notice + +The receipt for a payment notice, as a Task on this endpoint. + +**API Call:** `/v1/paymentnotice/on_request` +**Callback:** `/v1/paymentnotice/request` + +#### B8 Reprocess or cancel + +One endpoint, several jobs, told apart by the Task's code and reason: reprocess with claimrejected, shortfall with partialpayment, cancel. + +**API Call:** `/v1/task/submit` +**Callback:** `/v1/task/on_submit` + +#### B9 Submit predetermination + +What would the payer approve for this treatment? + +**API Call:** `/v1/predetermination/submit` +**Callback:** `/v1/predetermination/on_submit` + +### PMJAY + +#### D1 Fetch the insurance plan + +Keyed on provider id, policy code and participant id. + +**API Call:** `/v1/insuranceplan/request` +**Callback:** `/v1/insuranceplan/on_request` + +#### D2 Authenticate the beneficiary + +Fingerprint, iris or face; all three must be built. + +**API Call:** ABHA biometric auth init and verify (not NHCX) + +#### D3 Check coverage eligibility + +Validation after registration returns the wallet, one benefit entry per wallet with allowed and used. + +**API Call:** `/v1/coverageeligibility/check` +**Callback:** `/v1/coverageeligibility/on_check` + +#### D4 Submit pre-authorisation + +Not more than one day before admission, with the biometric token or the consent response, the documents the auth-requirements answer asked for, the STG questionnaire for each package, and the registration and admission dates as supporting info. + +**API Call:** `/v1/preauth/submit` +**Callback:** `/v1/preauth/on_submit` + +#### D5 Resubmit pre-authorisation + +Revises an approved or rejected case for a different amount or package. + +**API Call:** `/v1/preauth/submit` +**Callback:** `/v1/preauth/on_submit` + +#### D6 Raise an enhancement + +Adds to an approved pre-authorisation, as many times as needed until discharge, one at a time, and only for packages whose plan flag allows it. + +**API Call:** `/v1/preauth/submit` +**Callback:** `/v1/preauth/on_submit` + +#### D7 Answer a pre-authorisation query + +The query arrived as a ClaimResponse on 24, on the case's own thread, with the question in the item adjudication, not on the communication API. + +**API Call:** `/v1/preauth/submit` +**Callback:** `/v1/preauth/on_submit` + +#### D8 Cancel pre-authorisation + +A Task with code cancel, the case number as input and one of seven reasons: treatmentplanchanged, patientrequest, financialconstraints, alternativetreatment, duplicateclaim, administrativeerror, other. + +**API Call:** `/v1/task/submit` +**Callback:** `/v1/task/on_submit` + +#### D9 Submit claim + +There is no discharge submission: the claim asserts the discharge and carries its details. + +**API Call:** `/v1/claim/submit` +**Callback:** `/v1/claim/on_submit` + +#### D10 Answer a claim query + +As D7, on the claim endpoint: the query is a ClaimResponse on 27, the answer a fresh submit on 161. + +**API Call:** `/v1/claim/submit` +**Callback:** `/v1/claim/on_submit` + +#### D11 Reprocess a rejected claim + +An appeal, not a resubmission: a Task with code reprocess and reason claimrejected, a supporting document attached, no amount. + +**API Call:** `/v1/task/submit` +**Callback:** `/v1/task/on_submit` + +#### D12 Claim a shortfall + +The same Task with reason partialpayment and an amount capped at the difference, allowed only after payment notice 33 has arrived and been acknowledged with 17. + +**API Call:** `/v1/task/submit` +**Callback:** `/v1/task/on_submit` + +#### D13 Acknowledge the payment notice + +Three notices may arrive: 30 when the transfer is initiated, 31 when the bank processes it, 33 when it settles with the UTR. + +**API Call:** `/v1/paymentnotice/on_request` +**Callback:** `/v1/paymentnotice/request` + +### Payer + +#### C1 Link ABHA with policy + +Tie the ABHA number, mobile and member id to the policy's products at policy creation, naming the payer and the processor. + +**API Call:** `/participant/link/abha/policy` + +#### C2 De-link ABHA from policy + +Undo C1. + +**API Call:** `/participant/delink/abha/policy` + +#### C3 Respond to coverage eligibility + +The eligibility and plan details for the beneficiary asked about. + +**API Call:** `/v1/coverageeligibility/on_check` +**Callback:** `/v1/coverageeligibility/check` + +#### C4 Respond to insurance plan request + +The plan as a benefit structure. + +**API Call:** `/v1/insuranceplan/on_request` +**Callback:** `/v1/insuranceplan/request` + +#### C5 Respond to pre-authorisation + +The adjudicated pre-authorisation. + +**API Call:** `/v1/preauth/on_submit` +**Callback:** `/v1/preauth/submit` + +#### C6 Raise a communication + +A message about a case, typed by its reason code: additionalinfo, tatquery for a turnaround breach, grievance, walletupdate, policychange, claimArbitration. + +**API Call:** `/v1/communication/request` +**Callback:** `/v1/communication/on_request` + +#### C7 Respond to claim + +The adjudicated claim, item by item, with any deduction and its reason. + +**API Call:** `/v1/claim/on_submit` +**Callback:** `/v1/claim/submit` + +#### C8 Respond to search + +The ClaimResponse objects matching the criteria asked for. + +**API Call:** `/v1/search/on_submit` +**Callback:** `/v1/search/submit` + +#### C9 Send payment notice + +The money, on a new thread of its own, with the reconciliation itemised by type: approved, claimed, tds, servicetax, advance, recovered, penality. + +**API Call:** `/v1/paymentnotice/request` +**Callback:** `/v1/paymentnotice/on_request` + +#### C10 Respond to a Task + +The answer to a reprocess, shortfall or cancel. + +**API Call:** `/v1/task/on_submit` +**Callback:** `/v1/task/submit` + +#### C11 Respond to predetermination + +What the payer would approve for the proposed treatment. + +**API Call:** `/v1/predetermination/on_submit` +**Callback:** `/v1/predetermination/submit` + +### Patient app + +#### E1 Subscribe to notifications + +A patient app subscribes when the beneficiary logs in with their ABHA, and the most recent subscription wins. + +**API Call:** `/v1/notification/subscribe` +**Callback:** `/v1/notification/on_subscribe` + +--- + +## Shared Use Cases (Payer and Provider) + +The following use cases are common to both Payer and Provider participants on the NHCX platform. None of them carries a workflow code, because they are registry and session calls rather than claim transactions. + +### A1: Get participant list + +- **Role / Side:** `shared` +- **API Called:** `/fetch/participants/list` +- **Carries JWE:** `false` +- **Simulator Console:** `/participants` +- **Data Element Mapping:** `package/mappings/A1.yaml` + +The participants in the registry, by role. How a provider finds a payer and a payer finds a provider. + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `roles` | Requested Role Filter | Request | `array[string]` | `1..*` | `Request.roles` | `["payor"]` | | +| `participantCode` | Participant ID (@hcx) | Response | `string` | `1..1` | `Organization.identifier[system=https://nhcx.gov.in].value` | `1000003538@hcx` | also at `Header.x-hcx-recipient_code` | +| `participantName` | Entity Name | Response | `string` | `1..1` | `Organization.name` | `State Health Agency Himachal` | | +| `endpointUrl` | Gateway Callback URL | Response | `url` | `1..1` | `Endpoint.address` | `https://payer.example.org/nhcx/v1` | | +| `encryptionCertPath` | Encryption Certificate Path | Response | `url` | `1..1` | `Response.encryption_cert_path` | `https://apisbx.abdm.gov.in/certs/1000003538.pem` | | + +NRCeS profiles: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +### A2: Get policy + +- **Role / Side:** `shared` +- **API Called:** `/participant/get/policies` +- **Carries JWE:** `false` +- **Simulator Console:** `/search` +- **Data Element Mapping:** `package/mappings/A2.yaml` + +The policies a beneficiary holds, by mobile number or ABHA. Each names the insurer and the processor, and the processor is the recipient for every claim-side call. + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `mobile` | Beneficiary Mobile | Request | `string` | `0..1` | `Patient.telecom[system=phone].value` | `9876543210` | | +| `abhaNumber` | ABHA Number | Request | `string` | `0..1` | `Patient.identifier[type=ABHA].value` | `91234567890123` | | +| `policyNumber` | Discovered Policy Number | Response | `string` | `1..1` | `Coverage.identifier[0].value` | `POL-HOSP-2026-0045` | | +| `insurerId` | Insurer Participant Code | Response | `string` | `1..1` | `Organization[type=pay].identifier[system=https://nhcx.gov.in].value` | `1000003538@hcx` | | +| `processorId` | Claim Processor Participant Code | Response | `string` | `1..1` | `Organization[type=tpa].identifier[system=https://nhcx.gov.in].value` | `1000004520@hcx` | | + +NRCeS profiles: [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html), [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html), [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +### A3: Get public key + +- **Role / Side:** `shared` +- **API Called:** `/fetch/certs` +- **Carries JWE:** `false` +- **Simulator Console:** `/participants` +- **Data Element Mapping:** `package/mappings/A3.yaml` + +The recipient's certificate, which is what the bundle is encrypted with. Fetched before anything is addressed to a participant. + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `participantCode` | Target Participant Code | Request | `string` | `1..1` | `Request.participant_code` | `1000003538@hcx` | | +| `certData` | Public Key PEM Certificate | Response | `string` | `1..1` | `Response.certs[0]` | `-----BEGIN CERTIFICATE----- MIIBIjANBgkqhkiG9w0BAQEFAAO...` | | + +### A4: Get auth token + +- **Role / Side:** `shared` +- **API Called:** `/get/session` +- **Carries JWE:** `false` +- **Simulator Console:** `/session` +- **Data Element Mapping:** `package/mappings/A4.yaml` + +The ABDM session token every NHCX call carries, minted with the Milestone 1 client id and secret. + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `clientId` | Client ID | Request | `string` | `1..1` | `Request.clientId` | `SBX_001205` | | +| `clientSecret` | Client Secret | Request | `string` | `1..1` | `Request.clientSecret` | `secret_xyz` | | +| `accessToken` | Bearer Access Token | Response | `string` | `1..1` | `Header.Authorization` | `eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...` | also at `Header.bearer_auth` | +| `expiresIn` | Token Validity Seconds | Response | `integer` | `1..1` | `Response.expiresIn` | `3600` | | + +### A5: Get status + +- **Role / Side:** `shared` +- **API Called:** `/v1/status` +- **Callback API:** `/v1/on_status` +- **Carries JWE:** `true` +- **Simulator Console:** `/status` +- **Data Element Mapping:** `package/mappings/A5.yaml` +- **FHIR Reference:** [Predetermination, Status and Search, A5](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search#a5-get-status-shared) + +Where any request you made got to, by its correlation id. The sandbox's own status page answers without a token. + +### A6: Receive errors + +- **Role / Side:** `shared` +- **API Called:** `(hosted only)` +- **Callback API:** `/v1/error` +- **Carries JWE:** `false` +- **Data Element Mapping:** `package/mappings/A6.yaml` + +Where the exchange tells you a request could not be delivered after five attempts. Without it a sender never learns that a request died, which looks exactly like a case still under review. + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `correlationId` | Failed Transaction ID | Error | `uuid` | `1..1` | `Header.x-hcx-correlation_id` | `4f9d2b80-13b4-4e2a-9e12-8f9024a56789` | | +| `errorCode` | Error Code | Error | `string` | `1..1` | `Error.code` | `ERR_RECIPIENT_UNREACHABLE` | | +| `errorMessage` | Error Description | Error | `string` | `1..1` | `Error.message` | `Recipient gateway timed out after 5 attempts` | | + +## Provider Use Cases + +The following use cases are initiated by Provider participants (hospitals, daycare centers) to verify coverage, submit preauthorisations, answer queries, submit claims, and reconcile payments. + +### B1: Check coverage eligibility + +- **Role / Side:** `provider` +- **API Called:** `/v1/coverageeligibility/check` +- **Callback API:** `/v1/coverageeligibility/on_check` +- **Workflow ID:** `none; sits beside registration 10 and admission 11` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/B1.yaml` +- **FHIR Reference:** [Coverage Eligibility Request, B1](/docs/nhcx/v1/reference/fhir/coverage-eligibility-request#b1-check-coverage-eligibility-provider) +- **Sample FHIR Bundles (5):** `B1-check.json`, `auth-requirements.json`, `benefits.json`, `discovery.json`, `validation.json` + +Is the policy in force, what is left in the wallet, and what must be attached. One endpoint, four purposes: discovery, validation, benefits, auth-requirements. + +### B2: Request insurance plan + +- **Role / Side:** `provider` +- **API Called:** `/v1/insuranceplan/request` +- **Callback API:** `/v1/insuranceplan/on_request` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/B2.yaml` +- **FHIR Reference:** [Insurance Plan Request, B2](/docs/nhcx/v1/reference/fhir/insurance-plan-request#b2-request-insurance-plan-provider) +- **Sample FHIR Bundles (2):** `B2-request.json`, `insurance-plan-request.json` + +A Task with code poll, keyed on policy number and provider id. The answer is the policy as a benefit structure: packages, rates, documents, questionnaires. + +### B3: Submit pre-authorisation + +- **Role / Side:** `provider` +- **API Called:** `/v1/preauth/submit` +- **Callback API:** `/v1/preauth/on_submit` +- **Workflow ID:** `12 new, 121 resubmission, 13 enhancement; under PMJAY 19 answers a query and 131 an enhancement query` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/B3.yaml` +- **FHIR Reference:** [Preauthorisation Request, B3](/docs/nhcx/v1/reference/fhir/preauthorisation-request#b3-submit-pre-authorisation-provider) +- **Sample FHIR Bundles (6):** `B3-enhancement.json`, `B3-request.json`, `preauth-cancel.json`, `preauth-enhancement.json`, `preauth-queryupdate.json`, `preauth-request.json` + +Permission to treat. A resubmission, an enhancement and a query answer all reuse the same bundle with a new correlation id and the original reference; only the workflow code tells them apart. The acknowledgement on 20 brings the payer's own case number, and the desk files everything under it. + +### B4: Respond to a communication + +- **Role / Side:** `provider` +- **API Called:** `/v1/communication/on_request` +- **Callback API:** `/v1/communication/request` +- **Workflow ID:** `24, 241 or 27, echoed from the payer's request` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/B4.yaml` +- **FHIR Reference:** [Communication, B4](/docs/nhcx/v1/reference/fhir/communication#b4-respond-to-a-communication-provider) +- **Sample FHIR Bundles (5):** `B4-claim-query-answer.json`, `B4-preauth-query-answer.json`, `communication-acknowledgement.json`, `communication-request.json`, `communication-response.json` + +Acknowledge or answer a message the payer sent about a case. A generic or IRDAI payer raises its query here, as a CommunicationRequest task bundle carrying 24, 241 or 27; the answer is a Communication task bundle on on_request that echoes the request's correlation id and workflow id. The payer's reason code says what kind of message it was. + +### B5: Submit claim + +- **Role / Side:** `provider` +- **API Called:** `/v1/claim/submit` +- **Callback API:** `/v1/claim/on_submit` +- **Workflow ID:** `15 claim, 161 query answer under PMJAY, 14 provisional discharge where a payer supports one` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/B5.yaml` +- **FHIR Reference:** [Claim Request, B5](/docs/nhcx/v1/reference/fhir/claim-request#b5-submit-claim-provider) +- **Sample FHIR Bundles (5):** `B5-request.json`, `claim-queryupdate.json`, `claim-release.json`, `claim-reprocess.json`, `claim-request.json` + +Reimbursement after discharge. The amount may not exceed what the pre-authorisation approved. The acknowledgement on 25 brings the payer's case number. PMJAY takes a claim query answer on 161 only; 151, 19 and 16 are refused with PAYR-1321. + +### B6: Search claims + +- **Role / Side:** `provider` +- **API Called:** `/v1/search/submit` +- **Callback API:** `/v1/search/on_submit` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/B6.yaml` +- **FHIR Reference:** [Predetermination, Status and Search, B6](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search#b6-search-claims-provider) +- **Sample FHIR Bundles (1):** `claim-search.json` + +Look up claim information by criteria. The provider sandbox exit checklist names /v1/search/submit for claim search, while the Technical Specifications route /search/submit from NHA through NHCX to the payer: a cross-payer search for NHA or a regulator. A provider's search over its own cases is /claim/search in the protocol, which the access-control policy allows for requests that originated from the provider. No source confirms which of the two the sandbox accepts from a provider. + +### B7: Acknowledge payment notice + +- **Role / Side:** `provider` +- **API Called:** `/v1/paymentnotice/on_request` +- **Callback API:** `/v1/paymentnotice/request` +- **Workflow ID:** `30 echoed from the notice on the generic network; 17 under PMJAY` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/B7.yaml` +- **FHIR Reference:** [Payment Notice and Acknowledgement, B7](/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement#b7-acknowledge-payment-notice-provider) +- **Sample FHIR Bundles (2):** `B7-acknowledgement.json`, `payment-notice-ack.json` + +The receipt for a payment notice, as a Task on this endpoint. The notice arrives on a new thread of its own; a generic payer takes the acknowledgement with the notice's 30 echoed, PMJAY with 17. + +### B8: Reprocess or cancel + +- **Role / Side:** `provider` +- **API Called:** `/v1/task/submit` +- **Callback API:** `/v1/task/on_submit` +- **Workflow ID:** `PC01 cancel, 36 reprocess or shortfall` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/B8.yaml` +- **FHIR Reference:** [Cancel, Reprocess and Shortfall, B8](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall#b8-reprocess-or-cancel-provider) +- **Sample FHIR Bundles (2):** `B8-cancel.json`, `B8-reprocess.json` + +One endpoint, several jobs, told apart by the Task's code and reason: reprocess with claimrejected, shortfall with partialpayment, cancel. A reprocess goes on 36 and is acknowledged on 37; a cancel goes on PC01 and is done on PC02. Both carry the input intimationNumber. A supporting document is mandatory on a reprocess. + +### B9: Submit predetermination + +- **Role / Side:** `provider` +- **API Called:** `/v1/predetermination/submit` +- **Callback API:** `/v1/predetermination/on_submit` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/B9.yaml` +- **FHIR Reference:** [Predetermination, Status and Search, B9](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search#b9-submit-predetermination-provider) +- **Sample FHIR Bundles (1):** `predetermination-request.json` + +What would the payer approve for this treatment? Same bundle shape as a pre-authorisation, asked before committing to one. + +## PMJAY Scheme Use Cases + +The following use cases govern the Pradhan Mantri Jan Arogya Yojana (AB PM-JAY) cashless lifecycle as detailed in the official NHA PMJAY Handbook. They follow strict Standard Treatment Guidelines (STG), mandatory biometrics, package rules, and Turnaround Time (TAT) auto-approvals. + +### D1: Fetch the insurance plan + +- **Role / Side:** `pmjay` +- **API Called:** `/v1/insuranceplan/request` +- **Callback API:** `/v1/insuranceplan/on_request` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/D1.yaml` +- **FHIR Reference:** [Insurance Plan Request, D1](/docs/nhcx/v1/reference/fhir/insurance-plan-request#d1-fetch-the-insurance-plan-pmjay) +- **Sample FHIR Bundles (1):** `D1-request.json` + +Keyed on provider id, policy code and participant id. The answer is the scheme configuration for this hospital: specialities, packages, rates, Claim-Condition flags, mandatory documents and questionnaires. Over twenty megabytes; store it queryable, version it, refresh weekly and on any policychange communication. + +### D2: Authenticate the beneficiary + +- **Role / Side:** `pmjay` +- **API Called:** `ABHA biometric auth init and verify (not NHCX)` +- **Carries JWE:** `false` +- **Data Element Mapping:** `package/mappings/D2.yaml` + +Fingerprint, iris or face; all three must be built. Success yields a user token valid thirty minutes that rides on the eligibility check and the pre-authorisation; a fresh one rides on the claim. Where biometrics are impossible, a signed exemption consent and the matching questionnaire stand in, except on a cyclic case. + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `abhaNumber` | ABHA Number | Auth | `string` | `1..1` | `Patient.identifier[type=ABHA].value` | `91234567890123` | | +| `authMode` | Authentication Mode | Auth | `string` | `1..1` | `Request.authMode` | `DEMOGRAPHICS` | | +| `authToken` | Biometric Consent Token | Auth | `string` | `1..1` | `Response.token` | `bio-token-778899` | | + +NRCeS profiles: [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html). + +### D3: Check coverage eligibility + +- **Role / Side:** `pmjay` +- **API Called:** `/v1/coverageeligibility/check` +- **Callback API:** `/v1/coverageeligibility/on_check` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/D3.yaml` +- **FHIR Reference:** [Coverage Eligibility Request, D3](/docs/nhcx/v1/reference/fhir/coverage-eligibility-request#d3-check-coverage-eligibility-pmjay) +- **Sample FHIR Bundles (1):** `D3-check.json` + +Validation after registration returns the wallet, one benefit entry per wallet with allowed and used. Benefits and auth-requirements before a pre-authorisation return what the package needs attached. Register only after coverage is validated, and validate again every time treatment is added. + +### D4: Submit pre-authorisation + +- **Role / Side:** `pmjay` +- **API Called:** `/v1/preauth/submit` +- **Callback API:** `/v1/preauth/on_submit` +- **Workflow ID:** `12` +- **Carries JWE:** `true` +- **Simulator Console:** `/builder?family=preauth&usecase=initiate` +- **Data Element Mapping:** `package/mappings/D4.yaml` +- **FHIR Reference:** [Preauthorisation Request, D4](/docs/nhcx/v1/reference/fhir/preauthorisation-request#d4-submit-pre-authorisation-pmjay) +- **Sample FHIR Bundles (1):** `D4-request.json` + +Not more than one day before admission, with the biometric token or the consent response, the documents the auth-requirements answer asked for, the STG questionnaire for each package, and the registration and admission dates as supporting info. Auto-approved only if it is the first pre-authorisation for the case and every package allows it. + +### D5: Resubmit pre-authorisation + +- **Role / Side:** `pmjay` +- **API Called:** `/v1/preauth/submit` +- **Callback API:** `/v1/preauth/on_submit` +- **Workflow ID:** `121` +- **Carries JWE:** `true` +- **Simulator Console:** `/builder?family=preauth&usecase=resubmit` +- **Data Element Mapping:** `package/mappings/D5.yaml` +- **FHIR Reference:** [Preauthorisation Request, D5](/docs/nhcx/v1/reference/fhir/preauthorisation-request#d5-resubmit-pre-authorisation-pmjay) + +Revises an approved or rejected case for a different amount or package. Nullifies every earlier instance; the payer treats it as the new base request. + +### D6: Raise an enhancement + +- **Role / Side:** `pmjay` +- **API Called:** `/v1/preauth/submit` +- **Callback API:** `/v1/preauth/on_submit` +- **Workflow ID:** `13, and 131 to answer an enhancement query raised on 241` +- **Carries JWE:** `true` +- **Simulator Console:** `/builder?family=preauth&usecase=enhance` +- **Data Element Mapping:** `package/mappings/D6.yaml` +- **FHIR Reference:** [Preauthorisation Enhancement, D6](/docs/nhcx/v1/reference/fhir/preauthorisation-enhancement#d6-raise-an-enhancement-pmjay) +- **Sample FHIR Bundles (2):** `D6-enhancement-query-answer.json`, `D6-enhancement.json` + +Adds to an approved pre-authorisation, as many times as needed until discharge, one at a time, and only for packages whose plan flag allows it. The bundle carries the approved items and the ones now sought. A query on it arrives as a ClaimResponse on 241, on the case's own thread, and is answered by a fresh submit on 131. + +### D7: Answer a pre-authorisation query + +- **Role / Side:** `pmjay` +- **API Called:** `/v1/preauth/submit` +- **Callback API:** `/v1/preauth/on_submit` +- **Workflow ID:** `19` +- **Carries JWE:** `true` +- **Simulator Console:** `/builder?family=preauth&usecase=query-answer` +- **Data Element Mapping:** `package/mappings/D7.yaml` +- **FHIR Reference:** [Preauthorisation Query and Answer, D7](/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer#d7-answer-a-pre-authorisation-query-pmjay) +- **Sample FHIR Bundles (1):** `D7-query-answer.json` + +The query arrived as a ClaimResponse on 24, on the case's own thread, with the question in the item adjudication, not on the communication API. Answer with a fresh submit of the same bundle shape on this code, never as a new 12, which opens a second case. + +### D8: Cancel pre-authorisation + +- **Role / Side:** `pmjay` +- **API Called:** `/v1/task/submit` +- **Callback API:** `/v1/task/on_submit` +- **Workflow ID:** `PC01` +- **Carries JWE:** `true` +- **Simulator Console:** `/builder?family=preauth&usecase=cancel` +- **Data Element Mapping:** `package/mappings/D8.yaml` +- **FHIR Reference:** [Cancel, Reprocess and Shortfall, D8](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall#d8-cancel-pre-authorisation-pmjay) +- **Sample FHIR Bundles (1):** `D8-cancel.json` + +A Task with code cancel, the case number as input and one of seven reasons: treatmentplanchanged, patientrequest, financialconstraints, alternativetreatment, duplicateclaim, administrativeerror, other. Allowed at any point until the claim is raised. + +### D9: Submit claim + +- **Role / Side:** `pmjay` +- **API Called:** `/v1/claim/submit` +- **Callback API:** `/v1/claim/on_submit` +- **Workflow ID:** `15` +- **Carries JWE:** `true` +- **Simulator Console:** `/builder?family=claim&usecase=submit` +- **Data Element Mapping:** `package/mappings/D9.yaml` +- **FHIR Reference:** [Claim Request, D9](/docs/nhcx/v1/reference/fhir/claim-request#d9-submit-claim-pmjay) +- **Sample FHIR Bundles (1):** `D9-request.json` + +There is no discharge submission: the claim asserts the discharge and carries its details. Four dates, the discharge type under category DIS with the stage as its value, a fresh biometric token, and LM100 as the single procedure in place of the approved items on a LAMA or DAMA discharge before or during surgery. The amount may not exceed what was approved. + +### D10: Answer a claim query + +- **Role / Side:** `pmjay` +- **API Called:** `/v1/claim/submit` +- **Callback API:** `/v1/claim/on_submit` +- **Workflow ID:** `161` +- **Carries JWE:** `true` +- **Simulator Console:** `/builder?family=claim&usecase=query-answer` +- **Data Element Mapping:** `package/mappings/D10.yaml` +- **FHIR Reference:** [Claim Query and Answer, D10](/docs/nhcx/v1/reference/fhir/claim-query-and-answer#d10-answer-a-claim-query-pmjay) +- **Sample FHIR Bundles (1):** `D10-query-answer.json` + +As D7, on the claim endpoint: the query is a ClaimResponse on 27, the answer a fresh submit on 161. The sandbox refuses 151, 19 and 16 with PAYR-1321. The final adjudication then arrives with outcome complete and, often, a deductible adjudication naming why the eligible amount is less than the claimed one. + +### D11: Reprocess a rejected claim + +- **Role / Side:** `pmjay` +- **API Called:** `/v1/task/submit` +- **Callback API:** `/v1/task/on_submit` +- **Workflow ID:** `36` +- **Carries JWE:** `true` +- **Simulator Console:** `/builder?family=claim&usecase=reprocess` +- **Data Element Mapping:** `package/mappings/D11.yaml` +- **FHIR Reference:** [Cancel, Reprocess and Shortfall, D11](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall#d11-reprocess-a-rejected-claim-pmjay) +- **Sample FHIR Bundles (1):** `D11-reprocess.json` + +An appeal, not a resubmission: a Task with code reprocess and reason claimrejected, a supporting document attached, no amount. Raise it the moment the rejection arrives. Once only; the Claim Review Committee is final. + +### D12: Claim a shortfall + +- **Role / Side:** `pmjay` +- **API Called:** `/v1/task/submit` +- **Callback API:** `/v1/task/on_submit` +- **Workflow ID:** `36` +- **Carries JWE:** `true` +- **Simulator Console:** `/builder?family=claim&usecase=shortfall` +- **Data Element Mapping:** `package/mappings/D12.yaml` +- **FHIR Reference:** [Cancel, Reprocess and Shortfall, D12](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall#d12-claim-a-shortfall-pmjay) + +The same Task with reason partialpayment and an amount capped at the difference, allowed only after payment notice 33 has arrived and been acknowledged with 17. Once only, and never after a reprocess. + +### D13: Acknowledge the payment notice + +- **Role / Side:** `pmjay` +- **API Called:** `/v1/paymentnotice/on_request` +- **Callback API:** `/v1/paymentnotice/request` +- **Workflow ID:** `17` +- **Carries JWE:** `true` +- **Simulator Console:** `/builder?family=paymentnotice&usecase=acknowledge` +- **Data Element Mapping:** `package/mappings/D13.yaml` +- **FHIR Reference:** [Payment Notice and Acknowledgement, D13](/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement#d13-acknowledge-the-payment-notice-pmjay) +- **Sample FHIR Bundles (1):** `D13-acknowledgement.json` + +Three notices may arrive: 30 when the transfer is initiated, 31 when the bank processes it, 33 when it settles with the UTR. The reconciliation splits the amount into what was paid and what was deducted as tax. Keep the UTR; it is the reference for any dispute. + +## Payer Use Cases + +The following use cases are implemented by Payer participants (Insurance Companies and Third Party Administrators) to respond to provider inquiries, adjudicate claims, raise queries, and settle payments. + +### C1: Link ABHA with policy + +- **Role / Side:** `payer` +- **API Called:** `/participant/link/abha/policy` +- **Carries JWE:** `false` +- **Simulator Console:** `/participants` +- **Data Element Mapping:** `package/mappings/C1.yaml` + +Tie the ABHA number, mobile and member id to the policy's products at policy creation, naming the payer and the processor. This is what makes A2 answer. + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `abhaNumber` | ABHA Number | Link | `string` | `1..1` | `Patient.identifier[type=ABHA].value` | `91234567890123` | | +| `policyNumber` | Policy Number | Link | `string` | `1..1` | `Coverage.identifier[0].value` | `POL-HOSP-2026-0045` | | +| `payerId` | Insurer Participant Code | Link | `string` | `1..1` | `Organization.identifier.value` | `1000003538@hcx` | | + +NRCeS profiles: [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html), [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html), [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +### C2: De-link ABHA from policy + +- **Role / Side:** `payer` +- **API Called:** `/participant/delink/abha/policy` +- **Carries JWE:** `false` +- **Data Element Mapping:** `package/mappings/C2.yaml` + +Undo C1. Only the party named as payer or processor on the link may do this. + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `abhaNumber` | ABHA Number | Delink | `string` | `1..1` | `Patient.identifier[type=ABHA].value` | `91234567890123` | | +| `policyNumber` | Policy Number | Delink | `string` | `1..1` | `Coverage.identifier[0].value` | `POL-HOSP-2026-0045` | | + +NRCeS profiles: [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html), [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html). + +### C3: Respond to coverage eligibility + +- **Role / Side:** `payer` +- **API Called:** `/v1/coverageeligibility/on_check` +- **Callback API:** `/v1/coverageeligibility/check` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/C3.yaml` +- **FHIR Reference:** [Coverage Eligibility Response, C3](/docs/nhcx/v1/reference/fhir/coverage-eligibility-response#c3-respond-to-coverage-eligibility-payer) +- **Sample FHIR Bundles (7):** `C3-benefits-pmjay.json`, `C3-response-generic.json`, `C3-response-pmjay.json`, `benefits-response.json`, `coverage-eligibility.json`, `discovery-response.json`, `validation-response.json` + +The eligibility and plan details for the beneficiary asked about. A payer may instead answer with a forward instruction, asking the exchange to pass the request to another payer. + +### C4: Respond to insurance plan request + +- **Role / Side:** `payer` +- **API Called:** `/v1/insuranceplan/on_request` +- **Callback API:** `/v1/insuranceplan/request` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/C4.yaml` +- **FHIR Reference:** [Insurance Plan Response Overview, C4](/docs/nhcx/v1/reference/fhir/insurance-plan-response-overview#c4-respond-to-insurance-plan-request-payer) +- **Sample FHIR Bundles (2):** `C4-response-generic.json`, `C4-response-pmjay.json` + +The plan as a benefit structure. Under PMJAY this is the scheme configuration for one hospital and can exceed twenty megabytes. + +### C5: Respond to pre-authorisation + +- **Role / Side:** `payer` +- **API Called:** `/v1/preauth/on_submit` +- **Callback API:** `/v1/preauth/submit` +- **Workflow ID:** `20 received, 21 approved, 23 rejected, 24 queried, 22 enhancement approved, 231 denied, 241 queried` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/C5.yaml` +- **FHIR Reference:** [Preauthorisation Response, C5](/docs/nhcx/v1/reference/fhir/preauthorisation-response#c5-respond-to-pre-authorisation-payer) +- **Sample FHIR Bundles (10):** `C5-approved-wf21-pmjay.json`, `C5-approved-wf21.json`, `C5-enhancement-approved-wf22-pmjay.json`, `C5-enhancement-approved-wf22.json`, `C5-queried-wf24.json`, `C5-received-wf20-pmjay.json`, `C5-received-wf20.json`, `C5-rejected-wf23-pmjay.json`, `C5-rejected-wf23.json`, `preauth-queried.json` + +The adjudicated pre-authorisation. The acknowledgement on 20 travels as response.partial and carries the payer's own case number; the decisions travel as response.complete. Read outcome and the adjudication amounts together: complete covers approval and denial alike. Under PMJAY a query is this ClaimResponse on 24 or 241, on the case's own thread. + +### C6: Raise a communication + +- **Role / Side:** `payer` +- **API Called:** `/v1/communication/request` +- **Callback API:** `/v1/communication/on_request` +- **Workflow ID:** `24, 241, 27 for a generic payer's queries; N02 and the intimation codes for the rest` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/C6.yaml` +- **FHIR Reference:** [Communication, C6](/docs/nhcx/v1/reference/fhir/communication#c6-raise-a-communication-payer) +- **Sample FHIR Bundles (3):** `C6-claim-query-wf27.json`, `C6-notification-wfN02.json`, `C6-preauth-query-wf24.json` + +A message about a case, typed by its reason code: additionalinfo, tatquery for a turnaround breach, grievance, walletupdate, policychange, claimArbitration. A generic or IRDAI payer raises its document queries here, as a CommunicationRequest task bundle carrying 24, 241 or 27, and takes the answer as a Communication task bundle on on_request echoing the correlation id and workflow id. PMJAY does not use it for queries; its query is the ClaimResponse on the case's own thread. + +### C7: Respond to claim + +- **Role / Side:** `payer` +- **API Called:** `/v1/claim/on_submit` +- **Callback API:** `/v1/claim/submit` +- **Workflow ID:** `25 received, 26 approved, 27 queried, 28 in process, 29 forwarded, 291 denied` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/C7.yaml` +- **FHIR Reference:** [Claim Response, C7](/docs/nhcx/v1/reference/fhir/claim-response#c7-respond-to-claim-payer) +- **Sample FHIR Bundles (9):** `C7-approved-deduction-wf26-pmjay.json`, `C7-approved-wf26-pmjay.json`, `C7-approved-wf26.json`, `C7-queried-wf27.json`, `C7-received-wf25-pmjay.json`, `C7-received-wf25.json`, `C7-rejected-wf291-pmjay.json`, `C7-rejected-wf291.json`, `claim-queried.json` + +The adjudicated claim, item by item, with any deduction and its reason. The acknowledgement on 25 travels as response.partial with the payer's case number. Under PMJAY a query is this ClaimResponse on 27, answered by a fresh submit on 161. + +### C8: Respond to search + +- **Role / Side:** `payer` +- **API Called:** `/v1/search/on_submit` +- **Callback API:** `/v1/search/submit` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/C8.yaml` +- **FHIR Reference:** [Predetermination, Status and Search, C8](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search#c8-respond-to-search-payer) +- **Sample FHIR Bundles (1):** `search-response.json` + +The ClaimResponse objects matching the criteria asked for. + +### C9: Send payment notice + +- **Role / Side:** `payer` +- **API Called:** `/v1/paymentnotice/request` +- **Callback API:** `/v1/paymentnotice/on_request` +- **Workflow ID:** `30 initiated, 31 processed, 33 settled` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/C9.yaml` +- **FHIR Reference:** [Payment Notice and Acknowledgement, C9](/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement#c9-send-payment-notice-payer) +- **Sample FHIR Bundles (3):** `C9-notice-tds-wf30-pmjay.json`, `C9-notice-wf30.json`, `payment-notice.json` + +The money, on a new thread of its own, with the reconciliation itemised by type: approved, claimed, tds, servicetax, advance, recovered, penality. The bank's UTR rides on the settled notice. + +### C10: Respond to a Task + +- **Role / Side:** `payer` +- **API Called:** `/v1/task/on_submit` +- **Callback API:** `/v1/task/submit` +- **Workflow ID:** `251 acknowledged, 252 approved, 253 rejected, 254 queried, PC02 cancelled, 37 arbitration acknowledged` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/C10.yaml` +- **FHIR Reference:** [Cancel, Reprocess and Shortfall, C10](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall#c10-respond-to-a-task-payer) +- **Sample FHIR Bundles (4):** `C10-arbitration-wf37-pmjay.json`, `C10-arbitration-wf37.json`, `C10-cancelled-wfPC02-pmjay.json`, `C10-cancelled-wfPC02.json` + +The answer to a reprocess, shortfall or cancel. A cancellation done is PC02 and carries the case's ClaimResponse in its output; a reprocess on 36 is acknowledged on 37 as arbitration. Both payers answer this way. + +### C11: Respond to predetermination + +- **Role / Side:** `payer` +- **API Called:** `/v1/predetermination/on_submit` +- **Callback API:** `/v1/predetermination/submit` +- **Carries JWE:** `true` +- **Data Element Mapping:** `package/mappings/C11.yaml` +- **FHIR Reference:** [Predetermination, Status and Search, C11](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search#c11-respond-to-predetermination-payer) +- **Sample FHIR Bundles (1):** `predetermination-response.json` + +What the payer would approve for the proposed treatment. + +## Beneficiary & Patient App Use Cases + +Personal health record apps and beneficiary portals register on NHCX to receive real-time updates on a patient's claims and authorizations. + +### E1: Subscribe to notifications + +- **Role / Side:** `patient` +- **API Called:** `/v1/notification/subscribe` +- **Callback API:** `/v1/notification/on_subscribe` +- **Workflow ID:** `N01 to a payer, N02 to a provider, N03 to a beneficiary, N04 acknowledgement` +- **Carries JWE:** `false` +- **Data Element Mapping:** `package/mappings/E1.yaml` + +A patient app subscribes when the beneficiary logs in with their ABHA, and the most recent subscription wins. Topics: workflow_events for claim progress, network_events for exchange maintenance, participant_events for changes to payers and providers. + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `abhaNumber` | Beneficiary ABHA | Subscription | `string` | `1..1` | `Patient.identifier[type=ABHA].value` | `91234567890123` | | +| `topic` | Subscription Topic | Subscription | `string` | `1..*` | `Subscription.criteria` | `workflow_events` | | +| `endpointUrl` | Push Notification URL | Subscription | `url` | `1..1` | `Subscription.channel.endpoint` | `https://phrapp.example.org/webhook/claims` | | + +NRCeS profiles: [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html). + +--- + +## FHIR Builder Use Cases + +The NHCX FHIR Builder provides pre-configured templates and presets for generating conforming bundles across claim lifecycle stages: + +| Bundle | Step | Label | Template | Endpoint | Flow | Description | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | +| `coverage` | `discovery` | **Discovery** | `coverage-eligibility` | `v1/coverageeligibility/check` | `request` | Which policy does this beneficiary hold? The fallback when policy lookup has not answered it. | +| `coverage` | `validation` | **Validation** | `coverage-eligibility` | `v1/coverageeligibility/check` | `request` | Is the policy in force today, and what is left in the wallet. Called after registration. | +| `coverage` | `auth-requirements` | **Auth-requirements** | `coverage-eligibility` | `v1/coverageeligibility/check` | `request` | Is this package covered here, and what must the pre-authorisation carry. The call to make before every pre-authorisation. | +| `coverage` | `benefits` | **Benefits** | `coverage-eligibility` | `v1/coverageeligibility/check` | `request` | How much cover remains, against which packages. Called before a pre-authorisation. | +| `insurance` | `request` | **Fetch the plan** | `insurance-plan` | `v1/insuranceplan/request` | `request` | A poll Task keyed on the policy number and the provider id. The answer is the policy as a benefit structure. | +| `preauth` | `initiate` | **Initiate** | `claim` | `v1/preauth/submit` | `request` | The first pre-authorisation for a case: permission to treat. | +| `preauth` | `resubmit` | **Resubmit** | `claim` | `v1/preauth/submit` | `request` | Revise an approved or rejected case. Nullifies every earlier instance; keep the same case number. | +| `preauth` | `enhance` | **Enhancement** | `claim` | `v1/preauth/submit` | `request` | Add to an approved pre-authorisation. Quote its approval reference, and only add packages the plan allows to be enhanced. | +| `preauth` | `query-answer` | **Answer a query** | `claim` | `v1/preauth/submit` | `request` | The payer asked for more. Same bundle, same case number, the extra documents attached; never a fresh 12. | +| `preauth` | `predetermination` | **Predetermination** | `claim` | `v1/predetermination/submit` | `request` | What would the payer approve for this treatment? Asked before committing to a pre-authorisation, on its own endpoint. | +| `preauth` | `cancel` | **Cancel** | `claim-cancel` | `v1/task/submit` | `request` | Withdraw an active pre-authorisation with a Task. Allowed at any point until the claim is raised. | +| `claim` | `submit` | **Submit** | `claim` | `v1/claim/submit` | `request` | Reimbursement after discharge. Under PMJAY this also asserts the discharge, so it carries the discharge type and dates. | +| `claim` | `query-answer` | **Answer a query** | `claim` | `v1/claim/submit` | `request` | The claim processing doctor asked for more. Same bundle, same case number, the extra evidence attached. | +| `claim` | `reprocess` | **Reprocess** | `claim-reprocess` | `v1/task/submit` | `request` | Appeal a rejected claim with a Task and a supporting document. Once only; the Committee is final. | +| `claim` | `shortfall` | **Shortfall** | `claim-release` | `v1/task/submit` | `request` | The claim was paid short. Ask for the difference, after payment notice 33 has been acknowledged. | +| `paymentnotice` | `acknowledge` | **Acknowledge** | `payment-ack` | `v1/paymentnotice/on_request` | `on_request` | The receipt for a payment notice. Acknowledging does not resolve whatever the notice was about. | +| `search` | `search` | **Search** | `search` | `v1/search/submit` | `request` | Where a case got to, asked as a Task. Check Status answers the same question without a bundle. | + +--- + +## The 100 Official NHCX Test Use Cases + +NHA specifies a formal test matrix of 100 numbered use cases covering every scenario an integrator must demonstrate for network certification. The complete reference manifest is preserved at `fixtures/usecases.txt`. + +| Case IDs | Scenario Category | Exchanges Involved | Key Verification Criteria | Fixture Reference | +| :--- | :--- | :--- | :--- | :--- | +| **1 to 3** | Insurance Plan | `/insuranceplan/request` & `on_request` | Plan query (`Task` poll), package master response (`InsurancePlan`), error response | `fixtures/reference/provider/insurance/` | +| **4 to 7** | Coverage Validation | `/coverageeligibility/check` & `on_check` | Purpose `validation`. Checks policy in force, active dates, error handling | `fixtures/reference/provider/coverage/validation/` | +| **8 to 10** | Coverage Discovery | `/coverageeligibility/check` & `on_check` | Purpose `discovery`. Discovers policy from ABHA when policy number unknown | `fixtures/reference/provider/coverage/discovery/` | +| **11 to 13** | Auth-Requirements | `/coverageeligibility/check` & `on_check` | Purpose `auth-requirements`. Returns mandatory document codes (`MAND...`) | `fixtures/reference/provider/coverage/authrequirements/` | +| **14 to 16** | Preauth with Biometric Token | `/preauth/submit` & `on_submit` | Valid biometric token in header/token. Ack (wf20) & approval (wf21) | `fixtures/reference/provider/preauth/request/` | +| **17 to 19** | Preauth without Token (Consent) | `/preauth/submit` & `on_submit` | Physical consent form uploaded in supportingInfo questionnaire | `fixtures/collection/provider/preauth/` | +| **20 to 22** | Preauth Newborn Registration | `/preauth/submit` & `on_submit` | Newborn registered under mother's ABHA/PMJAY policy, birth certificate | [`docs/05-FHIR Reference/12-Claim Request.md`](/docs/nhcx/v1/reference/fhir/claim-request) | +| **23 to 25** | Preauth with STG | `/preauth/submit` & `on_submit` | Standard Treatment Guidelines questionnaire answered under supportingInfo | `fixtures/collection/pmjay-payer/insurance/` | +| **26 to 28** | Preauth with Implant & Attendant | `/preauth/submit` & `on_submit` | Implant product details and attendant certification included | `fixtures/reference/provider/preauth/request/` | +| **29 to 31** | Preauth Query & Resolution | `/preauth/submit` / `/communication/` | Payer queries additional remarks/documents; provider answers (wf19/131) | `fixtures/reference/provider/preauth/queryupdate/` | +| **32 to 34** | Preauth Standalone Procedure | `/preauth/submit` & `on_submit` | Single stand-alone medical or surgical package booking | `fixtures/reference/provider/preauth/request/` | +| **35 to 37** | Preauth Cyclic Procedure | `/preauth/submit` & `on_submit` | Recurring cyclic treatments (e.g. hemodialysis, chemotherapy cycles) | `fixtures/collection/provider/preauth/` | +| **38 to 40** | Preauth Unspecified Procedure | `/preauth/submit` & `on_submit` | Unspecified surgical package (`SGU100`) with surgical notes attached | `fixtures/reference/provider/preauth/request/` | +| **41 to 43** | Enhancement: Length of Stay | `/preauth/submit` & `on_submit` | Increase in LOS (`x-hcx-use_case: Enhancement`), updated clinical justification | `fixtures/reference/provider/preauth/enhancement/` | +| **44 to 46** | Enhancement: Additional Procedures | `/preauth/submit` & `on_submit` | Additional secondary procedures or STG questionnaire inclusion | `fixtures/reference/provider/preauth/enhancement/` | +| **47 to 49** | Resubmission with STG | `/preauth/submit` & `on_submit` | Procedure modification/addition after rejection with STG questionnaire | `fixtures/reference/provider/preauth/request/` | +| **50 to 52** | Resubmission without STG | `/preauth/submit` & `on_submit` | Procedure modification/addition after rejection without STG questionnaire | `fixtures/reference/provider/preauth/request/` | +| **53 to 54** | Preauth Cancellation | `/task/submit` & `on_submit` | Cancellation `Task` (`PC01`/`PC02`) referencing original preauthorisation | `fixtures/reference/payer/task/cancelled/` | +| **55 to 57** | Claim Cyclic Procedure | `/claim/submit` & `on_submit` | Claim submission for completed cyclic treatment cycle | `fixtures/collection/provider/claim/` | +| **58 to 60** | Claim Live Discharge | `/claim/submit` & `on_submit` | Normal completed discharge to home (`DTH`). Final bills and summary | `fixtures/reference/provider/claim/request/` | +| **61 to 63** | Claim Query & Resolution | `/claim/submit` / `/communication/` | Payer raises query on claim (wf27); provider submits answer (wf141/151) | `fixtures/reference/provider/claim/queryupdate/` | +| **64 to 72** | Claim LAMA Scenarios | `/claim/submit` & `on_submit` | LAMA before surgery (`LM100` per diem), after surgery (package), during surgery (`LM100`) | `fixtures/reference/payer/claim/approved/` | +| **73 to 81** | Claim DAMA Scenarios | `/claim/submit` & `on_submit` | DAMA before surgery (`LM100`), after surgery (package), during surgery (`LM100`) | `fixtures/reference/payer/claim/approved/` | +| **82 to 90** | Claim Death Scenarios | `/claim/submit` & `on_submit` | Discharge to mortuary (`DTM`). Before, after, and during surgery | `fixtures/collection/provider/claim/` | +| **91 to 93** | Claim Erroneous Request | `/claim/submit` & `on_submit` | Erroneous submission corrected with remaining balance and mandatory docs | `fixtures/reference/provider/claim/request/` | +| **94 to 96** | Claim Reprocess / Dispute | `/task/submit` & `on_submit` | Reprocess `Task` (code 36) with appeal justification and mandatory docs | `fixtures/reference/provider/claim/reprocess/` | +| **97 to 100**| Payment Notice & Settlement | `/paymentnotice/request` & `on_request` | Payment initiation (wf30), ack (wf17/31), cleared update, and final ack | `fixtures/reference/payer/payment/notice/` | + +## Testing Against the Dummy Payer + +The sandbox hosts a payer that answers back, participant ID `1000003538@hcx`. It handles insurance plan, coverage eligibility, preauthorisation, claim, payment notice and communication. For the plan call use provider ID `32722` and policy `100217`. + +Two test hooks drive its decisions: +- `dummyhcxpayer/process/request` makes it approve, reject or query a preauthorisation or claim you have submitted, by correlation ID. +- `dummyhcxpayer/paymentNotice/init` makes it send you a payment notice. + +A query from the dummy payer arrives as a communication request, which you answer on `/v1/communication/on_request` before the final decision comes back on `on_submit`. + +--- + +## Workflow Codes Cross-Reference + +Endpoints alone do not identify a transaction. A new preauthorisation, a resubmission, an enhancement and a query response all travel on `/v1/preauth/submit` with the same bundle. The workflow code in the header is what tells them apart, and each code expects a particular status word. See [Workflow Codes](/docs/nhcx/v1/concepts/workflow-codes) for the complete state machines and code tables. diff --git a/site/docs/nhcx/v1/concepts/nhcx-way-of-claim-settlement.md b/site/docs/nhcx/v1/concepts/nhcx-way-of-claim-settlement.md deleted file mode 100644 index 01ef7d524..000000000 --- a/site/docs/nhcx/v1/concepts/nhcx-way-of-claim-settlement.md +++ /dev/null @@ -1,177 +0,0 @@ ---- -title: NHCX way of claim settlement -sidebar_label: The NHCX way -description: "How the ten steps become structured exchanges: the request and callback pattern, and the six exchanges that carry a claim." -verification: unverified -source: NHCX sandbox portal, Technical Specifications and Open Protocol pages; NHCX Integration Handbook v1.0 (Aug 2026); NHCX FAQs v1.2 (Aug 2026) -sidebar_position: 4 ---- - -# NHCX way of claim settlement - -The ten steps of claim settlement do not change under NHCX. The same parties make the same decisions about the same case. What changes is the medium: instead of email threads and some 30-odd insurer portals, each step becomes a structured exchange over a single gateway, carrying FHIR resources rather than PDFs and scans. - -## In short - -- The ten steps do not change. The medium does: structured exchanges over one gateway, carrying FHIR rather than PDFs. -- Every substantive use case is an asynchronous pair: an action endpoint, then a matching `on_` callback. -- There are two acknowledgements. The first says only "accepted and passed on". -- Six exchanges carry the claim; Task, search, ABHA linking and predetermination sit off the main path. -- Both sides host endpoints, so no participant is purely an API caller. - -## From portals to an exchange - -Today a hospital integrates separately with every insurer. Each new payer means another portal, another login, another upload convention. The cost grows with the number of payers, which is why smaller hospitals often stay out of cashless arrangements altogether. - -On NHCX, a Provider integrates once and a Payer integrates once, each with the exchange. Every Provider can then reach every Payer, and the reverse, without either side building anything specific to the other. As on a securities exchange, participants connect to the platform rather than to each other. - -## What travels over the exchange - -Every exchange carries a FHIR bundle, and this is what makes the rest possible. - -A discharge summary sent as a PDF can be stored and read by a person, but nothing downstream can act on its contents. The same information as FHIR resources lets the payer's system read the diagnosis, the procedure codes, the line items and the amounts as data. That is the precondition for auto-adjudication and for the parameter-by-parameter reporting described in the introduction. Standard terminologies are used alongside FHIR so that a code written by the Provider means the same thing when read by the Payer. SNOMED CT for clinical concepts, ICD for diagnoses, LOINC for laboratory observations, and the value sets NRCeS publishes for claim-specific codes such as packages, benefit categories and supporting-information types. - -## The request and callback pattern - -Claim decisions take time. A preauthorisation may sit with a medical officer for hours, an adjudication for days. NHCX therefore models every substantive use case as an asynchronous pair: - -1. The initiator calls an action endpoint, for example `/v1/preauth/submit`. The exchange validates the request, acknowledges it, and routes it onward. -2. The responder does its work, then calls the matching `on_` endpoint, `/v1/preauth/on_submit`, to deliver the outcome back through the exchange. - -There are two acknowledgements, not one, and the difference matters. When the initiator sends a request, the exchange answers straight away with a receipt that says only "accepted and passed on". That receipt is not the decision. The decision arrives later, on the callback, when the responder has actually done the work. The exchange never answers a claim question on the spot; anyone waiting for a synchronous yes or no will wait forever. - -```mermaid -sequenceDiagram - box rgb(220,239,227) Provider side - participant P as Provider - end - box rgb(227,240,240) Exchange - participant X as NHCX - end - box rgb(220,232,245) Payer side - participant Y as Payer - end - P->>X: preauth/submit - X-->>P: 202 receipt: accepted, not decided - X->>Y: forwards the request - Y-->>X: 202 receipt - Note over Y: hours or days pass - Y->>X: preauth/on_submit with the decision - X-->>Y: 202 receipt - X->>P: delivers to the provider's callback - P-->>X: 202 receipt -``` - -Two consequences follow. Participation is never purely a matter of calling APIs, because in one half of every exchange each side is the responder and must host endpoints. And every request has an acknowledgement and a matching response, which is what makes the process auditable. - -## What every exchange needs - -Four things are common to all traffic, before any claim-specific call is made. - -- **Identity.** Participants are registered on the exchange and addressed by participant ID. The registry can be queried by role to find them. -- **Authentication.** Calls carry a token obtained from the ABDM gateway's sessions endpoint, with the same login a hospital already has from Milestone 1. -- **Confidentiality.** Payloads are encrypted for the receiver, using the receiver's public key, fetched from the exchange against their participant ID. -- **Traceability.** A status call returns the state of any request already triggered, so neither side has to infer what happened from silence. - -Both Providers and Payers implement these. They are the shared use cases, and the next chapter takes each in turn: how a participant is registered and found, how a session is obtained, and how a receiver's key is fetched and used. - -## The exchanges in a claim - -Each stage of the journey becomes an exchange on the network. Six carry the claim, and a handful sit off the main path. - -```mermaid -flowchart TD - classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 - classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 - A[Patient arrives] --> B[Coverage eligibility] - B --> C[Insurance plan] - C --> D[Preauthorisation] - D --> Q1{Payer answer} - Q1 -- query --> D3[Answer the query] --> Q1 - Q1 -- approved --> E[Treatment] - E --> E2{Case needs more?} - E2 -- yes --> F[Enhancement] --> Q1 - E2 -- no --> G[Discharge and claim] - G --> Q2{Payer answer} - Q2 -- query --> G3[Answer the query] --> Q2 - Q2 -- decided --> H[Adjudication] - H --> I[Payment notice] - I --> J[Acknowledgement] - H -. rejected or paid short .-> K["Task: reprocess or shortfall"] - D -. withdraw .-> L["Task: cancel"] - class A,B,C,D,D3,E,E2,F,G,G3,J,K,L provider - class Q1,Q2,H,I payer -``` - -### Coverage eligibility - -A patient arrives and presents a policy, or is found against one by mobile number or ABHA. Both sides now need the same assurance from opposite directions. The hospital needs to know the policy is live and covers the ailment. The insurer needs to know a genuine beneficiary has turned up at a hospital it has a tie-up with. - -*Policy verification by the hospital* and *beneficiary and tie-up verification by the insurer* are therefore not two conversations on the network. They are one exchange. The Provider asks whether coverage is in force, valid at a date, and what benefits and plan details attach to it. The Payer answers through the callback. What used to take a phone call and a portal login is settled in one round trip. The answer is a machine-readable set of limits the hospital's system can act on rather than a screenshot someone reads. - -This exchange is also the gate on registration. A patient is registered for treatment only once coverage is confirmed, and repeat the check whenever an additional treatment is added, so the remaining limit is known before anything is submitted. - -### Insurance plan - -Eligibility answers whether a patient is covered. The insurance plan answers what the policy itself contains: the covered services and their limits, the conditions and exclusions, the documents required, and the clinical guidelines that apply. - -It is a separate exchange because it changes on a different clock. Eligibility is asked per patient, per visit. The plan belongs to the policy and can be fetched once and kept, refreshed when the payer amends or renews it. Holding it locally is what lets a hospital system populate a form with the right benefits and check a treatment against the policy before anyone submits anything. - -### Preauthorisation - -With coverage established, the hospital sets out what it intends to do: the line of treatment, the procedures, the expected length of stay. *Treatment plan intimation* and *preauthorisation* are the two halves of one exchange. The Provider submits the request, the Payer adjudicates it and returns the decision through the callback, and the patient is admitted on that decision. - -The same exchange carries the whole preauthorisation cycle, not just the first request. An *enhancement*, where the case needs an additional procedure or a longer stay, is raised against the cycle already open. A resubmission revises a request that was rejected or approved for the wrong amount. A cancellation withdraws it. All of these reuse the same bundle, which is why the exchange is best thought of as a conversation about one authorisation rather than a single call. - -### Query - -*Query* is the one stage where the direction reverses. Everywhere else the Provider initiates and the Payer responds. Here the Payer asks for something it needs before it can decide, and the Provider answers. - -That reversal is why the same query endpoints appear on both sides of the NHCX Use Cases chapter: once as the Payer raising the request, once as the Provider answering it. A query is also not a rejection. The case stays open, and answering it continues the original submission rather than starting a new one. - -### Claim - -At discharge, everything that was previously printed, scanned and emailed becomes the claim. *Discharge and document submission* is a single submission carrying the consultation notes, diagnostic reports, medication record, discharge summary and bills as FHIR resources. That is what lets the Payer read the values rather than look at pictures of them. - -On the general network there is also a step before the claim. A hospital can send a provisional discharge submission while the patient is still on the ward, so the payer can check the treatment against the preauthorisation and raise anything it needs before the patient leaves. Under PMJAY this step does not exist and discharge is folded into the claim. - -*Adjudication* is not a separate exchange. It is the Payer's response to the claim already submitted, carrying whether the amount is granted, denied or partially granted, and the reasons. So the claim and its decision are two halves of one exchange, in the same way as the preauthorisation and its decision. - -### Payment - -*Payment* arrives as a notice from the Payer carrying the bank reference details and the status of the transfer, which the Provider acknowledges. Reconciliation gives the breakup for the case. - -The acknowledgement closes the claim on both books at the same moment, which the current email-and-portal mechanism cannot do, so neither side has to chase the other for confirmation that a payment landed. - -### Off the main path - -Four more exchanges exist without belonging to a single admission. - -**Task.** Where a Provider wants a rejected or partly paid claim looked at again, or wants an approved preauthorisation cancelled, it does not reopen the original exchange. It raises a **Task**, a general-purpose request that names the case it concerns and what is being asked of it, answered by the Payer through the corresponding callback. Reprocess, cancel and arbitration are all carried this way, which is why one exchange covers what look like three unrelated actions. - -**Search.** Providers and regulatory bodies can look up claim information, which is a read rather than part of any claim's progress. - -**ABHA linking.** A Payer links an ABHA number to a policy when the policy is created, and can de-link it later. This is what makes the beneficiary findable by ABHA at the point of care, and it is covered in the next chapter. - -**Predetermination.** Before treatment is planned in detail, a hospital can ask the payer what it would pay for a proposed course of treatment. The payer answers from the policy and the beneficiary's history. It uses the same shape as a preauthorisation but commits nobody to anything. - -One stage of the journey has no exchange of its own. *Intimation* is absorbed into the eligibility and preauthorisation exchanges rather than carried separately. - -## What a participant must build - -- **A Provider application** calls the exchange for eligibility, preauthorisation, claim submission, search, reprocessing and cancellation, and hosts callbacks for the Payer's communication requests and payment notices. -- **A Payer application** hosts callbacks for eligibility, plan details, preauthorisation and claim submissions, and calls the exchange to raise communication requests, send payment notices and manage ABHA-to-policy links. - -Both implement the shared use cases. - -## Where the detail lives - -Three chapters follow, and they divide the work between them. - -The next chapter, Participants and Policies, covers the groundwork every exchange depends on. How a participant joins the network and is found on it, how a session is obtained, how keys are made and fetched, and how a beneficiary is matched to a policy. None of it is a claim exchange, and all of it has to be in place before one can be attempted. - -JWE, Status and Errors then describes the message itself. The envelope and the sealed letter inside it, every field on the envelope, the status words, what the exchange's receipt looks like, and what happens when something is refused. - -The NHCX Use Cases chapter then takes each exchange named here and gives its endpoints. The action endpoint the initiator calls, the callback the responder implements, and the workflow code that tells one transaction from another where several share an endpoint. The codes themselves are collected in the Workflow Codes chapter that follows it. The exchanges are grouped there by who drives them: shared by both sides, driven by the Provider, or driven by the Payer. That grouping tells an integrator which half of each exchange it has to build. diff --git a/site/docs/nhcx/v1/concepts/payer-flexibility.md b/site/docs/nhcx/v1/concepts/payer-flexibility.md new file mode 100644 index 000000000..ff52cfb1f --- /dev/null +++ b/site/docs/nhcx/v1/concepts/payer-flexibility.md @@ -0,0 +1,72 @@ +--- +title: Payer flexibility +sidebar_label: Payer flexibility +sidebar_position: 7 +description: How each payer configures queries, answers and case numbers +verification: unverified +source: nhcx-package/docs/01-Overview/07-Payer Flexibility.md +generated: true +--- + +# Payer flexibility + +NHCX gives each payer room to run a few parts of the exchange its own way. The endpoints, the envelope and the bundles stay the same for every payer. What a payer can choose is how it raises a query, how much detail its answers carry, and when it first sends its own case number. Build your integration to handle every option, keep a setting per payer, and one integration works with any payer on the network. Today PMJAY uses one set of options and private insurers use another. + +## In short + +- **Query mode.** A payer raises a query either on the claim thread, as a `ClaimResponse`, or through the communication API, as a `CommunicationRequest`. PMJAY uses the first, private insurers the second. Answer in the mode the query came in. +- **Answer detail.** Every payer uses the same core entries, workflow ids and status words. PMJAY adds a few fields on top. A reader built for the full set reads every payer. +- **Case number.** The payer's own case number arrives in `preAuthRef`. When it first arrives depends on the payer. File the case under it. +- **Task spelling.** The reprocess and cancel Tasks both carry `intimationNumber`, whatever the payer. + +## Query mode + +Hold a query mode per payer and route the answer by it. + +### On the claim thread + +PMJAY uses this mode. The query arrives as a `ClaimResponse` with `outcome` `partial`, on the case's own thread. Its workflow id is 24 for a pre-authorisation, 241 for an enhancement and 27 for a claim. + +The answer is the whole bundle again, on `/v1/preauth/submit` or `/v1/claim/submit`, under a new correlation id. Its workflow id is 19, 131 or 161. + +In this mode a claim query answered on 151, 19 or 16 is refused with `PAYR-1321`; 161 is the id PMJAY takes. The desk's reply travels on the bundle's `CQD` supporting information, so a resubmission that carries no reply is decided as if none was given. + +A `CommunicationRequest` in this mode is not a query. It is a notification: a turnaround-time alert, a grievance, a wallet or policy change, a request for extra information, or an arbitration intimation, named in `Task.reasonCode`. Acknowledge it with the same Task bundle, `Task.status` `completed`, within thirty seconds, and leave the case's status alone. + +### Through the communication API + +Private insurers use this mode. The query arrives as a `CommunicationRequest` task bundle on `/v1/communication/request`, on a new thread, carrying 24, 241 or 27 with `request.initiated`. A `CommunicationRequest` carrying `additionalinfo`, or no reason code at all, is the query itself. + +The answer is a `Communication` task bundle on `/v1/communication/on_request`, on the request's own correlation id, echoing the request's workflow id. + +## Answer detail + +Every payer answers with the same core set of workflow ids and status words. + +| Message | Workflow id | Status | +| :---- | :---- | :---- | +| Pre-authorisation or enhancement received | 20 | `response.partial` | +| Pre-authorisation approved, rejected | 21, 23 | `response.complete` | +| Enhancement approved, denied | 22, 231 | `response.complete` | +| Claim received | 25 | `response.partial` | +| Claim approved, rejected | 26, 291 | `response.complete` | +| Cancellation done | PC02 | `response.complete` | +| Arbitration acknowledged | 37 | `response.complete` | +| Payment notice | 30 | `request.initiated`, on a new thread | + +A `ClaimResponse` bundle from any payer carries the `ClaimResponse`, the `Patient`, both `Organization` entries and the `Coverage`, in that order. Item adjudications carry `submitted`, `eligible` and `benefit`; totals carry the same three. PMJAY adds `eligpercent`, `eligquant`, `tax` and `incentive`; a private insurer omits them and adds nothing of its own. A reader built for the full set reads every payer without a change. + +## When the case number arrives + +The payer's own number for the case arrives in `ClaimResponse.preAuthRef`. A private insurer sends it on every answer, the acknowledgement on 20 or 25 included. PMJAY sends it on the first answer that decides or queries a pre-authorisation, on 21, 23 or 24, and on the claim's acknowledgement on 25; its acknowledgement on 20 carries none. `ClaimResponse.identifier` stays the hospital's own number on every answer. The payer's desk files the case under its own number and every later action names it. Keep it on the record the moment it arrives. A desk asked about a case by the hospital's own number answers that no such case exists. + +## One spelling on the Task + +The cancel and reprocess Tasks both carry their second input as `intimationNumber`. A reprocess under any other spelling is refused with `PAYR-1008`. Reprocess goes on 36 and is acknowledged on 37, and the new verdict follows on the claim's own thread. + +## Next steps + +- Cancel, reprocess and shortfall, in the FHIR Reference: the Task bundles element by element +- Communication, in the FHIR Reference: the query and the notification on one endpoint pair +- Claim query and answer, in the FHIR Reference: the scheme's query inside the claim response +- Sample bundles, in the FHIR Reference: the collection every shape here is taken from diff --git a/site/docs/nhcx/v1/concepts/pmjay-on-nhcx.md b/site/docs/nhcx/v1/concepts/pmjay-on-nhcx.md index 2ba2ab329..eb2ea562d 100644 --- a/site/docs/nhcx/v1/concepts/pmjay-on-nhcx.md +++ b/site/docs/nhcx/v1/concepts/pmjay-on-nhcx.md @@ -1,10 +1,11 @@ --- title: PMJAY on NHCX sidebar_label: PMJAY on NHCX -description: What changes when the payer is PMJAY, why the scheme is moving off TMS, and the five stages of an integrator's journey. +sidebar_position: 8 +description: What the Ayushman Bharat scheme changes on the network verification: unverified -source: "NHCX-PMJAY-HMIS Integration Overview; NHCX-PMJAY-HMIS Integration Guide, FRD v1.0 (Mar 2026); PMJAY Hospital Migration to HMIS via NHCX; NHCX PMJAY Integration Handbook v1.0 (Aug 2026); NHCX FAQs v1.2 #18" -sidebar_position: 6 +source: nhcx-package/docs/01-Overview/08-PMJAY on NHCX.md +generated: true --- # PMJAY on NHCX @@ -15,14 +16,6 @@ Claim adjudication under PMJAY runs through three integrated systems: the Benefi The previous chapters described how a claim moves between a Provider and a private insurer over NHCX. This chapter covers what changes when the Payer is PMJAY. -## In short - -- PMJAY is the world's largest health assurance scheme, running on the same NHCX endpoints as any payer. -- Claims processing today depends on the TMS provider system, which forces double data entry. -- An ABDM-enabled HMIS integrated with NHCX can run PMJAY workflows inside its own system. -- Four things differ from a private insurer: the InsurancePlan, biometrics, structured documents, and how queries travel. -- Going live is a mapping: NHA links the hospital's HEM ID to its NHCX participant ID by hand. - ## The problem with a TMS-only workflow PMJAY claims processing today depends on the TMS 2.0 Provider System, whether or not the hospital runs its own HMIS. That creates four difficulties. @@ -67,7 +60,7 @@ Set against the flows in the NHCX Use Cases chapter, the picture is: - **Get Insurance Plan, Get Policy, Coverage Eligibility Check, Claim Submission, Payment Notice and Status Check** behave the same as on any NHCX integration. - **Preauthorisation** behaves the same, except that mandatory biometric authentication of the beneficiary must be completed before it is submitted. -- **Communication Request** is not used for document queries, which travel on the preauthorisation and claim endpoints instead. It is used for turnaround-time alerts, grievances, wallet and policy updates, and arbitration acknowledgements. +- **Communication Request** is not used for document queries, which travel on the preauthorisation and claim endpoints instead. It is used for turnaround-time alerts, grievances, wallet and policy updates, and arbitration acknowledgements. A private insurer does the opposite: its query is the Communication Request itself. Payer flexibility, later in this section, sets the two query modes side by side. ## The integrator journey diff --git a/site/docs/nhcx/v1/concepts/pmjay-scheme-rules.md b/site/docs/nhcx/v1/concepts/pmjay-scheme-rules.md index 603bb7ab6..61faa0ecc 100644 --- a/site/docs/nhcx/v1/concepts/pmjay-scheme-rules.md +++ b/site/docs/nhcx/v1/concepts/pmjay-scheme-rules.md @@ -1,69 +1,111 @@ --- -title: PMJAY scheme rules -sidebar_label: PMJAY scheme rules -description: "The scheme rules that change what goes in a bundle: unspecified, cyclic, medical, newborn, implant and stratification cases." +title: PMJAY Scheme Rules and HMIS Integration +sidebar_label: PMJAY Scheme Rules and HMIS Integration +sidebar_position: 10 +description: Package-based tariffs, LM100 LAMA/DAMA arithmetic and `los` bounding verification: unverified -source: NHCX FAQs v1.2 §24 to §29; NHCX PMJAY Integration Handbook §6.6; Insurance Plan Implementation Guide; Standard Error Codes, Preauth PAYR-1259 to 1273 -sidebar_position: 7 +source: nhcx-package/docs/01-Overview/10-PMJAY Scheme Rules.md +generated: true --- -# PMJAY scheme rules +# PMJAY Scheme Rules and HMIS Integration -The exchanges in the previous chapter are the same for every PMJAY case. What varies is the case. The scheme has a handful of rules that change what goes into a bundle, and a hospital system has to recognise each situation before it builds one. +The Pradhan Mantri Jan Arogya Yojana (PMJAY) operates under strict operational, clinical, and financial guidelines that diverge significantly from commercial, fee-for-service insurance exchanges. This chapter details the scheme-specific business rules, calculation models, and clinical workflows that a Hospital Management Information System (HMIS) must implement. -## In short +--- + +## 1. Core Principles of PMJAY Adjudication -- The exchanges are the same for every case. What varies is the case. -- Five situations change what goes in a bundle: unspecified, cyclic, medical, newborn, and implant or stratification. -- An unspecified procedure is always planned, always a single line item, and always validated on the server. -- A cyclic procedure needs live biometrics at every visit, and pays only for the cycles captured. +1. **Strictly Package-Based**: PMJAY does not reimburse fee-for-service line items. All admissions are governed by Health Benefit Packages (HBP) with bundled tariffs covering registration, bed charges, nursing, consultations, procedures, medicines, consumables, and standard post-discharge follow-up. +2. **100% Cashless Mandate**: Empanelled healthcare providers cannot collect out-of-pocket co-payments from beneficiaries for covered procedures (`adjudication.copay` = ₹0). +3. **Pre-Authorization Gating**: Pre-authorization is mandatory for all secondary and tertiary surgical interventions. Final claims must reference the approved pre-authorisation number (`preAuthRef`). +4. **Mandatory Biometric Verification**: Live biometric capture (Fingerprint, Iris, or Face) is required at registration/admission, pre-authorisation, every cyclic treatment visit, and discharge. -## Unspecified procedures +--- -Sometimes a patient needs something the package list does not name. The scheme allows it, under conditions. +## 2. Discharge Types and Stages -The plan marks each package with an "unspecified" flag. Every specialty has one unspecified package, coded as the specialty's prefix followed by 215, for example `SG215` under general surgery. It must be chosen from the specialty the patient is being treated under; if that specialty has none, none can be used. The procedure name and the amount are typed in by the hospital instead of coming from the plan. Check the amount on the server against the beneficiary's remaining limit, not only on the screen. +Under PMJAY, a hospital cannot record an open-ended "referral" or "transfer" discharge. Every patient episode must terminate in one of four standardized discharge types, qualified by the surgical timing stage: -An unspecified procedure is always planned, never an emergency. It always stands alone as a single line item, never combined with a normal package, an enhancement or an implant. It still needs a coverage eligibility check with purpose auth-requirements. There is no co-payment; PMJAY is fully cashless. In the bundle it is an ordinary claim item with product code `U100`, the typed name as the display, and the typed amount as the price. Room type, if relevant, goes in the display text. +| Discharge Type Code | Display | Criteria & Adjudication Rule | +| :--- | :--- | :--- | +| `DTH` | Discharge to Home | Patient successfully completes inpatient care. Standard package adjudication applies. | +| `DTM` | Discharge to Mortuary | In-hospital mortality. Claim carries death date (`ONS`/`DTM`) and death summary questionnaire. | +| `LAMA` | Left Against Medical Advice | Patient absconds or departs against clinical counsel without formal documentation. | +| `DAMA` | Discharged Against Medical Advice | Patient or attendant executes an informed refusal undertaking. | -## Cyclic procedures +### The Discharge Stage Qualification +Every claim records the clinical timing stage under `supportingInfo` category `DIS` ("Discharge status"): +- `Before Surgery` +- `During Surgery` +- `After Surgery` -Dialysis is the model: one approval, many visits. The plan marks such packages as cyclic and says how many cycles one approval allows. The maximum is set by the state in the plan's claim conditions. +--- -Biometrics run through the whole thing. The patient is authenticated at the preauthorisation, again at every single visit with the process type set to Discharge, and again at the claim. Each visit needs a live capture; a refresh token is not accepted for a cycle, only for the final claim. Two cycles cannot be closer than 24 hours apart, counted as a rolling window, not a calendar day. A consent form cannot stand in for biometrics on a cyclic case. +## 3. Package LM100 and LAMA/DAMA Billing Rules -Payment follows the biometrics. Approval is for the maximum number of cycles, but the payer pays only for the cycles with a biometric capture. Four approved and two captured means two paid. Every cycle's clinical record travels as structured data, numbered in sequence and linked from the item, with a start and end time that the payer checks against the biometric timestamp; a mismatch voids the cycle. The claim is submitted once, after the last cycle. If the patient moves to another hospital, the first hospital is paid for its captured cycles and the patient is discharged; the new hospital raises a new preauthorisation. +When a patient departs under `LAMA` or `DAMA`, the scheme strictly prohibits billing the full surgical package if the surgical intervention was not completed: ```mermaid -sequenceDiagram - box rgb(220,239,227) Provider side - participant H as Hospital - end - box rgb(220,232,245) Payer side - participant Y as Payer - end - Note over H: live biometric, process type Preauth - H->>Y: preauthorisation for N cycles - Y-->>H: approved for N - loop each visit, at least 24 hours apart - Note over H: live biometric, process type Discharge - H->>H: record the cycle with start and end time - end - Note over H: biometric or refresh token, process type Discharge - H->>Y: one claim, cycles as numbered structured records - Y-->>H: paid for the cycles with a biometric capture +flowchart TD + Discharge[LAMA or DAMA Discharge] --> StageCheck{Discharge Stage?} + StageCheck -->|Before Surgery| BillLM100[Nullify Surgical Package
Bill LM100 at Daily Per Diem Rate] + StageCheck -->|During Surgery| BillLM100 + StageCheck -->|After Surgery| BillPackage[Bill Full Approved Surgical Package
LM100 Prohibited] ``` -## Medical packages +### 1. Before or During Surgery +- **Nullification**: Submitting a LAMA/DAMA claim before or during surgery immediately **nullifies all prior approved surgical pre-authorisation packages**. +- **Item Code `LM100`**: The claim replaces all surgical line items with a single item: procedure code `LM100` (Conservative / Per Diem Inpatient Care). +- **Daily Quantity Multiplier & `los` Bound**: The quantity on `LM100` is set to the exact number of days the patient was admitted (`Discharge Date - Admission Date`). This quantity is strictly bounded by the `los` (Maximum Length of Stay) attribute declared in the scheme package master (`InsurancePlan`). Admitted days billed cannot exceed `los` without prior clinical justification; stays extending beyond standard procedure limits in ordinary admissions require an approved pre-authorisation enhancement request (workflow 13). +- **Stratification Tariffs**: Procedure `LM100` is stratified by bed tier in the PMJAY master: Routine Ward (₹1,800/day, `STRAT006a`), High Dependency Unit HDU (₹2,700/day, `STRAT006b`), ICU Without Ventilator (₹3,600/day, `STRAT006c`), and ICU With Ventilator (₹4,500/day, `STRAT006d`). +- **Error Safeguard**: Submitting a surgical package code alongside LAMA/DAMA before or during surgery triggers automated rejection with error `PAYR-1362`. +- **Pre-Auth Prohibition**: `LM100` is strictly a claim-time adjudication code. Submitting `LM100` in a pre-authorisation request triggers error `PAYR-1270`. -A medical package is treatment without surgery: medicines, therapy, monitoring. Two rules. Only one medical package can be claimed per episode. And a medical package cannot be combined with a surgical one, because surgical rates already include care before and after the operation. A patient admitted for a medical condition who then needs surgery is not booked under both. +### 2. After Surgery +- If surgery was successfully performed and the patient subsequently leaves against medical advice during post-operative recovery: + - The approved surgical package remains valid. + - `LM100` is **not** used. + - The discharge stage is recorded as `After Surgery`, and the hospital is reimbursed for the surgical package. -## Newborns and children up to six +--- + +## 4. In-Hospital Death Claims (`DTM`) -A newborn has no card and no wallet of its own. The parent's card and wallet are used throughout, with the whole family sharing one annual limit. In the bundle the parent is the Patient; the child is a second, linked Patient resource with the child's name, gender and date of birth, referenced from the parent's record with link type `refer`. Twins are two children and two separate preauthorisations. +If a patient expires during hospitalisation: +1. The discharge code is set to `DTM` (Discharge to Mortuary). +2. The claim retains the package appropriate to the clinical management provided up to the point of death. +3. The claim **must** include the date and time of death under `supportingInfo` category `ONS` with code `DTM`. Omitting the death timestamp causes rejection with error `PAYR-1096`. +4. The hospital must complete and attach the PMJAY Death Summary Questionnaire defined in the InsurancePlan. + +--- -Proof of the child's date of birth is mandatory, filed under category `DOB` with code `BCF` for a birth certificate or `DCB` for a government hospital's discharge slip while the certificate is awaited. The bill is in the parent's name as "Baby of" the parent, with a supporting attachment; a bill in the baby's name alone is likely to be rejected. A child older than a newborn but under six is treated as an ordinary case on the parent's wallet, without the linked-child construct. +## 5. Cyclic Procedures (Dialysis, Chemotherapy) + +Cyclic treatments represent recurring therapy requiring multiple sessions under a single overarching pre-authorisation: +- **Plan Identification**: Packages flag cyclic eligibility with `cyclic_proc_yn = Y` and `no_of_cycles` in the `InsurancePlan`. +- **Pre-Auth Booking**: Pre-authorisation is requested and approved for the entire block of sessions (e.g., 10 cycles). +- **The Rolling 24-Hour Rule**: Two cycles of the same procedure cannot occur within a **rolling 24-hour window** (measured strictly from biometric timestamp to biometric timestamp, not calendar days). Submitting cycles within 24 hours triggers rejection with error `PAYR-1369`. +- **Biometric Enforcement**: Live biometric capture is mandatory at pre-auth, at **every individual treatment visit**, and at final discharge. +- **Payment Settlement**: The claim is submitted once after all sessions conclude. Payment is released exclusively for sessions backed by a verified biometric capture. (E.g., 10 sessions approved, 8 biometric captures recorded = 8 sessions paid). +- **Clinical Mapping**: Each cycle is recorded under `supportingInfo` category `CD` (Clinical document) with code `TD` (Treatment detail), carrying exact start and end timestamps matching the biometric verification log. + +--- + +## 6. Unspecified Surgical and Medical Procedures + +When a patient requires a clinically necessary surgical intervention not present in the PMJAY Health Benefit Package master: +1. **Strictly Planned**: Unspecified procedures are permitted **only for elective/planned admissions**; emergency cases cannot utilize unspecified package codes. +2. **Specialty Alignment**: Must be booked under the patient’s treating specialty. +3. **Coding Convention**: + - In live PMJAY plans, the procedure code is constructed as the **Specialty Prefix + `U100`** (e.g., `SGU100` for General Surgery, `SMU100` for Oral & Maxillofacial Surgery). + - Some earlier NHA documentation referenced `Specialty + 215` (e.g., `SG215`). Systems must echo the exact code returned in the hospital’s dynamic `InsurancePlan`. +4. **Free-Text Specification**: The procedure name, clinical description, and requested tariff are entered by the hospital staff rather than selected from fixed master lists. +5. **Wallet Validation**: The entered amount cannot exceed the beneficiary’s available wallet balance. HMIS systems must validate this balance server-side before submission. +6. **Standalone Requirement**: An unspecified procedure must be a solitary line item; it cannot be clubbed with standard packages, implants, or stratified ICU addons. + +--- -## Implants and stratification +## 7. Biometric Authentication and Aadhaar Exemption -A package rate is a package rate. What the plan allows on top is spelled out per package as cost qualifiers: an implant such as a stent, a higher bed category, a high-end medicine or investigation. Each has its own code from the plan's master list, and each is a separate line in the bundle carrying the extra amount. The plan also says whether a package supports enhancement at all; a package that does not will have an enhancement rejected. +The captures these rules call for, at registration, preauthorisation, every cyclic visit and discharge, are made through ABDM's biometric APIs, not over NHCX. Biometric Authentication, in Building a Provider, gives the calls: fingerprint and iris on one host, face on another, the user token they return and its refresh, the `K-547` device error, and the Aadhaar exemption consent and questionnaire that stand in where a capture is not possible. diff --git a/site/docs/nhcx/v1/exchanges/pmjay-use-cases.md b/site/docs/nhcx/v1/concepts/pmjay-use-cases.md similarity index 92% rename from site/docs/nhcx/v1/exchanges/pmjay-use-cases.md rename to site/docs/nhcx/v1/concepts/pmjay-use-cases.md index 2c01ca6bb..5be493cb7 100644 --- a/site/docs/nhcx/v1/exchanges/pmjay-use-cases.md +++ b/site/docs/nhcx/v1/concepts/pmjay-use-cases.md @@ -1,10 +1,11 @@ --- title: PMJAY use cases sidebar_label: PMJAY use cases -description: "The D-series: what a PMJAY integration must fetch, prove and package around each of the shared NHCX endpoints." +sidebar_position: 9 +description: PMJAY-specific use cases D1 to D13 verification: unverified -source: NHCX-PMJAY-HMIS Integration Guide, FRD v1.0 (Mar 2026, work in progress); NHCX-PMJAY-HMIS Integration Overview; NHCX PMJAY Integration Handbook v1.0 (Aug 2026); NHCX FAQs v1.2 (Aug 2026, approval pending); NHCX APIs to be called based on scenario; Insurance Plan Implementation Guide; Biometric Authentication Implementation Steps; NHCX-PMJAY-HMIS Test Cases; Sample FHIR bundles -sidebar_position: 3 +source: nhcx-package/docs/01-Overview/09-PMJAY Use Cases.md +generated: true --- # PMJAY use cases @@ -15,10 +16,6 @@ The exchanges below are the D-series. Where a use case is distinguished by a wor ```mermaid flowchart TD - classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 - classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 D1[D1 Fetch the insurance plan and keep it fresh] --> R[Patient registers] R --> D2[D2 Biometric authentication] D2 --> D3[D3 Eligibility: validation] @@ -38,17 +35,8 @@ flowchart TD D13 -- paid short --> D12[D12 Claim the shortfall] D4 -. withdraw .-> D8[D8 Cancel] D4 -. revise .-> D5[D5 Resubmit] - class D1,R,D2,D3,D3b,D4,D7,TR,E,D6,D2b,D9,D10,D11,D12,D8,D5 provider - class Q,Q2,D13 payer ``` -## In short - -- The endpoints are the same as any NHCX integration. What changes is the behaviour around them. -- The D-series covers what must be fetched first, proved before a request is accepted, and how a query is answered. -- Biometric authentication and structured health information types are the two additions with no generic equivalent. -- Document queries never travel on the communication channel under PMJAY. - ## Scheme setup and identity ### D1: fetch insurance plan @@ -85,13 +73,13 @@ On success the system receives a User Token, which must be passed as a header on ```mermaid sequenceDiagram - box rgb(220,239,227) Provider side + box Provider side participant H as Hospital system end - box rgb(227,240,240) ABDM + box ABDM participant A as ABHA biometric service end - box rgb(220,232,245) Payer side + box Payer side participant Y as PMJAY payer end H->>A: auth init, fingerprint, iris or face @@ -223,10 +211,6 @@ Which discharge stages trigger it is stated four ways across the sources: before ```mermaid flowchart TD - classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 - classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 A[Patient leaves] --> B{How?} B -- went home --> DTH[DTH] B -- died --> DTM[DTM, plus the death date] @@ -236,8 +220,6 @@ flowchart TD DAMA --> S S -- before surgery --> LM["LM100 only, quantity = days admitted, preauthorised items voided"] S -- after surgery --> ST[Surgery items stand, no LM100] - class A,DTH,DTM,LAMA,DAMA,LM,ST provider - class B,S other ``` **A note on the codes above.** These combinations are taken from the NHCX gateway validation messages, which reject a claim naming the exact category and code expected. The Functional Requirement Document gives a different set for three of these fields, listing the admission, surgery and discharge dates under categories `ADMD`, `SURD` and `DSCHD` with code `ADDD` throughout. Those three categories do not appear in the supporting info category value set. Confirm against the current NRCeS value sets before building. @@ -246,7 +228,7 @@ Claims are adjudicated manually, approved or rejected case by case. ### D10: respond to claim query -**Workflow ID:** 151 +**Workflow ID:** 161. The payer refuses 151, 19 and 16 with `PAYR-1321`. As with D7, the provider answers a payer query with a claim query response using the same Claim Bundle structure. @@ -278,10 +260,6 @@ The two mechanisms do not chain. If a reprocess results in a partial approval, n ```mermaid flowchart TD - classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 - classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 A[Claim adjudicated] --> B{Outcome} B -- rejected --> C["D11 Reprocess: Task, reason claimrejected, document attached, no amount"] B -- paid in full --> D[Done] @@ -290,9 +268,6 @@ flowchart TD F --> G["D12 Shortfall: Task, reason partialpayment, amount up to the difference"] C --> H[Claim Review Committee decides, and that is final] G --> H - class C,E,F,G provider - class A,B,H payer - class D other ``` ## Payment @@ -319,7 +294,7 @@ Each document is limited to 2 MB, against a whole-bundle maximum of 20 MB, and o The full code list, provider-initiated and payer response, is in the Workflow Codes chapter. The codes are the same under PMJAY, and each D-series entry above carries the one that applies to it. -Three points are specific to PMJAY. Because the scheme does not use the Communication API for document queries, the query codes 19 and 151 travel on the preauthorisation and claim endpoints. That is what allows D7 and D10 to reuse the original bundle structure unchanged. The Communication API is still used, with its own reason codes, for turnaround-time alerts, grievances, wallet and policy changes, and arbitration acknowledgements, so a hospital system must still host it. And codes 14 and 141 for discharge have no counterpart here, because PMJAY folds discharge into the claim rather than treating it as a submission of its own. +Three points are specific to PMJAY. Because the scheme does not use the Communication API for document queries, the query codes 19 and 161 travel on the preauthorisation and claim endpoints. That is what allows D7 and D10 to reuse the original bundle structure unchanged. The Communication API is still used, with its own reason codes, for turnaround-time alerts, grievances, wallet and policy changes, and arbitration acknowledgements, so a hospital system must still host it. And codes 14 and 141 for discharge have no counterpart here, because PMJAY folds discharge into the claim rather than treating it as a submission of its own. ## Error handling and validation diff --git a/site/docs/nhcx/v1/concepts/what-nhcx-is.md b/site/docs/nhcx/v1/concepts/what-nhcx-is.md deleted file mode 100644 index 6d57798d0..000000000 --- a/site/docs/nhcx/v1/concepts/what-nhcx-is.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: What NHCX is -sidebar_label: What NHCX is -description: The exchange, what it aims to achieve, what it is made of, who is on it, and what changes for a hospital that joins. -verification: unverified -source: NHCX sandbox portal, Introduction and Technical Specifications pages; NHCX Usecases (NHA); NHCX Documentation v1.5.0 -sidebar_position: 2 ---- - -# What NHCX is -## In short - -- NHCX is one road between hospitals and insurers, replacing a separate integration per insurer. -- NHA states five objectives: wider cover, faster money, room to innovate, one process, a better patient experience. -- It is three rulebooks and a referee: the protocol, the data specifications, the operational guidelines, and NHA. -- Each role has a fixed list of what it may send and receive. -- Records cross as data rather than pictures, which is what makes automatic decisions possible. - -## What it is - -The National Health Claims Exchange is a single road between hospitals and insurers. A hospital asks whether a patient is covered, asks permission to treat, sends the bill, and gets paid. Today each of those steps runs differently for every insurer. On the exchange they run the same way for all of them. - -It carries the whole journey: checking cover before admission, getting treatment approved, submitting the claim at discharge, being paid, and arguing when the answer is wrong. Every step is a message out and an answer back later, so nothing is left hanging and there is a record of both halves. - -Hospitals, insurers, patients, regulators and observers all connect to it the same way. - -NHCX is developed under the Ayushman Bharat Digital Mission (ABDM) by the National Health Authority (NHA), in consultation with the Insurance Regulatory and Development Authority of India (IRDAI). The idea is to introduce a platform of exchange to Providers and Payers so that both can transfer digitised health records and other pertinent information directly, in a machine readable format, to their counterpart. - -## What NHCX aims to achieve - -NHA states five objectives for the exchange. - -- **Wider cover.** Bring new kinds of claim onto the network, including outpatient (OPD) visits and pharmacy bills, so insurance is not only about hospital stays. -- **Faster money.** Shorten the time between treatment and payment, and make cashless treatment workable even in small hospitals. -- **Room to innovate.** Give insurers the structured data they need to automate decisions and to spot fraud. -- **One way of doing things.** A single, rule-based process that both sides trust, instead of every insurer running its own. -- **A better patient experience.** Fewer forms, fewer delays, fewer surprises at discharge. - -Underneath all five sits one requirement. A hospital's software and an insurer's software are built by different people on different technology, and a message has to mean exactly the same thing at both ends. That is why everything on the exchange is written in one agreed format, with agreed words for diagnoses, procedures and test results. The third chapter explains what that format is and why it matters. - -## NHCX operating framework - -A stock exchange works because a buyer and a seller each connect to the exchange rather than to each other. NHCX works the same way. A hospital connects once, an insurer connects once, and from then on either can reach the other without having built anything specific to them. - -## What NHCX is made of - -It helps to think of NHCX as three rulebooks and one referee. - -- **The protocol** says how a message travels: how it is addressed, sealed, acknowledged and answered. It is deliberately like email: a message goes to the exchange, the exchange passes it on, and the reply comes back the same way. -- **The data specifications** say what goes inside a message. Claims, policies, payments and the rest are written as FHIR records, using profiles published by NRCeS, so that both sides read the same thing. -- **The operational guidelines** say who may join, how they are checked, what they may do, and how they can be removed. -- **NHA is the referee.** It publishes the rules, runs the exchange, and works with NRCeS and IRDAI to change them. - -Five principles run through all of it. The rules are **open**, published under a permissive licence so anyone can build against them. They are **evolvable**, so a scheme can add what it needs without breaking everyone else. They are **minimal**, so they are easy to understand and do not hold back innovation. They protect **privacy and security**, with sealed contents and tamper-proof records. And they are **unbundled**, so a participant can adopt one part without adopting all of it. - -## Who is on the network - -Most of this documentation talks about two parties, the hospital and the insurer. The network recognises more. - -- **Providers.** Hospitals and clinics, identified by their Health Facility Registry entry. -- **Payers.** Insurance companies, and the government agencies that pay for schemes. -- **TPAs.** Third-party administrators who process claims on an insurer's behalf. On the network a TPA behaves like a payer. -- **Regulators.** IRDAI and bodies like it, who can search claims across every payer. -- **Scheme sponsors.** The owner of a programme, for example NHA for Ayushman Bharat, with payer-level access. -- **Researchers and insurance marketplaces.** Given aggregated or consented data only. -- **Patient apps.** Personal health record apps that receive notifications on a beneficiary's behalf. -- **Other exchanges.** NHCX is designed so that more than one instance can exist and relay to each other. - -```mermaid -flowchart LR - classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 - classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 - H1[Hospital] --- X((NHCX)) - H2[Clinic] --- X - A[Patient app] --- X - X --- P1[Insurer] - X --- P2[Government scheme] - X --- T[TPA] - X --- R[Regulator] - X --- N[Another exchange] - class H1,H2 provider - class P1,P2,T payer - class X,N exchange - class A,R other -``` - -Each role comes with a fixed list of what it may send and receive. A hospital can ask about eligibility and submit claims; it cannot search another hospital's claims. A regulator can search; it cannot submit. - -## What changes in practice - -Four things are different once a hospital is on the exchange, and the rest of this documentation is about making them work. - -**Records go across as records.** A hospital's software already holds the diagnosis, the test results and the treatment as data. Today most of it is printed or turned into a picture before it is sent, and the insurer's software cannot read a picture. On the exchange it goes across as data and stays readable. - -**That makes automatic decisions possible.** An insurer can only decide a claim by machine if it can read the values. A blood test sent as ten separate results can be checked automatically; the same test sent as a scan cannot. - -**One place to type things.** The hospital's own system becomes the single place the information is entered, rather than being re-keyed into an insurer's portal afterwards. Most rejections on technical grounds come from that second typing. - -**Any hospital can reach any insurer.** A small hospital that could never afford to integrate with thirty insurers separately can integrate once. - -The next chapter follows a claim from admission to payment, in the ordinary language of the people who do it, before any of this becomes technical. diff --git a/site/docs/nhcx/v1/concepts/workflow-codes.md b/site/docs/nhcx/v1/concepts/workflow-codes.md new file mode 100644 index 000000000..ebfb7a962 --- /dev/null +++ b/site/docs/nhcx/v1/concepts/workflow-codes.md @@ -0,0 +1,209 @@ +--- +title: Workflow Codes +sidebar_label: Workflow Codes +sidebar_position: 6 +description: The 74 workflow IDs and their message directions +verification: unverified +source: nhcx-package/docs/01-Overview/06-Workflow Codes.md +generated: true +--- + +# Workflow Codes + +Endpoints alone do not identify an NHCX transaction. A new preauthorisation, a resubmission, an enhancement and a query response all travel on `/v1/preauth/submit` carrying the same bundle. What separates them is the workflow code in the `x-hcx-workflow_id` header. Each code also expects a particular status word, given here beside it. The source is the official Workflow Status Sheet on the portal, updated 18 August 2026, which remains the authority as codes are added. + +The A-series registry and session calls carry no workflow code because they are infrastructure calls rather than claim transactions. + +## Workflow Code Prefix Families + +NHA organizes workflow codes into numeric mainline cashless codes and alphanumeric families: + +| Prefix | Family Name | Scope & Operational Coverage | +| :---: | :--- | :--- | +| **`R`** | **Reimbursement** | Mirrors the numeric cashless codes for the reimbursement route - the patient paid, and is claiming it back. | +| **`G`** | **Grievance** | Raising a grievance, its acknowledgement, and its failure path. | +| **`RP`** | **Return payment** | Money going back the other way. | +| **`N`** | **Notifications** | Push notifications addressed to payer, provider or beneficiary. | +| **`DC`** | **Discharge correction** | Correcting a discharge already submitted. | +| **`PC`** | **Preauth cancellation** | Withdrawing a pre-authorisation. Raised on /v1/task/submit with code `cancel`, not on the preauth endpoint. | + +--- + +## Mainline Cashless State Machines + +In the diagrams below, each arrow carries the workflow code of the message that moves the case. + +### Preauthorisation Lifecycle + +```mermaid +stateDiagram-v2 + [*] --> Requested: 12 + Requested --> Received: 20 + Received --> Approved: 21 + Received --> Rejected: 23 + Received --> Queried: 24 + Queried --> QueryAnswered: 19 + QueryAnswered --> Received + Rejected --> Resubmitted: 121 + Resubmitted --> Received: 251 + Approved --> EnhancementAsked: 13 + EnhancementAsked --> Approved: 22 + EnhancementAsked --> EnhancementDenied: 231 + EnhancementAsked --> EnhancementQueried: 241 + EnhancementQueried --> EnhancementAnswered: 131 + EnhancementAnswered --> Approved: 22 + EnhancementAnswered --> EnhancementDenied: 231 + Received --> CancelAsked: PC01 + Approved --> CancelAsked: PC01 + CancelAsked --> Cancelled: PC02 + Approved --> [*] +``` + +### Claim Lifecycle + +```mermaid +stateDiagram-v2 + [*] --> Submitted: 15 + Submitted --> Received: 25 + Received --> InProcess: 28 + InProcess --> Forwarded: 29 + Forwarded --> InProcess + InProcess --> Queried: 27 + Queried --> QueryAnswered: 151 + QueryAnswered --> InProcess + InProcess --> Approved: 26 + InProcess --> Denied: 291 + Denied --> ArbitrationAsked: 36 + ArbitrationAsked --> ArbitrationAcknowledged: 37 + ArbitrationAcknowledged --> ReprocessApproved: 252 + ArbitrationAcknowledged --> ReprocessRejected: 253 + ArbitrationAcknowledged --> ReprocessQueried: 254 + ReprocessQueried --> ArbitrationAcknowledged + Approved --> [*] +``` + +### Payment & Settlement Lifecycle + +```mermaid +stateDiagram-v2 + [*] --> Initiated: 30 + Initiated --> Processed: 31 + Processed --> Settled: 33, UTR available + Settled --> Acknowledged: 17, sent by the provider + Acknowledged --> [*] +``` + +--- + +## Master Catalog of All 74 Workflow Codes + +Complete index of all published codes: + +| Code | Meaning / Name | Sent By | Permitted Statuses | Stages / Outcomes | Reused | +| :--- | :--- | :--- | :--- | :--- | :---: | +| **`10`** | Patient Registered | Provider | `request.initiated` | Patient Registered | No | +| **`11`** | Patient Admitted | Provider | `request.initiated` | Patient Admitted | No | +| **`12`** | Preauth Request Initiated | Provider | `request.initiated` | Preauth Request Initiated | No | +| **`121`** | Preauth Request Resubmitted | Provider | `request.initiated` | PreAuth Reprocess(Resubmission) Initimation | No | +| **`PC01`** | Preauth Cancel Initiated | Provider | `request.initiated` | Preauthorization Cancellation | No | +| **`19`** | Preauth Query Response Submitted | Provider | `response.complete` | PreAuth Query Response Submitted | No | +| **`13`** | Enhancement Request Initiated | Provider | `request.initiated` | Enhancement Request Initiated | No | +| **`131`** | Enhancement Query Response Submitted | Provider | `response.partial`, `response.error`, `response.complete` | Enhancement Query Ack Success, Enhancement Query Ack Failed, Enhancement Query Response Submitted | Yes | +| **`14`** | Discharge Submitted | Provider | `request.initiated` | Discharge Submitted | No | +| **`141`** | Discharge Query Response Submitted | Provider | `response.complete` | Discharge Query Response Submitted | No | +| **`15`** | Claim Request Initiated | Provider | `request.initiated` | Claim Request Initiated | No | +| **`151`** | Claim Query Response Submitted | Provider | `response.complete` | Claim Query Response Submitted | No | +| **`17`** | Payment Received | Provider | `response.complete` | Payment Notice Recived | No | +| **`36`** | Claim Arbitration Request Submitted | Provider | `request.initiated` | Claim Arbitration Intimation | No | +| **`20`** | Preauth Request Received | Payer | `response.partial`, `response.error` | PreAuth Ack Success, PreAuth Ack Failed | Yes | +| **`21`** | Preauth Request Approved | Payer | `response.complete` | Preauth Request Approved | No | +| **`22`** | Enhancement Request Approved | Payer | `response.complete` | Enhancement Request Approved | No | +| **`23`** | Preauth Request Rejected | Payer | `response.complete` | PreAuth Request Rejected | No | +| **`24`** | Preauth Request Queried | Payer | `request.initiated` | PreAuth Request Queried | No | +| **`241`** | Enhancement Request Queried | Payer | `request.initiated` | Enhancement Query Raise | No | +| **`25`** | Claim Request Received | Payer | `response.partial`, `response.error` | Claim Doc Ack Success, Claim Doc Ack Failed | Yes | +| **`26`** | Claim Request Approved | Payer | `response.complete` | Claim Request Approved | No | +| **`27`** | Claim Request Queried | Payer | `request.initiated`, `response.partial/complete` | Claim Request Queried, Claim Request Queried | Yes | +| **`28`** | Claim Request In Process | Payer | `response.partial` | Claim Request in process | No | +| **`29`** | Claim Forwarded | Payer | `response.partial` | Claim Forwarded | No | +| **`251`** | Reprocess Request Received | Payer | `response.complete` | PreAuth Reprocess Ack | No | +| **`252`** | Reprocess Request Approved | Payer | `response.complete` | Reprocess Request Approved | No | +| **`253`** | Reprocess Request Rejected | Payer | `response.complete` | Reprocess Request Rejected | No | +| **`254`** | Reprocess Request Queried | Payer | `request.initiated` | Reprocess Request Queried | No | +| **`261`** | Discharge Request Approved | Payer | `response.partial` | Discharge Request Approved | No | +| **`262`** | Discharge Request Rejected | Payer | `response.complete` | Discharge Request Rejected | No | +| **`263`** | Discharge Request Queried | Payer | `request.initiated` | Discharge Request Queried | No | +| **`30`** | Payment Initiated | Payer | `request.initiated`, `response.partial`, `response.error` | Payment Notice Initmation, Payment Notice Ack Success, Payment Notice Ack Failed | Yes | +| **`31`** | Payment Processed | Payer | `request.initiated` | Payment Processed | No | +| **`33`** | Payment Settled | Payer | `request.initiated` | Payment Settled | No | +| **`45`** | Final Bill Initimation | | `request.initiated`, `response.partial`, `response.error` | Final Bill Initimation, Final Bill Ack Success, Final Bill Ack Failed | Yes | +| **`181`** | Final Bill Query Response | | `response.complete` | Final Bill Query Response | No | +| **`161`** | Claim Doc Query Response | | `response.complete` | Claim Doc Query Response | No | +| **`18`** | Preauth Query Ack Success | | `response.partial`, `response.error` | PreAuth Query Ack Success, PreAuth Query Ack Failed | Yes | +| **`231`** | Enhancement Deny | | `response.complete` | Enhancement Deny | No | +| **`46`** | Final Bill Approve | | `response.complete` | Final Bill Approve | No | +| **`47`** | Final Bill Query Raise | | `request.initiated`, `response.partial`, `response.error` | Final Bill Query Raise, Final Bill Query Ack Success, Final Bill Query Ack Failed | Yes | +| **`491`** | Final Bill Deny | | `response.complete` | Final Bill Deny | No | +| **`291`** | Claim Doc Deny | | `response.complete` | Claim Doc Deny | No | +| **`R122`** | Reimburstment Claim Reprocess Requested | | `request.initiated` | Reimburstment Claim Reprocess Requested | No | +| **`R15`** | Reimburstment Claim Submitted | | `request.initiated` | Reimburstment Claim Submitted | No | +| **`R151`** | Reimburstment Claim Query Response Submitted | | `response.complete` | Reimburstment Claim Query Response Submitted | No | +| **`R252`** | Reimburstment Claim Reprocess Request Approved | | `response.complete` | Reimburstment Claim Reprocess Request Approved | No | +| **`R253`** | Reimburstment Claim Reprocess Request Rejected | | `response.complete` | Reimburstment Claim Reprocess Request Rejected | No | +| **`R254`** | Reimburstment Claim Reprocess Request Queried | | `request.initiated` | Reimburstment Claim Reprocess Request Queried | No | +| **`R26`** | Reimburstment Claim Approved | | `response.complete` | Reimburstment Claim Approved | No | +| **`R27`** | Reimburstment Claim Queried | | `request.initiated` | Reimburstment Claim Queried | No | +| **`R28`** | Reimburstment Claim Evaluation In Process | | `response.partial` | Reimburstment Claim evaluation in process | No | +| **`R291`** | Reimburstment Claim Rejected | | `response.complete` | Reimburstment Claim Rejected | No | +| **`34`** | Wallet Upgrade Intimation | | `request.initiated` | Wallet Upgrade Intimation | No | +| **`38`** | Fraud Alert | | `request.initiated` | Fraud Alert | No | +| **`35`** | Wallet Upgrade Acknowledgement | | `response.complete` | Wallet Upgrade Acknowledgement | No | +| **`37`** | Claim Arbitration Acknowledgement | | `response.complete` | Claim Arbitration Acknowledgement | No | +| **`39`** | Fraud Alert Acknowledgement | | `response.complete` | Fraud Alert Acknowledgement | No | +| **`G11`** | Grievance Intimation | | `request.initiated` | Grievance Intimation | No | +| **`G12`** | Grievance Acknowledment | | `response.complete` | Grievance Acknowledment | No | +| **`G13`** | Grievance Intimation Failure | | `response.error` | Grievance Intimation Failure | No | +| **`41`** | Preauth Arbitration Intimation | | `request.initiated` | Preauth Arbitration Intimation | No | +| **`42`** | Preauth Arbitration Acknowledgement | | `response.complete` | Preauth Arbitration Acknowledgement | No | +| **`RP1`** | Return Payment Intimation | | `request.initiated` | Return Payment Intimation | No | +| **`RP2`** | Return Payment Acknowledgement | | `response.complete` | Return Payment Acknowledgement | No | +| **`RP3`** | Return Payment Failure | | `response.error` | Return Payment Failure | No | +| **`N01`** | Notifications Intended To Payer | | `request.initiated` | Notifications Intended to Payer | No | +| **`N02`** | Notifications Intended To Provider | | `request.initiated` | Notifications Intended to Provider | No | +| **`N03`** | Notifications Intended To Beneficiary | | `request.initiated` | Notifications Intended to Beneficiary | No | +| **`N04`** | Acknowledgement Of The Notificaion | | `response.complete` | Acknowledgement of the Notificaion | No | +| **`DC01`** | Discharge Correction Intimation | | `request.initiated` | Discharge Correction Intimation | No | +| **`DC02`** | Acknowledgement For Discharge Correction | | `response.complete` | Acknowledgement for Discharge Correction | No | +| **`PC02`** | Preauthorization Cancellation Accomplished | | `response.complete` | Preauthorization Cancellation Accomplished | No | + +--- + +## Reconciled Discrepancies and Authority Rules + +Seven codes are published differently in the PMJAY Handbook and the Workflow Status Sheet, resolved here by taking the Workflow Status Sheet as the definitive authority: + +| Code | PMJAY Handbook | Workflow Status Sheet | +| :--- | :--- | :--- | +| **`17`** | PAYMENT_RECEIVED, provider-side - "Payment received acknowledgment" | "Payment Notice Recived", response.complete | +| **`24`** | Payer-side response code, PREAUTH_REQUEST_QUERIED | "PreAuth Request Queried", header request.initiated | +| **`27`** | Payer-side response code, CLAIM_REQUEST_QUERIED | "Claim Request Queried", header request.initiated | +| **`30`** | Payer-side, PAYMENT_INITIATED | "Payment Notice Initmation", request.initiated | +| **`31 / 33`** | Payer-side response codes | header request.initiated | +| **`251`** | REPROCESS_REQUEST_RECEIVED | "PreAuth Reprocess Ack" | +| **`36`** | CLAIM_ARBITRATION_REQUEST_SUBMITTED, use case "Reprocess/Erroneous request" | "Claim Arbitration Intimation" | + +The same authority settles these conflicts across official NHA publications (Workflow Status Sheet vs PMJAY Handbook vs Value Sets): + +1. **251**: Reconciled as Preauthorisation Resubmission acknowledgement in the sheet; the PMJAY handbook uses it in its claim reprocess section. +2. **Cancellation (PC01 vs 122)**: The sheet and handbook code table prescribe `PC01` (request) and `PC02` (completion). The handbook prose mentions `122`, which clashes with `R122` (reimbursement claim reprocess). Integrators should strictly use `PC01` and `PC02` on `/v1/task/submit`. +3. **18**: Defined as Preauthorisation Query Acknowledgement in the sheet; the handbook repurposes it for claim reprocess. +4. **Reprocess (36 vs 18)**: Section 11 gives `18` for reprocess, while Section 12 gives `36` (Claim Arbitration). Integrators should use `36` with task code `reprocess` and reason `claimrejected`. +5. **Shortfall**: Rides on `36` as a Task with code `reprocess` and reason `partialpayment`, raised only after payment notice `33` has arrived and been acknowledged with `17`. +6. **25 and 291**: Named as Claim *Document* acknowledgement and denial in the sheet, and Claim request received and denied in the value sets. Both refer to the same transition. + +### Protocol Fault Flags + +The source sheet's audit flags mark certain code-and-status pairs as protocol errors rather than normal traffic: +- For `131`, `45`, `47`, and `30`, sending **either** `response.partial` or `response.error` is flagged as an invalid state transition. +- `18` sent with `response.error` is flagged as an invalid terminal state. +- Query `27` sent as `response.partial` or `response.complete` is invalid (must be `request.initiated`). diff --git a/site/docs/nhcx/v1/exchanges/README.md b/site/docs/nhcx/v1/exchanges/README.md deleted file mode 100644 index 9f8cd13ab..000000000 --- a/site/docs/nhcx/v1/exchanges/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Exchanges and codes - -The endpoint catalogue and the workflow code tables, as prose, in the Docs -tab. The machine contracts for the same endpoints are generated into the API -references tab from `catalogue/openapi/nhcx/v1/`; nothing here duplicates a -schema. - -Order pages with `sidebar_position` in the frontmatter. diff --git a/site/docs/nhcx/v1/exchanges/_category_.json b/site/docs/nhcx/v1/exchanges/_category_.json deleted file mode 100644 index e323fbb57..000000000 --- a/site/docs/nhcx/v1/exchanges/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Exchanges and codes", - "position": 7 -} diff --git a/site/docs/nhcx/v1/exchanges/index.md b/site/docs/nhcx/v1/exchanges/index.md deleted file mode 100644 index ec27ca09d..000000000 --- a/site/docs/nhcx/v1/exchanges/index.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Exchanges and codes -sidebar_label: Exchanges and codes -description: Every NHCX exchange as prose, with the workflow code that separates transactions sharing one endpoint. -verification: unverified -source: "NHCX Usecases (NHA); Workflow Status Sheets with Codes (18 Aug 2026); NHCX Requests and Responses for UseCases; NHCX Integration Handbook v1.0" -sidebar_position: 0 ---- - -# Exchanges and codes - -The endpoint catalogue in prose. What each exchange is for, who drives it, which callback answers it, and which workflow code separates one transaction from another where several share a path. - -## In short - -- Endpoints alone do not identify a transaction. The workflow code in the header does. -- A new preauthorisation, a resubmission, an enhancement and a query answer all travel on `/v1/preauth/submit` with the same bundle. -- Each code expects a particular status word, and using the wrong one is the portal's first listed mistake. -- The A-series carries no workflow code, because those are registry and session calls rather than claim transactions. - -## The pages here - -| Page | What it covers | -| --- | --- | -| [Use cases](/docs/nhcx/v1/exchanges/use-cases) | Every exchange with its action endpoint, its callback and its workflow code, grouped by who drives it | -| [Workflow codes](/docs/nhcx/v1/exchanges/workflow-codes) | Every code with the status word it expects, by stage, with the lifecycle diagrams and the places the sources disagree | -| [PMJAY use cases](/docs/nhcx/v1/exchanges/pmjay-use-cases) | The D-series: what a PMJAY integration must fetch, prove and package around the same endpoints | - -## These pages and the API reference - -The same endpoints appear twice in this portal, on purpose. - -| | Here, in Docs | In [API references](/docs/nhcx/v1/api) | -| --- | --- | --- | -| What it is | Prose: what the exchange is for, when to send it, what the answer means | The machine contract: paths, headers, request and response schemas | -| Where it comes from | NHA's use case documents, workflow sheets and value sets | NHA's six Postman collections, authored into OpenAPI 3.1 | -| What it will not tell you | The exact header schema | What goes inside the sealed payload | -| Read it when | Deciding what to build and in what order | Writing the client, or trying a call | - -NHA also publishes a Swagger UI per service on the sandbox portal at `hcxsbx.abdm.gov.in`, one each for coverage eligibility, preauth, claim, communication, payment, status, task, search, insurance plan and subscription. Those are live pages rather than downloadable documents, and the portal warns that for use case payloads its value-set sheets and code snippets are the authority rather than the Swagger. That is why the specifications in this portal are built from the Postman collections, which are downloadable and version-stamped. - -## What no endpoint tells you - -The body of every message endpoint is one field holding a JWE. The exchange reads the protected header and never opens the sealed half, so neither the OpenAPI document nor these pages describe what is inside it. That is the [FHIR reference](/docs/nhcx/v1/fhir-reference/bundles-and-conventions). - -## Next - -- [Use cases](/docs/nhcx/v1/exchanges/use-cases), the catalogue itself -- [FHIR reference](/docs/nhcx/v1/fhir-reference/bundles-and-conventions), what goes inside the payload -- [JWE, status and errors](/docs/nhcx/v1/concepts/jwe-status-and-errors), the envelope the codes ride on diff --git a/site/docs/nhcx/v1/exchanges/use-cases.md b/site/docs/nhcx/v1/exchanges/use-cases.md deleted file mode 100644 index d7a278836..000000000 --- a/site/docs/nhcx/v1/exchanges/use-cases.md +++ /dev/null @@ -1,291 +0,0 @@ ---- -title: NHCX use cases -sidebar_label: Use cases -description: Every NHCX exchange with its action endpoint, its callback and its workflow code, grouped by who drives it. -verification: unverified -source: NHCX Usecases (NHA); NHCX Provider Side and Payer Side Use Cases, Sandbox Exit Process; Technical Specifications page, API Structure; Workflow Status Sheets with Codes (18 Aug 2026); NHCX Requests and Responses for UseCases, value sets; NHCX Notification Integration; NHCX Dummy Payer Implementation; NHCX Integration Handbook v1.0 §11, §12 -sidebar_position: 1 ---- - -# NHCX use cases - -A use case covers each stage of the claims lifecycle: onboarding providers and payers onto the network, verifying coverage, seeking preauthorisation, submitting claims, exchanging supporting information, and reconciling payments. Between them they deliver the five objectives set out in the introduction. Each use case is an API interaction between the Provider and the Payer, routed through the NHCX gateway, so every request is traceable, standardised and answered in a predictable way. - -## In short - -- Every exchange with its action endpoint, its callback, and the workflow code that separates transactions sharing one endpoint. -- The A-series is shared, the B-series is the provider's, the C-series the payer's, and E1 is for patient apps. -- Several use cases have no workflow code listed anywhere in the sources. -- The sandbox dummy payer answers six exchanges and takes two test hooks that drive its decisions. - -## Key use cases overview - -- **Onboarding Providers and Payers** - Onboard providers and payers onto NHCX to validate and route requests to target applications. -- **Check Coverage Eligibility** - Called by providers to check the eligibility of a beneficiary with payers via NHCX. -- **Preauth Request Submission** - Called by providers to submit Preauthorisation Requests to payers via NHCX. The payer responds via the `on_submit` callback API. -- **Predetermination Request** - Called by providers to ask what a payer would approve for a planned treatment. The payer responds with auto-adjudication details against the policy and past history. -- **Claim Request Submission** - Called by providers to submit Claim Requests to payers via NHCX. The payer responds using the `on_submit` callback API. -- **Communication Request** - Called by payers to communicate with providers about a case: to ask for more information, to flag a turnaround-time breach, or to pass on a grievance or a policy change. -- **Payment Notice** - Called by payers to submit the payment status of a claim with bank reference numbers such as scroll status and UTR numbers. -- **Reprocess / Cancel Request** - Called by providers to request payers to reprocess a claim when partially paid or rejected, or to cancel an approved preauth. -- **Notifications** - Called by patient apps to receive updates on a beneficiary's claims as they happen. - -## Shared use cases (payer and provider) - -The following use cases are common to both Payer and Provider participants on the NHCX platform. None of them carries a workflow code, because they are registry and session calls rather than claim transactions. - -### A1: get participant list - -**API Called:** `/fetch/participants/list` - -Retrieve the list of participants in the registry based on the role. - -### A2: get policy - -**API Called:** `/participant/get/policies` - -Get the list of policies for the beneficiary based on mobile number or ABHA. The response names both the insurer and the processor for each policy; the processor is the recipient for every claim-side call. - -### A3: get public key - -**API Called:** `/fetch/certs` - -Retrieve the public key of the receiver, used to encrypt the payload. Participant ID must be mandatorily provided. - -### A4: get auth token - -**API Called:** `/get/session` - -Generate the authentication token for NHCX API calls. This is the ABDM gateway's sessions endpoint, reached with the Milestone 1 client ID and secret. - -### A5: get status - -**API Called:** `/v1/status` -**Callback API:** `/v1/on_status` - -Retrieve the status of any request triggered to NHCX. - -### A6: receive errors - -**Callback API:** `/v1/error` - -Hosted by every participant. The exchange calls it to report a request that could not be delivered after five attempts, with the rejection details. Without it a sender never learns that a request died. - -## Provider use cases - -The following use cases are specific to Provider participants, describing the APIs providers must call and the callbacks they must implement. - -### B1: check coverage eligibility - -**API Called:** `/v1/coverageeligibility/check` -**Callback API:** `/v1/coverageeligibility/on_check` -**Workflow ID:** none listed. The check sits alongside registration, code 10, and admission, code 11 - -Check the eligibility of a beneficiary with payers via NHCX. Requests whether patient coverage is in force, valid at a date, and the associated benefits and plan details. The request carries a purpose: discovery, validation, benefits or auth-requirements. - -### B2: request insurance plan details - -**API Called:** `/v1/insuranceplan/request` -**Callback API:** `/v1/insuranceplan/on_request` -**Workflow ID:** none listed - -Request insurance plan details from the Payer via NHCX. The request is a Task with code `poll`, keyed on policy number and provider ID. - -### B3: preauthorisation submission - -**API Called:** `/v1/preauth/submit` -**Callback API:** `/v1/preauth/on_submit` -**Workflow ID:** 12 for a new request, 121 for a resubmission, 13 for an enhancement; 19 to answer a query on this endpoint under PMJAY, where other payers take the answer on the communication endpoint - -Submit the Preauthorisation request from the Provider end. A query answer, an enhancement and a resubmission all reuse the same bundle with a new correlation ID and the original reference. - -### B4: respond to communication request - -**API Called:** `/v1/communication/on_request` -**Callback API:** `/v1/communication/request` -**Workflow ID:** as carried on the payer's request - -Acknowledge or answer a communication from the Payer. The payer's reason code says what kind it is; see C6. - -### B5: claim submission - -**API Called:** `/v1/claim/submit` -**Callback API:** `/v1/claim/on_submit` -**Workflow ID:** 15 for the claim, 151 to answer a query, 14 for a provisional discharge submission where the payer supports one - -Submit the Claim from the Provider end to NHCX. The claim amount may not exceed the preauthorisation's approved amount. - -### B6: claim search - -**API Called:** `/v1/search/submit` -**Callback API:** `/v1/search/on_submit` -**Workflow ID:** none listed - -Search claim-related information by an authorised entity. The protocol also defines per-resource searches, `/preauth/search`, `/claim/search` and `/paymentnotice/search`, each with an `on_search` callback, for a provider looking up its own requests. - -### B7: acknowledge payment notice - -**API Called:** `/v1/paymentnotice/on_request` -**Callback API:** `/v1/paymentnotice/request` -**Workflow ID:** 17 - -Acknowledge the payment notification sent by the Payer. The portal's Payment document has the acknowledgement on this endpoint; the PMJAY handbook has it as a Task on `/v1/task/submit` with output `paymentack`. Both are current. Confirm which the payer expects. - -### B8: request for reprocess / cancel - -**API Called:** `/v1/task/submit` -**Callback API:** `/v1/task/on_submit` -**Workflow ID:** PC01 to cancel a preauthorisation, 36 to reprocess a rejected claim or to claim a shortfall on a partly paid one - -One endpoint, several jobs, told apart by the Task's code and reason. Task codes: `reprocess`, `cancel`, `nullify`, `suspend`, `approve`, `search`, `poll`. For a reprocess the reason is `claimrejected`; for a shortfall it is `partialpayment`. The Task names the case by claim number or intimation number. A supporting document is mandatory on a reprocess. - -### B9: predetermination submission - -**API Called:** `/v1/predetermination/submit` -**Callback API:** `/v1/predetermination/on_submit` -**Workflow ID:** none listed - -Ask the payer what it would approve for a proposed treatment before committing to a preauthorisation. Same bundle shape as a preauthorisation. - -## Payer use cases - -The following use cases are specific to Payer participants, describing the APIs payers must call and the callbacks they must implement. - -### C1: link ABHA with policy - -**API Called:** `/participant/link/abha/policy` -**Workflow ID:** none listed - -Link the ABHA number, mobile and member ID to the policy's products at the time of policy creation, naming the payer and the processor. - -### C2: de-link ABHA from policy - -**API Called:** `/participant/delink/abha/policy` -**Workflow ID:** none listed - -De-link the policy from the ABHA profile. Only the party named as payer or processor on the link may do this. - -### C3: respond to coverage eligibility request - -**API Called:** `/v1/coverageeligibility/on_check` -**Callback API:** `/v1/coverageeligibility/check` -**Workflow ID:** none listed - -Respond with the eligibility and plan details of the beneficiary for whom details are requested. The payer may instead answer with a forward instruction, asking the exchange to pass the same request to another payer. - -### C4: respond to insurance plan request - -**API Called:** `/v1/insuranceplan/on_request` -**Callback API:** `/v1/insuranceplan/request` -**Workflow ID:** none listed - -Respond with the insurance plan details requested via NHCX. - -### C5: respond to preauthorisation submitted - -**API Called:** `/v1/preauth/on_submit` -**Callback API:** `/v1/preauth/submit` -**Workflow ID:** 20 received, 21 approved, 23 rejected, 24 queried, 22 enhancement approved, 231 enhancement denied, 241 enhancement queried - -Respond with adjudicated Preauthorisation details. - -### C6: raise communication request - -**API Called:** `/v1/communication/request` -**Callback API:** `/v1/communication/on_request` -**Workflow ID:** 24 preauth queried, 241 enhancement queried, 27 claim queried, 263 discharge queried, and the intimation codes for grievances, wallet updates and arbitration - -Send the Provider a message about a case. The Task's reason code says which. `additionalinfo` to ask for documents, `tatquery` when a case has breached its turnaround time, `grievance` to pass on a complaint. Then `walletupdate` when the beneficiary's balance has changed, `policychange` when a package or rate has changed, and `claimArbitration` to acknowledge a reprocess request. - -### C7: respond to claim submitted - -**API Called:** `/v1/claim/on_submit` -**Callback API:** `/v1/claim/submit` -**Workflow ID:** 25 received, 26 approved, 27 queried, 28 in process, 29 forwarded, 291 denied - -Respond with adjudicated Claim details. - -### C8: respond to search request - -**API Called:** `/v1/search/on_submit` -**Callback API:** `/v1/search/submit` -**Workflow ID:** none listed - -Respond to search requests, providing the ClaimResponse objects matching the input criteria. - -### C9: send payment notice - -**API Called:** `/v1/paymentnotice/request` -**Callback API:** `/v1/paymentnotice/on_request` -**Workflow ID:** 30 initiated, 31 processed, 33 settled - -Send payment notification and reconciliation objects to Providers via the NHCX gateway. The reconciliation itemises the money by type: `approvedamount`, `claimedamount`, `tds`, `servicetax`, `advance`, `recovered`, `penality`. The bank's UTR number rides on the reconciliation. - -### C10: respond to Task request - -**API Called:** `/v1/task/on_submit` -**Callback API:** `/v1/task/submit` -**Workflow ID:** 251 acknowledged, 252 approved, 253 rejected, 254 queried, PC02 cancellation done, 37 arbitration acknowledged - -Return the response for task requests such as reprocess or cancel. - -### C11: respond to predetermination - -**API Called:** `/v1/predetermination/on_submit` -**Callback API:** `/v1/predetermination/submit` -**Workflow ID:** none listed - -Respond with what the payer would approve for the proposed treatment. - -## Patient app use cases - -Personal health record apps can register as participants and receive notifications on a beneficiary's behalf. This is how a patient learns on their phone that a preauthorisation was approved. - -### E1: subscribe to notifications - -**API Called:** `/v1/notification/subscribe` -**Callback API:** `/v1/notification/on_subscribe` -**Workflow ID:** N01 to a payer, N02 to a provider, N03 to a beneficiary, N04 acknowledgement - -The app subscribes when the beneficiary logs in with their ABHA. The most recent app to subscribe for an ABHA is the one that receives notifications; any earlier subscription is replaced. Topics are `workflow_events` for claim progress, `network_events` for exchange maintenance, and `participant_events` for changes to payers and providers. Each notification carries a human-readable message the app can show as-is, plus the envelope headers for apps that want more. - -```mermaid -sequenceDiagram - box rgb(238,241,244) Beneficiary - participant A as Patient app - end - box rgb(227,240,240) Exchange - participant X as NHCX - end - box rgb(220,239,227) Provider side - participant H as Hospital - end - box rgb(220,232,245) Payer side - participant Y as Payer - end - A->>X: subscribe for this ABHA, on login - H->>X: preauth/submit - X->>Y: forwards - Y->>X: preauth/on_submit, approved - X->>H: callback to the hospital - X->>A: notification: preauthorisation approved -``` - -## Testing against the dummy payer - -The sandbox hosts a payer that answers back, participant ID `1000003538@hcx`. It handles insurance plan, coverage eligibility, preauthorisation, claim, payment notice and communication. For the plan call use provider ID `32722` and policy `100217`. - -Two test hooks drive its decisions. `dummyhcxpayer/process/request` makes it approve, reject or query a preauthorisation or claim you have submitted, by correlation ID. `dummyhcxpayer/paymentNotice/init` makes it send you a payment notice. A query from the dummy payer arrives as a communication request, which you answer on `/v1/communication/on_request` before the final decision comes back on `on_submit`. - -## Workflow codes - -Endpoints alone do not identify a transaction. A new preauthorisation, a resubmission, an enhancement and a query response all travel on `/v1/preauth/submit` with the same bundle. The workflow code in the header is what tells them apart, and each code expects a particular status word. The full list, grouped by stage with the lifecycle diagrams, is the next chapter. diff --git a/site/docs/nhcx/v1/exchanges/workflow-codes.md b/site/docs/nhcx/v1/exchanges/workflow-codes.md deleted file mode 100644 index c0122951d..000000000 --- a/site/docs/nhcx/v1/exchanges/workflow-codes.md +++ /dev/null @@ -1,232 +0,0 @@ ---- -title: Workflow codes -sidebar_label: Workflow codes -description: Every workflow code with the status word it expects, by stage, with the lifecycle diagrams and the places sources disagree. -verification: unverified -source: "Workflow Status Sheets with Codes (18 Aug 2026); NHCX Requests and Responses for UseCases, value sets; NHCX Integration Handbook §4; Common Mistakes while implementing through NHCX #1" -sidebar_position: 2 ---- - -# Workflow codes - -Endpoints alone do not identify a transaction. A new preauthorisation, a resubmission, an enhancement and a query response all travel on `/v1/preauth/submit` carrying the same bundle. What separates them is the workflow code in the `x-hcx-workflow_id` header. Each code also expects a particular status word, given here beside it. The source is the Workflow Status Sheet on the portal, updated 18 August 2026, which remains the authority as codes are added. - -The A-series carries no workflow code. Those are registry and session calls rather than claim transactions. - -**Who sends what.** The codes name the party a message concerns, not always the party that sends it, so the notification codes are left unattributed. In the diagrams below, a state drawn in green is reached by something the **provider** sends; one drawn in blue by something the **payer** sends. The tables carry the same distinction in a *Sent by* column. Where the handbook states the direction it is used. Elsewhere it is read from the code's name: an intimation, a submission or a response is the provider's, and an approval, a denial, a query or an acknowledgement of one is the payer's. - -### Registration and admission - -| Code | Meaning | Sent by | Status | -| :---- | :---- | :---- | :---- | -| 10 | Patient registered | Provider | `request.initiated` | -| 11 | Patient admitted | Provider | `request.initiated` | - -### Preauthorisation - -| Code | Meaning | Sent by | Status | -| :---- | :---- | :---- | :---- | -| 12 | Preauthorisation requested | Provider | `request.initiated` | -| 20 | Preauthorisation received | Payer | `response.partial`, or `response.error` if the receipt failed | -| 21 | Preauthorisation approved | Payer | `response.complete` | -| 23 | Preauthorisation rejected | Payer | `response.complete` | -| 24 | Preauthorisation queried | Payer | `request.initiated` | -| 18 | Query acknowledged | Provider | `response.partial`, or `response.error` | -| 19 | Query answered | Provider | `response.complete` | -| 121 | Resubmission | Provider | `request.initiated` | -| 16 | Request resubmitted | listed in the value set, no status given | -| 251 | Resubmission acknowledged | Payer | `response.complete` | -| PC01 | Cancellation requested | Provider | `request.initiated` | -| PC02 | Cancellation done | Payer | `response.complete` | -| 41 | Preauthorisation arbitration requested | Provider | `request.initiated` | -| 42 | Arbitration acknowledged | Payer | `response.complete` | - -```mermaid -stateDiagram-v2 - classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - [*] --> Requested: 12 - Requested --> Received: 20 - Received --> Approved: 21 - Received --> Rejected: 23 - Received --> Queried: 24 - Queried --> QueryAnswered: 19 - QueryAnswered --> Received - Rejected --> Resubmitted: 121 - Resubmitted --> Received: 251 - Approved --> EnhancementAsked: 13 - EnhancementAsked --> Approved: 22 - EnhancementAsked --> EnhancementDenied: 231 - EnhancementAsked --> EnhancementQueried: 241 - EnhancementQueried --> EnhancementAnswered: 131 - EnhancementAnswered --> Approved: 22 - EnhancementAnswered --> EnhancementDenied: 231 - Received --> CancelAsked: PC01 - Approved --> CancelAsked: PC01 - CancelAsked --> Cancelled: PC02 - Approved --> [*] - class Requested,QueryAnswered,Resubmitted,EnhancementAsked,EnhancementAnswered,CancelAsked provider - class Received,Approved,Rejected,Queried,EnhancementDenied,EnhancementQueried,Cancelled payer -``` - -### Enhancement - -| Code | Meaning | Sent by | Status | -| :--- | :------------------------- | :------- | :----------------------------------------------------------------------------------- | -| 13 | Enhancement requested | Provider | `request.initiated` | -| 22 | Enhancement approved | Payer | `response.complete` | -| 231 | Enhancement denied | Payer | `response.complete` | -| 241 | Enhancement queried | Payer | `request.initiated` | -| 131 | Enhancement query answered | Provider | `response.complete`; the acknowledgement uses `response.partial` or `response.error` | - -### Discharge - -| Code | Meaning | Sent by | Status | -| :--- | :----------------------- | :------- | :------------------ | -| 14 | Discharge submitted | Provider | `request.initiated` | -| 261 | Discharge approved | Payer | `response.partial` | -| 262 | Discharge rejected | Payer | `response.complete` | -| 263 | Discharge queried | Payer | `request.initiated` | -| 141 | Discharge query answered | Provider | `response.complete` | -| DC01 | Discharge correction | Provider | `request.initiated` | -| DC02 | Correction acknowledged | Payer | `response.complete` | - -### Claim - -| Code | Meaning | Sent by | Status | -| :---- | :---- | :---- | :---- | -| 15 | Claim submitted | Provider | `request.initiated` | -| 25 | Claim documents received | Payer | `response.partial`, or `response.error` | -| 26 | Claim approved | Payer | `response.complete` | -| 27 | Claim queried | Payer | `request.initiated` | -| 28 | Claim in process | Payer | `response.partial` | -| 29 | Claim forwarded | Payer | `response.partial` | -| 291 | Claim documents denied | Payer | `response.complete` | -| 151 | Claim query answered | Provider | `response.complete` | -| 161 | Claim document query answered | Provider | `response.complete` | - -```mermaid -stateDiagram-v2 - classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - [*] --> Submitted: 15 - Submitted --> Received: 25 - Received --> InProcess: 28 - InProcess --> Forwarded: 29 - Forwarded --> InProcess - InProcess --> Queried: 27 - Queried --> QueryAnswered: 151 - QueryAnswered --> InProcess - InProcess --> Approved: 26 - InProcess --> Denied: 291 - Denied --> ArbitrationAsked: 36 - ArbitrationAsked --> ArbitrationAcknowledged: 37 - ArbitrationAcknowledged --> ReprocessApproved: 252 - ArbitrationAcknowledged --> ReprocessRejected: 253 - ArbitrationAcknowledged --> ReprocessQueried: 254 - ReprocessQueried --> ArbitrationAcknowledged - Approved --> [*] - class Submitted,QueryAnswered,ArbitrationAsked provider - class Received,InProcess,Forwarded,Queried,Approved,Denied,ArbitrationAcknowledged,ReprocessApproved,ReprocessRejected,ReprocessQueried payer -``` - -### Final bill - -| Code | Meaning | Sent by | Status | -| :---- | :---- | :---- | :---- | -| 45 | Final bill submitted | Provider | `request.initiated`; acknowledgement `response.partial` or `response.error` | -| 46 | Final bill approved | Payer | `response.complete` | -| 47 | Final bill queried | Payer | `request.initiated` | -| 491 | Final bill denied | Payer | `response.complete` | -| 181 | Final bill query answered | Provider | `response.complete` | - -### Payment - -| Code | Meaning | Sent by | Status | -| :---- | :---- | :---- | :---- | -| 30 | Payment initiated | Payer | `request.initiated` | -| 31 | Payment processed | Payer | `request.initiated` | -| 33 | Payment settled | Payer | `request.initiated` | -| 17 | Payment notice acknowledged | Provider | `response.complete` | -| RP1 | Return payment | Not stated | `request.initiated` | -| RP2 | Return payment acknowledged | Not stated | `response.complete` | -| RP3 | Return payment failed | Not stated | `response.error` | - -```mermaid -stateDiagram-v2 - classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - [*] --> Initiated: 30 - Initiated --> Processed: 31 - Processed --> Settled: 33, UTR available - Settled --> Acknowledged: 17, sent by the provider - Acknowledged --> [*] - class Acknowledged provider - class Initiated,Processed,Settled payer -``` - -### Reprocess and arbitration - -| Code | Meaning | Sent by | Status | -| :---- | :---- | :---- | :---- | -| 36 | Claim arbitration requested, covering reprocess and shortfall | Provider | `request.initiated` | -| 37 | Arbitration acknowledged | Payer | `response.complete` | -| 252 | Reprocess approved | Payer | `response.complete` | -| 253 | Reprocess rejected | Payer | `response.complete` | -| 254 | Reprocess queried | Payer | `request.initiated` | - -### Wallet, fraud and grievance - -| Code | Meaning | Sent by | Status | -| :---- | :---- | :---- | :---- | -| 34 | Wallet upgrade | Provider | `request.initiated` | -| 35 | Wallet upgrade acknowledged | Payer | `response.complete` | -| 38 | Fraud alert | Not stated | `request.initiated` | -| 39 | Fraud alert acknowledged | Not stated | `response.complete` | -| G11 | Grievance raised | Not stated | `request.initiated` | -| G12 | Grievance acknowledged | Not stated | `response.complete` | -| G13 | Grievance failed | Not stated | `response.error` | - -### Notifications - -| Code | Meaning | Sent by | Status | -| :---- | :---- | :---- | :---- | -| N01 | Notification to a payer | Not stated | `request.initiated` | -| N02 | Notification to a provider | Not stated | `request.initiated` | -| N03 | Notification to a beneficiary | Not stated | `request.initiated` | -| N04 | Notification acknowledged | Not stated | `response.complete` | - -### Reimbursement claims - -These mirror the cashless codes with an `R` prefix and are not covered further in this documentation. - -| Code | Meaning | Sent by | Status | -| :---- | :---- | :---- | :---- | -| R15 | Reimbursement claim submitted | Provider | `request.initiated` | -| R151 | Query answered | Provider | `response.complete` | -| R26 | Approved | Payer | `response.complete` | -| R27 | Queried | Payer | `request.initiated` | -| R28 | In process | Payer | `response.partial` | -| R291 | Rejected | Payer | `response.complete` | -| R122 | Reimbursement claim reprocess requested | Provider | `request.initiated` | -| R252, R253, R254 | Reprocess approved, rejected, queried | Payer | `response.complete`, `response.complete`, `request.initiated` | - -Six notes on where the sources disagree, all resolved here by taking the sheet as the authority. - -- **251** is a reprocess acknowledgement in all three sources; they differ on scope. The sheet scopes it to a preauthorisation reprocess, the handbook uses it in its claim reprocess chapter. -- **Cancellation** is a three-way clash, not a two-way one. The sheet and the handbook's own code table give PC01, with PC02 for the answer. The handbook's lifecycle table, its prose and its cancellation-reason appendix all give 122 instead. And the sheet already uses 122, in the form R122, for a reimbursement claim reprocess, which is a different exchange altogether. So the number the handbook tells you to send for a cancellation is a number the sheet has assigned to something else. -- **18** is a preauthorisation query acknowledgement in the sheet and the value set, and a reprocess submission in the handbook. The same number, two unrelated meanings. -- **Reprocess has two codes inside the handbook alone.** One section gives 18 for submitting a reprocess. Another gives 36, claim arbitration request submitted, for the same act, and the sheet lists 36 as a claim arbitration intimation. Nothing in the material reconciles them. -- **Shortfall has no code of its own, but it is not codeless.** It travels on 36, the same code as a claim arbitration request, which the FAQ calls raising an erroneous claim. What it lacks is a distinct name in the protocol: it is a reprocess with a reason of partial payment, raised after the settlement notice on 33 has arrived and been acknowledged. -- **25 and 291** are claim *document* acknowledgement and denial in the sheet, and claim request received and denied in the value set. The tables and diagrams here follow the value set, which is how the claim lifecycle is described everywhere else. - -The source sheet's fourth column marks certain code-and-status pairs as protocol errors rather than normal traffic. For 131, 45, 47 and 30 it flags **both** the `response.partial` and the `response.error` acknowledgement, not just the error one. So an interim acknowledgement on those four is a fault by the sheet's reckoning, even though it reads like ordinary traffic. It also flags 18 with `response.error`, and a query on 27 sent as `response.partial` or `response.complete`. Treat all of those combinations as faults, not states. - -The mapping of codes onto the use cases in the previous chapter is drawn from the code names themselves; the portal lists codes and use cases separately, so confirm a specific pairing before building. This list is expected to grow as new scenarios are defined, so the current specification remains the authority. - -## In short - -- Endpoints alone do not identify a transaction. The workflow code in the header does. -- Each code expects a particular status word, given here beside it. -- The A-series carries no workflow code: those are registry and session calls. -- Six points where the sources disagree are resolved here by taking the workflow sheet as the authority. diff --git a/site/docs/nhcx/v1/fhir-reference/_category_.json b/site/docs/nhcx/v1/fhir-reference/_category_.json deleted file mode 100644 index 08e9267bf..000000000 --- a/site/docs/nhcx/v1/fhir-reference/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "FHIR reference", - "position": 8 -} diff --git a/site/docs/nhcx/v1/fhir-reference/bundles-and-conventions.md b/site/docs/nhcx/v1/fhir-reference/bundles-and-conventions.md deleted file mode 100644 index a16f6c432..000000000 --- a/site/docs/nhcx/v1/fhir-reference/bundles-and-conventions.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Bundles and conventions -sidebar_label: Bundles and conventions -description: "The rules every NHCX FHIR bundle obeys before any use case: the collection bundle, profiles, references, ids and attachments." -verification: unverified -source: Domain Specifications page; Implementation Guide for Adoption of FHIR in ABDM and NHCX; NHCX Integration Handbook §1.3, Appendix A.3; NHCX-PMJAY-HMIS Integration Guide §7.4, §8.4.0; Sample FHIR bundles -sidebar_position: 1 ---- - -# Bundles and conventions - -Everything that crosses the exchange is one FHIR R4 Bundle of type `collection`, built to the NRCeS profiles for NHCX. This chapter is the set of rules every bundle obeys before any use case is considered. Every chapter after it covers one exchange in one direction, because that is the unit you actually build. A request and its response are different bundles with different rules, and putting them in one chapter hides that. - -## In short - -- Everything crossing the exchange is one FHIR R4 Bundle of type `collection`, built to the NRCeS profiles. -- NRCeS is the authority and publishes no payloads; twenty-two PMJAY bundles are the only real evidence. -- The open-protocol page says `document` bundles with a `Composition`. Every sample uses `collection`. Build `collection`. -- Fourteen rules hold across every bundle, including element ids, which the live sandbox proved mandatory. -- Inline attachments in the samples are base64 encoded twice; `DocumentReference` attachments are encoded once. - -## Where the payloads come from - -Two names appear throughout this section and they do different jobs. - -**NRCeS** is the authority. It publishes the profiles every resource declares and the code systems every coding binds to. It does not publish payloads. The one implementation guide it has issued for NHCX contains no machine-readable example at all; every worked example in it is a picture. So NRCeS tells you what shape a resource must have, and nothing more. - -**PMJAY** is the evidence. Twenty-two complete bundles from one sandbox run are the only real payloads available, and they are what this section is built on. They cover one patient, one policy, one preauthorisation and one claim, from eligibility through to payment. - -That pairing has a consequence. The samples are a record of what one implementation actually sent and received, not a curated specification, and they carry the defects of a real system. Where a sample contradicts the profile, or contradicts another sample, the chapters here say so and name both sides. Free-text values such as an adjudicator's name in a disposition field confirm what these are: hand-run transactions, captured as they happened. - -Eight of the exchange directions this section covers have no sample at all. Those chapters are written from specification and labelled as such. - -## The bundle - -```json -{ - "resourceType": "Bundle", - "id": "VB26AA2600001", - "identifier": { "system": "https://payer.pmjay.nha.gov.in", "value": "VB26AA2600001" }, - "meta": { "lastUpdated": "2026-02-26T12:51:30+05:30" }, - "type": "collection", - "timestamp": "2026-02-26T12:51:30+05:30", - "entry": [ - { "fullUrl": "urn:uuid:…", "resource": { "resourceType": "Claim", "…": "…" } } - ] -} -``` - -- `type` is always `collection`. Not `document`, not `transaction`. -- Entries are resources placed directly; no request or response elements. -- The bundle's identifier is the case number under PMJAY. - -**The one contradiction you must settle before writing any code.** The open-protocol page on the portal states that all claim objects are modelled as bundles of type `document`, with a `Composition` as the first resource. Every one of the twenty-two PMJAY samples uses `collection`, with no root Composition. One teaching deck manages to show both, on different slides. Compositions do appear inside PMJAY bundles, but as nested clinical documents rather than as the bundle's own header. Build `collection`, because that is what the live exchange has been observed to accept, and know that you will meet the other reading in the written specification. - -**A second trap in the same block.** All ten provider request samples carry `meta.lastUpdated` frozen at `2025-11-11T15:09:41.516+05:30`, a template value four months older than the transaction, while `Bundle.timestamp` holds the real date. Payer bundles set both correctly. Do not read `meta.lastUpdated` as meaning anything, and do set it correctly in what you send. - -## Fourteen rules - -1. **Profiles.** A resource declares its NRCeS profile in `meta.profile`, for example `https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim`, and the gateway and the payer validate against it. Declare one on everything you send. Do not assume one on everything you receive: ten of the twenty-two samples contain resources with no profile at all, including every payer-generated response. -2. **References.** Resources inside one bundle reference each other by `urn:uuid:` and each entry carries that UUID as its `fullUrl`. The samples on the portal use absolute URLs instead; both are accepted, `urn:uuid:` is the handbook's recommendation. -3. **Timestamps** are ISO 8601 with the Indian offset, `+05:30`. The handbook says UTC fails validation. -4. **Identifiers carry a type code, from one of two systems.** `PMJAY`, `ABHA`, `CLN` and `UTR` come from NRCeS at `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code`. `NPI` for a hospital's HFR ID, `NIIP` for a payer's registry ID, `NH` for a plan and `JHN` for a jurisdictional health number come from HL7 at `http://terminology.hl7.org/CodeSystem/v2-0203`. Take the system from the samples, not from the code. -5. **The HFR ID inside the bundle** must equal the registry ID on the sender's participant record. -6. **Sequences link things.** A `Claim.item` points at its diagnosis, procedure, care team and supporting information by their sequence numbers, not by reference. -7. **Documents arrive two ways, and the samples use both.** A supporting-info entry either carries the file inline in `valueAttachment`, or points with `valueReference` at something else in the same bundle. The specification says that something is a `DocumentReference`; in the real preauthorisation the reference points at a `Composition` instead, because the embedded clinical documents are flattened into the same collection rather than nested as attachments. Accept both when reading. One document per supporting-info entry, 2 MB each, 20 MB for the bundle. -8. **Category decides structured or not.** Supporting-info categories `DIA`, `HDS`, `CD`, `INF` take a reference to a structured document; `POI`, `POA`, `DOB`, `DEF`, `FIR`, `ATT`, `MB` take an attachment. -9. **Codes and displays match the plan** character for character. The payer rejects a package whose display differs from the plan's. This includes the plan's own misspellings, which are real and must be stored and echoed verbatim. -10. **Inline attachments in the samples are base64 twice over.** Every inline `valueAttachment.data` in the preauthorisation, enhancement and both claim submissions decodes to another base64 string, which then decodes to the actual PDF or image. The `DocumentReference` attachments in the very same bundles are encoded once. Nothing documents this, and it is the sort of defect that renders as a blank page at the payer and gets blamed on the wrong layer for a week. Decide deliberately which convention you follow, and check what the payer's system actually accepts before your first real submission. -11. **The same `Claim` serves preauthorisation and claim.** Only `Claim.use` changes. Build one and switch the field. Note that the sampled claim does not carry a `preAuthRef`, so nothing in the payload links a claim to the preauthorisation it followed. - -12. **Every Claim bundle carries element ids, and the payer service reads by them.** The SHA HP sandbox refuses an item without an `id`, with `PAYR-1027`, "invalid item id". That is not a code lookup at all. Give the `Claim` its claim number as `id`, each `item` `Item/n`, each `procedure` `Procedure/n`, and each `supportingInfo` `SupportingInformation/n`. The resources take a serial: `1` for `Patient`, `Coverage` and the provider `Organization`, `2` for the payer `Organization`, and their sequence for `Practitioner` and `Procedure`. The NHA samples carry all of these; the reference set under `apps/reference/provider` now does too. Verified live, Building a Provider 10. -13. **A Practitioner carries the HPR id as `HPIN` as well as `HPID`.** The SHA looks the doctor up by the identifier typed `HPIN` (`PAYR-1083` without it), under `https://hpr.abdm.gov.in`. Keep `HPID` and the registration number typed `MD` beside it. Verified live. -14. **A PMJAY item is coded from the package master, not from the hospital's own categories.** `item.category` is the master's specialty code, `MG` rather than a generic `GEN`. The ward tier rides as `item.modifier` with the master's stratification code. A claim bills the package alone at the whole amount, because the rate is all-inclusive. Building a Provider 10 has the mapping. - -## The focused resources - -The domain specification names the resources NHCX profiles and expects. A use case uses a subset. - -| Resource | Used by | -| :---- | :---- | -| `CoverageEligibilityRequest`, `CoverageEligibilityResponse` | Eligibility | -| `Claim`, `ClaimResponse` | Preauthorisation, claim, predetermination, and the answer to any Task | -| `InsurancePlan` | Plan | -| `Task` | Plan request, cancel, reprocess, search, payment notice, payment acknowledgement, communication | -| `PaymentNotice`, `PaymentReconciliation` | Payment | -| `Communication`, `CommunicationRequest` | Communication | -| `Patient`, `Organization`, `Practitioner`, `PractitionerRole`, `Coverage` | Every bundle | -| `Procedure`, `Condition`, `Encounter`, `Observation`, `DiagnosticReport`, `Composition`, `DocumentReference`, `Questionnaire`, `QuestionnaireResponse`, `Appointment`, `ChargeItem`, `Invoice`, `Medication`, `MedicationRequest`, `AllergyIntolerance` | Inside preauthorisation and claim bundles, as clinical and billing evidence | - -The real PMJAY preauthorisation sample carries 31 entries; the claim sample 44; a query answer with a full clinical set 96. That is the scale to design for. - -## Where the profiles live - -- NHCX profiles: `https://nrces.in/ndhm/fhir/r4/hcx-profile.html` -- Bundle profiles: `StructureDefinition-CoverageEligibilityRequestBundle`, `ClaimBundle`, `ClaimResponseBundle`, `InsurancePlanBundle`, `PaymentNotice`, `Task`, under the same base -- Value sets: `ValueSet-ndhm-supportinginfo-category`, `ValueSet-ndhm-supportinginfo-code`, `ValueSet-ndhm-benefitcategory` -- Validation help: `nrc-help@cdac.in` diff --git a/site/docs/nhcx/v1/fhir-reference/cancel-reprocess-and-shortfall.md b/site/docs/nhcx/v1/fhir-reference/cancel-reprocess-and-shortfall.md deleted file mode 100644 index d7feba532..000000000 --- a/site/docs/nhcx/v1/fhir-reference/cancel-reprocess-and-shortfall.md +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Cancel, reprocess and shortfall -sidebar_label: Cancel, reprocess and shortfall -description: Three post-decision exchanges on one endpoint pair, told apart only by Task.code, with samples for one of the three. -verification: unverified -source: "Sample FHIR bundles, `preauth/cancel/preauth_cancel_req.txt` and `preauth_cancel_response.txt`; NHCX PMJAY Integration Handbook §4.1, §4.2, §8.6, §10, Appendix B; NHCX Requests and Responses for UseCases, Value sets and Reprocess sheets; Workflow Status Sheets (with Codes); NHCX FAQs" -sidebar_position: 15 ---- - -# Cancel, reprocess and shortfall - -Three post-decision exchanges share one endpoint pair, `/v1/task/submit` outbound and `/v1/task/on_submit` inbound. All three are `Task` bundles. `Task.code` is the only thing that separates them, so the code has to be right or the payer routes the message to the wrong queue. Cancellation has samples on both sides. Reprocess is specified element by element and has no sample. Shortfall is barely specified at all. - -```mermaid -flowchart LR - P[Provider] - X[NHCX gateway] - Y[Payer] - P -->|"POST /v1/task/submit
Task.code = cancel or reprocess"| X - X --> Y - Y -->|"POST /v1/task/on_submit
Task.status = completed"| X - X --> P - style P fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - style Y fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - style X fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 -``` - -## In short - -- Three post-decision exchanges share `/v1/task/submit` and `/v1/task/on_submit`. -- `Task.code` is the only thing separating them, so it has to be right or the payer routes to the wrong queue. -- Cancellation has samples on both sides. Reprocess is specified but unsampled. Shortfall is barely specified. -- The word "shortfall" appears once in the whole published corpus. - -## Cancel: the request bundle - -The provider withdraws a preauthorisation it has already submitted. The bundle is small. There is no `Claim` in it and no `Patient`. - -| # | Resource | What it is for | -| :---- | :---- | :---- | -| 1 | `Task` | The cancellation instruction. Carries the reason and the two case identifiers | -| 2 | `Organization` | The provider, `NPI` `IN1910000151`, named "Usha Kiron" | -| 3 | `Organization` | The payer, `NIIP` `1518`, named "SHA HP" | - -Entry 1 uses a `urn:uuid:` `fullUrl`. Entries 2 and 3 use absolute URLs, and `Task.requester` and `Task.owner` point at those URLs. Both styles appear in one bundle. - -### The fields that matter - -| Path | Value in the sample | -| :---- | :---- | -| `Task.status` | `requested` | -| `Task.intent` | `order` | -| `Task.code.coding.system` | `http://terminology.hl7.org/CodeSystem/financialtaskcode` | -| `Task.code.coding.code` | `cancel`, with no `display` | -| `Task.reasonCode.coding.system` | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | -| `Task.reasonCode.coding.code` | `treatmentplanchanged` | -| `Task.input[0].type.coding.code` | `claimNumber`, system `.../ndhm-task-input-type-code` | -| `Task.input[0].valueString` | `VB26AA2600001` | -| `Task.input[1].type.coding.code` | `initimationNumber` | -| `Task.input[1].valueString` | `VB26AA2600001` | - -**Send `initimationNumber`, not `intimationNumber`.** The misspelling is in the live payload and in the NHCX value set, which lists the input type as `InitimationNumber`. The PMJAY handbook writes `intimationNumber` correctly in its cancellation table, then flags in its reprocess table that the real payload uses `initimationNumber`. Match the payer, not the prose. Both inputs carry the same value in the sample, so the sandbox does not distinguish the case number from the intimation number. - -### Cancellation reasons - -All from `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code`. - -| Code | Meaning | -| :---- | :---- | -| `treatmentplanchanged` | The clinician changed the approach during hospitalisation | -| `patientrequest` | The patient left or moved to another hospital | -| `financialconstraints` | The patient cannot meet the uncovered cost | -| `alternativetreatment` | A different procedure was chosen | -| `duplicateclaim` | The preauthorisation was submitted twice | -| `administrativeerror` | The original submission carried wrong data | -| `other` | Anything else; explain in `Task.description` | - -## Cancel: the response bundle - -The payer answers on `/v1/task/on_submit`. Every resource carries a `SUBSETTED` meta tag, so treat the bundle as a summary and not as a full record. - -| # | Resource | What it is for | -| :---- | :---- | :---- | -| 1 | `Task` | The outcome wrapper. `output[0]` is a reference to the `ClaimResponse` | -| 2 | `ClaimResponse` | The adjudication result for the cancelled case | -| 3 | `Patient` | Identifier only, PMJAY ID `MD5SLS4X5` | -| 4 | `Organization` | The payer, `1518` | -| 5 | `Organization` | The provider, bare numeric `1652`, named "CITY SUPERSPECIALITY HOSPITAL" | -| 6 | `Coverage` | Policy `PMJAY/HP/S/G`, class `PMJAY/HP/S/2024/R2` | - -| Path | Value in the sample | -| :---- | :---- | -| `Task.status` | `completed` | -| `Task.code.coding.system` | `http://hl7.org/fhir/CodeSystem/task-code` | -| `Task.code.coding.code` | `approve`, display "Activate/approve the focal resource" | -| `Task.output[0].type.coding` | `include`, system `.../financialtaskinputtype` | -| `Task.output[0].valueReference` | The `ClaimResponse` in entry 2 | -| `ClaimResponse.outcome` | `complete` | -| `ClaimResponse.adjudication[0].category` | `status`, with `reason` `cancelled` | -| `ClaimResponse.total[0]` | `benefit`, `2700.00` | - -Read the cancellation outcome from `ClaimResponse.adjudication[0].reason.coding.code`, which is `cancelled`. Do not read it from `outcome`, which is `complete` because the request was fully processed, and do not read it from `Task.code`. - -## What the samples show - -`preauth/cancel/preauth_cancel_req.txt`, 3,242 bytes, three entries. `preauth/cancel/preauth_cancel_response.txt`, 6,603 bytes, six entries. Both cover preauthorisation `VB26AA2600001` on 26 February 2026. There is no claim cancellation sample and none where the payer refuses a cancellation. - -## Reprocess: specified, not sampled - -The archive carries an empty `reprocess/` directory. A sample was scoped and never produced. Everything below comes from the PMJAY handbook section 10 and the NHCX Reprocess sheet, and none of it has been observed on the wire. - -Reprocess is the appeal. The provider uses it when a claim was rejected or approved for less than the claimed amount, and has new evidence or a disputed reading of policy. - -| Path | Specified value | -| :---- | :---- | -| `Task.status`, `Task.intent` | `requested`, `order` | -| `Task.code` | `reprocess`, system `.../financialtaskcode`, display "Reprocess" | -| `Task.reasonCode.coding.code` | `rejectiondisputed` in the handbook's table. The value set instead defines `claimrejected`, `partialpayment`, `erroneousclaim`, `referred`, `erroneousregistration` and `wrongdiagnosis`. `rejectiondisputed` is not in the value set | -| `Task.basedOn[0].reference` | The original `Claim`, for example `Claim/VB26AA2600001` | -| `Task.for.reference` | The `Patient` | -| `Task.input[0]` | `claimNumber` with the case number | -| `Task.input[1]` | `intimationNumber`, which the handbook itself annotates as `initimationNumber` in the real payload | -| `Task.input[2]` | Optional `supportingDocument`, free text or a document reference | - -Workflow codes: **18** on submission, **251** when the payer acknowledges receipt, **252** approved, **253** rejected, **254** queried. The handbook's provider-side table gives **36**, CLAIM_ARBITRATION_REQUEST_SUBMITTED, for the same act, and the workflow sheet lists 36 as "Claim Arbitration Intimation". Two codes for one submission. Confirm which the payer accepts before you build. - -The answer arrives as a `Task` with `status = completed` whose `output[].valueReference` resolves to a `ClaimResponse` inside the same bundle. Parse that `ClaimResponse` with the parser you already use for a claim response. The cancel response above proves the shape works, since it uses the same `output` and `include` mechanism. - -## Shortfall - -The word "shortfall" appears exactly once in the whole documentation mirror. It is in the FAQs, describing the cap on an Erroneous claim. The amount claimed cannot exceed the difference between the claimed and the approved figure, so a case claimed at 10,000 and paid at 6,000 supports a further request of at most 4,000. There is no shortfall `Task.code`, no shortfall reason code, and no shortfall sample. - -What is real is the mechanism the provider chapters describe. A shortfall is raised as a reprocess with `reasonCode` `partialpayment`, only after the payment cycle completes on workflow 33, and the supporting evidence rides as a `Task.input` attachment. Treat "shortfall" as an operational word for a reprocess, not as a distinct exchange. - -## Traps - -- **Three `Task` code systems across four `Task` exchanges.** The cancel request uses `financialtaskcode|cancel`, the cancel response `task-code|approve` from a third system and saying "approve" about a cancellation, the payment notice `ndhm-task-codes|deliver`. Switch on system and code together, never on the code alone. -- **`Claim.type` flips inpatient to outpatient.** The preauthorisation request for `VB26AA2600001` carries `737481003` "Inpatient care management (procedure)". The cancel response for the same case number carries `737492002` "Outpatient care management (procedure)". Nothing in the case changed. Do not use the payer's `Claim.type` to update your record. -- **The payer identifier system is misspelled.** The cancel response bundle identifier uses `https://payer.pmajy.nha.gov.in`, with `pmajy` for `pmjay`. The request uses the correct spelling. Match on the identifier value, never on the system string. -- **Provider identity changes shape.** The request names the provider `IN1910000151`; the response names it `1652` with a different organisation name. Both are the same hospital. -- **The cancelled case still reports money.** `total[benefit]` remains `2700.00` on a cancelled preauthorisation. Zero the figure yourself once the adjudication reason reads `cancelled`. -- **Workflow codes for cancellation disagree.** The workflow sheet gives `PC01` for the request and `PC02` for the answer. The handbook gives `122` in its lifecycle prose, section 8.6 and Appendix B, while the same sheet uses `R122` for a reimbursement claim reprocess. Make the code configurable per payer. diff --git a/site/docs/nhcx/v1/fhir-reference/claim-query-and-answer.md b/site/docs/nhcx/v1/fhir-reference/claim-query-and-answer.md deleted file mode 100644 index ad9b8b1db..000000000 --- a/site/docs/nhcx/v1/fhir-reference/claim-query-and-answer.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: Claim query and answer -sidebar_label: Claim query and answer -description: A query is an ordinary ClaimResponse with outcome partial, and the answer is the whole claim bundle sent again. -verification: unverified -source: "Sample FHIR bundles, `claim/claimresponse_withQuery.txt`, `claim/claim_queryUpdate_req.txt`, `claim/claim_queryUpdate_response.txt`, `claim/claim_Request.txt`, compared against `preauth/preauthresponse_with_query.txt`; NHCX Integration Handbook §10, §12.2, §12.3; NHCX-PMJAY-HMIS Integration Guide §8.5; NHCX open protocol, Task and Communication" -sidebar_position: 14 ---- - -# Claim query and answer - -A query is the payer asking for something before it will adjudicate. Under PMJAY it is not a distinct message. The question arrives as an ordinary `ClaimResponse` with `outcome` `partial` and `disposition` `queried`, and the answer goes back as a wholly re-submitted claim bundle on the same claim number. Two exchanges in one chapter, because neither makes sense without the other. - -```mermaid -flowchart LR - A["Provider
claim_Request.txt
44 entries"] --> B["/v1/claim/submit"] - B --> C["Payer
claimresponse_withQuery.txt
partial / queried"] - C --> D["Provider
claim_queryUpdate_req.txt
31 entries, same claim number"] - D --> E["/v1/claim/submit"] - E --> F["Payer
claim_queryUpdate_response.txt
complete / ok"] - classDef prov fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - classDef pay fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - classDef exch fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 - class A,D prov - class C,F pay - class B,E exch -``` - -## In short - -- Under PMJAY a query is not a distinct message: it is a `ClaimResponse` with `outcome` `partial`. -- The answer is a wholly re-submitted claim bundle on the same claim number. -- Two exchanges in one page, because neither makes sense without the other. -- Zero benefit on a query means undetermined, not refused. - -## The query has no resource of its own - -This is the thing to understand before anything else. The NHCX protocol layer and the PMJAY handbook both specify a `Task` and `Communication` pair for exactly this purpose: the payer raises a `Task`, the provider answers with a `Communication` carrying the requested payload. Nothing in the sample set uses it. There is no `Communication` bundle anywhere in the archive. - -What PMJAY does instead is carry the question as free text inside `ClaimResponse.item.adjudication` where `category.coding.code` is `reason`, in `reason.coding.display`. There is no `code`, only a `display`. The answer is a fresh claim submission with no marker saying what it answers. Build for the ad-hoc form, because that is the only form with samples, and keep the `Task` and `Communication` path behind a flag until a payer asks for it. - -## The payer's query - -`claimresponse_withQuery.txt`, 6,799 bytes, five entries, structurally identical to the approval in chapter 11. What differs: - -| Path | Query | Final approval | -| :---- | :---- | :---- | -| `outcome` | `partial` | `complete` | -| `disposition` | `queried` | `ok` | -| claim-level `adjudication[0].reason.coding` | `queried` | `approved` | -| `item[0].adjudication[status].reason.coding` | `Queried` | `Approved` | -| `item[0].adjudication[eligible].amount` | 2700.00 | 2430.00 | -| `total[benefit]` | 0 | 2430.00 | -| `total[submitted]` | 2700.00 | 2700.00 | -| `total[PMJAY-T eligible]` | 2700.00 | 2430.00 | - -`total[benefit]` is zero on a query while the submitted and eligible totals stay at 2700. That zero is not a rejection and not a reduction to nil. It means no benefit has been determined yet. A reader that treats `benefit` of zero as a refusal will close a claim that is merely waiting for a document. - -Note also that `payeeType` is already `provider` on the query, and the claim-level `adjudication` reason code is the only place the word `queried` appears in a coded field. Everything else is prose. - -## Where the question is - -In `claimresponse_withQuery.txt` the question is: - -``` -"reason": { "coding": [ { "display": "Other queried 1st attempt" } ] } -``` - -That is the whole of it. No code, no system, no structure, no named document. - -The final response for the same claim replays the history in a different shape: - -``` - Auto approved by system.|null|USER1000099~02/27/2026, 03:02 ~Other~queried 1st attempt~CPD-Trust|System~27/02/2026, 03:20~NA~null~CITY SUPERSPECIALITY HOSPITAL|Approved -``` - -Segments are pipe-delimited, fields inside a segment tilde-delimited, and the field order is user, timestamp, query type, comment, trust. The literal string `null` appears as a segment and again as a field. The same run's preauthorisation query response uses the full pipe and tilde form from the start: - -``` -other Request acknowledged and accepted for further processing.|USER1000099~02/26/2026, 08:47 ~other~testing query with souvik~PPD-Trust|null|USER1000099~02/26/2026, 09:13 ~other~Testing query 2 with souvik~PPD-Trust -``` - -So the same payer, in the same sandbox run, sends a bare sentence on one query and a delimited audit trail on another. The format is not stable and there is no schema for it. Parse defensively: split on `|`, split each segment on `~`, and fall back to displaying the raw string whenever the field count is not five. Show it to a human. Do not branch on it. - -## The provider's answer - -`claim_queryUpdate_req.txt`, 376,270 bytes, 31 entries. It is a complete claim bundle, not a delta, submitted on the same claim number `EO26AA2700001`. - -| | Original request | Answer | -| :---- | :---- | :---- | -| Entries | 44 | 31 | -| `Bundle.timestamp` | `2026-02-27T08:40:11+05:30` | `2026-02-27T09:34:11+05:30` | -| `Claim.created` | `2026-02-27T08:40:02+05:30` | `2026-02-27T09:34:10+05:30` | -| `Claim.identifier.value` | `EO26AA2700001` | `EO26AA2700001` | -| `supportingInfo` | 9 entries, sequences `1, 2, 23, 24, 25, 26, 27, 8, 9` | Identical | -| Embedded documents | Invoice record and wellness record | Two diagnostic report records | -| `item`, `total`, `diagnosis`, `procedure` | Unchanged | Unchanged | - -Everything the payer might have queried about the money is byte-identical. What changed is the clinical evidence: the invoice and wellness compositions are replaced by two `DiagnosticReportRecord` compositions, each with a `DiagnosticReport`, four `Observation`s and a `DocumentReference` holding a surgical pathology report. - -Nothing in the answer says it is an answer. There is no supporting-info entry under category `NMI` with code `CQD` carrying query remarks, which is what the handbook's field tables describe for this case. There is no reference to the query, no attempt number, no changed status. The only thing joining the two messages is the claim number and the correlation ID at the protocol layer. Keep your own record of which submission answers which query, because the bundle will not tell you. - -## The attachment swap - -The two inline attachments on supporting-info sequences 1 and 2 are the same two files in both submissions, moved between document codes. - -| Sequence | Document code | Original request | Answer | -| :---- | :---- | :---- | :---- | -| 1 | `MAND0062` Detailed ICPs | `application/pdf`, 3,079 bytes | `image/jpeg`, 147,232 bytes | -| 2 | `MAND0063` Treatment details | `image/jpeg`, 147,232 bytes | `application/pdf`, 3,079 bytes | - -The two blobs are byte-for-byte identical to their counterparts in the first submission. Only the pairing flipped. So the second submission tells the payer that the detailed ICPs are now the file that was previously the treatment details, and vice versa. The `contentType` values follow the bytes, so nothing is technically mislabelled; the document code to file mapping is simply reversed. Both blobs are also base64-encoded twice in both submissions, as described in chapter 10. - -This is a defect in the sample, not a pattern to copy. Treat it as a warning about how easy it is to reorder attachments when rebuilding a bundle from scratch to answer a query. Key your attachments to their document code at the point you assemble them, and assert the pairing before you submit. - -## Traps - -- A query is `partial` plus `queried`, not `partial` alone. An interim approval is also `partial`. -- Zero benefit on a query is undetermined, not refused. -- The answer reuses the claim number. Do not allocate a new one. -- The answer is a full bundle. Rebuild it from your stored submission, not from the payer's response. -- There is no rejected claim sample and no `Communication` sample anywhere in the archive, so the escalation path past a repeated query is specified but unverified. diff --git a/site/docs/nhcx/v1/fhir-reference/claim-request.md b/site/docs/nhcx/v1/fhir-reference/claim-request.md deleted file mode 100644 index a5bcf455b..000000000 --- a/site/docs/nhcx/v1/fhir-reference/claim-request.md +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: Claim request -sidebar_label: Claim request -description: The same Claim as the preauthorisation with use switched, carrying the finalised dates, the bill and the full document set. -verification: unverified -source: "Sample FHIR bundles, `claim/claim_Request.txt` and `preauth/preauth_request.txt`; NHCX FAQs v1.2, cyclic treatment and newborn sections; NHCX Integration Handbook §9.4; NHCX-PMJAY-HMIS Integration Guide §8.4; NRCeS profiles at `https://nrces.in/ndhm/fhir/r4/`" -sidebar_position: 12 ---- - -# Claim request - -The claim is the provider's request for payment once treatment has happened. It is the same `Claim` resource as the preauthorisation with `use` switched from `preauthorization` to `claim`, carrying the finalised dates, the finalised bill and the full document set. It travels on `/v1/claim/submit` and is answered on `/v1/claim/on_submit`. This chapter describes the provider-to-payer direction only; the payer's answer is chapter 11. - -## In short - -- The same `Claim` as the preauthorisation with `use` switched to `claim`. -- It carries the finalised dates, the finalised bill and the full document set. -- `ADDD` is used as the code for three different dates. The category, not the code, distinguishes them. -- The one published sample is unrepresentative in four ways, including having no `preAuthRef` at all. - -## The bundle - -`claim_Request.txt` carries 44 entries in this order. The first six are the claim proper. Entries 7 to 18 are one embedded billing document. Entries 19 to 43 are one embedded observation document. The `Procedure` sits last, after both embedded documents, which is unexpected but valid in a `collection`. - -| Entry | Resource | Profile | What it is for | -| :---- | :---- | :---- | :---- | -| 1 | `Claim` | `Claim` | The request itself | -| 2 | `Patient` | `Patient` | The beneficiary, by PMJAY ID | -| 3 | `Organization` | `Organization` | The hospital, type `prov` | -| 4 | `Organization` | `Organization` | The payer, type `pay` | -| 5 | `Coverage` | `Coverage` | The policy | -| 6 | `Practitioner` | `Practitioner` | The care team member | -| 7 | `Composition` | `InvoiceRecord` | Root of the embedded billing document | -| 8 to 12 | `Organization`, `Practitioner`, `Encounter`, `Appointment`, `Patient` | various | Context for that document, duplicated inside it | -| 13, 15, 16 | `ChargeItem` | `ChargeItem` | Billed lines | -| 14 | `Medication` | `Medication` | A billed drug | -| 17 | `Invoice` | `Invoice` | Price components per line | -| 18 | `DocumentReference` | `DocumentReference` | The scanned bill, PDF | -| 19 | `Composition` | `WellnessRecord` | Root of the embedded observation document | -| 20 to 24 | `Organization`, `Practitioner`, `Encounter`, `Appointment`, `Patient` | various | Context for that document | -| 25 to 42 | `Observation` × 18 | `Observation` | Body measurement, activity, assessment, lifestyle | -| 43 | `DocumentReference` | `DocumentReference` | Surgical pathology report, PDF | -| 44 | `Procedure` | `Procedure` | The procedure the item pays for | - -The two embedded documents are self-contained. Each repeats its own `Patient`, `Organization` and `Practitioner` rather than referencing the ones at the top of the bundle, and each is reached from the `Claim` by a supporting-info entry pointing at its `Composition`. - -## The claim - -| Path | Sample value | -| :---- | :---- | -| `identifier[0].type.coding.code` | `CLN`, from `.../ndhm-identifier-type-code` | -| `identifier[0].system` | `https://hcx.pmjay.gov.in/v1/preauthorization`, unchanged at the claim stage | -| `identifier[0].value` | `EO26AA2700001`, the claim number, also the `Bundle.identifier` | -| `status` | `active` | -| `type.coding` | `737481003` "Inpatient care management (procedure)" | -| `use` | `claim` | -| `billablePeriod.start`, `.end` | `2026-02-27T08:40:02+05:30`, `2026-03-02T00:00:00+05:30` | -| `created` | `2026-02-27T08:40:02+05:30` | -| `priority.coding.code` | `normal`, from `http://terminology.hl7.org/CodeSystem/processpriority` | -| `insurance[0].focal` | `true` | -| `total.value` | `3300` | - -`billablePeriod` is the field the preauthorisation does not have. `preauth_request.txt` omits it entirely; the claim adds it, with `start` set to the moment of submission rather than to the admission date. Take the admission date from supporting information, not from `billablePeriod.start`. - -`Claim.type` binds `737481003` to `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-claim-type`, a ValueSet URL used where a CodeSystem URL belongs. Every sample does this. Send it as the samples send it. - -The single item names its package as `MG004B` "Dengue hemorrhagic fever" under `http://snomed.info/sct`, while the `Procedure` resource in the same bundle names the same code under `https://payer.pmjay.nha.gov.in`. One code, two systems, one bundle. The eligibility request binds package codes to the payer system as well. The rule the samples actually follow is: `Claim.item.productOrService` uses SNOMED, everything else uses the payer system, and neither code is a real SNOMED concept. - -`item[0].factor` is `0.5` while `unitPrice` and `net` are both `3300` and `total` is `3300`. The factor is carried but not applied. The payer's response reports `total[submitted]` as `2700`, which matches neither. Neither `unitPrice`, `net` nor `total` carries a `currency`. - -## Supporting information - -Nine entries. Four carry claim-stage documents, five carry dates and the discharge status. - -**Read this table as a requirement, not as a description of one sample.** A claim is refused without the discharge status and the discharge date. They are what tells the payer the episode has ended, and when. The gateway checks for them before the payer ever sees the bundle. The minimum a claim carries, over and above what the preauthorisation already carried, is: - -- **the discharge status**, category `DIS`, saying how the patient left, -- **the discharge date**, category `DSCHD`, -- **the admission date**, category `ADMD`, -- **the bill and the discharge summary**, as documents. - -A preauthorisation carries none of these, which is the single biggest difference between the two bundles and the easiest thing to miss when the same builder code produces both. - -| Sequence | Category | Code | Meaning | Value | -| :---- | :---- | :---- | :---- | :---- | -| 1 | `INV` | `MAND0062` | Detailed ICPs | Inline attachment, `application/pdf` | -| 2 | `INV` | `MAND0063` | Treatment details | Inline attachment, `image/jpeg` | -| 23 | `DIS` | `DTH` | Discharge to home | `valueString` "After surgery" | -| 24 | `ADMD` | `ADDD` | Admission date | `valueString` `2026-02-27T00:00:00+00:00` | -| 25 | `SURD` | `ADDD` | Surgery date | `valueString` `2026-03-02T00:00:00+00:00` | -| 26 | `OTH` | `EDT` | Encounter date and time | `valueString` `2026-02-27T08:38:48+00:00` | -| 27 | `DSCHD` | `ADDD` | Discharge date | `valueString` `2026-03-02T00:00:00+00:00` | -| 8 | `INV` | `MAND0064` | All investigations reports | Reference to the billing document's `Composition` | -| 9 | `INV` | `MAND0006` | Detailed discharge summary | Reference to the observation document's `Composition` | - -Five things in that table will cost you time. - -**The category system is wrong on the four document entries.** They carry `category.coding.system = https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code` with code `INV`. `INV` belongs to the category value set, so the code is right and the system names the wrong value set. The five date entries in the same array use `.../ndhm-supportinginfo-category` correctly. The preauthorisation request and the enhancement request contain only the wrong-system form. Send what the samples send and expect the payer to accept both. - -**The sequences are non-monotonic and full of gaps.** The array runs `1, 2, 23, 24, 25, 26, 27, 8, 9`. Sequences 3 to 7 and 10 to 22 do not exist. This is not cosmetic. `Claim.item.informationSequence` links an item to its supporting information by sequence number, so a builder who indexes by array position rather than by the `sequence` field will resolve the wrong document. Build a map from `sequence` to entry and look up through it. - -**`ADDD` is used as the code for three different dates and displayed two different ways.** At sequence 24 it is displayed "Admission Date - Discharge Date". At sequences 25 and 27, where it stands for the surgery date and the discharge date, it is displayed "Admission Date". The category, not the code, is what actually distinguishes the three. Read `category.coding.code` and treat `ADDD` as noise. - -**Date offsets are mixed inside one resource.** `Claim.created` is `2026-02-27T08:40:02+05:30`. The `EDT` supporting-info string is `2026-02-27T08:38:48+00:00`, the same wall clock with a UTC offset. Interpreted literally the encounter is five and a half hours after the claim was created. The handbook says supporting-info dates are Indian local time. Emit `+05:30` and read incoming `+00:00` values as local. - -**Both inline attachments are base64 twice.** Decoding `valueAttachment.data` once yields another base64 string; decoding that yields the PDF and the JPEG. The `DocumentReference` attachments in the same bundle are encoded once. If a payer viewer shows a blank document, this is why. - -## Cyclic treatment - -Cyclic packages, dialysis and chemotherapy among them, need one supporting-info entry per cycle. The guidance for this exists only in the FAQ document, whose JSON is malformed: a missing quote on the `supportingInfo` key, a trailing comma inside the item, two unclosed braces and two `//` comments. There is no sample bundle for a cyclic claim. The reconstruction below repairs that fragment into well-formed JSON. It is an illustration of the two elements, not a quotable sample. - -```json -"item": [ - { - "id": "item-1", - "sequence": 1, - "informationSequence": [1] - } -], -"supportingInfo": [ - { - "sequence": 1, - "category": { - "coding": [{ - "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code", - "code": "CD", - "display": "Clinical document" - }] - }, - "code": { - "coding": [{ - "system": "https://payer.pmjay.nha.gov.in", - "code": "TD", - "display": "Treatment detail" - }] - }, - "timingPeriod": { - "start": "2026-08-05T13:01:33+05:30", - "end": "2026-08-05T13:02:41+05:30" - }, - "valueReference": { - "reference": "urn:uuid:3f40b4ef-5359-43d3-aa31-c1e54b2d813a" - } - } -] -``` - -The clinical data must be structured FHIR, not a scanned PDF. One supporting-info entry per cycle, its sequence listed in the item's `informationSequence`, its document referenced from `valueReference`. Note that the fragment repeats the same wrong category system as the real samples, `ndhm-supportinginfo-code` carrying the category code `CD`. - -`timingPeriod` is the field that decides whether the cycle is paid. The payer validates its start and end against the biometric capture timestamp for that cycle, and a mismatch means the cycle is not treated as genuine. Biometric authentication is a live capture for every cycle with process type `Discharge`; a refresh token is accepted only at the final claim. So `timingPeriod` is not documentation, it is the evidence, and it must be written from the authentication log rather than from the ward's own clock. - -## Newborn - -A newborn has no policy of their own, so the parent stays the primary `Patient` and the child is a second `Patient` linked from the parent. The FAQ fragment for this is also malformed: the reference value is masked to `urn:uuid:cc81ceb5-2966-****-****`, and the parenthetical gloss sits inside the JSON. Reconstructed, with a complete UUID: - -```json -"link": [ - { - "other": { - "reference": "urn:uuid:cc81ceb5-2966-4f0a-9f5e-2b7c1d84a310", - "type": "Patient" - }, - "type": "refer" - } -] -``` - -The child's `Patient` needs gender and date of birth; the name is expected but is not treated as strictly mandatory. Twins are two independent child `Patient` resources and two independent submissions. A proof of date of birth supporting-info entry is mandatory, category `DOB`, code `BCF` for a birth certificate or `DCB` for the government hospital's discharge card where no certificate exists yet. Bill under the parent's name as "Baby of " with an attachment justifying it; a bill carrying only the baby's name is likely to be rejected. - -## What the sample shows - -`claim_Request.txt`, 386,100 bytes, 44 entries, claim number `EO26AA2700001`. It is unrepresentative in four ways. The two embedded documents are a wellness record and an invoice record, neither of which is the discharge summary the supporting-info titles promise. Their `Encounter` resources are `AMB` outpatient visits dated 2026-02-09, three weeks before the admission this claim is for. The package and diagnosis differ from the preauthorisation for the same patient, which the preauthorisation-to-claim workflow does not allow. There is no `preAuthRef` anywhere in the bundle, so nothing links this claim to preauthorisation `VB26AA2600001` except the shared patient. And `Bundle.meta.lastUpdated` is frozen at the template value `2025-11-11T15:09:41.516+05:30` while `Bundle.timestamp` holds the real submission time. diff --git a/site/docs/nhcx/v1/fhir-reference/claim-response.md b/site/docs/nhcx/v1/fhir-reference/claim-response.md deleted file mode 100644 index 52c4b5fcf..000000000 --- a/site/docs/nhcx/v1/fhir-reference/claim-response.md +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Claim response -sidebar_label: Claim response -description: The payer's adjudication of a claim, and the three ways every payer bundle differs from a provider one. -verification: unverified -source: "Sample FHIR bundles, `claim/claim_queryUpdate_response.txt` and `claim/claimresponse_withQuery.txt`, compared against `preauth/enhancement/enhancement_resp.txt`; NHCX Integration Handbook §9.5, §10; NHCX-PMJAY-HMIS Integration Guide §8.5; Standard Error Codes, Claim" -sidebar_position: 13 ---- - -# Claim response - -The claim response is the payer's adjudication of a submitted claim. It arrives on `/v1/claim/on_submit` as a `Bundle` of type `collection` holding a `ClaimResponse` and the four resources it references. The same shape carries an approval, a partial approval, a query and a rejection; only `outcome`, `disposition` and the adjudication codes change. This chapter covers the approval and the reduction. The query, which uses the same bundle with different values, is chapter 12. - -## In short - -- Five entries carrying a `ClaimResponse`. The same shape carries approval, reduction, query and rejection. -- Payer bundles differ from provider bundles in three visible ways, including the `SUBSETTED` meta tag. -- Five other payer bundles in the same run misspell the identifier system as `pmajy`. -- Only `outcome`, `disposition` and the adjudication codes change between decisions. - -## The bundle - -Five entries, in this order in both claim response samples. - -| Entry | Resource | What it is for | -| :---- | :---- | :---- | -| 1 | `ClaimResponse` | The adjudication | -| 2 | `Patient` | The beneficiary, by PMJAY ID | -| 3 | `Organization` | The payer, `NIIP` `1518` | -| 4 | `Organization` | The provider, `NPI` `IN1910000151` | -| 5 | `Coverage` | The policy, with a `class` entry | - -Payer bundles differ from provider bundles in three visible ways. Every resource carries `meta.tag` `SUBSETTED` "Resource encoded in summary mode", including the `Bundle` itself. Entries use absolute HTTPS `fullUrl` values under `https://payer.nha.gov.in/claim/v1/claim/on_submit/claimresponse/`, not `urn:uuid:`, and each entry repeats that URL in an `entry.id` field, which is not a FHIR element. And `Bundle.meta.lastUpdated` holds the real time here rather than the frozen template value the provider bundles carry. - -The `Bundle.identifier.system` is `https://payer.pmjay.nha.gov.in`, spelled correctly. Five other payer-generated bundles in the same sandbox run misspell it `pmajy`. The claim responses are not among them, so a parser that tolerates only the correct spelling will still break on the coverage and payment traffic. - -## The ClaimResponse - -| Path | Approval sample | -| :---- | :---- | -| `identifier[0].type.coding.code` | `CLN` | -| `identifier[0].system` | `https://hcx.pmjay.gov.in/v1/preauthorization` | -| `identifier[0].value` | `EO26AA2700001`, echoing the claim number | -| `status` | `active` | -| `use` | `claim`, mirroring the request | -| `created` | `2026-02-27T15:27:29+05:30` | -| `insurer` | Reference to the payer `Organization` | -| `requestor` | Reference to the provider `Organization` | -| `outcome` | `complete` | -| `disposition` | `ok` | -| `payeeType.coding` | `provider`, from `http://terminology.hl7.org/CodeSystem/payeetype` | - -Three elements a builder expects are absent from both samples. There is no `request` reference back to the `Claim`, so the response is joined to its claim by `identifier.value` and by nothing else. There is no `preAuthRef`. There is no `processNote`, so the reduction is explained inside the adjudication rather than in a note, and `item.noteNumber` never appears. - -`requestor` names the provider organisation as `IN1910000151` "CITY SUPERSPECIALITY HOSPITAL". The provider's own request bundle names the same registry ID "Usha Kiron", and the preauthorisation responses for the same case use a bare numeric `1652` with the superspeciality name. One transaction, one HFR ID, three identities. Match on the identifier value and never on the organisation name. - -## Adjudication - -The item-level array on the approved response carries six entries against `itemSequence` 1. - -| Category | Field used | Value | -| :---- | :---- | :---- | -| `eligible` | `amount` | 2430.00 | -| `reason` | `reason.coding.display` | The audit trail string, below | -| `eligpercent` | `value` | 100 | -| `eligquant` | `value` | 1 | -| `status` | `reason.coding.code` | `Approved` | -| `deductible` | `amount` and `reason.coding` | 270, code `DEDUCT/01` | - -Every category except `deductible` and the claim-level `status` binds to `https://hl7.org/fhir/R4/valueset-adjudication.html`, an HTML documentation page used as a code system. `deductible` and the claim-level status carry a `coding` with no `system` at all. Do not attempt to resolve either. - -The deduction is the whole reason the benefit is less than the submission. Its reason code is `DEDUCT/01`, display "Non-Covered Service: The claimed service is not covered under the policy and therefore the amount is deducted." It appears only at item level. A reader that sums approved amounts without reading item deductions will report the wrong figure to the finance desk. - -Above the items sits a single claim-level `adjudication` entry: category `status`, reason `approved` on the final response and `queried` on the query. That code, not `outcome`, is the decision. - -## Totals - -Three totals, and they are computed on two bases. - -| `total[].id` | Category | Query response | Final response | -| :---- | :---- | :---- | :---- | -| `total` | `benefit` | 0 | 2430.00 | -| (none) | `submitted` | 2700.00 | 2700.00 | -| `PMJAY-T` | `eligible` | 2700.00 | 2430.00 | - -On the claim both `benefit` and the `PMJAY-T` eligible total are cumulative and agree once the claim settles. On the enhancement response they do not: `benefit` reports only the increment while the `PMJAY-T` eligible total is cumulative. No document states the rule, and the discriminator is the `total[].id`, an internal string rather than a code. Read `benefit` as the payable amount for the exchange you are in, and treat the `PMJAY-T` entry as the running policy figure. - -`total[submitted]` is 2700.00 in both responses. The provider's claim bundle declares `Claim.total.value` of 3300 with an item `factor` of 0.5. The payer's submitted figure matches neither, which means it comes from the payer's own record of the case rather than from the bundle it was sent. Do not reconcile your submitted amount against `total[submitted]`. - -The `reason` string on the final response also mixes date formats inside itself: - -``` - Auto approved by system.|null|USER1000099~02/27/2026, 03:02 ~Other~queried 1st attempt~CPD-Trust|System~27/02/2026, 03:20~NA~null~CITY SUPERSPECIALITY HOSPITAL|Approved -``` - -The payer's own entry is stamped `02/27/2026` and the provider's reply `27/02/2026`, month first then day first, in one string written by one system. Both times are on a 12 hour clock with no meridiem against a response created at 15:27. Parse this string for display only. Never derive a timestamp from it. - -## Reading the outcome - -| `outcome` | Claim-level `adjudication` reason | Meaning | -| :---- | :---- | :---- | -| `complete` | `approved` | Adjudicated. `total[benefit]` is payable, less any item deduction | -| `partial` | `queried` | A question. Totals are zeroed. See chapter 12 | -| `partial` | `approved` | Approved at a reduced amount, pending further processing | -| `complete` | `cancelled` | Rejected. Specified, not sampled | - -`outcome` alone is not the decision. `partial` covers both a query and an interim approval, and the two need opposite handling. Read the claim-level adjudication reason first, then `disposition`, then the totals. - -Settlement is a separate event. A `complete` and `approved` response closes the adjudication, not the money. The claim is closed only when the payment notice arrives with a UTR. - -## There is no rejected claim sample - -The sandbox run contains no rejected claim. Both claim responses in the archive are the query and the approval that followed it, and no bundle anywhere in the set carries `outcome` `complete` with reason `cancelled`, a populated `ClaimResponse.error`, or a `form` element. The rejection path is specified in the handbook and in the standard error code list, and the gateway's `ClaimError-1` onward codes are real, but nothing in the sample set demonstrates them. Build the rejection branch from the specification, and treat the field-level detail as unverified until a payer sends you one. diff --git a/site/docs/nhcx/v1/fhir-reference/codes-and-value-sets.md b/site/docs/nhcx/v1/fhir-reference/codes-and-value-sets.md deleted file mode 100644 index 051ce1f95..000000000 --- a/site/docs/nhcx/v1/fhir-reference/codes-and-value-sets.md +++ /dev/null @@ -1,188 +0,0 @@ ---- -title: Codes and value sets -sidebar_label: Codes and value sets -description: Every code an NHCX bundle uses with the system it belongs to, and the bindings the published samples get wrong. -verification: unverified -source: NHCX Integration Handbook Appendix A; NHCX Requests and Responses for UseCases, value sets; Domain Specifications page, terminologies; NHCX FAQs v1.2 §24, §25 -sidebar_position: 19 ---- - -# Codes and value sets - -Every code an NHCX bundle uses, in one place, with the system it belongs to. The workflow codes are in the Overview's Workflow Codes chapter and are not repeated here. - -## In short - -- Every code an NHCX bundle uses, with the system it belongs to. -- Supporting-info categories and codes come in two competing forms; the samples and the error messages disagree. -- Several declared systems are HTML documentation pages rather than code systems. Copy them anyway. -- The workflow codes are not repeated here; they have a page of their own. - -## Supporting-Info categories - -System `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category`. - -| Code | Display | Takes | -| :---- | :---- | :---- | -| `ONS` | Period, start or end dates | date-time string | -| `OTH` | Other | date-time string | -| `INV` | Investigation | reference | -| `ATT` | Attachment | attachment | -| `HDS` | Hospital discharge summary | reference | -| `DGN` | Diagnosis | reference | -| `LAB` | Lab test | reference | -| `AOB` | Onset of current symptoms | value | -| `MB` | Medical bill | attachment | -| `DIA` | Diagnostic report | reference | -| `CD` | Clinical document | reference | -| `INF` | Information | reference | -| `DIS` | Discharge status | string | -| `NMI` | Query remarks | string | -| `POI`, `POA`, `DOB`, `DEF`, `FIR`, `EMP` | Proof of identity, address, birth; declaration; FIR; employment | attachment | -| `STG` | Standard treatment guideline questionnaire | reference | -| `ADMD` | Admission date | date-time string | -| `SURD` | Surgery date | date-time string | -| `DSCHD` | Discharge date | date-time string | - -The last three are the categories the functional requirements document prescribes for the admission, surgery and discharge dates, and they are what the sample bundles actually carry. The payer's own rejection messages instead name `ONS` for all three. Both are in the corpus; confirm with the payer. - -## Supporting-Info codes - -System `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` in the sample bundles; the handbook writes it as `CodeSystem/`. Follow the samples. - -| Code | Display | -| :---- | :---- | -| `EDT` | EncounterDateTime | -| `ADDD` | Admission date - Discharge date | -| `PSP` | PatientSurgeryPerformed | -| `DSDE` | Discharge Date | -| `DTH` | DischargeToHome | -| `DTM` | DischargetoMortuary; also the death date under `ONS` | -| `LAMA` | Discharge with LAMA | -| `DAMA` | Discharge with DAMA | -| `DIS` | Discharge Summary | -| `100008` | General Findings | -| `100009` | Visual Acuity Report | -| `AT` | Questionnaire answers under `INF` | -| `ODN` | Policy-level questionnaire under `INF` | -| `CQD` | Case remarks for a query answer under `NMI` | -| `BCF` | Birth certificate | -| `DCB` | Discharge card for birth of a child | -| `MAND0006`, `MAND0062`, `MAND0409`, `MAND0455`, … | The mandatory-document family. The insurance plan defines several hundred of these, and the eligibility response with purpose auth-requirements returns the ones a given procedure needs. The code returned there is the code sent back on the supporting-info entry that satisfies it. | - -## Identifier types - -| Code | Meaning | -| :---- | :---- | -| `PMJAY` | Member ID | -| `ABHA` | ABHA number, no hyphens | -| `CLN` | Claim number | -| `NPI` | Provider's HFR ID | -| `NIIP` | Payer's registry ID | -| `NH` | Plan identifier | -| `MD` | Medical registration number | -| `MR` | Medical record number, used on a Communication | -| `ADN`, `HPID`, `HPIN`, `MCD` | Other identifier types the sample bundles carry | - -`HPIN` is not optional under PMJAY: the SHA HP sandbox looks the practitioner up by it and refuses a bundle without it with `PAYR-1083`. Send the HPR id as both `HPID` and `HPIN` (Building a Provider 10). -| `JHN` | Jurisdictional health number, used for ABHA in samples | -| `UTR` | Bank transaction reference | - -## Adjudication - -Categories: `submitted`, `eligible`, `copay`, `benefit`, `eligpercent`, `eligquant`, `reason`, `status`; totals add `tax`, `incentive`, `copayment`. - -Claim-level reasons: `approved`, `queried`, `cancelled`. - -Deduction reasons: `Non-CoveredService`, `ExceededCoverageLimit`, `DuplicateClaim`, `Coordination-of-Benefits`, `IncompleteDocumentation`, `PolicyDeductible`, `Co-Payment`, `FraudulentClaim`, `MedicalNecessity`, `BenefitLimitReached`, `MissedFilingDeadline`, `PaymentAlreadyMade`. - -Denial codes run `ClaimError-1` to `ClaimError-28`, and `PreauthError-1` to `PreauthError-13` plus `PreauthError-15`, with no 14 defined. Each is a sentence, such as "Claim has been rejected due to less than 24 hours of hospitalisation" or "Pre-Auth has been rejected as the Surgery was done before Pre auth approval". The full list is on the value-sets sheet. - -Letter form codes: `preauthapproval`, `preauthdenial`, `claimapproval`, `claimdenial`, `dischargeapproval`, `feedbackletter`, `policydocument`. - -## Task - -Codes: `reprocess`, `cancel`, `nullify`, `suspend`, `release`, `approve`, `search`, `poll`, `status`, `deliver`. - -Reasons: `partialpayment`, `erroneousclaim`, `claimrejected`, `rejectiondisputed`, `referred`, `erroneousregistration`, `wrongdiagnosis`, `treatmentplanchanged`, `patientrequest`, `financialconstraints`, `alternativetreatment`, `duplicateclaim`, `administrativeerror`, `other`; and for communication `tatquery`, `grievance`, `walletupdate`, `policychange`, `additionalinfo`, `claimArbitration`. - -Input types, at `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code`: `PayerId`, `ProviderId`, `PolicyNumber`, `ProductNumber`, `ClaimNumber`, `InitimationNumber`, `FromDate`, `ToDate`, `FinanceYear`, `ServiceCode`. The `include` input on a communication uses HL7's `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` instead. - -Output values: `paymentack`, `claimcancelled`, `claimreinitiated`, `claimsuspended`, `taskak`, `taskdelivered`. - -## Money types on a reconciliation - -`approvedamount`, `claimedamount`, `tds`, `servicetax`, `advance`, `recovered`, `penality`, and `Payment` for the net line. - -## Item categories - -Procedure types: `Procedure`, `Investigation`, `Implant`, `Drug`, `Package`, `Room`, `Stratifications`, `Consultation`. - -PMJAY specialties, system `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-benefitcategory`. - -| Code | Specialty | Code | Specialty | -| :---- | :---- | :---- | :---- | -| `BM` | Burns | `PM` | Palliative medicine | -| `DL` | Diagnostic laboratory | `SB` | Orthopaedics | -| `ER` | Emergency | `SC` | Surgical oncology | -| `HD` | High-end diagnostics | `SE` | Ophthalmology | -| `HM` | High-end medicine | `SG` | General surgery | -| `HP` | High-end procedures | `SL` | Otorhinolaryngology | -| `ID` | Infectious diseases | `SM` | Oral and maxillofacial | -| `IN` | Interventional neuroradiology | `SN` | Neurosurgery | -| `MC` | Cardiology | `SO` | Obstetrics and gynaecology | -| `MG` | General medicine | `SP` | Plastic surgery | -| `MM` | Mental disorders | `SS` | Paediatric surgery | -| `MN` | Neonatal | `ST` | Polytrauma | -| `MO` | Medical oncology | `SU` | Urology | -| `MP` | Paediatric medical | `SV` | CTVS | -| `MR` | Radiation oncology | `US` | Unspecified surgical | -| `OT` | Transplant | | | - -The actual specialties and packages for a hospital come from its InsurancePlan; this list is the value set they draw from. Each specialty's unspecified package is its prefix plus `215`; the unspecified item code on a claim is `U100`; the LAMA/DAMA stay is `LM100`. - -## Diagnosis and composition - -Diagnosis types: `admitting`, `clinical`, `discharge`, `final`. Diagnoses are ICD-10, system `http://hl7.org/fhir/sid/icd-10`. - -Composition types, SNOMED: `721981007` diagnostic studies report, `373942005` discharge summary, `4241000179101` laboratory report, `4261000179100` diagnostic imaging report, `422843007` chief complaint section. - -## Other terminologies the domain spec binds - -| Attribute | Value set | -| :---- | :---- | -| `coverageeligibilityrequest.insurer` | Insurance company owners | -| `claim.procedure.type` | Procedure type | -| `claim.procedure.procedure` | Procedure code, the scheme's package master | -| `claimresponse.item.adjudication.reason` | Denial codes | -| `claim.item.modifier` | Procedure modifiers | -| `claim.item.category` | Service categories | -| `claim.item.productOrService` | Service codes | -| `practitionerRole.speciality` | Medical specialty | -| `claim.careTeam.role` | Health service provider role | - -## Where the systems are wrong - -The code is usually right in these samples. The system it is bound to often is not, and a payer that validates bindings will reject what a payer that does not will accept. These are the ones observed across the twenty-two bundles. - -| What | The problem | -| :---- | :---- | -| Package codes | The same code appears in five different systems depending on the exchange: the payer's own host in an eligibility request, SNOMED in every preauthorisation and claim item, the payer's host again in the matching `Procedure` inside the same bundle, and two separate ValueSet URLs inside the plan | -| `http://snomed.info/sct0` | One coverage response binds to SNOMED with a trailing zero | -| Supporting-info category | Document entries bind `category` to the supporting-info **code** system rather than the category system. In the plan, the same error runs the other way, with a code bound to the category system | -| `Claim.type` | Binds to a ValueSet URL where a CodeSystem URL belongs | -| Adjudication categories | Bind to `https://hl7.org/fhir/R4/valueset-adjudication.html`, an HTML documentation page used as a code system URI | -| `cost.type` in the plan | Binds to the plan-type system, with a host spelling seen nowhere else, carrying values that are not plan types | -| Some categories | `deductible` and the claim-level status adjudication carry no `system` at all, as does the package coding in two coverage responses | - -Take the system from the sample for the exchange you are building, not from the code and not from another exchange. Where a payer rejects on a binding, that rejection is the authority. - -## Identifiers and displays that are wrong but required - -Three defects are load-bearing, meaning the correct value is the wrong one. - -- **The cancellation Task input is spelled `initimationNumber`.** Send the misspelling. It is what the payer reads. -- **Plan displays carry typos**, including misspelled specialty names. Store and echo them verbatim, because the payer rejects on a display mismatch. -- **The payer's own host is spelled four ways** across the set, including a transposition in five bundles. When echoing an identifier back, echo the spelling that arrived rather than the one you believe is correct. - -One more that is wrong and not required: entry identifiers in the coverage bundles repeat the full absolute URL, which exceeds what the specification permits for that field. Do not copy the pattern. diff --git a/site/docs/nhcx/v1/fhir-reference/communication.md b/site/docs/nhcx/v1/fhir-reference/communication.md deleted file mode 100644 index 53637908c..000000000 --- a/site/docs/nhcx/v1/fhir-reference/communication.md +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: Communication -sidebar_label: Communication -description: The payer's asynchronous channel to the provider, specified field by field and with no sample bundle in either direction. -verification: unverified -source: "NHCX PMJAY Integration Handbook §12.1, §12.2, §12.3, and its communication implementation notes; NHCX Requests and Responses for UseCases, Communication sheet and Value sets; Sample FHIR bundles, `preauth/preauthresponse_with_query.txt`; AWS Sandbox NHCX Use Case Postman Collection; NHCX Provider Side Use Cases, Sandbox Exit Process" -sidebar_position: 17 ---- - -# Communication - -Communication is the payer's asynchronous channel to the provider. It is not a response to anything. The payer uses it to raise a turnaround-time alert, pass on a grievance, announce a policy or wallet change, or ask for a document that the standard query mechanism does not cover. The provider must acknowledge within thirty seconds, whether or not the underlying issue is resolved. - -**There is no sample bundle for either direction.** The PMJAY archive holds nothing under communication, and the sandbox Postman entry for `/v1/communication/request` carries the same recycled ciphertext as seven other endpoints. Everything in this chapter is drawn from the PMJAY handbook sections 12.2 and 12.3, which describe a payload captured on 3 December 2025 for case `PMJAY/CH/S/2024/R2/1000010394`, and from the NHCX Communication sheet. Treat it as specified and unsampled, and expect to discover differences on first contact. - -## In short - -- The payer's asynchronous channel to the provider. It is not a response to anything. -- There is no sample bundle for either direction; everything here is from specification. -- The provider must acknowledge within thirty seconds, whether or not the issue is resolved. -- Under PMJAY this channel never carries a document query. - -## The endpoints - -| Endpoint | Direction | What it carries | -| :---- | :---- | :---- | -| `POST /v1/communication/request` | Payer to gateway to provider | The `Task` bundle with the message | -| `POST /v1/communication/on_request` | Provider to gateway to payer | The acknowledgement, same shape | - -`x-hcx-correlation_id` must be identical on both. The gateway validates `x-hcx-workflow_id` on both. - -## The request bundle - -Four entries as specified: `Task`, `Communication`, and the two `Organization`s with the payer first. - -### Task - -| Path | Specified value | -| :---- | :---- | -| `Task.identifier[0].value` | The case number, `PMJAY/CH/S/2024/R2/1000010394` | -| `Task.status` | `completed`, not `requested` | -| `Task.intent` | `proposal` | -| `Task.code.coding.system` | `http://terminology.hl7.org/CodeSystem/financialtaskcode` | -| `Task.code.coding.code` | `poll`, display "Poll" | -| `Task.reasonCode.coding.system` | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | -| `Task.reasonCode.coding.code` | `tatquery`, display "Tat Query Intimation" | -| `Task.input[0].type.coding` | `include`, system `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` | -| `Task.input[0].valueReference.reference` | The `Communication` resource | - -`Task.status` is `completed` on the request as well as the acknowledgement. That is the status of the communication event, not of the problem it reports. A turnaround-time breach is still open after the `Task` says `completed`. - -`poll` combined with an `include` input is the general NHCX push pattern. It tells the gateway to deliver the referenced resource to the recipient. - -### Communication - -| Path | Specified value | -| :---- | :---- | -| `Communication.id` | The case number without the prefix, `1000010394` | -| `Communication.identifier[0].type.coding.code` | `MR`, "Medical record number", used here as the claim reference | -| `Communication.identifier[0].system` | `https://payer.pmjay.gov.in` | -| `Communication.status` | `completed` | -| `Communication.category[0].coding.system` | `http://terminology.hl7.org/CodeSystem/communication-category` | -| `Communication.category[0].coding.code` | `reminder` | -| `Communication.priority` | `asap` | -| `Communication.topic.coding.system` | `http://terminology.hl7.org/CodeSystem/communication-topic` | -| `Communication.topic.coding.code` | `progress-update` | - -### Category, topic and priority - -| Field | Code | When it is used | -| :---- | :---- | :---- | -| `category` | `reminder` | Turnaround-time breach, follow-up, deadline alert | -| `category` | `notification` | One-way information: policy update, wallet change, scheme revision | -| `category` | `instruction` | The provider must perform a specific action | -| `category` | `questionnaire` | A structured question set needing a response | -| `topic` | `progress-update` | Tied to an active claim or preauthorisation. The common case | -| `topic` | `appointment-reminder` | Operational, not tied to a case | -| `priority` | `routine` | No urgent action | -| `priority` | `urgent` | High priority, normal service level | -| `priority` | `asap` | Immediate action expected | -| `priority` | `stat` | Patient safety or fraud | - -### Reason codes - -`Task.reasonCode` is the field to switch on. It decides which desk the message reaches. - -| Code | Trigger | -| :---- | :---- | -| `tatquery` | The case has breached the payer's service-level threshold. The most common code in live traffic | -| `grievance` | A beneficiary or provider complaint needs acknowledgement or corrective action | -| `walletupdate` | The patient's benefit balance or entitlement has changed since approval | -| `policychange` | Rates revised, packages added, empanelment changed | -| `additionalinfo` | The payer needs documents or clarification beyond the standard query | -| `claimArbitration` | The payer has acknowledged a reprocess or erroneous-claim request | - -The handbook spells the last one `claimArbitration` in its scenario table and `claimArbitartion` in its reason-code table. Send `claimArbitration` and accept either on receipt. - -## The acknowledgement bundle - -Identical structure. `Task.status`, `Task.intent`, `Task.reasonCode` and `Task.code` are all echoed back unchanged. Three things differ: - -- `Bundle.meta.lastUpdated` and `Bundle.timestamp` carry the acknowledgement time. The captured pair sits about ten minutes apart. -- The provider `Organization` entry comes first, ahead of the payer. -- The handbook records the sandbox payload as having the two organisations' identifier types swapped. The provider organisation is typed `NIIP` and the payer organisation `NPI`, which is backwards. Take the role from the entry order and from `Organization.type`, never from the identifier type code. - -## What the samples show - -Nothing. No communication bundle exists in the archive in either direction. The only field-level record is the handbook's transcription of one sandbox payload, and that transcription is where the swapped identifier defect was found. - -## The query modelled two ways - -This is the trap that costs the most time. The NHCX protocol layer and the PMJAY handbook both define a `Task` and `Communication` pair as the way a payer asks the provider a question. It carries `reasonCode` `additionalinfo` and, in the Communication sheet, a `payload` holding the attachment. That is the design above. - -The live PMJAY samples do not use it. A payer question arrives inside the preauthorisation or claim response instead, as free text in `ClaimResponse.item.adjudication.reason.coding.display`, pipe-delimited and with no coded structure at all: - -``` -other Request acknowledged and accepted for further processing.|USER1000099~02/26/2026, 08:47 ~other~testing query with souvik~PPD-Trust|null|USER1000099~02/26/2026, 09:13 ~other~Testing query 2 with souvik~PPD-Trust -``` - -Each segment is username, timestamp, type, comment and trust, tilde-separated, and a `null` segment appears where a turn is empty. The provider's answer is not a `Communication` either. It is the entire claim bundle re-submitted with the documents added. Chapters 09 and 12 cover that form, which is the only one with samples. - -So build both. The ad-hoc form is what PMJAY sends today. The `Task` and `Communication` pair is what the protocol specifies and what a non-PMJAY payer on the general network is entitled to send you. - -## Traps - -- **Two specifications for the same bundle.** The handbook carries a `Communication` in both directions with `Task.code` `poll`. The NHCX Communication sheet carries a `CommunicationRequest` on the payer's message with `Task.code` `poll`, and a `Communication` on the provider's reply with `Task.code` `deliver`. Parse `Task.input[0].valueReference` by resolving the reference and reading the resource type, not by assuming one. -- **The sheet marks fields mandatory that the handbook's capture omits.** `reasonReference`, `basedOn`, `about`, `statusReason` and `payload` are all listed as mandatory in the sheet and none appears in the transcribed payload. Accept their absence. -- **`Communication.status` is `completed` before anything is resolved.** Do not close a case on it. -- **Identifier types are swapped in the acknowledgement.** See above. This is a recorded sandbox defect, not a reading error. diff --git a/site/docs/nhcx/v1/fhir-reference/coverage-eligibility-request.md b/site/docs/nhcx/v1/fhir-reference/coverage-eligibility-request.md deleted file mode 100644 index 8a66343b4..000000000 --- a/site/docs/nhcx/v1/fhir-reference/coverage-eligibility-request.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Coverage eligibility request -sidebar_label: Coverage eligibility request -description: "The provider's eligibility question as FHIR: six entries, the purpose that decides which question, and the fields that matter." -verification: unverified -source: "NHCX Integration Handbook §7; Insurance Plan Implementation Guide, CoverageEligibility flattened tables; Coverage Eligibility (NHA); NHCX-PMJAY-HMIS Integration Guide §8.4.0; Sample FHIR bundles, `coverageeligibility/coveragerequest_validation.txt`, `coveragerequest_benefits.txt`, `coveragerequest_auth-requirement.txt`" -sidebar_position: 2 ---- - -# Coverage eligibility request - -The provider asks the payer whether a policy is live, what it covers, and what a package will need. One `CoverageEligibilityRequest` carries all of that, and `purpose` decides which question is being asked. It is the first exchange in a case, sent at registration or before treatment planning, and it is cheap enough to send three times in three minutes, which is exactly what the sandbox run did. - -## In short - -- One `CoverageEligibilityRequest` carries four different questions, and `purpose` decides which. -- Six entries, no `Composition`, no clinical evidence. This bundle is small on purpose. -- The provider is identified three different ways across one bundle and its sibling exchange. -- The `Coverage` you send is a stub. Take the policy terms from the response. - -## The bundle - -Six entries, in this order in the sample. There is no `Composition` and no clinical evidence; this bundle is small on purpose. - -| # | Resource | What it is for | -| :---- | :---- | :---- | -| 1 | `CoverageEligibilityRequest` | The question. Carries `purpose`, `item[]` and the references below | -| 2 | `Patient` | The beneficiary, identified by PMJAY ID | -| 3 | `Organization` (`prov`) | The hospital, by HFR ID | -| 4 | `Organization` (`pay`) | The payer, by NIIP registry ID | -| 5 | `Coverage` | The policy the provider believes applies | -| 6 | `Practitioner` | Whoever entered the request, referenced from `enterer` | - -Entries reference each other by absolute URL rather than by `urn:uuid:`, and each `fullUrl` repeats in the entry's `id`. Both forms are accepted, so match whichever your gateway partner emits rather than converting. - -## The fields that matter - -| Path | Value in the sample | Notes | -| :---- | :---- | :---- | -| `status` | `active` | The only value used | -| `purpose[]` | `validation`, `benefits`, `auth-requirements` | One value per request. `discovery` is defined but unsampled | -| `priority.coding` | `http://terminology.hl7.org/CodeSystem/processpriority`, `normal` | | -| `patient` | Reference to entry 2 | | -| `servicedDate` | `2026-02-26` | Date of service, not the date of asking | -| `created` | `2026-02-26T12:51:30+05:30` | Always `+05:30`. UTC fails validation | -| `insurer`, `provider`, `enterer` | References to entries 4, 3 and 6 | | -| `facility.identifier` | system `https://nhcx.pmjay.gov.in`, value `IN1910000151` | The HFR ID again, under a third system | -| `insurance[0].coverage` | Reference to entry 5 | `focal` is not sent | -| `item[].productOrService.coding` | system `https://payer.pmjay.nha.gov.in`, code `MG004A`, display `Dengue fever` | Package code and display, exactly as the plan has them | -| `item[].diagnosis[].diagnosisCodeableConcept.coding` | same system, code `A97.0` | An ICD-10 code under a payer system, not under an ICD system | - -`item[]` is what makes a `benefits` or `auth-requirements` request answerable. A `validation` request does not need it, though the sample sends it anyway. - -The identifiers are worth reading closely. The `Patient` carries three: `PMJAY` from the NRCeS identifier-type system, `JHN` and `PI` from HL7 v2-0203, all three under `https://bis.pmjay.gov.in` or `https://provider.pmjay.gov.in`. The `PI` value in the sample is the literal string `NA`, which is what a hospital sends when it has no internal MRN yet. The `Coverage` carries an `NH` identifier whose value is the policy code `PMJAY/HP/S/G` under system `https://payer.nha.gov.in`. The `Practitioner` carries `HPID` and `HPIN` with the same value, `1123`. - -## The three purposes - -The three request files are the same bundle sent three times. Diffed against each other they differ in exactly three places: `CoverageEligibilityRequest.purpose[0]`, `CoverageEligibilityRequest.created`, and `Bundle.timestamp`. Nothing else changes, not the item, not the diagnosis, not the identifiers. So the shape below is the whole contract. - -| Purpose | Question | What the payer must return | -| :---- | :---- | :---- | -| `validation` | Is this policy in force, and what is left in the wallet? | Balance and used amount | -| `benefits` | Is this package covered for this beneficiary? | Per-item coverage or exclusion | -| `auth-requirements` | What does this package need before I can treat? | Authorisation flag and required documents | -| `discovery` | Which policies does this person hold? | One `insurance` entry per active coverage. No sample exists | - -Build one request and switch `purpose`. Do not build three. - -## What the sample shows - -`coveragerequest_validation.txt` is 7,206 bytes; `coveragerequest_benefits.txt` 7,204; `coveragerequest_auth-requirement.txt` 7,213. All three are `Bundle.type = "collection"` from the same sandbox run on 26 February 2026, 12:51, 12:53 and 12:55. - -The sample is unrepresentative in one respect worth knowing. It carries a single item with a single diagnosis. Real treatment planning asks about several packages at once, and the array is `0..*`. - -## Traps - -**The package code is bound to a different system in every exchange.** Here `MG004A` sits in `https://payer.pmjay.nha.gov.in`. In every preauthorisation and claim request the same code sits in `http://snomed.info/sct`. In the `InsurancePlan` it sits in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-productorservice` under `coverage`, and in `http://hl7.org/fhir/ValueSet/procedure-category` under `plan.specificCost`, in the same resource. One coverage response compounds it with `http://snomed.info/sct0`, a trailing zero. None of these codes are SNOMED concepts. Match on the code, never on the system, and emit whichever system the exchange you are building expects. - -**The bundle is labelled as a preauthorisation.** `Bundle.id` is the literal string `PreAuth` and `Bundle.identifier.value` is `VB26AA2600001`, the preauthorisation case number, on a message sent before any preauthorisation exists. The payer does not object. Do not read the case number off an eligibility bundle and assume a case is open. - -**`Bundle.meta.lastUpdated` is a frozen template value**, `2025-11-11T15:09:41.516+05:30`, on all three requests and on every other provider-generated bundle in the set. `Bundle.timestamp` holds the real date. Read `timestamp`. - -**The provider is identified three ways in one bundle.** `Organization.identifier` uses `NPI` under `https://facility.abdm.gov.in`. `facility.identifier` uses no type code under `https://nhcx.pmjay.gov.in`. And the insurance plan request, a different exchange for the same hospital, sends the sandbox participant code `SBX_001205` instead. The value `IN1910000151` must equal the HFR ID on the sender's participant record whichever wrapper it sits in. - -**Two identifier systems are HTML pages.** `Practitioner.qualification.code.coding.system` is `https://hl7.org/fhir/R4/v2/0360/2.7/index.html`, a documentation page, carrying the code `BSC NURSING`. `CoverageEligibilityRequest.identifier.system` is `https://hcx.pmjay.gov.in/v1/coverageeligibility/check`, an endpoint URL. Neither is a code system. Copy them anyway; the payer echoes them back unchanged. - -**The `Coverage` you send is a stub.** The sample sets `period` to a five-day window around the service date. The payer's own `Coverage` in the response runs 2023-04-02 to 2026-04-01. Your `Coverage` states which policy you mean, not what its terms are. Take the terms from the response. diff --git a/site/docs/nhcx/v1/fhir-reference/coverage-eligibility-response.md b/site/docs/nhcx/v1/fhir-reference/coverage-eligibility-response.md deleted file mode 100644 index 5bbaeeed1..000000000 --- a/site/docs/nhcx/v1/fhir-reference/coverage-eligibility-response.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Coverage eligibility response -sidebar_label: Coverage eligibility response -description: The payer's answer, which echoes your whole request back before answering it, and how to index it without reading your own data. -verification: unverified -source: "NHCX Integration Handbook §7; Insurance Plan Implementation Guide, CoverageEligibility flattened tables; Coverage Eligibility (NHA); NHCX-PMJAY-HMIS Integration Guide §8.4.0; Sample FHIR bundles, `coverageeligibility/coverageresponse_validation.txt`, `coverageresponse_benefits.txt`, `coverageresponse_auth-requirement.txt`" -sidebar_position: 3 ---- - -# Coverage eligibility response - -The payer's answer to the eligibility question. It arrives on the `on_check` callback and it is not a small message, because the payer sends your entire request back before answering it. Understanding that structure is most of the work of parsing it. - -## In short - -- The payer sends your entire request back before answering it: eleven entries, of which the first six are the echo. -- Index the bundle by `fullUrl`, not by resource type, or you will read your own data back. -- The request id comes back truncated at the last slash. Match on `request.reference` instead. -- The patient is a different person on each side of the exchange. Do not overwrite your record. - -## The bundle - -Eleven entries. The first six are your request, echoed. The last five are the answer. - -| # | Resource | Half | What it is | -| :---- | :---- | :---- | :---- | -| 1 | `CoverageEligibilityRequest` | echo | Your request resource, unchanged | -| 2 | `Patient` | echo | The patient as you sent it | -| 3 | `Organization` (`prov`) | echo | The hospital as you sent it | -| 4 | `Organization` (`pay`) | echo | The payer as you sent it | -| 5 | `Coverage` | echo | The policy stub as you sent it | -| 6 | `Practitioner` | echo | The enterer as you sent it | -| 7 | `CoverageEligibilityResponse` | answer | The answer, with `insurance[].item[]` | -| 8 | `Patient` | answer | The payer's own record for this beneficiary | -| 9 | `Coverage` | answer | The payer's own policy record, with real dates and class | -| 10 | `Organization` (payer, id `1518`) | answer | The payer as the payer sees itself | -| 11 | `Organization` (provider, id `IN1910000151`) | answer | The hospital as the payer sees it | - -The echo is byte-identical to what you sent apart from two changes. Every echoed resource gains a `meta.tag` of `SUBSETTED` from `http://terminology.hl7.org/CodeSystem/v3-ObservationValue`. And `CoverageEligibilityRequest.id`, which you sent as `PMJAY/HP/S/G`, comes back as `G`: the payer has split the id on the last slash and kept the tail. Do not use that id to match the response to the request. Use `CoverageEligibilityResponse.request.reference`, which is intact. - -Note that entries 8 to 11 duplicate entries 2 to 5 as resource types. Index the bundle by `fullUrl`, not by resource type, or you will read the request's `Patient` and think the payer returned your own data. - -Every entry on both halves also repeats its `fullUrl` in a `Bundle.entry.id`. FHIR allows an `id` on any element but constrains it to at most 64 characters of letters, digits, hyphens and dots. These values are absolute URLs. A strict validator will reject them, and no consumer needs them. - -## The answer - -| Path | Value in the sample | -| :---- | :---- | -| `status` | `active` | -| `purpose[]` | Echo of the request's purpose | -| `outcome` | `complete` | -| `disposition` | `Policy is currently in-force` | -| `identifier[0]` | system `https://hcx.pmjay.gov.in/v1/coverageeligibility/check`, value `MD5SLS4X5-IN1910000151` | -| `request.reference` | The request's `fullUrl` | -| `patient`, `insurer`, `requestor` | References to entries 8, 10 and 11 | -| `insurance[0].coverage` | Reference to entry 9 | -| `insurance[0].inforce` | `true` | -| `meta.profile` | `http://hl7.org/fhir/StructureDefinition/CoverageEligibilityResponse` | - -The response identifier is the PMJAY ID and the HFR ID joined by a hyphen, and it is the same value in all three responses. It identifies the beneficiary at the hospital, not the exchange. It is not a correlation key. - -`meta.profile` is the base HL7 profile, not the NRCeS one. Every provider-generated resource in the set declares `https://nrces.in/ndhm/fhir/r4/StructureDefinition/...`; the payer's response resource declares plain HL7. The echoed half keeps the NRCeS profiles it arrived with. - -## By purpose - -**Validation.** One item, and it is the only response that carries money. - -| Path | Value | -| :---- | :---- | -| `item.productOrService.coding` | system `http://snomed.info/sct0`, code `305056002`, display `Admission procedure` | -| `item.benefit[0].id` | `MD5SLS4X5/PMJAY-T` | -| `item.benefit[0].type.coding` | `http://terminology.hl7.org/CodeSystem/ex-benefitcategory`, code `30`, `Health Benefit Plan Coverage` | -| `item.benefit[0].allowedMoney` | 463730.00 INR | -| `item.benefit[0].usedMoney` | 36270.00 INR | -| `item.authorizationRequired` | `true` | - -`allowedMoney` is the balance remaining, not the sum insured. The plan's `generalCost` for this policy is 500,000 INR, and 463,730 plus 36,270 is exactly that. There is one item per wallet; PMJAY beneficiaries can hold more than one, so read them all. - -**Benefits and auth-requirements.** Both return the same single item: - -| Path | Value | -| :---- | :---- | -| `item.productOrService.coding[0]` | code `MG004A`, display `Dengue fever`, **no system at all** | -| `item.excluded` | `true` | -| `item.authorizationRequired` | `true` | - -There is no `benefit[]`, no `allowedMoney`, no `authorizationSupporting[]`. The handbook's element tables show `benefit[].type` values of `Procedure`, `Investigation` and `Stratification` for the benefits purpose, and `authorizationSupporting[]` codings carrying `MAND` document codes for auth-requirements. The samples carry none of it. Build for the fuller form and tolerate the leaner one. - -## What the sample shows - -`coverageresponse_validation.txt` is 16,042 bytes, `coverageresponse_benefits.txt` 15,729, `coverageresponse_auth-requirement.txt` 15,747. All three arrived on 26 February 2026 between 18:21 and 18:25, roughly five and a half hours after the requests. - -The `benefits` and `auth-requirements` responses are identical in their `CoverageEligibilityResponse` apart from `purpose`, `created` and `Bundle.timestamp`. Every field that would distinguish an authorisation-requirements answer from a benefits answer is absent from both. The two purposes are not actually differentiated in this payer's implementation. If you need to know which documents a package demands, take them from the `InsurancePlan`, which does carry them, rather than from an `auth-requirements` response. - -## Traps - -**The payer identifier system is misspelled.** `Bundle.identifier.system` on all three responses is `https://payer.pmajy.nha.gov.in`. That is `pmajy`, not `pmjay`. Requests use the correct spelling. Two other payer-generated bundles share the typo, the payment notice and the cancel response, making five in all. Other payer bundles, including the insurance plan response, spell it correctly. Never key a lookup on this system string. - -**A third spelling appears one entry further down.** The payer's own `Coverage.identifier.system` is `https://payer.pmjay.gov.in`, with no `nha`. Your request sent `https://payer.nha.gov.in` for the same policy code, and the `InsurancePlan` uses `https://payer.nha.gov.in` again. Three systems, one policy `PMJAY/HP/S/G`. - -**The patient is a different person on each side of the exchange.** For the single PMJAY ID `MD5SLS4X5` the corpus holds two irreconcilable demographic records. The split is provider against payer, rather than one exchange against another. - -| Side | Name | Gender | Birth date | -| :---- | :---- | :---- | :---- | -| Every provider-generated bundle: eligibility, preauthorisation and claim requests, including the `Patient` resources inside embedded clinical documents | Soubhik Biswas | `male` | 2004-09-18 | -| Payer-generated coverage responses | PALLVI | `female` | 0006-06-25 | -| Payer-generated claim responses | PALLVI | `other` | 2002-01-01 | - -That reads as integrator test data on the provider side and the payer's real record on the other, never reconciled, and the payer's own two responses do not agree with each other either. The birth date `0006-06-25` is not a typo you can repair; it parses as the year 6 CE and any age calculation on it will produce nonsense. The `JHN` value differs too: `91-7182-8065-4077` in the request against `020700400170000003120007` in the response, and the response adds an `ABHA` identifier of `91-7034-1237-4240` in the format the request used for `JHN`. Treat the payer's `Patient` as authoritative for the policy, keep your own for the encounter, and never overwrite one with the other. Validate `birthDate` before display. - -**`item.productOrService` loses its system.** You sent `MG004A` under `https://payer.pmjay.nha.gov.in`. It comes back with a bare code and display, no `system` element. A strict `CodeableConcept` matcher will fail to match it against anything. - -**`http://snomed.info/sct0` is not SNOMED.** The trailing zero appears only in the validation response's admission concept. Code `305056002` is a real SNOMED concept, so the value is right and the system is wrong. - -**`Coverage.relationship.coding.system` is an HTML page**, `https://terminology.hl7.org/6.5.0/CodeSystem-subscriber-relationship.html`, carrying the code `child`. The code is valid; the system is a link to documentation about the system. - -**One identifier is an encrypted blob.** The payer's `Patient` carries an `ADN` (Aadhaar) identifier whose value is a 120-character ciphertext ending in `==`. Do not log it, do not display it, and do not try to validate it as a twelve-digit number. diff --git a/site/docs/nhcx/v1/fhir-reference/insurance-plan-request.md b/site/docs/nhcx/v1/fhir-reference/insurance-plan-request.md deleted file mode 100644 index f6151494b..000000000 --- a/site/docs/nhcx/v1/fhir-reference/insurance-plan-request.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Insurance plan request -sidebar_label: Insurance plan request -description: "The smallest message on the exchange: one Task asking a payer for the plan behind a policy." -verification: unverified -source: "NHCX Integration Handbook §6; Insurance Plan Implementation Guide; NHCX-PMJAY-HMIS Integration Guide §8.1; NHCX FAQs v1.2 #15; Sample FHIR bundles, `insuranceplan/insuranceplan_request.txt`" -sidebar_position: 4 ---- - -# Insurance plan request - -The smallest message in the whole exchange. One `Task` asking a payer to send back the plan for a policy. There is no patient in it, no encounter and no clinical content, because the plan is a property of the policy and the hospital, not of any admission. The provider sends it once per policy it deals with and caches the answer. - -## In short - -- The smallest message in the whole exchange: one `Task` asking for the plan behind a policy. -- No patient, no encounter, no clinical content, because the plan belongs to the policy and the hospital. -- Sent once per policy the hospital handles, not once per patient. -- Refresh on a `policychange` communication, on a schedule, and before treatment planning if the cache has no version stamp. - -## The bundle - -One entry. - -| # | Resource | What it is for | -| :---- | :---- | :---- | -| 1 | `Task` | The poll. Carries `code` and two `input[]` values | - -The entry uses `urn:uuid:` for both `fullUrl` and `id`, which is the handbook's recommended form. The eligibility bundles use absolute URLs instead. Both work. - -## The fields that matter - -| Path | Value in the sample | -| :---- | :---- | -| `Bundle.type` | `collection` | -| `Bundle.id` | `6a249219-1401-4fa5-baba-b16b551bf31a` | -| `Bundle.identifier` | system `https://payer.pmjay.nha.gov.in`, value `f9d2071c-ef8d-41ab-a899-c81d4c192a28` | -| `Bundle.meta.lastUpdated` | `2026-03-03T12:14:48+05:30` | -| `Task.status` | `requested` | -| `Task.intent` | `original-order` | -| `Task.code.coding.system` | `http://terminology.hl7.org/CodeSystem/financialtaskcode` | -| `Task.code.coding.code`, `.display` | `poll`, `Poll` | -| `input[0].type.coding` | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code`, code `policyNumber`, display `PolicyNumber` | -| `input[0].valueString` | `PMJAY/HP/S/G` | -| `input[1].type.coding` | same system, code `providerId`, display `Provider ID` | -| `input[1].valueString` | `SBX_001205` | - -Both inputs are `valueString`. There is no `valueIdentifier` and no system attached to the values themselves, so the payer resolves them by convention. - -At least one input is mandatory. Sending both narrows the answer to the packages this hospital is empanelled for, which matters: the sampled response is 21 MB with both inputs supplied. - -## Task codes across the exchange - -`poll` is one of four Task codes NHCX uses, and they do not share a code system. This is worth a table because the temptation to hardcode one system is strong and wrong. - -| Exchange | System | Code | -| :---- | :---- | :---- | -| Insurance plan request | `http://terminology.hl7.org/CodeSystem/financialtaskcode` | `poll` | -| Cancel request | `http://terminology.hl7.org/CodeSystem/financialtaskcode` | `cancel` | -| Payment notice | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-codes` | `deliver` | -| Cancel response | `http://hl7.org/fhir/CodeSystem/task-code` | `approve` | - -The `financialtaskcode` value set defines `cancel`, `poll`, `release`, `reprocess` and `status`. Only `poll` and `cancel` have samples. - -## What the sample shows - -`insuranceplan_request.txt` is 1,269 bytes, sent 3 March 2026 at 12:14. The response came back forty-two minutes later. - -The file is unrepresentative in one respect. It is a provider-to-payer request, but it carries a `meta.tag` of `SUBSETTED` on both the bundle and the `Task`. `SUBSETTED` means "resource encoded in summary mode" and is something a server puts on a response it has trimmed. Its presence here indicates the sample was captured from the payer's own store after processing rather than from the wire. Do not send `SUBSETTED` on a request. - -## Traps - -**The Task code system is not the one the older documentation gives.** Earlier NHCX material puts `poll` under `https://nhcx.abdm.gov.in/api`. The sample uses `http://terminology.hl7.org/CodeSystem/financialtaskcode`, which is the real HL7 financial task code system and the one the payer accepted. Use the HL7 system. - -**`intent` is `original-order`, not `order`.** Both are valid FHIR `RequestIntent` codes and they mean different things: `order` is a generic order, `original-order` is the initiating one. The sample sends `original-order`. Element tables elsewhere say `order`. This is not known to be enforced, but match the sample. - -**`providerId` is not the HFR ID.** The sample sends `SBX_001205`, a sandbox participant code. Every other bundle in the corpus identifies the same hospital as `IN1910000151`, its HFR ID, in `Organization.identifier` and in `facility.identifier`. A fourth form, `1652`, appears in the preauthorisation responses. There is no statement anywhere that `providerId` here means the participant code rather than the HFR ID; the sample is the only evidence. Send whatever your participant record was onboarded with, and expect to try both against a new payer. - -**There is no `Bundle.timestamp`.** Every other request bundle in the corpus carries one. This one has only `meta.lastUpdated`, and unlike the eligibility requests that value is a real date rather than the frozen `2025-11-11T15:09:41.516+05:30` template. So the field you read for the send time is not the same field across exchanges. Read `timestamp` when it exists and fall back to `meta.lastUpdated`. - -**The bundle identifier is a UUID, not a case number.** Eligibility, preauthorisation and claim bundles put the case number in `Bundle.identifier.value`. This exchange has no case, so the value is a second UUID, unrelated to `Bundle.id`. Nothing correlates the request to the response except the callback; the response's own `Bundle.identifier` is `100155-1000003614`, the payer's plan key, which does not appear in the request at all. - -## When to send it - -Once per policy the hospital handles, not once per patient. The plan changes on the payer's schedule, not yours. - -Refresh it when a `Communication` arrives with reason `policychange`, on whatever periodic schedule you set, and before treatment planning if your cached copy has no version stamp. Chapter 05 covers what to do with the answer and why the cache matters as much as it does. diff --git a/site/docs/nhcx/v1/fhir-reference/insurance-plan-response-coverage-based.md b/site/docs/nhcx/v1/fhir-reference/insurance-plan-response-coverage-based.md deleted file mode 100644 index 83fb87384..000000000 --- a/site/docs/nhcx/v1/fhir-reference/insurance-plan-response-coverage-based.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Insurance plan response, coverage-based -sidebar_label: "Plan: coverage-based (private)" -description: "The private-insurer shape: coverage, benefit and limit, with no published sample and what that leaves unconfirmed." -verification: unverified -source: "Insurance Plan Implementation Guide (NRCeS), coverage and benefit structure; NHCX Integration Handbook §6; NHCX FAQs v1.2 #15. No sample payload of this shape exists in the published corpus" -sidebar_position: 7 ---- - -# Insurance plan response, coverage-based - -The shape a private insurer or its TPA sends. Where a scheme plan lists named packages at fixed rates, an indemnity policy lists benefits with money limits, and the hospital bills against those limits rather than against a package price. - -**There is no sample of this shape in the corpus.** Every one of the twenty-two published payloads is PMJAY, and PMJAY is package-based throughout. This chapter is written from the Insurance Plan implementation guide and from the handbook's description of the structure. Treat it as specified and unsampled, and expect to discover details on first contact with a real insurer. - -## In short - -- The private-insurer shape: coverage, then benefit, then limit. No second structure to join. -- Rules arrive as prose in `benefit.requirement`, not as flags. -- There is no sample of this shape in the published corpus, so it is written from the specification. -- Three things have no published answer: the payload, the benefit-type value set, and worked exclusions. - -## The structure - -```mermaid -flowchart TD - IP["InsurancePlan"] - COV["coverage[]
one per cover type"] - BEN["benefit[]
one per covered service"] - LIM["limit[]
value and unit"] - REQ["benefit.requirement
e.g. Pre-authorisation required"] - IP --> COV --> BEN --> LIM - BEN --> REQ - style IP fill:#EEF1F4,stroke:#7A8797,color:#1B2431 - style COV fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - style BEN fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 - style LIM fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - style REQ fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 -``` - -Three levels, and no second parallel structure. This is the practical difference from the package-based shape: everything about a benefit, its rules and its money, hangs off the one `coverage[].benefit[]` entry. There is no `specificCost` side to join to. - -| Level | Path | What it holds | -| :---- | :---- | :---- | -| Cover type | `coverage[].type` | The kind of cover, for example in-patient | -| Benefit | `coverage[].benefit[].type` | A covered service, for example ICU charges or room rent | -| Limit | `coverage[].benefit[].limit[]` | The money cap for that benefit, as a value and a unit | -| Requirement | `coverage[].benefit[].requirement` | A string such as "Pre-authorisation required" | - -## What the guide specifies - -- **Cover types and benefits are the plan's own vocabulary.** The guide gives in-patient cover with benefits such as ICU charges and room rent as the worked shape. It does not publish a closed value set of benefit types for indemnity plans, so the codes and displays a given insurer sends are that insurer's. -- **A limit per benefit,** with its own conditions and required documents. This is where a room-rent cap or an ICU sub-limit lives. -- **`benefit.requirement` carries the rule as prose,** not as a flag. Where a scheme plan says `ApprovalNotRequired: N`, an indemnity plan says "Pre-authorisation required" in a string. There is no equivalent of the sixteen `Claim-Condition` flags. -- **Conditions and exclusions** hang off the plan as extensions, as they do in the package shape. The one published plan carries none of them, so nothing in the corpus shows their populated form. - -## What this means for a provider - -The two shapes drive the treatment screen differently, and a system that supports both needs two code paths behind one screen. - -| | Package-based | Coverage-based | -| :---- | :---- | :---- | -| What the user picks | A specialty, then a package. The rate is fixed and not editable | A service, then bills against it | -| Where the amount comes from | The plan's `Procedure` or `Stratification` cost line | The hospital's own bill, checked against the benefit limit | -| What the screen must cap | Quantity, implants and stratification, from the flags | The amount, against the limit | -| What blocks submission | A code or display that differs from the plan, character for character | An amount over the limit, or a missing mandatory document | -| Whether preauthorisation is needed | The `ApprovalNotRequired` flag | The `requirement` string, read as prose | - -The parts that do not change are the ones worth leaning on. It is still one `Task` with code `poll` to request. It still arrives on `/v1/insuranceplan/on_request` as a `collection` bundle. It is still fetched once per policy rather than once per patient, still cached, and still refreshed on a `policychange` communication. And it is still the first line of validation, run on the server. - -## What has no answer here - -Three things an integrator will want and the published material does not give. - -**No sample payload.** The element names above are from the guide's prose and its structure diagram, not from a payload anyone has parsed. Field-level details, the exact `type` code systems, and whether `limit.code` is populated the way the package shape populates it, are all unconfirmed. - -**No benefit-type value set.** The package shape binds its categories to `ndhm-benefitcategory`, a published 32-code set. Nothing equivalent is published for indemnity benefit types. Ask the insurer for its list before building a picker. - -**No worked example of conditions or exclusions.** Waiting periods, pre-existing-condition rules and excluded procedures are specified as plan-level extensions. The only plan in the corpus carries none, so their populated shape is unverified in both directions. - -Agree all three with the insurer in writing before the first call, and record what you agreed, the way the JWE chapter recommends for the contested header fields. diff --git a/site/docs/nhcx/v1/fhir-reference/insurance-plan-response-package-based.md b/site/docs/nhcx/v1/fhir-reference/insurance-plan-response-package-based.md deleted file mode 100644 index a8715b197..000000000 --- a/site/docs/nhcx/v1/fhir-reference/insurance-plan-response-package-based.md +++ /dev/null @@ -1,171 +0,0 @@ ---- -title: Insurance plan response, package-based -sidebar_label: "Plan: package-based (scheme)" -description: "The scheme shape, and the only one with a real payload: two parallel structures, 32 categories, sixteen flags per package." -verification: unverified -source: "NHCX Integration Handbook §6; Insurance Plan Implementation Guide; NHCX-PMJAY-HMIS Integration Guide §8.1; NHCX FAQs v1.2 #15; Sample FHIR bundles, `insuranceplan/insuranceplan_response.txt`" -sidebar_position: 6 ---- - -# Insurance plan response, package-based - -The shape every government scheme sends, and the only one with a real payload behind it. PMJAY uses it throughout. A package is a named procedure at a fixed, all-inclusive rate, and the plan carries every package the hospital may bill along with the rules that govern each one. - -The shared parts of the bundle, the plan header and the caching rules are in the previous chapter. This chapter is the package-based body. - -## In short - -- The scheme shape, and the only one with a real payload behind it: 2,217 entries. -- The packages exist in two parallel structures, and neither is complete on its own. You have to join them on the package code. -- Sixteen claim-condition flags per package decide what the treatment screen may offer and what it must cap. -- Every flag is a string, and `"N"` is truthy in most languages. Compare against the literal `"Y"`. - -## Two parallel structures for one set of packages - -Nothing outside the payload documents this. - -`InsurancePlan.coverage[]` and `InsurancePlan.plan[0].specificCost[]` each hold the same 32 specialty categories, and each of those holds the same benefit codes. 2,881 benefit entries on each side, 1,727 distinct package codes, and the two sets of codes intersect exactly. Neither side is complete on its own. - -```mermaid -flowchart TD - IP["InsurancePlan"] - COV["coverage[] · 32 categories"] - PLN["plan[0] · type 03 Group
generalCost 500,000 INR"] - SC["specificCost[] · 32 categories"] - CB["benefit[] · 2,881
Claim-Condition flags
Claim-SupportingInfoRequirement
limit[] rates"] - SB["benefit[] · 2,881
cost[] Procedure / Stratification / Implant
ParentProcedure on implants"] - Q["Questionnaire × 2,215"] - IP --> COV --> CB - IP --> PLN --> SC --> SB - CB -. "documentationUrl" .-> Q - CB <-. "join on package code" .-> SB - style IP fill:#EEF1F4,stroke:#7A8797,color:#1B2431 - style COV fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - style PLN fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - style SC fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - style CB fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 - style SB fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 - style Q fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 -``` - -| Side | Carries | Path to a package | -| :---- | :---- | :---- | -| `coverage[]` | The rules. Flags, document requirements, questionnaire links, and `limit[]` rates | `coverage[].benefit[].type.coding.code` | -| `plan[0].specificCost[]` | The money. `cost[]` lines by type, with stratification qualifiers | `plan[0].specificCost[].benefit[].type.coding.code` | - -Load both, index both by package code, and join. If you read only `specificCost` you will price a package correctly and never learn that it is government-reserved. If you read only `coverage` you will know every rule and have no cost line. - -The two sides also disagree on which system the package code belongs to. Under `coverage` it is `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-productorservice`. Under `specificCost` it is `http://hl7.org/fhir/ValueSet/procedure-category`. Same code, same resource, two systems, both of them ValueSet URLs where a CodeSystem URL belongs. - -## The 32 categories - -`coverage[].type.coding` and `specificCost[].category.coding` both bind to `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-benefitcategory`. The two-letter codes and their package counts in this plan: - -| Code | Category | Packages | Code | Category | Packages | -| :---- | :---- | :---- | :---- | :---- | :---- | -| `SV` | Cardio-thoracic & Vascular surgery | 527 | `SM` | Oral & Maxillofacial Surgery | 32 | -| `SS` | Paediatric Surgery | 238 | `MM` | Mental Disorders Packages | 27 | -| `SC` | Surgical Oncology | 228 | `BM` | Burns Management | 27 | -| `SG` | General Surgery | 220 | `ST` | Polytrauma | 24 | -| `SB` | Orthopaedics | 216 | `IN` | Interventional Neuroradiology | 24 | -| `MO` | Medical Oncology | 185 | `HM` | High end Medicine | 19 | -| `MG` | General Medicine | 181 | `MN` | Neo-natal care Packages | 17 | -| `MP` | Paediatric Medical management | 146 | `HD` | High end Diagnostics | 13 | -| `SU` | Urology | 139 | `OT` | Organ & Tissue transplant | 11 | -| `SO` | Obstetrics & Gynaecology | 120 | `HP` | High end procedures | 10 | -| `SN` | Neurosurgery | 110 | `ER` | Emergency Room Packages | 6 | -| `SL` | Otorhinolaryngology | 94 | `ID` | Infectious Diseases | 5 | -| `MC` | Cardiology | 74 | `PM` | Palliative Medicine | 1 | -| `SE` | Opthalmology | 67 | `TG` | Transegender Procedure | 1 | -| `MR` | Radiation Oncology | 48 | `DL` | Diagnostic Laboratory | 1 | -| `SP` | Plastic and reconstructive Surgery | 37 | `US` | Unspecified Surgical Package | 33 | - -Codes beginning `S` are surgical, `M` medical. The displays are misspelled in two places, `Opthalmology` and `Transegender Procedure`, and you must store them exactly as sent, because a preauthorisation whose display differs from the plan's is rejected on the display. - -## Claim-Condition: the flags - -Under `coverage[].benefit[].extension` with url `https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim-Condition`. Sixteen sub-extension names in this plan, each a `valueString` of `Y`, `N`, an integer or a word. 2,261 of the 2,881 benefit entries carry the full set; the remaining 620 are implants and carry only `ParentProcedure`. - -| Flag | Values in this plan | What it governs | -| :---- | :---- | :---- | -| `ProcedureType` | `Surgical` 1,493, `Medical` 420, `Conservative` 348 | Which clinical pathway and which document set applies | -| `GovtReserved` | `N` 2,243, `Y` 18 | `Y` means only a government hospital may bill it. Hide it in a private facility | -| `ApprovalNotRequired` | `N` 1,321, `Y` 940 | `Y` means treat without waiting for a preauthorisation decision | -| `EnhancementAllowed` | `N` 1,924, `Y` 337 | `Y` means an enhancement request will be entertained. `N` means the first approval is the ceiling | -| `ScheduledTATApproval` | `Y` 2,237, `N` 24 | `Y` means the package auto-approves if the payer does not respond inside the turnaround window | -| `QuantityAllowed` | `1` on 2,259, `4` on 2 | Maximum quantity per approval | -| `IsDayCare` | `N` 1,770, `Y` 491 | Day-care procedure, no overnight stay expected | -| `ImplantApplicable` | `N` 1,909, `Y` 352 | Whether an implant line may be added | -| `MultipleImplantsAllowed`, `MaximumImplantsAllowed` | `N` 2,257 / `1` 2,257 | Implant count rules | -| `StratificationAllowed` | `N` 1,785, `Y` 476 | Whether a bed-category or dosage line may be added | -| `MultipleStratificationAllowed`, `MaximumStratificationAllowed` | `N` 1,788 / `1` 2,257 | Stratification count rules | -| `CyclicProcedure`, `MaximumCyclesAllowed` | `N` 2,258 / `0` 2,259 | Repeatable under one approval, and how many times | -| `ParentProcedure` | 620, a `valueCodeableConcept` | On implant benefits. Names the package the implant may accompany | - -Every flag except `ParentProcedure` is a string. `"N"` is truthy in most languages. Compare against the literal `"Y"`. - -These are the flags that make the treatment screen behave. `GovtReserved` decides what is offered at all. `ApprovalNotRequired` and `ScheduledTATApproval` decide whether the clinician waits. `EnhancementAllowed` decides whether the enhancement path exists at the point a case runs over, and the three maxima are the validation limits for the item lines. None of them are re-stated in the preauthorisation response, so a system that does not cache the plan cannot enforce any of them. - -## Cost and limit - -The money is split across the two structures, and it splits by kind. - -Under `plan[0].specificCost[].benefit[].cost[]`, each line has a `type` and a `value` in INR: - -| `cost.type.coding.code` | Lines | Meaning | -| :---- | :---- | :---- | -| `Procedure` | 1,795 | The base package rate | -| `Stratification` | 1,644 | An alternative rate for a bed category or dosage, named in `cost.qualifiers[]` | -| `Implant` | 620 | An implant amount, added over the package rate | - -All three carry the system `https://www.nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-plan-type`. That is the plan-type code system being used for cost types, with a `www.` prefix that appears nowhere else in the corpus, and the displays contain the typo `proudct`. Stratification qualifiers bind to `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-productorservice`, with codes like `STRAT006a` `Routine Ward` and `STRAT006d` `ICU - With Ventilator`. - -Under `coverage[].benefit[].limit[]` the same amounts appear again as `value.value` and `value.unit` of `INR`, with `code.coding` naming either the package or the stratification. Package `MG004A` "Dengue fever" has a base limit of **0 INR** and stratification limits of 1,800, 2,700, 3,600 and 4,500. A base rate of zero is not an error and not a free package; it means the payable amount is entirely determined by the bed category chosen. Do not treat 0 as missing data, and do not submit a zero-value item line. - -## Supporting information requirements - -Two levels, and three different extension shapes. - -**Plan level**, sixteen `Claim-SupportingInfoRequirement` extensions directly on `InsurancePlan.extension`. One is proof of identity: category `POI` `Proof of identity`, code `ADN` `Aadhaar Number`, and it uses the sub-extension urls `SupportInfoCategory` and `SupportInfoCode`. The other fifteen use the urls `category`, `code` and `documentationUrl`, are all category `INF` and code `ODN` `Other document`, and each points at one of the fifteen policy-level questionnaires. - -**Package level**, on `coverage[].benefit[].extension`. 13,109 nested document requirements and 2,200 questionnaire links. - -| Shape | Count | Category | Code | Points at | -| :---- | :---- | :---- | :---- | :---- | -| Nested, one sub-extension per document | 13,109 | `DIA` `Diagnostic report` | `MAND0006` and similar, from `.../ValueSet/ndhm-supportinginfo-code` | Nothing. Names a document you must attach | -| Flat, with `documentationUrl` | 2,200 | `INF` | `STG` `Standard Treatment Guidelines` | An STG questionnaire | - -The nested form buries each requirement one level deeper, under a url of the shape `.../Claim-SupportingInfoRequirement/MG004A/100409/MAND0409`, which encodes the package code, an internal id and the document code. The flat form puts `category`, `code` and `documentationUrl` directly under the extension. A parser that assumes one shape will silently drop the other. Recurse. - -Typical package-level document codes include `MAND0006` "Detailed discharge summary", `MAND0062` "Detailed ICPs", `MAND0063` "Treatment details", `MAND0064` "All investigations reports" and `MAND0408` "Clinical notes detailing history and Admission notes showing vitals and examination findings". These are the checklist a hospital sees before it can submit. - -## The questionnaires - -2,215 entries, 1,461 distinct. Two kinds. - -| Kind | Distinct | `fullUrl` shape | Titles | -| :---- | :---- | :---- | :---- | -| Policy level | 15 | `https://payer.gov.in/policy/questionnaire/{id}` | Named forms | -| STG | 1,446 | `https://payer.gov.in/policy/stgquestionnaire/{id}` | All titled `STG Questionnaire` | - -The fifteen policy-level forms are Discharge Information, General Findings, Personal History, Family History, Admission Details, Hospital Bill Details and Query Response. Then Authentication Consent, Death, Leaving Against Medical Advice (LAMA), Discharge Against Medical Advice (DAMA), General Medicine, Discharge Consent, Live Discharge and Patient Payment Consent. - -Across all 2,215 there are 10,504 items: 10,463 `choice`, 20 `attachment`, 12 `dateTime` and 9 `string`. All but 20 are `required: true`. `choice` items carry `answerOption[].valueString` rather than a coded answer, usually just `Yes` and `No`. - -The provider renders these and returns a `QuestionnaireResponse`, referenced from a supporting-info entry under category `INF`. The `documentationUrl` in the plan is the `Questionnaire.url` the response must point back to. - -## Traps - -**Duplicate entries.** 2,215 `Questionnaire` entries carry 1,461 distinct `fullUrl` values. Six distinct STG forms appear 20 times each, byte-identical every time. Deduplicate on `fullUrl` before storing, or your form table will be half redundant. - -**The STG questionnaires put the question in `prefix`, not `text`.** All 10,425 STG items have a `prefix` and no `text`. All 79 policy-level items have a `text` and no `prefix`. A renderer that reads `item.text`, which is the correct FHIR field for the question, will draw 1,446 forms of blank rows with answer buttons. Read `text` and fall back to `prefix`. - -**`STG` is bound to the category system, not the code system.** In all 2,200 flat requirements the `code` sub-extension carries system `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` with code `STG`. `STG` is a supporting-info code, not a category. The same defect appears in the preauthorisation and claim requests, in the opposite direction. Match on the code. - -**Extension urls change case and form between the two structures.** Under `coverage` the condition extension url is the absolute `https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim-Condition`. Under `specificCost` it is the bare relative string `claim-condition`. A matcher keyed on the full url finds 2,261 of them and covers all 620 that carry `ParentProcedure` on the cost side. - -**The plan declares no profile.** `InsurancePlan.meta` carries only a `SUBSETTED` tag. There is no `meta.profile` on the plan, the payer `Organization` or any `Questionnaire`. Every provider-generated resource in the corpus declares its NRCeS profile. Do not make profile presence a parse precondition. - -**Several documented elements are simply absent.** There is no `plan.identifier`, no `plan.network`, no `coverage.network`, no `endpoint`, and no `claim-exclusion` extension anywhere in the resource. Waiting periods, pre-existing-condition rules and excluded procedures are specified as plan-level extensions and this plan carries none of them. Treat every one of those as optional. - -**1,727 codes, 2,881 entries.** 543 package codes appear more than once, one of them 52 times. The repeats are implant codes, which appear once per parent procedure they may accompany. Key your index on the pair of package code and parent, or on the element `id`, not on the package code alone. diff --git a/site/docs/nhcx/v1/fhir-reference/insurance-plan-response.md b/site/docs/nhcx/v1/fhir-reference/insurance-plan-response.md deleted file mode 100644 index 46d267e03..000000000 --- a/site/docs/nhcx/v1/fhir-reference/insurance-plan-response.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Insurance plan response -sidebar_label: Insurance plan response -description: The two shapes a plan arrives in, which payer sends which, and the bundle, header and caching rules they share. -verification: unverified -source: "NHCX Integration Handbook §6; Insurance Plan Implementation Guide; NHCX-PMJAY-HMIS Integration Guide §8.1; NHCX FAQs v1.2 #15; Sample FHIR bundles, `insuranceplan/insuranceplan_response.txt`" -sidebar_position: 5 ---- - -# Insurance plan response - -The payer's answer to the poll, and the largest message in NHCX by a wide margin. It is the policy as data: what the hospital may bill, at what rate, under what rules, with which documents, and on which forms. Everything on a treatment-planning screen should come from here. - -## In short - -- Two shapes exist, and which one arrives depends on whether the payer is a scheme or a private insurer. -- They are not layout variants: they answer different questions and need different code paths. -- The bundle, the plan header and the caching rules are the same for both. -- Package-based is fully sampled at 21 MB. Coverage-based has no sample in the corpus at all. - -## Two shapes, and a payer picks one - -The Insurance Plan implementation guide defines two ways to structure the same resource, and which one arrives depends on who the payer is. They are not variants of a layout. They answer different questions, and a hospital system that handles one will not read the other. - -| | Package-based | Coverage-based | -| :---- | :---- | :---- | -| Sent by | Government schemes. PMJAY throughout | Private insurers and their TPAs | -| Path to a billable thing | `plan[0].specificCost[] → category → benefit[] → cost[]`, with the rules on `coverage[]` alongside | `coverage[] → benefit[] → limit[]` | -| The unit | A named package at a fixed all-inclusive rate, for example `MG004A` "Dengue fever" | A benefit with a money limit, for example ICU charges or room rent | -| What decides the amount | The package rate, plus stratification and implant lines the flags allow | The benefit's limit, against the bill the hospital actually raises | -| Rules carried | Sixteen `Claim-Condition` flags per package | `benefit.requirement` strings such as "Pre-authorisation required" | -| Sample in the corpus | Yes. One 21 MB payload, fully worked | None | -| Written up in | The next chapter | The chapter after it | - -Both arrive on `/v1/insuranceplan/on_request` in a `collection` bundle, in answer to the same one-`Task` request. The next two chapters take each shape in turn. What follows here is what they share. - -## The bundle - -2,217 entries. Three resource types. - -| # | Resource | Count | What it is | -| :---- | :---- | :---- | :---- | -| 1 | `InsurancePlan` | 1 | The whole policy. 21 MB of the 21 MB file | -| 2 | `Organization` | 1 | The payer, `SHA HP`, NIIP `1518` | -| 3 onwards | `Questionnaire` | 2,215 | The payer's data-requirement forms | - -There is no provider `Organization`. `ownedBy` and `administeredBy` both point at entry 2. There is no `Patient`, because a plan is not about a person. - -`Bundle.identifier` is `100155-1000003614` under system `https://payer.pmjay.nha.gov.in`, correctly spelled here. `Bundle.type` is `collection`, `Bundle.timestamp` and `meta.lastUpdated` are both `2026-03-03T12:56:48.159+05:30`. - -## The plan header - -| Path | Value | -| :---- | :---- | -| `id` | `100155-1000003614` | -| `status` | `active` | -| `name` | `PMJAY - Universal Health Policy` | -| `type.coding` | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-insuranceplan-type`, code `07`, `Universal Health Policy` | -| `period` | 2023-04-01 to 2026-03-31 | -| `identifier[0]` | system `https://hcx.pmjay.gov.in/v1/InsurancePlan`, value `100155-1000003614` | -| `identifier[1]` | type `NH`, system `https://payer.nha.gov.in`, value `PMJAY/HP/S/G`, element id `100155` | -| `identifier[2]` | type `XV`, system `https://payer.nha.gov.in`, value `PMJAY/HP/S/2024/R2`, element id `100185` | -| `plan[0].type.coding` | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-plan-type`, code `03`, `Group` | -| `plan[0].generalCost[0].cost` | 500,000 INR | - -There are two type codes and they answer different questions. `InsurancePlan.type` `07` is what kind of insurance this is. `plan.type` `03` is how the product is sold, in this case as a group policy. `generalCost` of 500,000 INR is the family wallet, and it reconciles exactly with the eligibility response's 463,730 allowed plus 36,270 used. - -`identifier[1].value` is the string you sent as `policyNumber`. `identifier[2]` is the scheme revision, `R2` of the 2024 Himachal Pradesh plan, and it is what your cache should be stamped with. - -## What the sample shows - -`insuranceplan_response.txt` is 21,163,674 bytes, received 3 March 2026 at 12:56, forty-two minutes after the request. It cannot be opened in an editor and it cannot be handled by a naive JSON parser inside a request-response cycle. Stream it, or parse it once on a worker and store the result. - -The sample is a state scheme plan and therefore entirely package-based. A private insurer's plan uses the coverage-and-limit shape with benefit types like `ICU` and room rent and `benefit.requirement` strings such as "Pre-authorisation required". There is no sample of that shape in the corpus. - -## How the plan is meant to be used - -Fetch it once per policy, not once per patient, and cache it. Stamp the cache with `identifier[2].value`, the scheme revision, and record on every preauthorisation and claim which revision it was built against. A rate that changed on the payer's side without a refresh on yours is the commonest cause of a reduced approval. The revision stamp is what turns that into a diagnosable event rather than a mystery. - -Refresh when a `Communication` arrives with reason `policychange`, and on whatever periodic schedule your operations team accepts. A 21 MB fetch is not something to do per admission. - -From the cache, build the treatment-planning screen. The specialty list is `coverage[].type`. The package list under a specialty is its `benefit[]`, filtered by `GovtReserved` against your facility type. The price shown is the `Procedure` cost line, or the `Stratification` line once a bed category is chosen. The document checklist is the package's `Claim-SupportingInfoRequirement` entries plus the sixteen at plan level. The forms are the `Questionnaire` resources the requirements point at, rendered from the plan rather than hard-coded, because they change when the scheme changes. - -Then use the same cache as the first line of validation, on the server and not only in the browser. Codes and displays character for character as the plan has them, including the misspellings. Amounts within the benefit's limit. Quantity within `QuantityAllowed`. Implant and stratification counts within their maxima. Every mandatory document attached before submit is enabled. Nothing on that screen should be typed in by hand if the plan already knows it. diff --git a/site/docs/nhcx/v1/fhir-reference/payment-notice-and-acknowledgement.md b/site/docs/nhcx/v1/fhir-reference/payment-notice-and-acknowledgement.md deleted file mode 100644 index 884183fc1..000000000 --- a/site/docs/nhcx/v1/fhir-reference/payment-notice-and-acknowledgement.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Payment notice and acknowledgement -sidebar_label: Payment notice and acknowledgement -description: "The only exchange carrying real money: three notices as the transfer moves, the UTR, and the acknowledgement Task." -verification: unverified -source: "Sample FHIR bundles, `paymentNotice/payment_notice.txt` and `paymentNotice_ack.txt`, `claim/claim_queryUpdate_response.txt`; NHCX PMJAY Integration Handbook §4.1, §4.2, §11; NHCX Requests and Responses for UseCases, Value sets and PaymentNotice sheets; Payment (NHA); NHCX Provider Side Use Cases, Sandbox Exit Process" -sidebar_position: 16 ---- - -# Payment notice and acknowledgement - -The payment notice arrives unasked. The payer sends it once money moves against an approved claim, on `/v1/paymentnotice/request`. It can arrive three times for one case: workflow **30** when the payer initiates, **31** when the banking system processes, **33** when the transfer settles. The provider replies with an acknowledgement `Task`, workflow **17**. This is the only exchange in the reference that carries actual money rather than an adjudicated figure. - -## In short - -- The only exchange carrying real money rather than an adjudicated figure. -- Three notices can arrive for one case: 30 initiated, 31 processed, 33 settled. -- The UTR rides on the `PaymentReconciliation`, whose detail lines itemise the money by type. -- The provider replies with an acknowledgement `Task` on workflow 17. - -## The notice bundle - -Five entries, in this order. Every resource carries a `SUBSETTED` meta tag. - -| # | Resource | What it is for | -| :---- | :---- | :---- | -| 1 | `Task` | The delivery instruction. Its single input references the `PaymentNotice` | -| 2 | `PaymentNotice` | The headline: net amount, currency, payment status, recipient | -| 3 | `PaymentReconciliation` | The breakdown: payment date, payment identifier, one detail line per component | -| 4 | `Organization` | The provider, `NPI` `IN1910000151` | -| 5 | `Organization` | The payer, `NIIP` `1518`, with no `name` at all | - -### The fields that matter - -| Path | Value in the sample | -| :---- | :---- | -| `Task.status`, `Task.intent` | `requested`, `order` | -| `Task.code.coding.system` | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-codes` | -| `Task.code.coding.code` | `deliver` | -| `Task.description` | "Payment initiated" | -| `Task.input[0].type.coding` | `status`, system `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` | -| `Task.input[0].valueReference` | The `PaymentNotice` | -| `PaymentNotice.identifier[0]` | Type `CLN`, value `EO26AA2700001` | -| `PaymentNotice.status` | `active` | -| `PaymentNotice.payment` | Reference to the `PaymentReconciliation` | -| `PaymentNotice.amount` | `2187`, `INR` | -| `PaymentNotice.paymentStatus.coding` | `paid`, system `http://terminology.hl7.org/CodeSystem/paymentstatus` | -| `PaymentReconciliation.paymentDate` | `2026-02-27`, a date with no time | -| `PaymentReconciliation.paymentAmount` | `2187`, `INR` | -| `PaymentReconciliation.disposition` | "Payment initiated" | -| `PaymentReconciliation.paymentIdentifier.type.coding` | `UTR`, system `.../ndhm-identifier-type-code` | -| `PaymentReconciliation.paymentIdentifier.value` | `PMJAY/HP/S/2024/R2/10000009/Normal` | - -`PaymentNotice.amount` is the net figure that reaches the hospital's account. It is not the approved amount. Take the approved amount from the claim response and keep both. - -### The detail lines - -| `detail[].type.coding.code` | `amount.value` | `detail[].id` | -| :---- | :---- | :---- | -| `TDS` | 243 | `PMJAY/HP/S/2024/R2/10000009/TDS` | -| `Payment` | 2187 | `PMJAY/HP/S/2024/R2/10000009/Normal` | - -The full value set for `detail[].type` also defines `approvedamount`, `claimedamount`, `servicetax`, `advance`, `recovered` and `penality`. None of those appear in the sample. Sum every line whose type is a deduction and add the `Payment` line before you compare against anything. - -Both `detail[].type.coding.system` values are `http://hl7.org/fhir/ValueSet/payment-type`, a ValueSet URL used where a CodeSystem URL belongs. - -## The arithmetic that ties it together - -The payment notice reconciles against the claim response for the same case, `EO26AA2700001`. That response reported three totals: `submitted` 2700.00, `eligible` 2430.00 and `benefit` 2430.00. The notice pays 2187 and deducts 243. - -``` -adjudicated benefit 2430 - minus TDS 243 - equals net paid 2187 -``` - -That is the check to run on every notice. Net plus the sum of deductions must equal the adjudicated benefit. If it does not, the payer has applied a component you are not parsing, and the case should be flagged rather than closed. Note the direction of the identity: the handbook's implementation note says net plus TDS should equal the gross claim amount, but 2187 plus 243 is 2430, the benefit, not 2700, the submitted amount. Reconcile against `benefit`, not against what you claimed. - -## The acknowledgement bundle - -Three entries. The provider builds this one, so it uses `urn:uuid:` on the `Task` and absolute URLs on the two `Organization`s, exactly like the cancel request. - -| # | Resource | What it is for | -| :---- | :---- | :---- | -| 1 | `Task` | The acknowledgement. Two outputs, no inputs | -| 2 | `Organization` | The provider, `IN1910000151`, "Usha Kiron" | -| 3 | `Organization` | The payer, `1518`, "SHA HP" | - -| Path | Value in the sample | -| :---- | :---- | -| `Task.status`, `Task.intent` | `completed`, `order` | -| `Task.code.coding.system` | `http://terminology.hl7.org/CodeSystem/financialtaskcode` | -| `Task.code.coding.code` | `status` | -| `Task.description` | "Recived the payment EO26AA2700001", misspelled in the live payload | -| `Task.output[0].type.coding` | `status`, system `.../ndhm-task-output-type` | -| `Task.output[0].valueCodeableConcept.coding` | `paymentack`, system `.../ndhm-task-output-value`, display "Payment is acknowledged" | -| `Task.output[1].type.coding` | `claimNumber`, system `.../ndhm-task-input-type-code` | -| `Task.output[1].valueString` | `EO26AA2700001` | - -`paymentack` is the value the payer looks for. The other output values in the same code system are `claimcancelled`, `claimreinitiated`, `claimsuspended`, `taskak` and `taskdelivered`. - -## What the samples show - -`paymentNotice/payment_notice.txt`, 5,334 bytes, five entries, timestamped 2026-02-27T15:36:08+05:30. `paymentNotice/paymentNotice_ack.txt`, 3,164 bytes, three entries, timestamped 2026-02-27T10:06:18+05:30. - -Both files describe workflow 30 only, the initiation. There is no sample of workflow 31 or 33, so the settled notice that actually carries a bank reference has never been observed. Neither is there a sample where more than two detail lines appear. - -## Traps - -- **Input and output systems are mixed inside one resource.** `output[1].type` in the acknowledgement is coded in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code`, an input system used for an output, while `output[0].type` correctly uses `ndhm-task-output-type`. Emit it the way the sample does. If you validate strictly against the output system, this entry will fail. -- **Three `Task` code systems across four `Task` exchanges.** The notice is `ndhm-task-codes|deliver`, the acknowledgement is `financialtaskcode|status`, the cancel request is `financialtaskcode|cancel` and the cancel response is `task-code|approve`. Never switch on the code without the system. -- **The UTR is not a bank reference.** `PaymentReconciliation.paymentIdentifier` is typed `UTR`, but the value is `PMJAY/HP/S/2024/R2/10000009/Normal`, a structured scheme reference built from the plan class, an internal number and the payment type. Reconciliation staff cannot match that against a bank statement. Display it, store it, and expect a real transaction reference only on workflow 33, which has no sample. -- **The acknowledgement predates the notice.** The acknowledgement is stamped 10:06 and the notice 15:36 on the same day. The sandbox files were assembled out of order. Do not derive lifecycle ordering from timestamps. -- **The payer identifier system is misspelled.** The notice bundle identifier uses `https://payer.pmajy.nha.gov.in`. The provider's acknowledgement uses the correct `https://payer.pmjay.nha.gov.in`. Match on value. -- **`Bundle.meta.lastUpdated` on the acknowledgement is frozen** at the template value `2025-11-11T15:09:41.516+05:30`, shared with every other provider request bundle. `Bundle.timestamp` holds the real time. -- **Where the acknowledgement is posted is stated two ways.** The Payment document and the sandbox exit checklist say `/v1/paymentnotice/on_request`. The handbook says `/v1/task/submit` in its resource table and `/v1/paymentnotice/on_request` in its implementation note. Build to `on_request` and make the path configurable per payer. -- **The payer `Organization` in the notice has no name.** Fall back to the `NIIP` value for display. diff --git a/site/docs/nhcx/v1/fhir-reference/preauthorisation-enhancement.md b/site/docs/nhcx/v1/fhir-reference/preauthorisation-enhancement.md deleted file mode 100644 index a47b52b01..000000000 --- a/site/docs/nhcx/v1/fhir-reference/preauthorisation-enhancement.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: Preauthorisation enhancement -sidebar_label: Preauthorisation enhancement -description: An enhancement is a preauthorisation bundle with one more item. Nothing in the payload says which it is. -verification: unverified -source: "Sample FHIR bundles, `preauth/enhancement/enhancement_req.txt`, `preauth/enhancement/enhancement_resp.txt`, `preauth/preauth_request.txt`; NHCX-PMJAY-HMIS Integration Guide §8.4.3; NHCX APIs to be called based on scenario, row 7; NHCX PMJAY Integration Handbook §8.5, workflow table" -sidebar_position: 10 ---- - -# Preauthorisation enhancement - -An enhancement extends an already approved preauthorisation. The patient stays longer, a second procedure is added, or the treatment plan grows. The provider posts it to the same `/v1/preauth/submit` endpoint under workflow 13, quoting the original reference with a new correlation ID. The payer answers on `/v1/preauth/on_submit`. Multiple enhancements may be raised until discharge, each only after the previous request on the case has closed. - -## In short - -- An enhancement is a preauthorisation bundle with one more item and a larger total. -- Nothing in the payload marks it as an enhancement: `Claim.related` is absent and the case number is unchanged. -- Only the workflow code in the header separates it from the original request. -- Sequencing is enforced by the payer, not by the payload. - -## Nothing in the payload says this is an enhancement - -The enhancement bundle is a preauthorisation bundle. `Claim.use` is still `preauthorization`. `Claim.identifier[0].value` is still `VB26AA2600001`, the same case number as the original request. `Claim.status` is still `active`. **`Claim.related` is absent**, so there is no `prior` link to the earlier submission and no `relationship` code. `Claim.created` is a new timestamp and nothing else changes. - -The only difference between the original request and the enhancement, inside the FHIR payload, is that `Claim.item` has grown from one entry to two, and `Claim.total` has grown to match. - -The declaration that this is an enhancement lives entirely at the protocol layer, in the workflow ID and the correlation ID of the JWE envelope. The integration guide states it plainly: an enhancement is "a new preauth request with the old reference but new correlation id". A payload-only reader cannot distinguish an enhancement from a resubmission or from a first request that happened to have two items. Key your state machine on the workflow ID you sent and the correlation ID you stored, never on the bundle. - -## The bundle - -54 entries. The first six and the last two are the request; the middle is three complete ABDM clinical documents. - -| Entry | Resource | `fullUrl` | What it is for | -| :---- | :---- | :---- | :---- | -| 0 | `Claim` | absolute | The request, now with two items | -| 1 | `Patient` | absolute | Beneficiary | -| 2, 3 | `Organization` | absolute | Provider, then payer | -| 4 | `Coverage` | absolute | The policy | -| 5 | `Practitioner` | absolute | The treating doctor | -| 6 to 17 | 12 resources headed by a `Composition` | `urn:uuid:` | ABDM `DiagnosticReportRecord`, "Lipid Profile" | -| 18 to 42 | 25 resources headed by a `Composition`, including three `Condition`, eleven `Observation`, a `Procedure`, a `MedicationRequest` and an `AllergyIntolerance` | `urn:uuid:` | ABDM `DischargeSummaryRecord`, "Discharge Summary for Dengue" | -| 43 to 51 | 9 resources headed by a `Composition` | `urn:uuid:` | ABDM `DiagnosticReportRecord`, "Blood Sugar Fasting" | -| 52, 53 | `Procedure` | absolute | One per `Claim.procedure` entry | - -`Bundle.identifier` is still the case number. `Bundle.id` is still the literal string `PreAuth`. - -## The second item - -The two items are what the payer adjudicates. They differ in more than the amount. - -| Path | `item[0]` | `item[1]` | -| :---- | :---- | :---- | -| `sequence` | `1` | `2` | -| `procedureSequence` | `[1]` | `[2]` | -| `category.coding` | code `MP`, "General medicine" | code `MG`, "General Medicine" | -| `productOrService.coding` | code `MG0111A`, "Pleural Effusion" | code `MG004B`, "Dengue hemorrhagic fever" | -| `productOrService.text` | `Testing ABC` | `Testing 123` | -| `modifier.coding` | code `STRAT006b`, "HDU" | code `STRAT006c`, "ICU - Without Ventilator" | -| `servicedPeriod` | `2026-02-22` to `2026-02-27` | `2026-02-22` to `2026-02-25` | -| `quantity`, `factor` | `1`, `0.5` | `1`, `0.5` | -| `unitPrice`, `net` | `3300` | `8500` | - -`Claim.total.value` is `11800`, the sum of both nets. **The request total is cumulative.** The already-approved line is resubmitted in full alongside the new one, exactly as the integration guide requires: the bundle must carry "already approved treatments and treatments for approval". - -Both category codings sit in `https://payer.pmjay.nha.gov.in`. `MP` and `MG` render as the same specialty with different capitalisation. They are distinct codes in the plan and are not interchangeable. Take each item's category from the package the plan publishes, not from the specialty name. - -`Claim.careTeam` and `Claim.diagnosis` do not grow. Both items point at `careTeamSequence` `[1]` and `diagnosisSequence` `[1]`. Only `procedure` grows, to two. - -## Supporting information - -Six entries, all category `INV`, all with the category taken from the wrong system. - -| Seq | Code | Meaning | Value | -| :---- | :---- | :---- | :---- | -| 1 | `MAND0408` | Clinical notes, history, admission notes | `valueAttachment`, `application/pdf` | -| 2 | `MAND0409` | Any investigations done | `valueAttachment`, `image/jpeg`, 261,752 base64 characters | -| 3 | `MAND0570` | Planned line of management | `valueAttachment`, `application/pdf` | -| 4 | `MAND0455` | CXR PA view or CECT chest abdomen and pelvis | `valueReference` to entry 6 | -| 5 | `MAND0409` | Any investigations done | `valueReference` to entry 18 | -| 6 | `MAND0408` | Clinical notes, history, admission notes | `valueReference` to entry 43 | - -`MAND0408` and `MAND0409` each appear twice, once as an attachment and once as a reference. Sequences run `1` to `6` without gaps, unlike the claim bundles. As in the first request, there is no admission-date or encounter-date entry. - -## The response - -`preauth/enhancement/enhancement_resp.txt`, 7,979 bytes, five entries, the same shape as any preauthorisation response. `outcome` is `complete`, `disposition` is `approved`, and the claim-level adjudication reason is `approved`. - -Two things about it will break naive code. - -**The items come back out of order.** `item[0]` has `itemSequence` `2` and `item[1]` has `itemSequence` `1`. The new line is adjudicated first, the carried-forward line second. Index the response by `itemSequence`, never by array position. - -| `itemSequence` | `eligible` | `eligpercent` | `eligquant` | status | -| :---- | :---- | :---- | :---- | :---- | -| 2 | `3600.0` | `100` | `1` | `Approved` | -| 1 | `2700.0` | `100` | `1` | `Approved` | - -The new item was requested at 8,500 and allowed at 3,600, yet the response is still `complete` with reason `approved` and no `processNote` explains the cut. A reduced amount does not force `outcome` to `partial`. Reconcile amounts yourself. - -**The two totals are computed on different bases.** - -| `total[].id` | Category code | Amount | Basis | -| :---- | :---- | :---- | :---- | -| `total` | `benefit` | `3600.0` | The increment, this enhancement only | -| `PMJAY-T` | `eligible` | `6300.0` | Cumulative, 2700 plus 3600 | - -Nothing in the handbook, the integration guide or the samples states this rule. It is visible only by arithmetic against the earlier approval. The claim response for the same case reports both cumulatively, so the basis is not even consistent across exchanges. Track the approved amount as a running figure of your own, reconcile `PMJAY-T` against it, and treat `benefit` on an enhancement as a delta. - -## Traps - -**Supporting-info category uses the code value set.** All six entries set `category.coding.system` to `…/CodeSystem/ndhm-supportinginfo-code` with code `INV`. The category belongs in `…/CodeSystem/ndhm-supportinginfo-category`. Every enhancement and first-request sample does this; only the query answer bundle gets the category system right. - -**The attached documents do not match the codes they are filed under.** `MAND0455`, the chest imaging code, references a Lipid Profile. `MAND0409`, "any investigations done", references a discharge summary. `MAND0408`, clinical notes, references a fasting blood sugar report. The attachments are shuffled relative to the original request too: the 261,752-character JPEG filed under `MAND0408` there is filed under `MAND0409` here. This is sandbox data. Do not reproduce it. - -**Inline attachments are base64-encoded twice.** All three `valueAttachment.data` values decode to another base64 string before they decode to the PDF or JPEG. The `DocumentReference` attachments in the same bundle are encoded once. The first request has the same defect. Encode once, and check the decoded bytes for a file signature on anything you receive. - -**There is no `preAuthRef` anywhere.** The response to the first approval does not issue one and the enhancement does not quote one. Nothing in either payload links this submission to the approval it extends. That is the same absence chapter 07 records on the response side, and it is why the case number and your own stored correlation IDs are the only reliable thread through a case. - -**Sequencing is enforced by the payer, not by you.** An enhancement is refused with a payer error in three cases: no approved record, a request still in progress, or the claim already raised. Surface those errors as they arrive rather than pre-guessing them. - -**The bundle timestamps in the archive are not chronological.** This enhancement is stamped `2026-02-26T16:13:49+05:30`, twenty-four minutes after the first request, but the approval it supposedly follows is stamped `21:39`. The sandbox capture is not a replay of a single ordered run. Do not infer the exchange order from `Bundle.timestamp`. diff --git a/site/docs/nhcx/v1/fhir-reference/preauthorisation-query-and-answer.md b/site/docs/nhcx/v1/fhir-reference/preauthorisation-query-and-answer.md deleted file mode 100644 index 7df40970d..000000000 --- a/site/docs/nhcx/v1/fhir-reference/preauthorisation-query-and-answer.md +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: Preauthorisation query and answer -sidebar_label: Preauthorisation query and answer -description: There is no query resource. The question travels as free text in an adjudication and the answer as a whole resubmitted bundle. -verification: unverified -source: "Sample FHIR bundles, `preauth/preauthresponse_with_query.txt`, `preauth/Query/preauth_queryUpdate_req.txt`, `preauth/Query/preauth_response_queryUpdate_App.txt`, `preauth/enhancement/enhancement_resp.txt`; NHCX PMJAY Integration Handbook §8.5.3, §12.1 to §12.3, Appendix C; NHCX-PMJAY-HMIS Integration Guide §8.4.4, §8.5.2, query flow table; NHCX-PMJAY-HMIS Integration Overview, query flow table; NHCX APIs to be called based on scenario, row 8" -sidebar_position: 11 ---- - -# Preauthorisation query and answer - -When a PMJAY payer wants more before it decides, it raises a query. The provider answers, and the payer then approves or rejects. This is the most common non-happy path in preauthorisation, and it is the exchange whose FHIR representation departs furthest from what the specifications describe. - -There is no query resource. The payer's question travels as free text inside a `ClaimResponse` adjudication, and the provider's answer travels as an entire resubmitted `Claim` bundle. Both directions reuse the preauthorisation endpoints: the query arrives on `/v1/preauth/on_submit` under workflow 24, and the answer goes back to `/v1/preauth/submit` under workflow 19, quoting the original reference with a new correlation ID. - -```mermaid -flowchart LR - A["Provider
preauth request
wf 12"] --> B["Payer
ClaimResponse
outcome partial
reason queried
wf 24"] - B --> C["Provider
whole Claim bundle again
answer in item.productOrService.text
wf 19"] - C --> D["Payer
ClaimResponse
outcome complete
reason approved"] - style A fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - style C fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - style B fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - style D fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 -``` - -## In short - -- There is no query resource. The question is free text inside a `ClaimResponse` adjudication. -- The answer is an entire resubmitted `Claim` bundle, on the preauthorisation endpoint under workflow 19. -- Two sources specify a `Task` and `CommunicationRequest` pair instead, which PMJAY does not use. -- The query text is a pipe-delimited audit trail in the preauthorisation, and a bare sentence on the claim side. - -## The query - -The queried response is an ordinary five-entry preauthorisation response bundle. `ClaimResponse.outcome` is `partial`, the claim-level `adjudication[0].reason.coding.code` is `queried`, `item[0]` status is `Queried`, `eligpercent` and `eligquant` are `0`, and both totals are `0`. `disposition` is the string `main query 2 ` with a trailing space. None of that tells you what the payer wants. - -The question itself is in `item[0].adjudication[reason].reason.coding[0].display`. That coding has no `system` and no `code`, only a `display`. Here is the real value, verbatim: - -``` -other Request acknowledged and accepted for further processing.|USER1000099~02/26/2026, 08:47 ~other~testing query with souvik~PPD-Trust|null|USER1000099~02/26/2026, 09:13 ~other~Testing query 2 with souvik~PPD-Trust -``` - -It is a two-level delimited audit log. Split on `|` first. - -| Segment | Value | Meaning | -| :---- | :---- | :---- | -| 0 | `other Request acknowledged and accepted for further processing.` | Preamble. A reason category, `other`, run together with a canned acknowledgement sentence, with no separator between them | -| 1 | `USER1000099~02/26/2026, 08:47 ~other~testing query with souvik~PPD-Trust` | First query | -| 2 | `null` | The answer slot for the first query, unfilled, as the literal four-character string `null` | -| 3 | `USER1000099~02/26/2026, 09:13 ~other~Testing query 2 with souvik~PPD-Trust` | Second query | - -After the preamble the segments alternate: query, answer, query, answer, and finally the decision. Now split a query segment on `~`. - -| Field | Value | Meaning | -| :---- | :---- | :---- | -| 0 | `USER1000099` | The payer desk operator's user ID | -| 1 | `02/26/2026, 08:47 ` | Timestamp, `MM/DD/YYYY`, a comma, `HH:MM`, and a trailing space | -| 2 | `other` | Query type, from the payer's own list | -| 3 | `testing query with souvik` | **The question. This is the only field a human needs.** | -| 4 | `PPD-Trust` | The adjudicating desk | - -Parsing rules. Split on `|` first, then on `~`, and never assume a fixed segment count, because the log grows with each exchange. Segment 0 is never a query. Treat the literal `null` as an empty answer. Trim every field, because the timestamps carry trailing spaces. Never put `~` or `|` in anything you send back, or you will corrupt the payer's log. - -The timestamps are unreliable. `ClaimResponse.created` on this bundle is `2026-02-26T21:15:00+05:30`, yet the two entries claim 08:47 and 09:13 on the same day, in American date order, with no timezone and no meridiem marker. Display them as the payer's own strings. Do not parse them into your timeline. - -The format is not stable across the corpus either. The claim-side query for the same case carries a bare sentence in the same field, with no delimiters at all. The delimited form appears in the preauthorisation query, and again in the replayed audit trails. Same payer, same sandbox run, two formats. A parser must tolerate a segment count of one. - -## Watching the log grow - -The string is cumulative and is replayed on every later response for the case. The enhancement approval carries the same field with two more segments appended, `…~PPD-Trust|Query response for Testing|Approved`. Segment 4 is the provider's answer text and segment 5 is the final decision, which confirms the alternating structure. It also gives you a free reconciliation: the answer you sent should reappear in the payer's log on the next response, and that is the only acknowledgement that your reply was read. - -## The answer - -The provider's answer is a whole preauthorisation bundle, resubmitted. It is not a delta, not a `Communication`, and not a `Task`. The sample carries 96 entries. - -| Entry | Resource | What it is for | -| :---- | :---- | :---- | -| 0 to 5 | `Claim`, `Patient`, two `Organization`, `Coverage`, `Practitioner` | The request core, identical in shape to the first submission | -| 6 to 30 | 25 resources headed by a `Composition` | ABDM `DischargeSummaryRecord`, "Discharge Summary for Dengue" | -| 31 to 55 | 25 resources headed by a `Composition` | ABDM `WellnessRecord`, "Wellness Report" | -| 56 to 67 | 12 resources headed by a `Composition`, including three `ChargeItem`, a `Medication` and an `Invoice` | ABDM `InvoiceRecord`, "Invoice" | -| 68 to 92 | 25 resources headed by a `Composition` | A second ABDM `WellnessRecord` | -| 93 | `Questionnaire` | The policy questionnaire | -| 94 | `QuestionnaireResponse` | Its answers | -| 95 | `Procedure` | The planned procedure | - -The `Claim` is unchanged where it matters. Same case number `VB26AA2600001`, same `use` of `preauthorization`, one item, `total` still 3300, and `Claim.related` absent. **The reply text is in `Claim.item[0].productOrService.text`**, where it is `Sample Message`. That field is a `CodeableConcept.text` sitting beside the package coding. It is the free-text label of a service, being used as a message channel. - -`productOrService.text` is populated on every preauthorisation item in the corpus, including first submissions, with values such as `Testing ABC` and `Query response for Testing`. So the field's presence does not mark a bundle as an answer. Only the workflow ID does. - -## Supporting information - -Eight entries. This is the only preauthorisation bundle in the corpus that carries the date categories, and it is the only one that gets the category system right on any entry. - -| Seq | Category | Code | Meaning | Value | -| :---- | :---- | :---- | :---- | :---- | -| 1 | `INV` | `MAND0408` | Clinical notes and admission notes | `valueReference` to entry 6 | -| 2 | `INV` | `MAND0455` | CXR PA view or CECT | `valueReference` to entry 31 | -| 3 | `INV` | `MAND0409` | Any investigations done | `valueReference` to entry 56 | -| 4 | `INV` | `MAND0570` | Planned line of management | `valueReference` to entry 68 | -| 5 | `OTH` | `EDT` | Encounter date and time | `valueString` `2026-02-22T00:00:00+00:00` | -| 6 | `ADMD` | `ADDD` | Admission date | `valueString` `2026-02-22T00:00:00+00:00` | -| 7 | `OTH` | `EDT` | Encounter date and time | `valueString` `2026-02-22T00:00:00+00:00` | -| 8 | `INF` | `ODN` | Other document | `valueReference` to the `Questionnaire` | - -Entries 1 to 4 take their category from `…/CodeSystem/ndhm-supportinginfo-code`, the same defect as every other request. Entries 5 to 7 take it from `…/CodeSystem/ndhm-supportinginfo-category`, correctly. Entry 8 takes its code from `…/ValueSet/ndhm-supportinginfo-code`, a ValueSet URL where a CodeSystem URL belongs. - -## Traps - -**Sequence 6 has `category` and `code` swapped, and both are drawn from the category system.** `code` holds `ADDD`, "Admission Date - Discharge Date"; `category` holds `ADMD`, "Admission Date". Both cite `…/CodeSystem/ndhm-supportinginfo-category`, while the handbook puts `ADDD` in `code` under category `ONS`. Three shapes for one date. Read defensively: check both `category` and `code` before concluding the admission date is missing. - -**Sequences 5 and 7 are byte-identical duplicates.** Same category, same code, same value. Deduplicate on read. - -**The date strings carry the wrong offset.** `Claim.created` is `2026-02-26T13:13:55+05:30`, but the supporting-info dates are `2026-02-22T00:00:00+00:00`. The same wall-clock convention with a UTC offset. Chapter 01's third rule and the handbook both say `+05:30` is required and UTC fails validation. Send `+05:30`. - -**Sequence 8 references the blank `Questionnaire`, not the `QuestionnaireResponse`.** The reference is `https://payer.gov.in/policy/questionnaire/119/0`, the `fullUrl` of entry 93. Entry 94, the `QuestionnaireResponse`, is in the bundle but nothing points at it, so the payer receives the form rather than the answers. Both are empty shells anyway: the `Questionnaire` has `item` set to `null`, the title `Questioneris`, and an `id` that is the JSON number `0` rather than a string, which is invalid FHIR. Send the response, and fill it in. - -**There are no query remarks under `NMI` and `CQD`.** The provider flow chapter states that a query answer adds the overall case remarks as a `valueString` under category `NMI` with code `CQD`. An answer without it is rejected. This answer, which the payer accepted and then approved, carries no such entry. The remark went into `productOrService.text` instead. Send both until a payer tells you otherwise. - -**Two capture artefacts, not rules.** The answer is stamped `2026-02-26T13:14:14+05:30` while the query it replies to is stamped `21:15`, so the archive is a set of shape captures rather than an ordered replay. And the referenced documents do not match their codes: `MAND0408` points at a discharge summary, `MAND0455` at a wellness report, `MAND0409` at an invoice. - -## The exchange that was specified instead - -Two sources specify a completely different mechanism for exactly this purpose. - -The NHCX protocol layer and the PMJAY handbook section 12 both define a `Task` and `CommunicationRequest` pair. The payer builds a collection bundle whose `Task` carries `intent` `proposal` and `code` `poll` from `http://terminology.hl7.org/CodeSystem/financialtaskcode`. It also carries a `reasonCode` from `…/CodeSystem/ndhm-reason-code`: `tatquery`, `grievance`, `walletupdate`, `policychange`, `additionalinfo` or `claimArbitration`. Its `input[0].valueReference` points at a `Communication` resource holding the message. The provider acknowledges on `/v1/communication/on_request`. The question is a first-class resource with a status, a category, a topic and a priority. - -PMJAY does not use it, and the integration guide says so twice in the same words: - -> The PMJAY payer does not use the Communication API for queries. Instead, a query is raised by the payer with the relevant workflow ID for preauth/claim which has to be responded to by the provider with the relevant workflow ID. - -The handbook's own section 12 table concedes the point. It describes `additionalinfo` as being for information "not covered by the original ClaimResponse query mechanism". - -So the specified exchange has no samples and the sampled exchange has no specification beyond one element table and a note. Build the string parser for PMJAY, build the `Task` and `Communication` handler for the general network where chapter 15 covers it, and expect neither to help with the other. diff --git a/site/docs/nhcx/v1/fhir-reference/preauthorisation-request.md b/site/docs/nhcx/v1/fhir-reference/preauthorisation-request.md deleted file mode 100644 index b8b9679aa..000000000 --- a/site/docs/nhcx/v1/fhir-reference/preauthorisation-request.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Preauthorisation request -sidebar_label: Preauthorisation request -description: The first bundle carrying clinical content, its 31 entries, and what the live sandbox proved about the sample's oddities. -verification: unverified -source: "Sample FHIR bundles, `preauth/preauth_request.txt`; NHCX PMJAY Integration Handbook §8.4, Appendix A; NHCX-PMJAY-HMIS Integration Guide §8.4; NHCX APIs to be called based on scenario; Implementation Guide for Adoption of FHIR in ABDM and NHCX; NHCX Requests and Responses, value sets" -sidebar_position: 8 ---- - -# Preauthorisation request - -The preauthorisation request is the first bundle in the exchange that carries clinical content. It asks the payer to approve a treatment before it is given. The provider posts it to `/v1/preauth/submit` under workflow 12, and the payer answers asynchronously on `/v1/preauth/on_submit`. The payload is one collection bundle whose spine is a `Claim` with `use` set to `preauthorization`. Chapter 07 covers the answer, chapter 08 the enhancement, chapter 09 the query round trip. - -## In short - -- The first bundle carrying clinical content, with a `Claim` of `use = preauthorization` as its spine. -- The sample carries 31 entries, two of which are the request proper and the rest the resources it points at. -- Two reference styles coexist in one bundle, and a parser has to handle both. -- A live run in September 2026 settled several open questions: the sample's oddities are tolerated, not required. - -## The bundle - -The sample bundle carries 31 entries in this order. Two of them are the request proper; the rest are the resources the `Claim` points at, plus two complete ABDM clinical documents flattened into the same bundle. - -| Entry | Resource | `fullUrl` | What it is for | -| :---- | :---- | :---- | :---- | -| 0 | `Claim` | absolute | The request itself | -| 1 | `Patient` | absolute | Beneficiary, PMJAY ID and jurisdictional health number | -| 2 | `Organization` | absolute | Provider, HFR ID as `NPI` | -| 3 | `Organization` | absolute | Payer, registry ID as `NIIP` | -| 4 | `Coverage` | absolute | The policy | -| 5 | `Practitioner` | absolute | The treating doctor, referenced from `careTeam` | -| 6 to 17 | `Composition`, `Organization`, `Practitioner`, `Encounter`, `Appointment`, `Patient`, four `Observation`, `DiagnosticReport`, `DocumentReference` | `urn:uuid:` | One ABDM `DiagnosticReportRecord`, titled "Lipid Profile" | -| 18 to 29 | the same twelve resource types | `urn:uuid:` | A second `DiagnosticReportRecord`, titled "Haemoglobin Estimation" | -| 30 | `Procedure` | absolute | The planned procedure, referenced from `Claim.procedure` | - -Two reference styles coexist in one bundle. The request resources use absolute URLs under `https://payer.nha.gov.in/preauthorization/v1/preauth/submit/…`. The embedded documents use `urn:uuid:`. Both resolve; a parser has to handle both. - -## The fields that matter - -| Path | Value in the sample | -| :---- | :---- | -| `Claim.identifier[0].type.coding` | system `…/CodeSystem/ndhm-identifier-type-code`, code `CLN`, "Claim number" | -| `Claim.identifier[0].system` | `https://hcx.pmjay.gov.in/v1/preauthorization` | -| `Claim.identifier[0].value` | `VB26AA2600001`, the case number, also the bundle identifier | -| `Claim.status` | `active` | -| `Claim.type.coding` | code `737481003`, "Inpatient care management (procedure)" | -| `Claim.use` | `preauthorization` | -| `Claim.created` | `2026-02-26T15:49:36+05:30` | -| `Claim.priority.coding` | system `http://terminology.hl7.org/CodeSystem/processpriority`, code `normal` | -| `Claim.insurance[0]` | `sequence` 1, `focal` true, `coverage` reference | -| `Claim.total.value` | `3300`, with no `currency` | - -The item is one line and it is where most rejections start. - -| Path | Value | | -| :--------------------------------------------------------------------- | :--------------------------------------------------------------------- | --- | -| `item[0].sequence` | `1` | | -| `item[0].careTeamSequence`, `.diagnosisSequence`, `.procedureSequence` | `[1]` each | | -| `item[0].category.coding` | system `https://payer.pmjay.nha.gov.in`, code `MP`, "General medicine" | | -| `item[0].productOrService.coding` | system `http://snomed.info/sct`, code `MG0111A`, "Pleural Effusion" | | -| `item[0].programCode` | system `…/CodeSystem/ndhm-program-code`, code `AB-PMJAY` | | -| `item[0].modifier.coding` | system `https://payer.pmjay.nha.gov.in`, code `STRAT006b`, "HDU" | | -| `item[0].servicedPeriod` | `2026-02-22` to `2026-02-27` | | -| `item[0].quantity.value`, `.unitPrice.value`, `.net.value` | `1`, `3300`, `3300` | | -| `item[0].factor` | `0.5` | | - -Note the arithmetic. `net` equals `unitPrice` multiplied by `quantity` with `factor` ignored. `0.5` is carried on every sample item and never applied. Send it because the samples send it, but do not compute with it, and do not expect the payer to. - -Diagnosis is one entry: `A97`, "Dengue", in `https://payer.pmjay.nha.gov.in`, with `type` given as SNOMED `148006` "Preliminary diagnosis". The handbook's tables ask for ICD-10 at `http://hl7.org/fhir/sid/icd-10` and for `admitting` or `clinical` as the type. No sample uses either. Follow the payer. - -`careTeam[0]` carries only `sequence` and `provider`. The `role` and `qualification` elements the handbook documents are absent from every preauthorisation sample. `billablePeriod` is absent too, although chapter 01's tenth rule and the handbook both describe it; the admission and discharge window appears only as `item.servicedPeriod` and `Coverage.period`. - -## Supporting information - -The request carries four entries, all in category `INV`. - -| Seq | Category | Code | Meaning | Value | -| :---- | :---- | :---- | :---- | :---- | -| 1 | `INV` | `MAND0408` | Clinical notes, history, admission notes | `valueAttachment`, `image/jpeg`, 261,752 base64 characters | -| 2 | `INV` | `MAND0455` | CXR PA view or CECT chest abdomen and pelvis | `valueAttachment`, `application/pdf` | -| 3 | `INV` | `MAND0409` | Any investigations done | `valueReference` to entry 6, the "Lipid Profile" `Composition` | -| 4 | `INV` | `MAND0570` | Planned line of management | `valueReference` to entry 18, the "Haemoglobin Estimation" `Composition` | - -The `MAND…` codes come from `https://payer.pmjay.nha.gov.in` and are the document checklist the eligibility call returns with purpose `auth-requirements`. Send the code and the display exactly as the checklist gave them. - -## What the sample shows - -`preauth/preauth_request.txt`, 374,611 bytes, 31 entries, case `VB26AA2600001`, `Bundle.timestamp` `2026-02-26T15:49:37+05:30`. It is a single-item inpatient request for 3,300 with two attached images and two embedded structured reports. - -It is unrepresentative in one important way. **It carries no admission-date or encounter-date supporting information at all.** The flow chapter tells you to send registration date as `EDT` under category `OTH`, and admission date as `ADDD` under category `ONS`. The handbook agrees. This sample sends neither. The only sample in the whole preauthorisation family that does carry them is the query answer, described in chapter 09. Treat their absence here as a defect in the capture, not as permission to omit them. - -## Verified live - -On 5 and 6 September 2026 the reference request under `apps/reference/provider/preauth/request` was sent to the SHA HP sandbox from a second hospital, and it settles several of the open questions above. The bundle was refused until every `item`, `procedure` and `supportingInfo` entry carried an element id, and the `Claim` carried its number as `id` (`PAYR-1027`). It was then refused until the `Practitioner` carried an `HPIN` identifier (`PAYR-1083`). It then passed validation, and was stopped only by the scheme's one-live-preauthorisation rule (`PAYR-1238`). Along the way the SHA accepted all of these: - -- `factor` 1 in place of the sample's `0.5`. -- The category `MG` under `…/ndhm-benefit-category`, in place of the sample's `MP` under the payer's own system. -- The package under `…/ndhm-procedure-code` rather than SNOMED. -- An ICD-10 diagnosis with `admitting` as its type. -- A `careTeam` with `role` and a SNOMED `qualification`. -- A `billablePeriod`, and `ADDD` and `EDT` dates. -- A request with none of the four `MAND…` documents. Treat the sample's oddities as tolerated, not required. Building a Provider 10 has the whole run. - -## Traps - -**Supporting-info category is populated from the code value set.** Every one of the four entries sets `category.coding.system` to `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code` with code `INV`. The category belongs in `…/CodeSystem/ndhm-supportinginfo-category`. The value set that is right for `code` has been used for `category`. The date entries in the query answer bundle get the category system right, so both forms exist in the same corpus. Send what the payer's validator accepts, and expect to see the wrong-system form in anything you receive. - -**The package code sits in two systems inside one bundle.** `Claim.item[0].productOrService.coding.system` is `http://snomed.info/sct` for code `MG0111A`. The `Procedure` at entry 30 gives the same code `MG0111A` with the same display in `https://payer.pmjay.nha.gov.in`. `MG0111A` is not a SNOMED concept in either place. The eligibility request binds the same code to the payer system as well, so `http://snomed.info/sct` in `productOrService` is the outlier and it is the one every preauthorisation and claim sample uses. Mirror it. - -**`Claim.use` has three valid FHIR values and a teaching deck names none of them.** The deck offers `claim | pre-auth | pre-det`. The real R4 codes are `claim`, `preauthorization` and `predetermination`, and the samples use `preauthorization` and `claim`. `pre-auth` and `pre-det` are not codes at all. Anyone treating the slide as normative emits payloads the gateway rejects. - -**`Claim.type` binds to a ValueSet URL.** The system is `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-claim-type`, not a `CodeSystem` URL. A strict validator objects. Every sample does it, so send it. - -**A supporting-info `valueReference` points at a `Composition`, not a `DocumentReference`.** Chapter 01's seventh rule says documents are `DocumentReference`s. Here entries 3 and 4 reference the `Composition` at the head of an embedded ABDM record, and the `DocumentReference` inside that record is reached only through the `Composition`. Follow the reference, then walk the document. - -**The document titles do not match the codes they are filed under.** Code `MAND0409`, "any investigations done", references a Lipid Profile. Code `MAND0570`, "Planned line of management", references a Haemoglobin Estimation. This is sandbox test data, not a rule. Do not copy the mismatch. - -**Inline attachments are base64-encoded twice.** Both `valueAttachment.data` values in this bundle decode to another base64 string, which then decodes to the real JPEG and the real PDF. The `DocumentReference` attachments inside the two embedded documents, in the same bundle, are encoded once and decode straight to `%PDF-1.4`. So one bundle carries two encodings of the same kind of payload. A payer that decodes once renders a blank document. Encode once, and when you receive an attachment, sniff the decoded bytes for a file signature before trusting it. - -**`Bundle.meta.lastUpdated` is frozen** at `2025-11-11T15:09:41.516+05:30` on this and every other provider request bundle, while `Bundle.timestamp` holds the real submission time. Read `timestamp`. diff --git a/site/docs/nhcx/v1/fhir-reference/preauthorisation-response.md b/site/docs/nhcx/v1/fhir-reference/preauthorisation-response.md deleted file mode 100644 index f86458cbf..000000000 --- a/site/docs/nhcx/v1/fhir-reference/preauthorisation-response.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Preauthorisation response -sidebar_label: Preauthorisation response -description: The payer's decision as a ClaimResponse, the three elements every sample is missing, and why the beneficiary comes back changed. -verification: unverified -source: "Sample FHIR bundles, `preauth/Query/preauth_response_queryUpdate_App.txt`, `preauth/preauth_request.txt`; NHCX PMJAY Integration Handbook §8.5.1 to §8.5.4, Appendix C.1, Appendix D; NHCX-PMJAY-HMIS Integration Guide §8.4; NHCX Requests and Responses, value sets" -sidebar_position: 9 ---- - -# Preauthorisation response - -The payer answers a preauthorisation asynchronously on the provider's `/v1/preauth/on_submit` callback. The payload is a collection bundle whose spine is a `ClaimResponse` carrying the same case number as the request. There are four possible answers: approved, partially approved, queried and rejected. Only the approved and the queried forms have real samples; the queried one is chapter 09. This chapter covers the approval, and documents the other two from specification. - -## In short - -- The payer's decision as a `ClaimResponse` carrying the same case number as the request. -- Three elements the handbook documents are absent from every sample, including `preAuthRef`. -- The case number in `identifier[0].value` is what actually travels forward to the claim. -- The beneficiary comes back as a different person. Do not overwrite your patient record from a response. - -## The bundle - -Five entries, in this order, and the response bundle is small because the payer echoes nothing clinical back. - -| Entry | Resource | What it is for | -| :---- | :---- | :---- | -| 0 | `ClaimResponse` | The decision | -| 1 | `Patient` | Beneficiary, PMJAY ID only | -| 2 | `Organization` | Payer, `NIIP` `1518`, "SHA HP" | -| 3 | `Organization` | Provider, `NPI` `1652`, "CITY SUPERSPECIALITY HOSPITAL" | -| 4 | `Coverage` | The policy, with the renewal code in `class` | - -`Bundle.id` is `PreauthorizationResponseDocument-VB26AA2600001`. The bundle and every resource in it carry `meta.tag` `SUBSETTED`, "Resource encoded in summary mode", from `http://terminology.hl7.org/CodeSystem/v3-ObservationValue`. That tag is on every payer-generated bundle in the corpus. Do not read it as an error; it is how the payer marks a projection of its own record. - -## The fields that matter - -| Path | Value in the approval sample | -| :---- | :---- | -| `ClaimResponse.identifier[0]` | type `CLN`, system `https://hcx.pmjay.gov.in/v1/preauthorization`, value `VB26AA2600001` | -| `ClaimResponse.status` | `active` | -| `ClaimResponse.use` | `preauthorization`, mirroring the request | -| `ClaimResponse.created` | `2026-02-26T21:39:04+05:30` | -| `ClaimResponse.insurer` | reference to the payer `Organization` | -| `ClaimResponse.requestor` | reference to the provider `Organization` | -| `ClaimResponse.outcome` | `complete` | -| `ClaimResponse.disposition` | `approved by Sayantan` | -| `ClaimResponse.payeeType.coding` | system `http://terminology.hl7.org/CodeSystem/payeetype`, code `provider` | - -Three elements the handbook documents are absent from every sample response. There is no `ClaimResponse.request` pointing back at the `Claim`. There is no `ClaimResponse.type`. Most consequentially, **there is no `preAuthRef`**. The flow chapter says `preAuthRef` is the reference to quote on the later claim. No PMJAY response carries one. The case number in `identifier[0].value` is what actually travels forward, and it is the same value in the request, the response, the enhancement and the claim. - -`disposition` is a free-text sentence with an operator's first name in it. It is an audit note, not a status. Never parse it. - -## Adjudication - -Adjudication appears at two levels and you need both. - -At claim level, `ClaimResponse.adjudication[0]` has `category.coding.code` `status` and `reason.coding.code` `approved`. Neither coding carries a `system`. This is the field that tells approved from queried from cancelled. - -At item level, `ClaimResponse.item[0]` has `itemSequence` 1, matching `Claim.item[0].sequence`, and five adjudication entries. Every one of them binds its category to `https://hl7.org/fhir/R4/valueset-adjudication.html`, an HTML documentation page used as a code system URL. - -| Category code | Element used | Value | -| :---- | :---- | :---- | -| `eligible` | `amount.value` | `2700.0` | -| `reason` | `reason.coding.display` | `other d` | -| `eligpercent` | `value` | `100` | -| `eligquant` | `value` | `1` | -| `status` | `reason.coding.code` | `Approved` | - -Note the case. The claim-level reason code is lower case `approved`; the item-level status code is capitalised `Approved`. Compare case-insensitively. - -The `id` on the item is `Item/Item/1`, a doubled prefix. It is cosmetic, but it will surprise anyone keying on it. - -## Totals - -`ClaimResponse.total` is an array of two, and the two entries are distinguished by an `id`, not by their category system. - -| `total[].id` | Category code | Amount | -| :---- | :---- | :---- | -| `total` | `benefit` | `2700.0` | -| `PMJAY-T` | `eligible` | `2700.0` | - -The `benefit` entry carries the adjudication ValueSet URL as its system. The `PMJAY-T` entry carries no system at all. Neither carries a `currency`. - -On a first approval the two agree, so nothing forces you to notice the difference. They stop agreeing on an enhancement, where `benefit` becomes the increment and `PMJAY-T eligible` stays cumulative. Chapter 08 works that through. Key your reconciliation on `total[].id`, not on the category code, and decide now which basis your ledger uses, because no source states a rule. - -## Reading the answer - -`outcome` alone is ambiguous. `complete` means the payer finished processing, which covers both approval and rejection. Read `outcome` together with `adjudication[0].reason.coding.code`. - -| `outcome` | Claim-level reason | Meaning | Workflow | -| :---- | :---- | :---- | :---- | -| `complete` | `approved` | Approved in full | 21 | -| `partial` | `approved` | Approved at a reduced amount, reason in `processNote` | 21 | -| `partial` | `queried` | The payer wants more; the case stays open | 24 | -| `complete` | `cancelled` | Rejected | 23 | - -The handbook contradicts itself here. Section 8.5.4 and its accompanying note say a rejection is `outcome = complete` with adjudication reason `cancelled`. Appendix C.1 instead maps `outcome = error` to the internal status REJECTED. The narrative form is the one the note argues for explicitly, and the one the workflow sheet supports. Treat `complete` plus `cancelled` as the rejection, and `error` as a gateway or validation failure rather than an adjudication result. Handle both defensively. - -## What the samples show - -`preauth/Query/preauth_response_queryUpdate_App.txt`, 6,846 bytes, 5 entries. The approval. `outcome` `complete`, claim-level reason `approved`, `total[benefit]` 2700.0, item `eligpercent` 100 and `eligquant` 1. The requested amount was 3,300, so the payer approved 2,700 without marking the response `partial` and without a `processNote` explaining the reduction. Do not expect `partial` to be set whenever a number is cut. - -`preauth/enhancement/enhancement_resp.txt` is the other approval, covered in chapter 08. `preauth/preauthresponse_with_query.txt` is the query, covered in chapter 09. - -**There is no rejected preauthorisation sample, and no partially approved one.** The handbook specifies both field by field. A partial approval adds `copay` and `benefit` adjudications, a `noteNumber` and a `processNote` with the reduction explained, plus a `preAuthRef` for the reduced amount. A rejection sets `outcome` `complete`, claim-level reason `cancelled`, and a human-readable `disposition`. Neither has been observed in a payload. Build to the specification, log what actually arrives, and be ready for the shapes to differ. - -## Answer early, decide later - -A payer that stays silent until a person decides loses the conversation. NHCX -redelivers a submission it has had no response to, then drops it and retires -the correlation id; the verdict is refused with `NHCX-1010`, *no data with -given correlation id for call back request*. Both live payers answer twice on -one correlation: a `ClaimResponse` with `outcome: queued` and a disposition -saying the request is with an adjudicator, and then the decision. A provider -system must therefore treat a queued answer as an acknowledgement, not as the -one answer it will accept. - -## Traps - -**Provider identity is not consistent across one transaction.** The request names the provider `Organization` with `NPI` `IN1910000151` and the name "Usha Kiron". Both preauthorisation responses for that same case use a bare numeric `NPI` `1652` and the name "CITY SUPERSPECIALITY HOSPITAL". The claim and payment bundles for the case use `IN1910000151` with the second name. So three combinations of identifier and name for one hospital in one case. Match a response to a request on the case number in `identifier[0].value`, never on the provider identifier or the organisation name. - -**The `Coverage` identifier system changes direction.** The request puts the policy `PMJAY/HP/S/G` under `https://payer.nha.gov.in`; the response puts it under `https://payer.pmjay.gov.in`. The response also adds `Coverage.class` with the renewal code `PMJAY/HP/S/2024/R2` typed `XV`, which the request never sends. - -**The beneficiary comes back as a different person.** The request describes a male born 2004-09-18 with one name. The response describes the same PMJAY ID `MD5SLS4X5` with a different name, `gender` `other`, and birth date 2002-01-01. Chapter 03 works through the full three-way divergence. Do not overwrite your patient record from a response. - -**The adjudication category system is a web page.** `https://hl7.org/fhir/R4/valueset-adjudication.html` is documentation, and it is a ValueSet page used where a CodeSystem URL belongs. The correct system is `http://terminology.hl7.org/CodeSystem/adjudication`. Match on the code and ignore the system. diff --git a/site/docs/nhcx/v1/fhir-reference/predetermination-status-and-search.md b/site/docs/nhcx/v1/fhir-reference/predetermination-status-and-search.md deleted file mode 100644 index cb955b6d2..000000000 --- a/site/docs/nhcx/v1/fhir-reference/predetermination-status-and-search.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Predetermination, status and search -sidebar_label: Predetermination, status and search -description: Three exchanges defined by the specification and never observed, documented as far as the specification goes and no further. -verification: unverified -source: NHCX Technical Specifications, API structure table; Implementation Guide for Adoption of FHIR in ABDM and NHCX, use case rows 5 and 6; NHCX Requests and Responses for UseCases, Value sets, Search and Status sheets; Standards for NHCX, page 38; NHCX Usecases; Domain Specifications, e-objects; AWS Sandbox NHCX Use Case Postman Collection -sidebar_position: 18 ---- - -# Predetermination, status and search - -Three exchanges are defined by the specification and have never been observed. There is no sample bundle for any of them. The sandbox Postman collection lists all six of their endpoints. But the eight sandbox entries covering predetermination, communication, status and search all carry the same recycled placeholder ciphertext, so decrypting one tells you nothing about the domain payload inside. This chapter documents what the specification says and stops there. - -## In short - -- Three exchanges defined by the specification and never observed in a payload. -- The sandbox entries for all of them carry the same recycled placeholder ciphertext. -- Predetermination reuses `Claim` and `ClaimResponse`; only `Claim.use` changes. -- The teaching deck's enumeration of `Claim.use` is wrong, and its values are rejected. - -## Predetermination - -Predetermination asks the payer what it would pay for a proposed treatment, without committing the provider to deliver it and without reserving a benefit. It sits earlier than preauthorisation in the same lifecycle. - -| Endpoint | Direction | Bundle | -| :---- | :---- | :---- | -| `POST /v1/predetermination/submit` | Provider to gateway to payer | `ClaimBundle` | -| `POST /v1/predetermination/on_submit` | Payer to gateway to provider | `ClaimResponseBundle` | - -The bundles are the ones chapters 10 and 11 describe. Predetermination reuses `Claim` and `ClaimResponse` exactly as preauthorisation and claim do. Only `Claim.use` changes, which is the eleventh rule in chapter 01 applied to a third value. - -| `Claim.use` | Exchange | -| :---- | :---- | -| `predetermination` | Predetermination | -| `preauthorization` | Preauthorisation, in every sample | -| `claim` | Claim, in every sample | - -**The teaching deck's enumeration is wrong.** The Standards for NHCX deck shows `"use" : "claim | pre-auth | pre-det"`. Neither `pre-auth` nor `pre-det` is a valid FHIR R4 code. The real value set is `claim`, `preauthorization`, `predetermination`, and the samples confirm the first two. Anyone who treats the slide as normative emits payloads the payer rejects. Send `predetermination`. - -The Domain Specifications page adds that `Claim` and `ClaimResponse` serve predetermination "in future", and the NHCX use case list says only that a payer application will store the request and respond. No payer in the mirror is recorded as having implemented it. Confirm support with the payer before building it, and expect the preauthorisation path to be the one that actually runs. - -## Status - -Status is a protocol operation, not a FHIR one. A sender asks the gateway what became of a message it already sent. - -| Endpoint | Direction | Payload | -| :---- | :---- | :---- | -| `POST /v1/status` | Any participant to gateway | Empty string | -| `POST /v1/on_status` | Gateway to the asking participant | Status reported in the protected header | - -The specification is explicit that the payload must be an empty string. There is no bundle, no `Task`, no resource of any kind. Everything travels in the JWE protected header. `x-hcx-correlation_id` must be the `x-hcx-api_call_id` of the message whose status you are checking, which is the only field that links the two. The callback returns `x-hcx-status` `request.dispatched`, and `x-hcx-error_details` where the original message failed. - -Two naming conventions appear. The technical specifications table lists the pair as `/hcx/status` and `/NHCX/on_status`. The sandbox Postman collection uses `https://apisbx.abdm.gov.in/hcx/v1/status` and `/hcx/v1/on_status`. Build against the Postman form, which is the one the sandbox actually serves, and keep the path configurable. - -Because status carries no FHIR, there is nothing in this chapter for a bundle builder. It belongs in the reference only so that no one goes looking for a `Task` shape that does not exist. - -## Search - -Search is not a provider exchange. It lets an authorised entity, named in the specification as NHA or IRDAI, ask a payer for the claim documents behind a case number. The flow is NHA to gateway to payer, and back. - -| Endpoint | Direction | Bundle | -| :---- | :---- | :---- | -| `POST /v1/search/submit` | Authorised entity to gateway to payer | `Task` bundle | -| `POST /v1/search/on_submit` | Payer to gateway to entity | `Task` bundle with `ClaimResponse`s | - -The request is a `Task` with `status` `requested`, `basedOn` carrying the request reference, and one or more inputs from the standard input-type value set. The response is a `Task` whose `output` references the matching `ClaimResponse` resources in the same bundle, resolved the same way as a reprocess or cancel answer. - -| Input type | Meaning | -| :---- | :---- | -| `ClaimNumber` | The case number | -| `InitimationNumber` | The preauthorisation or claim intimation number, spelled as shown | -| `PolicyNumber` | The member's policy | -| `ProductNumber` | The benefit product | -| `PayerId`, `ProviderId` | The two participants | -| `FromDate`, `ToDate` | The search window | -| `FinanceYear` | Policy or financial year | -| `ServiceCode` | A benefit or service code | - -**The task code for search is given three ways.** The NHCX value set defines `search` as the code used to search claim responses for given inputs. The Search sheet in the same document says the request carries `code` `status` and the callback carries `code` `poll`. An earlier draft of this reference said `search` on the request and `poll` on the answer. Nothing has been observed, so none of the three can be confirmed. If you implement search, agree the code with the payer in writing first. - -`response.partial` is a valid status on `/v1/search/on_submit`, so a search may be answered across several callbacks against one correlation ID. diff --git a/site/docs/nhcx/v1/fhir-reference/sample-bundles.md b/site/docs/nhcx/v1/fhir-reference/sample-bundles.md deleted file mode 100644 index 6dacab9b7..000000000 --- a/site/docs/nhcx/v1/fhir-reference/sample-bundles.md +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Sample bundles -sidebar_label: Sample bundles -description: "The twenty-two real payloads every chapter here is built on: where they are, what each is, and the eight gaps they leave." -verification: unverified -source: Sample FHIR bundles, PMJAY extract, 22 files; AWS Sandbox NHCX use case Postman collection; NHCX PMJAY Integration Handbook; NHCX FAQs; NHCX portal mirror fetched 1 September 2026 -sidebar_position: 20 ---- - -# Sample bundles - -Twenty-two complete FHIR bundles exist. They are the only real payloads in the published material, and every chapter in this section is built on them. This chapter says where they are, what each one is, and what they do not cover. - -## In short - -- Twenty-two complete FHIR bundles are the only real payloads in the published material. -- Use the extracted files: nineteen of the markdown copies are truncated mid-token at four thousand characters. -- Eight exchange directions have no sample at all, concentrated in what an integrator reaches last. -- A second reference set in this repository is written to be sent rather than read, and all of it validates. - -## Where they are - -``` -NHCX-site/doc/hmisdocuments/ - Sample FHIR bundles_extracted/FHIR_bundles_PMJAY_ext/ -``` - -Use those extracted files. A second copy exists in the same folder, as a markdown document with the bundles in fenced blocks. Nineteen of the twenty-two are truncated there at exactly four thousand characters, stopping mid-token so they will not parse. The only reliable thing in that copy is a machine-generated inventory of entries per file. - -## One transaction, end to end - -All twenty-two come from a single sandbox run, which is what makes them useful. They are not twenty-two unrelated examples but one patient's journey, so the identifiers thread through the whole set and you can watch a number appear in a preauthorisation and come back in a payment. - -| | | -| :---- | :---- | -| Patient | PMJAY ID `MD5SLS4X5` | -| Payer | SHA HP, registry ID `1518` | -| Policy | `PMJAY/HP/S/G` | -| Preauthorisation number | `VB26AA2600001` | -| Claim number | `EO26AA2700001` | -| Dates | 26 February to 3 March 2026 | - -Every bundle is `type: collection` and parses cleanly. Free-text values in the payer's own fields, such as a disposition reading `approved by Sayantan`, confirm these are hand-run transactions captured as they happened rather than curated specification examples. - -## The twenty-two - -Sizes matter here. Six of these files are enormous, almost entirely because of base64 attachments and embedded clinical documents, and a naive read of one will fill your terminal or your context. - -### Coverage eligibility - -| File | Size | What it is | -| :---- | :---- | :---- | -| `coverageeligibility/coveragerequest_validation.txt` | 7 KB | Request, purpose `validation` | -| `coverageeligibility/coveragerequest_benefits.txt` | 7 KB | Request, purpose `benefits` | -| `coverageeligibility/coveragerequest_auth-requirement.txt` | 7 KB | Request, purpose `auth-requirements` | -| `coverageeligibility/coverageresponse_validation.txt` | 16 KB | Response, in force, with money | -| `coverageeligibility/coverageresponse_benefits.txt` | 16 KB | Response, package excluded | -| `coverageeligibility/coverageresponse_auth-requirement.txt` | 16 KB | Response, identical item to the one above | - -The three requests differ only in the purpose and the timestamp. Two of the three responses are not actually differentiated: their response items are the same. - -### Insurance plan - -| File | Size | What it is | -| :---- | :---- | :---- | -| `insuranceplan/insuranceplan_request.txt` | 1 KB | A single Task | -| `insuranceplan/insuranceplan_response.txt` | 21 MB | One plan, one organisation, 2,215 questionnaires | - -The response is the largest artefact in the set by three orders of magnitude. Extract the first entry and one or two questionnaires; do not open it whole. - -### Preauthorisation - -| File | Size | What it is | -| :---- | :---- | :---- | -| `preauth/preauth_request.txt` | 375 KB | The request, 31 entries | -| `preauth/preauthresponse_with_query.txt` | 7 KB | The payer's query | -| `preauth/Query/preauth_queryUpdate_req.txt` | 233 KB | The provider's answer, 96 entries | -| `preauth/Query/preauth_response_queryUpdate_App.txt` | 7 KB | Approval after the query | -| `preauth/enhancement/enhancement_req.txt` | 469 KB | Enhancement, 54 entries | -| `preauth/enhancement/enhancement_resp.txt` | 8 KB | Enhancement approved | -| `preauth/cancel/preauth_cancel_req.txt` | 3 KB | Cancellation request | -| `preauth/cancel/preauth_cancel_response.txt` | 7 KB | Cancellation response | - -The query answer at 96 entries is the richest bundle in the set and the best single illustration of how much clinical evidence a real submission carries. - -### Claim - -| File | Size | What it is | -| :---- | :---- | :---- | -| `claim/claim_Request.txt` | 386 KB | The claim, 44 entries | -| `claim/claimresponse_withQuery.txt` | 7 KB | The payer's query | -| `claim/claim_queryUpdate_req.txt` | 376 KB | The provider's answer | -| `claim/claim_queryUpdate_response.txt` | 7 KB | Final adjudication with a deduction | - -### Payment - -| File | Size | What it is | -| :---- | :---- | :---- | -| `paymentNotice/payment_notice.txt` | 5 KB | Notice with the transaction reference | -| `paymentNotice/paymentNotice_ack.txt` | 3 KB | The provider's acknowledgement | - -The payment reconciles exactly against the claim response, and that arithmetic is worth checking by hand once: the adjudicated amount equals the net paid plus the tax deducted. - -## The reference set - -Beside NHA's twenty-two there is a second set, written to be sent rather than read. Fourteen bundles under `apps/reference/provider` in this repository, one per exchange the provider side sends. Each carries a `bundle.log` from the HL7 validator against the NRCeS package, ndhm.in 6.5.0, and all pass. - -``` -apps/reference/provider/ - coverage/{discovery,validation,benefits,authrequirements}/bundle.json - insurance/bundle.json - preauth/{request,enhancement,queryupdate,cancel}/bundle.json - claim/{request,queryupdate,release,reprocess}/bundle.json - payment/notice-ack/bundle.json -``` - -They differ from NHA's samples on purpose. Every entry hangs off `https://nhcx.abdm.gov.in//`, and there are no embedded clinical documents. Identifiers are the canonical NRCeS and HL7 systems, and the same Patient, Organization, Coverage and Practitioner shapes recur in every bundle. Since 6 September 2026 the Claim bundles carry the element ids and the `HPIN` identifier the SHA HP sandbox demands. Three applications in this repository, the provider, nanoemr and the IRDAI payer, are held to these files byte for byte by their test suites. A change to a reference file is a change to what every one of them sends. Coverage, plan and preauthorisation have been run against the live sandbox; the claim, task and payment bundles have passed the validator only. - -## What has no sample - -Eight exchange directions have nothing behind them, and the gaps are not random: they are concentrated in exactly the exchanges an integrator reaches last. - -| Exchange | Status | -| :---- | :---- | -| Predetermination, both directions | No sample. The only bundle shape that mentions it leaves the claim use as an unfilled placeholder | -| Communication, both directions | No sample, though the PMJAY handbook specifies both field by field | -| Task, reprocess | No sample, and the archive carries an empty `reprocess` folder where one was scoped | -| Task, shortfall | No sample. The word appears once in the entire published material | -| Task, status and search | No sample | - -There is a common cause. The sandbox request collection appears to carry payloads for predetermination, communication, status and search, but all eight of those entries share one identical block of ciphertext. It is filler. Nothing was ever captured for them. - -The chapters covering these exchanges are written from the specification and say so. - -## Also missing, inside exchanges that are covered - -Two decisions have no sample even though their exchange does. There is no rejected preauthorisation and no rejected claim anywhere in the set, although the handbook documents rejected and partially approved responses in detail. Every response sample shows an approval. Anyone building the failure path is building it from prose. - -## Two patterns that survive only as fragments - -Cyclic treatment and the newborn case appear nowhere in the twenty-two. Both exist only as broken JSON inside a frequently-asked-questions document, with unbalanced braces, a missing quotation mark, a masked identifier and code comments inside the JSON. They are reconstructed in the Claim Request chapter and labelled as reconstructions. Do not copy them from the source. - -## How to read one - -Never print one of the large files. Load it and look at the shape first. - -```python -import json -b = json.load(open("preauth/preauth_request.txt")) -print(b["type"], len(b["entry"])) -for e in b["entry"]: - print(e["resource"]["resourceType"]) -``` - -Then take the resource you care about. The bulk in every large file is base64 sitting in attachments, so a bundle stripped of `attachment.data` is usually a few kilobytes and is far easier to read. - -Diff two samples of the same exchange rather than reading either in isolation. The difference between the preauthorisation request and the enhancement request is a second item, and reading them side by side makes that obvious in a way that reading one of them does not. diff --git a/site/docs/nhcx/v1/getting-started/README.md b/site/docs/nhcx/v1/getting-started/README.md deleted file mode 100644 index c597633c7..000000000 --- a/site/docs/nhcx/v1/getting-started/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Getting started - -Orientation for a developer new to NHCX: what it is, how to get sandbox -access or onboard, the glossary. Pages here are read first and in order, so -give each one a `sidebar_position`. - diff --git a/site/docs/nhcx/v1/getting-started/_category_.json b/site/docs/nhcx/v1/getting-started/_category_.json index 9e328a22a..fd94d1fcf 100644 --- a/site/docs/nhcx/v1/getting-started/_category_.json +++ b/site/docs/nhcx/v1/getting-started/_category_.json @@ -1,5 +1,4 @@ { - "label": "Get started", - "position": 2, - "collapsed": false + "label": "Getting started", + "position": 2 } diff --git a/site/docs/nhcx/v1/getting-started/base-urls.md b/site/docs/nhcx/v1/getting-started/base-urls.md new file mode 100644 index 000000000..a9f5a95e8 --- /dev/null +++ b/site/docs/nhcx/v1/getting-started/base-urls.md @@ -0,0 +1,67 @@ +--- +title: Base URLs +sidebar_label: Base URLs +sidebar_position: 2 +description: Every service's base in the sandbox and in production, from `baseurl.yaml` +verification: unverified +source: nhcx-package/docs/02-Getting Started/02-Base URLs.md +generated: true +--- + +# Base URLs + +Every NHCX call is a base URL followed by a path. The paths are the same in the sandbox and in production. The bases are not, and they differ from one service to the next, so keep each one in configuration rather than in code. + +## In short + +- Each service has its own base. The exchange, the participant service and the ABDM gateway are three different bases, not one. +- A path in this documentation, such as `/v1/preauth/submit`, goes after the base of the service that serves it. +- Only some production bases are published. The rest arrive with your onboarding; Going Live has the order of the switch. + +## Every base, in both environments + +| Service | Sandbox | Production | +| :---- | :---- | :---- | +| ABDM session token | `https://dev.abdm.gov.in` | `https://apis.abdm.gov.in`. ABDM's published production gateway. Confirm it in your onboarding letter. | +| NHCX exchange | `https://apisbx.abdm.gov.in/hcx` | Shared by NHA after sandbox exit. | +| Participant service | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` | +| ABDM proxy | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/abdmproxy` | Not published. Confirm at onboarding. | +| PMJAY payer service, role lookup | `https://apisbx.abdm.gov.in` | Not published. Confirm at onboarding. | +| PMJAY payer service, act on a case | `https://apisbeta.nha.gov.in` | Not published. Confirm at onboarding. | +| Dummy payer | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer` | A sandbox test hook only. | +| NHCX portal | `https://hcxsbx.abdm.gov.in` | Not published. | +| Face authentication page | `https://phrsbx.abdm.gov.in/face-auth` | Not published. | + +What each one serves: + +- **ABDM session token**: The session token every other call carries, at /api/hiecm/gateway/v3/sessions. +- **NHCX exchange**: Every use-case call under /v1, fingerprint and iris authentication under /abha. +- **Participant service**: Creating and updating a participant, the registry search, certificates and policies. +- **ABDM proxy**: Face authentication for PMJAY biometrics. +- **PMJAY payer service, role lookup**: The roles a PMJAY adjudicator user holds, at /pmjay/sbxhcx/nhcxpayerservice/v1/get/user-role. +- **PMJAY payer service, act on a case**: Acting on a PMJAY case, at /pmjay/hcx/nhcxpayerservice/wrapper/process/case. +- **Dummy payer**: The sandbox test hooks that make the dummy payer answer. +- **NHCX portal**: The portal, the live Swagger specifications it publishes, and notification subscribe. +- **Face authentication page**: The QR page a patient opens to complete face authentication, with ?txnId=<txnId>. + +The ABDM gateway also reads `X-CM-ID` on the session call: `sbx` in the sandbox, `abdm` in production. + +On the sandbox, a preauthorisation is therefore posted to `https://apisbx.abdm.gov.in/hcx/v1/preauth/submit`, and a participant is created at `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/v2/participant/create`. + +## Three things that are easy to get wrong + +**The use-case path is `/hcx/v1`, the participant path is `/pmjay/sbxhcx/participanthcxservice`.** They are different services on the same host and neither prefix works for the other. + +**Biometrics span two bases.** Fingerprint and iris sit under the exchange's `/abha/`; face authentication sits under the ABDM proxy's `/abha/`. A client that assumes one base path for all three will fail on face authentication alone. + +**The payer service spans two hosts.** The role lookup is on `apisbx.abdm.gov.in` and the action endpoint on `apisbeta.nha.gov.in`. + +## Production + +The participant service's production address is published, and so is ABDM's production gateway. NHA shares the exchange's production base after sandbox exit. The NHCX Adapter assumes the pattern of swapping the sandbox hostname for the others, but that is an inference. Check every production base against your onboarding letter before you switch. + +## Next steps + +- Session Token: the first call, made against the ABDM gateway's base +- Environments and Addresses, in the Reference: every full address, the headers each service reads, and the firewall +- Going Live: when and how each base changes to production diff --git a/site/docs/nhcx/v1/getting-started/building-and-sending-a-jwe.md b/site/docs/nhcx/v1/getting-started/building-and-sending-a-jwe.md index 6453f2fef..685fb7fa7 100644 --- a/site/docs/nhcx/v1/getting-started/building-and-sending-a-jwe.md +++ b/site/docs/nhcx/v1/getting-started/building-and-sending-a-jwe.md @@ -1,23 +1,17 @@ --- title: Building and sending a JWE sidebar_label: Building and sending a JWE -description: Assembling the protected header, sealing a FHIR bundle for the recipient, and posting it to the exchange. +sidebar_position: 8 +description: RSA-OAEP-256 + A256GCM compact serialisation verification: unverified -source: Message Security and Integrity page; NHCX Code Snippets references for payload preparation; NHCX Integration Handbook §2; API Response Handling to avoid Failures; AWS Sandbox NHCX USECASE Postman collection -sidebar_position: 7 +source: nhcx-package/docs/02-Getting Started/08-Building and Sending a JWE.md +generated: true --- # Building and sending a JWE A message on the exchange is a JSON Web Encryption token: a readable protected header and an encrypted body, serialised as five base64url parts joined by dots. The body is a FHIR bundle. This chapter builds one with an empty bundle, so that what you are testing is the envelope and the plumbing, not the FHIR. -## In short - -- A message is a JWE: a readable protected header and an encrypted FHIR bundle, compact serialised. -- Use `RSA-OAEP-256` with `A256GCM`. One protocol page says `RSA-OAEP`, and the samples outnumber it. -- The three IDs are fresh UUIDs; only `correlation_id` is reused, on the answer. -- A `202` back means the envelope was valid and the message queued. It is not the decision. - ## The protected header Every field the exchange needs to route and log the message. All the `x-hcx-` names are fixed. @@ -63,50 +57,39 @@ This is a valid FHIR Bundle with nothing in it. The exchange will accept it, bec The recipe, from the message-security page. Base64url the header, generate a random content key, and encrypt that key with the recipient's public key using RSA-OAEP. Generate an IV, encrypt the bundle with AES-256-GCM using the header as additional authenticated data, and join the five parts. A JOSE library does all of it. -Python, with `jwcrypto` and `cryptography`: - -```python -import json, uuid -from datetime import datetime, timezone, timedelta -from cryptography import x509 -from cryptography.hazmat.primitives import serialization -from jwcrypto import jwk, jwe - -def public_key_from_pem(pem: bytes) -> jwk.JWK: - """Accepts an X.509 certificate or a bare SPKI public key.""" - try: - cert = x509.load_pem_x509_certificate(pem) - pem = cert.public_key().public_bytes( - serialization.Encoding.PEM, - serialization.PublicFormat.SubjectPublicKeyInfo) - except ValueError: - pass # already a bare public key - return jwk.JWK.from_pem(pem) - -def now_ist() -> str: - return datetime.now(timezone(timedelta(hours=5, minutes=30))).isoformat(timespec="seconds") - -def seal(bundle: dict, recipient_pem: bytes, sender: str, recipient: str, - workflow: str, correlation_id: str, abha: str) -> str: - header = { - "alg": "RSA-OAEP-256", "enc": "A256GCM", - "x-hcx-sender_code": sender, - "x-hcx-recipient_code": recipient, - "x-hcx-api_call_id": str(uuid.uuid4()), - "x-hcx-request_id": str(uuid.uuid4()), - "x-hcx-correlation_id": correlation_id, - "x-hcx-workflow_id": workflow, - "x-hcx-timestamp": now_ist(), - "x-hcx-status": "request.initiated", - "x-hcx-ben-abha-id": abha, - } - token = jwe.JWE(json.dumps(bundle).encode(), protected=json.dumps(header)) - token.add_recipient(public_key_from_pem(recipient_pem)) - return token.serialize(compact=True) +```js +bundle = json.encode(fhirBundle) + +header = { + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": sender, + "x-hcx-recipient_code": recipient, + "x-hcx-api_call_id": randomUUID(), + "x-hcx-request_id": randomUUID(), + "x-hcx-correlation_id": correlationId, + "x-hcx-workflow_id": workflowId, + "x-hcx-timestamp": currentISTTimestamp(), + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": abhaId +} + +jwe = jose.encrypt( + plaintext = bundle, + recipientKey = recipientPublicKey, // from the certificate fetched in the previous chapter + protectedHeader = header, + algorithm = "RSA-OAEP-256", + encryption = "A256GCM" +) + +body = { "payload": jwe } ``` -The result is one long string with four dots in it. That is the whole message. +:::warning +This is pseudo-code, not something to paste. Use your language's JOSE library: `jose` on Node, `jwcrypto` on Python, Nimbus on Java, `System.IdentityModel.Tokens.Jwt` or `jose-jwt` on .NET. +::: +The result is one long string with four dots in it. That is the whole message. Java users can take the portal's `JWEPayloadUtil` sample as-is; it does the same thing with Nimbus, `JWEAlgorithm.RSA_OAEP_256` and `EncryptionMethod.A256GCM`, passing the `x-hcx-` fields as custom header parameters. ## Sending it @@ -118,9 +101,23 @@ curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/preauth/submit --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'bearer_auth: Bearer ' \ - --data-raw '{ "payload": "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIi...." }' + --header 'x-hcx-sender_code: 1000004446@hcx' \ + --header 'x-hcx-recipient_code: 1518@hcx' \ + --header 'x-hcx-api_call_id: ' \ + --header 'x-hcx-request_id: ' \ + --header 'x-hcx-correlation_id: ' \ + --header 'x-hcx-workflow_id: 12' \ + --header 'x-hcx-timestamp: ' \ + --header 'x-hcx-status: request.initiated' \ + --header 'x-hcx-ben-abha-id: 91711234567890' \ + --header 'x-hcx-use_case: New' \ + --data-raw '{ + "payload": "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwieC1oY3gtc2VuZGVyX2NvZGUiOi4uLn0.encrypted_key.iv.ciphertext.tag" + }' ``` +[Pre-authorisation submit in the API reference](/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-submit) + ## What comes straight back `202 Accepted`. The receipt below is the shape the sources define for a *recipient* acknowledging a delivery, which is what your own callback must return in the next chapter. Treat it as the pattern rather than a guaranteed gateway body, and inspect a real response: diff --git a/site/docs/nhcx/v1/getting-started/participant-record.md b/site/docs/nhcx/v1/getting-started/creating-and-updating-a-participant.md similarity index 54% rename from site/docs/nhcx/v1/getting-started/participant-record.md rename to site/docs/nhcx/v1/getting-started/creating-and-updating-a-participant.md index 4e1c3e081..de17cd2f3 100644 --- a/site/docs/nhcx/v1/getting-started/participant-record.md +++ b/site/docs/nhcx/v1/getting-started/creating-and-updating-a-participant.md @@ -1,24 +1,19 @@ --- -title: Creating and updating a participant record -sidebar_label: Participant record -description: Creating your identity on the exchange in sandbox and in production, and updating the certificate or callback address. +title: Creating and updating a participant +sidebar_label: Creating and updating a participant +sidebar_position: 5 +description: Registry onboarding and participant updates verification: unverified -source: Onboarding providers and payers in Sandbox and in Production (NHA); AWS Sandbox NHCX-OnBoarding APIs Postman collection; PMJAY Hospital Migration to HMIS via NHCX §3; NHCX Guide for Providers p6 -sidebar_position: 4 +source: nhcx-package/docs/02-Getting Started/05-Creating and Updating a Participant.md +generated: true --- -# Creating and updating a participant record +# Creating and updating a participant + A participant record is your identity on the exchange. It holds your participant code, your role, your certificate and your callback address. You create it once, then update it whenever the certificate or the address changes. The sandbox and production differ here. The sandbox is a single call each way. Production adds a one-time passcode to the registered mobile number at every step, so nobody can register a hospital they do not control. Both are shown. -## In short - -- The participant record holds your participant code, role, certificate and callback address. -- Sandbox is one call each way. Production adds a one-time passcode to the registered mobile at every step. -- The mobile number must match the HFR record exactly, or for a payer the one NHA holds. -- A certificate-only replacement in production skips the passcode, through a dedicated call. - ## Sandbox: create ```bash @@ -28,22 +23,30 @@ curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/particip --header 'bearer_auth: Bearer ' \ --header 'source: internal' \ --data-raw '{ - "linked_registry_codes": ["10001"], - "registryid": "", + "linked_registry_codes": [ + "10001" + ], + "registryid": "", "participant_name": "Test Hospital", "scheme_code": "PMJAY", "state": "Haryana", "district": "Panchkula", - "roles": ["10001"], + "roles": [ + "10001" + ], "primaryEmail": "integration@hospital.example", - "phone": ["01123456789"], + "phone": [ + "01123456789" + ], "primaryMobile": "9876543210", "signing_cert_path": "", - "encryption_cert": "", + "encryption_cert": "", "endpoint_url": "https://nhcx.hospital.example" }' ``` +[Participant create (v1) in the API reference](/docs/nhcx/v1/api/onboarding/endpoints/onboarding-participant-create) + Field by field: | Field | What to put | @@ -72,19 +75,25 @@ curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/particip --header 'Content-Type: application/json' \ --header 'bearer_auth: Bearer ' \ --data-raw '{ - "participant_code": "1000004446@hcx", + "participant_code": "", "participant_name": "Test Hospital", "scheme_code": "PMJAY", - "roles": ["10001"], + "roles": [ + "10001" + ], "primaryEmail": "integration@hospital.example", - "phone": ["01123456789"], + "phone": [ + "01123456789" + ], "primaryMobile": "9876543210", "endpoint_url": "https://nhcx.hospital.example", "signing_cert_path": "", - "encryption_cert": "" + "encryption_cert": "" }' ``` +[Participant update (v1) in the API reference](/docs/nhcx/v1/api/registry/endpoints/registry-participant-update) + `endpoint_url` is the base of your callback server, sometimes called the bridge URL. It can be set at creation as well as on update. The exchange appends the callback path to it: a preauthorisation decision arrives at `/v1/preauth/on_submit`. The rules for this address are in Receiving a Callback. ## Production: four steps @@ -93,45 +102,85 @@ Base: `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice`. **1. Create.** `POST v2/participant/create` -```json -{ - "registrytype": "10001", - "registryid": "", - "role": ["10001"], - "endpoint_url": "", - "mobilenumber": "", - "email": "integration@hospital.example" -} +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/v2/participant/create' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ + "registrytype": "10001", + "registryid": "XXXXX74586", + "role": [ + "10001" + ], + "endpointurl": "https://nhcx.demohospital.example.in", + "mobilenumber": "XXXX748348", + "email": "sample@gmail.com" + }' ``` +[Participant create (v2) in the API reference](/docs/nhcx/v1/api/onboarding/endpoints/onboarding-v2-participant-create) + The mobile number must match the one on your HFR record exactly, or for a payer the one NHA holds. The response gives `participantid` and a `transactionid`, and a passcode is sent to that mobile. The participant exists, in a pending state. **2. Confirm.** `GET validate?transactionId=&passcode=`. Note the method: the two confirmation calls are GETs, not POSTs. The participant becomes active. +```bash +curl --location --request GET 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/validate?transactionId=&passcode=' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' +``` + +[Validate participant creation in the API reference](/docs/nhcx/v1/api/onboarding/endpoints/onboarding-validate) + **3. Configure.** `POST v2/participant/update` -```json -{ - "participantcode": "", - "encryptioncert": "", - "endpointurl": "https://nhcx.hospital.example" -} +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/v2/participant/update' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ + "participantcode": "XXXXX7583@hcx", + "encryptioncert": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...", + "endpointurl": "https://nhcx.demotpa.example.in" + }' ``` +[Participant certificate and bridge update (v2) in the API reference](/docs/nhcx/v1/api/registry/endpoints/registry-v2-participant-update) + A second transaction ID and passcode arrive. **4. Confirm again.** `GET update/validate?transactionId=&passcode=`. The certificate and address go live. +```bash +curl --location --request GET 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/update/validate?transactionId=&passcode=' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' +``` + +[Validate participant update in the API reference](/docs/nhcx/v1/api/onboarding/endpoints/onboarding-update-validate) + Passcodes and transaction IDs are valid for 24 hours. If one is lost, repeat that step; a new pair is issued. ## Replacing only the certificate In production there is a shorter path that skips the passcode: +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/v2/update/cert' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ + "participantId": "XXXX@hcx", + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t..." + }' ``` -POST v2/update/cert -{ "participantId": "", "certificate": "" } -``` + +[Update certificate (v2, no passcode) in the API reference](/docs/nhcx/v1/api/registry/endpoints/registry-v2-update-cert) Use it for the yearly rotation. diff --git a/site/docs/nhcx/v1/getting-started/recipient-certificate.md b/site/docs/nhcx/v1/getting-started/fetching-a-recipient-certificate.md similarity index 68% rename from site/docs/nhcx/v1/getting-started/recipient-certificate.md rename to site/docs/nhcx/v1/getting-started/fetching-a-recipient-certificate.md index 489861c0a..8648cf80d 100644 --- a/site/docs/nhcx/v1/getting-started/recipient-certificate.md +++ b/site/docs/nhcx/v1/getting-started/fetching-a-recipient-certificate.md @@ -1,21 +1,16 @@ --- -title: Fetching a recipient's certificate -sidebar_label: Recipient certificate -description: Fetching and caching the public key of the participant you are about to send a message to. +title: Fetching a recipient certificate +sidebar_label: Fetching a recipient certificate +sidebar_position: 7 +description: Certificate discovery and caching discipline verification: unverified -source: "AWS Sandbox Participant Service APIs Postman collection; NHCX Integration Handbook §3.3, §5.5, §5.6; NHCX Code Snippets references for payload preparation; Common Mistakes while implementing through NHCX #7" -sidebar_position: 6 +source: nhcx-package/docs/02-Getting Started/07-Fetching a Recipient Certificate.md +generated: true --- -# Fetching a recipient's certificate -Before you can seal a message for anyone, you need their public key. The participant service hands it out against a participant code. - -## In short +# Fetching a recipient certificate -- The participant service hands out a public key against a participant code. -- You may get a full X.509 certificate or a bare SPKI public key. Handle both. -- Cache by participant code for 24 hours; keys change rarely. -- Fetch against the `processingid` from the policy lookup, not the insurer's `payerid`. +Before you can seal a message for anyone, you need their public key. The participant service hands it out against a participant code. ## The call @@ -24,9 +19,13 @@ curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/particip --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'bearer_auth: Bearer ' \ - --data-raw '{ "participantid": "1000003538@hcx" }' + --data-raw '{ + "participantid": "1518@hcx" + }' ``` +[Fetch certificate in the API reference](/docs/nhcx/v1/api/registry/endpoints/registry-fetch-certs) + That participant code is the sandbox dummy payer. For the smoke test at the end of this section it is the recipient. ## What comes back diff --git a/site/docs/nhcx/v1/getting-started/finding-participants-and-policies.md b/site/docs/nhcx/v1/getting-started/finding-participants-and-policies.md index b673aba0f..9741b2ef1 100644 --- a/site/docs/nhcx/v1/getting-started/finding-participants-and-policies.md +++ b/site/docs/nhcx/v1/getting-started/finding-participants-and-policies.md @@ -1,10 +1,11 @@ --- title: Finding participants and policies sidebar_label: Finding participants and policies -description: Listing payers by role, looking up a patient's policies, and reading the processor code every later message is addressed to. +sidebar_position: 6 +description: Search endpoints and policy resolution verification: unverified -source: "AWS Sandbox Participant Service APIs Postman collection; Policy Linking and De-Linking Process (NHA); NHCX Integration Handbook §5.5 to §5.9; Common Mistakes while implementing through NHCX #7, #10; NHCX Provider and Payer Side Use Cases, Sandbox Exit Process" -sidebar_position: 5 +source: nhcx-package/docs/02-Getting Started/06-Finding Participants and Policies.md +generated: true --- # Finding participants and policies @@ -13,26 +14,13 @@ Before a message can be sealed, two questions have to be answered: who is it goi ```mermaid flowchart LR - classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 - classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 A[List participants by role] --> B[Choose the insurer] B --> C[Look up the patient's policies] C --> D{processingid} D --> E[Fetch that participant's certificate] E --> F[Seal and send] - class A,B,C,E,F provider - class D other ``` -## In short - -- Two lookups answer who a message goes to and which policy it is about. -- Identifiers are not equal: try ABHA number, then member ID, then mobile. -- Address the envelope to `processingid`, not `payerid`. That is the portal's seventh most common mistake. -- Linking is the payer's half, done when the policy is written, and it is why ABHA lookup works at all. - ## Listing participants The registry can be asked for everyone holding a role. This is how a hospital system builds its list of payers, and how a payer finds hospitals. @@ -42,15 +30,16 @@ curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/particip --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'bearer_auth: Bearer ' \ - --header 'X-CM-ID: sbx' \ --data-raw '{ "role": "PAYER", "fromdate": "01/04/2021", - "todate": "31/03/2027", + "todate": "20/03/2026", "entitytype": "Gov" }' ``` +[Fetch participants list in the API reference](/docs/nhcx/v1/api/registry/endpoints/registry-fetch-participants-list) + - `role` is `PAYER`, `PROVIDER` or `TPA`. - `fromdate` and `todate` bound the registration date, in `dd/MM/yyyy` only. - `entitytype` is optional. `Gov` narrows to government schemes; leave it out for everyone. @@ -70,10 +59,12 @@ curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/particip --header 'bearer_auth: Bearer ' \ --data-raw '{ "identifiertype": "AbhaNumber", - "identifiervalue": "91123456781234" + "identifiervalue": "12345678910111" }' ``` +[Get beneficiary policies in the API reference](/docs/nhcx/v1/api/registry/endpoints/registry-participant-get-policies) + `identifiertype` is one of three, and they are not equal. Try them in this order and stop at the first that returns a policy: 1. `AbhaNumber`, the ABHA number without hyphens. The strongest identifier. @@ -118,19 +109,23 @@ curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/particip --header 'Content-Type: application/json' \ --header 'bearer_auth: Bearer ' \ --data-raw '{ - "requestid": "e011c4a2-0f3a-4b7e-9c21-50d06af51555", - "abhanumber": "91123456781234", + "requestid": "7f3f2a4e-0c6b-4b7a-9e2d-2c1f8a5b6d90", + "abhanumber": "12345678910111", "mobilenumber": "9876543210", - "memberid": "Cust00085", - "payerid": "1518@hcx", - "processingid": "1000000109@hcx", + "memberid": "MEM-2026-000123", + "payerid": "100234@sbx", "policies": [ - { "productid": "Prod01", "productname": "Active Assure" }, - { "productid": "Prod02", "productname": "Life Insurance Policy" } - ] + { + "productid": "PRD-FLOATER-01", + "productname": "Family Floater Gold" + } + ], + "processingid": "100235@sbx" }' ``` +[Link ABHA number to policies in the API reference](/docs/nhcx/v1/api/registry/endpoints/registry-participant-link-abha-policy) + - `requestid` is a fresh UUID. - `payerid` is the insurer's own participant code. Every insurer has one, even when it works through a TPA. - `processingid` is the TPA's participant code, or the insurer's own if it processes its own claims. @@ -146,16 +141,21 @@ curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/particip --header 'Content-Type: application/json' \ --header 'bearer_auth: Bearer ' \ --data-raw '{ - "requestid": "5f314cf3-8a1d-4e60-b7c9-585b5d7d0bc0", - "payerid": "1518@hcx", - "processingid": "1000000109@hcx", - "memberid": "Cust00085", + "requestid": "9a7c5e3d-1b2f-4c8a-b6d4-0e9f8a7b6c55", + "payerid": "100234@sbx", + "memberid": "MEM-2026-000123", "policies": [ - { "productid": "Prod01", "productname": "Active Assure" } - ] + { + "productid": "PRD-FLOATER-01", + "productname": "Family Floater Gold" + } + ], + "processingid": "100235@sbx" }' ``` +[De-link ABHA policies in the API reference](/docs/nhcx/v1/api/registry/endpoints/registry-participant-delink-abha-policy) + Only products already on the link can be removed; naming one that is not there returns "There is no policies with requested details". The commonest reason to de-link is a change of TPA. There is no edit call: every affected policy is de-linked with the old `processingid` and linked again with the new one. Plan that as a batch job, not a manual task. diff --git a/site/docs/nhcx/v1/getting-started/nhcx-glossary.md b/site/docs/nhcx/v1/getting-started/glossary.md similarity index 93% rename from site/docs/nhcx/v1/getting-started/nhcx-glossary.md rename to site/docs/nhcx/v1/getting-started/glossary.md index e9bbb159c..517a937db 100644 --- a/site/docs/nhcx/v1/getting-started/nhcx-glossary.md +++ b/site/docs/nhcx/v1/getting-started/glossary.md @@ -1,22 +1,17 @@ --- title: Glossary -sidebar_label: NHCX glossary -description: The NHCX and PMJAY terms this documentation uses, in the sense it uses them, with NHA's sense where it differs. +sidebar_label: Glossary +sidebar_position: 90 +description: Definitive glossary of protocol, healthcare, and scheme terms verification: unverified -source: the documents cited across this documentation; NHCX-PMJAY-HMIS Integration Guide §9, Glossary -sidebar_position: 10 +source: nhcx-package/docs/01-Overview/11-Glossary.md +generated: true --- # Glossary The terms this documentation uses, in the sense it uses them. Where NHA's documents use a term differently from ordinary English, the NHA sense is given. -## In short - -- The terms this documentation uses, in the sense it uses them. -- Where NHA's documents use a term differently from ordinary English, the NHA sense is given. -- Grouped by organisations, participants, the protocol, the claim, and the PMJAY scheme. - ## Organisations and programmes - **ABDM.** Ayushman Bharat Digital Mission. The national digital health programme under which NHCX is built. diff --git a/site/docs/nhcx/v1/getting-started/glossary.mdx b/site/docs/nhcx/v1/getting-started/glossary.mdx deleted file mode 100644 index bd041d342..000000000 --- a/site/docs/nhcx/v1/getting-started/glossary.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Glossary -sidebar_label: Glossary -description: The ABDM terms NHCX shares. The gateway's own vocabulary has a glossary of its own in the reference section. -verification: unverified -source: NHA's milestone documents and the NHCX document index -sidebar_position: 1 ---- - -import Shared from '@site/docs/_glossary/_shared.mdx'; - -# Glossary - -Every term the NHCX documentation links to. Each row keeps its own anchor. - -NHCX's own vocabulary, the claim objects, the participant identifiers, the -workflow status codes and the PMJAY scheme terms, has a glossary of its own: -[the NHCX glossary](/docs/nhcx/v1/getting-started/nhcx-glossary). The terms below are the -ones NHCX shares with the rest of ABDM. - -## Across ABDM - - diff --git a/site/docs/nhcx/v1/getting-started/nhcx-adapter.md b/site/docs/nhcx/v1/getting-started/nhcx-adapter.md index ac5bb345c..0ae9d6d4a 100644 --- a/site/docs/nhcx/v1/getting-started/nhcx-adapter.md +++ b/site/docs/nhcx/v1/getting-started/nhcx-adapter.md @@ -1,15 +1,16 @@ --- -title: NHCX adapter -sidebar_label: NHCX adapter -description: A binary that speaks the protocol for you, so your system exchanges plain FHIR over its own network. +title: NHCX adapter (Optional) +sidebar_label: NHCX adapter (Optional) +sidebar_position: 10 +description: Turnkey protocol adapter implementation, optional verification: unverified -source: "nhcx-adapter repository, README and source under `internal/`, read at commit state of 4 September 2026; its own environment defaults for the sandbox and production addresses; NHCX Integration Handbook for the protocol behaviour it implements" -sidebar_position: 9 +source: nhcx-package/docs/02-Getting Started/10-NHCX Adapter.md +generated: true --- -# NHCX adapter +# NHCX adapter (Optional) -Everything in the eight chapters before this one is work you do once and then maintain for ever: +Everything in the nine chapters before this one is work you do once and then maintain for ever: - Minting a token and refreshing it. - Fetching the recipient's certificate and caching it. @@ -21,14 +22,6 @@ The NHCX Adapter does all of it for you. It is a single binary that sits between Read this chapter after the rest of Getting Started rather than instead of it. The adapter hides the protocol, it does not abolish it, and when something goes wrong the error you get back is a protocol error. -## In short - -- One binary sits between your system and the exchange: you speak plain FHIR, it speaks the protocol. -- It does three jobs: send, deliver, and certificates. It does not queue, retry, or build bundles. -- `nhcx-adapter check` runs five checks, and the certificate check catches the commonest cause of unreadable messages. -- Bind it to loopback: the compatibility routes under `/internal/` have no authentication. -- It removes the protocol work, not the need to know what you are sending. - ## What it does Three jobs, and they map onto the three hard parts of the protocol. @@ -41,17 +34,11 @@ Three jobs, and they map onto the three hard parts of the protocol. ```mermaid flowchart LR - classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 - classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 HMIS[Your system] -->|plain FHIR| A[Adapter] A -->|sealed| X((NHCX)) X -->|sealed| A A -->|plain FHIR| HMIS A -.->|certificates, token| R[Participant registry] - class HMIS provider - class A other - class X,R exchange ``` ## What it does not do @@ -176,7 +163,7 @@ curl -s http://127.0.0.1:8090/out/v1/preauth/submit \ -d '{"recipient": "1000004805@hcx", "fhir": { "resourceType": "Bundle", "...": "..." }}' ``` -The answer carries the exchange's own status code, the headers that were built for you and the identifiers you will need later: +Response: ```json { "ok": true, diff --git a/site/docs/nhcx/v1/getting-started/receiving-a-callback.md b/site/docs/nhcx/v1/getting-started/receiving-a-callback.md index 689e2dcdd..85f74e96c 100644 --- a/site/docs/nhcx/v1/getting-started/receiving-a-callback.md +++ b/site/docs/nhcx/v1/getting-started/receiving-a-callback.md @@ -1,24 +1,17 @@ --- title: Receiving a callback sidebar_label: Receiving a callback -description: Hosting the endpoint every answer arrives on, returning the receipt in time, and opening the sealed message. +sidebar_position: 9 +description: Asynchronous callback listener and 202 receipt handling verification: unverified -source: "API Response Handling to avoid Failures; NHCX FAQs v1.2 #14, #21; API Security page, securing participant system APIs; NHCX Integration Handbook §2.5; NHCX Code Snippets references for payload preparation, decryption; AWS Sandbox NHCX USECASE Postman collection" -sidebar_position: 8 +source: nhcx-package/docs/02-Getting Started/09-Receiving a Callback.md +generated: true --- # Receiving a callback Every answer on the exchange arrives at your server, not in the response to your call. This chapter builds the endpoint that receives it, and closes the loop opened in the previous one. -## In short - -- Every answer arrives at your server, not in the response to your call. -- Answer within 30 seconds with `202` and the receipt, then process. Anything slower reads as a failed delivery. -- Two body shapes arrive: `JWEPayload` with a sealed bundle, and `ProtocolResponse` with a refusal in the clear. -- `/v1/error` carries neither shape and must still be answered `202`. -- The exchange signs its calls to you, but no published source gives the key to verify against. - ## What to host Under the `endpoint_url` you registered, the exchange will POST to a path per use case. For a provider that starts with: @@ -75,9 +68,9 @@ A POST with a JSON body of two fields: `/v1/error` is the exception to the two shapes above. It carries no `payload` and no `x-hcx-` fields. What arrives is a plain JSON report of the request the exchange gave up on, with the rejection details. Its field names are not published, so do not parse it against a fixed schema. Store it whole, and answer it with `202` and the receipt like every other delivery. Fill in whatever identifiers the report happens to carry, and leave the rest of the receipt empty. Do not answer `/v1/error` with a `4xx` because the body is not a shape you recognise. Every delivery the exchange makes to you, on any of the paths listed above, is answered `202`. -The exchange signs its calls to you with a JWT (RS256, its own private key) in the authorisation header. Validate the signature against the NHCX public key before trusting anything in the body. +The exchange signs its calls to you with a JWT: RS256 over its own private key, carrying the claims `jti`, `iss`, `sub` (the same value as `iss`), `iat` and `exp`. Validate the signature against the NHCX public key before trusting anything in the body. -**This is the one instruction in this documentation you cannot follow from it.** No published source gives the NHCX public key or an address to fetch it from. None gives the name of the header it arrives in, or the claims to expect inside it. Every integration built from these documents alone has therefore shipped with signature checking disabled, because the alternative, rejecting everything, makes the endpoint useless. +**This is the one instruction in this documentation you cannot follow from it.** The API Security page gives the algorithm and the claims above, but no published source gives the NHCX public key or an address to fetch it from, and none names the header the token arrives in. Every integration built from these documents alone has therefore shipped with signature checking disabled, because the alternative, rejecting everything, makes the endpoint useless. Do not leave that as an accident. Build the check, put the key in configuration, and treat a missing key as a deliberate, logged, temporary state rather than a silent default. Ask for the key during onboarding, at the same time you register your endpoint, and turn the check on the day you get it. Until then your callback address is an unauthenticated endpoint that accepts patient data. Keep it behind whatever else you have: an allow-list of the exchange's addresses, mutual TLS at your edge, a shared secret in a header the exchange agrees to send. @@ -106,25 +99,33 @@ HTTP status `202`. Not `200`, not an empty body. For a `JWEPayload` the header f ## Opening it -```python -import json -from jwcrypto import jwk, jwe - -PRIVATE_KEY = jwk.JWK.from_pem(open("private.key", "rb").read()) - -def open_message(body: dict) -> tuple[dict, dict | None]: - """Returns (header, bundle). bundle is None for a protocol response.""" - if body.get("type") == "ProtocolResponse": - header = {k: v for k, v in body.items() if k.startswith("x-hcx-")} - return header, None - token = jwe.JWE() - token.deserialize(body["payload"], key=PRIVATE_KEY) - header = dict(token.jose_header) - bundle = json.loads(token.payload) - return header, bundle +The mirror of sealing. Read the body, decide which of the two shapes it is, and for a `JWEPayload` unwrap the compact string with your own private key, the one behind the certificate on your participant record. The protected header comes out of the token in the clear; the bundle is the decrypted plaintext. + +```text +body = json.decode(httpRequest.body) + +if body.type == "ProtocolResponse": + header = fields of body whose name starts with "x-hcx-" + bundle = none +else: + token = jose.decrypt( + compact = body.payload, + privateKey = ourPrivateKey, // PKCS8, the pair of the registered certificate + algorithm = "RSA-OAEP-256", + encryption = "A256GCM" + ) + header = token.protectedHeader + bundle = json.decode(token.plaintext) + +respond 202 with the receipt above +handle(header, bundle) ``` -`openssl genpkey` wrote the private key in PKCS8 form, which is what `from_pem` expects. If decryption fails, the message was sealed with a certificate that is not the one on your participant record; go back to the update call and check what is registered. +:::warning +This is pseudo-code, not something to paste. Use the same JOSE library you sealed with; decrypting is the reverse call on the same object. +::: + +`openssl genpkey` wrote the private key in PKCS8 form, which is what every JOSE library loads directly. If decryption fails, the message was sealed with a certificate that is not the one on your participant record; go back to the update call and check what is registered. ## Then, in order @@ -146,12 +147,14 @@ curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcx --header 'Content-Type: application/json' \ --header 'bearer_auth: Bearer ' \ --data-raw '{ - "action": "Reject", + "action": "Approve", "method": "Preauth", - "correlationId": "" + "correlationId": "" }' ``` +[Dummy payer, act on a request in the API reference](/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-dummy-payer-process-request) + `action` is `Approve`, `Reject` or `Query`; `method` is `Preauth` or `Claim`. Your `/v1/preauth/on_submit` then receives the answer, either a sealed `ClaimResponse` or a `ProtocolResponse` carrying the refusal, with the correlation ID you sent. A `Query` action makes the dummy payer raise a communication request instead, which you answer on `/v1/communication/on_request` before the decision arrives. Whichever comes back, that message proves the whole framework. Your token works, your participant record is live, the exchange can reach your address, the dummy payer could open your message, and you could read its reply. Nothing that follows changes any of it, only what goes in the bundle. diff --git a/site/docs/nhcx/v1/getting-started/session-token.md b/site/docs/nhcx/v1/getting-started/session-token.md index 32d0d630d..57f8c3c46 100644 --- a/site/docs/nhcx/v1/getting-started/session-token.md +++ b/site/docs/nhcx/v1/getting-started/session-token.md @@ -1,42 +1,38 @@ --- title: Session token sidebar_label: Session token -description: Getting a bearer token from the ABDM gateway with your Milestone 1 credentials, and keeping it fresh. +sidebar_position: 3 +description: Minting and refreshing ABDM gateway session JWTs verification: unverified -source: "Authenticating with NHCX (NHA); NHCX FAQs v1.2 #2, #3, #20; Common Mistakes while implementing through NHCX #6, #9; ABDM gateway v3 sessions call as used against the sandbox" -sidebar_position: 2 +source: nhcx-package/docs/02-Getting Started/03-Session Token.md +generated: true --- # Session token Every call carries a bearer token. The token does not come from NHCX. It comes from the ABDM gateway, with the client ID and secret you were given for Milestone 1. -## In short - -- The token comes from the ABDM gateway, not from NHCX, using your Milestone 1 client ID and secret. -- Three headers are mandatory on the sessions call: a fresh `REQUEST-ID`, a current `TIMESTAMP`, and `X-CM-ID`. -- On NHCX calls the token goes in `bearer_auth`, with the word `Bearer` in front. -- Sources disagree on the lifetime, so refresh on a timer and retry any `401` once with a fresh token. - ## Getting one ```bash -curl --location 'https://dev.abdm.gov.in/api/hiecm/gateway/v3/sessions' \ - --header 'REQUEST-ID: 607f0d74-0913-4345-afd0-70123442eb64' \ - --header 'TIMESTAMP: 2026-09-04T06:15:51.975Z' \ - --header 'X-CM-ID: sbx' \ +curl --location --request POST 'https://dev.abdm.gov.in/api/hiecm/gateway/v3/sessions' \ --header 'Content-Type: application/json' \ - --data '{ - "clientId": "", - "clientSecret": "", + --header 'REQUEST-ID: ' \ + --header 'TIMESTAMP: ' \ + --header 'X-CM-ID: sbx' \ + --data-raw '{ + "clientId": "", + "clientSecret": "", "grantType": "client_credentials" }' ``` +[Session token in the API reference](/docs/nhcx/v1/api/session/endpoints/session-session-token) + Three headers matter here, and none of them is optional. - `REQUEST-ID` is a fresh UUID that you generate for every call. Sending the same one twice is the mistake to avoid; generate it, do not copy it from an example. -- `TIMESTAMP` is the current time in UTC, ISO 8601 with milliseconds and a trailing `Z`, as in `2026-09-04T06:15:51.975Z`. A clock that has drifted will be refused, so take the time from the system rather than constructing it by hand. +- `TIMESTAMP` is the current time in UTC, ISO 8601 with milliseconds and a trailing `Z`, as in `2026-09-04T06:15:51.975Z`. A clock that has drifted will be refused, so take the time from the system rather than constructing it by hand. How to produce it in each language is at the end of this chapter. - `X-CM-ID` names the environment. It is `sbx` on the sandbox. The mirror and the adapter both use lowercase. `grantType` is `client_credentials`. The older form of this call omitted it, which is why an otherwise correct request copied from an old sample can be rejected. @@ -53,8 +49,6 @@ The response: } ``` -An older address, `https://dev.abdm.gov.in/gateway/v0.5/sessions`, appears throughout the portal's earlier documents. It takes the client ID and secret alone, without the three headers and without `grantType`, and it returns the same body. Treat it as superseded: build against the v3 address above, and fall back to the older one only if v3 answers with an error that is not about your credentials. - ## Using it On every NHCX call, the token goes in a header called `bearer_auth`, with the word `Bearer` and a space in front. The sources are not unanimous: the authentication page and the FAQ both write the example as `Authorization`, and the notification endpoint uses `Authorization`. The safe course, and what the adapter does, is to send both headers with the same value. @@ -67,7 +61,7 @@ Leaving out the `Bearer` prefix is the portal's own example of how to get a `401 ## Keeping it fresh -The token is short-lived. The portal's documents put its life at 300 seconds in one place and 1200 in another, so do not rely on either. Build it like this: +The token is short-lived. The portal's documents put its life at 300 seconds in the authentication note, 1200 in the handbook and 6000 in the notification guide, so do not rely on any of them. Build it like this: - Keep the token and the time you got it. - Before each call, if it is older than a few minutes, get a new one first. @@ -85,3 +79,113 @@ One token serves every call: the participant service, the use-case endpoints, an | An error on the sessions call naming the body | `grantType` omitted, which the v3 address requires | | `401 Sender is not authorized to execute the operation` on an NHCX call | Token expired | | `401` immediately after getting a fresh token | `Bearer` prefix missing | + +## Generating the timestamp + +Two ISO 8601 shapes appear on NHCX, and they are not interchangeable. + +- The ABDM gateway headers, `TIMESTAMP` on the sessions call, take UTC with milliseconds and a trailing `Z`: `2026-09-04T06:15:51.975Z`. +- The exchange header `x-hcx-timestamp` and `Bundle.timestamp` take Indian Standard Time as an offset, without milliseconds: `2026-09-04T11:46:34+05:30`. The two examples are the same instant. + +Take the time from the system clock, keep the clock synchronised with NTP, and let a date library do the formatting. Each snippet below produces `utc` for the gateway and `ist` for the exchange. + +### JavaScript and TypeScript + +```js +const now = new Date(); +const utc = now.toISOString(); // 2026-09-04T06:15:51.975Z +const ist = new Date(now.getTime() + 330 * 60 * 1000) + .toISOString().slice(0, 19) + "+05:30"; // 2026-09-04T11:46:34+05:30 +``` + +### Python + +```python +from datetime import datetime, timezone, timedelta + +utc = datetime.now(timezone.utc).isoformat(timespec="milliseconds").replace("+00:00", "Z") +ist = datetime.now(timezone(timedelta(hours=5, minutes=30))).isoformat(timespec="seconds") +``` + +### Java and Kotlin + +```java +import java.time.*; +import java.time.format.DateTimeFormatter; + +String utc = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX") + .withZone(ZoneOffset.UTC).format(Instant.now()); +String ist = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX") + .format(OffsetDateTime.now(ZoneOffset.ofHoursMinutes(5, 30))); +``` + +### C# and ASP.NET + +```csharp +var now = DateTimeOffset.UtcNow; +string utc = now.ToString("yyyy-MM-dd'T'HH:mm:ss.fff'Z'"); +string ist = now.ToOffset(TimeSpan.FromMinutes(330)).ToString("yyyy-MM-dd'T'HH:mm:sszzz"); +``` + +### PHP + +```php +$utc = (new DateTime('now', new DateTimeZone('UTC')))->format('Y-m-d\TH:i:s.v\Z'); +$ist = (new DateTime('now', new DateTimeZone('Asia/Kolkata')))->format('Y-m-d\TH:i:sP'); +``` + +### Go + +```go +now := time.Now() +utc := now.UTC().Format("2006-01-02T15:04:05.000Z") +ist := now.In(time.FixedZone("IST", 330*60)).Format("2006-01-02T15:04:05-07:00") +``` + +### C++ + +C++20 `` and ``: + +```cpp +#include +#include +using namespace std::chrono; + +auto now = floor(system_clock::now()); +std::string utc = std::format("{:%FT%T}Z", now); // 2026-09-04T06:15:51.975Z +auto ist = floor(now) + hours(5) + minutes(30); +std::string istStr = std::format("{:%FT%T}+05:30", ist); // 2026-09-04T11:46:34+05:30 +``` + +Before C++20, `gmtime` with `strftime("%FT%T")` gives the seconds; append the milliseconds from `gettimeofday` and the `Z` by hand. + +### Ruby + +```ruby +utc = Time.now.utc.strftime('%Y-%m-%dT%H:%M:%S.%LZ') +ist = Time.now.getlocal('+05:30').strftime('%Y-%m-%dT%H:%M:%S%:z') +``` + +### Swift + +```swift +let f = ISO8601DateFormatter() +f.formatOptions = [.withInternetDateTime, .withFractionalSeconds] +let utc = f.string(from: Date()) +f.formatOptions = [.withInternetDateTime] +f.timeZone = TimeZone(secondsFromGMT: 19800) +let ist = f.string(from: Date()) +``` + +### Shell + +GNU `date`, as on Linux: + +```bash +utc=$(date -u +%Y-%m-%dT%H:%M:%S.%3NZ) +ist=$(TZ=Asia/Kolkata date +%Y-%m-%dT%H:%M:%S%:z) +``` + +macOS `date` has no `%N`; use `gdate` from coreutils, or generate the value in the application rather than the shell. + +Whichever language, the check is the same: the gateway value ends in `Z` and has three digits after the seconds; the exchange value ends in `+05:30` and has none. diff --git a/site/docs/nhcx/v1/getting-started/status-and-search.md b/site/docs/nhcx/v1/getting-started/status-and-search.md new file mode 100644 index 000000000..b8db6a3c4 --- /dev/null +++ b/site/docs/nhcx/v1/getting-started/status-and-search.md @@ -0,0 +1,174 @@ +--- +title: Status and search +sidebar_label: Status and search +sidebar_position: 11 +description: Status checking (`/v1/status`) and search queries (`/v1/search/submit`) +verification: unverified +source: nhcx-package/docs/02-Getting Started/11-Status and Search.md +generated: true +--- + +# Status and search + +Two exchanges that are not about a claim's progress but about finding out what +happened to one. Both sides build them, both are on the sandbox exit +checklists, and neither carries clinical content. Status asks the exchange +where a message went. Search asks a payer for cases matching criteria. + +They belong here rather than in the provider or payer sections because they are +shared: the A-series, built once, used by both. + +## Status + +A sender asks the exchange what became of a message it already sent. It is a +protocol operation, not a FHIR one. + +| | | +| :---- | :---- | +| Call | `POST /v1/status` | +| Callback | `POST /v1/on_status` | +| Payload | **An empty string.** No bundle, no Task, no resource of any kind | + +Everything travels in the protected header. That is the whole design, and it is +why a status check costs nothing to answer. + +### The request header + +| Field | Value | +| :---- | :---- | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-correlation_id` | **The `api_call_id` of the message whose status you are asking about** | +| `x-hcx-api_call_id` | A fresh UUID, as always | +| `x-hcx-sender_code`, `x-hcx-recipient_code` | You, and the exchange | +| `x-hcx-ben-abha-id` | Mandatory | +| `x-hcx-workflow_id` | Optional | +| `x-hcx-use_case` | Optional. `New`, `Enhancement` or `Resubmit` on the status sheet | + +The correlation rule is the exception that proves the rule set out in Envelope +Fields. Everywhere else a correlation ID threads a conversation. Here it points +at another message's call ID, because that is the only way to name the message +you are asking about. Keep your own `api_call_id` values; without them you +cannot ask this question at all. + +### The answer + +Arrives on `/v1/on_status`, again with an empty payload. + +| Field | What it tells you | +| :---- | :---- | +| `x-hcx-status` | `request.dispatched` where the message reached the recipient. The other exchange-side values are `request.queued` and `request.stopped` | +| `x-hcx-error_details` | Present where the original failed, with `code`, `message` and `trace` | +| `x-hcx-correlation_id` | The correlation of your status request | + +`request.stopped` is the one to act on. It means redelivery was exhausted and +the correlation has been retired, so the original request is dead and a retry +needs a fresh correlation ID. + +### When to call it + +Not on a timer. The exchange delivers answers to your callback, and polling for +something that will arrive on its own is wasted traffic on both sides. Call it +when a case has gone quiet for longer than the payer's expected turnaround, and +call it from a support screen rather than from the claims desk. + +The Provider UI Guide makes the point the other way round: do not offer a +refresh or chase control unless you have implemented this exchange behind it, +because a control that does nothing is worse than no control. + +### A note on the path + +The Technical Specifications table names the pair `/hcx/status` and +`/NHCX/on_status`. The sandbox Postman collection uses +`https://apisbx.abdm.gov.in/hcx/v1/status` and `/hcx/v1/on_status`. Build +against the Postman form, which is what the sandbox serves, and keep the path +configurable. + +The status service's live specification is at +`https://hcxsbx.abdm.gov.in/statushcxservice/swagger-ui-custom.html`. +Environments and Addresses lists it with the others. + +## Search + +Two different exchanges share the word. A provider may search, but only its +own cases, and the sources do not settle which endpoint that search goes to. + +| | Own-case search | Cross-payer search | +| :---- | :---- | :---- | +| Endpoints | `/preauth/search`, `/claim/search`, `/paymentnotice/search`, each with its `on_search` | `/v1/search/submit`, `/v1/search/on_submit` | +| Who calls it | The participant whose messages these were | NHA, or a regulator such as IRDAI | +| Scope | Requests that originated from the caller | Any claim, at every payer | +| Also serves | Status lookups on those resources | | + +The access-control policy is explicit that providers may make search and status +requests for requests that originated from them, and that payers may do the +same for their own payment notices. A provider's search over its own cases is +`/claim/search` under that policy. A regulator's search is forwarded by the +exchange to every payer, each answering under the regulator's policies. + +The Technical Specifications route `/search/submit` from NHA through NHCX to +the payer: a cross-payer search for NHA or a regulator. But the provider +sandbox exit checklist, item 10 "Claim Search", names `/v1/search/submit`, and +the payer exit checklist expects that search to arrive from a provider. No +source confirms which of the two endpoints the sandbox accepts from a provider. +Treat it as open: confirm with NHA before the demo, and keep the endpoint +configurable. Access Control and Roles sets out the same rule. + +The search service's live specification is at +`https://hcxsbx.abdm.gov.in/searchhcxservice/swagger-ui-custom.html`. + +### The request bundle + +A `Task` in a collection bundle. + +| Element | Value | +| :---- | :---- | +| `Task.status` | `requested` | +| `Task.basedOn` | The request reference being searched for | +| `Task.code` | See the warning below | +| `Task.input[]` | One or more criteria, each with a type from the input value set and a `valueString` | + +Input types, from +`https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code`: + +| Input | What it narrows by | +| :---- | :---- | +| `ClaimNumber` | The case number | +| `IntimationNumber` | The intimation number | +| `PolicyNumber` | The member's policy | +| `ProductNumber` | The benefit product | +| `PayerId`, `ProviderId` | The two participants | +| `FromDate`, `ToDate` | The window | +| `FinanceYear` | Policy or financial year | +| `ServiceCode` | A benefit or service code | + +### The answer + +A `Task` bundle whose `output` references the matching `ClaimResponse` +resources in the same bundle, resolved exactly as a reprocess or cancel answer +is. Parse those with the `ClaimResponse` parser you already have. + +**A search may be answered across several callbacks.** `response.partial` is +valid on `/v1/search/on_submit`, and only the last carries `response.complete`. +Accumulate against the correlation ID rather than treating the first answer as +the whole result set. + +### The Task code is stated three ways + +The value set defines `search` as the code for searching claim responses. The +Search sheet of the same workbook gives `status` on the request and `poll` on +the callback. Nothing has been observed, so none can be confirmed. + +Agree the code with the payer in writing before you build this, and record what +you agreed. It is the one field that decides whether the message reaches the +right queue. + +## What neither exchange gives you + +Under PMJAY, where a case actually stands is not readable over NHCX. A case +sits at `request.initiated` until somebody acts on it in the scheme's own +system, and a `Task` coded `status` is refused. The role lookup on the payer +service is what answers that question instead; PMJAY Adjudication APIs in +Building a Provider has it. + +So a provider system needs both: the status exchange for "did my message +arrive", and, for PMJAY, the role lookup for "who is holding this case now". diff --git a/site/docs/nhcx/v1/getting-started/index.mdx b/site/docs/nhcx/v1/getting-started/the-base-framework.md similarity index 67% rename from site/docs/nhcx/v1/getting-started/index.mdx rename to site/docs/nhcx/v1/getting-started/the-base-framework.md index 2637c8408..66e61c9ac 100644 --- a/site/docs/nhcx/v1/getting-started/index.mdx +++ b/site/docs/nhcx/v1/getting-started/the-base-framework.md @@ -1,24 +1,19 @@ --- -title: The base framework every participant builds -sidebar_label: Get started -description: "The seven things every NHCX participant builds before any use case: token, keys, participant record, addressing, sealing, callbacks." -verification: unverified -source: NHCX FAQs v1.2, base URLs and header rules; NHCX Guide for Providers; Authenticating with NHCX; NHCX Dummy Payer Implementation; the sandbox Postman collections on the portal +title: The base framework +sidebar_label: The base framework sidebar_position: 1 +description: Six-step base client architecture +verification: unverified +source: nhcx-package/docs/02-Getting Started/01-The Base Framework.md +generated: true --- -# The base framework every participant builds +# The base framework + Every participant on NHCX, whether it sends claims or answers them, needs the same seven things working before a single use case can be built. This section builds them in order, and ends with a live round trip: a message out to the sandbox, and the reply back on your own server. None of it is specific to a hospital or an insurer. A provider goes on from here to the B-series use cases; a payer to the C-series. The framework underneath is identical. -## In short - -- Seven things have to work before any use case: token, key pair, participant record, addressing, certificate fetch, sealing, callback. -- None of it is specific to a hospital or an insurer. Providers and payers build the same framework. -- Every call to NHCX carries `bearer_auth`, not `Authorization`. -- The section ends with a live round trip against the sandbox dummy payer. - ## What you will have at the end 1. A way to get and refresh an access token. @@ -33,15 +28,15 @@ Put together, that is the whole loop: ```mermaid sequenceDiagram - box rgb(220,239,227) You + box You participant Y as Your system end - box rgb(227,240,240) ABDM and NHCX + box ABDM and NHCX participant G as ABDM gateway participant P as Participant service participant X as NHCX end - box rgb(220,232,245) Payer side + box Payer side participant D as Dummy payer end Y->>G: 1. client ID and secret @@ -90,9 +85,3 @@ bearer_auth: Bearer ``` Note the header name. It is `bearer_auth`, not `Authorization`, on NHCX's own endpoints. The biometric endpoints used later under PMJAY use `Authorization` instead. - -## The smoke test - -Chapters 07 and 08 send a bundle that is deliberately empty, `"entry": []`, addressed to the sandbox dummy payer, and then make that payer answer. - -The dummy payer does not decide on its own. After the submission is accepted, a second call tells it what to do: `POST https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer/process/request` with the correlation ID and an action of `Approve`, `Reject` or `Query`. That is what produces the callback. When a message you sent comes back to your own server and you can open it, both directions work, and everything after this section is about what goes inside the bundle. diff --git a/site/docs/nhcx/v1/getting-started/your-certificate.md b/site/docs/nhcx/v1/getting-started/your-certificate.md index bdfa1f8d5..58000aaa2 100644 --- a/site/docs/nhcx/v1/getting-started/your-certificate.md +++ b/site/docs/nhcx/v1/getting-started/your-certificate.md @@ -1,23 +1,17 @@ --- title: Your certificate sidebar_label: Your certificate -description: Making the RSA key pair and self-signed X.509 certificate that lets other participants seal messages for you. +sidebar_position: 4 +description: RSA-2048 key pair generation and self-signed certificate assembly verification: unverified -source: Steps to generate encryption Certificate (NHA); Message Security and Integrity page, key rotation; NHCX Integration Handbook §3.3; NHCX Code Snippets references for payload preparation -sidebar_position: 3 +source: nhcx-package/docs/02-Getting Started/04-Your Certificate.md +generated: true --- # Your certificate Every message on the exchange is sealed for the receiver. For anyone to send you anything, you need a key pair: a private half you keep, and a public half, wrapped in a certificate, that you publish through your participant record. -## In short - -- Three openssl commands make a 2048-bit RSA key and a self-signed X.509 certificate valid for a year. -- The private key never leaves your server. The certificate goes to the participant record, base64 encoded. -- Note the expiry: when the certificate lapses, every sender's encryption for you fails. -- Other participants may hand you a bare SPKI key instead of a certificate, so handle both. - ## Making the key pair Three commands, on a machine you control. diff --git a/site/docs/nhcx/v1/go-live/_category_.json b/site/docs/nhcx/v1/go-live/_category_.json new file mode 100644 index 000000000..0de9710c1 --- /dev/null +++ b/site/docs/nhcx/v1/go-live/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Go live", + "position": 6 +} diff --git a/site/docs/nhcx/v1/go-live/index.md b/site/docs/nhcx/v1/go-live/index.md new file mode 100644 index 000000000..a1a00fc9d --- /dev/null +++ b/site/docs/nhcx/v1/go-live/index.md @@ -0,0 +1,96 @@ +--- +title: Going live +sidebar_label: Going live +sidebar_position: 1 +description: Sandbox exit, production credentials, registering in production, switching addresses, the network path, the PMJAY cutover and the pilot +verification: unverified +source: nhcx-package/docs/07-Go Live/01-Going Live.md +generated: true +--- + +# Going live + +Going live is a certification followed by a switch. The sandbox proves the integration against the exchange and its dummy payer. NHA then certifies it, production credentials are issued, and the participant is registered again in production before the first real case travels. This chapter puts the steps in order and names the chapter that covers each one. + +## In short + +- Finish the sandbox exit list for your side, get your FHIR bundles validated, and give the demos. +- Production credentials come from NHA for a hospital, and through the NHA or IRDAI portal for a payer or TPA. +- Register the participant again in production, through the passcode flow, with your production certificate and callback address. +- Point every base URL at production. Only some production addresses are published; the rest come with your onboarding. +- Pilot on a few real cases before switching the whole organisation. + +## 1. Leave the sandbox + +Run every test case on the exit list for your side: the Provider Checklist for a hospital, the Payer Checklist for an insurer, scheme or TPA. Cancel and reprocess, status and search are on both lists. A payer is also checked on the four validations every response must pass, on every use case. + +Then: + +- Email sample FHIR bundles to `hcx.integration@nha.gov.in` for NRCeS validation. +- Give the internal demo to the NHA team, then the HTC demo before NRCeS, IRDAI, TCS and NHA. +- Under PMJAY, add the PMJAY team demo, complete the WASA security audit, and submit the NHCX sandbox exit form. + +## 2. Get production credentials + +For a hospital, NHA confirms the certification and adds the provider role to the production client ID. + +A payer or TPA enrols through the NHA or IRDAI portal. The portal registers it after scrutiny and asks the ABDM gateway team to issue credentials with the payer or TPA role. + +Under PMJAY, the integrator receives production keys for NHCX on successful completion, and the same keys serve for private insurer claims. + +## 3. Register in production + +The production participant service is `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice`. Registration there takes four steps, and each confirmation needs a passcode sent to the registered mobile number: + +1. **Create** the participant, with the mobile number exactly as your HFR record holds it, or for a payer as NHA holds it. +2. **Confirm** with the transaction ID and passcode. The participant becomes active. +3. **Update** it with your production certificate and callback address. A second transaction ID and passcode arrive. +4. **Confirm again.** The certificate and address go live. + +Passcodes and transaction IDs are valid for 24 hours; if one is lost, repeat that step. In production the registry ID is the HFR ID for a hospital and the IRDAI ID without leading zeros for a payer, and sending the wrong one is a common production failure. Creating and Updating a Participant has every call. + +Fetch your own certificate back from the production registry, and check that it matches your private key, before anything is sent. + +## 4. Switch the addresses + +Every base URL changes. Base URLs, in Getting Started, lists them for both environments. The participant service's production address is published; the exchange's production base is shared after sandbox exit. Keep every base in configuration, and check each one against your onboarding letter. + +If you run the NHCX Adapter, set `env` to `production`, confirm `auth.mode` with your onboarding contact, and expect the API key to be required. Its production addresses follow the pattern of swapping the sandbox hostnames, which is an inference, so override any that differ from your letter. + +## 5. Open the network path + +The exchange calls your callback from three addresses. Allow all three inbound: + +``` +3.109.99.210 +13.126.152.0 +13.200.129.223 +``` + +The callback address must be a domain name over HTTPS, with TLS 1.2 or newer, hosted in India. It must not be an IP address, and it must not carry a port number. + +## 6. Under PMJAY, plan the cutover + +After the participant is created and configured in production, the hospital raises a ticket carrying its existing PMJAY hospital ID, the HEM ID used in TMS, and the new NHCX participant ID. NHA's operations team maps the two by hand, and that mapping is the switch. Preauthorisations and claims raised before it finish their life in TMS; everything raised after it goes through the HMIS. For a while both run at once, so brief the desk and plan the day. + +## 7. Pilot, then switch + +NHA recommends a small pilot on a few real cases, and staff training, before switching fully. + +## Before you switch + +- Sandbox exit list complete, bundles validated by NRCeS, and the demos given. +- Production credentials issued with the right role. +- Production participant active, with the certificate and callback address registered and confirmed, and your own certificate fetched back and checked. +- Every base URL pointed at production and held in configuration. +- The three exchange addresses allowed inbound, and the callback on HTTPS with TLS 1.2 or newer, hosted in India. +- For a payer, every policy linked with the correct processor, and the plan master versioned and published for every empanelled hospital. +- Under PMJAY, the mapping ticket raised, and the desk briefed that in-flight TMS cases finish in TMS. +- A pilot planned. + +## Next steps + +- Provider Checklist and Payer Checklist: the sandbox exit lists +- Creating and Updating a Participant: the production registration calls +- Base URLs: every address in both environments +- PMJAY on NHCX: the scheme's integrator journey from Milestone 1 to the mapping ticket diff --git a/site/docs/nhcx/v1/index.md b/site/docs/nhcx/v1/index.md index ba2da6526..971be3729 100644 --- a/site/docs/nhcx/v1/index.md +++ b/site/docs/nhcx/v1/index.md @@ -1,83 +1,91 @@ --- -title: NHCX -sidebar_label: NHCX -description: What NHCX is, who is on it, and where to start depending on whether you are building a provider, a payer, or deciding whether to build at all. -verification: unverified -source: NHCX sandbox portal at hcxsbx.abdm.gov.in, mirrored 1 September 2026; Workflow Status Sheets (18 Aug 2026); Standard Error Codes (11 Aug 2026); PMJAY Integration Handbook (14 Aug 2026); FAQ v1.2 (21 Aug 2026) +title: Introduction +sidebar_label: Introduction sidebar_position: 1 +description: What NHCX is, objectives, participants, machine-readable specifications +verification: unverified +source: nhcx-package/docs/01-Overview/01-Introduction.md +generated: true --- -# NHCX - -The Ayushman Bharat Digital Mission ([ABDM](/docs/nhcx/v1/getting-started/glossary#abdm)) is India's national -health data network, run by the National Health Authority ([NHA](/docs/nhcx/v1/getting-started/glossary#nha)). -It is three gateways, not one, and this section documents the third of them. - -[NHCX](/docs/nhcx/v1/getting-started/glossary#nhcx) is the National Health Claims Exchange. It carries insurance -claims and their responses between providers and payers. This section covers the exchange as NHA -defines it for any payer, and PMJAY as the scheme that runs on it with its own rules. - -## In short - -- A hospital connects once and an insurer connects once, each to the exchange. Either can then reach the other. -- Every substantive exchange is asynchronous: a request out, a receipt, and the answer later on a callback. -- Every message is a FHIR bundle sealed for the recipient inside a JWE envelope the exchange can route but not read. -- Both sides build the same base framework first, then the use cases their role needs. -- PMJAY runs the same endpoints with scheme rules layered on top. - -## Where to start - -| If you are | Start at | -| --- | --- | -| Deciding whether to build | [What NHCX is](/docs/nhcx/v1/concepts/what-nhcx-is), then [claim settlement](/docs/nhcx/v1/concepts/claim-settlement) and [the NHCX way](/docs/nhcx/v1/concepts/nhcx-way-of-claim-settlement) | -| Running a claims desk | [Claim settlement](/docs/nhcx/v1/concepts/claim-settlement), then [Building a provider](/docs/nhcx/v1/building-a-provider) or [Building a payer](/docs/nhcx/v1/building-a-payer) | -| Designing the screens | The [provider UI guide](/docs/nhcx/v1/building-a-provider/ui-guide) or the [payer UI guide](/docs/nhcx/v1/building-a-payer/ui-guide) | -| Engineering a provider | [Get started](/docs/nhcx/v1/getting-started) end to end, then [Building a provider](/docs/nhcx/v1/building-a-provider) | -| Engineering a payer | [Get started](/docs/nhcx/v1/getting-started) end to end, then [Building a payer](/docs/nhcx/v1/building-a-payer) | -| Integrating without building the protocol | The [NHCX adapter](/docs/nhcx/v1/getting-started/nhcx-adapter), then the FHIR reference for the bundles you still write | -| Going live against PMJAY | The [PMJAY sandbox run](/docs/nhcx/v1/building-a-provider/pmjay-sandbox-run), then [PMJAY provider](/docs/nhcx/v1/building-a-provider/pmjay-provider) | -| Writing bundles | [Bundles and conventions](/docs/nhcx/v1/fhir-reference/bundles-and-conventions), then the chapter for your exchange | -| Looking something up | [Workflow codes](/docs/nhcx/v1/exchanges/workflow-codes), the [NHCX glossary](/docs/nhcx/v1/getting-started/nhcx-glossary), [codes and value sets](/docs/nhcx/v1/fhir-reference/codes-and-value-sets) | - -## Who is on it - -| Participant | What it does | -| --- | --- | -| Provider | A hospital or clinic, identified by its Health Facility Registry entry. | -| Payer | An insurance company, or a government agency paying for a scheme. | -| TPA | A third-party administrator processing claims for an insurer. On the network it behaves as a payer. | -| Regulator | IRDAI and bodies like it, which can search claims across every payer. | -| Scheme sponsor | The owner of a programme, for example NHA for Ayushman Bharat. | -| Patient app | A personal health record app receiving notifications for a beneficiary. | -| NHCX | The exchange in the middle, routing between registered participants. | - -Both providers and payers onboard as participants, in sandbox first and then in production. -[Participants and policies](/docs/nhcx/v1/registries/participants-and-policies) covers how that -works and how a beneficiary is matched to a policy. - -## HIE-CM or NHCX - -Claims are not health records. If your product shares or fetches a patient's clinical record, you -are on HIE-CM. If it submits or adjudicates an insurance claim, you are on NHCX. A hospital system -can end up on both. The two integrations share no API surface. - -## What is verified and what is not - -Coverage eligibility in all four purposes, the insurance plan, the preauthorisation, an -enhancement, the claim, and the Payer Service adjudication of all three were run against the SHA -HP sandbox payer on 5 and 6 September 2026, end to end to an approved claim. That run is recorded -in the [PMJAY sandbox run](/docs/nhcx/v1/building-a-provider/pmjay-sandbox-run). - -Everything else is built from NHA's published documents, collections and sample payloads. Where -those documents disagree with each other, the pages say so and name which reading the live samples -follow rather than picking silently. - -## Next - -- [Get started](/docs/nhcx/v1/getting-started), the base framework every participant builds -- [Core concepts](/docs/nhcx/v1/concepts), what a claim is made of -- [Exchanges and codes](/docs/nhcx/v1/exchanges), every endpoint with its callback and workflow code -- [FHIR reference](/docs/nhcx/v1/fhir-reference/bundles-and-conventions), what goes inside the sealed payload -- [API references](/docs/nhcx/v1/api), the 41 operations as interactive OpenAPI -- [Choose your gateway](/docs/hiecm/v3) -- [Support](/docs/support), for anything about these pages rather than about NHCX itself +# Introduction + +## What it is + +The National Health Claims Exchange is a single road between hospitals and insurers. A hospital asks whether a patient is covered, asks permission to treat, sends the bill, and gets paid. Today each of those steps runs differently for every insurer. On the exchange they run the same way for all of them. + +It carries the whole journey: checking cover before admission, getting treatment approved, submitting the claim at discharge, being paid, and arguing when the answer is wrong. Every step is a message out and an answer back later, so nothing is left hanging and there is a record of both halves. + +Hospitals, insurers, patients, regulators and observers all connect to it the same way. + +NHCX is developed under the Ayushman Bharat Digital Mission (ABDM) by the National Health Authority (NHA), in consultation with the Insurance Regulatory and Development Authority of India (IRDAI). The idea is to introduce a platform of exchange to Providers and Payers so that both can transfer digitised health records and other pertinent information directly, in a machine readable format, to their counterpart. + +## What NHCX aims to achieve + +NHA states five objectives for the exchange. + +- **Wider cover.** Bring new kinds of claim onto the network, including outpatient (OPD) visits and pharmacy bills, so insurance is not only about hospital stays. +- **Faster money.** Shorten the time between treatment and payment, and make cashless treatment workable even in small hospitals. +- **Room to innovate.** Give insurers the structured data they need to automate decisions and to spot fraud. +- **One way of doing things.** A single, rule-based process that both sides trust, instead of every insurer running its own. +- **A better patient experience.** Fewer forms, fewer delays, fewer surprises at discharge. + +Underneath all five sits one requirement. A hospital's software and an insurer's software are built by different people on different technology, and a message has to mean exactly the same thing at both ends. That is why everything on the exchange is written in one agreed format, with agreed words for diagnoses, procedures and test results. How Claims Move on NHCX introduces that format, and Bundles and Conventions in the FHIR Reference sets out its rules. + +## NHCX operating framework + +A stock exchange works because a buyer and a seller each connect to the exchange rather than to each other. NHCX works the same way. A hospital connects once, an insurer connects once, and from then on either can reach the other without having built anything specific to them. + +## What NHCX is made of + +It helps to think of NHCX as three rulebooks and one referee. + +- **The protocol** says how a message travels: how it is addressed, sealed, acknowledged and answered. It is deliberately like email: a message goes to the exchange, the exchange passes it on, and the reply comes back the same way. +- **The data specifications** say what goes inside a message. Claims, policies, payments and the rest are written as FHIR records, using profiles published by NRCeS, so that both sides read the same thing. +- **The operational guidelines** say who may join, how they are checked, what they may do, and how they can be removed. +- **NHA is the referee.** It publishes the rules, runs the exchange, and works with NRCeS and IRDAI to change them. + +The portal also publishes a live Swagger specification for each of the exchange's services, and Environments and Addresses in the Reference section lists them. + +Five principles run through all of it. The rules are **open**, published under a permissive licence so anyone can build against them. They are **evolvable**, so a scheme can add what it needs without breaking everyone else. They are **minimal**, so they are easy to understand and do not hold back innovation. They protect **privacy and security**, with sealed contents and tamper-proof records. And they are **unbundled**, so a participant can adopt one part without adopting all of it. + +## Who is on the network + +Most of this documentation talks about two parties, the hospital and the insurer. The network recognises more. + +- **Providers.** Hospitals and clinics, identified by their Health Facility Registry entry. +- **Payers.** Insurance companies, and the government agencies that pay for schemes. +- **TPAs.** Third-party administrators who process claims on an insurer's behalf. On the network a TPA behaves like a payer. +- **Regulators.** IRDAI and bodies like it, who can search claims across every payer. +- **Scheme sponsors.** The owner of a programme, for example NHA for Ayushman Bharat, with payer-level access. +- **Researchers and insurance marketplaces.** Given aggregated or consented data only. +- **Patient apps.** Personal health record apps that receive notifications on a beneficiary's behalf. +- **Other exchanges.** NHCX is designed so that more than one instance can exist and relay to each other. + +```mermaid +flowchart LR + H1[Hospital] --- X((NHCX)) + H2[Clinic] --- X + A[Patient app] --- X + X --- P1[Insurer] + X --- P2[Government scheme] + X --- T[TPA] + X --- R[Regulator] + X --- N[Another exchange] +``` + +Each role comes with a fixed list of what it may send and receive. A hospital can ask about eligibility and submit claims; it cannot search another hospital's claims. A regulator can search; it cannot submit. + +## What changes in practice + +Four things are different once a hospital is on the exchange, and the rest of this documentation is about making them work. + +**Records go across as records.** A hospital's software already holds the diagnosis, the test results and the treatment as data. Today most of it is printed or turned into a picture before it is sent, and the insurer's software cannot read a picture. On the exchange it goes across as data and stays readable. + +**That makes automatic decisions possible.** An insurer can only decide a claim by machine if it can read the values. A blood test sent as ten separate results can be checked automatically; the same test sent as a scan cannot. + +**One place to type things.** The hospital's own system becomes the single place the information is entered, rather than being re-keyed into an insurer's portal afterwards. Most rejections on technical grounds come from that second typing. + +**Any hospital can reach any insurer.** A small hospital that could never afford to integrate with thirty insurers separately can integrate once. + +How Claims Move on NHCX follows a claim from admission to payment, in the ordinary language of the people who do it, before any of this becomes technical. diff --git a/site/docs/nhcx/v1/reference/README.md b/site/docs/nhcx/v1/reference/README.md index 59f32448f..99f26ec11 100644 --- a/site/docs/nhcx/v1/reference/README.md +++ b/site/docs/nhcx/v1/reference/README.md @@ -1,10 +1,4 @@ # Reference -Cross-module reference material for the API references tab. NHCX has none -today: the prose reference pages (use cases, workflow codes, PMJAY use -cases, FHIR bundles) render in the Docs tab under `exchanges/` and -`fhir-reference/`, because they are documentation rather than machine -contracts. - -The API references tab is generated from `catalogue/openapi/nhcx/v1/`. -Nothing is hand-written here. +The package's reference chapters, and the FHIR bundles under `fhir/`. `authentication.md`, +`callbacks.md` and `error-codes.md` are the site's, generated from the specifications. diff --git a/site/docs/nhcx/v1/reference/access-control-and-roles.md b/site/docs/nhcx/v1/reference/access-control-and-roles.md new file mode 100644 index 000000000..d43c329f5 --- /dev/null +++ b/site/docs/nhcx/v1/reference/access-control-and-roles.md @@ -0,0 +1,154 @@ +--- +title: Access control and roles +sidebar_label: Access control and roles +sidebar_position: 14 +description: Role permissions, search rights, consent headers, and registry attributes (`payment_details`) +verification: unverified +source: nhcx-package/docs/06-Reference/04-Access Control and Roles.md +generated: true +--- + +# Access control and roles + +Most of this documentation talks about two parties. The network recognises +nine, and each one has a fixed list of what it may send and what it may +receive. That list is an access-control policy, enforced by the exchange +against the roles on your participant record, and it decides what your +integration is allowed to do before any of your own code runs. + +## The roles + +The exchange extends the HL7 organisation-role value set and namespaces it for +claims. + +| Role on the network | Code | Who it is | +| :---- | :---- | :---- | +| `provider` | 10001 | Health service provider. A hospital or clinic | +| `payer` | 10002 | Insurance service provider | +| `agency.tpa` | 10003 | Third-party administrator acting for a payer. In this version it behaves as a payer for data exchange | +| `agency.regulator` | 10004 | IRDAI, IIB and bodies like them | +| `research` | 10005 | Research groups | +| `member.isnp` | 10006 | Insurance self-network platforms. Marketplaces facilitating insurance adoption | +| `agency.sponsor` | 10007 | Scheme owners, for example NHA for Ayushman Bharat | +| `HIE/HIO.NHCX` | 10008 | Another exchange instance | +| End-user application | 10009 | A beneficiary's personal health record app | + +The FAQ notes that only four role codes are live in practice on the sandbox and +in production: provider, payer, TPA and the end-user application. The rest are +specified rather than deployed. + +## What each role may do + +| Role | Eligibility | Preauthorisation | Claim | Payment | Search and status | +| :---- | :---- | :---- | :---- | :---- | :---- | +| `provider` | Send request, receive response | Send request, receive response | Send request, receive response | Receive notice, send acknowledgement | Its own preauthorisations and claims | +| `payer`, `agency.tpa` | Receive request, send response | Receive request, send response | Receive request, send response | Send notice, receive acknowledgement | Its own payment notices | +| `agency.regulator` | | | Search claims | | Across every payer | +| `research` | Receive request, send response | | | | Aggregate or anonymised only | +| `member.isnp` | Receive request, send response | | | | Aggregate or anonymised, plus individual claims on beneficiary consent | +| `agency.sponsor` | Equivalent to payer throughout | | | | | +| `HIE/HIO.NHCX` | Relays as the use case needs, and can never read the payload | | | | | + +Five things in that table change how a system is built. + +**A provider can search, and only its own.** The policy is explicit: providers +may make search and status requests "for multiple requests that originated from +them". That is why the provider sandbox exit checklist includes claim search. +Which endpoint that search goes to is not settled by the sources, and the next +section sets out why. + +**A regulator's search fans out.** The exchange forwards a regulator's search to +every payer, each of which returns claims data under the regulator's policies. +Nobody else on the network can cause one request to reach every payer. + +**Research and marketplace access is aggregate by default.** Anything a +`research` participant receives is aggregated or anonymised. The key +aggregations are named as still to be defined, so treat this role as specified +rather than usable. + +**A marketplace needs consent, carried on the envelope.** `member.isnp` may see +an individual beneficiary's preauthorisations and claims only with that +beneficiary's consent, obtained through existing consent-management +infrastructure, and "ISNPs are expected to submit the acquired consent as part +of the domain header". That is the one place in the corpus where a domain +header is load-bearing rather than informational. Envelope Fields has the +naming convention. + +**Another exchange never sees the payload.** A relaying instance routes on the +envelope alone, which is the whole point of sealing the letter separately. + +## Two kinds of search + +The sources describe two search exchanges with different endpoints and +different callers. + +| | Own-case search | Cross-payer search | +| :---- | :---- | :---- | +| Endpoints | `/preauth/search`, `/claim/search`, `/paymentnotice/search`, each with `on_search` | `/v1/search/submit` and `/v1/search/on_submit` | +| Who calls it | The participant that originated the messages | NHA, or a regulator such as IRDAI | +| Flow | provider to NHCX to payer, and back | NHA to NHCX to payer, and back | +| Scope | Requests that originated from the caller | Any claim, across every payer | +| Also serves | Status lookups on those resources | | + +A provider's search over its own cases, the search the access-control policy +allows, is `/claim/search`, the endpoint the Open Protocol page gives for it. The Technical Specifications route +`/search/submit` from NHA through NHCX to the payer, and the requests-and-responses +workbook gives NHA or IRDAI searching by case number as its example. That is +the cross-payer search. + +The provider sandbox exit checklist points the other way. Its item 10, "Claim +Search", names `/v1/search/submit`, for "the providers/regulatory bodies", and +the payer exit checklist expects that search to arrive from a provider. No +source confirms which of the two endpoints the sandbox accepts from a provider. +Treat it as open: confirm with NHA before the demo, and keep the endpoint +configurable. + +The Open Protocol page lists `/claim/search` as reachable by +`provider | regulator | auditor`, which introduces an auditor role that appears +in no other source and in no role table. Treat it as an unmodelled participant +type rather than something to build for. + +## Roles are set on the participant record + +The role is not a claim you make per message. It is the `roles` field on your +participant record, set at creation, and the exchange checks every call against +it. Three practical consequences. + +- **A participant may hold more than one role.** The field is an array. +- **The registry must match the role.** A provider is vouched for by the Health + Facility Registry, a payer or TPA by the payer registry. The FAQ warns that + incorrect role and registry mapping causes "API access issues, request + rejection, or improper routing", and it is one of the harder faults to + diagnose because the failure looks like a routing problem. +- **One entity, many participant IDs.** A hospital group holds one participant + ID per Health Facility Registry ID, all created under the same credentials. + +## What the registry holds about you + +The participant registry is the source of truth for who may do what. Its +attributes, with their obligations: + +| Attribute | Type | Obligation | Notes | +| :---- | :---- | :---- | :---- | +| `participant_code` | String | Mandatory | Generated by the exchange. Unique across installations, namespaced as `code@instance` | +| `registry_code` | String | Optional | The HFR or payer registry code, used to validate and link the participant against the role | +| `participant_name` | String | Mandatory | Unique within the instance | +| `roles` | String | Mandatory | Used for access control | +| `address` | JSON | Optional | Physical address including geolocation | +| `email` | String | Optional | Up to 3 | +| `phone` | String | Optional | Landline, up to 3 | +| `mobile` | String | Mandatory | At least 1, up to 3 | +| `status` | String | Mandatory | `Created` (not yet verified), `Active`, `Inactive`, `Blocked` | +| `signing_cert_path` | String | Optional | URI or path to the JWT signing certificate | +| `encryption_cert` | String | Mandatory | URI or path to the encryption certificate | +| `endpoint_url` | String | Mandatory | The default callback address | +| `payment_details` | JSON | Optional | A UPI ID, or an account number with an IFSC code | + +`payment_details` is the only place on the network where a participant's bank +details sit, and it is what `PAYR-1020`, "unable to process payment as no valid +bank details found for the provider", refers to. It is optional at +registration and not optional if you expect to be paid. + +Only `Active` may send or receive. The registry offers create, update, delete +and search, with modification controlled by the exchange operator as part of +onboarding rather than exposed to participants. diff --git a/site/docs/nhcx/v1/reference/envelope-fields.md b/site/docs/nhcx/v1/reference/envelope-fields.md new file mode 100644 index 000000000..127d5147c --- /dev/null +++ b/site/docs/nhcx/v1/reference/envelope-fields.md @@ -0,0 +1,234 @@ +--- +title: Envelope fields +sidebar_label: Envelope fields +sidebar_position: 13 +description: Full JWE header table, obligations, and correlation rules +verification: unverified +source: nhcx-package/docs/06-Reference/03-Envelope Fields.md +generated: true +--- + +# Envelope fields + +Every field on the JWE protected header, with its obligation, its type and the +rule that governs it. JWE, Status and Errors in the Overview explains what the +envelope is and why it is separate from the letter. This chapter is the table +you check a field against while you are building one. + +The authority here is the Technical Specifications page on the portal, which +carries the current header table, together with the ten sheets of the NHCX +Requests and Responses workbook, which state the obligation of each field per +exchange. Where the older Open Protocol page differs it is noted, because it is +still published and still read. + +## The fields + +| Field | Type | Obligation | What it carries | +| :---- | :---- | :---- | :---- | +| `alg` | String | Mandatory | Key wrapping. `RSA-OAEP-256` | +| `enc` | String | Mandatory | Content encryption. `A256GCM` | +| `x-hcx-sender_code` | String | Mandatory | Your participant code | +| `x-hcx-recipient_code` | String | Mandatory | The recipient's. For a provider, the processor code from the policy lookup | +| `x-hcx-api_call_id` | UUID | Mandatory | Fresh on every message, including responses | +| `x-hcx-request_id` | UUID | **Optional** | One per originating request. The Open Protocol page marks it Mandatory; the Technical Specifications page marks it Optional | +| `x-hcx-correlation_id` | UUID | Mandatory | The thread. See the rule below | +| `x-hcx-workflow_id` | String | **Optional** | Which step, or which case. See the two readings below | +| `x-hcx-timestamp` | datetime | Mandatory | See the format note below | +| `x-hcx-status` | String | Mandatory | Where this message stands. Values below | +| `x-hcx-ben-abha-id` | String | **Mandatory** | The beneficiary's ABHA number. Mandatory on every exchange, including those with no beneficiary in the payload | +| `x-hcx-use_case` | String | Optional | Values differ by exchange, see below | +| `x-hcx-error_details` | JSON object | Optional | `code`, `message`, `trace`. Mandatory on a protocol response | +| `x-hcx-debug_details` | JSON object | Optional | The same shape, for debugging | +| `x-hcx-debug_flag` | Enum | Optional | `Error`, `Info` or `Debug`. A server may ignore it | + +**The `x-hcx-use_case` values are not one enum.** The workbook states them on +three sheets and they are not the same on all three. + +| Sheet | Permitted values | +| :---- | :---- | +| Preauth | `New`, `Enhancement`, `Resubmit` | +| Status | `New`, `Enhancement`, `Resubmit` | +| Claim | `New`, `Resubmit` | + +A claim cannot be enhanced, which is why `Enhancement` is absent from that row. +Both workbooks agree, sheet for sheet. + +**`x-hcx-debug_flag` is typed two ways.** The Technical Specifications page +gives the enum as `Error`, `Info` or `Debug`. The NHCX Requests and Responses +workbook types it as Enum with the single value `INFO`, on its response +headers, and every header table in the FHIR Reference and every sample in the +API collection that carries the field sends `INFO`. The field is optional and a +server may ignore it. Where you send it, send `INFO`, as the samples do. No +source says whether a server checks the case of the value. + +Three of those obligations are not stated anywhere else in this documentation +and are worth reading twice. `x-hcx-request_id` is optional. `x-hcx-workflow_id` +is optional. `x-hcx-ben-abha-id` is mandatory. + +## The correlation ID rule, in full + +The rule is stated in two halves in two places, which has been read as a +contradiction. It is not one. The workbook has twenty-five correlation rows: +twenty-four state one half or the other, and they fit together, and the +twenty-fifth gives the status enquiry its own rule. + +| On a | Set `correlation_id` to | Rows stating it | +| :---- | :---- | :---- | +| Request | This message's own `api_call_id` | 8 | +| Response | The `correlation_id` of the request being answered | 16 | +| Status enquiry | The `api_call_id` of the message whose status you are asking about | 1 | + +So the initiator seeds the thread from its own call ID, and every responder +echoes what it received. The Open Protocol page says the same thing in prose: +the correlation ID "may be chosen as the message_id of the original sender's +system. For return messages responders are expected to populate with the one in +the request." + +The sandbox exit checklists describe the initiator's half; the protocol pages +describe the responder's. Build both and threading works. + +Two further rules, and both bite on retries. + +- `api_call_id` and `correlation_id` must be **different values** on a + response. The exit checklists check this on every answering use case. +- A correlation ID that has failed is **retired**. The next attempt needs a + fresh one. Reusing it earns `NHCX-1006`, duplicate request, or goes nowhere. + +## The workflow code means two different things + +This is the field most likely to be misunderstood, because the sources define +it twice and the definitions are not the same. + +**As a step code.** The Workflow Status Sheet assigns a number to each step of +a claim: 12 a new preauthorisation, 21 approved, 24 queried, and so on. This is +the reading the Workflow Codes chapter documents and the one the reference +payer validates. + +**As a case thread.** The Open Protocol page defines it as the "unique id of +workflow that may span over a series of message exchanges, e.g. an eligibility +check, a preauth and then claims submission for a patient may be linked with +such an id". The Technical Specifications page keeps both readings in one +sentence: "Workflow id depicts the current process/state of the case. It may +span over a series of message exchanges for a given transaction." + +The field is **Optional** on all twenty-five rows of the workbook, across all +ten sheets, including CoverageEligibility and Insurance Plan. So the exchanges +for which the Workflow Status Sheet assigns no code are exchanges on which the +header may simply be omitted. There is nothing to negotiate. + +In practice: send the step code where the sheet gives one, because that is what +the payer keys on. Send nothing where it does not. Agree the case-thread +reading with a payer only if one asks for it. + +## Status words + +The Technical Specifications page defines all seven. + +| Value | Sent by | Meaning | +| :---- | :---- | :---- | +| `request.initiated` | The initiator | Starting the request cycle | +| `request.queued` | The exchange | Queued at NHCX, waiting to be processed | +| `request.dispatched` | The exchange | Successfully reached the recipient's system | +| `request.stopped` | The exchange | Stopped completely after failed attempts to reach the recipient | +| `response.partial` | The responder | A partial response, or an acknowledgement of the request | +| `response.complete` | The responder | The final response, closing the cycle | +| `response.error` | The responder | The request was rejected, or an error was met | + +`request.stopped` is the one nothing else explains. It is what the exchange +records when redelivery has been exhausted, and it is the state behind a +retired correlation ID. + +**The Open Protocol page carries a different set entirely**: `request.initiate`, +`request.retry`, `response.success`, `response.fail`, +`response.sender_not_supported`, `response.unhandled`, +`response.request_retry`. None of those seven appears in the workflow sheet, in +any sample, or in the gateway's own validation messages. It is a superseded +draft. Do not build against it, and be ready to meet it in older material. + +## Timestamp + +Contested in format and in zone, and the chapter on JWE, Status and Errors sets +out the disagreement. Two facts settle part of it. + +- **The workbook types the field as a Unix timestamp** and gives `1706308383` + as its example on every sheet. The handbook and the FAQ use ISO 8601. Every + sample bundle uses ISO 8601 with `+05:30`. +- **There is one numeric tolerance.** The reference payer refuses a message + whose timestamp is more than **24 hours** behind the current time, with + `PAYR-1005`. That is the only bound any source states. + +Send ISO 8601 with `+05:30`, because that is what the samples carry. Accept a +Unix epoch on the way in. Note that the ABDM sessions call is a different +matter: its `TIMESTAMP` header is UTC with a trailing `Z` and milliseconds, and +a drifted clock is refused. + +## Domain headers + +The Overview says a few facts may be written on the outside of the envelope for +the exchange's records. There is a naming convention for them and there are +named examples, which is more than this documentation has said before. + +**The convention**, from both the Open Protocol and Technical Specifications +pages: + +``` +x-hcx-- +``` + +where `use_case_name` is under sixteen characters and ideally matches the API +path segment, and `parameter_name` is under thirty-two characters. Both pages +print the prefix as `x-NHCX-`. Send `x-hcx-`, for the reason given under The +header prefix below. + +**The named examples.** The Notification Integration document carries four in +its `domain_values` table, which is what the exchange passes to a beneficiary's +app so it can render a message without opening anything: + +| Header | What it carries | +| :---- | :---- | +| `x-hcx-amount_submitted` | The amount submitted by the provider | +| `x-hcx-benefit-category_type` | The benefit category, meaning the specialty | +| `x-hcx-benefit_code` | An array of the benefits or services submitted | +| `x-hcx-action` | The event type, such as `preauth_response` | + +The eObjects page adds a `Usage` domain header on the Claim Request and Claim +Response, carrying `preauthorization` or `claim`. + +And the access-control policy makes one of them load-bearing: an insurance +marketplace must "submit the acquired consent as part of the domain header" +before it may be given individual claim data. Access Control and Roles has the +rest. + +Send none of these to a payer that has not asked for one. But they are named, +they have a convention, and the earlier statement in this documentation that no +source names any of them was wrong. + +## The header prefix + +The Open Protocol page writes every field as `x-NHCX-`. The Technical +Specifications page, the workbook, the FAQ, the Postman collections and every +sample write `x-hcx-`. Send `x-hcx-`. + +## What the receipt carries + +Not a protected header, but the shape every participant must return within +thirty seconds of a delivery. + +```json +{ + "timestamp": "04/09/2026 11:46:41:305", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "…", + "recipient_code": "…", + "entity_type": "preauth", + "protocol_status": "request.queued" + }, + "error": { "code": "", "message": "" } +} +``` + +HTTP `202`. Not `200`, not an empty body. `entity_type` is derived from the +path: the second-to-last segment, or the last where that is `v1`, with `on_` +stripped. diff --git a/site/docs/nhcx/v1/reference/environments-and-addresses.md b/site/docs/nhcx/v1/reference/environments-and-addresses.md new file mode 100644 index 000000000..1a5140baa --- /dev/null +++ b/site/docs/nhcx/v1/reference/environments-and-addresses.md @@ -0,0 +1,170 @@ +--- +title: Environments and addresses +sidebar_label: Environments and addresses +sidebar_position: 16 +description: Sandbox/production URLs, firewall IPs, token headers, and 12 live Swagger specifications +verification: unverified +source: nhcx-package/docs/06-Reference/06-Environments and Addresses.md +generated: true +--- + +# Environments and addresses + +Every address this documentation uses, together with the live specifications +the portal publishes. Addresses are scattered through the chapters that need +them; this is where you check one. + +## Base URLs + +The base of every service, in both environments. Base URLs, in Getting +Started, explains how a path is appended to them and what is easy to get wrong. + +| Service | Sandbox | Production | +| :---- | :---- | :---- | +| ABDM session token | `https://dev.abdm.gov.in` | `https://apis.abdm.gov.in`. ABDM's published production gateway. Confirm it in your onboarding letter. | +| NHCX exchange | `https://apisbx.abdm.gov.in/hcx` | Shared by NHA after sandbox exit. | +| Participant service | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` | +| ABDM proxy | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/abdmproxy` | Not published. Confirm at onboarding. | +| PMJAY payer service, role lookup | `https://apisbx.abdm.gov.in` | Not published. Confirm at onboarding. | +| PMJAY payer service, act on a case | `https://apisbeta.nha.gov.in` | Not published. Confirm at onboarding. | +| Dummy payer | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer` | A sandbox test hook only. | +| NHCX portal | `https://hcxsbx.abdm.gov.in` | Not published. | +| Face authentication page | `https://phrsbx.abdm.gov.in/face-auth` | Not published. | + +What each one serves: + +- **ABDM session token**: The session token every other call carries, at /api/hiecm/gateway/v3/sessions. +- **NHCX exchange**: Every use-case call under /v1, fingerprint and iris authentication under /abha. +- **Participant service**: Creating and updating a participant, the registry search, certificates and policies. +- **ABDM proxy**: Face authentication for PMJAY biometrics. +- **PMJAY payer service, role lookup**: The roles a PMJAY adjudicator user holds, at /pmjay/sbxhcx/nhcxpayerservice/v1/get/user-role. +- **PMJAY payer service, act on a case**: Acting on a PMJAY case, at /pmjay/hcx/nhcxpayerservice/wrapper/process/case. +- **Dummy payer**: The sandbox test hooks that make the dummy payer answer. +- **NHCX portal**: The portal, the live Swagger specifications it publishes, and notification subscribe. +- **Face authentication page**: The QR page a patient opens to complete face authentication, with ?txnId=<txnId>. + +The ABDM gateway also reads `X-CM-ID` on the session call: `sbx` in the sandbox, `abdm` in production. + +## Full sandbox addresses + +| What | Address | +| :---- | :---- | +| Session token | `https://dev.abdm.gov.in/api/hiecm/gateway/v3/sessions` | +| Use-case calls | `https://apisbx.abdm.gov.in/hcx/v1` | +| Dummy payer test hook | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer/process/request` | +| Dummy payer payment hook | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer/paymentNotice/init` | +| Biometric, fingerprint and iris | `https://apisbx.abdm.gov.in/hcx/abha/biometric/auth/{init,verify}` | +| Biometric, token refresh | `https://apisbx.abdm.gov.in/hcx/abha/biometric/auth/refresh/token` | +| Biometric, face | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/abdmproxy/abha/biometric/` | +| Face auth QR page | `https://phrsbx.abdm.gov.in/face-auth?txnId=` | +| PMJAY payer service, role lookup | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/nhcxpayerservice/v1/get/user-role` | +| PMJAY payer service, act on a case | `https://apisbeta.nha.gov.in/pmjay/hcx/nhcxpayerservice/wrapper/process/case` | +| Notification subscribe | `https://hcxsbx.abdm.gov.in/v1/notification/subscribe` | +| The portal itself | `https://hcxsbx.abdm.gov.in` | + +The production addresses NHA has not published follow, elsewhere, the pattern +of swapping the sandbox hostname, and the NHCX Adapter's own source says as +much in a comment, but that is an inference. Check every one against your +onboarding letter and make every one configurable. Going Live has the order +the switch happens in. + +## Headers, by service + +Which header carries the token is not uniform, and this is a common first-day +failure. + +| Service | Token header | Other required headers | +| :---- | :---- | :---- | +| ABDM sessions | none | `REQUEST-ID`, `TIMESTAMP`, `X-CM-ID` | +| Participant service | `bearer_auth: Bearer ` | `Accept`, `Content-Type`, sometimes `X-CM-ID` | +| Use-case endpoints | `bearer_auth: Bearer ` | `Accept`, `Content-Type` | +| Biometric endpoints | `Authorization: Bearer ` | `process`, `payerid` | +| PMJAY payer service | `bearer_auth: Bearer ` | `Accept`, `Content-Type` | +| Notification service | `Authorization: Bearer ` | `Content-Type` | + +The sources are not unanimous about `bearer_auth` against `Authorization` on +the exchange's own endpoints: the authentication note and the FAQ both write +the example as `Authorization`. Sending both headers with the same value is +what the adapter does and it costs nothing. + +`Accept: application/json` is the portal's sixth most common mistake when +omitted. + +## Firewall + +The exchange calls your callback from three addresses. All three must be +allowed inbound. + +``` +3.109.99.210 +13.126.152.0 +13.200.129.223 +``` + +Your callback address itself must be a domain name over HTTPS with TLS 1.2 or +newer, hosted in India, not an IP address and not carrying a port number. + +## Live API specifications + +The portal publishes a Swagger document per service. These are the +authoritative API surface and they cover three exchanges for which no sample +bundle exists anywhere, so they are the only concrete description of those +available. + +| Service | Specification | +| :---- | :---- | +| Coverage eligibility | `https://hcxsbx.abdm.gov.in/coverageeligibilityhcxservice/swagger-ui-custom.html` | +| Preauthorisation | `https://hcxsbx.abdm.gov.in/preauthhcxservice/swagger-ui-custom.html` | +| Claim | `https://hcxsbx.abdm.gov.in/claimhcxservice/swagger-ui-custom.html` | +| Request additional attachments | `https://hcxsbx.abdm.gov.in/communicationhcxservice/swagger-ui-custom.html` | +| Payment | `https://hcxsbx.abdm.gov.in/servicehcxpayment/swagger-ui-custom.html` | +| Status check | `https://hcxsbx.abdm.gov.in/statushcxservice/swagger-ui-custom.html` | +| Reprocess, the Task service | `https://hcxsbx.abdm.gov.in/taskhcxservice/swagger-ui-custom.html` | +| Search | `https://hcxsbx.abdm.gov.in/searchhcxservice/swagger-ui-custom.html` | +| Insurance plan | `https://hcxsbx.abdm.gov.in/insuranceplanhcxservice/swagger-ui/index.html` | +| Communication | `https://hcxsbx.abdm.gov.in/communicationhcxservice/swagger-ui/index.html` | +| Participant | `https://hcxsbx.abdm.gov.in/participanthcxservice/swagger-ui/index.html` | +| Notifications | `https://hcxsbx.abdm.gov.in/subscriptionhcxservice/swagger-ui/index.html` | + +The service names are worth noting on their own. Reprocess is served by +`taskhcxservice`, notifications by `subscriptionhcxservice`, payment by +`servicehcxpayment`. A name in a log will not always match the exchange you +think you are calling. + +## The endpoint set + +Every path in the V1 cashless use case, with its direction. + +| Exchange | Action | Callback | Direction | +| :---- | :---- | :---- | :---- | +| Coverage eligibility | `/v1/coverageeligibility/check` | `/v1/coverageeligibility/on_check` | provider to payer | +| Insurance plan | `/v1/insuranceplan/request` | `/v1/insuranceplan/on_request` | provider to payer | +| Preauthorisation | `/v1/preauth/submit` | `/v1/preauth/on_submit` | provider to payer | +| Predetermination | `/v1/predetermination/submit` | `/v1/predetermination/on_submit` | provider to payer | +| Claim | `/v1/claim/submit` | `/v1/claim/on_submit` | provider to payer | +| Communication | `/v1/communication/request` | `/v1/communication/on_request` | payer to provider | +| Payment notice | `/v1/paymentnotice/request` | `/v1/paymentnotice/on_request` | payer to provider | +| Task: reprocess, cancel | `/v1/task/submit` | `/v1/task/on_submit` | provider to payer | +| Cross-payer search | `/v1/search/submit` | `/v1/search/on_submit` | NHA or regulator to payer | +| Own-case search | `/preauth/search`, `/claim/search`, `/paymentnotice/search` | the matching `on_search` | originator to payer | +| Status | `/v1/status` | `/v1/on_status` | either party to the exchange | +| Error report | | `/v1/error` | exchange to every participant | +| Notifications | `/v1/notification/subscribe` | `/v1/notification/on_subscribe` | patient app to exchange | + +Predetermination is listed on the Technical Specifications page among the APIs +"designed and deployed in the sandbox environment", which is more than the FHIR +Reference chapter on it can say. No payer in the corpus is recorded as having +implemented it. + +The status pair is named two ways. The Technical Specifications table gives +`/hcx/status` and `/NHCX/on_status`; the Postman collection uses +`/hcx/v1/status` and `/hcx/v1/on_status`. Build against the Postman form, which +is what the sandbox serves, and keep the path configurable. + +## A defect in the published table + +The FAQ's own base-URL table gives the payment notice address as +`https://apisbx.abdm.gov.inhcx/v1/paymentnotice/on_request`, with the slash +after the hostname missing. Anyone copying it will get a DNS failure rather +than an API error, which is a confusing first symptom. The address is +`https://apisbx.abdm.gov.in/hcx/v1/paymentnotice/on_request`. diff --git a/site/docs/nhcx/v1/reference/error-code-guide.md b/site/docs/nhcx/v1/reference/error-code-guide.md new file mode 100644 index 000000000..0f925901f --- /dev/null +++ b/site/docs/nhcx/v1/reference/error-code-guide.md @@ -0,0 +1,517 @@ +--- +title: Error codes +sidebar_label: Reading error codes +sidebar_position: 11 +description: Directory of 309 error codes, the three code spaces, and collisions +verification: unverified +source: nhcx-package/docs/06-Reference/01-Error Codes.md +generated: true +--- + +# Error codes + +Every error code NHCX and the reference payer can send, in one place. The +workflow codes are in the Overview's Workflow Codes chapter and the FHIR value +sets in Codes and Value Sets; this chapter is only about failure. + +Three hundred and nine distinct codes exist across the seven sheets of the +Standard Error Codes workbook, last updated 11 August 2026. They are not one +list. They are three, and the first thing to get right is which one you are +reading. + +## The code spaces + +| Space | Prefix | Count | Who sends it | Where it arrives | +| :---- | :---- | :---- | :---- | :---- | +| Gateway | `NHCX-` | 19 | The exchange | Synchronously on your own call, or on `/v1/error` | +| Standard payer | `PAYR-1001 to PAYR-1020` | 20 | A payer implementing the published standard | Inside the sealed response | +| Reference payer | `PAYR-1001 to PAYR-1520` | 290 | The PMJAY reference implementation | Inside the sealed response | +| Observed live | `ERR-PYR-` | 1 | The PMJAY reference implementation, on none of its published sheets | Inside the sealed response | + +The fourth row is not a sheet. It is the one code the reference payer sent on +the sandbox run that none of the seven sheets lists; What the live payer sent +that the sheets do not say, below, covers it. + +**The two `PAYR-` spaces collide.** All twenty codes in the `PAYR-1001` to +`PAYR-1020` range are on both the standard sheet and the reference payer's +Bridge Error sheet, and eighteen of them carry a different meaning on each. The +two that agree are `PAYR-1001` and `PAYR-1002`, a decryption and an encryption +failure on both sheets in different words. The reference payer's own sheet +marks three of its readings, `PAYR-1003`, `PAYR-1006` and `PAYR-1007`, as +deprecated. + +| Code | Standard sheet says | Reference payer says | +| :---- | :---- | :---- | +| `PAYR-1003` | Error while connecting to NHCX; the system will resend later | Invalid workflow requested (marked deprecated on the Bridge Error sheet) | +| `PAYR-1004` | Provider is not registered with the payer for the requested policy | Received FHIR bundle is malformed | +| `PAYR-1005` | Beneficiary is not a covered member for the requested policy | Maximum time limit exceeded in receiving the request | +| `PAYR-1006` | Policy does not exist | Invalid name in request (marked deprecated on the Bridge Error sheet) | +| `PAYR-1007` | Requested policy is expired | Invalid gender in request (marked deprecated on the Bridge Error sheet) | +| `PAYR-1008` | Eligible coverage amount is insufficient | Invalid FHIR bundle received | +| `PAYR-1009` | Requested items are not valid or not covered | No identifier found for patient component | +| `PAYR-1010` | Preauthorisation is required but was not obtained | No type found for patient component identifier | +| `PAYR-1011` | The prior approved package does not support enhancement | No identifier found for claim component | +| `PAYR-1012` | Claim amount is more than the preauthorisation approved amount | No type found for claim component identifier | +| `PAYR-1013` | No prior approval for the requested procedures or packages | No identifier found for organization component for provider | +| `PAYR-1014` | Date of birth is after the date of service | No type found for organization component identifier for provider | +| `PAYR-1015` | Date of service is after the date of death | No identifier found for organization component for payer | +| `PAYR-1016` | Duplicate claim submitted based on service codes and dates | No type found for organization component identifier for payer | +| `PAYR-1017` | Amount calculations are not correct | No task code received | +| `PAYR-1018` | Time limit for submission expired | No task reason code received | +| `PAYR-1019` | Requested additional information was not received in time | Invalid sequence received in supporting info element | +| `PAYR-1020` | No valid bank details found for the provider | Invalid category received in supporting info element | + +A system that maps its error handling from the standard sheet and then meets +the reference payer will mis-read eighteen codes in that band, and for most of +them the two readings point at opposite remedies: a business refusal the desk +must act on, against a structural fault only an engineer can fix. The live +sandbox run recorded in PMJAY Sandbox Run met the reference payer's readings +throughout. + +Decide which payer you are talking to before you look a code up. If you +support both, key your table on the pair of payer and code, never on the code +alone. + +## Reading a code by its band + +The reference payer's codes are banded by the stage that rejected the message, +and the band is more useful than the code when you are triaging. + +| Band | Codes | What rejected it | What it means for you | +| :---- | :---- | :---- | :---- | +| `NHCX-1xxx` | 19 | The exchange, on the envelope | The message never reached the payer | +| `PAYR-10xx` | 98 | Transport and bundle structure | An element, id, sequence or type is missing. Not a value problem | +| `PAYR-11xx` | 23 | Coverage eligibility | The policy, the beneficiary or the hospital configuration | +| `PAYR-12xx` | 73 | Preauthorisation | Codes, amounts, dates, sequencing and scheme rules | +| `PAYR-13xx` | 70 | Claim | The same, against the approved preauthorisation | +| `PAYR-14xx` | 26 | Insurance plan, and the scheme's outer rules | Empanelment, policy association, plan configuration | + +Two consequences follow, both confirmed live. + +**The bands are applied in order.** The bundle is validated before the scheme's +rules are applied, so a `PAYR-12xx` or `PAYR-13xx` refusal is the first sign +that the bundle itself is structurally sound. Reaching `PAYR-1238` is progress. + +**The `PAYR-10xx` band is structural, not semantic.** When you meet one, check +ids, sequences and types before you go looking at values. `PAYR-1027`, "invalid +item id", is not about the package code at all; it means the `Claim.item` has +no FHIR element `id`. + +## Gateway codes +| Code | Message | +| :---- | :---- | +| `NHCX-401` | User Unauthorized | +| `NHCX-1001` | Receiver system is not reachable. | +| `NHCX-1002` | Sender not registered in NHCX. Please register in NHCX portal and try again. | +| `NHCX-1003` | Receiver not registered in NHCX. Please try again with valid receiver details. | +| `NHCX-1004` | No receiver registered in NHCX for the requested scheme. Please try again with valid receiver details for the scheme. | +| `NHCX-1005` | Invalid request header. Please try again with valid headers. | +| `NHCX-1006` | Duplicate request. Request with same correlation id already exist in the system. | +| `NHCX-1007` | Something went wrong while processing the request. Please check the request structure and values and try again. | +| `NHCX-1008` | Something went wrong while processing the request. Please try again after sometime. | +| `NHCX-1009` | Something went wrong while processing the request. Please check log for more details. | +| `NHCX-1010` | No Data with given Correlation id for call back request, please check status for more details | +| `NHCX-1011` | Invalid Status, please check x-hcx-status value from the protected header | +| `NHCX-1012` | No records found with the requested api caller id. Please try again with a valid api caller id. | +| `NHCX-1013` | Invalid or blank request found. | +| `NHCX-1014` | Unable to send protocol response to sender. | +| `NHCX-1015` | Invalid response received from receiver. | +| `NHCX-1016` | Invalid Api Action, please check the request action for this correlationId before trying again | +| `NHCX-1017` | Invalid response received from receiver | +| `NHCX-1018` | Invalid ABHA number received. ABHA number should be sent in the format XX-XXXX-XXXX-XXXX | + +`NHCX-1010` is the one to understand before you build a payer. The exchange +redelivers a submission you have not answered, drops it after a few attempts +and retires the correlation ID, so a verdict decided minutes later has nowhere +to land. Acknowledge every submission at once with an interim response and send +the decision later on the same thread. + +`NHCX-1006`, duplicate correlation ID, is what a retry earns if you reuse a +correlation ID after a failure. Mint a fresh one. + +## Standard payer codes + +The twenty codes a payer implementing the published standard sends. These are +business refusals and belong on the claims desk, shown in the payer's own +words. +| Code | Message | +| :---- | :---- | +| `PAYR-1001` | Error while decrypting request. Please reprocess the request encrypting with valid certificate of the payer. | +| `PAYR-1002` | Error while encrypting request. Please update encryption certificate in NHCX. | +| `PAYR-1003` | Error while connecting to NHCX. System will try to resend the message to NHCX after some time. | +| `PAYR-1004` | Provider is not registered with the payer for requested policy. | +| `PAYR-1005` | Beneficiary is not a covered member for requested policy. Please enroll beneficiary for the policy and try again. | +| `PAYR-1006` | Policy does not exist. Please try with a valid policy. | +| `PAYR-1007` | Requested policy is expired. Please try with a valid policy. | +| `PAYR-1008` | Eligible coverage amount of the beneficiary for the requested policy is insufficient to process the request. | +| `PAYR-1009` | Requested items are not valid or not covered. Please try again with valid or covered items. | +| `PAYR-1010` | Preauthorization is required to process the request but was not obtained. | +| `PAYR-1011` | Enhancement request can not be processed as the prior approved package/procedure does not support enhancement. | +| `PAYR-1012` | Claim amount requested is more than the preauthorization approved amount. | +| `PAYR-1013` | No prior approval for the requested procedures/packages obtained. | +| `PAYR-1014` | Date of birth of the beneficiary can not be after date of service. | +| `PAYR-1015` | Date of service cannot be after date of death. | +| `PAYR-1016` | Duplicate claim submitted based on service codes and dates. | +| `PAYR-1017` | Amount calculations are not correct. Please verify calculated amount. | +| `PAYR-1018` | Time limit for submission expired. | +| `PAYR-1019` | Requested additional information was not received or was not received within time limit | +| `PAYR-1020` | Unable to process payment as no valid bank details found for the provider. | + +## Reference payer: structure and transport, `PAYR-10xx` + +Ninety-eight codes. Almost all of them say that an element the payer addresses +by id, sequence or type is missing its handle. None of them is a code lookup. +| Code | Message | +| :---- | :---- | +| `PAYR-1001` | Error occurred while decrypting payload for receiver code <receiver_code> with correlation id <sender_correlation_id>. | +| `PAYR-1002` | Error occurred while encrypting payload for receiver code <receiver_code> with correlation id <sender_correlation_id>. | +| `PAYR-1003` | Invalid workflow requested. Hence request will not be processed further. | +| `PAYR-1004` | Received FHIR bundle is malformed. Please correct the bundle and try again. <Error details> | +| `PAYR-1005` | Maximum time limit exceeded in receiving the request. Please try again. | +| `PAYR-1006` | Invalid name in request. Hence request will not be processed further. | +| `PAYR-1007` | Invalid gender in request. Hence request will not be processed further. | +| `PAYR-1008` | Invalid FHIR bundle received. Hence request will not be processed further. | +| `PAYR-1009` | No identifier found for patient component. Hence request will not be processed further. https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html | +| `PAYR-1010` | No type found for patient component identifier. Hence request will not be processed further. https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html | +| `PAYR-1011` | No identifier found for claim component. Hence request will not be processed further. | +| `PAYR-1012` | No type found for claim component identifier. Hence request will not be processed further. | +| `PAYR-1013` | No identifier found for organization component for provider. Hence request will not be processed further. | +| `PAYR-1014` | No type found for organization component identifier for provider. Hence request will not be processed further. | +| `PAYR-1015` | No identifier found for organization component for payer. Hence request will not be processed further. | +| `PAYR-1016` | No type found for organization component identifier for payer. Hence request will not be processed further. | +| `PAYR-1017` | No task code received. Hence request will not be processed further. | +| `PAYR-1018` | No task reason code received. Hence request will not be processed further. | +| `PAYR-1019` | Invalid sequence received in supporting info element. Hence request will not be processed further. | +| `PAYR-1020` | Invalid category received in supporting info element for sequence %s. Hence request will not be processed further. | +| `PAYR-1021` | Invalid code received in supporting info element for sequence %s. Hence request will not be processed further. | +| `PAYR-1023` | Invalid procedure category received for procedure component. Hence request will not be processed further. | +| `PAYR-1024` | Invalid procedure status received for procedure component. Hence request will not be processed further. | +| `PAYR-1025` | Invalid procedure sequence received for procedure component. Hence request will not be processed further. | +| `PAYR-1026` | No procedure component found for reference in claim component. Hence request will not be processed further. | +| `PAYR-1027` | Invalid item id found for item in claim component. Hence request will not be processed further. | +| `PAYR-1028` | Invalid item sequence received for item in claim component. Hence request will not be processed further. | +| `PAYR-1029` | Invalid bundle id received for FHIR bundle. Hence request will not be processed further. | +| `PAYR-1030` | Invalid questionnaire id received in FHIR bundle for questionnaire component. Hence request will not be processed further. | +| `PAYR-1031` | Invalid url received for bundle entry in FHIR bundle. Hence request will not be processed further. Please reach out to technical team. | +| `PAYR-1032` | Invalid purpose received for coverage eligibility request. Hence request will not be processed further. Please try again with valid purpose details. | +| `PAYR-1033` | No items received for coverage eligibility purpose. Since items are mandatory for the requested purpose, hence request will not be processed further. Please try again with valid item details. | +| `PAYR-1034` | Invalid procedure code received. Please try again with valid procedure details. | +| `PAYR-1035` | Invalid policy code received. Please try again with valid policy details. | +| `PAYR-1036` | Invalid attachment received in supporting info with sequence number %s. Please try again with valid attachment details as attachment value is expected. If issue is not resolved, please reach out to technical team. | +| `PAYR-1037` | No identifier found for communication component. Hence request will not be processed further. | +| `PAYR-1038` | No type found for communication component identifier. Hence request will not be processed further. | +| `PAYR-1039` | No payload found for communication component. Hence request will not be processed further. | +| `PAYR-1040` | No component found for given reference. Hence request will not be processed further. | +| `PAYR-1041` | No identifier found for procedure component. Hence request will not be processed further. | +| `PAYR-1042` | No type found for procedure component identifier. Hence request will not be processed further. | +| `PAYR-1043` | Date received in the request does not adhere to the NRCES date datatype format. Hence request will not be processed further. Please refere to the date format in NRCES portal. | +| `PAYR-1044` | Date and time received in the request does not adhere to the NRCES date datatype format. Hence request will not be processed further. Please refere to the date time format in NRCES portal. | +| `PAYR-1045` | Invalid quantity received for item. Hence request will not be processed further. | +| `PAYR-1046` | No value or timing details received for supporting info for sequence %s. Hence request will not be processed further. Please reach out to technical team. | +| `PAYR-1047` | Invalid reference received in supporting info with sequence number %s. Please try again with valid resource as reference value. | +| `PAYR-1048` | No reference resource received for supporting info with sequence number %s. Please try again with valid resource for reference value. | +| `PAYR-1049` | Invalid FHIR bundle received. Hence request will not be processed further. please reach out to technical team. | +| `PAYR-1050` | No type found for practitioner component identifier. Hence request will not be processed further. | +| `PAYR-1051` | No section found for composition component. Hence request will not be processed further. | +| `PAYR-1052` | No references found in composition section. Hence request will not be processed further. | +| `PAYR-1053` | Invalid reference found in child sections of composition section. Hence request will not be processed further. | +| `PAYR-1054` | No section content found for composition component. Hence request will not be processed further. | +| `PAYR-1055` | Invalid subject type found for composition component. This should be of type Patient. Hence request will not be processed further. Please try again with valid subject type for the composition. | +| `PAYR-1056` | Invalid contact organization found for subject in composition component. This should be of type Organization. Hence request will not be processed further. Please try again with valid data. | +| `PAYR-1057` | Invalid general practioner type found for subject in composition component. This should be of type Organization/Practitioner/PractitionerRole. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html | +| `PAYR-1058` | Invalid managing organization type found for subject in composition component. This should be of type Organization. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html | +| `PAYR-1059` | Invalid encounter type found for composition/observation component. This should be of type Encounter. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-DiagnosticReportRecord.html | +| `PAYR-1060` | No subject found for encounter in composition component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html | +| `PAYR-1061` | Invalid subject type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html | +| `PAYR-1062` | No episode of care found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html | +| `PAYR-1063` | Invalid episode of care type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html | +| `PAYR-1064` | No based on found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html | +| `PAYR-1065` | Invalid based on type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html | +| `PAYR-1066` | No appointment found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html | +| `PAYR-1067` | Invalid appointment type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html | +| `PAYR-1068` | No reason reference found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html | +| `PAYR-1069` | Invalid reason reference type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html | +| `PAYR-1070` | No author found for composition component. Hence request will not be processed further. | +| `PAYR-1071` | Invalid author type found for composition component. This should be of type Practitioner / PractitionerRole / Organization / Patient / Device / RelatedPerson. Hence request will not be processed further. Please try again with valid author type for the composition. | +| `PAYR-1072` | No procedure reference received for procedure element in claim resource. Hence request will not be processed further. | +| `PAYR-1073` | No based on found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html | +| `PAYR-1074` | Invalid based on type found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html | +| `PAYR-1075` | No part of found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html | +| `PAYR-1076` | Invalid part of type found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html | +| `PAYR-1077` | No subject found for observation component. Hence request will not be processed further. | +| `PAYR-1078` | Invalid subject type found for observation component. This should be of type Patient. Hence request will not be processed further. Please try again with valid subject type for the observation. | +| `PAYR-1079` | No care team details received. Hence request will not be processed further. Please add the care team details and try again. | +| `PAYR-1080` | Invalid HPR details received for practioner resource with url %s. Hence request will not be processed further. Please try again with valid HPR id. | +| `PAYR-1081` | Invalid service date received for item with sequence %s in claim resource. Hence request will not be processed further. Please try again with valid item service date. | +| `PAYR-1082` | Invalid title received for composition for supporting info with sequence %s in claim resource. Hence request will not be processed further. Please try again with valid composition title. | +| `PAYR-1083` | No HPR details found for the practitioner for resource %s. Hence request will not be processed further. Please send the details in the identifier for Practitioner resource with category code as HPIN. | +| `PAYR-1084` | No questionnaire response resource found for url %s. Hence request will not be processed further. Please add the resources for all the references given in the FHIR bundle and try again. | +| `PAYR-1085` | Invalid questionnaire response resource type found in the FHIR bundle for url %s. Hence request will not be processed further. | +| `PAYR-1086` | No procedure resource found for url %s. Hence request will not be processed further. Please add the resources for all the references given in the FHIR bundle and try again. | +| `PAYR-1087` | Invalid procedure resource type found in the FHIR bundle for url %s. Hence request will not be processed further. Procedure resource type is expected. | +| `PAYR-1088` | Invalid composition details. | +| `PAYR-1089` | No billing items found. Hence request will not be processed further. Please try again with valid billing items. | +| `PAYR-1090` | No identifier found for coverage component. Hence request will not be processed further. | +| `PAYR-1091` | No type found for coverage component identifier. Hence request will not be processed further. | +| `PAYR-1092` | Something went wrong while processing request, kindly intiate new request | +| `PAYR-1093` | No subject found for encounter in composition component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html | +| `PAYR-1094` | Invalid subject type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html | +| `PAYR-1095` | Invalid discharge information received for claim request. Hence request will not be processed further. Please send the discharge information in supporting info in claim resource, with category as DIS (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-category.html), and codes in LAMA/DAMA/DTH/DTM (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-code.html). | +| `PAYR-1096` | Invalid death date received for claim request. Hence request will not be processed further. Please send the death date information in supporting info in claim resource, with category as ONS (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-category.html), and code as DTM (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-code.html). | +| `PAYR-1097` | No payload found in the request. Please ensure that the request that is being sent, contains encrypted payload within the mandatory payload properties. | +| `PAYR-1098` | Value type received as %s for category - OTH and code - EDT for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - OTH and code - EDT combination is used to get the registration date. So the registration date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - OTH and code - EDT. | +| `PAYR-1099` | Value type received as %s for category - ONS and code - DSDE for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - ONS and code - DSDE combination is used to get the discharge date. So the discharge date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - DSDE. | + +## Reference payer: coverage eligibility, `PAYR-11xx` +| Code | Message | +| :---- | :---- | +| `PAYR-1101` | Invalid purpose received as (%s) for beneficiary id (%s) from hospital id (%s). Hence no result will be returned. Please try again with a valid purpose. | +| `PAYR-1102` | Invalid search parameter requested. Please try again with a valid id. | +| `PAYR-1103` | Invalid careplan id received. Please try again with valid careplan id. | +| `PAYR-1104` | Multiple records found for the beneficiary. Hence request will not be processed further. | +| `PAYR-1105` | Hospital configuration not found. Please contact support team. | +| `PAYR-1106` | No details found for the requested procedures in the system. | +| `PAYR-1107` | No billable item received. Please try again with valid item data. | +| `PAYR-1108` | No details found for the requested stratification in the system. | +| `PAYR-1109` | No details found for the requested investigations in the system. | +| `PAYR-1110` | No details found for the requested implants in the system. | +| `PAYR-1111` | Rule failure. | +| `PAYR-1112` | Invalid payer id received. Please try again ith valid payer details | +| `PAYR-1113` | Invalid item code received as %s. Please try again with valid data | +| `PAYR-1114` | Invalid speciality code received as %s for item %s. Please try again with valid data. Speciality code is available as the code of the category for specific cost of plan in isurance plan | +| `PAYR-1115` | Invalid procedure quantity received as %s for item %s. Please try again with valid data. Item quantity should be greater than 1 | +| `PAYR-1116` | Hospital is not authorized to raise any case under policy %s. Hence request will not be processed further. Please connect with the support team to get the required authorization | +| `PAYR-1117` | No policy details found for %s. Hence request will not be processed further | +| `PAYR-1118` | No details found for requested items. Hence request will not be processed further | +| `PAYR-1119` | No payer details received for payer id %s from HCX. Please try again with valid payer details. | +| `PAYR-1120` | Duplicate reference id found as %s. Please try again with valid reference details. | +| `PAYR-1121` | No policy details found for %s for beneficiary %s. Hence request will not be processed further. | +| `PAYR-1122` | No policy details found for beneficiary %s. Hence request will not be processed further. | +| `PAYR-1123` | Beneficiary is not a covered member for requested payer. Please enroll beneficiary for applicable policy of requested payer and try again. | + +`PAYR-1114` is the one PMJAY Sandbox Run cites without defining: the +specialty on `item.category` must be the code of the category the package +master files the package under, not a generic value. + +## Reference payer: preauthorisation, `PAYR-12xx` +| Code | Message | +| :---- | :---- | +| `PAYR-1201` | Invalid claimed amount received for case number %s. Please try again with a valid claim amount. Claimed amount should be greater than INR 0 and less than equals to balance wallet amount of the beneficiary. | +| `PAYR-1202` | Invalid speciality code received as %s for item %s for case number %s. Please try again with valid data. Speciality code is available as the code of the category for specific cost of plan in isurance plan. | +| `PAYR-1203` | Invalid speciality description received as %s for procedure %s for case number %s. Please try again with valid data. Speciality description is available as the display of the category for specific cost of plan in isurance plan. | +| `PAYR-1204` | Invalid procedure code received as %s for case number %s. Please try again with valid data. Procedure code is available as the code of the type for benefit component, of specific cost, of plan in isurance plan. | +| `PAYR-1205` | Invalid procedure description received as %s for procedure %s for case number %s. Please try again with valid data. Procedure description is available as the display of the type for benefit component, of specific cost, of plan in isurance plan. | +| `PAYR-1206` | Invalid procedure type received as %s for procedure %s for case number %s. Please try again with valid data. | +| `PAYR-1207` | Invalid procedure factor received as %s for procedure %s for case number %s. Please try again with valid data. | +| `PAYR-1208` | Invalid procedure quantity received as %s for item %s for case number %s. Please try again with valid data. Item quantity should be greater than 1. | +| `PAYR-1209` | Invalid net amount received as INR %s for item %s for case number %s. Please try again with valid data. Item net amount should be greater than INR 0. | +| `PAYR-1210` | Invalid procedure status received as %s for procedure %s for case number %s. Please try again with valid data. | +| `PAYR-1211` | Requested beneficary details and careplan details does not match any criteria for processing the case at this hospital. Please try again with valid data. | +| `PAYR-1212` | No previous preauthorization approved record found for the enhancement request for case number %s. Hence request will not be processed further. Please initiate a new preauthorization. | +| `PAYR-1213` | Existing case in progress found for case number %s. Hence enhancement request will not be accepted. Please try after the adjudication is completed for the current case. | +| `PAYR-1214` | No previous preauthorization approved record found for the resubmission request for case number %s. Hence request will not be processed further. Please initiate a new preauthorization. | +| `PAYR-1215` | Existing case in progress found for case number %s. Hence resubmission request will not be accepted. Please try after the adjudication is completed for the current case. | +| `PAYR-1216` | Existing case in progress found for case number %s. Hence new preauthorization request will not be accepted. | +| `PAYR-1217` | Previous preauthorization approved record found for the new preauthorization request for case number %s. Hence request will not be processed further. Please initiate enhancement/resubmission. | +| `PAYR-1218` | No queried preauthorization record found for the query update request for case number %s. Hence request will not be processed further. | +| `PAYR-1219` | Case number %s is not queried. Hence query updation request will not be processed further. | +| `PAYR-1220` | Invalid investigation description received as %s for investigation code %s for case number %s. Please try again with valid data. | +| `PAYR-1221` | Invalid investigation code received as %s for case number %s. Please try again with valid data. | +| `PAYR-1222` | Invalid investigation status received as %s for investigation %s for case number %s. Please try again with valid data. | +| `PAYR-1223` | Invalid investigation attachment received for investigation %s for case number %s. Please try again with valid data. | +| `PAYR-1224` | Invalid implant description received as %s for implant code %s for case number %s. Please try again with valid data. | +| `PAYR-1225` | Invalid implant code received as %s for case number %s. Please try again with valid data. | +| `PAYR-1226` | Invalid implant status received as %s for investigation %s for case number %s. Please try again with valid data. | +| `PAYR-1227` | Invalid implant attachment received for investigation %s for case number %s. Please try again with valid data. | +| `PAYR-1228` | Invalid implant quantity received as %s for implant %s for case number %s. Please try again with valid data. | +| `PAYR-1229` | Invalid implant net amount received as INR %s for implant %s for case number %s. Please try again with valid data. | +| `PAYR-1230` | Invalid implant unit price received as INR %s for implant %s for case number %s. Please try again with valid data. | +| `PAYR-1231` | Claim has already been raised for case number %s. Hence preauthorization request will not be accepted. | +| `PAYR-1232` | No investigation found for case number %s. Investigation details are mandatory for private hospitals. | +| `PAYR-1233` | Patient liability is not aplicable for the hospital and beneficiary do not have enough wallet balance with deficit amount INR %s for the requested preauthorization for case number %s. | +| `PAYR-1234` | No preauthorization record found for case number %s. Hence the request will not be processed. | +| `PAYR-1235` | Insufficient wallet balance. Hence the request will not be processed. | +| `PAYR-1236` | Invalid claim type (in-patient/out-patient) received. Hence the request will not be processed. | +| `PAYR-1237` | Beneficiary is having an active preauthorization request at %s. Hence the request will not be processed. Kindly inform %s to cancel the active preauthorization request or raise a claim to proceed with current preauthorization. | +| `PAYR-1238` | Beneficiary is having an active preauthorization request at this hospital with reference number %s. Hence the request will not be processed. Kindly cancel the active preauthorization request or raise a claim to proceed with current preauthorization. | +| `PAYR-1239` | Hospital configuration not found. Please contact support team. | +| `PAYR-1240` | No details found for the requested procedures in the system. | +| `PAYR-1241` | Invalid registration date received for case number %s. Hence the request will not be processed. | +| `PAYR-1242` | Invalid registration date format received for case number %s. Hence the request will not be processed. | +| `PAYR-1243` | Invalid admission date received for case number %s. Hence the request will not be processed. | +| `PAYR-1244` | Invalid admission date format received for case number %s. Hence the request will not be processed. | +| `PAYR-1245` | Rule failure. | +| `PAYR-1246` | Invalid payer id received as %s. Please try again with valid payer id. | +| `PAYR-1247` | Payer details for payer id %s is not received from HCX for the request. Hence the request will not be processed. | +| `PAYR-1248` | Invalid item code received as %s for item sequence %s case number %s. Please try again with valid data. | +| `PAYR-1249` | Invalid item sequence received as %s for case number %s. Please try again with valid data. | +| `PAYR-1250` | Requested policy %s is not listed. Please try again with valid policy code. | +| `PAYR-1251` | No billable treatment plan received for case number %s. Please try again with valid treatment plan data. | +| `PAYR-1252` | Case number %s is not in active preauthorization state with the current status of the case with the payer system is %s. Hence the preauthorization can not be cancelled. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled. | +| `PAYR-1253` | Case number %s is already cancelled. Hence the preauthorization can not be cancelled again. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled. | +| `PAYR-1254` | Response for STG Questionnaire id %s is mandatory for procedure code %s. Hence the preauthorization request will not be processed as the questionnaire response is not received for procedure code. | +| `PAYR-1255` | Case number %s is already cancelled. Hence no preauthorization request will be accepted for this case number. New preauthorization request needs to be raised with new case/reference number to proceed further. | +| `PAYR-1256` | Response for Authentication Consent Questionnaire is missing for case number %s. This must be sent if the biometric authentication for patient is not available. For new preauthorization request, either biometric authentication for patient or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. Please adhere to the response of the coverage eligibility for auth-requirements purpose to check the mandatory documents to be attached with the request | +| `PAYR-1257` | Payment is initiated for case number %s. Hence the preauthorization can not be cancelled again. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled | +| `PAYR-1258` | Payment is accomplished/cleared for case number %s. Hence the preauthorization can not be cancelled again. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled | +| `PAYR-1259` | DOB is missing for new born for the case number (%s) with correlation id as (%s) at (%s) | +| `PAYR-1260` | DOB cannot be a future date for the case number (%s) with correlation id as (%s) at (%s) | +| `PAYR-1261` | Invalid new born details for the case number (%s) with correlation id as (%s) at (%s) | +| `PAYR-1262` | Gender is mandatory for the new born beneficiary | +| `PAYR-1263` | Documents are mandatory for the new born beneficiary | +| `PAYR-1264` | Documents are mandatory for the new born beneficiary | +| `PAYR-1265` | Documents are mandatory for the new born beneficiary | +| `PAYR-1266` | Documents are mandatory for the new born beneficiary | +| `PAYR-1267` | Beneficiary is having an active preauthorization request for new born case at this hospital with reference number %s. Hence the request will not be processed. Kindly cancel the active preauthorization request or raise a claim to proceed with current preauthorization | +| `PAYR-1268` | Beneficiary is having an active preauthorization request for new born case at %s. Hence the request will not be processed. Kindly inform %s to cancel the active preauthorization request or raise a claim to proceed with current preauthorization | +| `PAYR-1269` | Date of birth received for new born beneficiary exceeds 6 years before the current date. New born cases can be raised only for the beneficiary whose date of birth is within 6 years of current date | +| `PAYR-1270` | Item LM100 is not applicable for preauthorization request. This item is expected/mandated only during claim submission if the patient is discharged after/during surgery under LAMA/DAMA category for PMJAY cases. | +| `PAYR-1271` | No value received for link id %s for Authentication Consent Questionnaire for preauthorization request. This must be sent if the biometric authentication for patient is not available. For new preauthorization request, either biometric authentication for patient or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. Please adhere to the response of the coverage eligibility for auth-requirements purpose to check the mandatory documents to be attached with the request. | +| `PAYR-1272` | Invalid biometric user token received. Please try again with valid valid biometric details of the beneficiary. For any issues with biometric, please try with Authentication Consent Questionnaire, details for which has been received in response for coverage eligibliity auth-requirements. | +| `PAYR-1273` | No questionnaire found for the received selection. Please validate the questionnaire url from insurance plan/coverage auth-requirements response. | + +## Reference payer: claim, `PAYR-13xx` +| Code | Message | +| :---- | :---- | +| `PAYR-1301` | Claim has already been raised for case number %s. Hence new claim request will not be accepted. | +| `PAYR-1302` | No preauthorization approved record found for case number %s. Hence new claim request will not be accepted. | +| `PAYR-1303` | No active claim record found for case number %s. Hence query updation request will not be accepted. | +| `PAYR-1304` | No claim queried record found for case number %s. Hence query updation request will not be accepted. | +| `PAYR-1305` | Invalid usecase requested for case number %s. Please try again with valid usecase. | +| `PAYR-1306` | No item found in preauthorization request for procedure %s with item sequence %s for case number %s. Please try again with valid items. | +| `PAYR-1307` | Invalid quantity requested for procedure %s with item sequence %s for case number %s. Please try again with valid quantity. | +| `PAYR-1308` | No item found in active claim request for procedure %s with item sequence %s for case number %s. Please try again with valid items. | +| `PAYR-1309` | No item found in preauthorization request for implant %s with item sequence %s for case number %s. Please try again with valid items. | +| `PAYR-1310` | Invalid quantity requested for implant %s with item sequence %s for case number %s. Please try again with valid quantity. | +| `PAYR-1311` | No item found in active claim request for implant %s with item sequence %s for case number %s. Please try again with valid items. | +| `PAYR-1312` | No item found in preauthorization request for investigation %s with item sequence %s for case number %s. Please try again with valid items. | +| `PAYR-1313` | Invalid quantity requested for investigation %s with item sequence %s for case number %s. Please try again with valid quantity. | +| `PAYR-1314` | No item found in active claim request for investigation %s with item sequence %s for case number %s. Please try again with valid items. | +| `PAYR-1315` | Rejected item found for preauthorization for procedure %s with item sequence %s for case number %s. Please try again with valid items. | +| `PAYR-1316` | Rejected item found for preauthorization for investigation %s with item sequence %s for case number %s. Please try again with valid items. | +| `PAYR-1317` | Rejected item found for preauthorization for implant %s with item sequence %s for case number %s. Please try again with valid items. | +| `PAYR-1318` | No requested treatment plan found for case number %s. Please try again with valid items. | +| `PAYR-1319` | No requested investigation plan found for case number %s. Please try again with valid items. | +| `PAYR-1320` | No details found for the requested investigations in the system. Hence request will not be processed. | +| `PAYR-1321` | Error occurred while processing the request due to invalid workflow id as (%s) | +| `PAYR-1322` | No active case found for the given case number. | +| `PAYR-1323` | Insufficient wallet balance. Hence the request will not be processed. | +| `PAYR-1324` | Invalid discharge stage received for case number %s. Hence the request will not be processed. | +| `PAYR-1325` | Invalid admission date received for case number %s. Hence the request will not be processed. | +| `PAYR-1326` | Invalid discharge date received for case number %s. Hence the request will not be processed. | +| `PAYR-1327` | Invalid admission date format received for case number %s. Hence the request will not be processed. | +| `PAYR-1328` | Invalid discharge date format received for case number %s. Hence the request will not be processed. | +| `PAYR-1329` | Invalid registration date received for case number %s. Hence the request will not be processed. | +| `PAYR-1330` | Invalid registration date format received for case number %s. Hence the request will not be processed. | +| `PAYR-1331` | Receiver not registered in NHCX. Please try again with valid receiver details. | +| `PAYR-1332` | Invalid CRC request. | +| `PAYR-1333` | Invalid claim type (in-patient/out-patient) received. Hence the request will not be processed. | +| `PAYR-1334` | Hospital configuration not found. Please contact support team. | +| `PAYR-1335` | Invalid implant quantity received as %s for implant %s for case number %s. Please try again with valid data. | +| `PAYR-1336` | Invalid implant unit price received as INR %s for implant %s for case number %s. Please try again with valid data. | +| `PAYR-1337` | Invalid implant net amount received as INR %s for implant %s for case number %s. Please try again with valid data. | +| `PAYR-1338` | Invalid implant attachment received for investigation %s for case number %s. Please try again with valid data. | +| `PAYR-1339` | Invalid implant status received as %s for investigation %s for case number %s. Please try again with valid data. | +| `PAYR-1340` | Invalid investigation status received as %s for investigation %s for case number %s. Please try again with valid data. | +| `PAYR-1341` | Invalid investigation attachment received for investigation %s for case number %s. Please try again with valid data. | +| `PAYR-1342` | Existing case in progress found for case number %s. Hence new reimbursement request will not be accepted. | +| `PAYR-1343` | Previous reimbursement approved record found for the new reimbursement request for case number %s. Hence request will not be processed further. | +| `PAYR-1344` | No details found for the requested procedures in the system. | +| `PAYR-1345` | Invalid procedure status received as %s for procedure %s for case number %s. Please try again with valid data. | +| `PAYR-1346` | Invalid procedure description received as %s for procedure %s for case number %s. Please try again with valid data. | +| `PAYR-1347` | Invalid procedure type received as %s for procedure %s for case number %s. Please try again with valid data. | +| `PAYR-1348` | Invalid procedure factor received as %s for procedure %s for case number %s. Please try again with valid data. | +| `PAYR-1349` | Invalid procedure quantity received as %s for procedure %s for case number %s. Please try again with valid data. | +| `PAYR-1350` | Invalid procedure net amount received as INR %s for procedure %s for case number %s. Please try again with valid data. | +| `PAYR-1351` | Invalid speciality code received as %s for procedure %s for case number %s. Please try again with valid data. | +| `PAYR-1352` | Requested beneficary details and careplan details does not match any criteria for processing the case at this hospital. Please try again with valid data. | +| `PAYR-1353` | Invalid careplan id received. Please try again with valid careplan id. | +| `PAYR-1354` | Rule failure. | +| `PAYR-1355` | No details found for the requested implants in the system. Hence request will not be processed. | +| `PAYR-1356` | Patient liability is not aplicable for the hospital and beneficiary do not have enough wallet balance with deficit amount INR %s for the requested preauthorization for case number %s. | +| `PAYR-1357` | Admission date cannot be after the discharge date. Hence request will not be processed. Please correct the data and try again. | +| `PAYR-1358` | Registration of the patient is allowed maximum upto %s days after admission. Hence request will not be processed. Please correct the data and try again. | +| `PAYR-1359` | No billable treatment plan received for case number %s. Please try again with valid treatment plan data. | +| `PAYR-1360` | Invalid item code received as %s for item sequence %s case number %s. Please try again with valid data. | +| `PAYR-1361` | Invalid item sequence received as %s for case number %s. Please try again with valid data. | +| `PAYR-1362` | No procedure with code LM100 received with 'Requested' status for case number %s. Please try again with valid data. For PMJAY claims, if case comes under LAMA/DAMA scenario with beneficiary being discharged before surgery or during surgery, procedure with code LM100 is mandatory. Only this procedure code will be accepted for LAMA/DAMA case, and all other previous preauthorization approved items will get disqualified for the claim submission | +| `PAYR-1363` | Response for Authentication Consent Questionnaire is missing for case number %s. This must be sent if the biometric authentication for patient is not available during discharge. For new claim request, either biometric authentication for patient during discharge, or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. | +| `PAYR-1364` | No value received for link id %s for Authentication Consent Questionnaire for claim request. This must be sent if the biometric authentication for patient is not available during discharge. For new claim request, either biometric authentication for patient during discharge, or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. | +| `PAYR-1365` | Response for STG Questionnaire id %s is mandatory for procedure code %s. Hence the preauthorization request will not be processed as the questionnaire response is not received for procedure code. | +| `PAYR-1366` | Invalid biometric user token received. Please try again with valid biometric details of the beneficiary. For any issues with biometric, please try with Authentication Consent Questionnaire for discharge, details for which has been received in insurance plan. | +| `PAYR-1367` | No biometric records found for the beneficiary for %s. Please ensure correctness of biometric authentication date for the day for cyclic procedure %s. | +| `PAYR-1368` | %s units of cycle information received for procedure code %s with item sequence %s. Cycle information should be sent for all the requested/processed cycles. | +| `PAYR-1369` | Biometric authentication cannot be performed more than once on the same date. Multiple biometric authentication information has been provided for same date for cyclic procedure %s. Hence case will not be processed. Please check and update biometric authentication execution dates and try again. | +| `PAYR-1370` | Received invalid start date as %s for supporting details with item sequence %s. Please try again with valid start date. | + +## Reference payer: plan and scheme rules, `PAYR-14xx` and above +| Code | Message | +| :---- | :---- | +| `PAYR-1401` | <policy_code> policy not allowed for the hospital. Please reach out to technical support team. | +| `PAYR-1402` | Requested policy <policy_code> found not be associated with any payer for insurance plan request. Hence request will not be processed. | +| `PAYR-1403` | Requested renewal <renewal_code> found not be associated with requested policy <policy_code> for insurance plan request. Hence request will not be processed. | +| `PAYR-1404` | No treatment provided for policy <policy_code> under any speciality. Please reach out to technical support team. | +| `PAYR-1405` | No enrolled hospital found for HFR id <hfr_id> or sender id <sender_code>. Please reach out to technical support team. | +| `PAYR-1406` | Existing request with correlation id %s is in progress with the payer. Hence this request will not be accepted until the execution for previous request is complete. Please wait for 15 - 60 minutes to allow the execution of previous requests. For further assistance, please reach out to technical support team. | +| `PAYR-1501` | Value type received as %s for category - ONS and code - PSP for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - ONS and code - PSP combination is used to get the surgery date. So the surgery date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - PSP. | +| `PAYR-1502` | Value type received as %s for category - ONS and code - ADDD for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - ONS and code - ADDD combination is used to get the admission date. So the admission date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - ADDD. | +| `PAYR-1503` | Value type received as %s for category - ONS and code - DTM for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - ONS and code - DTM combination is used to get the death date. So the death date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - DTM. | +| `PAYR-1504` | Value type received as %s for category - NMI and code - CQD for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - NMI and code - CQD combination is used to get the overall case remarks for query response. So the case remarks for query response should be sent as a string value, adhering to the NRCES standards, with the category - NMI and code - CQD. | +| `PAYR-1505` | Category received as %s and code received as %s for item with sequence %s in supporting info in claim resource, where the reference value redirects to Questionnaire Response resource in the FHIR bundle. To include a policy/case level Questionnaire Response, in supporting info list there should be an entry with category - INF and code - ODN , and the value as reference. This reference value should refer to a resource of Questionnaire Response in the FHIR bundle. To include response for any STG questionnaire, in supporting info list there should be an entry with category - STG, and the value as reference | +| `PAYR-1506` | Invalid gender received for new born patient. Please try agian with valid gender data as it is mandatory for PMJAY in new born case. Please refer to the valid gender values at https://hl7.org/fhir/R4/valueset-administrative-gender.html | +| `PAYR-1507` | Invalid date of birth received for new born patient. Please try agian with valid date of birth as it is mandatory for PMJAY in new born case. | +| `PAYR-1508` | Invalid resource received for new born patient for url %s. Please try agian with valid Patient resource for the link reference as linked Patient resource is mandatory for PMJAY in new born case | +| `PAYR-1509` | Invalid attachment received for new born patient. Please try agian with valid attachment as attachment is mandatory for PMJAY in new born case | +| `PAYR-1510` | Invalid parameter code received. Please check and try again with a valid parameter code | +| `PAYR-1511` | Invalid parameter value received. Please check and try again with a valid parameter value | +| `PAYR-1512` | Invalid resource received for patient for url %s. Please try agian with valid Patient resource for the reference | +| `PAYR-1513` | Invalid diagnosis received in DiagnosisComponent. In DiagnosisComponent, diagnosis should be sent as CodeableConcept. Please try agian with valid data | +| `PAYR-1514` | Value type received as %s for category - DIS for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - DIS is used to get the discharge related information. So the discharge information should be sent as string value, with value representing discharge stage (After Surgery / Before Surgery / During Surgery), with the category - DIS and code - DTH/LAMA/DAMA/DTM | +| `PAYR-1515` | Invalid name received for organization resource with url %s. Name is mandatory for organization resource. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html | +| `PAYR-1516` | No event found for api-caller-id %s and correlation id %s for sender code %s. Hence error response willnot be accepted. | +| `PAYR-1517` | Invalid error structure received for NHCX error. Protocol response structure is expected, but received JWEPayloadResponse. | +| `PAYR-1518` | No input parameters received for task resource. Input parameters are expected for task resource, but not received. Please try again with valid data. | +| `PAYR-1519` | No type found for task input parameters. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html | +| `PAYR-1520` | Invalid resource received for communication for url %s. Please try agian with valid Communication resource for the reference. | + +## What the live payer sent that the sheets do not say + +The SHA HP sandbox run recorded in PMJAY Sandbox Run met three codes whose +live message is not the one in the tables above. The tables keep the sheet's +message; the live one is here. + +| Code | The sheet says | The sandbox sent | What it meant | +| :---- | :---- | :---- | :---- | +| `PAYR-1245` | Rule failure. | Only one conservative procedure can be booked for a case | An enhancement added a second `Conservative` package | +| `PAYR-1322` | No active case found for the given case number. | Active instance found for case number | A second request on a case while the first was still queued | +| `ERR-PYR-CLM-007` | On no sheet | No prior preauthorization or claim record found for case number | The claim went out under a number of its own, not the preauthorisation's | + +`PAYR-1322` is the one to watch: the sheet and the live message point opposite +ways. Act on the live reading and wait for the open request to be decided. +`PAYR-1245` is one of three codes the sheet gives only as "Rule failure", with +`PAYR-1111` and `PAYR-1354`, and the live message names the rule. None of the +live messages is published; confirm them with the payer before you key logic +on them. + +## Denial codes are a separate thing again + +A refusal stops a message. A denial decides a case. The denial families, +`ClaimError-1` to `ClaimError-28` and `PreauthError-1` to `PreauthError-15` +with no 14 defined, arrive inside an adjudicated `ClaimResponse` and are the +adjudicator's reason, not a fault in what you sent. They belong on the appeal +screen. Codes and Value Sets in the FHIR Reference lists them. + +## Which desk gets which + +| Family | Who acts | +| :---- | :---- | +| `NHCX-` | The integration team. The message did not arrive | +| `PAYR-10xx` | The integration team. Structural | +| `ERR-PYR-CLM-007` | The integration team. The claim was sent under the wrong case number | +| `PAYR-11xx` to `PAYR-14xx` | Read the message. Some name a field, some name a policy fact. The band alone does not decide | +| Standard `PAYR-1001` to `PAYR-1020` | The claims desk, in the payer's own words | +| `ClaimError-`, `PreauthError-` | The claims desk, on the appeal screen | + +Show the payer's sentence verbatim in every case. The reference payer's +messages already name the field, the code or the case number, and a system that +rewrites them into a generic failure throws away the only diagnosis available. diff --git a/site/docs/nhcx/v1/reference/fhir/_category_.json b/site/docs/nhcx/v1/reference/fhir/_category_.json new file mode 100644 index 000000000..2107dc6b3 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "FHIR bundles", + "position": 30 +} diff --git a/site/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall.md b/site/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall.md new file mode 100644 index 000000000..2e0a01395 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall.md @@ -0,0 +1,594 @@ +--- +title: Cancel, reprocess and shortfall +sidebar_label: Cancel, reprocess and shortfall +sidebar_position: 15 +description: Task-based cancel (`cancel`), reprocess (`reprocess`), balance release (`release`) and `nullify` +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/15-Cancel, Reprocess and Shortfall.md +generated: true +--- + +# Cancel, reprocess and shortfall + +The post-decision exchanges. All are `Task` bundles on `/v1/task/submit`, answered on `/v1/task/on_submit`, and `Task.code` with its reason is the only thing that tells them apart. + +## Cancel + +Sent on `/v1/task/submit`, workflow PC01. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 3 | `Organization (pay)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `status` | `requested` | +| `intent` | `order` | +| `code.coding[]` | `cancel` in `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `authoredOn` | `2026-09-10T23:52:03+05:30` | +| `requester` | reference `https://nhcx.abdm.gov.in/provider` | +| `owner` | reference `https://nhcx.abdm.gov.in/payer` | +| `description` | `Treatment plan changed; withdrawn.` | +| `reasonCode.coding[]` | `treatmentplanchanged` Treatment plan changed during hospitalization in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | +| `input[]` | valueString `NM-26-0SE00002I` | +| `input[].type.coding[]` | `claimNumber` ClaimNumber in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code` | +| | `intimationNumber` Intimation Number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code` | + +#### 2. Organization (prov) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `IN1910000151` | +| `identifier[].type.coding[]` | `NPI` National provider identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `prov` Healthcare Provider in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `KyroCare Multispeciality Hospital` | + +#### 3. Organization (pay) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `1000004805` | +| `identifier[].type.coding[]` | `NIIP` National Insurance Payor Identifier (Payor) in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `pay` Payer in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `Sandbox Payer` | + +## Reprocess + +Sent on `/v1/task/submit`, workflow 36. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 3 | `Organization (pay)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `status` | `requested` | +| `intent` | `order` | +| `code.coding[]` | `reprocess` in `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `authoredOn` | `2026-09-10T23:53:27+05:30` | +| `requester` | reference `https://nhcx.abdm.gov.in/provider` | +| `owner` | reference `https://nhcx.abdm.gov.in/payer` | +| `description` | `Package rate revised; please reassess the approved amount.` | +| `reasonCode.coding[]` | `claimrejected` Reprocess request due to claim rejected by payer in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | +| `basedOn[]` | display `Claim NM-26-0SE00002L` | +| `basedOn[].identifier` | system `https://nhcx.abdm.gov.in`, value `NM-26-0SE00002L` | +| `basedOn[].identifier.type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `input[]` | valueString `NM-26-0SE00002L` | +| `input[].type.coding[]` | `claimNumber` ClaimNumber in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code` | +| | `intimationNumber` Intimation Number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code` | +| `for.identifier` | value `MRAV1985001` | +| `for.identifier.type.coding[]` | `MB` Member Number in `http://terminology.hl7.org/CodeSystem/v2-0203` | + +#### 2. Organization (prov) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `IN1910000151` | +| `identifier[].type.coding[]` | `NPI` National provider identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `prov` Healthcare Provider in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `KyroCare Multispeciality Hospital` | + +#### 3. Organization (pay) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `1000004805` | +| `identifier[].type.coding[]` | `NIIP` National Insurance Payor Identifier (Payor) in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `pay` Payer in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `Sandbox Payer` | + +## Release + +Sent on `/v1/task/submit`. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 3 | `Organization (pay)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `status` | `requested` | +| `intent` | `order` | +| `code.coding[]` | `release` in `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `description` | `Release the balance amount for claim EO26AA2700001` | +| `authoredOn` | `2026-03-05T11:20:00+05:30` | +| `requester` | reference `https://nhcx.abdm.gov.in/provider` | +| `owner` | reference `https://nhcx.abdm.gov.in/payer` | +| `reasonCode.coding[]` | `partialpayment` Reprocess request due to partial payment by payer in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | +| `basedOn[]` | display `Claim EO26AA2700001` | +| `basedOn[].identifier` | system `https://nhcx.abdm.gov.in`, value `EO26AA2700001` | +| `basedOn[].identifier.type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `input[]` | valueString `EO26AA2700001` | +| `input[].type.coding[]` | `claimNumber` ClaimNumber in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code` | +| | `amount` Amount in `https://nhcx.abdm.gov.in/task-input-type` | +| `input[].valueMoney` | value `1650`, currency `INR` | + +#### 2. Organization (prov) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `IN1910000151` | +| `identifier[].type.coding[]` | `NPI` National provider identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `prov` Healthcare Provider in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `Facility Name` | + +#### 3. Organization (pay) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `1518` | +| `identifier[].type.coding[]` | `NIIP` National Insurance Payor Identifier (Payor) in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `pay` Payer in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `Insurance Company` | + +## Cancellation done + +Sent on `/v1/task/on_submit`, workflow PC02. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | none declared; NRCeS [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `ClaimResponse` | none declared; NRCeS [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html) | +| 3 | `Patient` | none declared; NRCeS [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 4 | `Organization (pay)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Organization (prov)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 6 | `Coverage` | none declared; NRCeS [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `status` | `completed` | +| `intent` | `order` | +| `code.coding[]` | `approve` Activate/approve the focal resource in `http://hl7.org/fhir/CodeSystem/task-code` | +| `description` | `Pre-authorisation withdrawn by 1000003463@hcx: Treatment plan changed; withdraw…` | +| `authoredOn` | `2026-09-10T23:52:05+05:30` | +| `requester` | reference `` | +| `owner` | reference `` | +| `output[].type.coding[]` | `include` Include in `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` | +| `output[].valueReference` | reference `` | + +#### 2. ClaimResponse + +NRCeS profile: [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system ``, value `NM-26-0SE00002I` | +| `identifier[].type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `status` | `active` | +| `type.coding[]` | `737481003` Inpatient care management (procedure) in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-claim-type` | +| `use` | `preauthorization` | +| `patient` | reference `` | +| `created` | `2026-09-10T23:52:05+05:30` | +| `insurer` | reference `` | +| `requestor` | reference `` | +| `outcome` | `complete` | +| `disposition` | `Pre-authorisation withdrawn by 1000003463@hcx: Treatment plan changed; withdraw…` | +| `payeeType.coding[]` | `provider` Provider in `http://terminology.hl7.org/CodeSystem/payeetype` | +| `adjudication[].category.coding[]` | `status` Status | +| `adjudication[].reason.coding[]` | `cancelled` Cancelled | +| `total[].category.coding[]` | `benefit` Benefit Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `submitted` Submitted Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| `total[].amount` | value `150000` | + +The `Patient`, `Organization`, `Coverage` entries are shaped as in the chapters that introduce them. + +## Reprocess acknowledged + +Sent on `/v1/task/on_submit`, workflow 37. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | none declared; NRCeS [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `ClaimResponse` | none declared; NRCeS [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html) | +| 3 | `Patient` | none declared; NRCeS [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 4 | `Organization (pay)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Organization (prov)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 6 | `Coverage` | none declared; NRCeS [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `status` | `accepted` | +| `intent` | `order` | +| `code.coding[]` | `approve` Activate/approve the focal resource in `http://hl7.org/fhir/CodeSystem/task-code` | +| `description` | `Claim reopened for reprocessing (round 1) at the request of 1000003463@hcx: Pac…` | +| `authoredOn` | `2026-09-10T23:53:28+05:30` | +| `requester` | reference `` | +| `owner` | reference `` | +| `output[].type.coding[]` | `include` Include in `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` | +| `output[].valueReference` | reference `` | + +#### 2. ClaimResponse + +NRCeS profile: [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system ``, value `NM-26-0SE00002L` | +| `identifier[].type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `status` | `active` | +| `type.coding[]` | `737481003` Inpatient care management (procedure) in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-claim-type` | +| `use` | `claim` | +| `patient` | reference `` | +| `created` | `2026-09-10T23:53:28+05:30` | +| `insurer` | reference `` | +| `requestor` | reference `` | +| `outcome` | `queued` | +| `disposition` | `Claim reopened for reprocessing (round 1) at the request of 1000003463@hcx: Pac…` | +| `payeeType.coding[]` | `provider` Provider in `http://terminology.hl7.org/CodeSystem/payeetype` | +| `adjudication[].category.coding[]` | `status` Status | +| `adjudication[].reason.coding[]` | `submitted` Submitted | +| `total[].category.coding[]` | `benefit` Benefit Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `submitted` Submitted Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| `total[].amount` | value `0` | +| | value `150000` | + +The `Patient`, `Organization`, `Coverage` entries are shaped as in the chapters that introduce them. + +## Rules + +### 1. Cancel + +`Task.code` `cancel`, a reason from `ndhm-reason-code` (`treatmentplanchanged`, `patientrequest`, `financialconstraints`, `alternativetreatment`, `duplicateclaim`, `administrativeerror`, `other`), and the inputs `claimNumber` and `intimationNumber`. + +### 2. Reprocess + +`Task.code` `reprocess`, reason `claimrejected` for a rejected claim or `partialpayment` for one paid short, `basedOn` naming the claim by its `CLN` identifier, `for` the member, and the inputs `claimNumber` and `intimationNumber`, spelled so. + +### 3. Release + +`Task.code` `release`, reason `partialpayment`, with the claim number and the amount sought as a `valueMoney` input. + +### 4. Nullify + +The Reprocess sheet of the requests-and-responses workbook gives `Task.code` on `/v1/task/submit` as `reprocess`, `cancel`, `release` or `nullify`, as the use case needs, each with a `ClaimNumber` input carrying the claim number and `Task.status` `requested`; the answer is a `Task` whose output is the `ClaimResponse`. The provider sandbox exit checklist names the same four codes. The value sets describe `nullify` as closing a claim the provider submitted. No sample bundle, reason code or workflow code is published for it. + +### 5. Suspend + +`suspend` appears only as a code. The value sets list it, glossed "suspend the preauthorization or claim that was submitted by provider", beside the task output `claimsuspended`. No exchange carries it: no request shape, answer or workflow code is published. + +### 6. The answer + +A `Task` whose `output` of type `include` references a `ClaimResponse` in the same bundle. Read the result from that `ClaimResponse`'s adjudication reason, not from `outcome` and not from `Task.code`. A cancellation is `completed` with reason `cancelled`; a reprocess is `accepted` with the `ClaimResponse` `queued`, and the new verdict follows on the claim's own thread. + +### 7. Switch on system and code together + +The Task code systems differ between request and response. + +### 8. A cancelled case still reports money + +Zero the figure yourself once the reason reads `cancelled`. + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What changes in the bundle + +#### Cancel + +The PMJAY bundle has the same resources, elements and systems as the generic one. + +#### Reprocess + +##### Elements PMJAY adds + +| Element | Example | +| :-- | :-- | +| `Task.input[].valueAttachment` | contentType `application/pdf`, title `Medical Superintendent Declaration Form (During Admission)` | + +##### Systems PMJAY binds differently + +| Element | Generic | PMJAY | +| :-- | :-- | :-- | +| `Task.for.identifier.type.coding[]` | `http://terminology.hl7.org/CodeSystem/v2-0203` | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | + +### What PMJAY specifies + +- A shortfall is the reprocess `Task` with reason `partialpayment` and an amount capped at the difference. +- The reprocess carries the supporting document as a `document` input with a `valueAttachment`, and names the member by the `PMJAY` identifier. +- The reprocess is acknowledged on 37; the new verdict then arrives on the claim's own thread. + +### What PMJAY requires + +- Cancel is allowed until the claim is raised, and refused once payment has been initiated (`PAYR-1257`). +- Reprocess once, the moment the rejection arrives, with a supporting document. The Claim Review Committee is final. +- Shortfall only after payment notice 33 has arrived and been acknowledged on 17, once, and never after a reprocess. +- A `Task` coded `status` is not taken (`PAYR-1018`, `PAYR-1008`). Read where a case stands from the payer service instead. + +## Use cases, APIs and data elements + +### B8 Reprocess or cancel (provider) + +One endpoint, several jobs, told apart by the Task's code and reason: reprocess with claimrejected, shortfall with partialpayment, cancel. A reprocess goes on 36 and is acknowledged on 37; a cancel goes on PC01 and is done on PC02. Both carry the input intimationNumber. A supporting document is mandatory on a reprocess. + +| | | +| :-- | :-- | +| **API** | `/v1/task/submit` [`apis/13-other/v1-task-submit.bru`](/docs/nhcx/v1/api/other/endpoints/other-v1-task-submit) | +| **Callback** | `/v1/task/on_submit` [`apis/13-other/v1-task-on-submit.bru`](/docs/nhcx/v1/api/other/endpoints/other-v1-task-on-submit) | +| **Workflow** | PC01 cancel, 36 reprocess or shortfall | +| **Carries JWE** | yes | +| **Focal resource** | `Task` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `PC01` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `PC01` | Preauth Cancel Initiated | provider | `request.initiated` | Cancel an existing preauth | +| `36` | Claim Arbitration Request Submitted | provider | `request.initiated` | Reprocess/Erroneous request, with input intimationNumber; acknowledged on 37 | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `taskCode` | Action Code | Task | `code` | `1..1` | `Task.code.coding[0].code` | `reprocess` | | +| `taskReason` | Appeal Reason Code | Task | `code` | `1..1` | `Task.reasonCode.coding[0].code` | `claimrejected` | | +| `originalCaseNumber` | Original Case Number | Task Input | `string` | `1..1` | `Task.input[0].valueString` | `CL0000000001` | | +| `appealDocument` | Dispute Justification Document | Task Input | `base64Binary` | `1..1` | `Task.input[category=document].valueAttachment.data` | `JVBERi0xLjQK...` | | + +NRCeS profiles: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +### D8 Cancel pre-authorisation (pmjay) + +A Task with code cancel, the case number as input and one of seven reasons: treatmentplanchanged, patientrequest, financialconstraints, alternativetreatment, duplicateclaim, administrativeerror, other. Allowed at any point until the claim is raised. + +| | | +| :-- | :-- | +| **API** | `/v1/task/submit` [`apis/13-other/v1-task-submit.bru`](/docs/nhcx/v1/api/other/endpoints/other-v1-task-submit) | +| **Callback** | `/v1/task/on_submit` [`apis/13-other/v1-task-on-submit.bru`](/docs/nhcx/v1/api/other/endpoints/other-v1-task-on-submit) | +| **Workflow** | PC01 | +| **Carries JWE** | yes | +| **Focal resource** | `Task` | +| **Simulator console** | `/builder?family=preauth&usecase=cancel` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `PC01` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `PC01` | Preauth Cancel Initiated | provider | `request.initiated` | Cancel an existing preauth | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `taskCode` | Action Code | Task | `code` | `1..1` | `Task.code.coding[0].code` | `cancel` | | +| `caseNumber` | Pre-auth Case Number | Task Input | `string` | `1..1` | `Task.input[0].valueString` | `VB26AA2600001` | | + +NRCeS profiles: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +### D11 Reprocess a rejected claim (pmjay) + +An appeal, not a resubmission: a Task with code reprocess and reason claimrejected, a supporting document attached, no amount. Raise it the moment the rejection arrives. Once only; the Claim Review Committee is final. + +| | | +| :-- | :-- | +| **API** | `/v1/task/submit` [`apis/13-other/v1-task-submit.bru`](/docs/nhcx/v1/api/other/endpoints/other-v1-task-submit) | +| **Callback** | `/v1/task/on_submit` [`apis/13-other/v1-task-on-submit.bru`](/docs/nhcx/v1/api/other/endpoints/other-v1-task-on-submit) | +| **Workflow** | 36 | +| **Carries JWE** | yes | +| **Focal resource** | `Task` | +| **Simulator console** | `/builder?family=claim&usecase=reprocess` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `36` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `36` | Claim Arbitration Request Submitted | provider | `request.initiated` | Reprocess/Erroneous request, with input intimationNumber; acknowledged on 37 | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `taskCode` | Task Code | Task | `code` | `1..1` | `Task.code.coding[0].code` | `reprocess` | | +| `taskReason` | Dispute Reason | Task | `code` | `1..1` | `Task.reasonCode.coding[0].code` | `claimrejected` | | +| `claimNumber` | Rejected Claim ID | Task Input | `string` | `1..1` | `Task.input[0].valueString` | `CL26AA2600001` | | + +NRCeS profiles: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +### D12 Claim a shortfall (pmjay) + +The same Task with reason partialpayment and an amount capped at the difference, allowed only after payment notice 33 has arrived and been acknowledged with 17. Once only, and never after a reprocess. + +| | | +| :-- | :-- | +| **API** | `/v1/task/submit` [`apis/13-other/v1-task-submit.bru`](/docs/nhcx/v1/api/other/endpoints/other-v1-task-submit) | +| **Callback** | `/v1/task/on_submit` [`apis/13-other/v1-task-on-submit.bru`](/docs/nhcx/v1/api/other/endpoints/other-v1-task-on-submit) | +| **Workflow** | 36 | +| **Carries JWE** | yes | +| **Focal resource** | `Task` | +| **Simulator console** | `/builder?family=claim&usecase=shortfall` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `36` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `36` | Claim Arbitration Request Submitted | provider | `request.initiated` | Reprocess/Erroneous request, with input intimationNumber; acknowledged on 37 | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `taskCode` | Task Code | Task | `code` | `1..1` | `Task.code.coding[0].code` | `reprocess` | | +| `taskReason` | Reason Code | Task | `code` | `1..1` | `Task.reasonCode.coding[0].code` | `partialpayment` | | +| `claimNumber` | Partially Paid Claim ID | Task Input | `string` | `1..1` | `Task.input[0].valueString` | `CL26AA2600001` | | + +NRCeS profiles: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +### C10 Respond to a Task (payer) + +The answer to a reprocess, shortfall or cancel. A cancellation done is PC02 and carries the case's ClaimResponse in its output; a reprocess on 36 is acknowledged on 37 as arbitration. Both payers answer this way. + +| | | +| :-- | :-- | +| **API** | `/v1/task/on_submit` [`apis/13-other/v1-task-on-submit.bru`](/docs/nhcx/v1/api/other/endpoints/other-v1-task-on-submit) | +| **Callback** | `/v1/task/submit` [`apis/13-other/v1-task-submit.bru`](/docs/nhcx/v1/api/other/endpoints/other-v1-task-submit) | +| **Workflow** | 251 acknowledged, 252 approved, 253 rejected, 254 queried, PC02 cancelled, 37 arbitration acknowledged | +| **Carries JWE** | yes | +| **Focal resource** | `Task` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1518@hcx` | +| `x-hcx-recipient_code` | `1000004446@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `252` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `response.complete` | +| `x-hcx-ben-abha-id` | `91711234567890` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `251` | Reprocess Request Received | payer | `response.complete` | Reprocess request received | +| `252` | Reprocess Request Approved | payer | `response.complete` | Reprocess request approved | +| `253` | Reprocess Request Rejected | payer | `response.complete` | Reprocess request rejected | +| `254` | Reprocess Request Queried | payer | `request.initiated` | Reprocess request queried | +| `PC02` | Preauthorization Cancellation Accomplished | status sheet only | `response.complete` | | +| `37` | Claim Arbitration Acknowledgement | status sheet only | `response.complete` | | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `taskStatus` | Task Status | Task | `code` | `1..1` | `Task.status` | `completed` | | +| `outputDecision` | Decision Reference | Task Output | `reference` | `0..1` | `Task.output[0].valueReference.reference` | `ClaimResponse/cr-reprocess-approved` | | + +NRCeS profiles: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). diff --git a/site/docs/nhcx/v1/reference/fhir/claim-query-and-answer.md b/site/docs/nhcx/v1/reference/fhir/claim-query-and-answer.md new file mode 100644 index 000000000..66af70757 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/claim-query-and-answer.md @@ -0,0 +1,445 @@ +--- +title: Claim query and answer +sidebar_label: Claim query and answer +sidebar_position: 14 +description: Claim query updates (wf 27 / 151) +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/14-Claim Query and Answer.md +generated: true +--- + +# Claim query and answer + +The payer asking for something before it adjudicates a claim. A private insurer asks through a communication; PMJAY asks in the claim response and takes the whole claim back as the answer. + +## The query + +Sent on `/v1/communication/request`, workflow 27. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `CommunicationRequest` | [CommunicationRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CommunicationRequest.html) | +| 3 | `Claim` | [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html) | +| 4 | `Patient` | [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 5 | `Organization (ins)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 6 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 7 | `Practitioner` | [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html) | +| 8 | `Coverage` | [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `status` | `requested` | +| `intent` | `order` | +| `reasonCode.coding[]` | `additionalinfo` Additional Information Request in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | +| `code.coding[]` | `poll` in `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `description` | `Share the final bill breakup and the discharge summary.` | +| `authoredOn` | `2026-09-10T23:52:39+05:30` | +| `requester` | reference `urn:uuid:39cd4b51-bddd-5cc1-a65a-6fa4a2a83cb5`, display `Organization` | +| `owner` | reference `urn:uuid:84d112ec-041c-57f8-986c-6619ccd8245e`, display `Organization` | +| `input[].type.coding[]` | `include` in `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` | +| `input[].valueReference` | reference `urn:uuid:e6c95fe2-3bd5-5c9f-bf78-47959029cfe2`, display `CommunicationRequest` | + +#### 2. CommunicationRequest + +NRCeS profile: [CommunicationRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CommunicationRequest.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | value `NM-26-0SE00002K` | +| `basedOn[]` | reference `urn:uuid:5c997608-ee6c-5496-9fdb-f8415e3eb8d5`, display `Claim-claim` | +| `status` | `active` | +| `category[].coding[]` | `alert` in `http://terminology.hl7.org/CodeSystem/communication-category` | +| `priority` | `routine` | +| `payload[]` | contentString `Share the final bill breakup and the discharge summary.` | +| `authoredOn` | `2026-09-10T23:52:39+05:30` | +| `requester` | reference `urn:uuid:39cd4b51-bddd-5cc1-a65a-6fa4a2a83cb5`, display `Organization` | +| `recipient[]` | reference `urn:uuid:84d112ec-041c-57f8-986c-6619ccd8245e`, display `Organization` | +| `sender` | reference `urn:uuid:39cd4b51-bddd-5cc1-a65a-6fa4a2a83cb5`, display `Organization` | +| `reasonCode[]` | text `Share the final bill breakup and the discharge summary.` | +| `reasonCode[].coding[]` | `additionalinfo` Additional Information Request in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | + +The `Claim`, `Patient`, `Organization`, `Practitioner`, `Coverage` entries are shaped as in the chapters that introduce them. + +## The answer + +Sent on `/v1/communication/on_request`, workflow 27, echoed. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `Communication` | [Communication](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Communication.html) | +| 3 | `CommunicationRequest` | [CommunicationRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CommunicationRequest.html) | +| 4 | `Claim` | [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html) | +| 5 | `Patient` | [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 6 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 7 | `Organization (pay)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 8 | `Practitioner` | [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html) | +| 9 | `Coverage` | [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `status` | `completed` | +| `intent` | `order` | +| `code.coding[]` | `deliver` in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-codes` | +| `authoredOn` | `2026-09-10T23:52:45+05:30` | +| `requester` | reference `https://nhcx.abdm.gov.in/provider`, display `Organization` | +| `owner` | reference `https://nhcx.abdm.gov.in/payer`, display `Organization` | +| `input[].type.coding[]` | `include` in `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` | +| `input[].valueReference` | reference `urn:uuid:6840ec3f-7126-4bfc-8a56-c2a2e9576d8d`, display `Communication` | +| `reasonCode.coding[]` | `additionalinfo` Additional Information Request in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | + +#### 2. Communication + +NRCeS profile: [Communication](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Communication.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | value `NM-26-0SE00002K` | +| `basedOn[]` | reference `urn:uuid:e6c95fe2-3bd5-5c9f-bf78-47959029cfe2`, display `CommunicationRequest` | +| `inResponseTo[]` | reference `urn:uuid:e6c95fe2-3bd5-5c9f-bf78-47959029cfe2`, display `CommunicationRequest` | +| `about[]` | reference `https://nhcx.abdm.gov.in/claim/request`, display `Claim urn:uuid:5c997608-ee6c-5496-9fdb-f8415e3eb8d5` | +| `status` | `completed` | +| `category[].coding[]` | `notification` in `http://terminology.hl7.org/CodeSystem/communication-category` | +| `priority` | `routine` | +| `recipient[]` | reference `https://nhcx.abdm.gov.in/payer`, display `Organization` | +| `sender` | reference `https://nhcx.abdm.gov.in/provider`, display `Organization` | +| `payload[]` | contentString `Final bill and discharge summary attached.` | +| `payload[].contentAttachment` | contentType `application/pdf`, title `Proof of Identity (Aadhaar / Passport / Voter ID)`, creation `2026-09-10T23:52:21+05:30` | +| | contentType `application/pdf`, title `Medical Certificate / Doctor Referral`, creation `2026-09-10T23:52:21+05:30` | +| | contentType `application/pdf`, title `Radiology / X-Ray / CT / MRI Scan Reports`, creation `2026-09-10T23:52:21+05:30` | +| | and 6 more | +| `payload[].extension[]` | url ``, valueString `POI` | +| | url ``, valueString `CER` | +| | url ``, valueString `RAD` | +| | and 6 more | + +The `CommunicationRequest`, `Claim`, `Patient`, `Organization`, `Practitioner`, `Coverage` entries are shaped as in the chapters that introduce them. + +## Rules + +### 1. The generic query + +A `Task` coded `poll`, reason `additionalinfo`, with an `include` input referencing a `CommunicationRequest` whose `basedOn` names the claim. Sent on `/v1/communication/request` under 27. + +### 2. The generic answer + +A `Task` coded `deliver` in `ndhm-task-codes`, `completed`, with an `include` input referencing a `Communication` whose `basedOn` names the request and whose `payload` carries the message and the documents. Posted on `/v1/communication/on_request`, echoing the correlation id and workflow id. + +### 3. Keep attachments on their codes + +When rebuilding a bundle to answer a query, key each attachment to its document code as you assemble it, and check the pairing before you send. + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What changes in the bundle + +#### The query + +PMJAY uses a different bundle for this step, headed by `ClaimResponse` rather than `Task`. + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `ClaimResponse` | none declared; NRCeS [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html) | +| 2 | `Patient` | none declared; NRCeS [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 3 | `Organization (pay)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 4 | `Organization (prov)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Coverage` | none declared; NRCeS [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | + +###### 1. ClaimResponse + +NRCeS profile: [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://hcx.pmjay.gov.in/v1/preauthorization`, value `NM-26-0SF00002T` | +| `identifier[].type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `status` | `active` | +| `use` | `claim` | +| `patient` | reference `https://payer.nha.gov.in/claim/v1/claim/on_submit/claimresponse/patient/PMJAY00…` | +| `created` | `2026-09-11T00:04:37+05:30` | +| `insurer` | reference `https://payer.nha.gov.in/claim/v1/claim/on_submit/claimresponse/organization/pa…` | +| `requestor` | reference `https://payer.nha.gov.in/claim/v1/claim/on_submit/claimresponse/organization/pr…` | +| `outcome` | `partial` | +| `disposition` | `query` | +| `payeeType.coding[]` | `provider` Provider in `http://terminology.hl7.org/CodeSystem/payeetype` | +| `item[]` | id `Item/Item/1`, itemSequence `1` | +| `item[].adjudication[].category.coding[]` | `submitted` Submitted Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `eligible` Eligible Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `reason` Reason for Adjudication in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | and 3 more | +| `item[].adjudication[].amount` | value `1800` | +| | value `2070` | +| `item[].adjudication[].reason.coding[]` | display ` : null` | +| | `Queried` Queried | +| `item[].adjudication[]` | value `100` | +| | value `0` | +| `adjudication[].category.coding[]` | `status` Status | +| `adjudication[].reason.coding[]` | `queried` Queried | +| `total[].category.coding[]` | `benefit` Benefit Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `submitted` Submitted Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `tax` Tax in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | and 2 more | +| `total[].amount` | value `0` | +| | value `1800` | +| | value `2070` | +| `total[]` | id `PMJAY0000X/PMJAY-T` | + +The `Patient`, `Organization`, `Coverage` entries are shaped as in the chapters that introduce them. + +#### The answer + +PMJAY uses a different bundle for this step, headed by `Claim` rather than `Task`. + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Claim` | [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html) | +| 2 | `Patient` | [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 3 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 4 | `Organization (pay)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Coverage` | [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | +| 6 | `Practitioner` | [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html) | +| 7 | `Procedure` | [Procedure](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Procedure.html) | +| 8 | `QuestionnaireResponse` | `QuestionnaireResponse`, which NRCeS does not publish; base FHIR [QuestionnaireResponse](https://hl7.org/fhir/R4/questionnaireresponse.html) | +| 9 | `QuestionnaireResponse` | `QuestionnaireResponse`, which NRCeS does not publish; base FHIR [QuestionnaireResponse](https://hl7.org/fhir/R4/questionnaireresponse.html) | +| 10 | `QuestionnaireResponse` | `QuestionnaireResponse`, which NRCeS does not publish; base FHIR [QuestionnaireResponse](https://hl7.org/fhir/R4/questionnaireresponse.html) | +| 11 | `QuestionnaireResponse` | `QuestionnaireResponse`, which NRCeS does not publish; base FHIR [QuestionnaireResponse](https://hl7.org/fhir/R4/questionnaireresponse.html) | +| 12 | `QuestionnaireResponse` | `QuestionnaireResponse`, which NRCeS does not publish; base FHIR [QuestionnaireResponse](https://hl7.org/fhir/R4/questionnaireresponse.html) | +| 13 | `QuestionnaireResponse` | `QuestionnaireResponse`, which NRCeS does not publish; base FHIR [QuestionnaireResponse](https://hl7.org/fhir/R4/questionnaireresponse.html) | + +###### 1. Claim + +NRCeS profile: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `NM-26-0SF00002T` | +| `identifier[].type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `status` | `active` | +| `type.coding[]` | `737481003` Inpatient care management (procedure) in `http://snomed.info/sct` | +| `use` | `claim` | +| `patient` | reference `https://nhcx.abdm.gov.in/patient` | +| `billablePeriod` | start `2026-09-10T00:00:00+05:30`, end `2026-09-10T00:00:00+05:30` | +| `created` | `2026-09-11T00:04:45+05:30` | +| `insurer` | reference `https://nhcx.abdm.gov.in/payer` | +| `provider` | reference `https://nhcx.abdm.gov.in/provider` | +| `priority.coding[]` | `normal` Normal in `http://terminology.hl7.org/CodeSystem/processpriority` | +| `careTeam[]` | sequence `1` | +| `careTeam[].provider` | reference `https://nhcx.abdm.gov.in/practitioner` | +| `careTeam[].role.coding[]` | `primary` Primary provider in `http://terminology.hl7.org/CodeSystem/claimcareteamrole` | +| `careTeam[].qualification.coding[]` | `394802001` General medicine in `http://snomed.info/sct` | +| `supportingInfo[]` | id `SupportingInformation/1`, sequence `1` | +| | id `SupportingInformation/2`, sequence `2` | +| | id `SupportingInformation/3`, sequence `3` | +| | and 24 more | +| `supportingInfo[].category.coding[]` | `INV` Document Type - Investigation in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | `HDS` Hospital discharge summary in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | `ONS` Period, start or end dates of aspects of the Condition. (e.g. admission, discha… in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | and 4 more | +| `supportingInfo[].code.coding[]` | `ODN` Death Certificate in `https://nhcx.abdm.gov.in/document-code` | +| | `ODN` Clinical Note/Death Summary in `https://nhcx.abdm.gov.in/document-code` | +| | `ODN` Mortality audit report in `https://nhcx.abdm.gov.in/document-code` | +| | and 17 more | +| `supportingInfo[].valueAttachment` | contentType `application/pdf`, title `Death Certificate` | +| | contentType `application/pdf`, title `Clinical Note/Death Summary` | +| | contentType `application/pdf`, title `Mortality audit report` | +| | and 10 more | +| `supportingInfo[].valueReference` | reference `https://nhcx.abdm.gov.in/questionnaireresponse/1`, display `Death` | +| | reference `https://nhcx.abdm.gov.in/questionnaireresponse/2`, display `Discharge Against Medical Advice (DAMA)` | +| | reference `https://nhcx.abdm.gov.in/questionnaireresponse/3`, display `Discharge Consent` | +| | and 3 more | +| `diagnosis[]` | sequence `1` | +| `diagnosis[].diagnosisCodeableConcept.coding[]` | `E11.9` Type 2 diabetes mellitus without complications in `http://hl7.org/fhir/sid/icd-10` | +| `diagnosis[].type[].coding[]` | `admitting` Admitting Diagnosis in `http://terminology.hl7.org/CodeSystem/ex-diagnosistype` | +| `diagnosis[].onAdmission.coding[]` | `yes` Yes in `http://terminology.hl7.org/CodeSystem/ex-diagnosis-on-admission` | +| `procedure[]` | id `Procedure/1`, sequence `1`, date `2026-09-10T00:00:00+05:30` | +| `procedure[].type[].coding[]` | `conservative` Conservative in `https://nhcx.abdm.gov.in/procedure-type` | +| `procedure[].procedureReference` | reference `https://nhcx.abdm.gov.in/procedure/1`, display `Pleural Effusion (Pleural Effusion)` | +| `insurance[]` | sequence `1`, focal `true`, preAuthRef `2026091110000795` | +| `insurance[].coverage` | reference `https://nhcx.abdm.gov.in/coverage` | +| `item[]` | id `Item/1`, sequence `1`, factor `1`, careTeamSequence `1`, diagnosisSequence `1`, procedureSequence `1`, informationSequence `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12`, `13`, `14`, `15`, `16`, `17`, `18`, `19`, `20`, `21`, `22`, `23`, `24`, `25`, `26`, `27` | +| `item[].productOrService.coding[]` | `MG0111A` Pleural Effusion (Pleural Effusion) in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-procedure-code` | +| `item[].servicedPeriod` | start `2026-09-10`, end `2026-09-10` | +| `item[].quantity` | value `1` | +| `item[].unitPrice` | value `1800`, currency `INR` | +| `item[].net` | value `1800`, currency `INR` | +| `item[].category.coding[]` | `MG` General Medicine in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-benefit-category` | +| `item[].modifier[].coding[]` | `STRAT006a` Routine Ward | +| `item[].programCode[].coding[]` | `AB-PMJAY` Ayushman Bharat Pradhan Mantri Jan Arogya Yojana (AB-PMJAY) in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-program-code` | +| `total` | value `1800`, currency `INR` | + +###### 8. QuestionnaireResponse + +| Element | Example | +| :-- | :-- | +| `questionnaire` | `https://payer.gov.in/policy/questionnaire/100025` | +| `status` | `completed` | +| `subject` | reference `https://nhcx.abdm.gov.in/patient` | +| `authored` | `2026-09-11T00:04:45+05:30` | +| `item[]` | linkId `100011`, text `Death Stage` | +| | linkId `100098`, text `Death Date` | +| | linkId `100099`, text `Death Certificate` | +| | and 2 more | +| `item[].answer[]` | valueString `Before Surgery/Treatment` | +| | valueDateTime `2026-09-10T18:34:00+05:30` | +| `item[].answer[].valueAttachment` | contentType `application/pdf`, title `Death Certificate` | +| | contentType `application/pdf`, title `Clinical Note/Death Summary` | +| | contentType `application/pdf`, title `Mortality audit report` | + +###### 9. QuestionnaireResponse + +| Element | Example | +| :-- | :-- | +| `questionnaire` | `https://payer.gov.in/policy/questionnaire/100137` | +| `status` | `completed` | +| `subject` | reference `https://nhcx.abdm.gov.in/patient` | +| `authored` | `2026-09-11T00:04:45+05:30` | +| `item[]` | linkId `103020`, text `DAMA Stage` | +| | linkId `101403`, text `In Treatment Photo with Doctor/PMAM` | +| | linkId `100012`, text `Discharge Date` | +| | and 3 more | +| `item[].answer[]` | valueString `Before Surgery/Treatment` | +| | valueDateTime `2026-09-10T18:34:00+05:30` | +| `item[].answer[].valueAttachment` | contentType `application/pdf`, title `In Treatment Photo with Doctor/PMAM` | +| | contentType `application/pdf`, title `Upload Mangalkamana Patra` | +| | contentType `application/pdf`, title `Feedback Form` | + +###### 10. QuestionnaireResponse + +| Element | Example | +| :-- | :-- | +| `questionnaire` | `https://payer.gov.in/policy/questionnaire/100466` | +| `status` | `completed` | +| `subject` | reference `https://nhcx.abdm.gov.in/patient` | +| `authored` | `2026-09-11T00:04:45+05:30` | +| `item[]` | linkId `135477`, text `Medical Superintendent Declaration Form (During Discharge)` | +| `item[].answer[].valueAttachment` | contentType `application/pdf`, title `Medical Superintendent Declaration Form (During Discharge)` | + +###### 11. QuestionnaireResponse + +| Element | Example | +| :-- | :-- | +| `questionnaire` | `https://payer.gov.in/policy/questionnaire/100005` | +| `status` | `completed` | +| `subject` | reference `https://nhcx.abdm.gov.in/patient` | +| `authored` | `2026-09-11T00:04:45+05:30` | +| `item[]` | linkId `100097`, text `Post Treatment Photo with Doctor/PMAM` | +| | linkId `100096`, text `Discharge Summary` | +| | linkId `101799`, text `Discharge Stage` | +| | and 4 more | +| `item[].answer[].valueAttachment` | contentType `application/pdf`, title `Post Treatment Photo with Doctor/PMAM` | +| | contentType `application/pdf`, title `Discharge Summary` | +| | contentType `application/pdf`, title `Feedback Form` | +| `item[].answer[]` | valueString `After Surgery/Treatment` | +| | valueDateTime `2026-09-10T18:34:00+05:30` | +| | valueString `Yes` | + +###### 12. QuestionnaireResponse + +| Element | Example | +| :-- | :-- | +| `questionnaire` | `https://payer.gov.in/policy/questionnaire/100022` | +| `status` | `completed` | +| `subject` | reference `https://nhcx.abdm.gov.in/patient` | +| `authored` | `2026-09-11T00:04:45+05:30` | +| `item[]` | linkId `100088`, text `Hospital Bill` | +| | linkId `15201`, text `Justification Letter` | +| | linkId `103013`, text `Bill Date` | +| | and 4 more | +| `item[].answer[].valueAttachment` | contentType `application/pdf`, title `Hospital Bill` | +| | contentType `application/pdf`, title `Justification Letter` | +| | contentType `application/pdf`, title `Any other document` | +| `item[].answer[]` | valueDateTime `2026-09-10T18:34:00+05:30` | +| | valueString `Recorded.` | + +###### 13. QuestionnaireResponse + +| Element | Example | +| :-- | :-- | +| `questionnaire` | `https://payer.gov.in/policy/questionnaire/100136` | +| `status` | `completed` | +| `subject` | reference `https://nhcx.abdm.gov.in/patient` | +| `authored` | `2026-09-11T00:04:45+05:30` | +| `item[]` | linkId `100115`, text `LAMA Stage` | +| | linkId `101403`, text `In Treatment Photo with Doctor/PMAM` | +| | linkId `100101`, text `Surgery/Treatment Date` | +| | and 2 more | +| `item[].answer[]` | valueString `Before Surgery/Treatment` | +| | valueDateTime `2026-09-10T18:34:00+05:30` | +| | valueString `Yes` | +| `item[].answer[].valueAttachment` | contentType `application/pdf`, title `In Treatment Photo with Doctor/PMAM` | + +The `Patient`, `Organization`, `Coverage`, `Practitioner`, `Procedure` entries are shaped as in the chapters that introduce them. + +### What PMJAY specifies + +- The query is a `ClaimResponse` with `outcome` `partial` and reason `queried` on 27, the question as free text in the item adjudication. +- The answer is a fresh submit of the whole claim, on the same claim number, under 161. + +### What PMJAY requires + +- Answer on 161. A claim query answered on 151, 19 or 16 is refused with `PAYR-1321`. +- The full bundle, rebuilt from your stored submission, never a delta. + +## Use cases, APIs and data elements + +### D10 Answer a claim query (pmjay) + +As D7, on the claim endpoint: the query is a ClaimResponse on 27, the answer a fresh submit on 161. The sandbox refuses 151, 19 and 16 with PAYR-1321. The final adjudication then arrives with outcome complete and, often, a deductible adjudication naming why the eligible amount is less than the claimed one. + +| | | +| :-- | :-- | +| **API** | `/v1/claim/submit` [`apis/05-claim/v1-claim-submit.bru`](/docs/nhcx/v1/api/claim/endpoints/claim-v1-claim-submit) | +| **Callback** | `/v1/claim/on_submit` [`apis/05-claim/v1-claim-on-submit.bru`](/docs/nhcx/v1/api/claim/endpoints/claim-v1-claim-on-submit) | +| **Workflow** | 161 | +| **Carries JWE** | yes | +| **Focal resource** | `Claim` | +| **Simulator console** | `/builder?family=claim&usecase=query-answer` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `161` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | +| `x-hcx-use_case` | `New` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `161` | Claim Doc Query Response | status sheet only | `response.complete` | | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `claimNumber` | Claim Number | Case | `string` | `1..1` | `Claim.identifier[0].value` | `CL26AA2600001` | | +| `workflowId` | Workflow Code | Header | `string` | `1..1` | `Header.x-hcx-workflow_id` | `161` | | + +NRCeS profiles: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html). diff --git a/site/docs/nhcx/v1/reference/fhir/claim-request.md b/site/docs/nhcx/v1/reference/fhir/claim-request.md new file mode 100644 index 000000000..001b386fa --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/claim-request.md @@ -0,0 +1,367 @@ +--- +title: Claim request +sidebar_label: Claim request +sidebar_position: 12 +description: Final claim bundle, `billablePeriod`, discharge evidence, and invoice attachments +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/12-Claim Request.md +generated: true +--- + +# Claim request + +The request for payment once treatment is done. The same `Claim` as the preauthorisation with `use` set to `claim`, carrying the finalised dates, bill and documents. + +Sent on `/v1/claim/submit`, answered on `/v1/claim/on_submit`, workflow 15. + +## The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Claim` | [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html) | +| 2 | `Patient` | [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 3 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 4 | `Organization (pay)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Coverage` | [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | +| 6 | `Practitioner` | [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html) | +| 7 | `Procedure` | [Procedure](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Procedure.html) | + +## Elements + +### 1. Claim + +NRCeS profile: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `NM-26-0SE00002L` | +| `identifier[].type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `status` | `active` | +| `type.coding[]` | `737481003` Inpatient care management (procedure) in `http://snomed.info/sct` | +| `use` | `claim` | +| `patient` | reference `https://nhcx.abdm.gov.in/patient` | +| `billablePeriod` | start `2026-09-10T00:00:00+05:30`, end `2026-09-10T00:00:00+05:30` | +| `created` | `2026-09-10T23:53:21+05:30` | +| `insurer` | reference `https://nhcx.abdm.gov.in/payer` | +| `provider` | reference `https://nhcx.abdm.gov.in/provider` | +| `priority.coding[]` | `normal` Normal in `http://terminology.hl7.org/CodeSystem/processpriority` | +| `careTeam[]` | sequence `1` | +| `careTeam[].provider` | reference `https://nhcx.abdm.gov.in/practitioner` | +| `careTeam[].role.coding[]` | `primary` Primary provider in `http://terminology.hl7.org/CodeSystem/claimcareteamrole` | +| `careTeam[].qualification.coding[]` | `394802001` General medicine in `http://snomed.info/sct` | +| `supportingInfo[]` | id `SupportingInformation/1`, sequence `1` | +| | id `SupportingInformation/2`, sequence `2` | +| | id `SupportingInformation/3`, sequence `3` | +| | and 7 more | +| `supportingInfo[].category.coding[]` | `INV` Document Type - Investigation in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | `HDS` Hospital discharge summary in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | `ONS` Period, start or end dates of aspects of the Condition. (e.g. admission, discha… in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | and 2 more | +| `supportingInfo[].code.coding[]` | `MB` Medical & Pharmacy Bills Itemized in `https://nhcx.abdm.gov.in/document-code` | +| | `IMP` Medical Implant Invoice & Barcode Sticker in `https://nhcx.abdm.gov.in/document-code` | +| | `FCF` Filled NHCX Claim Form (Signed) in `https://nhcx.abdm.gov.in/document-code` | +| | and 7 more | +| `supportingInfo[].valueAttachment` | contentType `application/pdf`, title `Medical & Pharmacy Bills Itemized` | +| | contentType `application/pdf`, title `Medical Implant Invoice & Barcode Sticker` | +| | contentType `application/pdf`, title `Filled NHCX Claim Form (Signed)` | +| | and 2 more | +| `diagnosis[]` | sequence `1` | +| `diagnosis[].diagnosisCodeableConcept.coding[]` | `E11.9` Type 2 diabetes mellitus without complications in `http://hl7.org/fhir/sid/icd-10` | +| `diagnosis[].type[].coding[]` | `admitting` Admitting Diagnosis in `http://terminology.hl7.org/CodeSystem/ex-diagnosistype` | +| `diagnosis[].onAdmission.coding[]` | `yes` Yes in `http://terminology.hl7.org/CodeSystem/ex-diagnosis-on-admission` | +| `procedure[]` | id `Procedure/1`, sequence `1`, date `2026-09-10T00:00:00+05:30` | +| `procedure[].type[].coding[]` | `surgical` Surgical in `https://nhcx.abdm.gov.in/procedure-type` | +| `procedure[].procedureReference` | reference `https://nhcx.abdm.gov.in/procedure/1`, display `Total Knee Replacement (Unilateral)` | +| `insurance[]` | sequence `1`, focal `true`, preAuthRef `CL/26/0SE000107` | +| `insurance[].coverage` | reference `https://nhcx.abdm.gov.in/coverage` | +| `item[]` | id `Item/1`, sequence `1`, factor `1`, careTeamSequence `1`, diagnosisSequence `1`, procedureSequence `1`, informationSequence `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10` | +| `item[].productOrService.coding[]` | `PROC-KNEE-01` Total Knee Replacement (Unilateral) in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-procedure-code` | +| `item[].servicedPeriod` | start `2026-09-10`, end `2026-09-10` | +| `item[].quantity` | value `1` | +| `item[].unitPrice` | value `150000`, currency `INR` | +| `item[].net` | value `150000`, currency `INR` | +| `item[].category.coding[]` | `Surgical` Surgical in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-benefit-category` | +| `total` | value `150000`, currency `INR` | + +### 2. Patient + +NRCeS profile: [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | value `MRAV1985001` | +| | value `91-1234-1234-1234` | +| `identifier[].type.coding[]` | `PMJAY` Pradhan Mantri Jan Aarogya Yojana (PMJAY) ID in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| | `ABHA` Ayushman Bharat Health Account (ABHA) ID in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| | `MB` Member Number in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `name[]` | text `` | +| `telecom[]` | system `phone`, value `9876543210` | +| `gender` | `male` | +| `birthDate` | `1985-06-15` | + +### 3. Organization (prov) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `IN1910000151` | +| `identifier[].type.coding[]` | `NPI` National provider identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `prov` Healthcare Provider in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `KyroCare Multispeciality Hospital` | + +### 4. Organization (pay) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `1000004805` | +| `identifier[].type.coding[]` | `NIIP` National Insurance Payor Identifier (Payor) in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `pay` Payer in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `Sandbox Payer` | + +### 5. Coverage + +NRCeS profile: [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | value `POL7UMU001` | +| `identifier[].type.coding[]` | `NH` National Health Plan Identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `status` | `active` | +| `type.coding[]` | `HIP` health insurance plan policy in `http://terminology.hl7.org/CodeSystem/v3-ActCode` | +| `subscriber` | reference `https://nhcx.abdm.gov.in/patient` | +| `subscriberId` | `MRAV1985001` | +| `beneficiary` | reference `https://nhcx.abdm.gov.in/patient` | +| `relationship.coding[]` | `self` in `http://terminology.hl7.org/CodeSystem/subscriber-relationship` | +| `payor[]` | reference `https://nhcx.abdm.gov.in/payer` | + +### 6. Practitioner + +NRCeS profile: [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `71-8422-5818-7201` | +| | system `https://hpr.abdm.gov.in`, value `71-8422-5818-7201` | +| `identifier[].type.coding[]` | `HPID` Healthcare Professional ID (HPID) in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| | `HPIN` Health Practitioner ID issued by NDHM in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `name[]` | text `Dr. Ananya Rao` | +| `qualification[].code.coding[]` | `MD` Doctor of Medicine in `http://terminology.hl7.org/CodeSystem/v2-0360` | + +### 7. Procedure + +NRCeS profile: [Procedure](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Procedure.html). + +| Element | Example | +| :-- | :-- | +| `status` | `completed` | +| `code` | text `Total Knee Replacement (Unilateral)` | +| `code.coding[]` | `71388002` Procedure (procedure) in `http://snomed.info/sct` | +| `subject` | reference `https://nhcx.abdm.gov.in/patient` | +| `performedDateTime` | `2026-09-10T00:00:00+05:30` | + +## Rules + +### 1. What a claim adds + +The final bill under `MB` and the discharge summary under `HDS`, with the implant invoice, the operation notes and the signed claim form where the plan asks for them. + +### 2. The stay + +`billablePeriod` carries the admission and the discharge. + +### 3. Sequences may have gaps + +Map supporting information by `sequence` and resolve `item.informationSequence` through the map. + +### 4. The amount + +May not exceed what the preauthorisation approved. + +### 5. Cyclic treatment + +One supporting-info entry per cycle, with `timingPeriod`, listed in the item's `informationSequence`, its record referenced from `valueReference`. + +### 6. Newborn + +The parent stays the primary `Patient`; the child is a second `Patient` linked with `link.type` `refer`, with gender and birth date, and a proof of birth under category `DOB`, code `BCF` or `DCB`. + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What changes in the bundle + +#### Resources + +- PMJAY adds 4 `QuestionnaireResponse`. + +##### QuestionnaireResponse + +| Element | Example | +| :-- | :-- | +| `questionnaire` | `https://payer.gov.in/policy/questionnaire/100025` | +| `status` | `completed` | +| `subject` | reference `https://nhcx.abdm.gov.in/patient` | +| `authored` | `2026-09-11T00:25:00+05:30` | +| `item[]` | linkId `100011`, text `Death Stage` | +| | linkId `100098`, text `Death Date` | +| | linkId `100099`, text `Death Certificate` | +| | and 2 more | +| `item[].answer[]` | valueString `Before Surgery/Treatment` | +| | valueDateTime `2026-09-10T18:54:00+05:30` | +| `item[].answer[].valueAttachment` | contentType `application/pdf`, title `Death Certificate` | +| | contentType `application/pdf`, title `Clinical Note/Death Summary` | +| | contentType `application/pdf`, title `Mortality audit report` | + +#### Elements PMJAY adds + +| Element | Example | +| :-- | :-- | +| `Claim.supportingInfo[].valueReference` | reference `https://nhcx.abdm.gov.in/questionnaireresponse/1`, display `Death` | +| | reference `https://nhcx.abdm.gov.in/questionnaireresponse/2`, display `Discharge Consent` | +| | reference `https://nhcx.abdm.gov.in/questionnaireresponse/3`, display `Discharge Information` | +| | and 1 more | +| `Claim.item[].modifier[].coding[]` | `STRAT006a` Routine Ward | +| `Claim.item[].programCode[].coding[]` | `AB-PMJAY` Ayushman Bharat Pradhan Mantri Jan Arogya Yojana (AB-PMJAY) in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-program-code` | + +### What PMJAY specifies + +- Dates ride as supporting information: the stay under category `ONS`, code `ADDD`, the encounter under `OTH`, code `EDT`, and the surgery under code `PSP`, each as a `valueString` in `+05:30`. +- Discharge types `DTH`, `DTM`, `LAMA` and `DAMA` under category `DIS`, with the stage, before, during or after surgery, as the `valueString`. +- LAMA or DAMA before or during surgery voids the approved packages: one item `LM100`, quantity the days admitted, capped by the package's `los`. After surgery the package stays billable. +- A death records its date under category `ONS`, code `DTM`. +- The discharge consent and the other policy questionnaires ride as `QuestionnaireResponse` resources, each referenced from a `supportingInfo` entry. + +### What PMJAY requires + +- Send the claim under the preauthorisation's own number. Refused with `ERR-PYR-CLM-007` otherwise. +- The discharge status under `DIS` and the admission and discharge dates. The claim is refused without them. +- Bill the package alone, at the whole amount. Room rent, consultations and investigations are not items. +- A fresh biometric token at discharge, or the plan's Discharge Consent questionnaire answered. Refused with `PAYR-1363` otherwise. +- `LM100` as the single procedure on LAMA or DAMA before or during surgery (`PAYR-1362`), and the death date under `ONS` / `DTM` (`PAYR-1096`). +- Each cycle's `timingPeriod` matches the biometric capture for that cycle. + +## Use cases, APIs and data elements + +### B5 Submit claim (provider) + +Reimbursement after discharge. The amount may not exceed what the pre-authorisation approved. The acknowledgement on 25 brings the payer's case number. PMJAY takes a claim query answer on 161 only; 151, 19 and 16 are refused with PAYR-1321. + +| | | +| :-- | :-- | +| **API** | `/v1/claim/submit` [`apis/05-claim/v1-claim-submit.bru`](/docs/nhcx/v1/api/claim/endpoints/claim-v1-claim-submit) | +| **Callback** | `/v1/claim/on_submit` [`apis/05-claim/v1-claim-on-submit.bru`](/docs/nhcx/v1/api/claim/endpoints/claim-v1-claim-on-submit) | +| **Workflow** | 15 claim, 161 query answer under PMJAY, 14 provisional discharge where a payer supports one | +| **Carries JWE** | yes | +| **Focal resource** | `Claim` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `15` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | +| `x-hcx-use_case` | `New` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `15` | Claim Request Initiated | provider | `request.initiated` | Final claim submission | +| `161` | Claim Doc Query Response | status sheet only | `response.complete` | | +| `14` | Discharge Submitted | provider | `request.initiated` | Discharge summary submitted | +| `151` | Claim Query Response Submitted | provider | `response.complete` | Response to claim query, as published; the PMJAY sandbox refuses it with PAYR-1321 and takes 161 (Claim Doc Query Response) | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `claimNumber` | Final Claim Number | Case | `string` | `1..1` | `Claim.identifier[0].value` | `CL0000000001` | also at `Bundle.id` | +| `use` | Claim Use | Case | `code` | `1..1` | `Claim.use` | `claim` | | +| `preAuthRef` | Approved Pre-auth Reference | Case | `string` | `1..1` | `Claim.insurance[0].preAuthRef[0]` | `APPR-2026-HP-00891` | | +| `patientName` | Patient Full Name | Beneficiary | `string` | `1..1` | `Patient.name[0].text` | `Ramesh Chandra Sharma` | | +| `memberId` | Scheme / Insurer Member ID | Beneficiary | `string` | `1..1` | `Patient.identifier[type=PMJAY].value` | `PMJAY-HP-2024-998811` | also at `Coverage.subscriberId` | +| `abhaNumber` | ABHA Number | Beneficiary | `string` | `0..1` | `Patient.identifier[type=ABHA].value` | `91234567890123` | | +| `gender` | Gender | Beneficiary | `code` | `1..1` | `Patient.gender` | `male` | code system `http://hl7.org/fhir/administrative-gender` | +| `birthDate` | Date of Birth | Beneficiary | `date` | `1..1` | `Patient.birthDate` | `1982-06-15` | | +| `patientPhone` | Mobile Phone | Beneficiary | `string` | `0..1` | `Patient.telecom[system=phone].value` | `9876543210` | | +| `policyNumber` | Policy Number | Coverage | `string` | `1..1` | `Coverage.identifier[0].value` | `PMJAY/HP/S/G` | | +| `facilityId` | Hospital Facility ID (HFR/NPI) | Provider | `string` | `1..1` | `Organization[type=prov].identifier[system=https://facility.abdm.gov.in].value` | `IN1910000151` | | +| `providerName` | Hospital Name | Provider | `string` | `1..1` | `Organization[type=prov].name` | `Apex Multispeciality Hospital` | | +| `payerId` | Payer Identifier (NIIP) | Payer | `string` | `1..1` | `Organization[type=pay].identifier[system=https://irdai.gov.in].value` | `1000003538` | | +| `payerName` | Payer Name | Payer | `string` | `1..1` | `Organization[type=pay].name` | `National Health Authority - PMJAY` | | +| `practitionerId` | Practitioner ID (HPID/HPIN) | Practitioner | `string` | `1..1` | `Practitioner.identifier[system=https://hpr.abdm.gov.in].value` | `21-8899-4455-6677` | | +| `practitionerName` | Doctor Name | Practitioner | `string` | `1..1` | `Practitioner.name[0].text` | `Dr. Arvind Kumar` | | +| `admissionDate` | Admission Date | Stay | `dateTime` | `1..1` | `Claim.billablePeriod.start` | `2026-02-26T10:00:00+05:30` | | +| `dischargeDate` | Discharge Date | Stay | `dateTime` | `1..1` | `Claim.billablePeriod.end` | `2026-03-02T14:30:00+05:30` | | +| `careSetting` | Care Setting | Stay | `code` | `1..1` | `Claim.type.coding[0].code` | `institutional` | code system `http://terminology.hl7.org/CodeSystem/claim-type` | +| `primaryDiagnosisCode` | Primary Diagnosis (ICD-10) | Clinical | `string` | `1..1` | `Claim.diagnosis[0].diagnosisCodeableConcept.coding[0].code` | `A97.0` | code system `http://hl7.org/fhir/sid/icd-10` | +| `procedureCode` | Package / Procedure Code | Clinical | `string` | `1..1` | `Claim.procedure[0].procedureCodeableConcept.coding[0].code` | `MG004A` | | +| `finalBilledAmount` | Total Claim Amount | Billing | `decimal` | `1..1` | `Claim.total.value` | `15500.00` | | + +NRCeS profiles: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html), [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html), [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html), [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html), [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html). + +### D9 Submit claim (pmjay) + +There is no discharge submission: the claim asserts the discharge and carries its details. Four dates, the discharge type under category DIS with the stage as its value, a fresh biometric token, and LM100 as the single procedure in place of the approved items on a LAMA or DAMA discharge before or during surgery. The amount may not exceed what was approved. + +| | | +| :-- | :-- | +| **API** | `/v1/claim/submit` [`apis/05-claim/v1-claim-submit.bru`](/docs/nhcx/v1/api/claim/endpoints/claim-v1-claim-submit) | +| **Callback** | `/v1/claim/on_submit` [`apis/05-claim/v1-claim-on-submit.bru`](/docs/nhcx/v1/api/claim/endpoints/claim-v1-claim-on-submit) | +| **Workflow** | 15 | +| **Carries JWE** | yes | +| **Focal resource** | `Claim` | +| **Simulator console** | `/builder?family=claim&usecase=submit` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `15` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | +| `x-hcx-use_case` | `New` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `15` | Claim Request Initiated | provider | `request.initiated` | Final claim submission | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `claimNumber` | PMJAY Claim Number | Case | `string` | `1..1` | `Claim.identifier[0].value` | `CL26AA2600001` | | +| `dischargeSummary` | Hospital Discharge Summary (HDS) | Documents | `base64Binary` | `1..1` | `Claim.supportingInfo[category=HDS].valueAttachment.data` | `JVBERi0xLjQK...` | | +| `patientName` | Patient Full Name | Beneficiary | `string` | `1..1` | `Patient.name[0].text` | `Ramesh Chandra Sharma` | | +| `memberId` | Scheme / Insurer Member ID | Beneficiary | `string` | `1..1` | `Patient.identifier[type=PMJAY].value` | `PMJAY-HP-2024-998811` | also at `Coverage.subscriberId` | +| `abhaNumber` | ABHA Number | Beneficiary | `string` | `0..1` | `Patient.identifier[type=ABHA].value` | `91234567890123` | | +| `gender` | Gender | Beneficiary | `code` | `1..1` | `Patient.gender` | `male` | code system `http://hl7.org/fhir/administrative-gender` | +| `birthDate` | Date of Birth | Beneficiary | `date` | `1..1` | `Patient.birthDate` | `1982-06-15` | | +| `patientPhone` | Mobile Phone | Beneficiary | `string` | `0..1` | `Patient.telecom[system=phone].value` | `9876543210` | | +| `facilityId` | Hospital Facility ID (HFR/NPI) | Provider | `string` | `1..1` | `Organization[type=prov].identifier[system=https://facility.abdm.gov.in].value` | `IN1910000151` | | +| `providerName` | Hospital Name | Provider | `string` | `1..1` | `Organization[type=prov].name` | `Apex Multispeciality Hospital` | | +| `payerId` | Payer Identifier (NIIP) | Payer | `string` | `1..1` | `Organization[type=pay].identifier[system=https://irdai.gov.in].value` | `1000003538` | | +| `payerName` | Payer Name | Payer | `string` | `1..1` | `Organization[type=pay].name` | `National Health Authority - PMJAY` | | +| `practitionerId` | Practitioner ID (HPID/HPIN) | Practitioner | `string` | `1..1` | `Practitioner.identifier[system=https://hpr.abdm.gov.in].value` | `21-8899-4455-6677` | | +| `practitionerName` | Doctor Name | Practitioner | `string` | `1..1` | `Practitioner.name[0].text` | `Dr. Arvind Kumar` | | + +NRCeS profiles: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html), [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html), [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html), [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html). diff --git a/site/docs/nhcx/v1/reference/fhir/claim-response.md b/site/docs/nhcx/v1/reference/fhir/claim-response.md new file mode 100644 index 000000000..77373ed06 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/claim-response.md @@ -0,0 +1,210 @@ +--- +title: Claim response +sidebar_label: Claim response +sidebar_position: 13 +description: Claim decisions, item adjudications, and verified rejection bundles (wf 291) +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/13-Claim Response.md +generated: true +--- + +# Claim response + +The payer's adjudication of a submitted claim, on `/v1/claim/on_submit`. The same bundle carries an acknowledgement, an approval, a query and a rejection. + +Sent on `/v1/claim/on_submit`. + +## The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `ClaimResponse` | none declared; NRCeS [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html) | +| 2 | `Patient` | none declared; NRCeS [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 3 | `Organization (pay)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 4 | `Organization (prov)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Coverage` | none declared; NRCeS [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | + +## Elements + +### 1. ClaimResponse + +NRCeS profile: [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system ``, value `NM-26-0SE00002L` | +| `identifier[].type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `status` | `active` | +| `use` | `claim` | +| `patient` | reference `` | +| `created` | `2026-09-10T23:53:32+05:30` | +| `insurer` | reference `` | +| `requestor` | reference `` | +| `outcome` | `complete` | +| `disposition` | `Reprocessed and approved.` | +| `payeeType.coding[]` | `provider` Provider in `http://terminology.hl7.org/CodeSystem/payeetype` | +| `item[]` | id `Item/LI-558aa12a`, itemSequence `1` | +| `item[].adjudication[].category.coding[]` | `submitted` Submitted Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `eligible` Eligible Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `reason` Reason for Adjudication in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | and 1 more | +| `item[].adjudication[].amount` | value `150000` | +| `item[].adjudication[].reason.coding[]` | display `Reprocessed and approved.` | +| | `Approved` Approved | +| `adjudication[].category.coding[]` | `status` Status | +| `adjudication[].reason.coding[]` | `approved` Approved | +| `total[].category.coding[]` | `benefit` Benefit Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `submitted` Submitted Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `eligible` Eligible Amount | +| `total[].amount` | value `150000` | +| `total[]` | id `MRAV1985001/SANDBOX-DEFAULT-01` | + +### 2. Patient + +NRCeS profile: [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system ``, value `MRAV1985001` | +| `identifier[].type.coding[]` | `MB` Member Number in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `name[]` | family `Kumar`, given `Ravi`, text `Ravi Kumar` | +| `gender` | `male` | +| `birthDate` | `1985-06-15` | + +### 3. Organization (pay) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `active` | `true` | +| `identifier[]` | system `https://facility.abdm.gov.in`, value `1000004805` | +| `identifier[].type.coding[]` | `NIIP` National Insurance Payor Identifier (Payor) in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `pay` Payer in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `Sandbox Payer` | + +### 4. Organization (prov) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `active` | `true` | +| `identifier[]` | system `https://facility.abdm.gov.in`, value `IN1910000151` | +| `identifier[].type.coding[]` | `NPI` National provider identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `prov` Healthcare Provider in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `KyroCare Multispeciality Hospital` | + +### 5. Coverage + +NRCeS profile: [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system ``, value `SANDBOX-DEFAULT-01` | +| `identifier[].type.coding[]` | `NH` National Health Plan Identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `status` | `active` | +| `type.coding[]` | `HIP` health insurance plan policy in `http://terminology.hl7.org/CodeSystem/v3-ActCode` | +| `beneficiary` | reference `` | +| `period` | start `2026-01-01T00:00:00+05:30`, end `2026-12-31T00:00:00+05:30` | +| `payor[]` | reference `` | +| `class[]` | id `POL7UMU002`, value `SANDBOX-DEFAULT-01` | +| `class[].type.coding[]` | `XV` Health Plan Identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | + +## The answers + +The same bundle, told apart by the workflow code, `outcome` and the claim-level adjudication reason. + +| Variant | Workflow | outcome | reason | +| :-- | :-- | :-- | :-- | +| Acknowledged | `25` | `queued` | `submitted` Submitted | +| Approved | `26` | `complete` | `approved` Approved | +| Queried | `27` | `partial` | `queried` Queried | +| Rejected | `291` | `error` | `rejected` Rejected | + +## Rules + +### 1. partial is two things + +An acknowledgement and a query are both `partial`. Read the claim-level reason, then `disposition`, then the totals. + +### 2. Deductions + +Item-level `deductible` adjudications carry the amount and the reason. Sum them before reporting an approved figure. + +### 3. Joining + +Join the response to the claim by `identifier.value`. + +### 4. Settlement is separate + +An approval closes adjudication, not the money. The claim closes on the payment notice. + +### 5. Submitted amounts + +Do not reconcile your submitted amount against the payer's `submitted` total; it comes from the payer's own record. + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What changes in the bundle + +PMJAY sends this exchange in the generic shape. + +### What PMJAY specifies + +- `total[]` adds a `tax` line beside `benefit` and `submitted`. +- The adjudication reason carries the desk's audit trail, with mixed date formats. Display it; never parse a timestamp from it. +- A benefit of 0 on a query means undetermined, not refused. + +## Use cases, APIs and data elements + +### C7 Respond to claim (payer) + +The adjudicated claim, item by item, with any deduction and its reason. The acknowledgement on 25 travels as response.partial with the payer's case number. Under PMJAY a query is this ClaimResponse on 27, answered by a fresh submit on 161. + +| | | +| :-- | :-- | +| **API** | `/v1/claim/on_submit` [`apis/05-claim/v1-claim-on-submit.bru`](/docs/nhcx/v1/api/claim/endpoints/claim-v1-claim-on-submit) | +| **Callback** | `/v1/claim/submit` [`apis/05-claim/v1-claim-submit.bru`](/docs/nhcx/v1/api/claim/endpoints/claim-v1-claim-submit) | +| **Workflow** | 25 received, 26 approved, 27 queried, 28 in process, 29 forwarded, 291 denied | +| **Carries JWE** | yes | +| **Focal resource** | `ClaimResponse` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1518@hcx` | +| `x-hcx-recipient_code` | `1000004446@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `26` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `response.complete` | +| `x-hcx-ben-abha-id` | `91711234567890` | +| `x-hcx-debug_flag` | `INFO` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `25` | Claim Request Received | payer | `response.partial`, `response.error` | Final claim received by payer | +| `26` | Claim Request Approved | payer | `response.complete` | Final claim approved | +| `27` | Claim Request Queried | payer | `request.initiated`, `response.partial/complete` | Final claim queried - payer needs additional documents; under PMJAY answer with 161 | +| `28` | Claim Request In Process | payer | `response.partial` | Final claim is being processed by payer | +| `29` | Claim Forwarded | payer | `response.partial` | Claim forwarded to another processing entity | +| `291` | Claim Doc Deny | status sheet only | `response.complete` | | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `outcome` | Claim Outcome | Adjudication | `code` | `1..1` | `ClaimResponse.outcome` | `complete` | | +| `approvedBenefit` | Approved Claim Amount | Financials | `decimal` | `1..1` | `ClaimResponse.total[category=benefit].amount.value` | `15500.00` | | +| `copayAmount` | Beneficiary Co-payment | Financials | `decimal` | `0..1` | `ClaimResponse.total[category=copay].amount.value` | `0.00` | | +| `deductionReason` | Deduction Justification | Adjudication | `string` | `0..1` | `ClaimResponse.item[].adjudication[category=deduction].reason.coding[0].display` | `Non-medical consumables deducted` | | + +NRCeS profiles: [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html). diff --git a/site/docs/nhcx/v1/reference/fhir/codes-and-value-sets.md b/site/docs/nhcx/v1/reference/fhir/codes-and-value-sets.md new file mode 100644 index 000000000..0e5804c52 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/codes-and-value-sets.md @@ -0,0 +1,856 @@ +--- +title: Codes and value sets +sidebar_label: Codes and value sets +sidebar_position: 19 +description: All code systems, bindings, and known NHA discrepancies +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/19-Codes and Value Sets.md +generated: true +--- + +# Codes and value sets + +Every code the bundles carry, grouped by the system it is bound to, then the value sets the specifications define beyond them. The workflow codes are in the Overview's Workflow Codes chapter and are not repeated here. + +## Codes in the bundles + +### `http://hl7.org/fhir/CodeSystem/task-code` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `approve` | Activate/approve the focal resource | `Task.code.coding` | both | + +### `http://hl7.org/fhir/resource-types` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `ClaimResponse` | | `Task.output.type.coding` | generic | + +### `http://hl7.org/fhir/sid/icd-10` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `A97` | Dengue | `Claim.diagnosis.diagnosisCodeableConcept.coding` | generic | +| `E11.9` | Type 2 diabetes mellitus without complications | `Claim.diagnosis.diagnosisCodeableConcept.coding` | both | +| `I46.9` | Cardiac arrest, unspecified | `Claim.diagnosis.diagnosisCodeableConcept.coding` | generic | + +### `http://hl7.org/fhir/ValueSet/payment-type` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `Payment` | Payment | `PaymentReconciliation.detail.type.coding` | both | +| `RF` | RF | `PaymentReconciliation.detail.type.coding` | PMJAY | +| `TDS` | TDS | `PaymentReconciliation.detail.type.coding` | both | + +### `http://hl7.org/fhir/ValueSet/procedure-category` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `LM100` | LAMA DAMA Procedure (LAMA DAMA Procedure) | `InsurancePlan.plan.specificCost.benefit.type.coding` | PMJAY | +| `MG004A` | Dengue fever (Dengue fever) | `InsurancePlan.plan.specificCost.benefit.type.coding` | PMJAY | +| `MG005A` | Chikungunya fever (Chikungunya fever) | `InsurancePlan.plan.specificCost.benefit.type.coding` | PMJAY | +| `MG014A` | Liver abscess (Liver abscess) | `InsurancePlan.plan.specificCost.benefit.type.coding` | PMJAY | +| `MG072C` | Acute Haemodialysis (Acute Haemodialysis) | `InsurancePlan.plan.specificCost.benefit.type.coding` | PMJAY | +| `MO071R` | PemetrexedPemetrexed 500mg/m2 D1 every 21 days (CT for CA Lung) | `InsurancePlan.plan.specificCost.benefit.type.coding` | PMJAY | +| `SB043F` | Hand (Single Stage Amputation) | `InsurancePlan.plan.specificCost.benefit.type.coding` | PMJAY | +| `SBU100` | Unspecified Surgical Package (Unspecified Surgical Package) | `InsurancePlan.plan.specificCost.benefit.type.coding` | PMJAY | +| `SE004A` | Lid Tear Repair (Lid Tear Repair) | `InsurancePlan.plan.specificCost.benefit.type.coding` | PMJAY | +| `SE005A` | Lid Abscess Drainage (Lid Abscess Drainage) | `InsurancePlan.plan.specificCost.benefit.type.coding` | PMJAY | +| `SEU100` | Unspecified Surgical Package (Unspecified Surgical Package ) | `InsurancePlan.plan.specificCost.benefit.type.coding` | PMJAY | +| `SGU100` | Unspecified Surgical Package (Unspecified Surgical Package ) | `InsurancePlan.plan.specificCost.benefit.type.coding` | PMJAY | +| `SL026A` | Tracheostomy (Tracheostomy / Tracheotomy) | `InsurancePlan.plan.specificCost.benefit.type.coding` | PMJAY | +| `SL026B` | Tracheotomy (Tracheostomy / Tracheotomy) | `InsurancePlan.plan.specificCost.benefit.type.coding` | PMJAY | +| `ST009B` | Nerve and/or tendon injury. A. Wound exploration and closure. B. Nerve graft. C… | `InsurancePlan.plan.specificCost.benefit.type.coding` | PMJAY | + +### `http://snomed.info/sct` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `105461009` | Organ donor | `InsurancePlan.coverage.type.coding`, `InsurancePlan.coverage.benefit.type.coding` | generic | +| `223366009` | Healthcare professional (occupation) | `Claim.careTeam.role.coding`, `PractitionerRole.code.coding` | generic | +| `224663004` | Single room (environment) | `InsurancePlan.plan.specificCost.category.coding`, `InsurancePlan.plan.specificCost.benefit.type.coding` | generic | +| `24099007` | Oxygen (substance) | `InsurancePlan.coverage.benefit.type.coding` | generic | +| `307988006` | Medical technician | `PractitionerRole.code.coding` | both | +| `309904001` | Intensive care unit | `Claim.item.productOrService.coding`, `InsurancePlan.coverage.benefit.type.coding` | generic | +| `394658006` | Clinical specialty (qualifier value) | `Claim.careTeam.qualification.coding` | generic | +| `394802001` | General medicine | `Claim.careTeam.qualification.coding` | both | +| `409972000` | Pre-hospital care | `InsurancePlan.coverage.type.coding`, `InsurancePlan.coverage.benefit.type.coding` | generic | +| `414005` | Percutaneous Transluminal Coronary Angioplasty (PTCA) | `InsurancePlan.coverage.benefit.type.coding`, `InsurancePlan.plan.specificCost.benefit.type.coding` | generic | +| `418285008` | Angioplasty of blood vessel | `Claim.procedure.procedureCodeableConcept.coding`, `Claim.item.productOrService.coding` | generic | +| `427189009` | Paediatric Pneumonia, PICU Management | `InsurancePlan.coverage.benefit.type.coding`, `InsurancePlan.plan.specificCost.benefit.type.coding` | generic | +| `49122002` | Ambulance, device (physical object) | `InsurancePlan.coverage.type.coding`, `InsurancePlan.coverage.benefit.type.coding` | generic | +| `60689008` | Home care of patient | `InsurancePlan.plan.specificCost.category.coding`, `InsurancePlan.plan.specificCost.benefit.type.coding` | generic | +| `710967003` | Management of health status after discharge from hospital (procedure) | `InsurancePlan.coverage.type.coding`, `InsurancePlan.coverage.benefit.type.coding` | generic | +| `71388002` | Procedure (procedure) | `Procedure.code.coding` | both | +| `737481003` | Inpatient care management (procedure) | `Claim.type.coding`, `CoverageEligibilityResponse.insurance.item.productOrService.coding` | both | +| `737850002` | Day care case management (procedure) | `InsurancePlan.coverage.type.coding`, `InsurancePlan.coverage.benefit.type.coding` | generic | +| `77343006` | Angiography | `Claim.procedure.procedureCodeableConcept.coding`, `Claim.item.productOrService.coding` | generic | +| `86077009` | Operation for glaucoma | `InsurancePlan.extension.extension.valueCodeableConcept.coding` | generic | +| `87612001` | Blood | `InsurancePlan.coverage.benefit.type.coding` | generic | +| `89100005` | Final diagnosis (discharge) (contextual qualifier) (qualifier value) | `Claim.diagnosis.type.coding` | generic | + +### `http://snomed.info/sct0` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `305056002` | Admission procedure | `CoverageEligibilityResponse.insurance.item.productOrService.coding` | PMJAY | + +### `http://terminology.hl7.org/CodeSystem/adjudication` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `benefit` | Benefit Amount | `ClaimResponse.item.adjudication.category.coding`, `ClaimResponse.total.category.coding` | generic | +| `copay` | CoPay | `ClaimResponse.item.adjudication.category.coding` | generic | +| `eligible` | Eligible Amount | `ClaimResponse.item.adjudication.category.coding`, `ClaimResponse.total.category.coding` | generic | +| `submitted` | Submitted Amount | `ClaimResponse.item.adjudication.category.coding`, `ClaimResponse.total.category.coding` | generic | + +### `http://terminology.hl7.org/CodeSystem/benefit-type` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `benefit` | Benefit | `CoverageEligibilityResponse.insurance.item.benefit.type.coding` | both | + +### `http://terminology.hl7.org/CodeSystem/claimcareteamrole` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `primary` | Primary provider | `Claim.careTeam.role.coding` | both | + +### `http://terminology.hl7.org/CodeSystem/communication-category` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `alert` | | `CommunicationRequest.category.coding` | generic | +| `information` | Information | `Task.reasonCode.coding` | PMJAY | +| `notification` | Notification | `Communication.category.coding`, `CommunicationRequest.category.coding` | both | + +### `http://terminology.hl7.org/CodeSystem/coverage-class` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `plan` | Plan | `Coverage.class.type.coding` | generic | + +### `http://terminology.hl7.org/CodeSystem/ex-benefitcategory` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `30` | Health Benefit Plan Coverage | `CoverageEligibilityResponse.insurance.item.benefit.type.coding` | PMJAY | + +### `http://terminology.hl7.org/CodeSystem/ex-diagnosis-on-admission` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `yes` | Yes | `Claim.diagnosis.onAdmission.coding` | both | + +### `http://terminology.hl7.org/CodeSystem/ex-diagnosistype` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `admitting` | Admitting Diagnosis | `Claim.diagnosis.type.coding` | both | + +### `http://terminology.hl7.org/CodeSystem/financialtaskcode` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `cancel` | | `Task.code.coding` | both | +| `poll` | Poll | `Task.code.coding` | both | +| `release` | | `Task.code.coding` | generic | +| `reprocess` | | `Task.code.coding` | both | +| `status` | | `Task.code.coding` | both | + +### `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `include` | Include | `Task.input.type.coding`, `Task.output.type.coding` | both | +| `status` | Status code | `Task.input.type.coding` | both | + +### `http://terminology.hl7.org/CodeSystem/organization-type` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `ins` | Insurance Company | `Organization.type.coding` | generic | +| `pay` | Payer | `Organization.type.coding` | both | +| `prov` | Healthcare Provider | `Organization.type.coding` | both | + +### `http://terminology.hl7.org/CodeSystem/payeetype` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `provider` | Provider | `ClaimResponse.payeeType.coding` | both | + +### `http://terminology.hl7.org/CodeSystem/paymentstatus` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `cleared` | Cleared | `PaymentNotice.paymentStatus.coding` | generic | +| `paid` | Paid | `PaymentNotice.paymentStatus.coding` | PMJAY | + +### `http://terminology.hl7.org/CodeSystem/processpriority` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `normal` | Normal | `CoverageEligibilityRequest.priority.coding`, `Claim.priority.coding` | both | + +### `http://terminology.hl7.org/CodeSystem/subscriber-relationship` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `self` | Self | `Coverage.relationship.coding` | both | + +### `http://terminology.hl7.org/CodeSystem/v2-0203` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `JHN` | Jurisdictional health number | `Patient.identifier.type.coding` | PMJAY | +| `MB` | Member Number | `Patient.identifier.type.coding`, `Task.for.identifier.type.coding` | both | +| `MD` | Medical License number | `Practitioner.identifier.type.coding` | generic | +| `NH` | National Health Plan Identifier | `Coverage.identifier.type.coding`, `InsurancePlan.identifier.type.coding` | both | +| `NIIP` | National Insurance Payor Identifier (Payor) | `Organization.identifier.type.coding` | both | +| `NPI` | National provider identifier | `Organization.identifier.type.coding` | both | +| `PI` | Patient internal identifier | `Patient.identifier.type.coding` | PMJAY | +| `PRN` | Provider number | `Organization.identifier.type.coding` | generic | +| `XV` | Health Plan Identifier | `Coverage.class.type.coding`, `InsurancePlan.identifier.type.coding` | both | + +### `http://terminology.hl7.org/CodeSystem/v2-0360` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `MD` | Doctor of Medicine | `Practitioner.qualification.code.coding` | both | + +### `http://terminology.hl7.org/CodeSystem/v3-ActCode` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `HIP` | health insurance plan policy | `Coverage.type.coding` | both | + +### `http://www.cms.gov/Medicare/Coding/ICD10` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `02703ZZ` | Percutaneous Transluminal Coronary Angioplasty (PTCA) | `InsurancePlan.coverage.benefit.type.coding`, `InsurancePlan.plan.specificCost.benefit.type.coding` | generic | +| `08RJ3JZ` | Cataract Surgery with Foldable IOL | `InsurancePlan.coverage.benefit.type.coding`, `InsurancePlan.plan.specificCost.benefit.type.coding` | generic | +| `0DTJ4ZZ` | Acute Appendectomy (Laparoscopic) | `InsurancePlan.coverage.benefit.type.coding`, `InsurancePlan.plan.specificCost.benefit.type.coding` | generic | +| `0SRC0JZ` | Total Knee Replacement (Unilateral) | `CoverageEligibilityResponse.insurance.item.productOrService.coding`, `InsurancePlan.coverage.benefit.type.coding` | generic | +| `5A09357` | Paediatric Pneumonia, PICU Management | `InsurancePlan.coverage.benefit.type.coding`, `InsurancePlan.plan.specificCost.benefit.type.coding` | generic | + +### `https://hl7.org/fhir/R4/codesystem-benefit-type.html` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `Procedure` | Procedure | `CoverageEligibilityResponse.insurance.item.benefit.type.coding` | PMJAY | + +### `https://hl7.org/fhir/R4/v2/0360/2.7/index.html` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `BSC NURSING` | BSC NURSING | `Practitioner.qualification.code.coding` | PMJAY | + +### `https://hl7.org/fhir/R4/valueset-adjudication.html` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `benefit` | Benefit Amount | `ClaimResponse.total.category.coding` | both | +| `eligible` | Eligible Amount | `ClaimResponse.item.adjudication.category.coding` | both | +| `eligpercent` | Eligible % | `ClaimResponse.item.adjudication.category.coding` | PMJAY | +| `eligquant` | Eligible Quantity | `ClaimResponse.item.adjudication.category.coding` | PMJAY | +| `incentive` | Hospital Incentive | `ClaimResponse.total.category.coding` | PMJAY | +| `reason` | Reason for Adjudication | `ClaimResponse.item.adjudication.category.coding` | both | +| `status` | Item adjudication status | `ClaimResponse.item.adjudication.category.coding` | both | +| `submitted` | Submitted Amount | `ClaimResponse.total.category.coding`, `ClaimResponse.item.adjudication.category.coding` | both | +| `tax` | Tax | `ClaimResponse.total.category.coding` | PMJAY | + +### `https://https://nrces.in/ndhm/fhir/r4/ValueSet-ndhm-identifier-type-code.html` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `PLAC` | Placer Identifier | `PaymentReconciliation.detail.identifier.type.coding` | both | + +### `https://nhcx.abdm.gov.in/category-code` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `MG` | General Medicine | `CoverageEligibilityRequest.item.category.coding` | both | +| `Surgical` | Surgical | `CoverageEligibilityRequest.item.category.coding` | generic | + +### `https://nhcx.abdm.gov.in/communication-reason` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `additionalinfo` | Additional information request | `Task.reasonCode.coding` | generic | +| `tatquery` | Turnaround time query | `Task.reasonCode.coding` | generic | + +### `https://nhcx.abdm.gov.in/document-code` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `CER` | Medical Certificate / Doctor Referral | `Claim.supportingInfo.code.coding` | generic | +| `DOC001` | Clinical notes and admission notes | `Claim.supportingInfo.code.coding` | generic | +| `DOC002` | Diagnostic imaging report | `Claim.supportingInfo.code.coding` | generic | +| `DOC003` | Investigations performed | `Claim.supportingInfo.code.coding` | generic | +| `DOC004` | Planned line of management | `Claim.supportingInfo.code.coding` | generic | +| `DOC101` | Internal case papers | `Claim.supportingInfo.code.coding` | generic | +| `DOC102` | Treatment details | `Claim.supportingInfo.code.coding` | generic | +| `DOC103` | All investigation reports | `Claim.supportingInfo.code.coding` | generic | +| `DOC104` | Discharge summary | `Claim.supportingInfo.code.coding` | generic | +| `EST` | Detailed Pre-Auth Cost Estimate | `Claim.supportingInfo.code.coding` | generic | +| `FCF` | Filled NHCX Claim Form (Signed) | `Claim.supportingInfo.code.coding` | generic | +| `HDS` | Hospital Discharge Summary | `Claim.supportingInfo.code.coding` | both | +| `IMP` | Medical Implant Invoice & Barcode Sticker | `Claim.supportingInfo.code.coding` | generic | +| `MAND0006` | Detailed discharge summary | `Claim.supportingInfo.code.coding` | generic | +| `MAND0062` | Detailed ICPs | `Claim.supportingInfo.code.coding` | generic | +| `MAND0063` | Treatment details | `Claim.supportingInfo.code.coding` | generic | +| `MAND0064` | All investigations reports | `Claim.supportingInfo.code.coding` | generic | +| `MAND0408` | Clinical notes detailing history and Admission notes showing vitals and examina… | `Claim.supportingInfo.code.coding` | both | +| `MAND0409` | Any investigations done | `Claim.supportingInfo.code.coding` | both | +| `MAND0455` | CXR PA view or CECT chest abdomen and pelvis | `Claim.supportingInfo.code.coding` | both | +| `MAND0570` | Planned line of management | `Claim.supportingInfo.code.coding` | both | +| `MB` | Medical & Pharmacy Bills Itemized | `Claim.supportingInfo.code.coding` | generic | +| `ODN` | Death Certificate | `Claim.supportingInfo.code.coding` | PMJAY | +| `OTR` | Operation Theatre Notes & Surgical Summary | `Claim.supportingInfo.code.coding` | generic | +| `POI` | Proof of Identity (Aadhaar / Passport / Voter ID) | `Claim.supportingInfo.code.coding` | generic | +| `RAD` | Radiology / X-Ray / CT / MRI Scan Reports | `Claim.supportingInfo.code.coding` | generic | + +### `https://nhcx.abdm.gov.in/procedure-type` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `conservative` | Conservative | `Claim.procedure.type.coding` | both | +| `medical` | Medical | `Claim.procedure.type.coding` | PMJAY | +| `STRAT001` | HDU | `CoverageEligibilityRequest.item.modifier.coding`, `Claim.item.modifier.coding` | generic | +| `surgical` | Surgical | `Claim.procedure.type.coding` | generic | + +### `https://nhcx.abdm.gov.in/product-code` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `MG004C` | Dengue shock syndrome (Dengue fever) | `CoverageEligibilityRequest.item.productOrService.coding` | generic | +| `MG0111A` | Pleural Effusion (Pleural Effusion) | `CoverageEligibilityRequest.item.productOrService.coding` | PMJAY | +| `MG072C` | Acute Haemodialysis (Acute Haemodialysis) | `CoverageEligibilityRequest.item.productOrService.coding` | PMJAY | +| `PROC-KNEE-01` | Total Knee Replacement (Unilateral) | `CoverageEligibilityRequest.item.productOrService.coding` | generic | + +### `https://nhcx.abdm.gov.in/task-input-type` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `amount` | Amount | `Task.input.type.coding` | generic | + +### `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-benefit-category` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `MG` | General Medicine | `Claim.item.category.coding`, `CoverageEligibilityRequest.item.category.coding` | both | +| `Surgical` | Surgical | `Claim.item.category.coding` | generic | + +### `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-claim-exclusion` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `Excl01` | Pre-Existing Diseases | `InsurancePlan.extension.extension.valueCodeableConcept.coding` | generic | +| `Excl02` | Specified disease/procedure waiting period | `InsurancePlan.extension.extension.valueCodeableConcept.coding` | generic | +| `Excl03` | 30-day waiting period | `InsurancePlan.extension.extension.valueCodeableConcept.coding` | generic | +| `Excl08` | Cosmetic or plastic Surgery | `InsurancePlan.extension.extension.valueCodeableConcept.coding` | generic | + +### `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `ABHA` | Ayushman Bharat Health Account (ABHA) ID | `Patient.identifier.type.coding` | both | +| `ADN` | Adhaar number | `Patient.identifier.type.coding` | both | +| `ClaimNumber` | Claim Number | `Task.input.type.coding` | generic | +| `CLN` | Claim number | `Claim.identifier.type.coding`, `Task.basedOn.identifier.type.coding` | both | +| `HPID` | Healthcare Professional ID (HPID) | `Practitioner.identifier.type.coding` | both | +| `HPIN` | Health Practitioner ID issued by NDHM | `Practitioner.identifier.type.coding` | both | +| `PMJAY` | Pradhan Mantri Jan Aarogya Yojana (PMJAY) ID | `Patient.identifier.type.coding`, `Task.for.identifier.type.coding` | both | +| `ROHINI` | Registry of Hospitals in Network of Insurance (ROHINI) ID | `Organization.identifier.type.coding` | generic | +| `UTR` | Unique Transaction Reference | `PaymentReconciliation.paymentIdentifier.type.coding` | both | + +### `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-insuranceplan-type` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `01` | Hospitalisation Indemnity Policy | `InsurancePlan.type.coding` | generic | +| `07` | Universal Health Policy | `InsurancePlan.type.coding` | PMJAY | + +### `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-plan-type` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `01` | Individual | `InsurancePlan.plan.type.coding` | generic | +| `03` | Group | `InsurancePlan.plan.type.coding` | PMJAY | +| `Procedure` | Selected treatment or service or product is a type of procedure or package | `InsurancePlan.plan.specificCost.benefit.cost.type.coding` | generic | + +### `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-procedure-code` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `MG001A` | Sample package | `CoverageEligibilityRequest.item.productOrService.coding`, `CoverageEligibilityResponse.insurance.item.productOrService.coding` | generic | +| `MG004B` | Dengue hemorrhagic fever | `Claim.item.productOrService.coding` | generic | +| `MG0111A` | Pleural Effusion | `Claim.item.productOrService.coding` | both | +| `MG072C` | Acute Haemodialysis (Acute Haemodialysis) | `Claim.item.productOrService.coding` | PMJAY | +| `PROC-APP-02` | Acute Appendectomy (Laparoscopic) | `Claim.item.productOrService.coding` | generic | +| `PROC-KNEE-01` | Total Knee Replacement (Unilateral) | `Claim.item.productOrService.coding` | generic | + +### `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-program-code` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `AB-PMJAY` | Ayushman Bharat Pradhan Mantri Jan Arogya Yojana (AB-PMJAY) | `Claim.item.programCode.coding` | both | + +### `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `additionalinfo` | Additional Information Request | `Task.reasonCode.coding`, `CommunicationRequest.reasonCode.coding` | generic | +| `administrativeerror` | Administrative error | `Task.reasonCode.coding` | PMJAY | +| `claimrejected` | Reprocess request due to claim rejected by payer | `Task.reasonCode.coding` | both | +| `partialpayment` | Reprocess request due to partial payment by payer | `Task.reasonCode.coding` | generic | +| `treatmentplanchanged` | Treatment plan changed during hospitalization. | `Task.reasonCode.coding` | generic | + +### `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `CD` | Clinical document | `InsurancePlan.coverage.benefit.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.valueCodeableConcept.coding` | both | +| `CER` | Medical Certficate | `InsurancePlan.coverage.benefit.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.valueCodeableConcept.coding` | generic | +| `DIA` | Diagnostic report | `InsurancePlan.coverage.benefit.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.valueCodeableConcept.coding` | both | +| `DIS` | Discharge status and discharge to location detail | `Claim.supportingInfo.category.coding` | both | +| `FCF` | Filled claim form | `InsurancePlan.coverage.benefit.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.valueCodeableConcept.coding` | generic | +| `HDS` | Hospital discharge summary | `Claim.supportingInfo.category.coding`, `InsurancePlan.coverage.benefit.extension.extension.valueCodeableConcept.coding` | both | +| `IMP` | Document Type - Implant | `InsurancePlan.coverage.benefit.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.valueCodeableConcept.coding` | generic | +| `INF` | Information | `Claim.supportingInfo.category.coding`, `InsurancePlan.coverage.benefit.extension.extension.valueCodeableConcept.coding` | both | +| `INV` | Document Type - Investigation | `Claim.supportingInfo.category.coding` | both | +| `MB` | Medical bill | `InsurancePlan.coverage.benefit.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.valueCodeableConcept.coding` | generic | +| `NMI` | Claim query detail | `Claim.supportingInfo.category.coding` | both | +| `ONS` | Period, start or end dates of aspects of the Condition. (e.g. admission, discha… | `Claim.supportingInfo.category.coding` | both | +| `OTH` | Other | `Claim.supportingInfo.category.coding` | both | +| `POI` | Proof of identity | `InsurancePlan.coverage.benefit.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.valueCodeableConcept.coding` | both | +| `STG` | Total Knee Replacement (Unilateral), Standard Treatment Guidelines | `CoverageEligibilityResponse.insurance.item.authorizationSupporting.coding`, `InsurancePlan.coverage.benefit.extension.extension.valueCodeableConcept.coding` | both | + +### `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `ADDD` | Admission date -Discharge date | `Claim.supportingInfo.code.coding` | both | +| `CQD` | Claim query detail | `Claim.supportingInfo.code.coding` | both | +| `DSDE` | Discharge start-discharge end time | `Claim.supportingInfo.code.coding` | both | +| `DTH` | DischargeToHome (Discharge disposition status) | `Claim.supportingInfo.code.coding` | both | +| `DTM` | DischargetoMortuary | `Claim.supportingInfo.code.coding` | PMJAY | +| `EDT` | EncounterDateTime | `Claim.supportingInfo.code.coding` | both | +| `ODN` | Other document | `Claim.supportingInfo.code.coding` | both | +| `PSP` | PatientSurgeryPerformed(startdatetime-enddatetime) | `Claim.supportingInfo.code.coding` | both | + +### `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-codes` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `deliver` | deliver | `Task.code.coding` | both | +| `search` | Search | `Task.code.coding` | generic | + +### `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `claimNumber` | ClaimNumber | `Task.input.type.coding`, `Task.output.type.coding` | both | +| `document` | Document | `Task.input.type.coding` | both | +| `intimationNumber` | Intimation Number | `Task.input.type.coding` | both | +| `policyNumber` | | `Task.input.type.coding` | both | +| `providerId` | | `Task.input.type.coding` | both | + +### `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-output-type` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `status` | Status | `Task.output.type.coding` | both | + +### `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-output-value` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `paymentack` | Payment is acknowledged | `Task.output.valueCodeableConcept.coding` | both | +| `taskak` | Requested task is acknowledged | `Task.output.valueCodeableConcept.coding` | generic | + +### `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-benefitcategory` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `MG` | General Medicine | `InsurancePlan.coverage.type.coding`, `InsurancePlan.plan.specificCost.category.coding` | PMJAY | +| `MO` | Medical Oncology | `InsurancePlan.coverage.type.coding`, `InsurancePlan.plan.specificCost.category.coding` | PMJAY | +| `SB` | Orthopaedics | `InsurancePlan.coverage.type.coding`, `InsurancePlan.plan.specificCost.category.coding` | PMJAY | +| `SC` | Surgical Oncology | `InsurancePlan.coverage.type.coding` | PMJAY | +| `SE` | Opthalmology | `InsurancePlan.coverage.type.coding`, `InsurancePlan.plan.specificCost.category.coding` | PMJAY | +| `SG` | General Surgery | `InsurancePlan.coverage.type.coding`, `InsurancePlan.plan.specificCost.category.coding` | PMJAY | +| `SU` | Urology | `InsurancePlan.coverage.type.coding` | PMJAY | + +### `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-claim-type` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `737481003` | Inpatient care management (procedure) | `ClaimResponse.type.coding` | both | +| `737492002` | Outpatient care management (procedure) | `ClaimResponse.type.coding` | PMJAY | + +### `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-productorservice` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `LM100` | LAMA DAMA Procedure (LAMA DAMA Procedure) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `MG004A` | Dengue fever (Dengue fever) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `MG005A` | Chikungunya fever (Chikungunya fever) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `MG014A` | Liver abscess (Liver abscess) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `MG072C` | Acute Haemodialysis (Acute Haemodialysis) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `MO071R` | PemetrexedPemetrexed 500mg/m2 D1 every 21 days (CT for CA Lung) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `SB043F` | Hand (Single Stage Amputation) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `SBU100` | Unspecified Surgical Package (Unspecified Surgical Package) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `SC006A` | Open-Transthoracic esophagectomy: 2F / 3F (Transthoracic esophagectomy: 2F / 3F) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `SCU100` | Unspecified Surgical Package (Unspecified Surgical Package) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `SE004A` | Lid Tear Repair (Lid Tear Repair) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `SE005A` | Lid Abscess Drainage (Lid Abscess Drainage) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `SEU100` | Unspecified Surgical Package (Unspecified Surgical Package ) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `SGU100` | Unspecified Surgical Package (Unspecified Surgical Package ) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `SL026A` | Tracheostomy (Tracheostomy / Tracheotomy) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `SL026B` | Tracheotomy (Tracheostomy / Tracheotomy) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `SL032B` | Translabyrinthine approach (Advanced lateral skull base surgery) | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `ST009B` | Nerve and/or tendon injury. A. Wound exploration and closure. B. Nerve graft. C… | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | +| `STRAT003a` | Local Anesthesia | `InsurancePlan.plan.specificCost.benefit.cost.qualifiers.coding` | PMJAY | +| `STRAT003b` | General Anesthesia | `InsurancePlan.plan.specificCost.benefit.cost.qualifiers.coding` | PMJAY | +| `STRAT006a` | Routine Ward | `InsurancePlan.plan.specificCost.benefit.cost.qualifiers.coding` | PMJAY | +| `STRAT006b` | HDU | `InsurancePlan.plan.specificCost.benefit.cost.qualifiers.coding` | PMJAY | +| `STRAT006c` | ICU - Without Ventilator | `InsurancePlan.plan.specificCost.benefit.cost.qualifiers.coding` | PMJAY | +| `STRAT006d` | ICU - With Ventilator | `InsurancePlan.plan.specificCost.benefit.cost.qualifiers.coding` | PMJAY | +| `SU037A` | Acute management of upper urinary tract trauma – conservative ( (1-5 days)plus … | `InsurancePlan.coverage.benefit.type.coding` | PMJAY | + +### `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `ADN` | Aadhaar Number | `InsurancePlan.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0003` | Clinical notes | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0006` | Detailed discharge summary | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0008` | Detailed Procedure / Operative Notes | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0030` | Procedure / Operative Notes | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0062` | Detailed ICPs | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0063` | Treatment details | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0064` | All investigations reports | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0067` | CBC | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0074` | LFT | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0099` | BAR CODE OF THE DRUGS | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0100` | REPORTS OF THE TESTS (PATHOLOGY, RADIOLOGY, MICROBIOLOGY, HEMATOLOGY, BIOCHEMIS… | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0101` | DISCHARGE SUMMARY OF INPATIENT DEPARTMENT / DISCHARGE SUMMARY OF DAY CARE DEPAR… | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0102` | CHARTS OF CHEMOTHERAPY REGIMEN | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0103` | TRANFUSION SLIPS | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0112` | Post Procedure clinical photgraph | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0151` | Post Procedure Photographs of surgical site | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0152` | HPE report | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0159` | Still image of the the procedure with pt. ID and date | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0161` | operative notes | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0162` | Discharge notes | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0163` | microbiology report | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0164` | Still image of the patient undergoing the procedure with date stamp | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0189` | Histopathology report | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0226` | Post Procedure Photograph of affected part | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0300` | Detailed operatives notes | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0309` | Intra operative still photograph | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0326` | Reports of all investigations done and consultation paper of treating doctor me… | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0327` | Detailed discharge summary; | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0339` | Clinical notes with planned line of treatment | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0368` | Procedure / Operative Notes, Detailed Discharge Summary | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0384` | MLC/ FIR if traumatic | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0408` | Clinical notes detailing history and Admission notes showing vitals and examina… | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0409` | any investigations done | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0447` | RFT | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0457` | RBS | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0459` | CECT Thorax, abdomen and Pelvis | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0564` | histopathology (non small cell - adenocarcinoma or adenosquamous carcinoma) | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0582` | clinical photograph of affected part | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0588` | clinical photograph | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0592` | X Ray of affected limb | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0604` | clinical notes justifying the indication | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0621` | FNAC/ BIOPSY | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0622` | CECT | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0647` | FIR/MLC in case of accident | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0648` | Patient details | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0649` | doctors notes | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0650` | photo | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0730` | USG/CT Abdomen | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0822` | Clinical notes with planned line of treatment justifying indication | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0831` | Audiogram report justfying surgery | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0832` | CT- TEMPORAL BONE of affected side /X-RAY BOTH MASTOIDS | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0946` | Clinical notes detailing the injury and need of surgery | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND0952` | MLC/ FIR +/- Nerve conduction velocity (NCV) + /- MRI + /- MRA + /- EMG (Electr… | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `MAND1045` | Clinical notes with planned line of treatment (including indication for need of… | `InsurancePlan.coverage.benefit.extension.extension.extension.valueCodeableConcept.coding`, `InsurancePlan.plan.specificCost.benefit.extension.extension.extension.valueCodeableConcept.coding` | PMJAY | +| `ODN` | Other document | `InsurancePlan.extension.extension.valueCodeableConcept.coding` | PMJAY | + +### `https://payer.pmjay.nha.gov.in` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `A97.0` | Dengue without warning signs | `CoverageEligibilityRequest.item.diagnosis.diagnosisCodeableConcept.coding` | PMJAY | +| `MG004A` | Dengue fever | `CoverageEligibilityRequest.item.productOrService.coding` | PMJAY | + +### `https://terminology.hl7.org/6.5.0/CodeSystem-subscriber-relationship.html` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `child` | Child | `Coverage.relationship.coding` | PMJAY | + +### `https://www.nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-plan-type` + +| Code | Display | Where | Used by | +| :-- | :-- | :-- | :-- | +| `Procedure` | Selected treatment or service or proudct is a type of procedure or package | `InsurancePlan.plan.specificCost.benefit.cost.type.coding` | PMJAY | +| `Stratification` | Selected treatment or service or proudct is a type of stratification | `InsurancePlan.plan.specificCost.benefit.cost.type.coding` | PMJAY | + +## Value sets + +The codes the specifications define beyond those the bundles carry. + +### Supporting-info categories + +System `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category`. + +| Code | Meaning | Notes | +| :-- | :-- | :-- | +| `ONS` | Period, start or end dates | date-time string | +| `OTH` | Other | date-time string | +| `INV` | Investigation | reference | +| `ATT` | Attachment | attachment | +| `HDS` | Hospital discharge summary | reference | +| `DGN` | Diagnosis | reference | +| `LAB` | Lab test | reference | +| `AOB` | Onset of current symptoms | value | +| `MB` | Medical bill | attachment | +| `DIA` | Diagnostic report | reference | +| `CD` | Clinical document | reference | +| `INF` | Information | reference | +| `DIS` | Discharge status | string | +| `NMI` | Query remarks | string | +| `POI` | Proof of identity | attachment | +| `POA` | Proof of address | attachment | +| `DOB` | Proof of birth | attachment | +| `DEF` | Declaration | attachment | +| `FIR` | First information report | attachment | +| `EMP` | Proof of employment | attachment | +| `STG` | Standard treatment guideline questionnaire | reference | +| `ADMD` | Admission date | date-time string | +| `SURD` | Surgery date | date-time string | +| `DSCHD` | Discharge date | date-time string | + +### Supporting-info codes + +System `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code`. + +| Code | Meaning | Notes | +| :-- | :-- | :-- | +| `EDT` | EncounterDateTime | | +| `ADDD` | Admission date - Discharge date | | +| `PSP` | PatientSurgeryPerformed | | +| `DSDE` | Discharge Date | | +| `DTH` | DischargeToHome | | +| `DTM` | DischargetoMortuary | Also the death date under `ONS` | +| `LAMA` | Discharge with LAMA | | +| `DAMA` | Discharge with DAMA | | +| `DIS` | Discharge Summary | | +| `AT` | Questionnaire answers | Under `INF` | +| `ODN` | Policy-level questionnaire | Under `INF` | +| `CQD` | Case remarks for a query answer | Under `NMI` | +| `BCF` | Birth certificate | | +| `DCB` | Discharge card for birth of a child | | +| `MAND…` | Mandatory documents | Defined by the plan; the auth-requirements answer returns the ones a package needs | + +### Identifier types + +| Code | Meaning | Notes | +| :-- | :-- | :-- | +| `PMJAY` | Scheme member id | NRCeS | +| `ABHA` | ABHA number, no hyphens | NRCeS | +| `CLN` | Claim number | NRCeS | +| `UTR` | Bank transaction reference | NRCeS | +| `HPID` | Healthcare professional id | NRCeS | +| `HPIN` | Health practitioner id | NRCeS | +| `NPI` | Provider's HFR ID | HL7 v2-0203 | +| `NIIP` | Payer's registry ID | HL7 v2-0203 | +| `NH` | Plan identifier | HL7 v2-0203 | +| `JHN` | Jurisdictional health number | HL7 v2-0203 | +| `MD` | Medical registration number | HL7 v2-0203 | +| `MR` | Medical record number | HL7 v2-0203 | + +### Adjudication + +| Code | Meaning | Notes | +| :-- | :-- | :-- | +| `submitted` | Amount asked | category | +| `eligible` | Amount allowed | category | +| `benefit` | Amount payable | category | +| `copay` | Co-payment | category | +| `eligpercent` | Percentage allowed | category | +| `eligquant` | Quantity allowed | category | +| `reason` | Free-text reason | category | +| `status` | Decision | category | +| `deductible` | Deduction with its reason | category | +| `tax` | Tax | total | +| `incentive` | Hospital incentive | total | +| `approved` | Approved | claim-level reason | +| `queried` | Queried | claim-level reason | +| `cancelled` | Cancelled or rejected | claim-level reason | +| `rejected` | Rejected | claim-level reason | + +### Task codes + +| Code | Meaning | Notes | +| :-- | :-- | :-- | +| `poll` | Poll | financialtaskcode | +| `cancel` | Cancel | financialtaskcode | +| `reprocess` | Reprocess | financialtaskcode | +| `release` | Release | financialtaskcode | +| `status` | Status | financialtaskcode | +| `nullify` | Close a claim the provider submitted | financialtaskcode | +| `suspend` | Suspend a preauthorisation or claim the provider submitted; no exchange carries it | financialtaskcode | +| `search` | Search | NHCX value set | +| `deliver` | Deliver | ndhm-task-codes | +| `approve` | Approve | task-code | + +### Task reasons + +| Code | Meaning | Notes | +| :-- | :-- | :-- | +| `treatmentplanchanged` | Treatment plan changed | cancel | +| `patientrequest` | Patient request | cancel | +| `financialconstraints` | Financial constraints | cancel | +| `alternativetreatment` | Alternative treatment | cancel | +| `duplicateclaim` | Duplicate claim | cancel | +| `administrativeerror` | Administrative error | cancel | +| `other` | Other | cancel | +| `claimrejected` | Claim rejected | reprocess | +| `partialpayment` | Partial payment | reprocess, release | +| `erroneousclaim` | Erroneous claim | reprocess | +| `referred` | Referred | reprocess | +| `erroneousregistration` | Erroneous registration | reprocess | +| `wrongdiagnosis` | Wrong diagnosis | reprocess | +| `tatquery` | Turnaround alert | communication | +| `grievance` | Grievance | communication | +| `walletupdate` | Wallet update | communication | +| `policychange` | Policy change | communication | +| `additionalinfo` | Additional information | communication | +| `claimArbitration` | Claim arbitration | communication | + +### Task input types and output values + +System `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code`. + +| Code | Meaning | Notes | +| :-- | :-- | :-- | +| `PayerId` | Payer | input | +| `ProviderId` | Provider | input | +| `PolicyNumber` | Policy | input | +| `ProductNumber` | Product | input | +| `ClaimNumber` | Case number | input | +| `IntimationNumber` | Intimation number | input | +| `FromDate` | Search window start | input | +| `ToDate` | Search window end | input | +| `FinanceYear` | Financial year | input | +| `ServiceCode` | Benefit or service | input | +| `paymentack` | Payment acknowledged | output | +| `claimcancelled` | Claim cancelled | output | +| `claimreinitiated` | Claim reinitiated | output | +| `claimsuspended` | Claim suspended | output | +| `taskak` | Task acknowledged | output | +| `taskdelivered` | Task delivered | output | + +### Money types on a reconciliation + +| Code | Meaning | Notes | +| :-- | :-- | :-- | +| `approvedamount` | Approved amount | | +| `claimedamount` | Claimed amount | | +| `tds` | Tax deducted at source | | +| `servicetax` | Service tax | | +| `advance` | Advance | | +| `recovered` | Recovered | | +| `penality` | Penalty, spelled so | | +| `Payment` | The net line | | + +### Deduction reasons + +| Code | Meaning | Notes | +| :-- | :-- | :-- | +| `Non-CoveredService` | Service not covered | | +| `ExceededCoverageLimit` | Coverage limit exceeded | | +| `DuplicateClaim` | Duplicate claim | | +| `Coordination-of-Benefits` | Coordination of benefits | | +| `IncompleteDocumentation` | Incomplete documentation | | +| `PolicyDeductible` | Policy deductible | | +| `Co-Payment` | Co-payment | | +| `FraudulentClaim` | Fraudulent claim | | +| `MedicalNecessity` | Medical necessity | | +| `BenefitLimitReached` | Benefit limit reached | | +| `MissedFilingDeadline` | Missed filing deadline | | +| `PaymentAlreadyMade` | Payment already made | | + +### Claim error codes + +Adjudication reasons a payer gives on a claim, from the value-set sheet of the requests-and-responses workbook. Meanings are as that sheet gives them, spelling included. `ClaimError-1` is a deduction and sits among the deduction reasons there. `ClaimError-16` to `ClaimError-27` repeat earlier texts, as noted. + +| Code | Meaning | Notes | +| :-- | :-- | :-- | +| `ClaimError-1` | There is an error in the claim submission, leading to a deduction until the correct information is provided. | | +| `ClaimError-2` | Claim has been rejected due to less than 24 hours of hospitalization | | +| `ClaimError-3` | Claim has been rejected as the Package is Reserved to Public Hospital | | +| `ClaimError-4` | Claim has been closed due to Incomplete submission of documents by hospital after multiple queries | | +| `ClaimError-5` | Claim has been rejected as there was misrepresentation of bed category booked | | +| `ClaimError-6` | Claim has been rejected due to Outside Scope of cover (Exclusions as per scheme) | | +| `ClaimError-7` | Claim has been rejected as the claim was found be False/Fraudulent | | +| `ClaimError-8` | Claim has been rejected due to Mismatch of package and disease/diagnosis/treatment | | +| `ClaimError-9` | Claim has been rejected due to Hospital not empanelled for this speciality | | +| `ClaimError-10` | Claim has been closed due to non submission of the documents | | +| `ClaimError-11` | Claim rejected as the treatment provided does not support the blocked package, request you to book a fresh relevant package | | +| `ClaimError-12` | Claim has been closed as the photo of the operative site is not available | | +| `ClaimError-13` | Claim has been rejected due to apparent manipulation in medical record | | +| `ClaimError-14` | Claim has been rejected as the hospital expenses have been paid by patient | | +| `ClaimError-15` | Claim has been closed due Missing Pre-Auth patient photo/post operative photo/After discharge photo | | +| `ClaimError-16` | Claim has been rejected due to less tha 24 hours of hospitalization | Same as `ClaimError-2` | +| `ClaimError-17` | Claim has been closed as Referral Letter Mandatory for Package Selected has not been provided | | +| `ClaimError-18` | Claim has been rejected as the need for hospitalization was not justified based on the availabe documents | | +| `ClaimError-19` | Claim has been rejected as the Package is Reserved to Public Hospital | Same as `ClaimError-3` | +| `ClaimError-20` | Claim has been closed due to Incomplete submission of documents by hospital after multiple queries | Same as `ClaimError-4` | +| `ClaimError-21` | Claim has been rejected as there was misrepresentation of bed category booked | Same as `ClaimError-5` | +| `ClaimError-22` | Claim has been rejected due to Outside Scope of cover (Exclusions as per scheme) | Same as `ClaimError-6` | +| `ClaimError-23` | Claim has been rejected as the claim was found be False/Fraudulent | Same as `ClaimError-7` | +| `ClaimError-24` | Claim has been rejected due to Mismatch of package and disease/diagnosis/treatment | Same as `ClaimError-8` | +| `ClaimError-25` | Claim has been rejected due to Hospital not empanelled for this speciality | Same as `ClaimError-9` | +| `ClaimError-26` | Claim has been closed due to non submission of the documents | Same as `ClaimError-10` | +| `ClaimError-27` | Claim rejected as the treatment provided does not support the blocked package, request you to book a fresh relevant package | Same as `ClaimError-11` | +| `ClaimError-28` | Others | | + +### Preauthorisation error codes + +Adjudication reasons a payer gives on a preauthorisation, from the same sheet, meanings as it gives them. No `PreauthError-14` is defined: the list runs to 13, then 15. + +| Code | Meaning | Notes | +| :-- | :-- | :-- | +| `PreauthError-1` | Pre-Auth has been rejected as the diagnosis is outside Scope of cover (Exclusions as per scheme) | | +| `PreauthError-2` | Pre-auth has been rejected due to delay in raising enhancement requests | | +| `PreauthError-3` | Pre-Auth has been rejected as it was found to be False/Fraudulent | | +| `PreauthError-4` | Pre-Auth has been closed due to delay in preauth Intimation (as per state guidelines) | | +| `PreauthError-5` | Pre-Auth has been rejected as the Hospital is not empanelled for this speciality | | +| `PreauthError-6` | Pre- Auth has been rejected due to mismatch in dialysis records | | +| `PreauthError-7` | Enhancement request rejected as the medical necessity of enhancement request not met | | +| `PreauthError-8` | Pre-Auth rejected as the Medical necessity of ICU bed category not met | | +| `PreauthError-9` | Pre-Auth has been rejected as the package selected is reserved for public hospital | | +| `PreauthError-10` | Pre-Auth has been closed due to non submision of mandatory document as per STG | | +| `PreauthError-11` | Pre-Auth has been rejected as the Surgery was Done Before Pre auth Approval | | +| `PreauthError-12` | Pre-auth enhancement rejected due to missing patient photo to depict bed category | | +| `PreauthError-13` | Pre-Auth has been rejected as the diagnosis is outside Scope of cover (Exclusions as per scheme) | Same as `PreauthError-1` | +| `PreauthError-15` | Others | | + +## Where the systems are wrong + +The code is usually right. The system it is bound to often is not. Match on the code, and take the system from the exchange you are building. + +| What | The problem | +| :-- | :-- | +| Package codes | The same code appears under a payer host, under SNOMED and under two ValueSet URLs, depending on the exchange. None is a SNOMED concept | +| Supporting-info category | Document entries bind `category` to the supporting-info code system rather than the category system; the plan does the reverse | +| Claim.type | Binds to a ValueSet URL where a CodeSystem URL belongs | +| Adjudication categories | Some senders bind them to an HTML documentation page, `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| Plan cost types | Bind to the plan-type system under a `www.` host, with values that are not plan types | +| Missing systems | `deductible`, the claim-level status and some package codings carry no `system` at all | diff --git a/site/docs/nhcx/v1/reference/fhir/communication.md b/site/docs/nhcx/v1/reference/fhir/communication.md new file mode 100644 index 000000000..45b1f985c --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/communication.md @@ -0,0 +1,301 @@ +--- +title: Communication +sidebar_label: Communication +sidebar_position: 17 +description: Out-of-band communication payloads and reason codes +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/17-Communication.md +generated: true +--- + +# Communication + +The payer's asynchronous channel to the provider: a turnaround alert, a grievance, a policy or wallet change, or a request for documents. The provider acknowledges within thirty seconds, whether or not the issue is resolved. + +## The request + +Sent on `/v1/communication/request`. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `CommunicationRequest` | [CommunicationRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CommunicationRequest.html) | +| 3 | `Claim` | [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html) | +| 4 | `Patient` | [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 5 | `Organization (ins)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 6 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 7 | `Practitioner` | [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html) | +| 8 | `Coverage` | [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `status` | `requested` | +| `intent` | `order` | +| `reasonCode.coding[]` | `additionalinfo` Additional Information Request in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | +| `code.coding[]` | `poll` in `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `description` | `Share the pre-operative X-ray and the clinical notes.` | +| `authoredOn` | `2026-09-10T23:51:47+05:30` | +| `requester` | reference `urn:uuid:39cd4b51-bddd-5cc1-a65a-6fa4a2a83cb5`, display `Organization` | +| `owner` | reference `urn:uuid:84d112ec-041c-57f8-986c-6619ccd8245e`, display `Organization` | +| `input[].type.coding[]` | `include` in `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` | +| `input[].valueReference` | reference `urn:uuid:4b35a6eb-3f99-5d0c-b0c8-5b2f049fdbde`, display `CommunicationRequest` | + +#### 2. CommunicationRequest + +NRCeS profile: [CommunicationRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CommunicationRequest.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | value `NM-26-0SE00002I` | +| `basedOn[]` | reference `urn:uuid:c1a17d6e-c718-58de-8d3d-fd4c0607d729`, display `Claim-preauth` | +| `status` | `active` | +| `category[].coding[]` | `alert` in `http://terminology.hl7.org/CodeSystem/communication-category` | +| `priority` | `routine` | +| `payload[]` | contentString `Share the pre-operative X-ray and the clinical notes.` | +| `authoredOn` | `2026-09-10T23:51:47+05:30` | +| `requester` | reference `urn:uuid:39cd4b51-bddd-5cc1-a65a-6fa4a2a83cb5`, display `Organization` | +| `recipient[]` | reference `urn:uuid:84d112ec-041c-57f8-986c-6619ccd8245e`, display `Organization` | +| `sender` | reference `urn:uuid:39cd4b51-bddd-5cc1-a65a-6fa4a2a83cb5`, display `Organization` | +| `reasonCode[]` | text `Share the pre-operative X-ray and the clinical notes.` | +| `reasonCode[].coding[]` | `additionalinfo` Additional Information Request in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | + +The `Claim`, `Patient`, `Organization`, `Practitioner`, `Coverage` entries are shaped as in the chapters that introduce them. + +## A notification + +Sent on `/v1/communication/request`, workflow N02. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | none declared; NRCeS [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `CommunicationRequest` | none declared; NRCeS [CommunicationRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CommunicationRequest.html) | +| 3 | `Organization (pay)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 4 | `Organization (prov)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `status` | `completed` | +| `intent` | `proposal` | +| `code.coding[]` | `poll` Poll in `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `reasonCode.coding[]` | `information` Information in `http://terminology.hl7.org/CodeSystem/communication-category` | +| `input[].type.coding[]` | `include` Include in `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` | +| `input[].valueReference` | reference `https://payer.pmajy.nha.gov.in/CommunicationRequest/1a857700-c6f3-49e1-b5d1-049…`, display `Communication` | + +#### 2. CommunicationRequest + +NRCeS profile: [CommunicationRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CommunicationRequest.html). + +| Element | Example | +| :-- | :-- | +| `status` | `completed` | +| `category[].coding[]` | `notification` Notification in `http://terminology.hl7.org/CodeSystem/communication-category` | +| `payload[]` | contentString `Required Message for the provider` | +| `recipient[]` | reference `https://payer.nha.gov.in/v1/communication/request/organization/provider/1000003…` | +| `sender` | reference `https://payer.nha.gov.in/v1/communication/request/organization/payer/1518@hcx` | + +The `Organization` entries are shaped as in the chapters that introduce them. + +## The acknowledgement + +Sent on `/v1/communication/on_request`. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `Communication` | [Communication](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Communication.html) | +| 3 | `CommunicationRequest` | [CommunicationRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CommunicationRequest.html) | +| 4 | `Claim` | [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html) | +| 5 | `Patient` | [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 6 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 7 | `Organization (pay)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 8 | `Practitioner` | [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html) | +| 9 | `Coverage` | [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `authoredOn` | `2026-03-08T11:01:00+05:30` | +| `code.coding[]` | `deliver` in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-codes` | +| `input[].type.coding[]` | `include` in `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` | +| `input[].valueReference` | display `Communication`, reference `urn:uuid:7d9e2a64-3b1f-4f0c-8a5e-6c4b2d9f1e37` | +| `intent` | `order` | +| `owner` | display `Organization`, reference `https://nhcx.abdm.gov.in/payer` | +| `reasonCode.coding[]` | `additionalinfo` Additional information request in `https://nhcx.abdm.gov.in/communication-reason` | +| `requester` | display `Organization`, reference `https://nhcx.abdm.gov.in/provider` | +| `status` | `completed` | + +#### 2. Communication + +NRCeS profile: [Communication](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Communication.html). + +| Element | Example | +| :-- | :-- | +| `about[]` | display `Claim VB26AA2600001`, reference `https://nhcx.abdm.gov.in/preauth/request` | +| `basedOn[]` | display `CommunicationRequest`, reference `urn:uuid:08f1bb6f-c3f5-4578-b5e8-c042764e2477` | +| `category[].coding[]` | `notification` in `http://terminology.hl7.org/CodeSystem/communication-category` | +| `identifier[]` | value `4524657454` | +| `payload[]` | contentString `The angiography report is attached.` | +| `payload[].contentAttachment` | contentType `application/pdf`, title `Angiography report` | +| `payload[].extension[]` | url ``, valueString `DIA` | +| `priority` | `routine` | +| `recipient[]` | display `Organization`, reference `https://nhcx.abdm.gov.in/payer` | +| `sender` | display `Organization`, reference `https://nhcx.abdm.gov.in/provider` | +| `status` | `completed` | + +The `CommunicationRequest`, `Claim`, `Patient`, `Organization`, `Practitioner`, `Coverage` entries are shaped as in the chapters that introduce them. + +## Rules + +### 1. The push pattern + +`Task.code` `poll` with an input of type `include` referencing the resource being delivered, a `CommunicationRequest` from the payer. `intent` is `order` on a request and `proposal` on a notification. Resolve the reference and read its type. + +### 2. Switch on the reason + +`Task.reasonCode` from `ndhm-reason-code`: `tatquery`, `grievance`, `walletupdate`, `policychange`, `additionalinfo`, `claimArbitration`. Accept the misspelling `claimArbitartion` on receipt. + +### 3. Notifications + +A notification carries its reason under the communication-category system, such as `information`, and a `CommunicationRequest` with category `notification` and the message in `payload`. + +### 4. Category, priority, topic + +`category` `alert`, `reminder`, `notification`, `instruction` or `questionnaire`; `priority` `routine`, `urgent`, `asap` or `stat`; `topic` `progress-update` for anything about a live case. + +### 5. completed is the event + +`Task.status` and `Communication.status` read `completed` when the message is delivered. Do not close a case on them. + +### 6. The acknowledgement + +A `Task` coded `deliver`, `completed`, whose `include` input references a `Communication` with `basedOn` naming the request. Same correlation id. Take each organisation's role from `Organization.type`, not from the identifier type. + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What changes in the bundle + +PMJAY sends this exchange in the generic shape. + +### What PMJAY specifies + +- PMJAY does not use this channel for queries. A PMJAY `CommunicationRequest` is a notification: a turnaround alert, a grievance, a wallet or policy change, or an arbitration intimation. + +### What PMJAY requires + +- Acknowledge within thirty seconds with the same Task bundle and `Task.status` `completed`, and leave the case's status alone. + +## Use cases, APIs and data elements + +### C6 Raise a communication (payer) + +A message about a case, typed by its reason code: additionalinfo, tatquery for a turnaround breach, grievance, walletupdate, policychange, claimArbitration. A generic or IRDAI payer raises its document queries here, as a CommunicationRequest task bundle carrying 24, 241 or 27, and takes the answer as a Communication task bundle on on_request echoing the correlation id and workflow id. PMJAY does not use it for queries; its query is the ClaimResponse on the case's own thread. + +| | | +| :-- | :-- | +| **API** | `/v1/communication/request` [`apis/07-communication/v1-communication-request.bru`](/docs/nhcx/v1/api/communication/endpoints/communication-v1-communication-request) | +| **Callback** | `/v1/communication/on_request` [`apis/07-communication/v1-communication-on-request.bru`](/docs/nhcx/v1/api/communication/endpoints/communication-v1-communication-on-request) | +| **Workflow** | 24, 241, 27 for a generic payer's queries; N02 and the intimation codes for the rest | +| **Carries JWE** | yes | +| **Focal resource** | `CommunicationRequest / Task` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1518@hcx` | +| `x-hcx-recipient_code` | `1000004446@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `15` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `24` | Preauth Request Queried | payer | `request.initiated` | Payer needs more information - respond using workflow 19 | +| `241` | Enhancement Request Queried | payer | `request.initiated` | Enhancement request queried by payer | +| `27` | Claim Request Queried | payer | `request.initiated`, `response.partial/complete` | Final claim queried - payer needs additional documents; under PMJAY answer with 161 | +| `N02` | Notifications Intended To Provider | status sheet only | `request.initiated` | | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `taskReason` | Query Reason | Query | `code` | `1..1` | `Task.reasonCode.coding[0].code` | `additionalinfo` | | +| `queryText` | Query Questions | Query | `string` | `1..1` | `CommunicationRequest.payload[0].contentString` | `Please attach pre-operative ultrasound scan.` | | + +NRCeS profiles: [CommunicationRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CommunicationRequest.html), [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +### B4 Respond to a communication (provider) + +Acknowledge or answer a message the payer sent about a case. A generic or IRDAI payer raises its query here, as a CommunicationRequest task bundle carrying 24, 241 or 27; the answer is a Communication task bundle on on_request that echoes the request's correlation id and workflow id. The payer's reason code says what kind of message it was. + +| | | +| :-- | :-- | +| **API** | `/v1/communication/on_request` [`apis/07-communication/v1-communication-on-request.bru`](/docs/nhcx/v1/api/communication/endpoints/communication-v1-communication-on-request) | +| **Callback** | `/v1/communication/request` [`apis/07-communication/v1-communication-request.bru`](/docs/nhcx/v1/api/communication/endpoints/communication-v1-communication-request) | +| **Workflow** | 24, 241 or 27, echoed from the payer's request | +| **Carries JWE** | yes | +| **Focal resource** | `Communication / Task` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `15` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `response.complete` | +| `x-hcx-ben-abha-id` | `91711234567890` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `24` | Preauth Request Queried | payer | `request.initiated` | Payer needs more information - respond using workflow 19 | +| `241` | Enhancement Request Queried | payer | `request.initiated` | Enhancement request queried by payer | +| `27` | Claim Request Queried | payer | `request.initiated`, `response.partial/complete` | Final claim queried - payer needs additional documents; under PMJAY answer with 161 | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `communicationId` | Communication Identifier | Case | `string` | `1..1` | `Communication.identifier[0].value` | `COMM-RESP-001` | | +| `queryRequestId` | Original Query Reference | Case | `reference` | `1..1` | `Communication.basedOn[0].reference` | `Task/task-comm-req-1` | | +| `replyText` | Clarification Text | Payload | `string` | `0..1` | `Communication.payload[0].contentString` | `Platelet count attached as requested.` | | +| `attachmentData` | Attached Document Base64 | Payload | `base64Binary` | `0..*` | `Communication.payload[0].contentAttachment.data` | `JVBERi0xLjQK...` | | + +NRCeS profiles: [Communication](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Communication.html). diff --git a/site/docs/nhcx/v1/reference/fhir/coverage-eligibility-request.md b/site/docs/nhcx/v1/reference/fhir/coverage-eligibility-request.md new file mode 100644 index 000000000..401c8a11a --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/coverage-eligibility-request.md @@ -0,0 +1,264 @@ +--- +title: Coverage eligibility request +sidebar_label: Coverage eligibility request +sidebar_position: 2 +description: Resource breakdown and fields +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/02-Coverage Eligibility Request.md +generated: true +--- + +# Coverage eligibility request + +The provider asks the payer whether a policy is live, what it covers, and what a package will need. One `CoverageEligibilityRequest` carries all of that, and `purpose` decides which question is asked. It is the first exchange in a case, sent at registration or before treatment planning. + +Sent on `/v1/coverageeligibility/check`, answered on `/v1/coverageeligibility/on_check`. + +## The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `CoverageEligibilityRequest` | [CoverageEligibilityRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CoverageEligibilityRequest.html) | +| 2 | `Patient` | [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 3 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 4 | `Organization (pay)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Location` | none declared; NRCeS [Location](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Location.html) | +| 6 | `Coverage` | [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | +| 7 | `PractitionerRole` | [PractitionerRole](https://nrces.in/ndhm/fhir/r4/StructureDefinition-PractitionerRole.html) | + +## Elements + +### 1. CoverageEligibilityRequest + +NRCeS profile: [CoverageEligibilityRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CoverageEligibilityRequest.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in` | +| `status` | `active` | +| `priority.coding[]` | `normal` Normal in `http://terminology.hl7.org/CodeSystem/processpriority` | +| `purpose` | `auth-requirements` | +| `patient` | reference `https://nhcx.abdm.gov.in/patient` | +| `created` | `2026-09-10T23:53:57+05:30` | +| `enterer` | reference `https://nhcx.abdm.gov.in/practitioner-role` | +| `provider` | reference `https://nhcx.abdm.gov.in/provider` | +| `insurer` | reference `https://nhcx.abdm.gov.in/payer` | +| `facility` | reference `https://nhcx.abdm.gov.in/location` | +| `insurance[]` | focal `true` | +| `insurance[].coverage` | reference `https://nhcx.abdm.gov.in/coverage` | +| `item[].category.coding[]` | `Surgical` Surgical in `https://nhcx.abdm.gov.in/category-code` | +| `item[].productOrService.coding[]` | `PROC-KNEE-01` Total Knee Replacement (Unilateral) in `https://nhcx.abdm.gov.in/product-code` | +| `item[].quantity` | value `1` | + +### 2. Patient + +NRCeS profile: [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | value `MRAV1985001` | +| `identifier[].type.coding[]` | `PMJAY` Pradhan Mantri Jan Aarogya Yojana (PMJAY) ID in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| | `MB` Member Number in `http://terminology.hl7.org/CodeSystem/v2-0203` | + +### 3. Organization (prov) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `IN1910000151` | +| `identifier[].type.coding[]` | `NPI` National provider identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `prov` Healthcare Provider in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `KyroCare Multispeciality Hospital` | + +### 4. Organization (pay) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `1000004805` | +| `identifier[].type.coding[]` | `NIIP` National Insurance Payor Identifier (Payor) in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `pay` Payer in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `Sandbox Payer` | + +### 5. Location + +NRCeS profile: [Location](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Location.html). + +| Element | Example | +| :-- | :-- | +| `name` | `KyroCare Multispeciality Hospital` | +| `managingOrganization` | reference `https://nhcx.abdm.gov.in/provider` | + +### 6. Coverage + +NRCeS profile: [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html). + +| Element | Example | +| :-- | :-- | +| `status` | `active` | +| `type.coding[]` | `HIP` health insurance plan policy in `http://terminology.hl7.org/CodeSystem/v3-ActCode` | +| `identifier[]` | value `POL7UMU001` | +| `identifier[].type.coding[]` | `NH` National Health Plan Identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `subscriber` | reference `https://nhcx.abdm.gov.in/patient` | +| `subscriberId` | `MRAV1985001` | +| `beneficiary` | reference `https://nhcx.abdm.gov.in/patient` | +| `relationship.coding[]` | `self` in `http://terminology.hl7.org/CodeSystem/subscriber-relationship` | +| `payor[]` | reference `https://nhcx.abdm.gov.in/payer` | + +### 7. PractitionerRole + +NRCeS profile: [PractitionerRole](https://nrces.in/ndhm/fhir/r4/StructureDefinition-PractitionerRole.html). + +| Element | Example | +| :-- | :-- | +| `code[].coding[]` | `307988006` Medical technician in `http://snomed.info/sct` | + +## The four purposes + +One builder, with `purpose` switched. The purposes differ in what they send and what the payer must return. + +| Variant | What it asks | purpose | item | +| :-- | :-- | :-- | :-- | +| Discovery | Which policies does this person hold? Searches by ABHA or demographic identifiers. | `discovery` | none | +| Validation | Is the policy in force, and what is left in the wallet? | `validation` | none | +| Benefits | Is this package covered for this beneficiary? | `benefits` | `MG004C` Dengue shock syndrome (Dengue fever) in `https://nhcx.abdm.gov.in/product-code` | +| Auth-requirements | What must a preauthorisation carry for this package? | `auth-requirements` | `MG004C` Dengue shock syndrome (Dengue fever) in `https://nhcx.abdm.gov.in/product-code` | + +## Rules + +### 1. One purpose per request + +`purpose[]` carries one of `discovery`, `validation`, `benefits`, `auth-requirements`. + +### 2. Items make a question answerable + +`item[]` is what makes `benefits` and `auth-requirements` answerable. `validation` does not need it. `discovery` omits `item[]` and `Coverage`. + +### 3. Date of service + +`servicedDate` is the date of service, not the date of asking. + +### 4. The Coverage you send is a stub + +It names the policy you mean, not its terms. Take the term and the class from the payer's `Coverage` in the response. + +### 5. Parties by reference + +`provider` and `insurer` reference `Organization` entries typed `prov` and `pay`, identified by `NPI` and `NIIP`. `facility` references a `Location` the provider manages, and `enterer` a `PractitionerRole`. + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What changes in the bundle + +#### Elements PMJAY adds + +| Element | Example | +| :-- | :-- | +| `CoverageEligibilityRequest.item[].modifier[].coding[]` | `STRAT006a` Routine Ward | + +### What PMJAY specifies + +- `item.category` is the package master's specialty code, such as `MG`, and `item.productOrService` the master's package code and display. +- The `Coverage` carries the scheme policy code typed `NH`, of the form `PMJAY//S/G`, from the policy lookup. +- Validation after registration returns the wallet; benefits and auth-requirements before a preauthorisation return what the package needs attached, including the consent questionnaire when there is no biometric token. + +### What PMJAY requires + +- The ward tier rides as `item.modifier` when the package allows one. +- Register the patient only after coverage is validated, and validate again every time treatment is added. + +## Use cases, APIs and data elements + +### B1 Check coverage eligibility (provider) + +Is the policy in force, what is left in the wallet, and what must be attached. One endpoint, four purposes: discovery, validation, benefits, auth-requirements. + +| | | +| :-- | :-- | +| **API** | `/v1/coverageeligibility/check` [`apis/02-eligibility/v1-coverageeligibility-check.bru`](/docs/nhcx/v1/api/eligibility/endpoints/eligibility-v1-coverageeligibility-check) | +| **Callback** | `/v1/coverageeligibility/on_check` [`apis/02-eligibility/v1-coverageeligibility-on-check.bru`](/docs/nhcx/v1/api/eligibility/endpoints/eligibility-v1-coverageeligibility-on-check) | +| **Workflow** | none; sits beside registration 10 and admission 11 | +| **Carries JWE** | yes | +| **Focal resource** | `CoverageEligibilityRequest` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `11` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `10` | Patient Registered | provider | `request.initiated` | Patient registered in system | +| `11` | Patient Admitted | provider | `request.initiated` | Patient admitted to hospital | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `purpose` | Eligibility Purpose | Case | `code` | `1..1` | `CoverageEligibilityRequest.purpose[0]` | `auth-requirements` | code system `http://hl7.org/fhir/eligibilityrequest-purpose` | +| `caseNumber` | Provider Reference | Case | `string` | `1..1` | `CoverageEligibilityRequest.identifier[0].value` | `PA0000000001` | also at `Bundle.id` | +| `servicedDate` | Date of Service | Case | `date` | `1..1` | `CoverageEligibilityRequest.servicedDate` | `2026-02-26` | | +| `patientName` | Patient Full Name | Beneficiary | `string` | `1..1` | `Patient.name[0].text` | `Ramesh Chandra Sharma` | | +| `memberId` | Scheme / Insurer Member ID | Beneficiary | `string` | `1..1` | `Patient.identifier[type=PMJAY].value` | `PMJAY-HP-2024-998811` | also at `Coverage.subscriberId` | +| `abhaNumber` | ABHA Number | Beneficiary | `string` | `0..1` | `Patient.identifier[type=ABHA].value` | `91234567890123` | | +| `gender` | Gender | Beneficiary | `code` | `1..1` | `Patient.gender` | `male` | code system `http://hl7.org/fhir/administrative-gender` | +| `birthDate` | Date of Birth | Beneficiary | `date` | `1..1` | `Patient.birthDate` | `1982-06-15` | | +| `patientPhone` | Mobile Phone | Beneficiary | `string` | `0..1` | `Patient.telecom[system=phone].value` | `9876543210` | | +| `policyNumber` | Policy Number | Coverage | `string` | `1..1` | `Coverage.identifier[0].value` | `PMJAY/HP/S/G` | | +| `facilityId` | Hospital Facility ID (HFR/NPI) | Provider | `string` | `1..1` | `Organization[type=prov].identifier[system=https://facility.abdm.gov.in].value` | `IN1910000151` | | +| `providerName` | Hospital Name | Provider | `string` | `1..1` | `Organization[type=prov].name` | `Apex Multispeciality Hospital` | | +| `payerId` | Payer Identifier (NIIP) | Payer | `string` | `1..1` | `Organization[type=pay].identifier[system=https://irdai.gov.in].value` | `1000003538` | | +| `payerName` | Payer Name | Payer | `string` | `1..1` | `Organization[type=pay].name` | `National Health Authority - PMJAY` | | +| `productOrService` | Package Code | Item | `string` | `0..*` | `CoverageEligibilityRequest.item[].productOrService.coding[0].code` | `MG004A` | | + +NRCeS profiles: [CoverageEligibilityRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CoverageEligibilityRequest.html), [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html), [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html), [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +### D3 Check coverage eligibility (pmjay) + +Validation after registration returns the wallet, one benefit entry per wallet with allowed and used. Benefits and auth-requirements before a pre-authorisation return what the package needs attached. Register only after coverage is validated, and validate again every time treatment is added. + +| | | +| :-- | :-- | +| **API** | `/v1/coverageeligibility/check` [`apis/02-eligibility/v1-coverageeligibility-check.bru`](/docs/nhcx/v1/api/eligibility/endpoints/eligibility-v1-coverageeligibility-check) | +| **Callback** | `/v1/coverageeligibility/on_check` [`apis/02-eligibility/v1-coverageeligibility-on-check.bru`](/docs/nhcx/v1/api/eligibility/endpoints/eligibility-v1-coverageeligibility-on-check) | +| **Workflow** | none (or 5 under PMJAY) | +| **Carries JWE** | yes | +| **Focal resource** | `CoverageEligibilityRequest` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `11` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `memberId` | PMJAY Family ID | Beneficiary | `string` | `1..1` | `Patient.identifier[type=PMJAY].value` | `PMJAY-HP-2024-998811` | | +| `purpose` | Purpose | Case | `code` | `1..1` | `CoverageEligibilityRequest.purpose[0]` | `validation` | | + +NRCeS profiles: [CoverageEligibilityRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CoverageEligibilityRequest.html), [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html). diff --git a/site/docs/nhcx/v1/reference/fhir/coverage-eligibility-response.md b/site/docs/nhcx/v1/reference/fhir/coverage-eligibility-response.md new file mode 100644 index 000000000..5b3e61c06 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/coverage-eligibility-response.md @@ -0,0 +1,255 @@ +--- +title: Coverage eligibility response +sidebar_label: Coverage eligibility response +sidebar_position: 3 +description: Response bundle, wallet breakdown, and inforce flags +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/03-Coverage Eligibility Response.md +generated: true +--- + +# Coverage eligibility response + +The payer's answer on `on_check`. It says whether the coverage is in force, what is left in the wallet, and which items need authorisation and which documents. + +Sent on `/v1/coverageeligibility/on_check`. + +## The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `CoverageEligibilityResponse` | [CoverageEligibilityResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CoverageEligibilityResponse.html) | +| 2 | `Patient` | [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 3 | `Coverage` | [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | +| 4 | `CoverageEligibilityRequest` | [CoverageEligibilityRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CoverageEligibilityRequest.html) | +| 5 | `Organization (ins)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | + +## Elements + +### 1. CoverageEligibilityResponse + +NRCeS profile: [CoverageEligibilityResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CoverageEligibilityResponse.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system ``, value `SUB-00001` | +| `status` | `active` | +| `purpose` | `auth-requirements` | +| `patient` | reference `urn:uuid:89aac2db-25ae-5b55-90a7-886c6be48ca7`, display `Ravi Kumar` | +| `created` | `2026-09-10` | +| `request` | reference `urn:uuid:4955a87f-deb4-59e6-b795-100a2d705c98`, display `CoverageEligibilityRequest` | +| `outcome` | `complete` | +| `disposition` | `Policy is in force until 2026-12-31. INR 5000 of cover remains. All 1 requested…` | +| `insurer` | reference `urn:uuid:39cd4b51-bddd-5cc1-a65a-6fa4a2a83cb5`, display `Sandbox Payer` | +| `insurance[]` | inforce `true` | +| `insurance[].coverage` | reference `urn:uuid:966d4b2b-591b-50b6-bbbb-d504d3c6897f`, display `Sandbox Default Policy` | +| `insurance[].benefitPeriod` | start `2026-01-01`, end `2026-12-31` | +| `insurance[].item[]` | authorizationRequired `true` | +| `insurance[].item[].productOrService` | text `Total Knee Replacement (Unilateral)` | +| `insurance[].item[].productOrService.coding[]` | `PROC-KNEE-01` Total Knee Replacement (Unilateral) in `` | +| | `737481003` Total Knee Replacement (Unilateral) in `http://snomed.info/sct` | +| | `0SRC0JZ` Total Knee Replacement (Unilateral) in `http://www.cms.gov/Medicare/Coding/ICD10` | +| `insurance[].item[].benefit[].type.coding[]` | `benefit` Benefit in `http://terminology.hl7.org/CodeSystem/benefit-type` | +| `insurance[].item[].benefit[].allowedMoney` | value `150000`, currency `INR` | +| `insurance[].item[].authorizationSupporting[]` | text `Type: pre +Procedure Code: PROC-KNEE-01` | +| | text `Type: post +Procedure Code: PROC-KNEE-01` | +| | text `fullUrl: ` | +| `insurance[].item[].authorizationSupporting[].coding[]` | `POI` Proof of Identity (Aadhaar / Passport / Voter ID) in `` | +| | `CER` Medical Certificate / Doctor Referral in `` | +| | `RAD` Radiology / X-Ray / CT / MRI Scan Reports in `` | +| | and 7 more | + +### 2. Patient + +NRCeS profile: [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system ``, value `MRAV1985001` | +| | system `https://healthid.ndhm.gov.in`, value `91-1234-1234-1234` | +| `identifier[].type.coding[]` | `ABHA` Ayushman Bharat Health Account (ABHA) ID in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `name[]` | text `Ravi Kumar` | +| `telecom[]` | system `phone`, value `9876543210`, use `mobile` | +| `gender` | `male` | +| `birthDate` | `1985-06-15` | + +### 3. Coverage + +NRCeS profile: [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system ``, value `SUB-00001` | +| `status` | `active` | +| `type.coding[]` | `HIP` health insurance plan policy in `http://terminology.hl7.org/CodeSystem/v3-ActCode` | +| `subscriber` | reference `urn:uuid:89aac2db-25ae-5b55-90a7-886c6be48ca7`, display `Ravi Kumar` | +| `subscriberId` | `MRAV1985001` | +| `beneficiary` | reference `urn:uuid:89aac2db-25ae-5b55-90a7-886c6be48ca7`, display `Ravi Kumar` | +| `relationship.coding[]` | `self` Self in `http://terminology.hl7.org/CodeSystem/subscriber-relationship` | +| `period` | start `2026-01-01`, end `2026-12-31` | +| `payor[]` | reference `urn:uuid:39cd4b51-bddd-5cc1-a65a-6fa4a2a83cb5`, display `Sandbox Payer` | +| `class[]` | value `POL7UMU002`, name `Sandbox Default Policy` | +| `class[].type.coding[]` | `plan` Plan in `http://terminology.hl7.org/CodeSystem/coverage-class` | + +### 4. CoverageEligibilityRequest + +NRCeS profile: [CoverageEligibilityRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CoverageEligibilityRequest.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system ``, value `4955a87f-deb4-59e6-b795-100a2d705c98` | +| `status` | `active` | +| `priority.coding[]` | `normal` Normal in `http://terminology.hl7.org/CodeSystem/processpriority` | +| `purpose` | `auth-requirements` | +| `patient` | reference `urn:uuid:89aac2db-25ae-5b55-90a7-886c6be48ca7`, display `Ravi Kumar` | +| `created` | `2026-09-10T23:53:59+05:30` | +| `insurer` | reference `urn:uuid:39cd4b51-bddd-5cc1-a65a-6fa4a2a83cb5`, display `Sandbox Payer` | +| `insurance[]` | focal `true` | +| `insurance[].coverage` | reference `urn:uuid:966d4b2b-591b-50b6-bbbb-d504d3c6897f`, display `Sandbox Default Policy` | + +### 5. Organization (ins) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `type[].coding[]` | `ins` Insurance Company in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `Sandbox Payer` | +| `address[]` | city `Bengaluru`, state `Karnataka`, country `India` | + +## Rules + +### 1. Read the answer in three places + +`outcome`, `insurance[].inforce` and `insurance[].item[]`. `disposition` is prose for a human. + +### 2. Match to the request by reference + +Use `CoverageEligibilityResponse.request.reference`, never a resource id, to join the answer to what you sent. + +### 3. Index entries by fullUrl + +A response can carry more than one `Patient` or `Organization`. Index by `fullUrl`, not by resource type. + +### 4. Money + +`allowedMoney` is the balance remaining and `usedMoney` the amount used, not the sum insured. There is one benefit per wallet; read them all. + +### 5. Build for the fuller form + +`benefit[]` with `Procedure`, `Investigation` and `Stratification` types for benefits, and `authorizationSupporting[]` with the mandatory document codes for auth-requirements. Tolerate a leaner answer. + +### 6. Documents by stage + +`authorizationSupporting[]` lists the documents the next request must carry. Its `text` names the stage: pre for the preauthorisation, post for the claim. + +### 7. The identifier is not a correlation key + +`CoverageEligibilityResponse.identifier` identifies the beneficiary at the hospital. Correlate on the protocol headers. + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What changes in the bundle + +PMJAY uses a different bundle for this step, headed by `CoverageEligibilityRequest` rather than `CoverageEligibilityResponse`. + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `CoverageEligibilityRequest` | [CoverageEligibilityRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CoverageEligibilityRequest.html) | +| 2 | `Patient` | [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 3 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 4 | `Organization (pay)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Location` | none declared; NRCeS [Location](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Location.html) | +| 6 | `Coverage` | [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | +| 7 | `PractitionerRole` | [PractitionerRole](https://nrces.in/ndhm/fhir/r4/StructureDefinition-PractitionerRole.html) | +| 8 | `CoverageEligibilityResponse` | [CoverageEligibilityResponse](https://hl7.org/fhir/R4/coverageeligibilityresponse.html) | +| 9 | `Patient` | none declared; NRCeS [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 10 | `Coverage` | none declared; NRCeS [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | +| 11 | `Organization (pay)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 12 | `Organization (prov)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | + +##### 8. CoverageEligibilityResponse + +NRCeS profile: [CoverageEligibilityResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CoverageEligibilityResponse.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://hcx.pmjay.gov.in/v1/coverageeligibility/check`, value `PMJAY0000X-IN1910000151` | +| `status` | `active` | +| `purpose` | `auth-requirements` | +| `patient` | reference `https://payer.nha.gov.in/coverageeligibility/v1/coverageeligibility/on_check/co…` | +| `created` | `2026-09-11T00:32:42+05:30` | +| `requestor` | reference `https://payer.nha.gov.in/coverageeligibility/v1/coverageeligibility/on_check/co…` | +| `request` | reference `https://nhcx.abdm.gov.in/coverage-eligibility/request` | +| `outcome` | `complete` | +| `disposition` | `Policy is currently in-force` | +| `insurer` | reference `https://payer.nha.gov.in/coverageeligibility/v1/coverageeligibility/on_check/co…` | +| `insurance[]` | inforce `true` | +| `insurance[].coverage` | reference `https://payer.nha.gov.in/coverageeligibility/v1/coverageeligibility/on_check/co…` | +| `insurance[].item[]` | excluded `false`, authorizationRequired `true` | +| `insurance[].item[].category.coding[]` | `MG` General Medicine | +| `insurance[].item[].productOrService.coding[]` | `MG0111A` Pleural Effusion (Pleural Effusion) | +| | `MG072C` Acute Haemodialysis (Acute Haemodialysis) | +| `insurance[].item[].benefit[].type.coding[]` | `Procedure` Procedure in `https://hl7.org/fhir/R4/codesystem-benefit-type.html` | +| `insurance[].item[].benefit[].allowedMoney` | value `2070`, currency `INR` | +| | value `1725`, currency `INR` | +| `insurance[].item[].authorizationSupporting[]` | text `Type: pre + Procedure Code:MG0111A` | +| | text `fullUrl: https://payer.gov.in/policy/questionnaire/100003` | +| | text `fullUrl: https://payer.gov.in/policy/questionnaire/100008` | +| | and 7 more | +| `insurance[].item[].authorizationSupporting[].coding[]` | `MAND0409` any investigations done | +| | `MAND0408` Clinical notes detailing history and Admission notes showing vitals and examina… | +| | `MAND0455` CXR PA view or CECT chest abdomen and pelvis | +| | and 9 more | + +The `CoverageEligibilityRequest`, `Patient`, `Organization`, `Location`, `Coverage`, `PractitionerRole` entries are shaped as in the chapters that introduce them. + +### What PMJAY specifies + +- The bundle echoes the whole request first and then gives the answer, with the payer's own `Patient`, `Coverage` and both `Organization` entries. +- A PMJAY answer can carry only `item.excluded` and `item.authorizationRequired`, without `benefitPeriod`, `benefit[]` or `authorizationSupporting[]`. The documents then come from the plan. +- The payer's `Patient` can differ from yours in name, gender and birth date. Do not overwrite your record from it. + +## Use cases, APIs and data elements + +### C3 Respond to coverage eligibility (payer) + +The eligibility and plan details for the beneficiary asked about. A payer may instead answer with a forward instruction, asking the exchange to pass the request to another payer. + +| | | +| :-- | :-- | +| **API** | `/v1/coverageeligibility/on_check` [`apis/02-eligibility/v1-coverageeligibility-on-check.bru`](/docs/nhcx/v1/api/eligibility/endpoints/eligibility-v1-coverageeligibility-on-check) | +| **Callback** | `/v1/coverageeligibility/check` [`apis/02-eligibility/v1-coverageeligibility-check.bru`](/docs/nhcx/v1/api/eligibility/endpoints/eligibility-v1-coverageeligibility-check) | +| **Workflow** | none (or 5 under PMJAY) | +| **Carries JWE** | yes | +| **Focal resource** | `CoverageEligibilityResponse` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1518@hcx` | +| `x-hcx-recipient_code` | `1000004446@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `11` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `response.complete` | +| `x-hcx-ben-abha-id` | `91711234567890` | +| `x-hcx-debug_flag` | `INFO` | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `outcome` | Verdict Outcome | Verdict | `code` | `1..1` | `CoverageEligibilityResponse.outcome` | `complete` | | +| `inforce` | Policy In Force | Coverage | `boolean` | `1..1` | `CoverageEligibilityResponse.insurance[0].inforce` | `true` | | +| `allowedMoney` | Remaining Balance Amount | Benefit | `decimal` | `0..1` | `CoverageEligibilityResponse.insurance[0].item[].benefit[type=benefit].allowedMoney.value` | `485000.00` | | + +NRCeS profiles: [CoverageEligibilityResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CoverageEligibilityResponse.html). diff --git a/site/docs/nhcx/v1/reference/fhir/index.md b/site/docs/nhcx/v1/reference/fhir/index.md new file mode 100644 index 000000000..6084679b5 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/index.md @@ -0,0 +1,302 @@ +--- +title: Bundles and conventions +sidebar_label: Bundles and conventions +sidebar_position: 1 +description: Universal bundle rules, profiles, IDs, base64 encoding, and size limits +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/01-Bundles and Conventions.md +generated: true +--- + +# Bundles and conventions + +Everything that crosses the exchange is one FHIR R4 Bundle of type `collection`, built to the NRCeS profiles for NHCX. The bundles in this reference are generic: any payer on the exchange takes them, private insurers and TPAs regulated by IRDAI as well as government schemes. Each chapter shows the generic bundle for one exchange in one direction, then what PMJAY changes and what PMJAY requires on top. This chapter holds the rules every bundle obeys before any exchange is considered. + +## Rules + +### 1. Bundle type + +`collection`, not `document` and not `transaction`. Entries are resources placed directly, with no request or response elements. The open-protocol page describes claim objects as `document` bundles with a root `Composition`; the exchange accepts `collection`, and a `Composition` appears only at the head of an embedded clinical record. + +### 2. Profiles + +Declare the NRCeS profile in `meta.profile` on every resource you send, for example `https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim`. Declare only profiles NRCeS publishes: there is no NRCeS `QuestionnaireResponse` profile, so a `QuestionnaireResponse` takes the base FHIR definition. Do not require a profile on what you receive: payer-generated resources often carry none. + +### 3. References + +Resources in one bundle reference each other by `urn:uuid:`, with the same UUID as the entry's `fullUrl`. Absolute URLs are also accepted. Parse both. + +### 4. Timestamps + +ISO 8601 with the Indian offset, `+05:30`. UTC fails validation. Read `Bundle.timestamp` for the send time; `meta.lastUpdated` can be stale. + +### 5. Identifier types come from two systems + +`PMJAY`, `ABHA`, `CLN`, `UTR`, `HPID` and `HPIN` from NRCeS at `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code`. `NPI` for a hospital's HFR ID, `NIIP` for a payer's registry ID, `NH` for a plan, `MB` for a member number, and `JHN`, `MD` and `MR` from HL7 at `http://terminology.hl7.org/CodeSystem/v2-0203`. Take the system from the exchange you are building, not from the code. + +### 6. The HFR ID inside the bundle + +Must equal the registry ID on the sender's participant record, whichever element carries it. + +### 7. Sequences link things + +A `Claim.item` points at its diagnosis, procedure, care team and supporting information by sequence number, not by reference. Resolve through the `sequence` field, never by array position. + +### 8. Documents arrive two ways + +A supporting-info entry carries the file inline in `valueAttachment`, or points with `valueReference` at a resource in the same bundle: a `DocumentReference`, or the `Composition` heading an embedded ABDM record. One document per entry, 2 MB each, 20 MB per claim or preauthorisation bundle. Plan responses run past 20 MB; size clients and proxies for 25 MB. + +### 9. Category decides structured or not + +Supporting-info categories `DIA`, `HDS`, `CD` and `INF` take a reference to a structured record. `POI`, `POA`, `DOB`, `DEF`, `FIR`, `ATT` and `MB` take an attachment. + +### 10. Encode attachments once + +Base64 the file once. On receipt, check the decoded bytes for a file signature before trusting them, because double-encoded attachments are in circulation and render as a blank page. + +### 11. One Claim, three uses + +`Claim.use` is `preauthorization`, `claim` or `predetermination`, and nothing else changes. `pre-auth` and `pre-det` are not codes. + +### 12. Codes and displays match the plan + +Character for character, including the plan's own misspellings. A payer rejects a package whose display differs from the plan's. + +### 13. Match on the code, not the system + +The same package code appears under different systems in different exchanges. Match incoming codes on the code, and emit the system the exchange you are building expects. + +## Resources by exchange + +Each resource the bundles carry, its NRCeS profile, and the exchanges that use it. + +### Claim + +NRCeS profile: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html). + +- [Preauthorisation request](/docs/nhcx/v1/reference/fhir/preauthorisation-request) +- [Preauthorisation enhancement](/docs/nhcx/v1/reference/fhir/preauthorisation-enhancement) +- [Preauthorisation query and answer](/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer) +- [Claim request](/docs/nhcx/v1/reference/fhir/claim-request) +- [Claim query and answer](/docs/nhcx/v1/reference/fhir/claim-query-and-answer) +- [Communication](/docs/nhcx/v1/reference/fhir/communication) +- [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search) + +### ClaimResponse + +NRCeS profile: [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html). + +- [Preauthorisation response](/docs/nhcx/v1/reference/fhir/preauthorisation-response) +- [Preauthorisation query and answer](/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer) +- [Claim response](/docs/nhcx/v1/reference/fhir/claim-response) +- [Claim query and answer](/docs/nhcx/v1/reference/fhir/claim-query-and-answer) +- [Cancel, reprocess and shortfall](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall) +- [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search) + +### Communication + +NRCeS profile: [Communication](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Communication.html). + +- [Preauthorisation query and answer](/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer) +- [Claim query and answer](/docs/nhcx/v1/reference/fhir/claim-query-and-answer) +- [Communication](/docs/nhcx/v1/reference/fhir/communication) + +### CommunicationRequest + +NRCeS profile: [CommunicationRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CommunicationRequest.html). + +- [Preauthorisation query and answer](/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer) +- [Claim query and answer](/docs/nhcx/v1/reference/fhir/claim-query-and-answer) +- [Communication](/docs/nhcx/v1/reference/fhir/communication) + +### Coverage + +NRCeS profile: [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html). + +- [Coverage eligibility request](/docs/nhcx/v1/reference/fhir/coverage-eligibility-request) +- [Coverage eligibility response](/docs/nhcx/v1/reference/fhir/coverage-eligibility-response) +- [Preauthorisation request](/docs/nhcx/v1/reference/fhir/preauthorisation-request) +- [Preauthorisation response](/docs/nhcx/v1/reference/fhir/preauthorisation-response) +- [Preauthorisation enhancement](/docs/nhcx/v1/reference/fhir/preauthorisation-enhancement) +- [Preauthorisation query and answer](/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer) +- [Claim request](/docs/nhcx/v1/reference/fhir/claim-request) +- [Claim response](/docs/nhcx/v1/reference/fhir/claim-response) +- [Claim query and answer](/docs/nhcx/v1/reference/fhir/claim-query-and-answer) +- [Cancel, reprocess and shortfall](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall) +- [Communication](/docs/nhcx/v1/reference/fhir/communication) +- [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search) + +### CoverageEligibilityRequest + +NRCeS profile: [CoverageEligibilityRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CoverageEligibilityRequest.html). + +- [Coverage eligibility request](/docs/nhcx/v1/reference/fhir/coverage-eligibility-request) +- [Coverage eligibility response](/docs/nhcx/v1/reference/fhir/coverage-eligibility-response) + +### CoverageEligibilityResponse + +NRCeS profile: [CoverageEligibilityResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CoverageEligibilityResponse.html). + +- [Coverage eligibility response](/docs/nhcx/v1/reference/fhir/coverage-eligibility-response) + +### InsurancePlan + +NRCeS profile: [InsurancePlan](https://nrces.in/ndhm/fhir/r4/StructureDefinition-InsurancePlan.html). + +- [Insurance plan response](/docs/nhcx/v1/reference/fhir/insurance-plan-response-overview) +- [Insurance plan response, package-based](/docs/nhcx/v1/reference/fhir/insurance-plan-response-package-based) +- [Insurance plan response, coverage-based](/docs/nhcx/v1/reference/fhir/insurance-plan-response-coverage-based) + +### Location + +NRCeS profile: [Location](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Location.html). + +- [Coverage eligibility request](/docs/nhcx/v1/reference/fhir/coverage-eligibility-request) +- [Coverage eligibility response](/docs/nhcx/v1/reference/fhir/coverage-eligibility-response) + +### Organization + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +- [Coverage eligibility request](/docs/nhcx/v1/reference/fhir/coverage-eligibility-request) +- [Coverage eligibility response](/docs/nhcx/v1/reference/fhir/coverage-eligibility-response) +- [Insurance plan response](/docs/nhcx/v1/reference/fhir/insurance-plan-response-overview) +- [Insurance plan response, package-based](/docs/nhcx/v1/reference/fhir/insurance-plan-response-package-based) +- [Insurance plan response, coverage-based](/docs/nhcx/v1/reference/fhir/insurance-plan-response-coverage-based) +- [Preauthorisation request](/docs/nhcx/v1/reference/fhir/preauthorisation-request) +- [Preauthorisation response](/docs/nhcx/v1/reference/fhir/preauthorisation-response) +- [Preauthorisation enhancement](/docs/nhcx/v1/reference/fhir/preauthorisation-enhancement) +- [Preauthorisation query and answer](/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer) +- [Claim request](/docs/nhcx/v1/reference/fhir/claim-request) +- [Claim response](/docs/nhcx/v1/reference/fhir/claim-response) +- [Claim query and answer](/docs/nhcx/v1/reference/fhir/claim-query-and-answer) +- [Cancel, reprocess and shortfall](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall) +- [Payment notice and acknowledgement](/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement) +- [Communication](/docs/nhcx/v1/reference/fhir/communication) +- [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search) + +### Patient + +NRCeS profile: [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html). + +- [Coverage eligibility request](/docs/nhcx/v1/reference/fhir/coverage-eligibility-request) +- [Coverage eligibility response](/docs/nhcx/v1/reference/fhir/coverage-eligibility-response) +- [Preauthorisation request](/docs/nhcx/v1/reference/fhir/preauthorisation-request) +- [Preauthorisation response](/docs/nhcx/v1/reference/fhir/preauthorisation-response) +- [Preauthorisation enhancement](/docs/nhcx/v1/reference/fhir/preauthorisation-enhancement) +- [Preauthorisation query and answer](/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer) +- [Claim request](/docs/nhcx/v1/reference/fhir/claim-request) +- [Claim response](/docs/nhcx/v1/reference/fhir/claim-response) +- [Claim query and answer](/docs/nhcx/v1/reference/fhir/claim-query-and-answer) +- [Cancel, reprocess and shortfall](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall) +- [Communication](/docs/nhcx/v1/reference/fhir/communication) +- [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search) + +### PaymentNotice + +NRCeS profile: [PaymentNotice](https://nrces.in/ndhm/fhir/r4/StructureDefinition-PaymentNotice.html). + +- [Payment notice and acknowledgement](/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement) + +### PaymentReconciliation + +NRCeS profile: [PaymentReconciliation](https://nrces.in/ndhm/fhir/r4/StructureDefinition-PaymentReconciliation.html). + +- [Payment notice and acknowledgement](/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement) + +### Practitioner + +NRCeS profile: [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html). + +- [Preauthorisation request](/docs/nhcx/v1/reference/fhir/preauthorisation-request) +- [Preauthorisation enhancement](/docs/nhcx/v1/reference/fhir/preauthorisation-enhancement) +- [Preauthorisation query and answer](/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer) +- [Claim request](/docs/nhcx/v1/reference/fhir/claim-request) +- [Claim query and answer](/docs/nhcx/v1/reference/fhir/claim-query-and-answer) +- [Communication](/docs/nhcx/v1/reference/fhir/communication) +- [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search) + +### PractitionerRole + +NRCeS profile: [PractitionerRole](https://nrces.in/ndhm/fhir/r4/StructureDefinition-PractitionerRole.html). + +- [Coverage eligibility request](/docs/nhcx/v1/reference/fhir/coverage-eligibility-request) +- [Coverage eligibility response](/docs/nhcx/v1/reference/fhir/coverage-eligibility-response) + +### Procedure + +NRCeS profile: [Procedure](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Procedure.html). + +- [Preauthorisation request](/docs/nhcx/v1/reference/fhir/preauthorisation-request) +- [Preauthorisation enhancement](/docs/nhcx/v1/reference/fhir/preauthorisation-enhancement) +- [Preauthorisation query and answer](/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer) +- [Claim request](/docs/nhcx/v1/reference/fhir/claim-request) +- [Claim query and answer](/docs/nhcx/v1/reference/fhir/claim-query-and-answer) +- [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search) + +### Questionnaire + +- [Insurance plan response](/docs/nhcx/v1/reference/fhir/insurance-plan-response-overview) +- [Insurance plan response, package-based](/docs/nhcx/v1/reference/fhir/insurance-plan-response-package-based) +- [Insurance plan response, coverage-based](/docs/nhcx/v1/reference/fhir/insurance-plan-response-coverage-based) + +### QuestionnaireResponse + +- [Preauthorisation request](/docs/nhcx/v1/reference/fhir/preauthorisation-request) +- [Preauthorisation enhancement](/docs/nhcx/v1/reference/fhir/preauthorisation-enhancement) +- [Preauthorisation query and answer](/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer) +- [Claim request](/docs/nhcx/v1/reference/fhir/claim-request) +- [Claim query and answer](/docs/nhcx/v1/reference/fhir/claim-query-and-answer) + +### Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +- [Insurance plan request](/docs/nhcx/v1/reference/fhir/insurance-plan-request) +- [Preauthorisation query and answer](/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer) +- [Claim query and answer](/docs/nhcx/v1/reference/fhir/claim-query-and-answer) +- [Cancel, reprocess and shortfall](/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall) +- [Payment notice and acknowledgement](/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement) +- [Communication](/docs/nhcx/v1/reference/fhir/communication) +- [Predetermination, status and search](/docs/nhcx/v1/reference/fhir/predetermination-status-and-search) + +## Profiles in use + +The profiles the bundles declare in `meta.profile`, each linked to its published definition. + +- [`http://hl7.org/fhir/StructureDefinition/CoverageEligibilityResponse`](https://hl7.org/fhir/R4/coverageeligibilityresponse.html) +- [`https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim`](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html) +- [`https://nrces.in/ndhm/fhir/r4/StructureDefinition/ClaimResponse`](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html) +- [`https://nrces.in/ndhm/fhir/r4/StructureDefinition/Communication`](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Communication.html) +- [`https://nrces.in/ndhm/fhir/r4/StructureDefinition/CommunicationRequest`](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CommunicationRequest.html) +- [`https://nrces.in/ndhm/fhir/r4/StructureDefinition/Coverage`](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) +- [`https://nrces.in/ndhm/fhir/r4/StructureDefinition/CoverageEligibilityRequest`](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CoverageEligibilityRequest.html) +- [`https://nrces.in/ndhm/fhir/r4/StructureDefinition/CoverageEligibilityResponse`](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CoverageEligibilityResponse.html) +- [`https://nrces.in/ndhm/fhir/r4/StructureDefinition/InsurancePlan`](https://nrces.in/ndhm/fhir/r4/StructureDefinition-InsurancePlan.html) +- [`https://nrces.in/ndhm/fhir/r4/StructureDefinition/Location`](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Location.html) +- [`https://nrces.in/ndhm/fhir/r4/StructureDefinition/Organization`](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) +- [`https://nrces.in/ndhm/fhir/r4/StructureDefinition/Patient`](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) +- [`https://nrces.in/ndhm/fhir/r4/StructureDefinition/Practitioner`](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html) +- [`https://nrces.in/ndhm/fhir/r4/StructureDefinition/PractitionerRole`](https://nrces.in/ndhm/fhir/r4/StructureDefinition-PractitionerRole.html) +- [`https://nrces.in/ndhm/fhir/r4/StructureDefinition/Procedure`](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Procedure.html) +- `https://nrces.in/ndhm/fhir/r4/StructureDefinition/QuestionnaireResponse`, which NRCeS does not publish; base FHIR [QuestionnaireResponse](https://hl7.org/fhir/R4/questionnaireresponse.html) +- [`https://nrces.in/ndhm/fhir/r4/StructureDefinition/Task`](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What PMJAY specifies + +- Payer-generated bundles carry the case number as `Bundle.identifier`, under the payer's own host. The host arrives spelled both `payer.pmjay.nha.gov.in` and `payer.pmajy.nha.gov.in`; echo the spelling that arrived. +- Payer-generated bundles tag every resource `SUBSETTED` from `http://terminology.hl7.org/CodeSystem/v3-ObservationValue`, "Resource encoded in summary mode". It marks a projection of the payer's record, not an error. +- Identifier systems on the payer's side are NHA hosts such as `https://hcx.pmjay.gov.in/v1/preauthorization` and `https://payer.nha.gov.in`. +- A preauthorisation with its embedded clinical records runs to around 30 entries, a claim to over 40, a query answer to nearly a hundred. + +### What PMJAY requires + +- Element ids on every Claim bundle: the `Claim` its claim number, each `item` `Item/n`, each `procedure` `Procedure/n`, each `supportingInfo` `SupportingInformation/n`; `1` for `Patient`, `Coverage` and the provider `Organization`, `2` for the payer `Organization`. Refused with `PAYR-1027` otherwise. +- The `Practitioner` carries the HPR id typed `HPIN` under `https://hpr.abdm.gov.in`, beside `HPID` and the registration number typed `MD`. Refused with `PAYR-1083` otherwise. +- Items coded from the package master: `item.category` is the master's specialty code, and the ward tier rides as `item.modifier` with the master's stratification code. +- Every `supportingInfo` carries a `sequence`, numbered from 1 with no gaps. Refused with `PAYR-1019` otherwise. +- Attachments as `application/pdf`, `application/jpg`, `application/jpeg`, `application/png` or `application/fhir+json`. Anything else is refused with `PAYR-1008`. diff --git a/site/docs/nhcx/v1/reference/fhir/insurance-plan-request.md b/site/docs/nhcx/v1/reference/fhir/insurance-plan-request.md new file mode 100644 index 000000000..a9aa5aa17 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/insurance-plan-request.md @@ -0,0 +1,152 @@ +--- +title: Insurance plan request +sidebar_label: Insurance plan request +sidebar_position: 4 +description: Task-based plan polling request +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/04-Insurance Plan Request.md +generated: true +--- + +# Insurance plan request + +One `Task` asking a payer for the plan behind a policy. There is no patient and no clinical content, because the plan belongs to the policy and the hospital, not to an admission. Sent once per policy and cached. + +Sent on `/v1/insuranceplan/request`, answered on `/v1/insuranceplan/on_request`. + +## The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | + +## Elements + +### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `status` | `requested` | +| `intent` | `order` | +| `code.coding[]` | `poll` in `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `input[]` | valueString `POL7UMU001` | +| | valueString `IN1910000151` | +| `input[].type.coding[]` | `policyNumber` in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code` | +| | `providerId` in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code` | + +## Rules + +### 1. The Task code system + +`poll` under `http://terminology.hl7.org/CodeSystem/financialtaskcode`, not the older `https://nhcx.abdm.gov.in/api`. + +### 2. Intent + +`order`. Some element tables say `original-order`; the bundle sends `order`. + +### 3. Inputs + +`valueString`, typed `policyNumber` and `providerId` under `ndhm-task-input-type-code`. At least one; both narrow the answer to the packages this hospital is empanelled for. + +### 4. No case yet + +No case exists, so the bundle carries no case number. The callback is the only link between request and answer. + +### 5. Task codes differ by system across the exchange + +`poll`, `cancel`, `reprocess`, `release` and `status` in `financialtaskcode`; `deliver` in `ndhm-task-codes`; `approve` in `http://hl7.org/fhir/CodeSystem/task-code`. Switch on system and code together. + +### 6. When to send it + +Once per policy, not per patient. Refresh on a `policychange` communication and on your own schedule. + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What changes in the bundle + +The PMJAY bundle has the same resources, elements and systems as the generic one. + +### What PMJAY specifies + +- `policyNumber` is the beneficiary's own policy code from the policy lookup, of the form `PMJAY//S/G`. +- `providerId` is the hospital's HFR ID, the same value as on its participant record. + +### What PMJAY requires + +- A policy the hospital is not empanelled under is refused with `PAYR-1401`. +- Refresh weekly per the FRD, or every fifteen days per the scenario sheet, and at once on renewal, amendment or a `policychange` communication. + +## Use cases, APIs and data elements + +### B2 Request insurance plan (provider) + +A Task with code poll, keyed on policy number and provider id. The answer is the policy as a benefit structure: packages, rates, documents, questionnaires. + +| | | +| :-- | :-- | +| **API** | `/v1/insuranceplan/request` [`apis/09-insurance-plan/v1-insuranceplan-request.bru`](/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-v1-insuranceplan-request) | +| **Callback** | `/v1/insuranceplan/on_request` [`apis/09-insurance-plan/v1-insuranceplan-on-request.bru`](/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-v1-insuranceplan-on-request) | +| **Carries JWE** | yes | +| **Focal resource** | `Task` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `` | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `taskCode` | Task Code | Task | `code` | `1..1` | `Task.code.coding[0].code` | `poll` | | +| `policyNumber` | Policy Number | Task Input | `string` | `1..1` | `Task.input[type=PolicyNumber].valueString` | `PMJAY/HP/S/G` | | +| `facilityId` | Provider HFR ID | Task Input | `string` | `1..1` | `Task.input[type=ProviderId].valueString` | `IN1910000151` | | + +NRCeS profiles: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +### D1 Fetch the insurance plan (pmjay) + +Keyed on provider id, policy code and participant id. The answer is the scheme configuration for this hospital: specialities, packages, rates, Claim-Condition flags, mandatory documents and questionnaires. Over twenty megabytes; store it queryable, version it, refresh weekly and on any policychange communication. + +| | | +| :-- | :-- | +| **API** | `/v1/insuranceplan/request` [`apis/09-insurance-plan/v1-insuranceplan-request.bru`](/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-v1-insuranceplan-request) | +| **Callback** | `/v1/insuranceplan/on_request` [`apis/09-insurance-plan/v1-insuranceplan-on-request.bru`](/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-v1-insuranceplan-on-request) | +| **Carries JWE** | yes | +| **Focal resource** | `Task` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `` | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `taskCode` | Task Code | Task | `code` | `1..1` | `Task.code.coding[0].code` | `poll` | | +| `schemeId` | Scheme Policy Identifier | Task Input | `string` | `1..1` | `Task.input[type=PolicyNumber].valueString` | `PMJAY/HP/S/G` | | + +NRCeS profiles: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). diff --git a/site/docs/nhcx/v1/reference/fhir/insurance-plan-response-coverage-based.md b/site/docs/nhcx/v1/reference/fhir/insurance-plan-response-coverage-based.md new file mode 100644 index 000000000..645779537 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/insurance-plan-response-coverage-based.md @@ -0,0 +1,162 @@ +--- +title: Insurance plan response, coverage-based +sidebar_label: Insurance plan response, coverage-based +sidebar_position: 7 +description: Commercial insurance plan layout +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/07-Insurance Plan Response, Coverage-Based.md +generated: true +--- + +# Insurance plan response, coverage-based + +The shape a private insurer or its TPA sends, and the generic shape on the exchange. An indemnity policy lists benefits with money limits, and the hospital bills against those limits rather than against a package price. + +## The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `InsurancePlan` | [InsurancePlan](https://nrces.in/ndhm/fhir/r4/StructureDefinition-InsurancePlan.html) | +| 2 | `Organization (ins)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 3 | `Questionnaire` | none | +| 4 | `Questionnaire` | none | +| 5 | `Questionnaire` | none | +| 6 | `Questionnaire` | none | +| 7 | `Questionnaire` | none | + +## Elements + +NRCeS profile: [InsurancePlan](https://nrces.in/ndhm/fhir/r4/StructureDefinition-InsurancePlan.html). + +| Element | Example | +| :-- | :-- | +| `coverage[].type.coding[]` | `737481003` Inpatient care management (procedure) in `http://snomed.info/sct` | +| | `710967003` Management of health status after discharge from hospital (procedure) in `http://snomed.info/sct` | +| | `409972000` Pre-hospital care in `http://snomed.info/sct` | +| | and 6 more | +| `coverage[].benefit[].type.coding[]` | `309904001` Intensive care unit (environment) in `http://snomed.info/sct` | +| | `87612001` Blood in `http://snomed.info/sct` | +| | `24099007` Oxygen (substance) in `http://snomed.info/sct` | +| | and 20 more | +| `coverage[].benefit[].limit[].value` | value `90`, comparator `<=`, unit `day` | +| | value `60`, comparator `<=`, unit `day` | +| `coverage[].benefit[]` | id `PROC-PED-05` | +| | id `PROC-CARD-04` | +| | id `PROC-CAT-03` | +| | and 2 more | +| `coverage[].benefit[].type` | text `Paediatric Pneumonia, PICU Management` | +| | text `Percutaneous Transluminal Coronary Angioplasty (PTCA)` | +| | text `Cataract Surgery with Foldable IOL` | +| | and 2 more | +| `plan[].identifier[]` | use `official`, value `Sandbox Default Policy` | +| `plan[].type.coding[]` | `01` Individual in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-plan-type` | +| `plan[].generalCost[].cost` | value `500000`, currency `INR` | +| `plan[].specificCost[].category.coding[]` | `49122002` Ambulance, device (physical object) in `http://snomed.info/sct` | +| | `224663004` Single room (environment) in `http://snomed.info/sct` | +| | `309904001` Intensive care unit (environment) in `http://snomed.info/sct` | +| | and 4 more | +| `plan[].specificCost[].benefit[].type.coding[]` | `49122002` Ambulance, device (physical object) in `http://snomed.info/sct` | +| | `224663004` Single room (environment) in `http://snomed.info/sct` | +| | `309904001` Intensive care unit (environment) in `http://snomed.info/sct` | +| | and 16 more | +| `plan[].specificCost[].benefit[].cost[].type.coding[]` | `fullcoverage` | +| | `Procedure` Selected treatment or service or product is a type of procedure or package in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-plan-type` | +| `plan[].specificCost[].benefit[].cost[].value` | value `5000`, unit `INR` | +| | value `10000`, unit `INR` | +| | value `20000`, unit `INR` | +| | and 6 more | +| `plan[].specificCost[].benefit[]` | id `PROC-PED-05` | +| | id `PROC-CARD-04` | +| | id `PROC-CAT-03` | +| | and 2 more | +| `plan[].specificCost[].benefit[].type` | text `Paediatric Pneumonia, PICU Management` | +| | text `Percutaneous Transluminal Coronary Angioplasty (PTCA)` | +| | text `Cataract Surgery with Foldable IOL` | +| | and 2 more | + +## Claim-Condition flags + +| Flag | Values in the plan | What it governs | +| :-- | :-- | :-- | +| `ProcedureType` | `Critical Care`, `Day Care`, `Surgical` | The kind of care the benefit covers, such as surgical, day care or critical care | +| `IsDayCare` | `N`, `Y` | Day-care treatment, no overnight stay | +| `ImplantApplicable` | `N`, `Y` | Whether an implant may be billed under the benefit | + +## Supporting-information requirements + +| Code | Display | Stage | System | +| :-- | :-- | :-- | :-- | +| `POI` | Proof of identity | preauth | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `DIA` | Diagnostic report | preauth | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `RAD` | Radiology / X-Ray / CT / MRI Scan Reports | preauth | `` | +| `HDS` | Hospital discharge summary | discharge | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `CD` | Clinical document | discharge | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `ICU` | ICU Flow Chart & Vital Monitoring Log | discharge | `` | +| `HDS` | Hospital discharge summary | claim | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `MB` | Medical bill | claim | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `FCF` | Filled claim form | claim | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `INF` | Additional info related to claim | any | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `STG` | Standard Treatment Guidelines | any | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `ANG` | Coronary Angiography Film & CD Report | preauth | `` | +| `ECG` | 12-Lead Electrocardiogram (ECG) Strip | preauth | `` | +| `MB` | Medical bill | preauth | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `EST` | Detailed Pre-Auth Cost Estimate | preauth | `` | +| `IMP` | Document Type - Implant | discharge | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `IMP` | Document Type - Implant | claim | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `CER` | Medical Certficate | preauth | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `MB` | Medical bill | discharge | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `DIA` | Diagnostic report | claim | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `HIS_PATH` | Histopathology / Biopsy Report | claim | `` | +| `CD` | Clinical document | claim | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `OTR` | Operation Theatre Notes & Surgical Summary | claim | `` | + +10 of the requirements link a questionnaire through `documentationUrl`. + +## Exclusions + +| category | statement | item | +| :-- | :-- | :-- | +| Excl01 | Expenses related to the treatment of a pre-existing Disease (PED) and its direc… | | +| Excl02 | Expenses related to the treatment of the listed conditions, surgeries and treat… | 86077009 | +| Excl03 | Expenses related to the treatment of any illness within 30 days from the first … | | +| Excl08 | Expenses for cosmetic or plastic surgery are excluded unless required as part o… | | + +## Questionnaires + +| Title | Items | Item types | Question in | +| :-- | :-- | :-- | :-- | +| Paediatric Pneumonia, PICU Management, Standard Treatment Guidelines | 4 | `string` | `text` | +| Percutaneous Transluminal Coronary Angioplasty (PTCA), Standard Treatment Guide… | 5 | `string` | `text` | +| Cataract Surgery with Foldable IOL, Standard Treatment Guidelines | 4 | `string` | `text` | +| Acute Appendectomy (Laparoscopic), Standard Treatment Guidelines | 4 | `string` | `text` | +| Total Knee Replacement (Unilateral), Standard Treatment Guidelines | 5 | `string` | `text` | + +## Rules + +### 1. One structure per benefit + +Everything about a benefit, its conditions and required documents, hangs off `coverage[].benefit[]`, with its money cap in `limit[]`. `plan[].specificCost[]` carries the cost per benefit category. + +### 2. Conditions are prose + +The `Claim-Condition` extension on a benefit carries a sentence, such as a window after discharge, with the number in `limit[]` as a value, a comparator and a unit. + +### 3. Benefit types are the insurer's vocabulary + +No closed value set is published for indemnity benefit types. Ask the insurer for its list before building a picker. + +### 4. Requirements by stage + +Supporting-info requirements name the stage they apply to, preauthorisation, discharge or claim, in the extension url. + +### 5. Exclusions + +Waiting periods, pre-existing-condition rules and excluded procedures are `Claim-Exclusion` extensions on the plan, each with a category and a statement. + +### 6. What the screen caps + +The amount, against the benefit's limit. Submission is blocked by an amount over the limit or a missing mandatory document. + +## PMJAY + +PMJAY does not send this shape. Its plan is package-based; see the previous chapter. diff --git a/site/docs/nhcx/v1/reference/fhir/insurance-plan-response-overview.md b/site/docs/nhcx/v1/reference/fhir/insurance-plan-response-overview.md new file mode 100644 index 000000000..286cbe994 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/insurance-plan-response-overview.md @@ -0,0 +1,221 @@ +--- +title: Insurance plan response +sidebar_label: Insurance plan response +sidebar_position: 5 +description: Collection bundle overview and questionnaires +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/05-Insurance Plan Response Overview.md +generated: true +--- + +# Insurance plan response + +The payer's answer to the poll, and the largest message on NHCX. It is the policy as data: what the hospital may bill, at what rate, under what rules, with which documents and on which forms. Everything on a treatment-planning screen comes from here. + +Sent on `/v1/insuranceplan/on_request`. + +## The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `InsurancePlan` | [InsurancePlan](https://nrces.in/ndhm/fhir/r4/StructureDefinition-InsurancePlan.html) | +| 2 | `Organization (ins)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 3 | `Questionnaire` | none | +| 4 | `Questionnaire` | none | +| 5 | `Questionnaire` | none | +| 6 | `Questionnaire` | none | +| 7 | `Questionnaire` | none | + +## Elements + +### 1. InsurancePlan + +NRCeS profile: [InsurancePlan](https://nrces.in/ndhm/fhir/r4/StructureDefinition-InsurancePlan.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://irdai.gov.in`, value `SANDBOX-DEFAULT-01` | +| `status` | `active` | +| `type[].coding[]` | `01` Hospitalisation Indemnity Policy in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-insuranceplan-type` | +| `name` | `Sandbox Default Policy` | +| `alias` | `Sandbox Default`, `Default` | +| `period` | start `2026-01-01`, end `2026-12-31` | +| `ownedBy` | reference `urn:uuid:39cd4b51-bddd-5cc1-a65a-6fa4a2a83cb5`, display `Sandbox Payer` | +| `administeredBy` | reference `urn:uuid:39cd4b51-bddd-5cc1-a65a-6fa4a2a83cb5`, display `Sandbox Payer` | +| `plan[].identifier[]` | use `official`, value `Sandbox Default Policy` | +| `plan[].type.coding[]` | `01` Individual in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-plan-type` | +| `plan[].generalCost[].cost` | value `500000`, currency `INR` | + +### 2. Organization (ins) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `type[].coding[]` | `ins` Insurance Company in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `Sandbox Payer` | +| `address[]` | city `Bengaluru`, state `Karnataka`, country `India` | + +### 3. Questionnaire + +| Element | Example | +| :-- | :-- | +| `url` | `` | +| `name` | `STG Questionnaire` | +| `title` | `Paediatric Pneumonia, PICU Management, Standard Treatment Guidelines` | +| `status` | `active` | + +### 4. Questionnaire + +| Element | Example | +| :-- | :-- | +| `url` | `` | +| `name` | `STG Questionnaire` | +| `title` | `Percutaneous Transluminal Coronary Angioplasty (PTCA), Standard Treatment Guide…` | +| `status` | `active` | + +### 5. Questionnaire + +| Element | Example | +| :-- | :-- | +| `url` | `` | +| `name` | `STG Questionnaire` | +| `title` | `Cataract Surgery with Foldable IOL, Standard Treatment Guidelines` | +| `status` | `active` | + +### 6. Questionnaire + +| Element | Example | +| :-- | :-- | +| `url` | `` | +| `name` | `STG Questionnaire` | +| `title` | `Acute Appendectomy (Laparoscopic), Standard Treatment Guidelines` | +| `status` | `active` | + +### 7. Questionnaire + +| Element | Example | +| :-- | :-- | +| `url` | `` | +| `name` | `STG Questionnaire` | +| `title` | `Total Knee Replacement (Unilateral), Standard Treatment Guidelines` | +| `status` | `active` | + +## Questionnaires + +| Title | Items | Item types | Question in | +| :-- | :-- | :-- | :-- | +| Paediatric Pneumonia, PICU Management, Standard Treatment Guidelines | 4 | `string` | `text` | +| Percutaneous Transluminal Coronary Angioplasty (PTCA), Standard Treatment Guide… | 5 | `string` | `text` | +| Cataract Surgery with Foldable IOL, Standard Treatment Guidelines | 4 | `string` | `text` | +| Acute Appendectomy (Laparoscopic), Standard Treatment Guidelines | 4 | `string` | `text` | +| Total Knee Replacement (Unilateral), Standard Treatment Guidelines | 5 | `string` | `text` | + +## Rules + +### 1. Two shapes + +Coverage-based, sent by private insurers and TPAs: benefits with money limits, rules as prose. Package-based, sent by government schemes: named packages at fixed rates, rules as flags. The next two chapters take each shape. + +### 2. Two type codes + +`InsurancePlan.type` says what kind of insurance this is. `plan.type` says how it is sold, individual or group. + +### 3. Identifier + +A private insurer's plan is identified under `https://irdai.gov.in`. A scheme plan is identified under NHA hosts, with the policy code and the revision. + +### 4. The wallet + +`plan.generalCost` is the sum insured, or the family wallet under a scheme. + +### 5. Cache per policy + +Stamp the cache with the plan's revision identifier, and record on every preauthorisation and claim which revision it was built against. + +### 6. The first line of validation + +Codes and displays, amounts, quantities and mandatory documents are checked against the cached plan on the server before anything is sent. + +### 7. The forms + +The `Questionnaire` resources are the payer's forms. Render them from the plan, never hard-code them, because they change with the plan. + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What changes in the bundle + +#### Elements PMJAY adds + +| Element | Example | +| :-- | :-- | +| `InsurancePlan.identifier[].type.coding[]` | `NH` National Health Plan Identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| | `XV` Health Plan Identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `Organization.identifier[]` | system `https://facility.abdm.gov.in`, value `1518` | +| `Organization.identifier[].type.coding[]` | `NIIP` National Insurance Payor Identifier (Payor) in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `Organization.active` | `true` | +| `Organization.contact[].telecom[]` | system `phone`, value `9000000003` | + +#### Elements PMJAY leaves out + +| Element | Example | +| :-- | :-- | +| `InsurancePlan.alias` | `Sandbox Default`, `Default` | +| `InsurancePlan.plan[].identifier[]` | use `official`, value `Sandbox Default Policy` | +| `Organization.address[]` | city `Bengaluru`, state `Karnataka`, country `India` | + +#### Systems PMJAY binds differently + +| Element | Generic | PMJAY | +| :-- | :-- | :-- | +| `InsurancePlan.identifier[]` | `https://irdai.gov.in` | `https://hcx.pmjay.gov.in/v1/InsurancePlan`, `https://payer.nha.gov.in` | + +### What PMJAY specifies + +- Package-based throughout: `InsurancePlan.type` `07` Universal Health Policy, `plan.type` `03` Group. +- `identifier` carries the policy code typed `NH` and the scheme revision typed `XV`; the revision is what the cache is stamped with. +- A full scheme plan carries thousands of `Questionnaire` entries, many of them repeated. Deduplicate on `fullUrl`. + +### What PMJAY requires + +- Keep the revision on every submission. An outdated tariff causes a rate mismatch and a rejection on suspicion of tampering. + +## Use cases, APIs and data elements + +### C4 Respond to insurance plan request (payer) + +The plan as a benefit structure. Under PMJAY this is the scheme configuration for one hospital and can exceed twenty megabytes. + +| | | +| :-- | :-- | +| **API** | `/v1/insuranceplan/on_request` [`apis/09-insurance-plan/v1-insuranceplan-on-request.bru`](/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-v1-insuranceplan-on-request) | +| **Callback** | `/v1/insuranceplan/request` [`apis/09-insurance-plan/v1-insuranceplan-request.bru`](/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-v1-insuranceplan-request) | +| **Workflow** | none (or 5 under PMJAY) | +| **Carries JWE** | yes | +| **Focal resource** | `InsurancePlan` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1518@hcx` | +| `x-hcx-recipient_code` | `1000004446@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `response.complete` | +| `x-hcx-ben-abha-id` | `` | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `planName` | Insurance Plan Name | Plan | `string` | `1..1` | `InsurancePlan.name` | `PMJAY Ayushman Bharat` | | +| `packageCode` | Benefit Package Code | Plan Cost | `string` | `1..*` | `InsurancePlan.plan[].specificCost[].benefit[].type.coding[0].code` | `MG004A` | | +| `packageRate` | Agreed Tariff Rate | Plan Cost | `decimal` | `1..*` | `InsurancePlan.plan[].specificCost[].benefit[].cost[0].value.value` | `15500.00` | | + +NRCeS profiles: [InsurancePlan](https://nrces.in/ndhm/fhir/r4/StructureDefinition-InsurancePlan.html). diff --git a/site/docs/nhcx/v1/reference/fhir/insurance-plan-response-package-based.md b/site/docs/nhcx/v1/reference/fhir/insurance-plan-response-package-based.md new file mode 100644 index 000000000..fe84744d1 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/insurance-plan-response-package-based.md @@ -0,0 +1,231 @@ +--- +title: Insurance plan response, package-based +sidebar_label: Insurance plan response, package-based +sidebar_position: 6 +description: PMJAY package structure and claim condition extensions +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/06-Insurance Plan Response, Package-Based.md +generated: true +--- + +# Insurance plan response, package-based + +The shape government schemes send, and PMJAY sends throughout. A package is a named procedure at a fixed, all-inclusive rate. The plan carries every package the hospital may bill and the rules that govern each one. Everything in this chapter is what PMJAY specifies. + +## The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `InsurancePlan` | none declared; NRCeS [InsurancePlan](https://nrces.in/ndhm/fhir/r4/StructureDefinition-InsurancePlan.html) | +| 2 | `Organization (pay)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 3 | `Questionnaire` | none | +| 4 | `Questionnaire` | none | +| 5 | `Questionnaire` | none | +| 6 | `Questionnaire` | none | +| 7 | `Questionnaire` | none | + +## Elements + +NRCeS profile: [InsurancePlan](https://nrces.in/ndhm/fhir/r4/StructureDefinition-InsurancePlan.html). + +| Element | Example | +| :-- | :-- | +| `coverage[].type.coding[]` | `MG` General Medicine in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-benefitcategory` | +| | `SG` General Surgery in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-benefitcategory` | +| | `MO` Medical Oncology in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-benefitcategory` | +| | and 4 more | +| `coverage[].benefit[]` | id `MG004A` | +| | id `MG005A` | +| | id `MG072C` | +| | and 16 more | +| `coverage[].benefit[].type.coding[]` | `MG004A` Dengue fever (Dengue fever) in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-productorservice` | +| | `MG005A` Chikungunya fever (Chikungunya fever) in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-productorservice` | +| | `MG072C` Acute Haemodialysis (Acute Haemodialysis) in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-productorservice` | +| | and 16 more | +| `coverage[].benefit[].limit[]` | id `MGMG004A` | +| | id `MGMG004ASTRAT006a` | +| | id `MGMG004ASTRAT006b` | +| | and 77 more | +| `coverage[].benefit[].limit[].value` | value `0`, unit `INR` | +| | value `1800`, unit `INR` | +| | value `2700`, unit `INR` | +| | and 14 more | +| `coverage[].benefit[].limit[].code.coding[]` | `MG004A` Dengue fever (Dengue fever) | +| | `STRAT006a` Routine Ward | +| | `STRAT006b` HDU | +| | and 23 more | +| `plan[].type.coding[]` | `03` Group in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-plan-type` | +| `plan[].generalCost[].cost` | value `500000`, currency `INR` | +| `plan[].specificCost[]` | id `MG` | +| | id `SG` | +| | id `MO` | +| | and 2 more | +| `plan[].specificCost[].category.coding[]` | `MG` General Medicine in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-benefitcategory` | +| | `SG` General Surgery in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-benefitcategory` | +| | `MO` Medical Oncology in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-benefitcategory` | +| | and 2 more | +| `plan[].specificCost[].benefit[]` | id `PlanBenefit/MG004A` | +| | id `PlanBenefit/MG005A` | +| | id `PlanBenefit/MG072C` | +| | and 12 more | +| `plan[].specificCost[].benefit[].type.coding[]` | `MG004A` Dengue fever (Dengue fever) in `http://hl7.org/fhir/ValueSet/procedure-category` | +| | `MG005A` Chikungunya fever (Chikungunya fever) in `http://hl7.org/fhir/ValueSet/procedure-category` | +| | `MG072C` Acute Haemodialysis (Acute Haemodialysis) in `http://hl7.org/fhir/ValueSet/procedure-category` | +| | and 12 more | +| `plan[].specificCost[].benefit[].cost[].type.coding[]` | `Procedure` Selected treatment or service or proudct is a type of procedure or package in `https://www.nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-plan-type` | +| | `Stratification` Selected treatment or service or proudct is a type of stratification in `https://www.nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-plan-type` | +| `plan[].specificCost[].benefit[].cost[].value` | value `0`, unit `INR` | +| | value `1800`, unit `INR` | +| | value `2700`, unit `INR` | +| | and 11 more | +| `plan[].specificCost[].benefit[].cost[].qualifiers[].coding[]` | `STRAT006a` Routine Ward in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-productorservice` | +| | `STRAT006b` HDU in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-productorservice` | +| | `STRAT006c` ICU - Without Ventilator in `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-productorservice` | +| | and 3 more | + +## Claim-Condition flags + +| Flag | Values in the plan | What it governs | +| :-- | :-- | :-- | +| `ProcedureType` | `Conservative`, `Medical`, `Surgical` | Surgical, Medical or Conservative. Decides the clinical pathway, the document set, and the one-conservative-package-per-case rule | +| `GovtReserved` | `N` | `Y` means only a government hospital may bill it. Hide it in a private facility | +| `ApprovalNotRequired` | `Y`, `N` | `Y` means treatment need not wait for a decision. The case auto-approves if it is the first preauthorisation and every package has it | +| `EnhancementAllowed` | `Y`, `N` | `Y` means the package may be added on an enhancement | +| `ScheduledTATApproval` | `Y`, `N` | `Y` means the payer's silence within the turnaround window is approval | +| `QuantityAllowed` | `1`, `6` | Maximum quantity per approval | +| `IsDayCare` | `Y`, `N` | Day-care procedure, no overnight stay | +| `ImplantApplicable` | `N`, `Y` | Whether an implant line may be added | +| `StratificationAllowed` | `Y`, `N` | Whether a ward tier may ride as `item.modifier` | +| `MultipleImplantsAllowed` | `N` | Whether more than one implant may be added | +| `MultipleStratificationAllowed` | `Y`, `N` | Whether more than one ward tier may be added | +| `MaximumImplantsAllowed` | `1`, `0` | Cap on the number of implants | +| `MaximumStratificationAllowed` | `1`, `0` | Cap on the number of ward tiers | +| `CyclicProcedure` | `N`, `Y` | Repeatable under one approval, one supporting-info entry per cycle | +| `MaximumCyclesAllowed` | `0`, `6` | Cap on the number of cycles | +| `Standalone` | `N` | Refuse any other package alongside it | +| `ParentProcedure` | `NA`, `IN015A,SB003C,SB015C,SB072A,SB088MLA,SB103MLC,SB106MLA,SL038MLA,SM001MLA,SM003B…`, `IN058A,IN071A,MC023MLA,SB095MLB,SB100MLB,SB108MLA,SE012MLA,SM007B,SM027MLA,SN05…` | On an implant, the package it may accompany | +| `Unspecified` | `N`, `Y` | Free-text name and free-entry amount, validated against the wallet | +| `LamaDamaProcedure` | `Y` | Offer only on a LAMA or DAMA discharge | +| `DischargeStagesLamaDamaProcedure` | `Before Surgery, During Surgery` | The discharge stages at which a LAMA or DAMA package may be billed, before or during surgery | +| `los` | not carried | Maximum length of stay; bounds the days claimed, the `LM100` count included | + +## Supporting-information requirements + +| Code | Display | Stage | System | +| :-- | :-- | :-- | :-- | +| `POI` | Proof of identity | any | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `ADN` | Aadhaar Number | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `INF` | Additional info related to claim ( conveying additional situation and condition… | any | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `ODN` | Other document | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `DIA` | Diagnostic report | any | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `MAND0409` | any investigations done | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0064` | All investigations reports | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0006` | Detailed discharge summary | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0062` | Detailed ICPs | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0063` | Treatment details | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `CD` | | any | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `MAND0408` | Clinical notes detailing history and Admission notes showing vitals and examina… | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `STG` | Standard Treatment Guidelines | any | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `MAND0952` | MLC/ FIR +/- Nerve conduction velocity (NCV) + /- MRI + /- MRA + /- EMG (Electr… | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0300` | Detailed operatives notes | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0309` | Intra operative still photograph | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0946` | Clinical notes detailing the injury and need of surgery | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `HDS` | | any | `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `MAND0368` | Procedure / Operative Notes, Detailed Discharge Summary | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND1045` | Clinical notes with planned line of treatment (including indication for need of… | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0384` | MLC/ FIR if traumatic | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0592` | X Ray of affected limb | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0008` | Detailed Procedure / Operative Notes | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0112` | Post Procedure clinical photgraph | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0582` | clinical photograph of affected part | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0604` | clinical notes justifying the indication | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0067` | CBC | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0459` | CECT Thorax, abdomen and Pelvis | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0564` | histopathology (non small cell - adenocarcinoma or adenosquamous carcinoma) | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0074` | LFT | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0457` | RBS | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0447` | RFT | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0099` | BAR CODE OF THE DRUGS | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0102` | CHARTS OF CHEMOTHERAPY REGIMEN | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0101` | DISCHARGE SUMMARY OF INPATIENT DEPARTMENT / DISCHARGE SUMMARY OF DAY CARE DEPAR… | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0100` | REPORTS OF THE TESTS (PATHOLOGY, RADIOLOGY, MICROBIOLOGY, HEMATOLOGY, BIOCHEMIS… | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0103` | TRANFUSION SLIPS | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0189` | Histopathology report | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0226` | Post Procedure Photograph of affected part | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0030` | Procedure / Operative Notes | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0822` | Clinical notes with planned line of treatment justifying indication | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0647` | FIR/MLC in case of accident | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0161` | operative notes | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0159` | Still image of the the procedure with pt. ID and date | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0003` | Clinical notes | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0588` | clinical photograph | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0649` | doctors notes | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0648` | Patient details | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0650` | photo | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0162` | Discharge notes | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0163` | microbiology report | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0164` | Still image of the patient undergoing the procedure with date stamp | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0622` | CECT | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0621` | FNAC/ BIOPSY | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0152` | HPE report | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0151` | Post Procedure Photographs of surgical site | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0339` | Clinical notes with planned line of treatment | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0831` | Audiogram report justfying surgery | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0832` | CT- TEMPORAL BONE of affected side /X-RAY BOTH MASTOIDS | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0730` | USG/CT Abdomen | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0327` | Detailed discharge summary; | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | +| `MAND0326` | Reports of all investigations done and consultation paper of treating doctor me… | any | `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code` | + +5 of the requirements link a questionnaire through `documentationUrl`. + +## Questionnaires + +| Title | Items | Item types | Question in | +| :-- | :-- | :-- | :-- | +| Discharge Information | 7 | `attachment`, `choice`, `dateTime` | `text` | +| General Findings | 9 | `string`, `choice` | `text` | +| Personal History | 6 | `choice` | `text` | +| Family History | 7 | `choice` | `text` | +| Admission Details | 4 | `dateTime`, `choice` | `text` | + +## Rules + +### 1. Two parallel structures + +`coverage[]` carries the rules: flags, document requirements, questionnaire links and `limit[]` rates. `plan[].specificCost[]` carries the money: `cost[]` lines by type. Both hold the same package codes. Index both by package code and join; neither is complete alone. + +### 2. Categories + +`coverage[].type` and `specificCost[].category` bind to `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-benefitcategory`. Codes beginning `S` are surgical, `M` medical. + +### 3. Flags are strings + +Every flag except `ParentProcedure` is a `valueString`. `"N"` is truthy in most languages; compare against the literal `"Y"`. + +### 4. Cost lines + +`Procedure` is the base package rate. `Stratification` is the rate for a ward tier, named in `cost.qualifiers[]`. `Implant` is added over the package rate. + +### 5. A zero base rate + +A base limit of 0 means the payable amount is set entirely by the ward tier chosen. It is not missing data. Never submit a zero-value item. + +### 6. Document requirements come in two shapes + +Nested, one sub-extension per document, and flat, with `category`, `code` and `documentationUrl` directly under the extension. Recurse, or one shape is silently dropped. + +### 7. Where the question is + +Policy-level questionnaires put the question in `item.text`, STG questionnaires in `item.prefix`. Read `text` and fall back to `prefix`. + +### 8. Implant codes repeat + +Once per parent procedure they may accompany. Key on the package code with its parent, or on the element `id`. + +### 9. Extension urls change form + +The absolute `https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim-Condition` and the relative `claim-condition` both occur. Match on the last segment. + +## PMJAY + +This is the PMJAY shape; the rules above are PMJAY's. diff --git a/site/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement.md b/site/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement.md new file mode 100644 index 000000000..c87f95e21 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/payment-notice-and-acknowledgement.md @@ -0,0 +1,304 @@ +--- +title: Payment notice and acknowledgement +sidebar_label: Payment notice and acknowledgement +sidebar_position: 16 +description: Payment notices, reconciliations, and payment receipts +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/16-Payment Notice and Acknowledgement.md +generated: true +--- + +# Payment notice and acknowledgement + +The payer's notice that money has moved against an approved claim, and the provider's acknowledgement. The only exchange that carries actual money rather than an adjudicated figure. + +## The notice + +Sent on `/v1/paymentnotice/request`, workflow 30 initiated, 31 processed, 33 settled. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | none declared; NRCeS [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `PaymentNotice` | none declared; NRCeS [PaymentNotice](https://nrces.in/ndhm/fhir/r4/StructureDefinition-PaymentNotice.html) | +| 3 | `PaymentReconciliation` | none declared; NRCeS [PaymentReconciliation](https://nrces.in/ndhm/fhir/r4/StructureDefinition-PaymentReconciliation.html) | +| 4 | `Organization (prov)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Organization (pay)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `status` | `requested` | +| `intent` | `order` | +| `code.coding[]` | `deliver` deliver in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-codes` | +| `description` | `Settled in full: INR 135000 paid against INR 150000 approved.` | +| `authoredOn` | `2026-09-10T23:53:39+05:30` | +| `requester` | reference `` | +| `owner` | reference `` | +| `input[].type.coding[]` | `status` Status code in `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` | +| `input[].valueReference` | reference `` | + +#### 2. PaymentNotice + +NRCeS profile: [PaymentNotice](https://nrces.in/ndhm/fhir/r4/StructureDefinition-PaymentNotice.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system ``, value `NM-26-0SE00002L` | +| `identifier[].type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `status` | `active` | +| `created` | `2026-09-10T23:53:39+05:30` | +| `payment` | reference `` | +| `recipient` | reference `` | +| `amount` | value `135000`, currency `INR` | +| `paymentStatus.coding[]` | `cleared` Cleared in `http://terminology.hl7.org/CodeSystem/paymentstatus` | + +#### 3. PaymentReconciliation + +NRCeS profile: [PaymentReconciliation](https://nrces.in/ndhm/fhir/r4/StructureDefinition-PaymentReconciliation.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system ``, value `NM-26-0SE00002L` | +| `identifier[].type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `status` | `active` | +| `created` | `2026-09-10T23:53:39+05:30` | +| `disposition` | `Settled in full: INR 135000 paid against INR 150000 approved.` | +| `paymentDate` | `2026-09-10` | +| `paymentAmount` | value `135000`, currency `INR` | +| `paymentIdentifier` | system ``, value `UTR1789064619092` | +| `paymentIdentifier.type.coding[]` | `UTR` Unique Transaction Reference in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `detail[]` | id `PAY-2026-0009/TDS`, date `2026-09-10` | +| | id `PAY-2026-0009/Payment`, date `2026-09-10` | +| `detail[].identifier` | system ``, value `PAY-2026-0009/TDS` | +| | system ``, value `PAY-2026-0009/Payment` | +| `detail[].identifier.type.coding[]` | `PLAC` Placer Identifier in `https://https://nrces.in/ndhm/fhir/r4/ValueSet-ndhm-identifier-type-code.html` | +| `detail[].type.coding[]` | `TDS` TDS in `http://hl7.org/fhir/ValueSet/payment-type` | +| | `Payment` Payment in `http://hl7.org/fhir/ValueSet/payment-type` | +| `detail[].amount` | value `15000` | +| | value `135000` | + +The `Organization` entries are shaped as in the chapters that introduce them. + +## The acknowledgement + +Sent on `/v1/paymentnotice/on_request`, workflow 30 echoed; 17 under PMJAY. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 3 | `Organization (pay)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `status` | `completed` | +| `intent` | `order` | +| `code.coding[]` | `status` in `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `authoredOn` | `2026-09-10T23:53:40+05:30` | +| `requester` | reference `https://nhcx.abdm.gov.in/provider` | +| `owner` | reference `https://nhcx.abdm.gov.in/payer` | +| `description` | `Received the payment for claim NM-26-0SE00002L` | +| `output[].type.coding[]` | `status` Status in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-output-type` | +| | `claimNumber` ClaimNumber in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code` | +| `output[].valueCodeableConcept.coding[]` | `paymentack` Payment is acknowledged in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-output-value` | +| `output[]` | valueString `NM-26-0SE00002L` | + +The `Organization` entries are shaped as in the chapters that introduce them. + +## Rules + +### 1. The notice + +A `Task` coded `deliver` in `ndhm-task-codes` whose input references the `PaymentNotice`. `PaymentNotice.amount` is the net that reaches the account. `PaymentReconciliation` carries the payment date, the `UTR` and one `detail[]` line per money type. + +### 2. The arithmetic + +Net plus the deductions equals the adjudicated benefit, not the submitted amount. Run the check on every notice and flag a case that fails it. + +### 3. The acknowledgement + +A `Task` coded `status` in `financialtaskcode`, `completed`, with an output `paymentack` and the claim number as a second output. It confirms receipt, not agreement. + +### 4. Three notices + +30, 31 and 33, each with its own correlation id. The bank reference arrives on 33. Keep the path for the acknowledgement configurable per payer. + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What changes in the bundle + +#### The notice + +##### Systems PMJAY binds differently + +| Element | Generic | PMJAY | +| :-- | :-- | :-- | +| `PaymentNotice.identifier[]` | `` | `https://hcx.pmjay.gov.in/v1/preauthorization` | +| `PaymentReconciliation.identifier[]` | `` | `https://hcx.pmjay.gov.in/v1/preauthorization` | +| `PaymentReconciliation.paymentIdentifier` | `` | `https://payer.gov.in` | +| `PaymentReconciliation.detail[].identifier` | `` | `https://hcx.pmjay.gov.in/v1/claim` | + +#### The acknowledgement + +The PMJAY bundle has the same resources, elements and systems as the generic one. + +### What PMJAY specifies + +- Deduction lines use the scheme's own codes, such as `RF`, beside the `Payment` line. +- The notice names the claim under `https://hcx.pmjay.gov.in/v1/preauthorization`. +- Before 33 the `UTR` field can carry a scheme reference rather than a bank reference. Store it; reconcile against the bank only on 33. + +### What PMJAY requires + +- Acknowledge each notice on 17. +- Keep the UTR from 33; the shortfall window opens only once 33 is acknowledged. + +## Use cases, APIs and data elements + +### C9 Send payment notice (payer) + +The money, on a new thread of its own, with the reconciliation itemised by type: approved, claimed, tds, servicetax, advance, recovered, penality. The bank's UTR rides on the settled notice. + +| | | +| :-- | :-- | +| **API** | `/v1/paymentnotice/request` [`apis/06-payment-notice/v1-paymentnotice-request.bru`](/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-v1-paymentnotice-request) | +| **Callback** | `/v1/paymentnotice/on_request` [`apis/06-payment-notice/v1-paymentnotice-on-request.bru`](/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-v1-paymentnotice-on-request) | +| **Workflow** | 30 initiated, 31 processed, 33 settled | +| **Carries JWE** | yes | +| **Focal resource** | `PaymentReconciliation` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1518@hcx` | +| `x-hcx-recipient_code` | `1000004446@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `30` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `30` | Payment Initiated | payer | `request.initiated`, `response.partial`, `response.error` | Payment initiated by payer, on a new thread | +| `31` | Payment Processed | payer | `request.initiated` | Payment has been processed | +| `33` | Payment Settled | payer | `request.initiated` | Payment has been fully settled | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `utrNumber` | Bank UTR Number | Payment | `string` | `1..1` | `PaymentReconciliation.paymentIdentifier.value` | `CMS2602260081728` | | +| `paymentDate` | Remittance Date | Payment | `date` | `1..1` | `PaymentReconciliation.paymentDate` | `2026-03-05` | | +| `settledAmount` | Net Bank Remittance Amount | Payment | `decimal` | `1..1` | `PaymentReconciliation.paymentAmount.value` | `14850.00` | | +| `tdsDeduction` | Tax Deducted at Source (TDS) | Payment Detail | `decimal` | `0..1` | `PaymentReconciliation.detail[type=tds].amount.value` | `650.00` | | + +NRCeS profiles: [PaymentReconciliation](https://nrces.in/ndhm/fhir/r4/StructureDefinition-PaymentReconciliation.html). + +### B7 Acknowledge payment notice (provider) + +The receipt for a payment notice, as a Task on this endpoint. The notice arrives on a new thread of its own; a generic payer takes the acknowledgement with the notice's 30 echoed, PMJAY with 17. + +| | | +| :-- | :-- | +| **API** | `/v1/paymentnotice/on_request` [`apis/06-payment-notice/v1-paymentnotice-on-request.bru`](/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-v1-paymentnotice-on-request) | +| **Callback** | `/v1/paymentnotice/request` [`apis/06-payment-notice/v1-paymentnotice-request.bru`](/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-v1-paymentnotice-request) | +| **Workflow** | 30 echoed from the notice on the generic network; 17 under PMJAY | +| **Carries JWE** | yes | +| **Focal resource** | `PaymentReconciliation / Task` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `17` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `response.complete` | +| `x-hcx-ben-abha-id` | `91711234567890` | +| `x-hcx-debug_flag` | `INFO` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `30` | Payment Initiated | payer | `request.initiated`, `response.partial`, `response.error` | Payment initiated by payer, on a new thread | +| `17` | Payment Received | provider | `response.complete` | Payment received acknowledgment under PMJAY; a generic payer takes it with the notice's 30 echoed | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `settlementNumber` | Payment Reference | Settlement | `string` | `1..1` | `PaymentReconciliation.identifier[0].value` | `SETTLE-2026-001` | | +| `status` | Acknowledgment Status | Settlement | `code` | `1..1` | `PaymentReconciliation.status` | `active` | | + +NRCeS profiles: [PaymentReconciliation](https://nrces.in/ndhm/fhir/r4/StructureDefinition-PaymentReconciliation.html). + +### D13 Acknowledge the payment notice (pmjay) + +Three notices may arrive: 30 when the transfer is initiated, 31 when the bank processes it, 33 when it settles with the UTR. The reconciliation splits the amount into what was paid and what was deducted as tax. Keep the UTR; it is the reference for any dispute. + +| | | +| :-- | :-- | +| **API** | `/v1/paymentnotice/on_request` [`apis/06-payment-notice/v1-paymentnotice-on-request.bru`](/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-v1-paymentnotice-on-request) | +| **Callback** | `/v1/paymentnotice/request` [`apis/06-payment-notice/v1-paymentnotice-request.bru`](/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-v1-paymentnotice-request) | +| **Workflow** | 17 | +| **Carries JWE** | yes | +| **Focal resource** | `PaymentReconciliation / Task` | +| **Simulator console** | `/builder?family=paymentnotice&usecase=acknowledge` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `17` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `response.complete` | +| `x-hcx-ben-abha-id` | `91711234567890` | +| `x-hcx-debug_flag` | `INFO` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `17` | Payment Received | provider | `response.complete` | Payment received acknowledgment under PMJAY; a generic payer takes it with the notice's 30 echoed | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `settlementNumber` | Settlement Advice Number | Payment | `string` | `1..1` | `PaymentReconciliation.identifier[0].value` | `SETTLE-PMJAY-001` | | +| `workflowId` | Workflow Code | Header | `string` | `1..1` | `Header.x-hcx-workflow_id` | `17` | | + +NRCeS profiles: [PaymentReconciliation](https://nrces.in/ndhm/fhir/r4/StructureDefinition-PaymentReconciliation.html). diff --git a/site/docs/nhcx/v1/reference/fhir/preauthorisation-enhancement.md b/site/docs/nhcx/v1/reference/fhir/preauthorisation-enhancement.md new file mode 100644 index 000000000..f8bd27994 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/preauthorisation-enhancement.md @@ -0,0 +1,298 @@ +--- +title: Preauthorisation enhancement +sidebar_label: Preauthorisation enhancement +sidebar_position: 10 +description: "Enhancement payload, header `x-hcx-use_case: Enhancement`, and increment totals" +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/10-Preauthorisation Enhancement.md +generated: true +--- + +# Preauthorisation enhancement + +Extends an approved preauthorisation: a longer stay or an added package. The same endpoint and the same case number, under workflow 13, with the header `x-hcx-use_case: Enhancement` and a new correlation id. + +Sent on `/v1/preauth/submit`, answered on `/v1/preauth/on_submit`, workflow 13, and 131 to answer an enhancement query. + +## The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Claim` | [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html) | +| 2 | `Patient` | [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 3 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 4 | `Organization (pay)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Coverage` | [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | +| 6 | `Practitioner` | [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html) | +| 7 | `Procedure` | [Procedure](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Procedure.html) | +| 8 | `Procedure` | [Procedure](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Procedure.html) | +| 9 | `QuestionnaireResponse` | `QuestionnaireResponse`, which NRCeS does not publish; base FHIR [QuestionnaireResponse](https://hl7.org/fhir/R4/questionnaireresponse.html) | + +## Elements + +### 1. Claim + +NRCeS profile: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `NM-26-0SE00002G` | +| `identifier[].type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `status` | `active` | +| `type.coding[]` | `737481003` Inpatient care management (procedure) in `http://snomed.info/sct` | +| `use` | `preauthorization` | +| `patient` | reference `https://nhcx.abdm.gov.in/patient` | +| `billablePeriod` | start `2026-09-10T00:00:00+05:30`, end `2026-09-10T00:00:00+05:30` | +| `created` | `2026-09-10T23:50:33+05:30` | +| `insurer` | reference `https://nhcx.abdm.gov.in/payer` | +| `provider` | reference `https://nhcx.abdm.gov.in/provider` | +| `priority.coding[]` | `normal` Normal in `http://terminology.hl7.org/CodeSystem/processpriority` | +| `careTeam[]` | sequence `1` | +| `careTeam[].provider` | reference `https://nhcx.abdm.gov.in/practitioner` | +| `careTeam[].role.coding[]` | `primary` Primary provider in `http://terminology.hl7.org/CodeSystem/claimcareteamrole` | +| `careTeam[].qualification.coding[]` | `394802001` General medicine in `http://snomed.info/sct` | +| `supportingInfo[]` | id `SupportingInformation/1`, sequence `1` | +| | id `SupportingInformation/2`, sequence `2` | +| | id `SupportingInformation/3`, sequence `3` | +| | and 9 more | +| `supportingInfo[].category.coding[]` | `INV` Document Type - Investigation in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | `ONS` Period, start or end dates of aspects of the Condition. (e.g. admission, discha… in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | `OTH` Other in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | and 1 more | +| `supportingInfo[].code.coding[]` | `POI` Proof of Identity (Aadhaar / Passport / Voter ID) in `https://nhcx.abdm.gov.in/document-code` | +| | `CER` Medical Certificate / Doctor Referral in `https://nhcx.abdm.gov.in/document-code` | +| | `RAD` Radiology / X-Ray / CT / MRI Scan Reports in `https://nhcx.abdm.gov.in/document-code` | +| | and 9 more | +| `supportingInfo[].valueAttachment` | contentType `application/pdf`, title `Proof of Identity (Aadhaar / Passport / Voter ID)` | +| | contentType `application/pdf`, title `Medical Certificate / Doctor Referral` | +| | contentType `application/pdf`, title `Radiology / X-Ray / CT / MRI Scan Reports` | +| | and 6 more | +| `supportingInfo[].valueReference` | reference `https://nhcx.abdm.gov.in/questionnaireresponse/1`, display `Total Knee Replacement (Unilateral), Standard Treatment Guidelines` | +| `diagnosis[]` | sequence `1` | +| `diagnosis[].diagnosisCodeableConcept.coding[]` | `E11.9` Type 2 diabetes mellitus without complications in `http://hl7.org/fhir/sid/icd-10` | +| `diagnosis[].type[].coding[]` | `admitting` Admitting Diagnosis in `http://terminology.hl7.org/CodeSystem/ex-diagnosistype` | +| `diagnosis[].onAdmission.coding[]` | `yes` Yes in `http://terminology.hl7.org/CodeSystem/ex-diagnosis-on-admission` | +| `procedure[]` | id `Procedure/1`, sequence `1`, date `2026-09-10T00:00:00+05:30` | +| | id `Procedure/2`, sequence `2`, date `2026-09-10T00:00:00+05:30` | +| `procedure[].type[].coding[]` | `surgical` Surgical in `https://nhcx.abdm.gov.in/procedure-type` | +| `procedure[].procedureReference` | reference `https://nhcx.abdm.gov.in/procedure/1`, display `Total Knee Replacement (Unilateral)` | +| | reference `https://nhcx.abdm.gov.in/procedure/2`, display `Acute Appendectomy (Laparoscopic)` | +| `insurance[]` | sequence `1`, focal `true` | +| `insurance[].coverage` | reference `https://nhcx.abdm.gov.in/coverage` | +| `item[]` | id `Item/1`, sequence `1`, factor `1`, careTeamSequence `1`, diagnosisSequence `1`, procedureSequence `1`, informationSequence `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12` | +| | id `Item/2`, sequence `2`, factor `0.5`, careTeamSequence `1`, diagnosisSequence `1`, procedureSequence `2`, informationSequence `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12` | +| `item[].productOrService.coding[]` | `PROC-KNEE-01` Total Knee Replacement (Unilateral) in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-procedure-code` | +| | `PROC-APP-02` Acute Appendectomy (Laparoscopic) in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-procedure-code` | +| `item[].servicedPeriod` | start `2026-09-10`, end `2026-09-10` | +| `item[].quantity` | value `1` | +| `item[].unitPrice` | value `150000`, currency `INR` | +| | value `45000`, currency `INR` | +| `item[].net` | value `150000`, currency `INR` | +| | value `45000`, currency `INR` | +| `item[].category.coding[]` | `Surgical` Surgical in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-benefit-category` | +| `total` | value `195000`, currency `INR` | + +### 2. Patient + +NRCeS profile: [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | value `MRAV1985001` | +| | value `91-1234-1234-1234` | +| `identifier[].type.coding[]` | `PMJAY` Pradhan Mantri Jan Aarogya Yojana (PMJAY) ID in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| | `ABHA` Ayushman Bharat Health Account (ABHA) ID in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| | `MB` Member Number in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `name[]` | text `` | +| `telecom[]` | system `phone`, value `9876543210` | +| `gender` | `male` | +| `birthDate` | `1985-06-15` | + +### 3. Organization (prov) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `IN1910000151` | +| `identifier[].type.coding[]` | `NPI` National provider identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `prov` Healthcare Provider in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `KyroCare Multispeciality Hospital` | + +### 4. Organization (pay) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `1000004805` | +| `identifier[].type.coding[]` | `NIIP` National Insurance Payor Identifier (Payor) in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `pay` Payer in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `Sandbox Payer` | + +### 5. Coverage + +NRCeS profile: [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | value `POL7UMU001` | +| `identifier[].type.coding[]` | `NH` National Health Plan Identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `status` | `active` | +| `type.coding[]` | `HIP` health insurance plan policy in `http://terminology.hl7.org/CodeSystem/v3-ActCode` | +| `subscriber` | reference `https://nhcx.abdm.gov.in/patient` | +| `subscriberId` | `MRAV1985001` | +| `beneficiary` | reference `https://nhcx.abdm.gov.in/patient` | +| `relationship.coding[]` | `self` in `http://terminology.hl7.org/CodeSystem/subscriber-relationship` | +| `payor[]` | reference `https://nhcx.abdm.gov.in/payer` | + +### 6. Practitioner + +NRCeS profile: [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `71-8422-5818-7201` | +| | system `https://hpr.abdm.gov.in`, value `71-8422-5818-7201` | +| `identifier[].type.coding[]` | `HPID` Healthcare Professional ID (HPID) in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| | `HPIN` Health Practitioner ID issued by NDHM in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `name[]` | text `Dr. Ananya Rao` | +| `qualification[].code.coding[]` | `MD` Doctor of Medicine in `http://terminology.hl7.org/CodeSystem/v2-0360` | + +### 7. Procedure + +NRCeS profile: [Procedure](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Procedure.html). + +| Element | Example | +| :-- | :-- | +| `status` | `preparation` | +| `code` | text `Total Knee Replacement (Unilateral)` | +| `code.coding[]` | `71388002` Procedure (procedure) in `http://snomed.info/sct` | +| `subject` | reference `https://nhcx.abdm.gov.in/patient` | +| `performedDateTime` | `2026-09-10T00:00:00+05:30` | + +### 8. Procedure + +NRCeS profile: [Procedure](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Procedure.html). + +| Element | Example | +| :-- | :-- | +| `status` | `preparation` | +| `code` | text `Acute Appendectomy (Laparoscopic)` | +| `code.coding[]` | `71388002` Procedure (procedure) in `http://snomed.info/sct` | +| `subject` | reference `https://nhcx.abdm.gov.in/patient` | +| `performedDateTime` | `2026-09-10T00:00:00+05:30` | + +### 9. QuestionnaireResponse + +| Element | Example | +| :-- | :-- | +| `questionnaire` | `` | +| `status` | `completed` | +| `subject` | reference `https://nhcx.abdm.gov.in/patient` | +| `authored` | `2026-09-10T23:50:33+05:30` | +| `item[]` | linkId `PROC-KNEE-01/stg/1`, text `Duration of symptoms and the conservative treatment tried (months of physiother…` | +| | linkId `PROC-KNEE-01/stg/2`, text `Kellgren-Lawrence grade of osteoarthritis on the standing X-ray` | +| | linkId `PROC-KNEE-01/stg/3`, text `Range of motion and deformity of the knee (flexion contracture, varus/valgus)` | +| | and 2 more | +| `item[].answer[]` | valueString `Recorded.` | + +## Rules + +### 1. The protocol says enhancement, not the payload + +`Claim.use` stays `preauthorization` and the case number is unchanged. The workflow code and `x-hcx-use_case` declare the enhancement. + +### 2. Cumulative + +Carry the approved items and the ones now sought. `Claim.total` is the sum of all of them. + +### 3. No link in the payload + +`Claim.related` is absent. The case number and your stored correlation ids are the thread. + +### 4. One at a time + +Refused when there is no approval, when a request on the case is still open, or after the claim has been raised. + +### 5. Order + +Response items can come back out of order; read by `itemSequence`. Order a case's messages by receipt, not by `Bundle.timestamp`. + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What changes in the bundle + +#### Resources + +- PMJAY adds 1 `QuestionnaireResponse`. + +#### Elements PMJAY adds + +| Element | Example | +| :-- | :-- | +| `Claim.item[].modifier[].coding[]` | `STRAT006a` Routine Ward | +| `Claim.item[].programCode[].coding[]` | `AB-PMJAY` Ayushman Bharat Pradhan Mantri Jan Arogya Yojana (AB-PMJAY) in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-program-code` | +| `QuestionnaireResponse.item[].answer[].valueAttachment` | contentType `application/pdf`, title `Medical Superintendent Declaration Form (During Admission)` | + +### What PMJAY specifies + +- On the response, the `benefit` total is the increment and the wallet's `eligible` total is cumulative. +- The acknowledgement carries no `preAuthRef`. Carry the parent case id onto the enhancement yourself. +- A query on an enhancement arrives on 241 and is answered by a fresh submit on 131. + +### What PMJAY requires + +- Only packages flagged `EnhancementAllowed` `Y` may be added. +- One `Conservative` package per case. Refused with `PAYR-1245`. +- One request at a time on a case. Refused with `PAYR-1322`. + +## Use cases, APIs and data elements + +### D6 Raise an enhancement (pmjay) + +Adds to an approved pre-authorisation, as many times as needed until discharge, one at a time, and only for packages whose plan flag allows it. The bundle carries the approved items and the ones now sought. A query on it arrives as a ClaimResponse on 241, on the case's own thread, and is answered by a fresh submit on 131. + +| | | +| :-- | :-- | +| **API** | `/v1/preauth/submit` [`apis/03-preauth/v1-preauth-enhancement.bru`](/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-submit) | +| **Callback** | `/v1/preauth/on_submit` [`apis/03-preauth/v1-preauth-on-submit.bru`](/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-on-submit) | +| **Workflow** | 13, and 131 to answer an enhancement query raised on 241 | +| **Carries JWE** | yes | +| **Focal resource** | `Claim` | +| **Simulator console** | `/builder?family=preauth&usecase=enhance` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `13` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | +| `x-hcx-use_case` | `Enhancement` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `13` | Enhancement Request Initiated | provider | `request.initiated` | Enhancement (additional amount) request | +| `131` | Enhancement Query Response Submitted | provider | `response.partial`, `response.error`, `response.complete` | Response to enhancement query | +| `241` | Enhancement Request Queried | payer | `request.initiated` | Enhancement request queried by payer | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `claimNumber` | Case Number | Case | `string` | `1..1` | `Claim.identifier[0].value` | `VB26AA2600001` | | +| `preAuthRef` | Initial Approval Reference | Case | `string` | `1..1` | `Claim.insurance[0].preAuthRef[0]` | `APPR-2026-HP-00891` | | +| `workflowId` | Workflow Code | Header | `string` | `1..1` | `Header.x-hcx-workflow_id` | `13` | | + +NRCeS profiles: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html). diff --git a/site/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer.md b/site/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer.md new file mode 100644 index 000000000..5fd98e5b1 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/preauthorisation-query-and-answer.md @@ -0,0 +1,374 @@ +--- +title: Preauthorisation query and answer +sidebar_label: Preauthorisation query and answer +sidebar_position: 11 +description: Query resolution on preauth thread (wf 24 / 19) +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/11-Preauthorisation Query and Answer.md +generated: true +--- + +# Preauthorisation query and answer + +When the payer wants more before it decides. A private insurer raises the query as a communication and takes the answer as one. PMJAY raises it as a `ClaimResponse` on the case's own thread and takes the answer as the whole preauthorisation, resubmitted. + +## The query + +Sent on `/v1/communication/request`, workflow 24. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `CommunicationRequest` | [CommunicationRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CommunicationRequest.html) | +| 3 | `Claim` | [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html) | +| 4 | `Patient` | [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 5 | `Organization (ins)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 6 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 7 | `Practitioner` | [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html) | +| 8 | `Coverage` | [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `status` | `requested` | +| `intent` | `order` | +| `reasonCode.coding[]` | `additionalinfo` Additional Information Request in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | +| `code.coding[]` | `poll` in `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `description` | `Share the pre-operative X-ray and the clinical notes.` | +| `authoredOn` | `2026-09-10T23:51:47+05:30` | +| `requester` | reference `urn:uuid:39cd4b51-bddd-5cc1-a65a-6fa4a2a83cb5`, display `Organization` | +| `owner` | reference `urn:uuid:84d112ec-041c-57f8-986c-6619ccd8245e`, display `Organization` | +| `input[].type.coding[]` | `include` in `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` | +| `input[].valueReference` | reference `urn:uuid:4b35a6eb-3f99-5d0c-b0c8-5b2f049fdbde`, display `CommunicationRequest` | + +#### 2. CommunicationRequest + +NRCeS profile: [CommunicationRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CommunicationRequest.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | value `NM-26-0SE00002I` | +| `basedOn[]` | reference `urn:uuid:c1a17d6e-c718-58de-8d3d-fd4c0607d729`, display `Claim-preauth` | +| `status` | `active` | +| `category[].coding[]` | `alert` in `http://terminology.hl7.org/CodeSystem/communication-category` | +| `priority` | `routine` | +| `payload[]` | contentString `Share the pre-operative X-ray and the clinical notes.` | +| `authoredOn` | `2026-09-10T23:51:47+05:30` | +| `requester` | reference `urn:uuid:39cd4b51-bddd-5cc1-a65a-6fa4a2a83cb5`, display `Organization` | +| `recipient[]` | reference `urn:uuid:84d112ec-041c-57f8-986c-6619ccd8245e`, display `Organization` | +| `sender` | reference `urn:uuid:39cd4b51-bddd-5cc1-a65a-6fa4a2a83cb5`, display `Organization` | +| `reasonCode[]` | text `Share the pre-operative X-ray and the clinical notes.` | +| `reasonCode[].coding[]` | `additionalinfo` Additional Information Request in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | + +The `Claim`, `Patient`, `Organization`, `Practitioner`, `Coverage` entries are shaped as in the chapters that introduce them. + +## The answer + +Sent on `/v1/communication/on_request`, workflow 24, echoed. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `Communication` | [Communication](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Communication.html) | +| 3 | `CommunicationRequest` | [CommunicationRequest](https://nrces.in/ndhm/fhir/r4/StructureDefinition-CommunicationRequest.html) | +| 4 | `Claim` | [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html) | +| 5 | `Patient` | [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 6 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 7 | `Organization (pay)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 8 | `Practitioner` | [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html) | +| 9 | `Coverage` | [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `status` | `completed` | +| `intent` | `order` | +| `code.coding[]` | `deliver` in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-codes` | +| `authoredOn` | `2026-09-10T23:51:53+05:30` | +| `requester` | reference `https://nhcx.abdm.gov.in/provider`, display `Organization` | +| `owner` | reference `https://nhcx.abdm.gov.in/payer`, display `Organization` | +| `input[].type.coding[]` | `include` in `http://terminology.hl7.org/CodeSystem/financialtaskinputtype` | +| `input[].valueReference` | reference `urn:uuid:3e398f2b-ab14-41e5-8939-d7746eea43de`, display `Communication` | +| `reasonCode.coding[]` | `additionalinfo` Additional Information Request in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | + +#### 2. Communication + +NRCeS profile: [Communication](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Communication.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | value `NM-26-0SE00002I` | +| `basedOn[]` | reference `urn:uuid:4b35a6eb-3f99-5d0c-b0c8-5b2f049fdbde`, display `CommunicationRequest` | +| `inResponseTo[]` | reference `urn:uuid:4b35a6eb-3f99-5d0c-b0c8-5b2f049fdbde`, display `CommunicationRequest` | +| `about[]` | reference `https://nhcx.abdm.gov.in/preauth/request`, display `Claim urn:uuid:c1a17d6e-c718-58de-8d3d-fd4c0607d729` | +| `status` | `completed` | +| `category[].coding[]` | `notification` in `http://terminology.hl7.org/CodeSystem/communication-category` | +| `priority` | `routine` | +| `recipient[]` | reference `https://nhcx.abdm.gov.in/payer`, display `Organization` | +| `sender` | reference `https://nhcx.abdm.gov.in/provider`, display `Organization` | +| `payload[]` | contentString `X-ray and clinical notes attached as asked.` | +| `payload[].contentAttachment` | contentType `application/pdf`, title `Proof of Identity (Aadhaar / Passport / Voter ID)`, creation `2026-09-10T23:51:40+05:30` | +| | contentType `application/pdf`, title `Medical Certificate / Doctor Referral`, creation `2026-09-10T23:51:40+05:30` | +| | contentType `application/pdf`, title `Radiology / X-Ray / CT / MRI Scan Reports`, creation `2026-09-10T23:51:40+05:30` | +| | and 6 more | +| `payload[].extension[]` | url ``, valueString `POI` | +| | url ``, valueString `CER` | +| | url ``, valueString `RAD` | +| | and 6 more | + +The `CommunicationRequest`, `Claim`, `Patient`, `Organization`, `Practitioner`, `Coverage` entries are shaped as in the chapters that introduce them. + +## Rules + +### 1. The generic query + +A `Task` coded `poll`, reason `additionalinfo`, with an `include` input referencing a `CommunicationRequest` whose `basedOn` names the preauthorisation. Sent on `/v1/communication/request` under 24. + +### 2. The generic answer + +A `Task` coded `deliver` in `ndhm-task-codes`, `completed`, with an `include` input referencing a `Communication` whose `basedOn` names the request and whose `payload` carries the message and the documents. Posted on `/v1/communication/on_request`, echoing the correlation id and workflow id. + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What changes in the bundle + +#### The query + +PMJAY uses a different bundle for this step, headed by `ClaimResponse` rather than `Task`. + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `ClaimResponse` | none declared; NRCeS [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html) | +| 2 | `Patient` | none declared; NRCeS [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 3 | `Organization (pay)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 4 | `Organization (prov)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Coverage` | none declared; NRCeS [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | + +###### 1. ClaimResponse + +NRCeS profile: [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://hcx.pmjay.gov.in/v1/preauthorization`, value `NM-26-0SF000031` | +| `identifier[].type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `status` | `active` | +| `use` | `preauthorization` | +| `patient` | reference `https://payer.nha.gov.in/preauthorization/v1/preauth/on_submit/claimresponse/pa…` | +| `created` | `2026-09-11T00:33:03+05:30` | +| `insurer` | reference `https://payer.nha.gov.in/preauthorization/v1/preauth/on_submit/claimresponse/or…` | +| `requestor` | reference `https://payer.nha.gov.in/preauthorization/v1/preauth/on_submit/claimresponse/or…` | +| `outcome` | `partial` | +| `disposition` | `query` | +| `preAuthRef` | `2026091110000817` | +| `payeeType.coding[]` | `provider` Provider in `http://terminology.hl7.org/CodeSystem/payeetype` | +| `item[]` | id `Item/Item/2`, itemSequence `2` | +| | id `Item/Item/1`, itemSequence `1` | +| `item[].adjudication[].category.coding[]` | `submitted` Submitted Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `eligible` Eligible Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `reason` Reason for Adjudication in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | and 3 more | +| `item[].adjudication[].amount` | value `1500` | +| | value `1725` | +| | value `1800` | +| | and 1 more | +| `item[].adjudication[].reason.coding[]` | display ` : Request acknowledged and accepted for further processing.` | +| | `Queried` Queried | +| | `Approved` Approved | +| `item[].adjudication[]` | value `0` | +| | value `100` | +| | value `1` | +| `adjudication[].category.coding[]` | `status` Status | +| `adjudication[].reason.coding[]` | `queried` Queried | +| `total[].category.coding[]` | `benefit` Benefit Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `submitted` Submitted Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `tax` Tax in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | and 2 more | +| `total[].amount` | value `2070` | +| | value `1725` | +| | value `0` | +| | and 1 more | +| `total[]` | id `PMJAY0000X/PMJAY-T` | + +The `Patient`, `Organization`, `Coverage` entries are shaped as in the chapters that introduce them. + +#### The answer + +PMJAY uses a different bundle for this step, headed by `Claim` rather than `Task`. + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Claim` | [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html) | +| 2 | `Patient` | [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 3 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 4 | `Organization (pay)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Coverage` | [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | +| 6 | `Practitioner` | [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html) | +| 7 | `Procedure` | [Procedure](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Procedure.html) | +| 8 | `QuestionnaireResponse` | `QuestionnaireResponse`, which NRCeS does not publish; base FHIR [QuestionnaireResponse](https://hl7.org/fhir/R4/questionnaireresponse.html) | +| 9 | `QuestionnaireResponse` | `QuestionnaireResponse`, which NRCeS does not publish; base FHIR [QuestionnaireResponse](https://hl7.org/fhir/R4/questionnaireresponse.html) | + +###### 1. Claim + +NRCeS profile: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `NM-26-0SE00002N` | +| `identifier[].type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `status` | `active` | +| `type.coding[]` | `737481003` Inpatient care management (procedure) in `http://snomed.info/sct` | +| `use` | `preauthorization` | +| `patient` | reference `https://nhcx.abdm.gov.in/patient` | +| `billablePeriod` | start `2026-09-10T00:00:00+05:30`, end `2026-09-10T00:00:00+05:30` | +| `created` | `2026-09-10T23:55:36+05:30` | +| `insurer` | reference `https://nhcx.abdm.gov.in/payer` | +| `provider` | reference `https://nhcx.abdm.gov.in/provider` | +| `priority.coding[]` | `normal` Normal in `http://terminology.hl7.org/CodeSystem/processpriority` | +| `careTeam[]` | sequence `1` | +| `careTeam[].provider` | reference `https://nhcx.abdm.gov.in/practitioner` | +| `careTeam[].role.coding[]` | `primary` Primary provider in `http://terminology.hl7.org/CodeSystem/claimcareteamrole` | +| `careTeam[].qualification.coding[]` | `394802001` General medicine in `http://snomed.info/sct` | +| `supportingInfo[]` | id `SupportingInformation/1`, sequence `1` | +| | id `SupportingInformation/2`, sequence `2` | +| | id `SupportingInformation/3`, sequence `3` | +| | and 6 more | +| `supportingInfo[].category.coding[]` | `INV` Document Type - Investigation in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | `ONS` Period, start or end dates of aspects of the Condition. (e.g. admission, discha… in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | `OTH` Other in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | and 2 more | +| `supportingInfo[].code.coding[]` | `MAND0455` CXR PA view or CECT chest abdomen and pelvis in `https://nhcx.abdm.gov.in/document-code` | +| | `MAND0409` any investigations done in `https://nhcx.abdm.gov.in/document-code` | +| | `MAND0570` Planned line of management in `https://nhcx.abdm.gov.in/document-code` | +| | and 5 more | +| `supportingInfo[].valueAttachment` | contentType `application/pdf`, title `CXR PA view or CECT chest abdomen and pelvis` | +| | contentType `application/pdf`, title `any investigations done` | +| | contentType `application/pdf`, title `Planned line of management` | +| | and 1 more | +| `supportingInfo[].valueReference` | reference `https://nhcx.abdm.gov.in/questionnaireresponse/1`, display `Admission Details` | +| | reference `https://nhcx.abdm.gov.in/questionnaireresponse/2`, display `Authentication Consent` | +| `diagnosis[]` | sequence `1` | +| `diagnosis[].diagnosisCodeableConcept.coding[]` | `E11.9` Type 2 diabetes mellitus without complications in `http://hl7.org/fhir/sid/icd-10` | +| `diagnosis[].type[].coding[]` | `admitting` Admitting Diagnosis in `http://terminology.hl7.org/CodeSystem/ex-diagnosistype` | +| `diagnosis[].onAdmission.coding[]` | `yes` Yes in `http://terminology.hl7.org/CodeSystem/ex-diagnosis-on-admission` | +| `procedure[]` | id `Procedure/1`, sequence `1`, date `2026-09-10T00:00:00+05:30` | +| `procedure[].type[].coding[]` | `conservative` Conservative in `https://nhcx.abdm.gov.in/procedure-type` | +| `procedure[].procedureReference` | reference `https://nhcx.abdm.gov.in/procedure/1`, display `Pleural Effusion (Pleural Effusion)` | +| `insurance[]` | sequence `1`, focal `true` | +| `insurance[].coverage` | reference `https://nhcx.abdm.gov.in/coverage` | +| `item[]` | id `Item/1`, sequence `1`, factor `1`, careTeamSequence `1`, diagnosisSequence `1`, procedureSequence `1`, informationSequence `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9` | +| `item[].productOrService.coding[]` | `MG0111A` Pleural Effusion (Pleural Effusion) in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-procedure-code` | +| `item[].servicedPeriod` | start `2026-09-10`, end `2026-09-10` | +| `item[].quantity` | value `1` | +| `item[].unitPrice` | value `1800`, currency `INR` | +| `item[].net` | value `1800`, currency `INR` | +| `item[].category.coding[]` | `MG` General Medicine in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-benefit-category` | +| `item[].modifier[].coding[]` | `STRAT006a` Routine Ward | +| `item[].programCode[].coding[]` | `AB-PMJAY` Ayushman Bharat Pradhan Mantri Jan Arogya Yojana (AB-PMJAY) in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-program-code` | +| `total` | value `1800`, currency `INR` | + +###### 8. QuestionnaireResponse + +| Element | Example | +| :-- | :-- | +| `questionnaire` | `https://payer.gov.in/policy/questionnaire/100020` | +| `status` | `completed` | +| `subject` | reference `https://nhcx.abdm.gov.in/patient` | +| `authored` | `2026-09-10T23:55:36+05:30` | +| `item[]` | linkId `100075`, text `Admission Date` | +| | linkId `100074`, text `Surgery/Treatment Start Date` | +| | linkId `100073`, text `Admission Type` | +| | and 1 more | +| `item[].answer[]` | valueDateTime `2026-09-10T18:25:00+05:30` | +| | valueString `PLANNED` | +| | valueString `Yes` | + +###### 9. QuestionnaireResponse + +| Element | Example | +| :-- | :-- | +| `questionnaire` | `https://payer.gov.in/policy/questionnaire/100024` | +| `status` | `completed` | +| `subject` | reference `https://nhcx.abdm.gov.in/patient` | +| `authored` | `2026-09-10T23:55:36+05:30` | +| `item[]` | linkId `100093`, text `Medical Superintendent Declaration Form (During Admission)` | +| | linkId `100095`, text `Remarks` | +| `item[].answer[].valueAttachment` | contentType `application/pdf`, title `Medical Superintendent Declaration Form (During Admission)` | +| `item[].answer[]` | valueString `Recorded.` | + +The `Patient`, `Organization`, `Coverage`, `Practitioner`, `Procedure` entries are shaped as in the chapters that introduce them. + +### What PMJAY specifies + +- The query arrives on `/v1/preauth/on_submit` under 24: a `ClaimResponse` with `outcome` `partial` and reason `queried`. +- The question is free text in `item.adjudication` where the category is `reason`, in `reason.coding.display`. On a live case it grows into a log, split by `|` into turns and by `~` into user, timestamp, type, comment and desk. Tolerate a single segment, treat the literal `null` as empty, and never put `|` or `~` in anything you send back. +- The log is cumulative. The answer you sent reappears in it on the next response, which is the only sign it was read. +- The answer is the whole preauthorisation bundle again on `/v1/preauth/submit` under 19, on the same case number, with the reply text in `item.productOrService.text`. + +### What PMJAY requires + +- Answer on 19, never on a new 12, which opens a second case. +- Put the query remarks under `supportingInfo` category `NMI`, code `CQD`, as a `valueString`. +- Supporting-info dates in `+05:30`. + +## Use cases, APIs and data elements + +### D7 Answer a pre-authorisation query (pmjay) + +The query arrived as a ClaimResponse on 24, on the case's own thread, with the question in the item adjudication, not on the communication API. Answer with a fresh submit of the same bundle shape on this code, never as a new 12, which opens a second case. + +| | | +| :-- | :-- | +| **API** | `/v1/preauth/submit` [`apis/03-preauth/v1-preauth-submit.bru`](/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-submit) | +| **Callback** | `/v1/preauth/on_submit` [`apis/03-preauth/v1-preauth-on-submit.bru`](/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-on-submit) | +| **Workflow** | 19 | +| **Carries JWE** | yes | +| **Focal resource** | `Claim` | +| **Simulator console** | `/builder?family=preauth&usecase=query-answer` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `19` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | +| `x-hcx-use_case` | `New` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `19` | Preauth Query Response Submitted | provider | `response.complete` | Response to payer's query on preauth | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `claimNumber` | Case Number | Case | `string` | `1..1` | `Claim.identifier[0].value` | `VB26AA2600001` | | +| `workflowId` | Workflow Code | Header | `string` | `1..1` | `Header.x-hcx-workflow_id` | `19` | | +| `nmiDocument` | Need More Info (NMI) Document | Documents | `base64Binary` | `1..1` | `Claim.supportingInfo[category=NMI].valueAttachment.data` | `JVBERi0xLjQK...` | | + +NRCeS profiles: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html). diff --git a/site/docs/nhcx/v1/reference/fhir/preauthorisation-request.md b/site/docs/nhcx/v1/reference/fhir/preauthorisation-request.md new file mode 100644 index 000000000..16ddf43c9 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/preauthorisation-request.md @@ -0,0 +1,411 @@ +--- +title: Preauthorisation request +sidebar_label: Preauthorisation request +sidebar_position: 8 +description: Preauth Claim bundle, items, and ABDM clinical attachments +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/08-Preauthorisation Request.md +generated: true +--- + +# Preauthorisation request + +The first bundle with clinical content. The provider asks the payer to approve a treatment before it is given. The spine is a `Claim` with `use` set to `preauthorization`. + +Sent on `/v1/preauth/submit`, answered on `/v1/preauth/on_submit`, workflow 12 new, 121 resubmission. + +## The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Claim` | [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html) | +| 2 | `Patient` | [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 3 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 4 | `Organization (pay)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Coverage` | [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | +| 6 | `Practitioner` | [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html) | +| 7 | `Procedure` | [Procedure](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Procedure.html) | +| 8 | `QuestionnaireResponse` | `QuestionnaireResponse`, which NRCeS does not publish; base FHIR [QuestionnaireResponse](https://hl7.org/fhir/R4/questionnaireresponse.html) | + +## Elements + +### 1. Claim + +NRCeS profile: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `NM-26-0SE00002M` | +| `identifier[].type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `status` | `active` | +| `type.coding[]` | `737481003` Inpatient care management (procedure) in `http://snomed.info/sct` | +| `use` | `preauthorization` | +| `patient` | reference `https://nhcx.abdm.gov.in/patient` | +| `billablePeriod` | start `2026-09-10T00:00:00+05:30`, end `2026-09-10T00:00:00+05:30` | +| `created` | `2026-09-10T23:53:57+05:30` | +| `insurer` | reference `https://nhcx.abdm.gov.in/payer` | +| `provider` | reference `https://nhcx.abdm.gov.in/provider` | +| `priority.coding[]` | `normal` Normal in `http://terminology.hl7.org/CodeSystem/processpriority` | +| `careTeam[]` | sequence `1` | +| `careTeam[].provider` | reference `https://nhcx.abdm.gov.in/practitioner` | +| `careTeam[].role.coding[]` | `primary` Primary provider in `http://terminology.hl7.org/CodeSystem/claimcareteamrole` | +| `careTeam[].qualification.coding[]` | `394802001` General medicine in `http://snomed.info/sct` | +| `supportingInfo[]` | id `SupportingInformation/1`, sequence `1` | +| | id `SupportingInformation/2`, sequence `2` | +| | id `SupportingInformation/3`, sequence `3` | +| | and 9 more | +| `supportingInfo[].category.coding[]` | `INV` Document Type - Investigation in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | `ONS` Period, start or end dates of aspects of the Condition. (e.g. admission, discha… in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | `OTH` Other in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | and 1 more | +| `supportingInfo[].code.coding[]` | `POI` Proof of Identity (Aadhaar / Passport / Voter ID) in `https://nhcx.abdm.gov.in/document-code` | +| | `CER` Medical Certificate / Doctor Referral in `https://nhcx.abdm.gov.in/document-code` | +| | `RAD` Radiology / X-Ray / CT / MRI Scan Reports in `https://nhcx.abdm.gov.in/document-code` | +| | and 9 more | +| `supportingInfo[].valueAttachment` | contentType `application/pdf`, title `Proof of Identity (Aadhaar / Passport / Voter ID)` | +| | contentType `application/pdf`, title `Medical Certificate / Doctor Referral` | +| | contentType `application/pdf`, title `Radiology / X-Ray / CT / MRI Scan Reports` | +| | and 6 more | +| `supportingInfo[].valueReference` | reference `https://nhcx.abdm.gov.in/questionnaireresponse/1`, display `Total Knee Replacement (Unilateral), Standard Treatment Guidelines` | +| `diagnosis[]` | sequence `1` | +| `diagnosis[].diagnosisCodeableConcept.coding[]` | `E11.9` Type 2 diabetes mellitus without complications in `http://hl7.org/fhir/sid/icd-10` | +| `diagnosis[].type[].coding[]` | `admitting` Admitting Diagnosis in `http://terminology.hl7.org/CodeSystem/ex-diagnosistype` | +| `diagnosis[].onAdmission.coding[]` | `yes` Yes in `http://terminology.hl7.org/CodeSystem/ex-diagnosis-on-admission` | +| `procedure[]` | id `Procedure/1`, sequence `1`, date `2026-09-10T00:00:00+05:30` | +| `procedure[].type[].coding[]` | `surgical` Surgical in `https://nhcx.abdm.gov.in/procedure-type` | +| `procedure[].procedureReference` | reference `https://nhcx.abdm.gov.in/procedure/1`, display `Total Knee Replacement (Unilateral)` | +| `insurance[]` | sequence `1`, focal `true` | +| `insurance[].coverage` | reference `https://nhcx.abdm.gov.in/coverage` | +| `item[]` | id `Item/1`, sequence `1`, factor `1`, careTeamSequence `1`, diagnosisSequence `1`, procedureSequence `1`, informationSequence `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12` | +| `item[].productOrService.coding[]` | `PROC-KNEE-01` Total Knee Replacement (Unilateral) in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-procedure-code` | +| `item[].servicedPeriod` | start `2026-09-10`, end `2026-09-10` | +| `item[].quantity` | value `1` | +| `item[].unitPrice` | value `150000`, currency `INR` | +| `item[].net` | value `150000`, currency `INR` | +| `item[].category.coding[]` | `Surgical` Surgical in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-benefit-category` | +| `total` | value `150000`, currency `INR` | + +### 2. Patient + +NRCeS profile: [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | value `MRAV1985001` | +| | value `91-1234-1234-1234` | +| `identifier[].type.coding[]` | `PMJAY` Pradhan Mantri Jan Aarogya Yojana (PMJAY) ID in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| | `ABHA` Ayushman Bharat Health Account (ABHA) ID in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| | `MB` Member Number in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `name[]` | text `` | +| `telecom[]` | system `phone`, value `9876543210` | +| `gender` | `male` | +| `birthDate` | `1985-06-15` | + +### 3. Organization (prov) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `IN1910000151` | +| `identifier[].type.coding[]` | `NPI` National provider identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `prov` Healthcare Provider in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `KyroCare Multispeciality Hospital` | + +### 4. Organization (pay) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `1000004805` | +| `identifier[].type.coding[]` | `NIIP` National Insurance Payor Identifier (Payor) in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `pay` Payer in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `Sandbox Payer` | + +### 5. Coverage + +NRCeS profile: [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | value `POL7UMU001` | +| `identifier[].type.coding[]` | `NH` National Health Plan Identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `status` | `active` | +| `type.coding[]` | `HIP` health insurance plan policy in `http://terminology.hl7.org/CodeSystem/v3-ActCode` | +| `subscriber` | reference `https://nhcx.abdm.gov.in/patient` | +| `subscriberId` | `MRAV1985001` | +| `beneficiary` | reference `https://nhcx.abdm.gov.in/patient` | +| `relationship.coding[]` | `self` in `http://terminology.hl7.org/CodeSystem/subscriber-relationship` | +| `payor[]` | reference `https://nhcx.abdm.gov.in/payer` | + +### 6. Practitioner + +NRCeS profile: [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `71-8422-5818-7201` | +| | system `https://hpr.abdm.gov.in`, value `71-8422-5818-7201` | +| `identifier[].type.coding[]` | `HPID` Healthcare Professional ID (HPID) in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| | `HPIN` Health Practitioner ID issued by NDHM in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `name[]` | text `Dr. Ananya Rao` | +| `qualification[].code.coding[]` | `MD` Doctor of Medicine in `http://terminology.hl7.org/CodeSystem/v2-0360` | + +### 7. Procedure + +NRCeS profile: [Procedure](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Procedure.html). + +| Element | Example | +| :-- | :-- | +| `status` | `preparation` | +| `code` | text `Total Knee Replacement (Unilateral)` | +| `code.coding[]` | `71388002` Procedure (procedure) in `http://snomed.info/sct` | +| `subject` | reference `https://nhcx.abdm.gov.in/patient` | +| `performedDateTime` | `2026-09-10T00:00:00+05:30` | + +### 8. QuestionnaireResponse + +| Element | Example | +| :-- | :-- | +| `questionnaire` | `` | +| `status` | `completed` | +| `subject` | reference `https://nhcx.abdm.gov.in/patient` | +| `authored` | `2026-09-10T23:53:57+05:30` | +| `item[]` | linkId `PROC-KNEE-01/stg/1`, text `Duration of symptoms and the conservative treatment tried (months of physiother…` | +| | linkId `PROC-KNEE-01/stg/2`, text `Kellgren-Lawrence grade of osteoarthritis on the standing X-ray` | +| | linkId `PROC-KNEE-01/stg/3`, text `Range of motion and deformity of the knee (flexion contracture, varus/valgus)` | +| | and 2 more | +| `item[].answer[]` | valueString `Recorded.` | + +## Rules + +### 1. The case number + +`Claim.identifier`, typed `CLN`, carries the provider's case number. Every later message on the case, the payer's included, names it. + +### 2. One focal insurance + +Exactly one `Claim.insurance[]` entry carries `focal: true`. + +### 3. Items + +Each item links to the care team, diagnosis and procedure by sequence. `net` is `unitPrice` times `quantity`; do not compute with `factor`. `Claim.total` equals the sum of the item nets. + +### 4. Documents + +The mandatory document codes are the ones the auth-requirements answer returned. Send each code and display exactly as given. + +### 5. The STG answers + +Each package's STG questionnaire is answered as a `QuestionnaireResponse` in the bundle, with the `linkId`s the plan gives. + +### 6. Claim.type + +SNOMED `737481003`, Inpatient care management. Payers echo it, some under the `ndhm-claim-type` ValueSet URL. + +### 7. References to records + +A `valueReference` may point at the `Composition` heading an embedded record rather than at a `DocumentReference`. Follow the reference, then walk the record. + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What changes in the bundle + +#### Resources + +- PMJAY adds 1 `QuestionnaireResponse`. + +#### Elements PMJAY adds + +| Element | Example | +| :-- | :-- | +| `Claim.item[].modifier[].coding[]` | `STRAT006a` Routine Ward | +| `Claim.item[].programCode[].coding[]` | `AB-PMJAY` Ayushman Bharat Pradhan Mantri Jan Arogya Yojana (AB-PMJAY) in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-program-code` | +| `QuestionnaireResponse.item[].answer[].valueAttachment` | contentType `application/pdf`, title `Medical Superintendent Declaration Form (During Admission)` | + +### What PMJAY specifies + +- `item.programCode` carries `AB-PMJAY` under `ndhm-program-code`. +- `item.modifier` carries the ward tier from the master's stratification codes, and `item.category` the master's specialty code. +- The Authentication Consent answer is a second `QuestionnaireResponse` beside the STG answers, with its attachments as `valueAttachment` and its dates as `valueDateTime`. +- Document codes are the `MAND` codes the auth-requirements answer returned. + +### What PMJAY requires + +- The biometric user token on the request, or the plan's Authentication Consent questionnaire answered as a `QuestionnaireResponse`. Refused with `PAYR-1256` otherwise. +- The STG questionnaire answered for every package that needs one. Refused with `PAYR-1254` otherwise. +- Not more than one day before admission, with the registration and admission dates as supporting information. +- One live preauthorisation per beneficiary per hospital. Refused with `PAYR-1238` while another is open. +- `LM100` is not allowed on a preauthorisation. Refused with `PAYR-1270`. +- Auto-approval only when this is the first preauthorisation on the case and every package carries `ApprovalNotRequired` `Y`. + +## Use cases, APIs and data elements + +### B3 Submit pre-authorisation (provider) + +Permission to treat. A resubmission, an enhancement and a query answer all reuse the same bundle with a new correlation id and the original reference; only the workflow code tells them apart. The acknowledgement on 20 brings the payer's own case number, and the desk files everything under it. + +| | | +| :-- | :-- | +| **API** | `/v1/preauth/submit` [`apis/03-preauth/v1-preauth-submit.bru`](/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-submit) | +| **Callback** | `/v1/preauth/on_submit` [`apis/03-preauth/v1-preauth-on-submit.bru`](/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-on-submit) | +| **Workflow** | 12 new, 121 resubmission, 13 enhancement; under PMJAY 19 answers a query and 131 an enhancement query | +| **Carries JWE** | yes | +| **Focal resource** | `Claim` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `12` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | +| `x-hcx-use_case` | `New` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `12` | Preauth Request Initiated | provider | `request.initiated` | New preauth submission | +| `121` | Preauth Request Resubmitted | provider | `request.initiated` | Resubmission after query/rejection | +| `13` | Enhancement Request Initiated | provider | `request.initiated` | Enhancement (additional amount) request | +| `19` | Preauth Query Response Submitted | provider | `response.complete` | Response to payer's query on preauth | +| `131` | Enhancement Query Response Submitted | provider | `response.partial`, `response.error`, `response.complete` | Response to enhancement query | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `claimNumber` | Pre-auth Case Number | Case | `string` | `1..1` | `Claim.identifier[0].value` | `PA20260226001` | also at `Bundle.id` | +| `use` | Claim Use | Case | `code` | `1..1` | `Claim.use` | `preauthorization` | | +| `preAuthRef` | Approval Reference (if enhancement) | Case | `string` | `0..1` | `Claim.insurance[0].preAuthRef[0]` | `APPR-2026-HP-00891` | | +| `patientName` | Patient Full Name | Beneficiary | `string` | `1..1` | `Patient.name[0].text` | `Ramesh Chandra Sharma` | | +| `memberId` | Scheme / Insurer Member ID | Beneficiary | `string` | `1..1` | `Patient.identifier[type=PMJAY].value` | `PMJAY-HP-2024-998811` | also at `Coverage.subscriberId` | +| `abhaNumber` | ABHA Number | Beneficiary | `string` | `0..1` | `Patient.identifier[type=ABHA].value` | `91234567890123` | | +| `gender` | Gender | Beneficiary | `code` | `1..1` | `Patient.gender` | `male` | code system `http://hl7.org/fhir/administrative-gender` | +| `birthDate` | Date of Birth | Beneficiary | `date` | `1..1` | `Patient.birthDate` | `1982-06-15` | | +| `patientPhone` | Mobile Phone | Beneficiary | `string` | `0..1` | `Patient.telecom[system=phone].value` | `9876543210` | | +| `policyNumber` | Policy Number | Coverage | `string` | `1..1` | `Coverage.identifier[0].value` | `PMJAY/HP/S/G` | | +| `facilityId` | Hospital Facility ID (HFR/NPI) | Provider | `string` | `1..1` | `Organization[type=prov].identifier[system=https://facility.abdm.gov.in].value` | `IN1910000151` | | +| `providerName` | Hospital Name | Provider | `string` | `1..1` | `Organization[type=prov].name` | `Apex Multispeciality Hospital` | | +| `payerId` | Payer Identifier (NIIP) | Payer | `string` | `1..1` | `Organization[type=pay].identifier[system=https://irdai.gov.in].value` | `1000003538` | | +| `payerName` | Payer Name | Payer | `string` | `1..1` | `Organization[type=pay].name` | `National Health Authority - PMJAY` | | +| `practitionerId` | Practitioner ID (HPID/HPIN) | Practitioner | `string` | `1..1` | `Practitioner.identifier[system=https://hpr.abdm.gov.in].value` | `21-8899-4455-6677` | | +| `practitionerName` | Doctor Name | Practitioner | `string` | `1..1` | `Practitioner.name[0].text` | `Dr. Arvind Kumar` | | +| `admissionDate` | Admission Date | Stay | `dateTime` | `1..1` | `Claim.billablePeriod.start` | `2026-02-26T10:00:00+05:30` | | +| `dischargeDate` | Discharge Date | Stay | `dateTime` | `1..1` | `Claim.billablePeriod.end` | `2026-03-02T14:30:00+05:30` | | +| `careSetting` | Care Setting | Stay | `code` | `1..1` | `Claim.type.coding[0].code` | `institutional` | code system `http://terminology.hl7.org/CodeSystem/claim-type` | +| `primaryDiagnosisCode` | Primary Diagnosis (ICD-10) | Clinical | `string` | `1..1` | `Claim.diagnosis[0].diagnosisCodeableConcept.coding[0].code` | `A97.0` | code system `http://hl7.org/fhir/sid/icd-10` | +| `procedureCode` | Package / Procedure Code | Clinical | `string` | `1..1` | `Claim.procedure[0].procedureCodeableConcept.coding[0].code` | `MG004A` | | +| `estimatedTotal` | Estimated Package Amount | Billing | `decimal` | `1..1` | `Claim.total.value` | `15500.00` | | + +NRCeS profiles: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html), [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html), [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html), [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html), [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html). + +### D4 Submit pre-authorisation (pmjay) + +Not more than one day before admission, with the biometric token or the consent response, the documents the auth-requirements answer asked for, the STG questionnaire for each package, and the registration and admission dates as supporting info. Auto-approved only if it is the first pre-authorisation for the case and every package allows it. + +| | | +| :-- | :-- | +| **API** | `/v1/preauth/submit` [`apis/03-preauth/v1-preauth-submit.bru`](/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-submit) | +| **Callback** | `/v1/preauth/on_submit` [`apis/03-preauth/v1-preauth-on-submit.bru`](/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-on-submit) | +| **Workflow** | 12 | +| **Carries JWE** | yes | +| **Focal resource** | `Claim` | +| **Simulator console** | `/builder?family=preauth&usecase=initiate` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `12` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | +| `x-hcx-use_case` | `New` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `12` | Preauth Request Initiated | provider | `request.initiated` | New preauth submission | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `claimNumber` | PMJAY Case Number | Case | `string` | `1..1` | `Claim.identifier[0].value` | `VB26AA2600001` | | +| `patientName` | Patient Full Name | Beneficiary | `string` | `1..1` | `Patient.name[0].text` | `Ramesh Chandra Sharma` | | +| `memberId` | Scheme / Insurer Member ID | Beneficiary | `string` | `1..1` | `Patient.identifier[type=PMJAY].value` | `PMJAY-HP-2024-998811` | also at `Coverage.subscriberId` | +| `abhaNumber` | ABHA Number | Beneficiary | `string` | `0..1` | `Patient.identifier[type=ABHA].value` | `91234567890123` | | +| `gender` | Gender | Beneficiary | `code` | `1..1` | `Patient.gender` | `male` | code system `http://hl7.org/fhir/administrative-gender` | +| `birthDate` | Date of Birth | Beneficiary | `date` | `1..1` | `Patient.birthDate` | `1982-06-15` | | +| `patientPhone` | Mobile Phone | Beneficiary | `string` | `0..1` | `Patient.telecom[system=phone].value` | `9876543210` | | +| `facilityId` | Hospital Facility ID (HFR/NPI) | Provider | `string` | `1..1` | `Organization[type=prov].identifier[system=https://facility.abdm.gov.in].value` | `IN1910000151` | | +| `providerName` | Hospital Name | Provider | `string` | `1..1` | `Organization[type=prov].name` | `Apex Multispeciality Hospital` | | +| `payerId` | Payer Identifier (NIIP) | Payer | `string` | `1..1` | `Organization[type=pay].identifier[system=https://irdai.gov.in].value` | `1000003538` | | +| `payerName` | Payer Name | Payer | `string` | `1..1` | `Organization[type=pay].name` | `National Health Authority - PMJAY` | | +| `practitionerId` | Practitioner ID (HPID/HPIN) | Practitioner | `string` | `1..1` | `Practitioner.identifier[system=https://hpr.abdm.gov.in].value` | `21-8899-4455-6677` | | +| `practitionerName` | Doctor Name | Practitioner | `string` | `1..1` | `Practitioner.name[0].text` | `Dr. Arvind Kumar` | | +| `primaryDiagnosisCode` | Primary Diagnosis (ICD-10) | Clinical | `string` | `1..1` | `Claim.diagnosis[0].diagnosisCodeableConcept.coding[0].code` | `A97.0` | code system `http://hl7.org/fhir/sid/icd-10` | +| `procedureCode` | Package / Procedure Code | Clinical | `string` | `1..1` | `Claim.procedure[0].procedureCodeableConcept.coding[0].code` | `MG004A` | | +| `patientPhoto` | Patient Photo on Bed (POI) | Documents | `base64Binary` | `1..1` | `Claim.supportingInfo[category=POI].valueAttachment.data` | `JVBERi0xLjQK...` | | + +NRCeS profiles: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html), [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html), [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html), [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html). + +### D5 Resubmit pre-authorisation (pmjay) + +Revises an approved or rejected case for a different amount or package. Nullifies every earlier instance; the payer treats it as the new base request. + +| | | +| :-- | :-- | +| **API** | `/v1/preauth/submit` [`apis/03-preauth/v1-preauth-submit.bru`](/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-submit) | +| **Callback** | `/v1/preauth/on_submit` [`apis/03-preauth/v1-preauth-on-submit.bru`](/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-on-submit) | +| **Workflow** | 121 | +| **Carries JWE** | yes | +| **Focal resource** | `Claim` | +| **Simulator console** | `/builder?family=preauth&usecase=resubmit` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `121` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | +| `x-hcx-use_case` | `Resubmit` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `121` | Preauth Request Resubmitted | provider | `request.initiated` | Resubmission after query/rejection | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `claimNumber` | Existing Case Number | Case | `string` | `1..1` | `Claim.identifier[0].value` | `VB26AA2600001` | | +| `workflowId` | Workflow Code | Header | `string` | `1..1` | `Header.x-hcx-workflow_id` | `121` | | + +NRCeS profiles: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html). diff --git a/site/docs/nhcx/v1/reference/fhir/preauthorisation-response.md b/site/docs/nhcx/v1/reference/fhir/preauthorisation-response.md new file mode 100644 index 000000000..29b0f3147 --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/preauthorisation-response.md @@ -0,0 +1,229 @@ +--- +title: Preauthorisation response +sidebar_label: Preauthorisation response +sidebar_position: 9 +description: ClaimResponse, approvals, queries, and verified rejection bundles (wf 23) +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/09-Preauthorisation Response.md +generated: true +--- + +# Preauthorisation response + +The payer's answer, on the provider's `/v1/preauth/on_submit` callback. A collection bundle whose spine is a `ClaimResponse` carrying the request's case number. The same shape carries an acknowledgement, an approval, a query and a rejection. + +Sent on `/v1/preauth/on_submit`. + +## The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `ClaimResponse` | none declared; NRCeS [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html) | +| 2 | `Patient` | none declared; NRCeS [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 3 | `Organization (pay)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 4 | `Organization (prov)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Coverage` | none declared; NRCeS [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | + +## Elements + +### 1. ClaimResponse + +NRCeS profile: [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system ``, value `NM-26-0SE00002M` | +| `identifier[].type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `status` | `active` | +| `use` | `preauthorization` | +| `patient` | reference `` | +| `created` | `2026-09-10T23:54:09+05:30` | +| `insurer` | reference `` | +| `requestor` | reference `` | +| `outcome` | `complete` | +| `disposition` | `Approved after the status enquiry.` | +| `preAuthRef` | `CL/26/0SE000108` | +| `payeeType.coding[]` | `provider` Provider in `http://terminology.hl7.org/CodeSystem/payeetype` | +| `item[]` | id `Item/LI-899f9802`, itemSequence `1` | +| `item[].adjudication[].category.coding[]` | `submitted` Submitted Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `eligible` Eligible Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `reason` Reason for Adjudication in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | and 1 more | +| `item[].adjudication[].amount` | value `150000` | +| `item[].adjudication[].reason.coding[]` | display `Approved after the status enquiry.` | +| | `Approved` Approved | +| `adjudication[].category.coding[]` | `status` Status | +| `adjudication[].reason.coding[]` | `approved` Approved | +| `total[].category.coding[]` | `benefit` Benefit Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `submitted` Submitted Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `eligible` Eligible Amount | +| `total[].amount` | value `150000` | +| `total[]` | id `MRAV1985001/SANDBOX-DEFAULT-01` | + +### 2. Patient + +NRCeS profile: [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system ``, value `MRAV1985001` | +| `identifier[].type.coding[]` | `MB` Member Number in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `name[]` | family `Kumar`, given `Ravi`, text `Ravi Kumar` | +| `gender` | `male` | +| `birthDate` | `1985-06-15` | + +### 3. Organization (pay) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `active` | `true` | +| `identifier[]` | system `https://facility.abdm.gov.in`, value `1000004805` | +| `identifier[].type.coding[]` | `NIIP` National Insurance Payor Identifier (Payor) in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `pay` Payer in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `Sandbox Payer` | + +### 4. Organization (prov) + +NRCeS profile: [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html). + +| Element | Example | +| :-- | :-- | +| `active` | `true` | +| `identifier[]` | system `https://facility.abdm.gov.in`, value `IN1910000151` | +| `identifier[].type.coding[]` | `NPI` National provider identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `type[].coding[]` | `prov` Healthcare Provider in `http://terminology.hl7.org/CodeSystem/organization-type` | +| `name` | `KyroCare Multispeciality Hospital` | + +### 5. Coverage + +NRCeS profile: [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system ``, value `SANDBOX-DEFAULT-01` | +| `identifier[].type.coding[]` | `NH` National Health Plan Identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | +| `status` | `active` | +| `type.coding[]` | `HIP` health insurance plan policy in `http://terminology.hl7.org/CodeSystem/v3-ActCode` | +| `beneficiary` | reference `` | +| `period` | start `2026-01-01T00:00:00+05:30`, end `2026-12-31T00:00:00+05:30` | +| `payor[]` | reference `` | +| `class[]` | id `POL7UMU002`, value `SANDBOX-DEFAULT-01` | +| `class[].type.coding[]` | `XV` Health Plan Identifier in `http://terminology.hl7.org/CodeSystem/v2-0203` | + +## The answers + +The same bundle, told apart by the workflow code, `outcome` and the claim-level adjudication reason. + +| Variant | Workflow | outcome | reason | +| :-- | :-- | :-- | :-- | +| Acknowledged | `20` | `queued` | `submitted` Submitted | +| Approved | `21` | `complete` | `approved` Approved | +| Enhancement approved | `22` | `complete` | `approved` Approved | +| Rejected | `23` | `error` | `rejected` Rejected | +| Queried | `24` | `partial` | `queried` Queried | + +## Rules + +### 1. Read outcome with the reason + +`outcome` `complete` covers approval and rejection alike. Read it with `adjudication[].reason` at claim level. + +### 2. Answer early, decide later + +Acknowledge at once on 20 as `response.partial`, then decide on 21 or 23 as `response.complete`, or the exchange retires the correlation before the adjudicator gets to it. + +### 3. The case number + +`preAuthRef` carries the payer's own case number. Store it on arrival; later requests on the case name it. + +### 4. Items by sequence + +Read item adjudication by `itemSequence`, never by array position. A reduced amount does not force `outcome` to `partial`; reconcile the amounts yourself. + +### 5. Totals + +`total[]` carries `benefit`, `submitted` and `eligible`. The `eligible` total names the member and the plan in its `id`; key on the category and the `id` together. + +### 6. disposition is prose + +For a human. Route on `outcome` and the adjudication codes. + +### 7. Match on the case number + +Join the response to the request on `identifier` and `preAuthRef`, never on the provider identifier or name, which can change shape between request and response. + +### 8. Adjudication systems + +Some senders bind adjudication categories to a documentation URL. Match on the code. + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What changes in the bundle + +PMJAY sends this exchange in the generic shape. + +### What PMJAY specifies + +- A rejection is `outcome` `error` with reason `rejected` and benefit 0. Generic payers send `complete` with `cancelled` or `rejected`. Handle both. +- A query is `outcome` `partial` with reason `queried`, the question as free text in the item adjudication; see the query chapter. +- `preAuthRef` carries the scheme's case id. It is what the payer service uses to address the case. + +### What PMJAY requires + +- Store the case reference the moment it arrives. Enhancements, claims and the payer service address the case by it. + +## Use cases, APIs and data elements + +### C5 Respond to pre-authorisation (payer) + +The adjudicated pre-authorisation. The acknowledgement on 20 travels as response.partial and carries the payer's own case number; the decisions travel as response.complete. Read outcome and the adjudication amounts together: complete covers approval and denial alike. Under PMJAY a query is this ClaimResponse on 24 or 241, on the case's own thread. + +| | | +| :-- | :-- | +| **API** | `/v1/preauth/on_submit` [`apis/03-preauth/v1-preauth-on-submit.bru`](/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-on-submit) | +| **Callback** | `/v1/preauth/submit` [`apis/03-preauth/v1-preauth-submit.bru`](/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-submit) | +| **Workflow** | 20 received, 21 approved, 23 rejected, 24 queried, 22 enhancement approved, 231 denied, 241 queried | +| **Carries JWE** | yes | +| **Focal resource** | `ClaimResponse` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1518@hcx` | +| `x-hcx-recipient_code` | `1000004446@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-workflow_id` | `21` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `response.complete` | +| `x-hcx-ben-abha-id` | `91711234567890` | +| `x-hcx-debug_flag` | `INFO` | + +**Workflow codes** + +| Code | Name | Authored by | `x-hcx-status` | Means | +| :-- | :-- | :-- | :-- | :-- | +| `20` | Preauth Request Received | payer | `response.partial`, `response.error` | Payer has received and acknowledged the preauth request | +| `21` | Preauth Request Approved | payer | `response.complete` | Preauth fully approved - proceed with treatment | +| `23` | Preauth Request Rejected | payer | `response.complete` | Preauth rejected - review error/processNote for reason | +| `24` | Preauth Request Queried | payer | `request.initiated` | Payer needs more information - respond using workflow 19 | +| `22` | Enhancement Request Approved | payer | `response.complete` | Enhancement request approved by payer | +| `231` | Enhancement Deny | status sheet only | `response.complete` | | +| `241` | Enhancement Request Queried | payer | `request.initiated` | Enhancement request queried by payer | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `outcome` | Verdict Outcome | Verdict | `code` | `1..1` | `ClaimResponse.outcome` | `complete` | | +| `preAuthRef` | Payer Case Tracking ID | Verdict | `string` | `0..1` | `ClaimResponse.preAuthRef` | `APPR-2026-HP-00891` | | +| `approvedAmount` | Approved Pre-auth Sanction | Financials | `decimal` | `0..1` | `ClaimResponse.total[category=benefit].amount.value` | `15500.00` | | +| `disposition` | Adjudicator Remarks | Verdict | `string` | `0..1` | `ClaimResponse.disposition` | `Approved by PPD-Trust committee` | | + +NRCeS profiles: [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html). diff --git a/site/docs/nhcx/v1/reference/fhir/predetermination-status-and-search.md b/site/docs/nhcx/v1/reference/fhir/predetermination-status-and-search.md new file mode 100644 index 000000000..a8adef9be --- /dev/null +++ b/site/docs/nhcx/v1/reference/fhir/predetermination-status-and-search.md @@ -0,0 +1,426 @@ +--- +title: Predetermination, status and search +sidebar_label: Predetermination, status and search +sidebar_position: 18 +description: Specification and schemas for predetermination, status, and search +verification: unverified +source: nhcx-package/docs/05-FHIR Reference/18-Predetermination, Status and Search.md +generated: true +--- + +# Predetermination, status and search + +Three exchanges that are specified and seldom used. Confirm support with the payer before building any of them. + +## Predetermination request + +Sent on `/v1/predetermination/submit`. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Claim` | [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html) | +| 2 | `Patient` | [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 3 | `Organization (prov)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 4 | `Organization (pay)` | [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Coverage` | [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | +| 6 | `Practitioner` | [Practitioner](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Practitioner.html) | +| 7 | `Procedure` | [Procedure](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Procedure.html) | + +### Elements + +#### 1. Claim + +NRCeS profile: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.abdm.gov.in`, value `PD0000000001` | +| `identifier[].type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `status` | `active` | +| `type.coding[]` | `737481003` Inpatient care management (procedure) in `http://snomed.info/sct` | +| `use` | `predetermination` | +| `patient` | reference `https://nhcx.abdm.gov.in/patient` | +| `billablePeriod` | start `2026-02-22T10:00:00+05:30`, end `2026-02-27T11:00:00+05:30` | +| `created` | `2026-02-22T15:49:36+05:30` | +| `insurer` | reference `https://nhcx.abdm.gov.in/payer` | +| `provider` | reference `https://nhcx.abdm.gov.in/provider` | +| `priority.coding[]` | `normal` Normal in `http://terminology.hl7.org/CodeSystem/processpriority` | +| `careTeam[]` | sequence `1` | +| `careTeam[].provider` | reference `https://nhcx.abdm.gov.in/practitioner` | +| `careTeam[].role.coding[]` | `primary` Primary provider in `http://terminology.hl7.org/CodeSystem/claimcareteamrole` | +| `careTeam[].qualification.coding[]` | `394802001` General medicine in `http://snomed.info/sct` | +| `supportingInfo[]` | id `SupportingInformation/1`, sequence `1` | +| | id `SupportingInformation/2`, sequence `2` | +| | id `SupportingInformation/3`, sequence `3` | +| | and 3 more | +| `supportingInfo[].category.coding[]` | `INV` Document Type - Investigation in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | `ONS` Period, start or end dates of aspects of the Condition. (e.g. admission, discha… in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| | `OTH` Other in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | +| `supportingInfo[].code.coding[]` | `MAND0408` Clinical notes detailing history and Admission notes showing vitals and examina… in `https://nhcx.abdm.gov.in/document-code` | +| | `MAND0455` CXR PA view or CECT chest abdomen and pelvis in `https://nhcx.abdm.gov.in/document-code` | +| | `MAND0409` Any investigations done in `https://nhcx.abdm.gov.in/document-code` | +| | and 3 more | +| `supportingInfo[].valueAttachment` | contentType `application/pdf`, title `Clinical notes detailing history and Admission notes showing vitals and examina…` | +| | contentType `application/pdf`, title `CXR PA view or CECT chest abdomen and pelvis` | +| | contentType `application/pdf`, title `Any investigations done` | +| | and 1 more | +| `diagnosis[]` | sequence `1` | +| `diagnosis[].diagnosisCodeableConcept.coding[]` | `A97` Dengue in `http://hl7.org/fhir/sid/icd-10` | +| `diagnosis[].type[].coding[]` | `admitting` Admitting Diagnosis in `http://terminology.hl7.org/CodeSystem/ex-diagnosistype` | +| `diagnosis[].onAdmission.coding[]` | `yes` Yes in `http://terminology.hl7.org/CodeSystem/ex-diagnosis-on-admission` | +| `procedure[]` | id `Procedure/1`, sequence `1`, date `2026-02-24T09:30:00+05:30` | +| `procedure[].type[].coding[]` | `conservative` Conservative in `https://nhcx.abdm.gov.in/procedure-type` | +| `procedure[].procedureReference` | reference `https://nhcx.abdm.gov.in/procedure/1`, display `Pleural Effusion` | +| `insurance[]` | sequence `1`, focal `true` | +| `insurance[].coverage` | reference `https://nhcx.abdm.gov.in/coverage` | +| `item[]` | id `Item/1`, sequence `1`, careTeamSequence `1`, diagnosisSequence `1`, procedureSequence `1`, informationSequence `1`, `2`, `3`, `4`, `5`, `6`, factor `0.5` | +| `item[].category.coding[]` | `MG` General Medicine in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-benefit-category` | +| `item[].productOrService.coding[]` | `MG0111A` Pleural Effusion in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-procedure-code` | +| `item[].modifier[].coding[]` | `STRAT006b` HDU | +| `item[].programCode[].coding[]` | `AB-PMJAY` Ayushman Bharat Pradhan Mantri Jan Arogya Yojana (AB-PMJAY) in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-program-code` | +| `item[].servicedPeriod` | start `2026-02-22`, end `2026-02-27` | +| `item[].quantity` | value `1` | +| `item[].unitPrice` | value `3300`, currency `INR` | +| `item[].net` | value `3300`, currency `INR` | +| `total` | value `3300`, currency `INR` | + +The `Patient`, `Organization`, `Coverage`, `Practitioner`, `Procedure` entries are shaped as in the chapters that introduce them. + +## Predetermination response + +Sent on `/v1/predetermination/on_submit`. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `ClaimResponse` | none declared; NRCeS [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html) | +| 2 | `Patient` | none declared; NRCeS [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 3 | `Organization (pay)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 4 | `Organization (prov)` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 5 | `Coverage` | none declared; NRCeS [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html) | + +### Elements + +#### 1. ClaimResponse + +NRCeS profile: [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system ``, value `NM-26-0SE00002M` | +| `identifier[].type.coding[]` | `CLN` Claim number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | +| `status` | `active` | +| `use` | `predetermination` | +| `patient` | reference `` | +| `created` | `2026-09-10T23:54:09+05:30` | +| `insurer` | reference `` | +| `requestor` | reference `` | +| `outcome` | `complete` | +| `disposition` | `Approved after the status enquiry.` | +| `preAuthRef` | `CL/26/0SE000108` | +| `payeeType.coding[]` | `provider` Provider in `http://terminology.hl7.org/CodeSystem/payeetype` | +| `item[]` | id `Item/LI-899f9802`, itemSequence `1` | +| `item[].adjudication[].category.coding[]` | `submitted` Submitted Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `eligible` Eligible Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `reason` Reason for Adjudication in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | and 1 more | +| `item[].adjudication[].amount` | value `150000` | +| `item[].adjudication[].reason.coding[]` | display `Approved after the status enquiry.` | +| | `Approved` Approved | +| `adjudication[].category.coding[]` | `status` Status | +| `adjudication[].reason.coding[]` | `approved` Approved | +| `total[].category.coding[]` | `benefit` Benefit Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `submitted` Submitted Amount in `https://hl7.org/fhir/R4/valueset-adjudication.html` | +| | `eligible` Eligible Amount | +| `total[].amount` | value `150000` | +| `total[]` | id `MRAV1985001/SANDBOX-DEFAULT-01` | + +The `Patient`, `Organization`, `Coverage` entries are shaped as in the chapters that introduce them. + +## Status + +A sender asks what became of a request it made. There is no FHIR payload either way. The Status sheet of the requests-and-responses workbook says the request payload "should be empty string": no bundle, no `Task`, no resource. Everything the call needs travels in the protected header. `x-hcx-correlation_id` is the `x-hcx-api_call_id` of the request whose status is sought, `x-hcx-status` is `request.initiated`, `x-hcx-workflow_id` and `x-hcx-use_case` (`New`, `Enhancement` or `Resubmit`) are optional, and `x-hcx-ben-abha-id` is mandatory. The status comes back on `/v1/on_status`, again in the protected header: `x-hcx-status` `request.dispatched`, the correlation id of the request, and `x-hcx-error_details` (`code`, `message`, `trace`) where it failed. The sheet gives the callback no payload section. The sandbox exit checklists word the request payload as the "encrypted payload of request for which the status is seeking for" and describe no bundle for it. + +Sent on `/v1/status`, answered on `/v1/on_status`. + +## Search + +Sent on `/v1/search/submit`. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `Organization` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | +| 3 | `Organization` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `identifier[]` | system `https://nhcx.gov.in/task`, value `SR0000000001` | +| `status` | `requested` | +| `intent` | `order` | +| `code.coding[]` | `search` Search in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-codes` | +| `description` | `Search claim records for case CL0000000001` | +| `authoredOn` | `2026-02-26T12:00:00+05:30` | +| `requester` | reference `urn:uuid:e0000001-0000-0000-0000-000000000002` | +| `owner` | reference `urn:uuid:e0000001-0000-0000-0000-000000000003` | +| `input[]` | valueString `CL0000000001` | +| `input[].type.coding[]` | `ClaimNumber` Claim Number in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | + +The `Organization` entries are shaped as in the chapters that introduce them. + +## Search response + +Sent on `/v1/search/on_submit`. + +### The bundle + +| # | Resource | Profile | +| :-- | :-- | :-- | +| 1 | `Task` | [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html) | +| 2 | `ClaimResponse` | none declared; NRCeS [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html) | +| 3 | `Patient` | none declared; NRCeS [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html) | +| 4 | `Organization` | none declared; NRCeS [Organization](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html) | + +### Elements + +#### 1. Task + +NRCeS profile: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +| Element | Example | +| :-- | :-- | +| `status` | `completed` | +| `intent` | `order` | +| `code.coding[]` | `search` Search in `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-codes` | +| `output[].type.coding[]` | `ClaimResponse` in `http://hl7.org/fhir/resource-types` | +| `output[].valueReference` | reference `urn:uuid:e0000001-0000-0000-0000-000000000011` | + +#### 2. ClaimResponse + +NRCeS profile: [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html). + +| Element | Example | +| :-- | :-- | +| `status` | `active` | +| `type.coding[]` | `institutional` | +| `use` | `claim` | +| `patient` | reference `Patient/1` | +| `insurer` | reference `Organization/2` | +| `outcome` | `complete` | + +The `Patient`, `Organization` entries are shaped as in the chapters that introduce them. + +## Rules + +### 1. Predetermination + +What would the payer approve for this treatment? The preauthorisation bundles with `Claim.use` `predetermination`. Nothing is reserved. + +### 2. Status + +No bundle and no `Task`. Send an empty payload with the correlation id set to the call id of the request you are asking about, and read the answer from the callback's protected header. + +### 3. Search + +`Task.code` `search` in `ndhm-task-codes`, with inputs from the task input-type value set, such as `ClaimNumber`, `PolicyNumber`, `FromDate` and `ToDate`. The answer is a `Task`, `completed`, whose outputs reference the matching `ClaimResponse` resources in the same bundle, possibly across several callbacks on one correlation id. + +### 4. Agree the codes + +The task code for search is given more than one way in the specifications. Agree it with the payer in writing first. + +## PMJAY + +The generic bundle above is what every payer takes, IRDAI-regulated insurers and TPAs included. PMJAY takes it with the changes and requirements below. + +### What changes in the bundle + +PMJAY sends this exchange in the generic shape. + +### What PMJAY requires + +- A status enquiry as a `Task` is refused. Read where a case stands from the payer service's role lookup. + +## Use cases, APIs and data elements + +### B9 Submit predetermination (provider) + +What would the payer approve for this treatment? Same bundle shape as a pre-authorisation, asked before committing to one. + +| | | +| :-- | :-- | +| **API** | `/v1/predetermination/submit` [`apis/04-predetermination/v1-predetermination-submit.bru`](/docs/nhcx/v1/api/predetermination/endpoints/predetermination-v1-predetermination-submit) | +| **Callback** | `/v1/predetermination/on_submit` [`apis/04-predetermination/v1-predetermination-on_submit.bru`](/docs/nhcx/v1/api/predetermination/endpoints/predetermination-v1-predetermination-on-submit) | +| **Carries JWE** | yes | +| **Focal resource** | `Claim` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `Content-Type` | `application/json` | +| `x-hcx-sender_code` | `{{participantCode}}` | +| `x-hcx-recipient_code` | `{{recipientCode}}` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{correlationId}}` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `claimNumber` | Predetermination Reference | Case | `string` | `1..1` | `Claim.identifier[0].value` | `PD0000000001` | | +| `use` | Claim Use | Case | `code` | `1..1` | `Claim.use` | `predetermination` | | +| `patientName` | Patient Full Name | Beneficiary | `string` | `1..1` | `Patient.name[0].text` | `Ramesh Chandra Sharma` | | +| `memberId` | Scheme / Insurer Member ID | Beneficiary | `string` | `1..1` | `Patient.identifier[type=PMJAY].value` | `PMJAY-HP-2024-998811` | also at `Coverage.subscriberId` | +| `abhaNumber` | ABHA Number | Beneficiary | `string` | `0..1` | `Patient.identifier[type=ABHA].value` | `91234567890123` | | +| `gender` | Gender | Beneficiary | `code` | `1..1` | `Patient.gender` | `male` | code system `http://hl7.org/fhir/administrative-gender` | +| `birthDate` | Date of Birth | Beneficiary | `date` | `1..1` | `Patient.birthDate` | `1982-06-15` | | +| `patientPhone` | Mobile Phone | Beneficiary | `string` | `0..1` | `Patient.telecom[system=phone].value` | `9876543210` | | +| `policyNumber` | Policy Number | Coverage | `string` | `1..1` | `Coverage.identifier[0].value` | `PMJAY/HP/S/G` | | +| `primaryDiagnosisCode` | Primary Diagnosis (ICD-10) | Clinical | `string` | `1..1` | `Claim.diagnosis[0].diagnosisCodeableConcept.coding[0].code` | `A97.0` | code system `http://hl7.org/fhir/sid/icd-10` | +| `procedureCode` | Package / Procedure Code | Clinical | `string` | `1..1` | `Claim.procedure[0].procedureCodeableConcept.coding[0].code` | `MG004A` | | + +NRCeS profiles: [Claim](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Claim.html), [Patient](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html), [Coverage](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Coverage.html). + +### C11 Respond to predetermination (payer) + +What the payer would approve for the proposed treatment. + +| | | +| :-- | :-- | +| **API** | `/v1/predetermination/on_submit` [`apis/04-predetermination/v1-predetermination-on_submit.bru`](/docs/nhcx/v1/api/predetermination/endpoints/predetermination-v1-predetermination-on-submit) | +| **Callback** | `/v1/predetermination/submit` [`apis/04-predetermination/v1-predetermination-submit.bru`](/docs/nhcx/v1/api/predetermination/endpoints/predetermination-v1-predetermination-submit) | +| **Carries JWE** | yes | +| **Focal resource** | `ClaimResponse` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `Content-Type` | `application/json` | +| `x-hcx-sender_code` | `{{participantCode}}` | +| `x-hcx-recipient_code` | `{{recipientCode}}` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{correlationId}}` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `response.complete` | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `use` | Claim Use | Verdict | `code` | `1..1` | `ClaimResponse.use` | `predetermination` | | +| `estimatedApproval` | Estimated Approved Benefit | Verdict | `decimal` | `1..1` | `ClaimResponse.total[category=benefit].amount.value` | `15500.00` | | + +NRCeS profiles: [ClaimResponse](https://nrces.in/ndhm/fhir/r4/StructureDefinition-ClaimResponse.html). + +### A5 Get status (shared) + +Where any request you made got to, by its correlation id. The sandbox's own status page answers without a token. + +| | | +| :-- | :-- | +| **API** | `/v1/status` [`apis/08-status/v1-status.bru`](/docs/nhcx/v1/api/status/endpoints/status-v1-status) | +| **Callback** | `/v1/on_status` [`apis/13-other/v1-on_status.bru`](/docs/nhcx/v1/api/other/endpoints/other-v1-on-status) | +| **Carries JWE** | yes | +| **Focal resource** | `None; the payload is an empty string and the protected header carries the call` | +| **Simulator console** | `/status` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{originalApiCallId}}` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `correlationId` | API call ID of the request being checked | Header | `uuid` | `1..1` | `Header.x-hcx-correlation_id` | `4f9d2b80-13b4-4e2a-9e12-8f9024a56789` | | +| `status` | Dispatch Status | Callback Header | `string` | `1..1` | `Header.x-hcx-status` | `request.dispatched` | | + +### B6 Search claims (provider) + +Look up claim information by criteria. The provider sandbox exit checklist names /v1/search/submit for claim search, while the Technical Specifications route /search/submit from NHA through NHCX to the payer: a cross-payer search for NHA or a regulator. A provider's search over its own cases is /claim/search in the protocol, which the access-control policy allows for requests that originated from the provider. No source confirms which of the two the sandbox accepts from a provider. + +| | | +| :-- | :-- | +| **API** | `/v1/search/submit` [`apis/08-status/v1-search-submit.bru`](/docs/nhcx/v1/api/status/endpoints/status-v1-search-submit) | +| **Callback** | `/v1/search/on_submit` [`apis/08-status/v1-search-on-submit.bru`](/docs/nhcx/v1/api/status/endpoints/status-v1-search-on-submit) | +| **Carries JWE** | yes | +| **Focal resource** | `Task` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1000004446@hcx` | +| `x-hcx-recipient_code` | `1518@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | `91711234567890` | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `taskCode` | Task Code | Task | `code` | `1..1` | `Task.code.coding[0].code` | `search` | | +| `claimNumber` | Search Claim Number | Task Input | `string` | `0..1` | `Task.input[type=ClaimNumber].valueString` | `CL0000000001` | | +| `policyNumber` | Search Policy Number | Task Input | `string` | `0..1` | `Task.input[type=PolicyNumber].valueString` | `PMJAY/HP/S/G` | | + +NRCeS profiles: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). + +### C8 Respond to search (payer) + +The ClaimResponse objects matching the criteria asked for. + +| | | +| :-- | :-- | +| **API** | `/v1/search/on_submit` [`apis/08-status/v1-search-on-submit.bru`](/docs/nhcx/v1/api/status/endpoints/status-v1-search-on-submit) | +| **Callback** | `/v1/search/submit` [`apis/08-status/v1-search-submit.bru`](/docs/nhcx/v1/api/status/endpoints/status-v1-search-submit) | +| **Carries JWE** | yes | +| **Focal resource** | `Task` | + +**Request headers** + +| Header | Example value | +| :-- | :-- | +| `x-hcx-sender_code` | `1518@hcx` | +| `x-hcx-recipient_code` | `1000004446@hcx` | +| `x-hcx-api_call_id` | `{{$guid}}` | +| `x-hcx-request_id` | `{{$guid}}` | +| `x-hcx-correlation_id` | `{{$guid}}` | +| `x-hcx-timestamp` | `{{$isoTimestamp}}` | +| `x-hcx-status` | `response.complete` | +| `x-hcx-ben-abha-id` | `91711234567890` | + +**Data elements** + +| Element | Label | Group | Type | Card. | FHIR path | Example | Notes | +| :-- | :-- | :-- | :-- | :--: | :-- | :-- | :-- | +| `taskStatus` | Search Task Status | Task | `code` | `1..1` | `Task.status` | `completed` | | +| `claimResponseRef` | Matching ClaimResponse | Task Output | `reference` | `0..*` | `Task.output[].valueReference.reference` | `ClaimResponse/cr-approved-1` | | + +NRCeS profiles: [Task](https://nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html). diff --git a/site/docs/nhcx/v1/reference/governance-and-audit.md b/site/docs/nhcx/v1/reference/governance-and-audit.md new file mode 100644 index 000000000..e2d996046 --- /dev/null +++ b/site/docs/nhcx/v1/reference/governance-and-audit.md @@ -0,0 +1,221 @@ +--- +title: Governance and audit +sidebar_label: Governance and audit +sidebar_position: 15 +description: Security layers, dual JWTs, log retention, grievance redressal, and onboarding checklist +verification: unverified +source: nhcx-package/docs/06-Reference/05-Governance and Audit.md +generated: true +--- + +# Governance and audit + +What a participant owes the network beyond making the calls work: how messages +are secured in transit and at the API layer, what must be logged and for how +long, how grievances are handled, how a participant joins and how one is +removed. None of it is a claim exchange and all of it is binding on anyone +operating in production. + +## The security layers + +Three, and they do different jobs. A system that has one is not secure. + +| Layer | Mechanism | What it protects | +| :---- | :---- | :---- | +| Transport | HTTPS with TLS, mandatory in production | The channel | +| Message | JWE with the recipient's public key | The payload, from everyone including the exchange | +| API | JWT bearer tokens with a mandatory expiry | Access to the endpoints | + +Transport security is stated without qualification: all communication between +the exchange and participating entities uses TLS, and all APIs work only over +HTTPS in production. + +## The two JWTs, and they are not the same + +This is the part most often built wrong, because the same word covers two +tokens signed by different parties with different algorithms. + +**Your token, calling the gateway.** Signed `HS256`, with the participant's +`client_secret` as the key. Claims `jti`, `iss` (the exchange instance), `sub` +(your client ID), `iat` and `exp`. You obtain it from the sessions endpoint +with your client ID and secret, and you present it on the `Authorization` +header. Session Token in Getting Started covers obtaining it; note that NHCX's +own endpoints read it from `bearer_auth` in practice, which is why the safe +course is to send both header names. + +**The exchange's token, calling you.** Signed `RS256`, with the exchange's own +private key. Claims `jti`, `iss`, `sub` set to the same value as `iss`, `iat` +and `exp`. Participant systems are expected to validate it against the +exchange's public key. + +**The public key is still not published.** Neither is the header it arrives on. +Receiving a Callback in Getting Started sets out what that means: every +integration built from these documents has shipped with signature checking +disabled, because rejecting everything makes the endpoint useless. Ask for the +key during onboarding, at the same time you register your endpoint, hold the +gap open deliberately rather than silently, and defend the endpoint with an +address allow-list and whatever else your edge offers until you have it. + +**Revocation.** The exchange revokes a participant's API access by generating a +new `client_secret` and updating the registry. Your tokens stop working and you +mint new ones with the new secret. There is no separate revocation call to +watch for, so a sudden authentication failure across every call is a state to +recognise. + +## Key rotation + +- Rotate the encryption key pair **once a year**. The specification recommends + it; the certificate a self-signed X.509 generates by default expires in a + year anyway. +- Mechanisms must exist for providers, payers and the exchange to **tell the + ecosystem about a suspected key compromise**. Decide in advance who at your + organisation makes that call and how. +- A certificate-only change in production skips the passcode steps. Creating + and Updating a Participant has the call. +- The practical failure is asymmetric and worth naming: if the certificate on + your record does not match the private key you hold, everybody else can seal + messages you cannot open, and nothing tells you until traffic fails. + +## What must be logged + +The event-audit guidelines are the strictest obligation in this chapter and the +least implemented. + +- **Every event in the claims flow must be digitally signed and logged**, in + both directions, between provider systems, beneficiary apps and payer + systems. Claim created, claim forwarded, data requested, authorisation, + payment. +- **Logs must be append-only.** They must not be editable. The stated purpose is + immutability, non-tamperability and non-repudiability. +- **Retention is set by the law of the land**, configurable, and the material + deliberately does not name a period. +- **The audit trail must be transparently available to the customer.** + +The exchange keeps its own audit log of every API call it receives: the domain +headers, the signature and encryption details, sender and recipient, and +whether validation passed. It never logs the payload, because it cannot read +it. + +Two requirements on that log are worth knowing because they are things you can +use rather than things you must build. + +- **The audit log is queryable through an API**, so a participant can retrieve + the trail of its own transactions. +- **The exchange publishes reports against it** for payers, providers, + beneficiaries, regulators and observers, and each instance publishes the list + of reports it supports and the level of detail in each. + +Each instance also defines an archival policy covering retention, deletion and +how to reach logs after archival. Ask for your instance's policy and its report +list during onboarding; neither is in the published material. + +## Grievance redressal + +The claims desk meets grievances as a communication reason code. The governance +layer underneath it is a published policy that every operator must produce and +every participant signs. + +What the guidelines require of that policy: + +- Digital initiation, routing and tracking of a grievance raised by any + participant against any other. +- A published list of grievances covered, and a mechanism for those that are + not. +- **Every participant must run a nodal governance body**, contactable at the + digital and physical addresses given at onboarding, and those contact details + are readable by every other participant through the registry. The exchange + publishes its own governance body the same way. +- Published types, priorities and **service levels per grievance type**. +- A due-diligence cycle before responding, the right to **reopen**, and + escalation to the exchange operator on accelerated timelines when the + requester is not satisfied. +- Versioning, signature by new members at onboarding, and proactive notice of + any change. + +Two consequences for a build. Your registry entry is a published contact point +for disputes, so the mobile number and email on it are operational rather than +administrative. And a grievance has a service level attached, so the +communication inbox that receives one is not a mailbox somebody reads when they +can. + +The guidelines are aligned with IRDAI's own grievance-redressal guidelines and +are explicitly a draft for consultation. The model policy has not been +published. + +## Beneficiary authentication, generally + +PMJAY biometrics are one case of a wider expectation. Provider systems are +expected to support Aadhaar eKYC for beneficiary verification, and Aadhaar +authentication by mobile OTP or biometric to initiate a claim transaction. The +guidelines note that provider systems enrolled with ABDM already hold biometric +devices, because health ID creation needs them. Payer systems and the exchange +integrate Aadhaar authentication for verifying the beneficiary at claim +validation. + +Biometric Authentication in Building a Provider covers the scheme's own +implementation of this. + +## Joining, and being removed + +Onboarding is two stages, and the first certifies the second. + +**Sandbox.** Apply, be verified as eligible, receive credentials, integrate, +then pass the functional and security tests that apply to your role. The +operator may require additional security review such as STQC or CERT-In. You +submit your test results, including how your application uses and interacts +with the exchange APIs, and on approval receive a completion certificate +**valid for a configured period**. Nobody states that period; ask. + +**Production.** Register, using Health Facility Registry authentication where +you have it and documentary verification from IRDAI or an equivalent agency +where you do not. Your sandbox certificate is reviewed. Production credentials +are issued. Then go live, with the advice to plan change management, train +staff and pilot with a small set of clients first. + +**Deboarding** happens three ways, and the second is the one to design against. + +| Kind | Initiated by | Examples | +| :---- | :---- | :---- | +| Involuntary, by a regulator | IRDAI or a legal authority | A provider suspended for fraud; a TPA or payer deactivated | +| Involuntary, by the exchange | The operator | Serious or repeated policy violation, including grave service-level breaches; attempted unauthorised access; behaviour that destabilises the exchange, such as **frequent bursts of requests beyond authorised rate limits** | +| Voluntary | The participant | Moving to another exchange, shutting down, merging | + +Involuntary removal comes with an elaborate warning mechanism and a right of +appeal through the grievance process. + +That rate-limit clause is the only acknowledgement in the corpus that rate +limits exist. No number is published anywhere. Build a client that backs off +rather than one that retries hard, and ask for your instance's limits at +onboarding. + +## What to ask for at onboarding + +Everything the published material leaves blank, in this chapter and across the +documentation, collected so it is asked once. + +- The exchange's **public key** for validating inbound JWTs, and the header the + token arrives on. +- The instance's **audit report list** and the address of the audit query API. +- The instance's **archival policy**: retention, deletion, post-archival access. +- The **grievance policy**, its version, its covered types and their service + levels, and the nodal contact you are expected to publish. +- The **rate limits** your participant code is subject to. +- The **validity period** of your sandbox certificate. +- Whether **STQC or CERT-In** review applies to you. +- The **turnaround-time windows** for preauthorisation and claim. The plan's + `ScheduledTATApproval` flag says the period "varies with policy" and the FAQ + says there is no fixed TAT as of now; no values are published. +- The **forward instruction** on coverage eligibility: its fields and its flow. + The specification gives it one sentence. +- The **`/v1/error` body schema**. The sources say to implement the endpoint + and receive the reject details, but its field names are not published. +- The **currency rule** for money fields. The claim sample carries no + `currency` on `Claim.total`, the payment notice sample carries it on the paid + amount, and no source states a rule. +- The **coverage-based insurance plan**. Only the package-based plan is + sampled, in either direction. +- **Payment notices 31 and 33**. Only the initiation is sampled, so the notice + that carries a real bank reference has never been observed. +- The **timestamp form**, format and zone. The handbook says Indian time + (`+05:30`) and that UTC fails validation, the FAQ says UTC with a trailing + `Z`, and the samples use `+05:30`. diff --git a/site/docs/nhcx/v1/reference/notifications-and-patient-apps.md b/site/docs/nhcx/v1/reference/notifications-and-patient-apps.md new file mode 100644 index 000000000..51d463a35 --- /dev/null +++ b/site/docs/nhcx/v1/reference/notifications-and-patient-apps.md @@ -0,0 +1,233 @@ +--- +title: Notifications and patient apps +sidebar_label: Notifications and patient apps +sidebar_position: 17 +description: Beneficiary service provider integration, subscription model, and push events +verification: unverified +source: nhcx-package/docs/06-Reference/07-Notifications and Patient Apps.md +generated: true +--- + +# Notifications and patient apps + +The third kind of participant. A personal health record app registers on the +exchange as a beneficiary service provider, subscribes on a beneficiary's +behalf, and receives a readable message every time something happens to that +beneficiary's claim. It sends no claims and answers no queries. It is the only +role on the network whose whole job is to be told things. + +This chapter is for anyone building such an app, and for a hospital or payer +that also runs one. + +## The model: subscribe on login, last linked wins + +When a beneficiary logs into an app with their ABHA, that app calls subscribe +and becomes the recipient of every notification for that ABHA. **Any earlier +subscription is replaced.** Only one app receives notifications for a +beneficiary at any moment. + +That rule is deliberate and it has consequences worth designing around. + +- There is no duplicate delivery to handle, and no fan-out. +- A beneficiary who opens a second app silently stops receiving notifications + in the first. Neither app is told. +- Subscription is an action to take on every login, not once at install. + +```mermaid +sequenceDiagram + box Beneficiary + participant A as Patient app + end + box Exchange + participant X as NHCX + end + box Provider side + participant H as Hospital + end + box Payer side + participant Y as Payer + end + A->>X: subscribe for this ABHA, on login + X-->>A: subscription confirmed + H->>X: preauth/submit + X->>Y: forwards + Y->>X: preauth/on_submit, approved + X->>H: callback to the hospital + X->>A: notification with a readable message +``` + +## Before you start + +- **Milestone 1.** The app must have completed ABDM Milestone 1 integration. +- **Registration as a beneficiary service provider.** Sandbox testing, sandbox + certification, then onboarding to the production registry. The role code is + 10009 and the registry ID may be the app's own client ID. +- **An HTTPS endpoint** with TLS 1.2 or newer, and the ability to generate and + validate JWTs. + +## Subscribing + +```bash +curl --location --request POST 'https://hcxsbx.abdm.gov.in/v1/notification/subscribe' \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ' \ + --header 'x-hcx-sender_code: phr-app-xyz@bsp' \ + --header 'x-hcx-recipient_code: nhcx-gateway@hcx' \ + --header 'x-hcx-timestamp: ' \ + --header 'x-hcx-correlation_id: ' \ + --data-raw '{ + "payload": "eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00iLCJ4LWhjeC1zZW5kZXJfY29kZSI6InBoci1hcHAteHl6QGJzcCJ9.encrypted_key.iv.ciphertext.tag", + "_payload_plaintext": { + "subscription_id": "sub_ravi_001", + "topic_code": [ + "workflow_events" + ], + "recipient_code": "phr-app-xyz@bsp", + "subscriber": { + "id": "ravi@abdm" + }, + "on_notification_url": "https://api.phrapp.com/v1/hcx/notification/on_subscribe" + } + }' +``` + +[Notification subscribe in the API reference](/docs/nhcx/v1/api/other/endpoints/other-v1-notification-subscribe) + +The call is sealed like any other message on the exchange, with the app as +sender and the gateway as recipient. The subscription service's live +specification is at +`https://hcxsbx.abdm.gov.in/subscriptionhcxservice/swagger-ui/index.html`, and +Environments and Addresses lists it with the others. + +| Field | Required | What it carries | +| :---- | :---- | :---- | +| `subscription_id` | Yes | Your own unique identifier for this subscription | +| `topic_code` | Yes | An array of topics, see below | +| `recipient_code` | Yes | Your participant code | +| `subscriber.id` | Yes | The beneficiary's ABHA address, for example `ravi@abdm` | +| `on_notification_url` | Yes | Where notifications should be delivered | +| `expiry` | No | When the subscription lapses | + +```json +{ + "subscription_id": "sub_ravi_001", + "topic_code": ["workflow_events"], + "recipient_code": "phr-app-xyz@bsp", + "subscriber": { "id": "ravi@abdm" }, + "on_notification_url": "https://api.phrapp.example/v1/hcx/notification/on_subscribe" +} +``` + +### Topics + +| Topic | What arrives | +| :---- | :---- | +| `workflow_events` | Claim lifecycle: preauthorisation, claim, payment | +| `network_events` | Exchange platform updates and maintenance | +| `participant_events` | Changes to payer and provider registrations | + +Most apps need `workflow_events` alone. The field is an array, so subscribe to +more than one where you have a reason. + +The workflow codes for this exchange are N01 to a payer, N02 to a provider, N03 +to a beneficiary and N04 for the acknowledgement. + +## Receiving a notification + +The exchange posts to the `on_notification_url` you registered. + +| Field | What it carries | +| :---- | :---- | +| `notification_id` | Unique per notification | +| `topic_code` | The topic it arrived under | +| `timestamp` | ISO 8601 | +| `subscriber.id` | The beneficiary's ABHA | +| `message` | **A human-readable sentence the app can display as it stands** | +| `domain_values` | Optional map of the domain headers, for audit or richer rendering | + +```json +{ + "notification_id": "notif_20260428_001", + "topic_code": "workflow_events", + "timestamp": "2026-04-28T14:30:00+05:30", + "subscriber": { "id": "ravi@abdm" }, + "message": "Preauthorization approved for Rs. 50,000. Valid from 2026-04-28 to 2026-05-05. Reference: PA-2026-004567", + "domain_values": { + "x-hcx-correlation_id": "corr_20260428_12345", + "x-hcx-status": "response.complete", + "x-hcx-action": "preauth_response", + "x-hcx-amount_submitted": "75000.00" + } +} +``` + +**The `message` field is the point of the whole exchange.** It is written by +the exchange to be shown to a patient without parsing, and an app that ignores +it and renders its own sentence from `domain_values` is doing avoidable work +and will drift from what every other app shows. + +`domain_values` is where the named domain headers actually appear, and it is +the clearest evidence in the corpus that domain headers are a real mechanism +rather than a placeholder. Envelope Fields lists them. + +## Event types + +| Event | Status values | +| :---- | :---- | +| `preauth_request` | `queued`, `processing` | +| `preauth_response` | `approved`, `rejected` | +| `claim_request` | `queued`, `processing` | +| `claim_response` | `approved`, `rejected` | +| `payment_notice` | `paid`, `pending` | +| `communication` | `information_required` | + +Note that this vocabulary is not the workflow-code vocabulary and not the +status-word vocabulary. It is a third, simpler set, designed for display. + +## Errors + +| Code | Meaning | What to do | +| :---- | :---- | :---- | +| `401` | Token expired | Regenerate and retry | +| `403` | Not authorised | Check your registry entry and role | +| `409` | Subscription already exists | Should not occur under last-linked-wins | +| `500` | Gateway problem | Retry with backoff | + +## What the payer and provider do + +Nothing extra. The exchange generates notifications from the traffic that +already flows. A payer's ordinary responses feed them, and the payer's own +notifications carry workflow N01. + +For a hospital that also runs a patient app, the two are separate participants +with separate codes and separate certificates, even inside one organisation. + +## Security and privacy + +Four requirements from the integration document, none of them optional in +production. + +- Store the access token encrypted, refresh before expiry, and never log the + participant secret. +- Enforce HTTPS with TLS 1.2 or newer on the callback. +- Validate the JWT the exchange signs its call with, and check that + `sender_code` is the exchange. The public key problem described in Governance + and Audit applies here too. +- **Obtain explicit consent from the beneficiary before subscribing**, and show + the subscription state somewhere the beneficiary can find and change it. + +That last one is the substantive difference between this role and the others. +A hospital's participation is contracted; a patient app's is consented to, one +beneficiary at a time. + +## What this chapter cannot tell you + +The integration document is written against an older reading of the protocol +than the rest of the corpus. It gives `alg` as `RSA-OAEP` rather than +`RSA-OAEP-256`, and a token life of +6,000 seconds where other sources say 300 or 1,200. Follow the current +protocol as Envelope Fields and Session Token give it, and treat the document's +payload shapes as the part that is specific to notifications. + +No sample notification bundle exists in the corpus, and no participant is +recorded as having exercised this exchange. diff --git a/site/docs/nhcx/v1/reference/troubleshooting.md b/site/docs/nhcx/v1/reference/troubleshooting.md new file mode 100644 index 000000000..916c1bdb2 --- /dev/null +++ b/site/docs/nhcx/v1/reference/troubleshooting.md @@ -0,0 +1,151 @@ +--- +title: Troubleshooting +sidebar_label: Troubleshooting +sidebar_position: 12 +description: Five-layer fault isolation model and symptom-first diagnostic playbook +verification: unverified +source: nhcx-package/docs/06-Reference/02-Troubleshooting.md +generated: true +--- + +# Troubleshooting + +A symptom-first chapter. Everything else in this documentation is organised by +what you are building; this one is organised by what has gone wrong, because +that is the only thing you know at the moment you need it. + +## Isolate the layer first + +A message crosses five layers on its way to a decision, and each one refuses in +a different way. Work out which layer stopped it before you look anything up, +because the same symptom means different things at different layers. + +| Layer | What refuses | How you hear | Code family | +| :---- | :---- | :---- | :---- | +| 1. Transport | Your HTTP call to the gateway | Synchronously, in the response to your own call | HTTP `4xx`, `5xx` | +| 2. Gateway | The exchange, reading the envelope | Synchronously, or later on `/v1/error` | `NHCX-1xxx` | +| 3. Encryption | The recipient, opening the letter | On your callback, as a protocol response | `PAYR-1001`, `PAYR-1002`, `PAYR-1097` | +| 4. Bundle | The recipient, validating FHIR | On your callback, inside the sealed response | `PAYR-10xx` | +| 5. Adjudication | The payer's rules | On your callback, inside the sealed response | `PAYR-11xx` to `PAYR-14xx` | + +The layers are strictly ordered. Reaching a layer means every layer before it +passed, which is why a scheme-rule refusal is good news about your bundle. + +## The symptom table + +| What you see | Layer | Most likely cause | What to do | +| :---- | :---- | :---- | :---- | +| `401` on the sessions call | 1 | Wrong client ID or secret, or Milestone 1 incomplete | Check the credentials against onboarding | +| `401` naming a header on the sessions call | 1 | `REQUEST-ID` reused or absent, `TIMESTAMP` stale or malformed, `X-CM-ID` missing | Generate a fresh UUID per call; take the time from the system clock | +| `401 Sender is not authorized to execute the operation` | 1 | Token expired | Fetch a new token and retry once. Never retry with the same token | +| `401` immediately after a fresh token | 1 | `Bearer ` prefix missing, or the token sent on the wrong header name | Send `bearer_auth: Bearer `, and `Authorization` alongside it | +| `401` on policy link or de-link only | 1 | The client ID calling is not the one that created the participant | Run the linking job under the credentials that created the record | +| `400` on a use-case call | 2 | Envelope failed validation | Check every `x-hcx-` field against Envelope Fields | +| `NHCX-1005` invalid request header | 2 | A header missing, malformed or of the wrong type | As above | +| `NHCX-1006` duplicate request | 2 | A correlation ID reused, usually on a retry after a failure | Mint a fresh correlation ID. A failed correlation is retired | +| `NHCX-1011` invalid status | 2 | The status word does not match the leg of the message | Requests send `request.initiated`; responses send `response.partial`, `complete` or `error` | +| `NHCX-1018` invalid ABHA number | 2 | ABHA sent in the wrong shape | The gateway wants `XX-XXXX-XXXX-XXXX` on this field, though the bundle carries it without hyphens | +| `NHCX-1010` no data with given correlation id | 2 | You answered a request whose correlation the exchange had already retired | Acknowledge every submission immediately, then send the decision on the same thread | +| `NHCX-1002` or `NHCX-1003` not registered | 2 | Sender or recipient is not active on the exchange | Check the participant record's status. Only `Active` can send or receive | +| Nothing at all arrives on your callback | 2 | Address, firewall, routing, or no receipt sent | See the callback checklist below | +| `PAYR-1001` decryption failed | 3 | You encrypted with a certificate that is not the one on the recipient's record | Re-fetch the recipient's certificate and resend. Clear your cache | +| `PAYR-1002` encryption failed | 3 | The payer cannot encrypt for you: your registered certificate is stale or absent | Update your `encryption_cert` on your participant record | +| `PAYR-1097` no payload | 3 | The ciphertext part of the JWE is empty | Check you are serialising all five parts, compact | +| `PAYR-1005` time limit exceeded | 3 | `x-hcx-timestamp` is more than 24 hours behind the current time | Send the current time. This is the only numeric tolerance the sources state | +| `PAYR-1004` or `PAYR-1008` malformed or invalid bundle | 4 | The bundle does not parse or fails profile validation | Run it through the NRCeS validator before anything else | +| `PAYR-1009` to `PAYR-1016` no identifier or type found | 4 | A resource is missing its `identifier`, or an identifier is missing its `type` | Every resource that names a party needs both | +| `PAYR-1019` invalid sequence in supporting info | 4 | A `supportingInfo` entry has no `sequence` | Number the whole list once it is assembled, from 1, with no gaps | +| `PAYR-1027` invalid item id | 4 | `Claim.item` has no FHIR element `id`. Nothing to do with the package code | Give each item `Item/n`, each procedure `Procedure/n`, each supporting-info entry `SupportingInformation/n` | +| `PAYR-1028`, `PAYR-1029` | 4 | The same fault on the item sequence and the bundle id | As above | +| `PAYR-1083` no HPR details | 4 | The `Practitioner` carries no identifier typed `HPIN` | Send the HPR id as `HPIN` as well as `HPID` | +| `PAYR-1093`, `PAYR-1094` composition faults | 4 | An embedded clinical document does not follow the NRCeS profile | Check the `Encounter` structure definition | +| `PAYR-1095` invalid discharge information | 4 | A claim with no discharge status | Send category `DIS` with a code among `DTH`, `DTM`, `LAMA`, `DAMA` | +| `PAYR-1096` invalid death date | 4 | Discharge type is death and no death date was sent | Send category `ONS`, code `DTM` | +| `PAYR-1008` invalid content type | 4 | A document outside PDF, JPG, JPEG, PNG and FHIR JSON | Convert it. `text/plain` is refused | +| `PAYR-1114`, `PAYR-1202` invalid speciality code | 5 | `item.category` is not the master's category code for that package | Read the specialty off the plan, not off your own list | +| `PAYR-1238` active preauthorisation exists | 5 | The scheme allows one live preauthorisation per beneficiary per hospital | Cancel the existing one, or raise its claim. The reference number names it | +| `PAYR-1245` one conservative procedure | 5 | A second package typed `Conservative` on one case | An enhancement must add a `Medical` package or an allowed add-on | +| `PAYR-1256`, `PAYR-1363` consent questionnaire missing | 5 | No biometric token and no authentication-consent response | Answer the plan's questionnaire, found by title in the master | +| `PAYR-1301` claim already raised | 5 | One case, one claim | Nothing to resubmit. Use a Task | +| `PAYR-1302` no approved preauthorisation | 5 | The claim went out under a number of its own | Send the claim under the pre-authorisation's number | +| `PAYR-1321` | 5 | A claim query answered under the wrong workflow id | Answer on 161, not 151, 19 or 16 | +| `PAYR-1322` active instance found | 5 | Another request is already open on that case | The scheme takes one at a time. Wait | +| `PAYR-1401` policy not allowed for the hospital | 5 | The plan was asked for under a policy the hospital is not empanelled under | Ask under the beneficiary's own policy from the eligibility answer | +| `PAYR-1406` existing request in progress | 5 | A second plan request before the first was answered | Wait 15 to 60 minutes. Past 60, raise it with support | +| `ERR-PYR-CLM-007` no prior record for case number | 5 | As `PAYR-1302` | As above | + +## When nothing arrives on your callback + +The commonest report, and it is almost always one of six things. The portal +lists the first five; the sixth is the one people miss. + +1. **The address.** A domain name, not an IP address and not a port number. +2. **The location.** The server must be hosted in India. +3. **The firewall.** Allow the exchange's outbound addresses: `3.109.99.210`, + `13.126.152.0`, `13.200.129.223`. +4. **The rules.** Check nothing else is dropping the inbound connection. +5. **Application routing.** The request reaches the server and is dispatched to + the wrong handler by a mismatched route, a load balancer rule or a version + prefix. +6. **The receipt.** You answered, but not with `202` and the receipt body + within 30 seconds. A slow `200` is read as a failed delivery. After five + attempts the exchange gives up and retires the correlation ID, and tells you + on `/v1/error`, which you must also be hosting. + +Test the whole path rather than the parts. Call your own registered public +address from outside your network and confirm that what answers is the service +you think it is. + +## When a case has gone quiet + +In order, and stop at the first that explains it. + +1. **Did you get a receipt?** No receipt means the exchange never took the + message. It is not a payer problem. +2. **Did anything arrive on `/v1/error`?** That is where an undeliverable + request is reported. A system without the endpoint never learns. +3. **Ask the exchange.** The status exchange reports where a message got to. + Status and Search in Getting Started has the shape. +4. **Under PMJAY, ask the payer service.** A case sits at + `request.initiated` until someone acts on it in the scheme's own system. The + role lookup says where it is. PMJAY Adjudication APIs has it. +5. **Only then treat it as slow.** The scheme decides on its own schedule. An + enhancement approved in a minute on one run was still queued five minutes on + in another, with the same bundle. + +## Things that look like faults and are not + +- **A queued acknowledgement.** Both live payers answer twice on one + correlation: an interim response saying the request is with an adjudicator, + then the decision. Treat the first as an acknowledgement, not as the answer. +- **`outcome: complete` on a rejection.** `complete` means the payer finished + processing. The adjudication reason is what separates approval from + rejection. +- **A reduced amount without `partial`.** The reference payer approves at a + lower figure and still sends `complete` with no note. Reconcile amounts + yourself. +- **Zero benefit on a query.** It means no benefit has been determined yet, not + that the claim was refused. +- **A base rate of zero in the plan.** Some packages are priced entirely by the + bed category chosen. +- **`PAYR-1238` on a preauthorisation.** It arrives only after the bundle has + passed validation, so it is the first evidence the bundle is right. +- **A `SUBSETTED` meta tag.** Every payer-generated bundle carries it. It marks + a projection of the payer's record, not an error. + +## Before you raise it with support + +Have these to hand. Every one of them is something the exchange or the payer +will ask for, and a report without them cannot be traced. + +- The correlation ID, and the API call ID of the specific message. +- The timestamp, and which environment. +- Your participant code and the recipient's. +- The workflow code and the status word you sent. +- The raw sealed message as sent, and the raw response as received. Store both + before you interpret either; this is the only reason that instruction is + repeated throughout this documentation. +- The error code and the payer's message verbatim, not your rendering of it. + +Integration questions go to `hcx.integration@nha.gov.in`. FHIR profile and +validation questions go to `nrc-help@cdac.in`. diff --git a/site/docs/nhcx/v1/registries/README.md b/site/docs/nhcx/v1/registries/README.md deleted file mode 100644 index 1ee3f5972..000000000 --- a/site/docs/nhcx/v1/registries/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Registries - -One page per registry this gateway reads or writes (ABHA, HPR, HFR, ...). -A registry with sub-registries gets a folder with an `index.md` and one page -per child. - diff --git a/site/docs/nhcx/v1/registries/_category_.json b/site/docs/nhcx/v1/registries/_category_.json index a785955f0..84a171ee0 100644 --- a/site/docs/nhcx/v1/registries/_category_.json +++ b/site/docs/nhcx/v1/registries/_category_.json @@ -1,4 +1,4 @@ { "label": "Registries", - "position": 3 + "position": 4 } diff --git a/site/docs/nhcx/v1/registries/index.md b/site/docs/nhcx/v1/registries/index.md index cd0ba4326..b0ea2bc7f 100644 --- a/site/docs/nhcx/v1/registries/index.md +++ b/site/docs/nhcx/v1/registries/index.md @@ -1,48 +1,151 @@ --- -title: Registries -sidebar_label: Registries -description: The participant registry NHCX runs, the three identifiers a participant holds, and how ABDM's own registries appear on this gateway. +title: Participants and policies +sidebar_label: Participants and policies +sidebar_position: 3 +description: Registry records, identifiers, policy lookups verification: unverified -source: Onboarding providers and payers in Sandbox and in Production (NHA); Policy Linking and De-Linking Process; NHCX FAQs v1.2 -sidebar_position: 1 +source: nhcx-package/docs/01-Overview/03-Participants and Policies.md +generated: true --- -# Registries +# Participants and policies -NHCX has a registry of its own, and it is not a registry of people. The entry is a participant: -an organisation with a role, not a doctor and not a patient. +Nothing in the previous chapter can happen until two questions are answered: who am I sending this to, and which policy is it about. Neither is a claim exchange. Both are preconditions, and a system that skips them fails later with errors that look like claim problems but are not. -## In short +This chapter covers how a participant joins the network, how it makes itself reachable, how participants find and address each other, and how a policy is located and linked to a beneficiary. -- Every provider and payer onboards as a participant, in sandbox first and then in production. -- A participant holds three identifiers that do different jobs: a participant ID, client credentials, and a registry ID. -- The registry ID inside a FHIR bundle must equal the one on the sender's participant record. -- Claims go to the policy's processor, which is not always the insurer. +## Becoming a participant -## The participant registry +Every entity on the exchange is a registered participant with three identifiers that do different jobs. -NHCX sits in the middle and moves messages between registered participants. Onboarding, the three -identifiers, the callback address rules, and how a beneficiary is matched to a policy are all in -[Participants and policies](/docs/nhcx/v1/registries/participants-and-policies). +- **Participant ID.** The address on the exchange, written as `1518@hcx`. The part after the `@` names the exchange. This is what goes on the envelope as sender and recipient. +- **Client ID and secret.** The login used to get an access token. These are the same credentials a hospital already holds from its ABDM Milestone 1 integration. There is no separate NHCX login. +- **Registry ID.** Proof of who you are, issued by a registry the exchange trusts. For a hospital it is the Health Facility Registry (HFR) ID. For an insurer or TPA it is the IRDAI registry ID, sent without leading zeros, so 0123 becomes 123. For a patient app it is the app's own client ID. -The calls themselves are in [Get started](/docs/nhcx/v1/getting-started): creating the -[participant record](/docs/nhcx/v1/getting-started/participant-record), and -[finding participants and policies](/docs/nhcx/v1/getting-started/finding-participants-and-policies). +When a participant is created, its role and its registry are given as numbered codes. -## ABDM's three registries +| Role | Code | | Registry | Code | +| :---- | :---- | :---- | :---- | :---- | +| Provider | 10001 | | HFR | 10001 | +| Payer | 10002 | | NIN | 10002 | +| TPA | 10003 | | ROHINI | 10003 | +| Regulator | 10004 | | Payer registry | 10004 | +| Research | 10005 | | | | +| Insurance marketplace | 10006 | | | | +| Scheme sponsor | 10007 | | | | +| Another exchange | 10008 | | | | +| Patient app | 10009 | | | | -[ABHA](/docs/nhcx/v1/getting-started/glossary#abha) identifies a patient, the HPR a practitioner, -the HFR a facility. All three are ABDM wide, and a hospital on both gateways already holds the last -two from its [HIE-CM](/docs/nhcx/v1/getting-started/glossary#hie-cm) onboarding. +A hospital group with several facilities holds one participant ID per HFR ID, all created with the same credentials. -On NHCX the HFR ID is what a provider registers as its registry ID, and an insurer or TPA registers -its IRDAI registry ID instead, without leading zeros. A practitioner's HPR ID travels inside the -bundle, and the SHA HP sandbox looks the doctor up by the identifier typed `HPIN`. +Each role comes with a fixed list of what it may send and receive, and the exchange checks every call against it. Access Control and Roles in the Reference section has that list. -If you need the identifiers themselves, they are written up on HIE-CM: -[registries](/docs/hiecm/v3/registries) has all three. +**The registry ID must match at both layers.** The HFR ID sent inside a FHIR bundle has to be the same as the registry ID recorded against that sender on the exchange. A mismatch is rejected by the gateway, and it is a common failure for integrators who take the registry entry and the bundle content from different places. -## Next +## Registering -- [Participants and policies](/docs/nhcx/v1/registries/participants-and-policies) -- [Core concepts](/docs/nhcx/v1/concepts), what a claim is made of +Registration is a short sequence of calls to the participant service. Each is confirmed by a one-time passcode sent to the mobile number the registry holds, so nobody can register a hospital they do not control. + +1. **Create.** Send the registry type, registry ID, role, mobile number and email. The mobile number must be the one on the HFR record, or for a payer the one NHA holds. The exchange returns a participant ID and a transaction number, and sends a passcode to that phone. The participant now exists but is pending. +2. **Confirm.** Send the transaction number and passcode. The participant becomes active. +3. **Configure.** Send the participant's public certificate and the address the exchange should call back on, which the portal calls the bridge URL. A second passcode arrives. +4. **Confirm again.** The address and certificate go live. The exchange can now reach you. + +A participant record also carries a status the exchange maintains: created but not yet verified, active, inactive, or blocked. Only an active participant can send or receive. + +Passcodes and transaction numbers last 24 hours. Lose one and you repeat that step. A certificate can be replaced later without a passcode, through a dedicated certificate-update call. The sandbox offers a simpler create, update and delete without the passcode steps. + +## Your own key + +How Claims Move on NHCX said the letter is sealed with the receiver's key. That means every participant needs a key of its own and has to publish the public half. + +Make a 2048-bit RSA key, sign your own X.509 certificate with it (the portal gives the three openssl commands), encode the certificate in base64, and register it in the configure step above. The private half stays with you; it is what opens every letter addressed to you. NHA recommends replacing the key once a year and expects a participant to report a key that may have leaked. + +## Where the exchange calls you + +The callback address registered during configuration is where every answer arrives, so it comes with rules. + +- A domain name, not an IP address or a port number. +- HTTPS, with TLS 1.2 or newer. +- Hosted in India. +- Reachable from the exchange's outbound addresses, which must be allowed through your firewall: `3.109.99.210`, `13.126.152.0` and `13.200.129.223`. +- Answering within 30 seconds with an acceptance receipt, otherwise the exchange assumes delivery failed and tries again. + +The portal lists one further cause that is not about the address at all: application routing. The request reaches the server but is dispatched to the wrong handler by a mismatched route, a load balancer rule or an endpoint version. + +## Finding a participant + +A Provider does not hard-code the payers it deals with. It asks the registry. + +The participant list call takes a role, so a Provider asks for everyone registered as a Payer, and can narrow by date range and by whether the entity is government or private. The calling system then filters by name if the user is looking for a specific insurer. + +What matters downstream is the chosen payer's participant code, because it is one half of the address on every subsequent envelope. The other half, which is not always the same code, comes from the policy lookup below. + +## Authenticating + +Every call carries a bearer token. The token comes from the ABDM gateway's sessions endpoint, not from NHCX itself, using the Milestone 1 client ID and secret. + +Tokens are short-lived. The portal's documents disagree on exactly how short, with five minutes, twenty minutes and a hundred minutes all appearing. Build for the strictest: refresh automatically, and treat a `401` as "get a new token and retry" rather than as a failure. + +Sandbox addresses: + +- Sessions: `https://dev.abdm.gov.in/api/hiecm/gateway/v3/sessions` +- Participant service: `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` +- Use cases: `https://apisbx.abdm.gov.in/hcx/v1` + +The production participant service is at `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice`. The production use-case address is shared after sandbox exit. + +## Certificates and encryption + +Before sending anything to a participant, the sender needs that participant's public key. + +The certificate fetch takes a participant ID and returns its key material, as a PEM-encoded X.509 certificate or, for shorter keys, an SPKI public key. Try the X.509 import first and fall back to SPKI. + +**Cache certificates.** Fetching a payer's key before every request is a round trip that buys nothing, since keys change rarely. A 24-hour cache is the practical default. + +## Finding a policy + +Once the payer is known, the beneficiary has to be matched to a policy with that payer. The lookup accepts three identifiers, and a system that does not know which will work should try them in order of reliability. + +- **ABHA number.** The strongest, and the one to try first. +- **Member ID.** The policy or member number captured at admission. +- **Mobile number.** The weakest, since a number may be shared or out of date. + +What comes back, for each policy, is the insurer, who processes claims for it, the member ID, and the product. Two of those are participant codes and they are not always the same. + +**Send claims to the processor, not the insurer.** An insurer may handle its own claims, in which case its `payerid` and `processingid` are the same code. Or it may use a TPA, in which case `processingid` is the TPA's participant code and that is where every request must go. The policy lookup tells you which. Put `processingid` on the envelope as the recipient. Pointing at `payerid` instead is the portal's seventh most common mistake, and the request goes nowhere useful. + +A lookup that succeeds is worth keeping. The policy set for a patient does not change between one department and the next, so cache against the patient and provide a way to force a refresh. If the lookup returns no processor code, stop; no claim-side call can be addressed. + +## Linking a policy to ABHA + +The reason an ABHA number works as a policy identifier at all is that someone linked it earlier. + +Linking is a Payer-side action, performed when the policy is created. The insurer links the beneficiary's ABHA number, mobile and member ID to the policy's products, naming itself as the payer and its TPA, or itself, as the processor. Only the party named as payer or processor can de-link it later; the exchange checks the caller's credentials against the link. If an insurer changes TPA, every affected policy is de-linked and re-linked with the new processor. + +The effect is felt at the point of care. A beneficiary who walks in with only an ABHA number can be resolved to a policy without a card or a member ID, which is the whole point of linking it in the first place. + +## From sandbox to production + +Joining the network is a certification, not a form. The path for a hospital runs: + +1. **Register the facility** in the Health Facility Registry. +2. **Apply on the ABDM sandbox**, choosing Providers and Payers with Milestone 1 as the intent. This yields the client ID and secret. +3. **Complete Milestone 1**, which is ABHA creation and verification, then functional testing, the WASA security audit and the HTC demo. NHCX requires M1 to be in place first. +4. **Register on the NHCX sandbox** with the same credentials and create a participant for each facility. +5. **Integrate and test** against the sandbox, using the dummy payer described in NHCX Use Cases. +6. **Get certified.** Email sample FHIR bundles to `hcx.integration@nha.gov.in` for NRCeS validation, give an internal demo to the NHA team, then the HTC demo before NRCeS, IRDAI, TCS and NHA. +7. **Go to production.** NHA confirms, adds the provider role to the production client ID, and the participant is created there through the registration steps above. +8. **Pilot, train, go live.** NHA recommends a small pilot and staff training before switching fully. + +Payers follow the same shape but enrol through the NHA or IRDAI portal, which registers them after scrutiny and asks the ABDM gateway team to issue credentials with the payer or TPA role. + +A participant can also leave. Voluntarily, when a business shuts, merges or moves exchange. Involuntarily, when a regulator suspends it, when it repeatedly breaches service levels, or when it misuses the network. Involuntary removal comes with warnings and a right of appeal through the grievance process. + +## Why this comes first + +A patient is not cashless simply because they hold insurance. Two things have to be true: the admission record must carry the scheme, payer, identifier and policy number, and the system must have resolved a valid processor code, product code and member ID. A patient can look correctly admitted as insured on screen while every NHCX call still fails, because the second condition was never met. + +The order is fixed. Discover the payer, then discover the policy. Take the processor code, member ID and product from what came back, fetch the plan and its benefits, check eligibility, and only then submit a preauthorisation. + +JWE, Status and Errors opens the envelope every one of those calls travels in. NHCX Use Cases lists the calls themselves. diff --git a/site/docs/nhcx/v1/registries/participants-and-policies.md b/site/docs/nhcx/v1/registries/participants-and-policies.md deleted file mode 100644 index b16650331..000000000 --- a/site/docs/nhcx/v1/registries/participants-and-policies.md +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: Participants and policies -sidebar_label: Participants and policies -description: How a participant joins the network and is found on it, and how a beneficiary is matched to a policy and its processor. -verification: unverified -source: Onboarding providers and payers in Sandbox and in Production (NHA); Policy Linking and De-Linking Process; Authenticating with NHCX; Steps to generate encryption Certificate; Common Mistakes while implementing through NHCX; NHCX FAQs v1.2 (Aug 2026); NHCX Guide for Providers; Guidelines for Participant Onboarding page -sidebar_position: 2 ---- - -# Participants and policies - -Nothing in the previous chapter can happen until two questions are answered: who am I sending this to, and which policy is it about. Neither is a claim exchange. Both are preconditions, and a system that skips them fails later with errors that look like claim problems but are not. - -This chapter covers how a participant joins the network, how it makes itself reachable, how participants find and address each other, and how a policy is located and linked to a beneficiary. - -## In short - -- Two questions come before any claim exchange: who is this going to, and which policy is it about. -- A participant holds three identifiers: a participant ID, client credentials, and a registry ID. -- The registry ID inside a bundle must equal the one on the sender's participant record. -- The callback address must be a domain name over HTTPS, hosted in India, answering in 30 seconds. -- The order is fixed: payer, policy, processor code, plan, eligibility, then preauthorisation. - -## Becoming a participant - -Every entity on the exchange is a registered participant with three identifiers that do different jobs. - -- **Participant ID.** The address on the exchange, written as `1518@hcx`. The part after the `@` names the exchange. This is what goes on the envelope as sender and recipient. -- **Client ID and secret.** The login used to get an access token. These are the same credentials a hospital already holds from its ABDM Milestone 1 integration. There is no separate NHCX login. -- **Registry ID.** Proof of who you are, issued by a registry the exchange trusts. For a hospital it is the Health Facility Registry (HFR) ID. For an insurer or TPA it is the IRDAI registry ID, sent without leading zeros, so 0123 becomes 123. For a patient app it is the app's own client ID. - -When a participant is created, its role and its registry are given as numbered codes. - -| Role | Code | | Registry | Code | -| :---- | :---- | :---- | :---- | :---- | -| Provider | 10001 | | HFR | 10001 | -| Payer | 10002 | | NIN | 10002 | -| TPA | 10003 | | ROHINI | 10003 | -| Regulator | 10004 | | Payer registry | 10004 | -| Research | 10005 | | | | -| Insurance marketplace | 10006 | | | | -| Scheme sponsor | 10007 | | | | -| Another exchange | 10008 | | | | -| Patient app | 10009 | | | | - -A hospital group with several facilities holds one participant ID per HFR ID, all created with the same credentials. - -**The registry ID must match at both layers.** The HFR ID sent inside a FHIR bundle has to be the same as the registry ID recorded against that sender on the exchange. A mismatch is rejected by the gateway, and it is a common failure for integrators who take the registry entry and the bundle content from different places. - -## Registering - -Registration is a short sequence of calls to the participant service. Each is confirmed by a one-time passcode sent to the mobile number the registry holds, so nobody can register a hospital they do not control. - -1. **Create.** Send the registry type, registry ID, role, mobile number and email. The mobile number must be the one on the HFR record, or for a payer the one NHA holds. The exchange returns a participant ID and a transaction number, and sends a passcode to that phone. The participant now exists but is pending. -2. **Confirm.** Send the transaction number and passcode. The participant becomes active. -3. **Configure.** Send the participant's public certificate and the address the exchange should call back on, which the portal calls the bridge URL. A second passcode arrives. -4. **Confirm again.** The address and certificate go live. The exchange can now reach you. - -A participant record also carries a status the exchange maintains: created but not yet verified, active, inactive, or blocked. Only an active participant can send or receive. - -Passcodes and transaction numbers last 24 hours. Lose one and you repeat that step. A certificate can be replaced later without a passcode, through a dedicated certificate-update call. The sandbox offers a simpler create, update and delete without the passcode steps. - -## Your own key - -The previous chapter said the letter is sealed with the receiver's key. That means every participant needs a key of its own and has to publish the public half. - -Make a 2048-bit RSA key, sign your own X.509 certificate with it (the portal gives the three openssl commands), encode the certificate in base64, and register it in the configure step above. The private half stays with you; it is what opens every letter addressed to you. NHA recommends replacing the key once a year and expects a participant to report a key that may have leaked. - -## Where the exchange calls you - -The callback address registered during configuration is where every answer arrives, so it comes with rules. - -- A domain name, not an IP address or a port number. -- HTTPS, with TLS 1.2 or newer. -- Hosted in India. -- Reachable from the exchange's outbound addresses, which must be allowed through your firewall: `3.109.99.210`, `13.126.152.0` and `13.200.129.223`. -- Answering within 30 seconds with an acceptance receipt, otherwise the exchange assumes delivery failed and tries again. - -The portal lists one further cause that is not about the address at all: application routing. The request reaches the server but is dispatched to the wrong handler by a mismatched route, a load balancer rule or an endpoint version. - -## Finding a participant - -A Provider does not hard-code the payers it deals with. It asks the registry. - -The participant list call takes a role, so a Provider asks for everyone registered as a Payer, and can narrow by date range and by whether the entity is government or private. The calling system then filters by name if the user is looking for a specific insurer. - -What matters downstream is the chosen payer's participant code, because it is one half of the address on every subsequent envelope. The other half, which is not always the same code, comes from the policy lookup below. - -## Authenticating - -Every call carries a bearer token. The token comes from the ABDM gateway's sessions endpoint, not from NHCX itself, using the Milestone 1 client ID and secret. - -Tokens are short-lived. The portal's documents disagree on exactly how short, with five minutes, twenty minutes and a hundred minutes all appearing. Build for the strictest: refresh automatically, and treat a `401` as "get a new token and retry" rather than as a failure. - -Sandbox addresses: - -- Sessions: `https://dev.abdm.gov.in/api/hiecm/gateway/v3/sessions`, which supersedes the older `https://dev.abdm.gov.in/gateway/v0.5/sessions` still shown in earlier documents -- Participant service: `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` -- Use cases: `https://apisbx.abdm.gov.in/hcx/v1` - -The production participant service is at `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice`. The production use-case address is shared after sandbox exit. - -## Certificates and encryption - -Before sending anything to a participant, the sender needs that participant's public key. - -The certificate fetch takes a participant ID and returns its key material, as a PEM-encoded X.509 certificate or, for shorter keys, an SPKI public key. Try the X.509 import first and fall back to SPKI. - -**Cache certificates.** Fetching a payer's key before every request is a round trip that buys nothing, since keys change rarely. A 24-hour cache is the practical default. - -## Finding a policy - -Once the payer is known, the beneficiary has to be matched to a policy with that payer. The lookup accepts three identifiers, and a system that does not know which will work should try them in order of reliability. - -- **ABHA number.** The strongest, and the one to try first. -- **Member ID.** The policy or member number captured at admission. -- **Mobile number.** The weakest, since a number may be shared or out of date. - -What comes back, for each policy, is the insurer, who processes claims for it, the member ID, and the product. Two of those are participant codes and they are not always the same. - -**Send claims to the processor, not the insurer.** An insurer may handle its own claims, in which case its `payerid` and `processingid` are the same code. Or it may use a TPA, in which case `processingid` is the TPA's participant code and that is where every request must go. The policy lookup tells you which. Put `processingid` on the envelope as the recipient. Pointing at `payerid` instead is the portal's seventh most common mistake, and the request goes nowhere useful. - -A lookup that succeeds is worth keeping. The policy set for a patient does not change between one department and the next, so cache against the patient and provide a way to force a refresh. If the lookup returns no processor code, stop; no claim-side call can be addressed. - -## Linking a policy to ABHA - -The reason an ABHA number works as a policy identifier at all is that someone linked it earlier. - -Linking is a Payer-side action, performed when the policy is created. The insurer links the beneficiary's ABHA number, mobile and member ID to the policy's products, naming itself as the payer and its TPA, or itself, as the processor. Only the party named as payer or processor can de-link it later; the exchange checks the caller's credentials against the link. If an insurer changes TPA, every affected policy is de-linked and re-linked with the new processor. - -The effect is felt at the point of care. A beneficiary who walks in with only an ABHA number can be resolved to a policy without a card or a member ID, which is the whole point of linking it in the first place. - -## From sandbox to production - -Joining the network is a certification, not a form. The path for a hospital runs: - -1. **Register the facility** in the Health Facility Registry. -2. **Apply on the ABDM sandbox**, choosing Providers and Payers with Milestone 1 as the intent. This yields the client ID and secret. -3. **Complete Milestone 1**, which is ABHA creation and verification, then functional testing, the WASA security audit and the HTC demo. NHCX requires M1 to be in place first. -4. **Register on the NHCX sandbox** with the same credentials and create a participant for each facility. -5. **Integrate and test** against the sandbox, using the dummy payer described in the use cases chapter. -6. **Get certified.** Email sample FHIR bundles to `hcx.integration@nha.gov.in` for NRCeS validation, give an internal demo to the NHA team, then the HTC demo before NRCeS, IRDAI, TCS and NHA. -7. **Go to production.** NHA confirms, adds the provider role to the production client ID, and the participant is created there through the registration steps above. -8. **Pilot, train, go live.** NHA recommends a small pilot and staff training before switching fully. - -Payers follow the same shape but enrol through the NHA or IRDAI portal, which registers them after scrutiny and asks the ABDM gateway team to issue credentials with the payer or TPA role. - -A participant can also leave. Voluntarily, when a business shuts, merges or moves exchange. Involuntarily, when a regulator suspends it, when it repeatedly breaches service levels, or when it misuses the network. Involuntary removal comes with warnings and a right of appeal through the grievance process. - -## Why this comes first - -A patient is not cashless simply because they hold insurance. Two things have to be true: the admission record must carry the scheme, payer, identifier and policy number, and the system must have resolved a valid processor code, product code and member ID. A patient can look correctly admitted as insured on screen while every NHCX call still fails, because the second condition was never met. - -The order is fixed. Discover the payer, then discover the policy. Take the processor code, member ID and product from what came back, fetch the plan and its benefits, check eligibility, and only then submit a preauthorisation. - -The next chapter opens the envelope every one of those calls travels in. The chapter after it lists the calls themselves. diff --git a/site/docs/nhcx/v1/roles/_category_.json b/site/docs/nhcx/v1/roles/_category_.json new file mode 100644 index 000000000..5182cc2ff --- /dev/null +++ b/site/docs/nhcx/v1/roles/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Choose your path", + "position": 3 +} diff --git a/site/docs/nhcx/v1/roles/payer/_category_.json b/site/docs/nhcx/v1/roles/payer/_category_.json new file mode 100644 index 000000000..40d616491 --- /dev/null +++ b/site/docs/nhcx/v1/roles/payer/_category_.json @@ -0,0 +1,9 @@ +{ + "label": "Building a payer", + "position": 2, + "customProps": { + "roles": [ + "payer" + ] + } +} diff --git a/site/docs/nhcx/v1/building-a-payer/adjudicating-claims.md b/site/docs/nhcx/v1/roles/payer/adjudicating-claims.md similarity index 88% rename from site/docs/nhcx/v1/building-a-payer/adjudicating-claims.md rename to site/docs/nhcx/v1/roles/payer/adjudicating-claims.md index 1e5476e07..913c93ecf 100644 --- a/site/docs/nhcx/v1/building-a-payer/adjudicating-claims.md +++ b/site/docs/nhcx/v1/roles/payer/adjudicating-claims.md @@ -1,23 +1,20 @@ --- title: Adjudicating claims sidebar_label: Adjudicating claims -description: The claim queue against the approved preauthorisation, the denial codes, appeals, and answering a regulator's search. -verification: unverified -source: NHCX Integration Handbook §9, §10; Claim (NHA); NHCX-PMJAY-HMIS Integration Guide §4, §8.5; NHCX FAQs v1.2 §22, §23; Standard Error Codes, Claim; NHCX Requests and Responses, Reprocess and Search sheets, denial codes; access-control page sidebar_position: 5 +description: Adjudicating claims, deductions, dispute handling, and rejection bundles +verification: unverified +source: nhcx-package/docs/04-Building a Payer/05-Adjudicating Claims.md +generated: true +sidebar_custom_props: + roles: + - payer --- # Adjudicating claims The claim is where money is decided. The payer receives the finalised bill and the full document set, and checks them against the approved preauthorisation and the discharge evidence. It then issues a decision that, once final, cannot be reopened except through the appeal Task. -## In short - -- The claim is opened against the approved preauthorisation, with the difference highlighted. -- Two interim states are not decisions: in process, and forwarded. -- A rejection closes the claim number. Nothing further arrives against it except a Task. -- Appeals arrive as a Task on workflow 36 and are answered with a `ClaimResponse` inside it. - ## What the adjudicator sees The claim queue, opened against the approved preauthorisation, side by side: what was approved, what is now claimed, and the difference highlighted. The discharge type and stage, the dates, the discharge summary as a record, the bill, the post-operative evidence. The four evaluation dimensions the handbook names, as a checklist: within cover and limits, clinically appropriate, documents complete and consistent, amounts within package rates and financial rules. diff --git a/site/docs/nhcx/v1/building-a-payer/adjudicating-preauthorisation.md b/site/docs/nhcx/v1/roles/payer/adjudicating-preauthorisation.md similarity index 88% rename from site/docs/nhcx/v1/building-a-payer/adjudicating-preauthorisation.md rename to site/docs/nhcx/v1/roles/payer/adjudicating-preauthorisation.md index defeb2524..074d5ba96 100644 --- a/site/docs/nhcx/v1/building-a-payer/adjudicating-preauthorisation.md +++ b/site/docs/nhcx/v1/roles/payer/adjudicating-preauthorisation.md @@ -1,24 +1,20 @@ --- title: Adjudicating preauthorisation sidebar_label: Adjudicating preauthorisation -description: "The preauthorisation queue: what the adjudicator sees, what to validate on arrival, and how a decision becomes a ClaimResponse." -verification: unverified -source: NHCX Integration Handbook §8; Preauthorization (NHA); NHCX-PMJAY-HMIS Integration Guide §3, §8.4; Standard Error Codes, Preauth; NHCX Requests and Responses, adjudication and denial codes, form codes; NHCX Dummy Payer Implementation sidebar_position: 4 +description: Evaluating medical necessity, raising queries, approval, and rejection +verification: unverified +source: nhcx-package/docs/04-Building a Payer/04-Adjudicating Preauthorisation.md +generated: true +sidebar_custom_props: + roles: + - payer --- # Adjudicating preauthorisation The preauthorisation queue is where a payer's clinical judgement meets the exchange. The system's job is to get a case in front of the right doctor with everything they need, and to turn their decision into a `ClaimResponse`. It also enforces the sequencing rules that keep one case from becoming several. -## In short - -- Order the queue by turnaround time remaining, because TAT-based auto-approval pays for cases nobody reached. -- Acknowledge receipt at once with code 20 so the provider knows the case is queued. -- Validate on arrival and refuse with a protocol response rather than spending a doctor's time. -- Two plan rules let a case skip the queue. Log which one fired. -- Set `outcome` and the adjudication reason together: the provider reads them as a pair. - ## What the adjudicator sees A queue, ordered by turnaround-time remaining, because a scheme with TAT-based auto-approval pays for every case the doctor does not reach in time. Opening a case shows: diff --git a/site/docs/nhcx/v1/building-a-payer/eligibility-response.md b/site/docs/nhcx/v1/roles/payer/eligibility-response.md similarity index 83% rename from site/docs/nhcx/v1/building-a-payer/eligibility-response.md rename to site/docs/nhcx/v1/roles/payer/eligibility-response.md index 7f21d4464..48aa54e90 100644 --- a/site/docs/nhcx/v1/building-a-payer/eligibility-response.md +++ b/site/docs/nhcx/v1/roles/payer/eligibility-response.md @@ -1,23 +1,20 @@ --- title: Eligibility response sidebar_label: Eligibility response -description: "The one exchange to answer without a human: four purposes, four answers, and what to validate before looking at coverage." -verification: unverified -source: Coverage Eligibility (NHA); Insurance Plan Implementation Guide, CoverageEligibility; NHCX Integration Handbook §7; NHCX-PMJAY-HMIS Integration Guide §8.3; Standard Error Codes, Coverage and Payer; NHCX Payer Side Use Cases, Sandbox Exit Process sidebar_position: 3 +description: Constructing coverage eligibility answers across all 4 purposes +verification: unverified +source: nhcx-package/docs/04-Building a Payer/03-Eligibility Response.md +generated: true +sidebar_custom_props: + roles: + - payer --- # Eligibility response The eligibility check is the one exchange a payer should answer without a human. It is asked at every registration and before every submission, and a provider that waits on it is a front desk that waits. -## In short - -- The one exchange a payer should answer without a human. -- Four purposes, four answers: validation, discovery, benefits, and auth-requirements. -- Auth-requirements saves the most rework downstream, because it drives the provider's document checklist. -- Business refusals go inside the sealed response; protocol refusals go in the envelope. - ## What the system hosts ``` @@ -84,7 +81,7 @@ Business refusals, "not a covered member", "policy expired", "coverage insuffici ## The forward instruction -A payer that receives a request for a coverage it does not hold may answer with a forward instruction, asking the exchange to deliver the same request to another payer. Build it only if you will actually use it; most payers answer "not a covered member" instead. +The coverage eligibility specification gives it one sentence: a payer might respond with a forward instruction asking NHCX to submit the same request to another payer. No fields or flow are published for it, so there is nothing to build against. Until they are, a request for a coverage you do not hold is a business refusal inside the sealed response, as described above. Governance and Audit lists the question to ask at onboarding. ## What to log diff --git a/site/docs/nhcx/v1/building-a-payer/index.md b/site/docs/nhcx/v1/roles/payer/index.md similarity index 79% rename from site/docs/nhcx/v1/building-a-payer/index.md rename to site/docs/nhcx/v1/roles/payer/index.md index 643d7e252..d70b2fda1 100644 --- a/site/docs/nhcx/v1/building-a-payer/index.md +++ b/site/docs/nhcx/v1/roles/payer/index.md @@ -1,24 +1,22 @@ --- -title: Building a payer -sidebar_label: Building a payer -description: "The insurer, TPA or scheme side: the queues each role works, what the system hosts, and the rules every answer obeys." -verification: unverified -source: NHCX Payer Side Use Cases, Sandbox Exit Process; NHCX-PMJAY-HMIS Integration Guide §3, §4; Insurance Plan Implementation Guide, payer responsibilities; NHCX Dummy Payer Implementation; NHCX Integration Handbook §8 to §12 +title: Payer overview +sidebar_label: Payer overview sidebar_position: 1 +description: Insurer and TPA ingestion architecture +verification: unverified +source: nhcx-package/docs/04-Building a Payer/01-Payer Overview.md +generated: true +sidebar_custom_props: + roles: + - payer --- -# Building a payer +# Payer overview + A payer system is the insurer's, TPA's or scheme's side of the exchange. Where a provider mostly calls and waits, a payer mostly hosts and answers: it receives eligibility checks, plan requests, preauthorisations and claims, decides, and sends the decision back. It initiates only three things of its own: policy links, payment notices, and communications. This section assumes the base framework from Getting Started: token, participant record with the payer role, own key, and a callback endpoint that opens messages. A payer's "callback" endpoints are the `check`, `request` and `submit` sides that providers call. -## In short - -- Where a provider mostly calls and waits, a payer mostly hosts and answers. -- It initiates only three things of its own: policy links, payment notices, and communications. -- Four validations are checked on every response the payer sends, and the certification tests them. -- Keep the policy master, the versioned plan master, every case as a state machine, and every raw message. - ## What the payer's staff see Under PMJAY the decisions are taken by named roles: the Preauthorisation Processing Doctor at admission, the Claim Processing Doctor at settlement, the Claim Review Committee on appeal, and accounts on payment. A payer UI is a set of work queues for those roles. @@ -37,10 +35,6 @@ Under PMJAY the decisions are taken by named roles: the Preauthorisation Process ```mermaid flowchart LR - classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 - classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 E[Eligibility auto-answer] --> P[Preauth queue] P --> Q[Query composer] Q --> P @@ -49,7 +43,6 @@ flowchart LR C --> M[Payment run] C -. appeal .-> A[Appeals] A --> M - class E,P,Q,C,M,A payer ``` ## What the system hosts and calls @@ -84,9 +77,11 @@ The payer exit checklist states four validations on every response a payer sends 1. The payload validates against the NRCeS profiles. 2. `api_call_id` and `correlation_id` on the response are different values. -3. `correlation_id` on the response matches the request being answered. The checklist says the request's `api_call_id`; the protocol page says the request's `correlation_id`. Confirm which the gateway pairs on before the demo. +3. `correlation_id` on the response is the request's `correlation_id`, echoed. The checklist words it as the request's `api_call_id`, which is the same value, because a request sets its `correlation_id` to its own `api_call_id`. 4. `recipient_code` on the response equals the `sender_code` of the request. +The correlation rule is the same everywhere. On a request you initiate, such as a payment notice or a communication, set `correlation_id` to that message's own `api_call_id`. On a response, echo the request's `correlation_id` and give the response a fresh `api_call_id`. On a status enquiry, set `correlation_id` to the `api_call_id` of the message you are asking about. Envelope Fields has the full rule. + And the status word: `response.complete` for a final answer, `response.partial` for an interim one or a query, `response.error` with a protocol response when the request could not be opened or failed validation. The exit checklist names the type field on a good answer `JWEPayloadResponse`; the sandbox collection uses `JWEPayload`. Accept both when reading, and confirm which to send. ## Build it in this order @@ -114,4 +109,4 @@ Getting 4 right early pays for itself. Most of what a provider sends wrong, it s - Every raw message received and sent, with its correlation ID, because arbitration is settled on the record. - Adjudication detail per item: submitted, eligible, co-pay, benefit, and the reason, because that is what a `ClaimResponse` is made of. -The chapters that follow take each queue in turn, chapter 07 turns them into the screens each desk works from, and chapter 08 is the checklist you have to demonstrate to leave the sandbox. +The chapters that follow take each queue in turn, the payer UI Guide turns them into the screens each desk works from, and Payer Checklist is the checklist you have to demonstrate to leave the sandbox. diff --git a/site/docs/nhcx/v1/roles/payer/payer-checklist.md b/site/docs/nhcx/v1/roles/payer/payer-checklist.md new file mode 100644 index 000000000..188cca3df --- /dev/null +++ b/site/docs/nhcx/v1/roles/payer/payer-checklist.md @@ -0,0 +1,197 @@ +--- +title: Payer checklist +sidebar_label: Payer checklist +sidebar_position: 8 +description: Payer sandbox exit list, the four validations, 26 test cases by family (T-ELG, T-PLN, T-PRE, T-CLM, T-TSK, T-PAY, T-COM, T-ENV) +verification: unverified +source: nhcx-package/docs/04-Building a Payer/08-Payer Checklist.md +generated: true +sidebar_custom_props: + roles: + - payer +--- + +# Payer checklist + +What a payer has to demonstrate to leave the sandbox, the validations the certification checks on every response, the test cases to run, and how to test without a real provider. + +## The sandbox exit list + +NHA's payer exit process names fifteen use cases. + +1. Link ABHA with policy, `/participant/link/abha/policy`. +2. Get policy, `/participant/get/policies`. +3. De-link ABHA from policy, `/participant/delink/abha/policy`. +4. Get participant list, `/fetch/participants/list`. +5. Get public key, `/fetch/certs`. +6. Get auth token, `/get/session`. +7. Respond to coverage eligibility, received on `/v1/coverageeligibility/check`, answered on `/v1/coverageeligibility/on_check`. +8. Respond to insurance plan request, received on `/v1/insuranceplan/request`, answered on `/v1/insuranceplan/on_request`. +9. Respond to preauthorisation, received on `/v1/preauth/submit`, answered on `/v1/preauth/on_submit`. +10. Raise a communication request, `/v1/communication/request`, acknowledged on `/v1/communication/on_request`. +11. Respond to claim, received on `/v1/claim/submit`, answered on `/v1/claim/on_submit`. +12. Respond to search, received on `/v1/search/submit`, answered on `/v1/search/on_submit`. +13. Send payment notice, `/v1/paymentnotice/request`, acknowledged on `/v1/paymentnotice/on_request`. +14. Respond to a task, received on `/v1/task/submit`, answered on `/v1/task/on_submit`. +15. Get status, `/v1/status`, answered on `/v1/on_status`. + +Plus `/v1/error` and, where the payer is a scheme, the biometric token validation. + +## The four validations on every response + +The checklist repeats them for every answering use case, so the certification will check them on every one: + +1. Payload validates against the NRCeS profiles. +2. `api_call_id` and `correlation_id` are different values. +3. `correlation_id` matches the request being answered. +4. `recipient_code` equals the request's `sender_code`. + +And each answer is prepared one of two ways: a sealed bundle when the request was processed, or a protocol response when it could not be opened or failed validation. + +## Testing without a provider + +There is no dummy provider on the sandbox. The practical route is to build the provider's calling half from Getting Started and the provider section, point it at your own participant code, and drive your queues from it. The sample bundles on the portal give you real PMJAY-shaped requests to feed in: every eligibility purpose, a preauthorisation and its query answer, an enhancement, a cancellation, a claim and its query answer. + +## Test cases + +One id per case, by family: `ELG` coverage eligibility, `PLN` insurance plan, `PRE` preauthorisation, `CLM` claim, `TSK` tasks, `PAY` payment, `COM` communication, `ENV` envelope and queue. Cases marked PMJAY apply to the scheme only. The workflow codes named are the ones the payer's answer must carry. + +### Coverage eligibility + +#### T-ELG-01 Validate the policy + +A request by ABHA with purpose `validation`. Answer on `/v1/coverageeligibility/on_check` with `inforce: true` and the wallet balance, after checking the ABHA linkage and that the member is active. + +#### T-ELG-02 Auth-requirements + +Purpose `auth-requirements` for a package. Answer with `authorizationRequired: true` and the mandatory documents and STG codes, after checking wallet adequacy and the specialty constraints. + +#### T-ELG-03 Every purpose and the refusals + +`discovery` and `benefits` answered; an exhausted family wallet and a hospital not authorised for the policy refused inside the sealed response, not in the envelope. + +### Insurance plan + +#### T-PLN-01 Publish the plan + +Answer on `/v1/insuranceplan/on_request` with the collection bundle: empanelled packages, claim-condition flags, STG questionnaires and the rate master, carrying a version. + +### Preauthorisation + +#### T-PRE-01 Acknowledge, then approve + +Acknowledge on `20` as `response.partial`, then approve on `21` as `response.complete` with `preAuthRef`, after STG validation and biometric token verification. + +#### T-PRE-02 Query and its answer + +Raise the query on `24`, on the case thread under PMJAY or over communication otherwise. Take the answer on `19`, clear the hold, then decide on `21`. + +#### T-PRE-03 Reject with a denial code + +Decide on `23` with the denial reason inside the `ClaimResponse`. + +#### T-PRE-04 Reduce with a note + +Approve on `21` for less than asked, with the adjudication note that says why. + +#### T-PRE-05 Auto-approval and TAT approval (PMJAY) + +A first preauthorisation whose packages all carry `ApprovalNotRequired` is approved without a desk action. A package flagged `ScheduledTATApproval` is approved by the system when the window lapses, with the disposition "Auto approved by system". + +#### T-PRE-06 Enhancement approved and denied + +Approve on `22`; deny on `231`; query on `241`. + +#### T-PRE-07 Resubmission and cancellation + +A resubmission on `121` treated as the new base request. A cancel Task on `PC01` answered `PC02` before payment, and refused after payment has been initiated. + +### Claim + +#### T-CLM-01 Acknowledge, then approve + +Acknowledge on `25`, then approve on `26`, after verifying the discharge biometric token, matching the preauthorisation, and calculating incentives and tax. + +#### T-CLM-02 Query and its answer + +Raise the query on `27`; take the answer on `151`, or `161` under PMJAY; then decide on `26` or `291`. + +#### T-CLM-03 Reduce, in process, forward, reject + +`26` for less than claimed with the deduction reason per item; `28` in process; `29` forwarded; `291` rejected. + +#### T-CLM-04 Every discharge type (PMJAY) + +`DTH`, `DTM`, `LAMA` and `DAMA` each priced as the scheme rules say, with `LM100` per day for LAMA or DAMA before surgery. + +#### T-CLM-05 Unusual cases (PMJAY) + +An unspecified procedure; a cyclic procedure with per-visit biometrics; a newborn on the parent's card; twins; implants within their maximums. + +### Tasks + +#### T-TSK-01 Reprocess + +A reprocess Task on `36` acknowledged on `37` with the Task `accepted`, then re-adjudicated on `252` or `253`, the `ClaimResponse` in the Task's output. + +#### T-TSK-02 Shortfall + +A `partialpayment` Task accepted after payment notice `33` has been acknowledged, and refused before it. + +#### T-TSK-03 The Committee's answer + +The Claim Review Committee's decision returned inside a Task, not as a bare `ClaimResponse`. + +### Payment + +#### T-PAY-01 Three notices + +`30`, `31` and `33` in turn, with the UTR and the TDS line on `33`, and the provider's acknowledgement recorded. Net plus deductions equals the approved amount. + +#### T-PAY-02 Return payment + +`RP1` intimation, `RP2` acknowledged, `RP3` failed. + +### Communication + +#### T-COM-01 Each reason + +`additionalinfo`, `tatquery`, `grievance`, `walletupdate`, `policychange` and `claimArbitration`, each acknowledged by the provider within thirty seconds; `tatquery` sent when a preauthorisation or claim has passed the payer's own turnaround threshold. + +### Envelope and queue + +#### T-ENV-01 Duplicate request on one correlation id + +The second delivery is recognised and not processed twice. + +#### T-ENV-02 A request while another is in progress + +Refused, with `PAYR-1322` under PMJAY, until the first is decided. + +#### T-ENV-03 A malformed bundle + +Answered with a protocol response, not a sealed bundle. + +#### T-ENV-04 Queue ordered by time remaining + +Preauthorisation and claim queues indexed by `received_at` plus the turnaround window, so the case with the least time left comes first and the breach alert fires before the window lapses. No window values are published. The plan's `ScheduledTATApproval` flag says only that the system approves the case after "a specified time period (varies with policy)", and the FAQ's answer on reprocess is "No fixed TAT as of now". Agree the windows at onboarding; Governance and Audit lists the question. + +## Where payers go wrong + +- Answering with `outcome = complete` and no adjudication reason, so the provider cannot tell approval from rejection. +- Reusing the request's `api_call_id` as the response's. +- Sending business refusals in the envelope, where the exchange logs them, instead of inside the sealed response. +- Rates changed in the plan master without a version bump, so every provider's next claim looks tampered. +- Sending `33` before the bank has confirmed, which opens the shortfall window early. +- TAT auto-approval firing because the queue was not ordered by time remaining. + +## Exchanges this documentation does not cover + +The workflow families that no NHA document describes beyond their codes are listed once, under the same heading in Provider Checklist. A payer may receive one too; log it and escalate rather than ignore it. + +## Before going live + +- Enrolment through the NHA or IRDAI portal with the payer or TPA role, the IRDAI registry id without leading zeros, and the production certificate and callback address. +- Every policy linked with the correct processor. +- The plan master versioned and published for every empanelled hospital. +- FHIR bundles validated by NRCeS; internal demo; HTC demo. diff --git a/site/docs/nhcx/v1/building-a-payer/payment-notice-and-communication.md b/site/docs/nhcx/v1/roles/payer/payment-notice-and-communication.md similarity index 68% rename from site/docs/nhcx/v1/building-a-payer/payment-notice-and-communication.md rename to site/docs/nhcx/v1/roles/payer/payment-notice-and-communication.md index c6be38030..def365d79 100644 --- a/site/docs/nhcx/v1/building-a-payer/payment-notice-and-communication.md +++ b/site/docs/nhcx/v1/roles/payer/payment-notice-and-communication.md @@ -1,23 +1,20 @@ --- title: Payment notice and communication sidebar_label: Payment notice and communication -description: "The two exchanges a payer starts: three payment notices as money moves, and the communication channel with its six reasons." -verification: unverified -source: NHCX Integration Handbook §11, §12; Payment (NHA); NHCX Payer Side Use Cases, Sandbox Exit Process; NHCX Notification Integration; NHCX Requests and Responses, payment type and task output values; Workflow Status Sheets sidebar_position: 6 +description: Dispatching payment notices and operational intimations +verification: unverified +source: nhcx-package/docs/04-Building a Payer/06-Payment Notice and Communication.md +generated: true +sidebar_custom_props: + roles: + - payer --- # Payment notice and communication The two exchanges a payer starts. Payment tells the provider money has moved; communication tells the provider something has changed or is wanted. -## In short - -- Payment tells the provider money has moved; communication tells it something has changed or is wanted. -- Three notices per claim as the money moves, each with its own correlation ID. Send 33 only on bank confirmation. -- The provider will check that net plus deductions equals the approved amount. -- The acknowledgement confirms receipt, not agreement. - ## Payment notices ### What accounts do @@ -37,11 +34,17 @@ Three notices per claim as the money moves: 30 initiated, 31 processed by the ba A collection bundle: a `Task` with code `deliver` and an input referencing the notice, a `PaymentNotice`, a `PaymentReconciliation`, and the two `Organization`s. -| Resource | Key elements | -| :---- | :---- | -| `Task` | `status = requested`, `intent = order`, `code = deliver`, `requester` the payer, `owner` the provider, `input[0].valueReference` the PaymentNotice | -| `PaymentNotice` | Claim number as identifier of type `CLN`, `recipient` the provider, `amount` the net, `paymentStatus` `paid` or `cleared`, `payment` referencing the reconciliation | -| `PaymentReconciliation` | Same claim number, `paymentDate`, `paymentAmount` net, `paymentIdentifier` of type `UTR` carrying the bank reference, `detail[]` with one line per money type: `TDS`, `Payment`, and any of `approvedamount`, `claimedamount`, `servicetax`, `advance`, `recovered`, `penality` | +#### Task + +`status = requested`, `intent = order`, `code = deliver`. `requester` is the payer, `owner` the provider, and `input[0].valueReference` points at the PaymentNotice. + +#### PaymentNotice + +The claim number as an identifier of type `CLN`, `recipient` the provider, `amount` the net, `paymentStatus` `paid` or `cleared`, and `payment` referencing the reconciliation. + +#### PaymentReconciliation + +The same claim number, `paymentDate`, `paymentAmount` as the net, a `paymentIdentifier` of type `UTR` carrying the bank reference, and `detail[]` with one line per money type: `TDS`, `Payment`, and any of `approvedamount`, `claimedamount`, `servicetax`, `advance`, `recovered`, `penality`. The provider will check that net plus deductions equals the approved amount. Make it so. @@ -70,11 +73,19 @@ On the general network, `additionalinfo` is how a payer asks for documents outsi ### What goes in the bundle -A collection bundle of three parts: +A collection bundle of three parts. + +#### Task + +Code `poll`, `intent = proposal`, `reasonCode` set, and an input of type `include` referencing the Communication. + +#### Communication + +The case number as identifier, `status = completed`, a `category` (reminder, notification, instruction, questionnaire), a `priority` (routine, urgent, asap, stat), a `topic` (progress-update for anything about a live case), and the payload. + +#### The two Organizations -- A `Task` with code `poll`, `intent = proposal`, `reasonCode` set, and an input of type `include` referencing a `Communication`. -- The `Communication`, with the case number as identifier, `status = completed`, a `category` (reminder, notification, instruction, questionnaire), a `priority` (routine, urgent, asap, stat), a `topic` (progress-update for anything about a live case), and the payload. -- The two `Organization`s, payer first. +Payer first, then the provider. The acknowledgement comes back as the same shape with the provider `Organization` first and the same correlation ID. It means received, not resolved; track resolution in the case, not in the exchange. diff --git a/site/docs/nhcx/v1/building-a-payer/policies-and-plans.md b/site/docs/nhcx/v1/roles/payer/policies-and-plans.md similarity index 83% rename from site/docs/nhcx/v1/building-a-payer/policies-and-plans.md rename to site/docs/nhcx/v1/roles/payer/policies-and-plans.md index f325412bf..4d1b631f1 100644 --- a/site/docs/nhcx/v1/building-a-payer/policies-and-plans.md +++ b/site/docs/nhcx/v1/roles/payer/policies-and-plans.md @@ -1,24 +1,20 @@ --- title: Policies and plans sidebar_label: Policies and plans -description: Linking beneficiaries to policies so providers can find them, and publishing the plan that drives every provider screen. -verification: unverified -source: Policy Linking and De-Linking Process; Insurance Plan Implementation Guide; NHCX Integration Handbook §6; Standard Error Codes, Insurance Plan; NHCX Payer Side Use Cases, Sandbox Exit Process sidebar_position: 2 +description: Publishing policy master and 21 MB plan bundles +verification: unverified +source: nhcx-package/docs/04-Building a Payer/02-Policies and Plans.md +generated: true +sidebar_custom_props: + roles: + - payer --- # Policies and plans Before a payer can answer a single claim question, two things have to be true on the network: the beneficiary has to be findable, and the policy has to be readable as data. The first is linking. The second is the insurance plan. -## In short - -- Two things must be true before a payer can answer a claim question: the beneficiary is findable, and the policy is readable as data. -- The processor is the decision that matters. Get it wrong and every provider sends the case to the wrong place. -- A change of TPA is a batch de-link and re-link. There is no edit call. -- The plan response is scoped to the requesting provider, which is a validation as much as a filter. -- Every plan change bumps a version, and a `policychange` communication tells providers to refresh. - ## Linking beneficiaries ### What the user does diff --git a/site/docs/nhcx/v1/building-a-payer/ui-guide.md b/site/docs/nhcx/v1/roles/payer/ui-guide.md similarity index 93% rename from site/docs/nhcx/v1/building-a-payer/ui-guide.md rename to site/docs/nhcx/v1/roles/payer/ui-guide.md index e3247eac4..e352ab8f8 100644 --- a/site/docs/nhcx/v1/building-a-payer/ui-guide.md +++ b/site/docs/nhcx/v1/roles/payer/ui-guide.md @@ -1,10 +1,14 @@ --- title: Payer UI guide sidebar_label: Payer UI guide -description: "The payer screens queue by queue: who works each one, what they decide, and how that decision becomes a message." -verification: unverified -source: NHCX-PMJAY-HMIS Integration Guide §3, §4, roles and adjudication process; NHCX Integration Handbook §6.6, §8, §9, §10, §11, §12; NHCX Payer Side Use Cases, Sandbox Exit Process; Insurance Plan Implementation Guide, payer responsibilities; Standard Error Codes sidebar_position: 7 +description: Payer adjudication desk screens and workflow +verification: unverified +source: nhcx-package/docs/04-Building a Payer/07-UI Guide.md +generated: true +sidebar_custom_props: + roles: + - payer --- # Payer UI guide @@ -17,14 +21,6 @@ Two rules run through every screen. **The payer never types what the provider sent.** Amounts submitted, items, documents, dates and biometric evidence are shown as received and are not editable. What the payer adds is the decision, the eligible and approved amounts, the reason, and the note. -## In short - -- A payer system is operated from queues: cases arrive, wait for a person or a rule, and leave with a decision. -- A decision is not made until it is sent, and the screen shows the difference. -- The payer never types what the provider sent. What it adds is the decision, the amounts, the reason and the note. -- Ten flows, from policy admin through to the case audit trail. -- The audit trail is the screen arbitration is settled on. - ## Who works which queue ```mermaid diff --git a/site/docs/nhcx/v1/roles/provider/_category_.json b/site/docs/nhcx/v1/roles/provider/_category_.json new file mode 100644 index 000000000..a89fcb749 --- /dev/null +++ b/site/docs/nhcx/v1/roles/provider/_category_.json @@ -0,0 +1,9 @@ +{ + "label": "Building a provider", + "position": 1, + "customProps": { + "roles": [ + "provider" + ] + } +} diff --git a/site/docs/nhcx/v1/roles/provider/biometric-authentication.md b/site/docs/nhcx/v1/roles/provider/biometric-authentication.md new file mode 100644 index 000000000..6040e7953 --- /dev/null +++ b/site/docs/nhcx/v1/roles/provider/biometric-authentication.md @@ -0,0 +1,383 @@ +--- +title: Biometric authentication +sidebar_label: Biometric authentication +sidebar_position: 3 +description: "ABDM biometric pipeline: Fingerprint, Iris, FaceAuth, and exemption consent" +verification: unverified +source: nhcx-package/docs/03-Building a Provider/03-Biometric Authentication.md +generated: true +sidebar_custom_props: + roles: + - provider +--- + +# Biometric authentication + +PMJAY requires proof that the beneficiary was physically present. A hospital +proves it by authenticating them against their ABHA, biometrically, at +registration, during treatment and at discharge. What comes back is a user +token, and that token rides on the eligibility check, the preauthorisation and +the claim. A request without it, and without the consent form that stands in +for it, is refused by name. + +These are not NHCX APIs. They belong to ABDM and were built for the PMJAY +payer, so nothing in Getting Started applies to them: different hosts, a +different authorisation header, no JWE, no callbacks. PMJAY Provider covers +when to authenticate and what the scheme does with the result. This chapter is +the calls. + +## What you have to build + +All three methods. Fingerprint, iris and face are each mandatory to implement, +because any one of them may be the only one that works for a given patient, and +a case authenticated by fingerprint at admission can be authenticated by face +at discharge. The methods do not have to match across a case. + +```mermaid +flowchart TD + A[Patient at the desk] --> B{Method} + B -- fingerprint or iris --> C["auth/init, then auth/verify
one host"] + B -- face --> D["faceauth/init, QR, capture/pid,
v2/auth/verify, a different host"] + B -- none possible --> E["Aadhaar exemption consent
plus the plan's questionnaire"] + C --> F[User token, 30 minutes] + D --> F + F --> G[Token on the header of eligibility, preauth, claim] +``` + +## Two hosts, and this is the first thing to get right + +| Method | Base | +| :---- | :---- | +| Fingerprint, iris, token refresh | `https://apisbx.abdm.gov.in/hcx/abha/biometric/` | +| Face | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/abdmproxy/abha/biometric/` | + +A client written against one base path will fail on the other, and the failure +looks like a routing problem rather than a configuration one. + +## Headers + +Every call carries the ABDM session token on `Authorization`. The other +headers depend on the call. + +| Call | Headers besides `Authorization` | +| :---- | :---- | +| `auth/init`, `auth/verify` | `process`, `payerid`, `Content-Type: application/json`, `Accept: */*` | +| `auth/refresh/token` | `process`, `payerid`, `R-token: Bearer ` | +| `faceauth/init`, `capture/pid` | `REQUEST-ID`, `TIMESTAMP`, `Content-Type: application/json`, `Accept: application/json` | +| `v2/auth/verify` | The same four, plus `process` and `payerid` | + +No source puts `process` or `payerid` on `faceauth/init` or `capture/pid`. The +face rows follow Biometric Authentication Implementation Steps. The FaceAuth +Postman collection sends less: `Authorization` alone on `faceauth/init`, and +no `REQUEST-ID` or `TIMESTAMP` on any face call. + +Three points that cost time. + +**`Authorization`, not `bearer_auth`.** The exchange's own endpoints in this +documentation read the token from `bearer_auth`. These read it from +`Authorization`. Sending only the habitual header gets a `401` that looks like +an expired token. + +**`process` is a header, and it is the scheme's process type.** `Preauth` at +admission, `Discharge` at discharge and, on a cyclic case, at every visit. The +rules elsewhere in this documentation say "process type Discharge" without +saying it is an HTTP header. This is it. + +**`payerid` names the payer** the authentication is being performed for. + +## Fingerprint and iris + +A two-call pair. Initiate, capture on the device, verify. + +### Initiate + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/abha/biometric/auth/init' \ + --header 'Accept: */*' \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ' \ + --header 'process: Preauth' \ + --header 'payerid: ' \ + --data-raw '{ + "scope": [ + "abha-login", + "aadhaar-bio-verify" + ], + "loginHint": "abha-number", + "loginId": "91-XXXX-XXXX-1234", + "otpSystem": "aadhaar", + "authMode": "FINGERPRINT" + }' +``` + +[Biometric auth init in the API reference](/docs/nhcx/v1/api/biometric/endpoints/biometric-auth-init) + +| Field | Fingerprint | Iris | Face | +| :---- | :---- | :---- | :---- | +| `scope` | `["abha-login", "aadhaar-bio-verify"]` | `["abha-login", "aadhaar-iris-verify"]` | `["abha-login", "aadhaar-face-verify"]` | +| `authMode` | `FINGERPRINT` | `IRIS` | `FACE_AUTH` | +| `authMethods`, on verify | `bio` | `iris` | `face` | +| Capture, under `authData` on verify | `bio.fingerPrintAuthPid` | `iris.irisAuthPid` | `face.faceAuthPid` | + +The face column is on this host, not the proxy. The NHCX-PMJAY-HMIS +Integration Guide and the Biometric Authentication APIs Postman collection list +it beside fingerprint and iris, as alternatives in comments on the fingerprint +sample. Neither shows a face request made this way or says where its capture +comes from. Biometric Authentication Implementation Steps takes face through +the separate flow on the proxy host, below, which is the only face path +documented end to end. No published source says when to use one rather than +the other; confirm with NHA before building on this one. + +`loginId` is the ABHA number **with** hyphens here, which is the opposite of +the envelope convention. + +The response carries the transaction ID the verify call quotes: + +```json +{ + "txnId": "8c8a12e3-xxxx-4278-xxxx-10acffa44f07", + "authMode": null, + "message": "FingerPrint authentication request successfully sent.", + "status": null +} +``` + +### Verify + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/abha/biometric/auth/verify' \ + --header 'Accept: */*' \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ' \ + --header 'process: Preauth' \ + --header 'payerid: ' \ + --data-raw '{ + "scope": [ + "abha-login", + "aadhaar-bio-verify" + ], + "authData": { + "authMethods": [ + "bio" + ], + "bio": { + "txnId": "", + "fingerPrintAuthPid": "" + } + }, + "authMode": "FINGERPRINT" + }' +``` + +[Biometric auth verify in the API reference](/docs/nhcx/v1/api/biometric/endpoints/biometric-auth-verify) + +`authMethods` and the key the capture goes under follow the method, as the +table above gives them. + +On success: + +```json +{ + "txnId": "d21b3db9-478a-xxxx-xxxx-8f75e7f86b9f", + "authResult": "success", + "message": "… verified successfully", + "token": "eyZhx….", + "refreshToken": "eyZhx….", + "expiresIn": 1800, + "refreshExpiresIn": 1296000, + "accounts": [ { "ABHANumber": "91-XXXX-XXXX-1234", "name": "…", "status": "ACTIVE", "…": "…" } ] +} +``` + +### The WADH, and error K-547 + +The device capture needs a wrapped Aadhaar data hash, and the portal records +one wrong value as the cause of a specific error. If the biometric APIs return +**K-547**, the `lr` parameter was sent as `N` and must be `Y`. + +``` +ra = deviceType // 'F' for fingerprint +rc = 'Y' +lr = 'Y' // the one that is usually wrong +de = 'N' +pfr = 'N' + +text = '2.5' + ra + rc + lr + de + pfr +wadh = Base64(SHA-256(text)) +``` + +This is the only device-level detail the published material gives, and it is +the one failure an integrator cannot reason their way out of. + +## Face authentication + +A four-step flow on the other host, because the capture happens on the +patient's own phone rather than on a hospital device. + +**1. Initiate.** + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/abdmproxy/abha/biometric/faceauth/init' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ' \ + --header 'REQUEST-ID: ' \ + --header 'TIMESTAMP: ' \ + --data-raw '{ + "scope": [ + "abha-enrol", + "face-auth" + ] + }' +``` + +[Face auth init in the API reference](/docs/nhcx/v1/api/biometric/endpoints/biometric-faceauth-init) + +Returns a `txnId`. + +**2. Show a QR code.** Render +`https://phrsbx.abdm.gov.in/face-auth?txnId=` as a QR code. The patient +scans it with the ABHA app and completes the face scan there. + +**3. Poll for the capture.** + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/abdmproxy/abha/biometric/capture/pid' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ' \ + --header 'REQUEST-ID: ' \ + --header 'TIMESTAMP: ' \ + --data-raw '{ + "txnId": "" + }' +``` + +[Face auth capture PID in the API reference](/docs/nhcx/v1/api/biometric/endpoints/biometric-faceauth-capture-pid) + +Answers `{"status": "PENDING", "message": "Awaiting PID capture"}` until the +patient finishes, then `{"status": "COMPLETE", "message": "PID capture successful"}`. +Poll this; there is no callback. + +**4. Verify with the encrypted Aadhaar number.** + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/abdmproxy/abha/biometric/v2/auth/verify' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ' \ + --header 'REQUEST-ID: ' \ + --header 'TIMESTAMP: ' \ + --header 'payerid: ' \ + --header 'process: Preauth' \ + --data-raw '{ + "authData": { + "authMethods": [ + "face_auth" + ], + "face": { + "txnId": "", + "aadhaar": "", + "mobile": "" + } + }, + "authMode": "FACE_AUTH" + }' +``` + +[Face auth verify in the API reference](/docs/nhcx/v1/api/biometric/endpoints/biometric-faceauth-v2-auth-verify) + +**The Aadhaar number is encrypted, not sent in the clear.** Use the X.509 +public key the portal publishes with the transformation +`RSA/ECB/OAEPWithSHA-1AndMGF1Padding`. The ciphertext is roughly 680 base64 +characters for a 4096-bit key. Never log it, never store it, and never attempt +to validate it as a twelve-digit number. + +The response carries the same token pair plus a full ABHA profile: name, date +of birth, gender, photo, address, state and district. Take from it only what +your record needs. + +## The tokens + +| Token | Life | Header it is sent on later | +| :---- | :---- | :---- | +| User token | 1,800 seconds, 30 minutes | The PMJAY claim-event header | +| Refresh token | 1,296,000 seconds, 15 days | `R-token` on the refresh call | + +```bash +curl --location --request GET 'https://apisbx.abdm.gov.in/hcx/abha/biometric/auth/refresh/token' \ + --header 'R-token: Bearer ' \ + --header 'Authorization: Bearer ' \ + --header 'payerid: ' \ + --header 'process: Preauth' +``` + +[Biometric auth refresh token in the API reference](/docs/nhcx/v1/api/biometric/endpoints/biometric-auth-refresh-token) + +Refreshing returns a **new refresh token** whose 15 days run from that moment. +The portal's advice is to call the refresh endpoint once within every ten days +and store the new token, which keeps a chain alive indefinitely. + +Two rules the scheme enforces on top of the lifetimes. + +- **Refresh automatically for the duration of a transaction cycle.** If the user + token lapses mid-case, start a fresh biometric authentication. It is not + enough to have authenticated once at some point. +- **A refresh token is not a capture.** On a cyclic procedure the payer pays + only for cycles with a live biometric, and a refresh token is accepted only + at the final claim. Every visit needs a real capture, with `process` set to + `Discharge`. + +## When biometrics are not possible + +Two separate situations, and they are handled differently. + +**The beneficiary's ABHA is not linked to their PMJAY card.** Biometric +authentication does not apply at all. Follow the scheme's existing KYC +protocols. + +**Biometrics are possible in principle but fail in practice.** Capture an +Aadhaar exemption consent document, signed by both the patient and a hospital +representative, store it digitally against the beneficiary record, and answer +the scheme's authentication-consent questionnaire in the bundle. + +There are two such questionnaires and they come from different places: + +| Form | Where it comes from | Used at | +| :---- | :---- | :---- | +| Authentication Consent | The coverage eligibility response, purpose auth-requirements, and the plan master | Preauthorisation | +| Discharge Consent | The insurance plan | Claim | + +Both are the plan's own forms, found by title in the package master, so read +the URL and the link ids off the master rather than writing them into code. The +answers travel as a `QuestionnaireResponse` referenced from a supporting-info +entry of category `INF`, code `ODN`. The payer refuses a request with neither a +valid token nor the matching response, and names which is missing: +`PAYR-1256` at preauthorisation, `PAYR-1363` at the claim. + +The consent has a prescribed format that the payer's fraud engine checks, and +the exemption undertaking is submitted to the payer at claim time. + +**The one case with no fallback is a cyclic procedure**, where live biometrics +are required at every step and a consent form cannot stand in. + +## What to store + +- The user token and its expiry, against the case rather than the session. +- The transaction ID of every authentication, the method used and the moment it + succeeded. On a cyclic case the payer checks each cycle's recorded start and + end against the biometric timestamp, and a mismatch voids the cycle. +- The exemption consent document, linked to the beneficiary record, where one + was used. +- Nothing else from the ABHA profile beyond what the encounter needs, and never + the encrypted Aadhaar value. + +## What to test + +- Each of the three methods end to end. +- Token expiry mid-case, and automatic refresh. +- A refresh token older than fifteen days. +- The consent fallback at preauthorisation and again at discharge. +- A case authenticated by one method at admission and another at discharge. +- A cyclic case with a capture at every visit, and one deliberately missing, to + confirm the payer pays only for captured cycles. diff --git a/site/docs/nhcx/v1/building-a-provider/discharge-and-claim.md b/site/docs/nhcx/v1/roles/provider/discharge-and-claim.md similarity index 87% rename from site/docs/nhcx/v1/building-a-provider/discharge-and-claim.md rename to site/docs/nhcx/v1/roles/provider/discharge-and-claim.md index d48063dd7..d458e7968 100644 --- a/site/docs/nhcx/v1/building-a-provider/discharge-and-claim.md +++ b/site/docs/nhcx/v1/roles/provider/discharge-and-claim.md @@ -1,24 +1,20 @@ --- title: Discharge and claim sidebar_label: Discharge and claim -description: The provisional discharge submission and the final claim, the four dates they carry, and what to do after a decision. +sidebar_position: 6 +description: Cashless claim submission, discharge types, and billing evidence verification: unverified -source: NHCX Integration Handbook §9, §10; Claim (NHA); Workflow Status Sheets; NHCX Requests and Responses, Reprocess sheet and value sets; Standard Error Codes, Claim -sidebar_position: 5 +source: nhcx-package/docs/03-Building a Provider/06-Discharge and Claim.md +generated: true +sidebar_custom_props: + roles: + - provider --- # Discharge and claim On the general network the claim is two submissions. A provisional one goes before the patient leaves, so the payer can object while corrections are still cheap. The final one goes after discharge, with the finalised bill, and is the one adjudicated for settlement. Both are the same `Claim` resource with `use = claim`, told apart by workflow code. -## In short - -- On the general network the claim is two submissions: a provisional one before the patient leaves, then the final one. -- Both are the same `Claim` resource with `use = claim`, told apart by workflow code. -- Supporting-info dates grow from two to four, plus the discharge status, and two forms of those dates exist. -- The claim amount may not exceed the preauthorisation's approved amount. -- Adjudication closes the decision; settlement on code 33 closes the money. - ## What the user does **Discharge.** The user records the discharge type, from the NRCeS set: to home, to mortuary, left against medical advice, discharged against medical advice. Discharge date, and surgery date where there was one. The documents available at this point are attached and the provisional submission goes. diff --git a/site/docs/nhcx/v1/building-a-provider/index.md b/site/docs/nhcx/v1/roles/provider/index.md similarity index 79% rename from site/docs/nhcx/v1/building-a-provider/index.md rename to site/docs/nhcx/v1/roles/provider/index.md index a3cae1d45..243e033c5 100644 --- a/site/docs/nhcx/v1/building-a-provider/index.md +++ b/site/docs/nhcx/v1/roles/provider/index.md @@ -1,25 +1,23 @@ --- -title: Building a provider -sidebar_label: Building a provider -description: "The hospital's side of the exchange: the screens, the calls behind each one, and what a provider integration has to keep." -verification: unverified -source: NHCX Integration Handbook, Chapters I to III and §5; NHCX APIs to be called based on scenario; NHCX Provider Side Use Cases, Sandbox Exit Process +title: Provider overview +sidebar_label: Provider overview sidebar_position: 1 +description: Hospital integration architecture and queue flow +verification: unverified +source: nhcx-package/docs/03-Building a Provider/01-Provider Overview.md +generated: true +sidebar_custom_props: + roles: + - provider --- -# Building a provider +# Provider overview + A provider system is the hospital's side of the exchange. It takes a patient from the front desk to a settled claim without anyone leaving the HMIS. It does that by making a fixed set of calls to the exchange and hosting a fixed set of callbacks for the payer's answers. This section assumes the base framework from Getting Started is working: you have a token, a participant record, your own key, and a callback endpoint that opens messages. Everything here is what goes on top. -Chapters 02 to 06 describe the flow as NHCX defines it for any payer. PMJAY runs the same endpoints with different rules around them; those rules are collected in chapter 07 so the generic flow stays readable and the scheme's additions are in one place. Chapter 08 turns all of it into screens, for whoever is designing the hospital's interface rather than its integration. Chapter 09 is the checklist you have to demonstrate to leave the sandbox. - -## In short - -- A provider system takes a patient from the front desk to a settled claim without leaving the HMIS. -- A handful of screens map one to one onto exchange calls, which decides where each API is called from. -- It is as much a data model as an API client: persist every correlation ID, every raw callback, and the plan version used. -- Two rulebooks shape what you may send: the insurance plan, then the eligibility response. +Registration and Eligibility, Insurance Plan, Preauthorisation, Discharge and Claim, and Payment and Communication describe the flow as NHCX defines it for any payer. PMJAY runs the same endpoints with different rules around them; those rules are collected in PMJAY Provider so the generic flow stays readable and the scheme's additions are in one place, and Biometric Authentication covers the scheme's proof that the beneficiary was present. UI Guide turns all of it into screens, for whoever is designing the hospital's interface rather than its integration. Provider Checklist is the checklist you have to demonstrate to leave the sandbox. ## What the hospital sees @@ -41,10 +39,6 @@ The user-facing shape is a handful of screens that map one-to-one onto exchange ```mermaid flowchart LR - classDef provider fill:#DCEFE3,stroke:#2E7D4F,color:#1B2431 - classDef payer fill:#DCE8F5,stroke:#2B5C9E,color:#1B2431 - classDef exchange fill:#E3F0F0,stroke:#0F6E70,color:#1B2431 - classDef other fill:#EEF1F4,stroke:#7A8797,color:#1B2431 S[Patient search] --> R[Registration] R --> T[Treatment plan] T --> P[Preauthorisation] @@ -57,7 +51,6 @@ flowchart LR C --> Q C --> M[Payments] C -. rejected or short .-> X[Reprocess] - class S,R,T,P,Q,E,D,C,M,X provider ``` ## What the system calls @@ -99,7 +92,7 @@ The exchanges depend on each other, and building them out of order means testing | 7 | Payment notice and acknowledgement | Closes the case, and under PMJAY gates the shortfall | | 8 | Task: cancel and reprocess | Needed for sandbox exit, rarely needed on day one | -Chapter 09 is the checklist you demonstrate to leave the sandbox, and it names all thirteen use cases NHA asks for. +Provider Checklist is the checklist you demonstrate to leave the sandbox, and it names all thirteen use cases NHA asks for. ## Error families, and which desk they belong to @@ -123,4 +116,4 @@ Two rulebooks shape what a provider may send, consulted in this order: 1. **The insurance plan** says what the policy covers, at what limits, with which documents required. 2. **The eligibility response** says whether this patient is covered right now, how much remains, and which of the plan's requirements apply to the services chosen. -A scheme adds a third: its own rules for how a case is built. For PMJAY those are chapter 07. +A scheme adds a third: its own rules for how a case is built. For PMJAY those are in PMJAY Provider. diff --git a/site/docs/nhcx/v1/building-a-provider/insurance-plan.md b/site/docs/nhcx/v1/roles/provider/insurance-plan.md similarity index 88% rename from site/docs/nhcx/v1/building-a-provider/insurance-plan.md rename to site/docs/nhcx/v1/roles/provider/insurance-plan.md index cc37a1b89..520cbc818 100644 --- a/site/docs/nhcx/v1/building-a-provider/insurance-plan.md +++ b/site/docs/nhcx/v1/roles/provider/insurance-plan.md @@ -1,23 +1,20 @@ --- title: Insurance plan sidebar_label: Insurance plan -description: Fetching the policy as data, caching it with a version stamp, and building the treatment screen from the payer's own rules. +sidebar_position: 4 +description: Dynamic package master retrieval and caching verification: unverified -source: "NHCX Integration Handbook §6; Insurance Plan Implementation Guide; NHCX FAQs v1.2 #15" -sidebar_position: 3 +source: nhcx-package/docs/03-Building a Provider/04-Insurance Plan.md +generated: true +sidebar_custom_props: + roles: + - provider --- # Insurance plan The plan is the policy as data. It tells the hospital system what a policy covers, at what limits, under what conditions, and with which documents. So the treatment screen is built from the payer's own rules rather than from a PDF someone once read. Nothing on that screen should be typed in by hand if the plan already knows it. -## In short - -- The plan is the policy as data, and the treatment screen is built from it rather than from a PDF. -- The user never asks for it. It is fetched per policy, cached, and refreshed on a `policychange` communication. -- Plans come in two shapes: coverage-based for private insurers, package-based for schemes. -- Store it as data with a version stamp, and record which version each submission used. - ## What the user does The user never asks for the plan. It is fetched in the background and the treatment screen is built from it. @@ -54,7 +51,7 @@ A collection bundle with one `InsurancePlan`, the `Organization`s, and one `Ques | What blocks submission | A code or display differing from the plan, character for character | An amount over the limit, or a missing mandatory document | | Sampled | Yes, one 21 MB payload | No sample in the published corpus | -Chapter 07 covers what the package flags do. The FHIR Reference has a chapter for each shape. +PMJAY Provider covers what the package flags do. The FHIR Reference has a chapter for each shape. ### Storing it diff --git a/site/docs/nhcx/v1/building-a-provider/payment-and-communication.md b/site/docs/nhcx/v1/roles/provider/payment-and-communication.md similarity index 89% rename from site/docs/nhcx/v1/building-a-provider/payment-and-communication.md rename to site/docs/nhcx/v1/roles/provider/payment-and-communication.md index 37383a496..17911ca23 100644 --- a/site/docs/nhcx/v1/building-a-provider/payment-and-communication.md +++ b/site/docs/nhcx/v1/roles/provider/payment-and-communication.md @@ -1,23 +1,20 @@ --- title: Payment and communication sidebar_label: Payment and communication -description: "The two exchanges the payer starts: payment notices with the UTR, and the communication inbox with its six reasons." +sidebar_position: 7 +description: Payment reconciliations (wf 30, 31, 33) and out-of-band communication verification: unverified -source: NHCX Integration Handbook §11, §12; Payment (NHA); NHCX Provider Side Use Cases, Sandbox Exit Process; NHCX Requests and Responses, payment type and task output values -sidebar_position: 6 +source: nhcx-package/docs/03-Building a Provider/07-Payment and Communication.md +generated: true +sidebar_custom_props: + roles: + - provider --- # Payment and communication Two exchanges arrive unasked. The payer initiates both, and the provider's job is to receive, act, and acknowledge. -## In short - -- Two exchanges arrive unasked, both started by the payer. -- Three payment notices can arrive per claim. Only 33 carries the UTR, and only 33 means settled. -- The communication inbox switches on `Task.reasonCode`, with six reasons going to different desks. -- Build the `additionalinfo` path first: it is the query channel on the general network. - ## Payment notices ### What the user sees diff --git a/site/docs/nhcx/v1/roles/provider/pmjay-adjudication-apis.md b/site/docs/nhcx/v1/roles/provider/pmjay-adjudication-apis.md new file mode 100644 index 000000000..c7f2d13c3 --- /dev/null +++ b/site/docs/nhcx/v1/roles/provider/pmjay-adjudication-apis.md @@ -0,0 +1,217 @@ +--- +title: PMJAY adjudication APIs +sidebar_label: PMJAY adjudication APIs +sidebar_position: 12 +description: The two payer service calls that read and drive a PMJAY case, the role walk, and what the desk refuses +verification: unverified +source: nhcx-package/docs/03-Building a Provider/12-PMJAY Adjudication APIs.md +generated: true +sidebar_custom_props: + roles: + - provider +--- + +# PMJAY adjudication APIs + +A PMJAY case is not decided over NHCX. The exchange carries the submission to +the scheme and carries the verdict back, but the decision itself is taken in +the State Health Agency's own Transaction Management System, by a named role, +on that system's schedule. Between the two sits the NHCX Payer Service, which +is how an external integrator reads and drives that queue. + +The previous chapter, PMJAY Sandbox Run, records what one case did; this one +is the interface. + +The source for the endpoints, the roles and their action names is the NHCX +Payer Service API Workflow Guide for External Integrators, a supporting +document on the portal's NHCX-PMJAY-HMIS Integration page, and it remains the +authority on them. What the service did beyond the guide, the case id it +insists on, its refusals and its pace, is from that sandbox run. + +It matters to two audiences. A scheme payer building its own side needs to know +what shape the exchange expects a role-based queue to present. An integrator +testing against the sandbox needs it because there is no other way to make a +PMJAY case move. + +## Two endpoints, two hosts + +| What | Where | +| :---- | :---- | +| Who holds the case | `POST https://apisbx.abdm.gov.in/pmjay/sbxhcx/nhcxpayerservice/v1/get/user-role` | +| Act on the case | `POST https://apisbeta.nha.gov.in/pmjay/hcx/nhcxpayerservice/wrapper/process/case` | + +Both take an ordinary ABDM session token on `bearer_auth`, with +`Content-Type: application/json` and `Accept: application/json`. The token is +the same one every other call uses, minted from the participant's client ID and +secret at the sessions endpoint. In the sandbox it lives 1,200 seconds. + +Note that the two endpoints sit on different hosts. That is not a +documentation error; it is how the service is deployed. + +## Who holds the case + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/nhcxpayerservice/v1/get/user-role' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ + "caseid": "", + "payerid": "" + }' +``` + +[Adjudicator: role for a case in the API reference](/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-adjudicator-role) + +```json +{ "currentuserrole": "PPD-Trust", "errormessage": null } +``` + +**`caseid` is the scheme's case id, not the hospital's claim number.** It is +the digits at the end of the case reference the payer issues. Asked about a hospital's own number the +service answers that no data was found and tells you to use the current active +case id. + +A hospital therefore has to learn the scheme's case id for every +preauthorisation it raises. The sandbox gives it out in two places: inside the +`PAYR-1238` refusal of the next request for that beneficiary, and, once a +request is accepted, in the payer's acknowledgement and status answers on the +case. Store it beside your own claim number the moment it appears. + +**Read the role before every action.** The service moves cases on its own +schedule, and the role that answers is the only one whose action names are +legal. A cycle that assumes the next step in the table will be refused. + +**A preauthorisation role on a claim means "not yet".** If the role lookup +still answers `PPD-Trust` while you are asking about a claim, the case has not +left the preauthorisation queue. The role names where the case is, not what you +are asking about. + +## Acting on the case + +One endpoint, one body shape, with the action spelled exactly as the table +gives it for the role that currently holds the case. + +```bash +curl --location --request POST 'https://apisbeta.nha.gov.in/pmjay/hcx/nhcxpayerservice/wrapper/process/case' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ + "casenumber": "", + "action": "Approve", + "receivercode": "", + "usecase": "PREAUTH", + "correlationid": "", + "sendercode": "", + "memberid": "", + "remarks": "ok" + }' +``` + +[Adjudicator: act on a case in the API reference](/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-adjudicator-process) + +| Field | What it carries | +| :---- | :---- | +| `casenumber` | The scheme's case id, as above | +| `action` | Exactly as the role's row gives it. Case-sensitive | +| `usecase` | `PREAUTH`, `CLAIM`, or the committee's own name | +| `receivercode` | The payer's registry id, without the `@hcx` suffix | +| `sendercode` | The provider's participant code, without the suffix | +| `memberid` | The beneficiary | +| `correlationid` | **A fresh UUID for every call** | +| `remarks` | Free text the desk records | + +## The role walk + +| Step | Role | Actions | `usecase` | +| :---- | :---- | :---- | :---- | +| Preauthorisation | `PPD-Trust` | `Approve`, `Reject`, `Query` | `PREAUTH` | +| Claim 1 | `CEX-Trust` | `Forward` | `CLAIM` | +| Claim 2 | `CPD-Trust` | `cpdApprove`, `cpdReject`, `Pending` | `CLAIM` | +| Claim 3 | Medical Audit Committee | `Approve`, `Reject`, `iQuery` | `Medical Audit Committee` | +| Claim 4 | `ACO-Trust` | `Approve`, `Reject`, `Pending` | `CLAIM` | +| Claim 5 | `SHA-Trust` | `Approve`, `Reject`, `Pending` | `CLAIM` | +| Claim 6 | Claim Review Committee | `Approve`, `Reject`, `Pending` | `Claim Review Committee` | + +Four things about that table. + +**A preauthorisation is one decision. A claim walks a queue.** The roles map +onto the scheme's own staff: the Preauthorisation Processing Doctor, the claim +executive, the Claim Processing Doctor, the audit and accounts roles, the State +Health Agency and, on appeal, the Claim Review Committee. + +**The action names are not consistent between roles.** `CPD-Trust` takes +`cpdApprove` and `cpdReject`; every other role takes `Approve` and `Reject`. +Sending `Approve` to `CPD-Trust` is refused. + +**`usecase` changes at the two committees** and carries the committee's full +name with spaces, not a code. + +**Not every case walks all six.** On the run recorded in PMJAY Sandbox Run the +claim was forwarded by `CEX-Trust`, approved by `CPD-Trust`, then by +`ACO-Trust` and `SHA-Trust`, after which the role lookup answered with no role +at all. Neither committee held the case. The six steps are the roles a case +*may* pass through, not a queue every case walks. + +## How the decision comes back + +The desk call and the NHCX callback are two halves of one step. Acting on the +case makes the scheme issue its verdict, and that verdict arrives at the +provider over NHCX as an ordinary `ClaimResponse` on the original request's +correlation id. + +So a provider system driving this in a sandbox has to hold both threads: the +payer service call it just made, and the callback it is waiting for. They are +correlated by the case, not by the correlation id of the desk call, which is +fresh every time. + +## What it refuses, and what those refusals mean + +| Message | What it means | +| :---- | :---- | +| `No Data found with the caseid . Please use the current active case id.` | You asked with the hospital's claim number instead of the scheme's case id | +| `Event Meta Log not found for correlationId` | The exchange has not finished delivering the request you are acting on. Try again shortly | +| `Case not found for caseId` | The case is mid-filing. Try again shortly | +| An action refused for the current role | Read the role again. It has moved, or it never was what you assumed | + +The first is a modelling error and needs a fix. The second and third are timing +and are safely retried. + +## What it will not do + +**It is not a status API over NHCX.** A `Task` coded `status` sent to the +scheme is refused, first with `PAYR-1018` for a missing reason code and then +with `PAYR-1008` for a code and reason combination the scheme does not accept. +Where a case stands is read here, not asked for over the exchange. + +**It re-queues rather than answering immediately.** The scheme acknowledges an +enhancement it has been asked to approve by answering `queued` again, and +decides in its own time. On one run the enhancement was approved a minute after +the ask; on another it was still queued five minutes on, with the same bundle. +Nothing in what you send changes that, and a test suite has to report the +scheme's pace rather than assert it away. + +**One request at a time on a case.** `PAYR-1322`, which the sandbox sends as +"active instance found" although the error sheet gives it another message, is +the rule behind most of the timings above. A claim raised while an enhancement is +still queued is refused, and the role lookup still answers with the +preauthorisation role because the case has not left that queue. + +## What a scheme payer should take from this + +If you are building the payer side rather than testing against it, the shape +worth copying is the separation. The exchange carries messages; the queue +decides cases; the two are joined by a case id the payer issues and the +provider stores. Three consequences follow for your own build. + +- **Issue a case number on the first answer and repeat it on every later one.** + The provider files the case under it and every subsequent action names it. A + desk asked about a case by the hospital's own number should still find it, + but the published reference implementation does not, which is why the + provider has to learn yours. +- **Acknowledge before you decide.** Answer every submission at once with an + interim response, or the exchange retires the correlation before your + adjudicator gets to it. Error Codes covers `NHCX-1010`. +- **Expose where a case is.** Whatever your equivalent of the role lookup is, + a provider needs it, because your queue is invisible from the exchange. diff --git a/site/docs/nhcx/v1/building-a-provider/pmjay-provider.md b/site/docs/nhcx/v1/roles/provider/pmjay-provider.md similarity index 78% rename from site/docs/nhcx/v1/building-a-provider/pmjay-provider.md rename to site/docs/nhcx/v1/roles/provider/pmjay-provider.md index 1523b2a7a..3d043a2f6 100644 --- a/site/docs/nhcx/v1/building-a-provider/pmjay-provider.md +++ b/site/docs/nhcx/v1/roles/provider/pmjay-provider.md @@ -1,10 +1,14 @@ --- title: PMJAY provider sidebar_label: PMJAY provider -description: "Everything a PMJAY integration adds to the generic flow: biometrics, package flags, structured documents and scheme cases." +sidebar_position: 8 +description: PMJAY-specific HMIS rules, STG questionnaires, GST, incentives, and size limits verification: unverified -source: NHCX-PMJAY-HMIS Integration Guide §5.2, §8; NHCX PMJAY Integration Handbook §6.6, §8, §9; NHCX FAQs v1.2 §22 to §29; Biometric Authentication Implementation Steps; NHCX APIs to be called based on scenario; PMJAY Hospital Migration to HMIS via NHCX; Standard Error Codes, Preauth and Claim -sidebar_position: 7 +source: nhcx-package/docs/03-Building a Provider/08-PMJAY Provider.md +generated: true +sidebar_custom_props: + roles: + - provider --- # PMJAY provider @@ -13,14 +17,6 @@ The chapters before this one describe the flow NHCX defines for any payer. When The Overview's PMJAY chapters explain why these rules exist. This chapter is about what to build. -## In short - -- The endpoints do not change under PMJAY. The rules around every screen do. -- Biometric verification is mandatory at registration and discharge, with a consent questionnaire as the fallback. -- The plan is package-based and large, and its flags drive what the treatment screen may offer. -- Queries arrive inside the queried `ClaimResponse`, not on the communication channel. -- There is no discharge submission: raising the claim asserts the discharge. - ## What changes, in one table | Generic flow | Under PMJAY | @@ -63,21 +59,32 @@ Package-based, and large: the reference response is 21 MB with over two thousand | `ScheduledTATApproval` | Tell the user the payer's silence within the window means approval | | `EnhancementAllowed` | Only these packages may be added during an enhancement | | `QuantityAllowed` | Cap the quantity field | -| `ImplantApplicable`, `MaximumImplantsAllowed`, `MultipleImplantsAllowed` | Show the implant picker, with its limits | -| `StratificationAllowed`, `MaximumStratificationAllowed`, `MultipleStratificationAllowed` | Show the bed-category picker, with its limits | +| `ImplantApplicable` | Show the implant picker | +| `MaximumImplantsAllowed` | Cap the number of implants | +| `MultipleImplantsAllowed` | Allow more than one implant on the package | +| `StratificationAllowed` | Show the bed-category picker | +| `MaximumStratificationAllowed` | Cap the number of bed categories | +| `MultipleStratificationAllowed` | Allow more than one bed category on the package | | `Standalone` | Refuse any other package alongside it | | `ParentProcedure` | Require one of the listed parents | | `Unspecified` | Free-text name and free-entry amount, validated on the server against the wallet | -| `CyclicProcedure`, `MaximumCyclesAllowed` | Ask the number of cycles, capped | -| `LamaDamaProcedure`, `DischargeStagesLamaDamaProcedure` | Offer only on the matching discharge | -| `IsDayCare`, `Procedure Type` | Day-care handling; medical and surgical packages cannot be combined, and one medical package per episode | +| `CyclicProcedure` | Ask the number of cycles | +| `MaximumCyclesAllowed` | Cap the number of cycles | +| `LamaDamaProcedure` | Offer only on a LAMA or DAMA discharge | +| `DischargeStagesLamaDamaProcedure` | Offer only at the discharge stages it lists | +| `IsDayCare` | Day-care handling | +| `Procedure Type` | Medical and surgical packages cannot be combined, and one medical package per episode | | `los` | Maximum length of stay for the package; bounds the days claimed, including the `LM100` day count | -| `gst_applicable`, `gst_percentage` | Whether tax applies to the package, and at what rate | +| `gst_applicable` | Whether tax applies to the package | +| `gst_percentage` | The tax rate when it does | | `incentive_applicable` | Whether a hospital incentive applies | | `ip_op_flag` | In-patient or out-patient | | `rules_yn` | Whether further rules attach to the package | -That table is the specification. The one published plan payload carries sixteen of these flags and not the rest: `Standalone`, `Unspecified`, `LamaDamaProcedure`, `los`, the tax pair, `incentive_applicable`, `ip_op_flag` and `rules_yn` appear nowhere in it. Do not read that as proof they are unused, because the sample is one scheme's plan at one moment. Read it as a warning to code defensively. Treat a missing flag as absent rather than as false, and confirm with the payer which of these its plan publishes before building a screen that depends on one. +That table is the specification. The one published plan payload carries sixteen of these flags and not the rest: `Standalone`, `Unspecified`, `LamaDamaProcedure`, `los`, the tax pair, `incentive_applicable`, `ip_op_flag` and `rules_yn` appear nowhere in it. Do not read that as proof they are unused, because the sample is one scheme's plan at one moment. Read it as a warning to code defensively: +- **`gst_applicable` and `gst_percentage`**: The handbook describes the first as whether GST is applicable for the benefit and the second as the "GST % applicable for the given benefit". No published source gives a rate or says which packages carry tax. In the handbook's worked claim response the tax is a claim-level total, `ClaimResponse.total` with category `tax`: 100 on a claim of 13,700. +- **`incentive_applicable`**: Described only as whether an incentive to the hospital is applicable for the benefit. No published source gives the criteria or the rate. The same worked response carries a claim-level total with category `incentive` of 137 on 13,700, and the handbook's approved reprocess example repeats both figures. +- **`los` (Maximum Length of Stay)**: Specifies the ceiling on inpatient days for the procedure. Stays extending beyond `los` require clinical justification or an approved enhancement request (workflow 13); for LAMA/DAMA discharges, procedure `LM100` daily quantity cannot exceed `los`. There is a second trap in the same payload, and it will cost a day if you meet it unprepared. The flags and the money live in two different places. The claim-condition flags, the document requirements and the rate limits hang off the plan's coverage benefits, while the costs hang off the plan's own cost list. Both structures carry the same package codes, and neither is complete on its own, so building the treatment screen means joining them on the package code. The Insurance Plan Response chapter in the FHIR Reference sets out both shapes. @@ -97,7 +104,13 @@ The four sections of the generic form, with these additions: - The biometric user token, or the consent questionnaire, must be present. - `LM100` is never valid here. -**Structured documents.** Clinical evidence travels as ABDM health-information types: a `DocumentReference` whose `attachment.data` is a base64 FHIR bundle with content type `application/json` or `application/fhir+json`, under categories `DIA`, `HDS`, `CD` or `INF`, sent as a reference. Scans go under `POI`, `POA`, `DOB`, `DEF`, `FIR` or `ATT` as attachments. One document per item, 2 MB each, 20 MB for the bundle. +**Documents and size limits.** + +- Clinical documents (`DIA`, `HDS`, `CD`, `INF`) go as a reference: a `DocumentReference` whose `attachment.data` is a base64 FHIR bundle, content type `application/json` or `application/fhir+json`. +- Scans (`POI`, `POA`, `DOB`, `DEF`, `FIR`, `ATT`) go as attachments. +- One document per item, 2 MB at most. +- A preauthorisation or claim message is capped at 20 MB. +- The scheme's `InsurancePlan` response is bigger, 21 MB to 25 MB, because it embeds over 2,200 questionnaires. HTTP clients and reverse proxies must accept 25 MB for plan fetches. **Auto-approval** applies when this is the first preauthorisation for the case and every package carries `ApprovalNotRequired`, or when the policy allows turnaround-time approval and the payer has not acted in its window. Show the user which rule applied. @@ -121,11 +134,11 @@ The four sections of the generic form, with these additions: **Discharge type** is one of the four, and each has a questionnaire in the plan found by title (Death, Life, LAMA, DAMA). Authenticate the patient again here. Download the feedback form, hand it over, and upload it back. Under `DIS` the value is the stage. The gateway's own rejection message lists three, Before Surgery, During Surgery and After Surgery; the FAQ lists two, Before and After, and says the transmitted value must stay within the NRCeS set. Send what the payer's validation accepts and confirm before building. The value is sent for medical cases as well as surgical ones. A death also sends the death date under `ONS` / `DTM`. -**LAMA or DAMA before surgery** voids every approved item. The claim carries the single line `LM100` with quantity equal to the days admitted, and for LAMA the bed category with its duration. After surgery the surgery items stand and `LM100` is not used. Two sources disagree on the middle case. The FAQ says `LM100` applies only before surgery. The payer's own error message says it is mandated when the patient is discharged after or during surgery under LAMA or DAMA. Confirm before building. +**LAMA or DAMA before or during surgery** voids every approved item. The claim carries the single line `LM100`, at the rate the package master gives it, with no ward tier on it; a claim that still carries the package is refused with `PAYR-1362`. After surgery the surgery items stand and `LM100` is not used. **The claim** is built from the preauthorisation with `use = claim`, four dates plus discharge status, the discharge summary as a structured document, the bill, the discharge questionnaire response, and the discharge-stage biometric token in the header. Amount within the preauthorisation's approved amount. The documents mandatory at claim are the plan's list less those already sent at preauthorisation. -**Queries** on a claim arrive and are answered the same way as on a preauthorisation, with workflow 151 on `/v1/claim/submit`. +**Queries** on a claim arrive and are answered the same way as on a preauthorisation, with workflow 161 on `/v1/claim/submit`. The payer refuses 151, 19 and 16 with `PAYR-1321`. **After the decision**, two Tasks, both on `/v1/task/submit` with workflow 36, code `reprocess`, and a document attached: @@ -144,7 +157,7 @@ They do not chain; a shortfall cannot follow a Committee decision. The claim num Five situations the treatment screen has to recognise before it builds anything. The Overview's PMJAY Scheme Rules chapter explains each; this is what the provider system does. -- **Unspecified procedure.** Offer the specialty's unspecified package (prefix plus 215) only within the treating specialty, with a free-text name and amount, and validate the amount on the server. It is a single line item with nothing else beside it. Auth-requirements is still required, and the item code is `U100`. +- **Unspecified procedure.** Offer the specialty's unspecified package only within the treating specialty, with a free-text name and amount, and validate the amount on the server. It is a single line item with nothing else beside it. Auth-requirements is still required. Take the code from the plan rather than building it: the FAQ says the specialty prefix plus `215` and a bare `U100`, while the plan carries the specialty prefix plus `U100`, such as `SGU100`. - **Cyclic procedure.** Ask the cycles, capped by the plan. Take live biometrics at preauthorisation, at every visit with process type Discharge, and at claim. Enforce the 24-hour rolling gap between visits, and record each visit as a numbered structured document with start and end time. One claim goes after the last cycle, and payment comes only for captured cycles. A change of hospital means discharge and a new preauthorisation. - **Medical package.** One per episode; never alongside a surgical package. - **Newborn.** Used while the baby has no member ID of its own. Parent's card and wallet, with the parent as primary `Patient` and the child as a linked `Patient` with `link.type = refer`. Date of birth, gender and proof of birth under `DOB` as `BCF` or `DCB` are all mandatory. Twins are two preauthorisations. Bill as "Baby of" the parent with an attachment. A child older than that and under six draws on the parent's wallet as an ordinary case, without the linked-child construct. @@ -158,14 +171,14 @@ The communication channel never carries a document query under PMJAY. It carries ## Verified in the sandbox -The next chapter, PMJAY Sandbox Run, records what the SHA HP sandbox actually did with these rules on 5 and 6 September 2026, from eligibility through to an approved claim. Its findings change what is written above in six places: +PMJAY Sandbox Run records what the SHA HP sandbox actually did with these rules on 5 and 6 September 2026, from eligibility through to an approved claim. Its findings change what is written above in six places: - The item needs a FHIR element id, and every supporting-info entry a sequence. - The practitioner needs an `HPIN` identifier. - The item's category is the master's specialty code. - The consent questionnaires that stand in for biometrics are the **plan's**, found by title in the master. - The claim goes out under the pre-authorisation's number and bills the package alone. -- Documents must be PDF, JPEG, PNG or FHIR JSON. The Payer Service that adjudicates a case, the case id it insists on, and the roles a claim actually walked are described there as well. +- Documents must be PDF, JPEG, PNG or FHIR JSON. The adjudication APIs, the case id they insist on, and the roles a claim actually walked are in PMJAY Adjudication APIs. ## Going live diff --git a/site/docs/nhcx/v1/roles/provider/pmjay-sandbox-run.md b/site/docs/nhcx/v1/roles/provider/pmjay-sandbox-run.md new file mode 100644 index 000000000..60cf412f2 --- /dev/null +++ b/site/docs/nhcx/v1/roles/provider/pmjay-sandbox-run.md @@ -0,0 +1,217 @@ +--- +title: PMJAY sandbox run +sidebar_label: PMJAY sandbox run +sidebar_position: 11 +description: A full PMJAY case on the sandbox in order, the refusals met and what each means, with placeholders for your own values +verification: unverified +source: nhcx-package/docs/03-Building a Provider/11-PMJAY Sandbox Run.md +generated: true +sidebar_custom_props: + roles: + - provider +--- + +# PMJAY sandbox run + +Everything before this chapter was written from NHA's documents. This one is written from a full case run against the live NHCX sandbox with a State Health Agency (SHA) as the payer: policy lookup, coverage, package master, preauthorisation, adjudication, enhancement, claim and the claim's walk through the payer's roles, to approval. It records what the SHA accepted and refused, in the order a hospital meets it. Where this chapter and an earlier one disagree, this one is the evidence. + +Identifiers, amounts and dates from the run are replaced by placeholders. Yours will differ; the rules will not. + +## Before you start + +- A provider participant on the sandbox, with its certificate and callback URL registered. +- The SHA payer's participant code, and the policy code and member id of a beneficiary it covers, from the policy lookup. +- A session token from the ABDM gateway. The same token is used for the NHCX calls and for the payer service that adjudicates the case. +- One beneficiary per deployment. The scheme allows one live preauthorisation per beneficiary per hospital, so two teams sharing a beneficiary block each other. + +## The journey in order + +### 1. Find the policy + +`/participant/get/policies` by ABHA, member id or mobile. Take the policy code and the `processingid` from the answer. Every later call is addressed to the processing id, and the package master is keyed on this policy code, not on any other the hospital knows of. + +### 2. Check coverage + +`/v1/coverageeligibility/check` with each purpose: `discovery`, `validation`, `benefits`, `auth-requirements`. Validation returns the coverage period and the wallet; auth-requirements returns what the preauthorisation must carry, including the consent questionnaire when there is no biometric token. The reference coverage bundles pass unchanged. + +### 3. Fetch the package master + +`/v1/insuranceplan/request` with a plan Task keyed on the beneficiary's own policy code and the provider id. A policy the hospital is not empanelled under is refused with `PAYR-1401`; ask again with the code from step 1. The master is large, over a thousand packages, so store it queryable and read every package attribute from it rather than from code. + +### 4. Raise the preauthorisation + +`/v1/preauth/submit` on workflow `12`. The acknowledgement comes back on `20`, the decision later on `21`, `23` or `24`, on the request's own correlation id. The bundle passes only with all of the following, each learned from a refusal listed further down: + +- A FHIR element `id` on the Claim and on every item, procedure and supporting-info entry. +- The practitioner identified by `HPIN` as well as `HPID`. +- The package code, display and specialty exactly as the master has them, the specialty being the code of the category the master files the package under. +- The ward tier from the master's stratification codes as `item.modifier`, where the package allows one. +- The plan's authentication consent questionnaire answered, when there is no biometric token. +- A `sequence` on every supporting-info entry, numbered from 1 with no gaps. + +The SHA prices the package itself: the benefit approved is the master's rate for the tier, whatever amount was asked. + +### 5. Adjudicate on the payer service + +A PMJAY case is not decided over NHCX. It sits at `request.initiated` until someone acts on it in the SHA's Transaction Management System. In the sandbox that someone is you, through two endpoints of the NHCX Payer Service. Both take the ordinary session token in `bearer_auth`. + +First ask who holds the case: + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/nhcxpayerservice/v1/get/user-role' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ + "caseid": "", + "payerid": "" + }' +``` + +[Adjudicator: role for a case in the API reference](/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-adjudicator-role) + +```json +{ "currentuserrole": "PPD-Trust", "errormessage": null } +``` + +`caseid` is the SHA's case id, the digits at the end of its case reference. It is not the hospital's claim number; asked about that, the service answers that no data exists for the case id. The SHA hands the case id out in two places: inside a `PAYR-1238` refusal of a later request, and in its acknowledgement and status answers once a request is accepted. Store it beside the claim number the moment it is seen. + +Then act, with the action spelled as the role that holds the case expects: + +```bash +curl --location --request POST 'https://apisbeta.nha.gov.in/pmjay/hcx/nhcxpayerservice/wrapper/process/case' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ + "casenumber": "", + "action": "Approve", + "receivercode": "", + "usecase": "PREAUTH", + "correlationid": "", + "sendercode": "", + "memberid": "", + "remarks": "ok" + }' +``` + +[Adjudicator: act on a case in the API reference](/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-adjudicator-process) + +The roles a case may pass through, and the actions each takes: + +- Preauthorisation, `PPD-Trust`: `Approve`, `Reject`, `Query`; `usecase` is `PREAUTH`. +- Claim, first desk, `CEX-Trust`: `Forward`; `usecase` is `CLAIM`. +- Claim, second desk, `CPD-Trust`: `cpdApprove`, `cpdReject`, `Pending`; `usecase` is `CLAIM`. +- Medical Audit Committee: `Approve`, `Reject`, `iQuery`; `usecase` is `Medical Audit Committee`. +- Claim, `ACO-Trust`: `Approve`, `Reject`, `Pending`; `usecase` is `CLAIM`. +- Claim, `SHA-Trust`: `Approve`, `Reject`, `Pending`; `usecase` is `CLAIM`. +- Claim Review Committee: `Approve`, `Reject`, `Pending`; `usecase` is `Claim Review Committee`. + +Read the role before every action, use the exact spelling, and mint a new correlation id per call. The decision then comes back over NHCX as the `ClaimResponse` on the request's own thread, so the desk call and the callback are two halves of one step. + +### 6. Enhance + +`/v1/preauth/submit` on workflow `13` with `x-hcx-use_case: Enhancement`, carrying the approved items and the ones now sought. Three rules: + +- The acknowledgement carries no `preAuthRef`. The enhancement is decided on the case its parent opened, so carry the parent's case id onto it; the desk answers only for that case. +- Only one package of type `Conservative` per case. An enhancement on a conservative case adds a `Medical` package, or an add-on the master flags as enhanceable, or is refused with `PAYR-1245`. +- One request at a time on a case. A claim raised while the enhancement is still queued is refused with `PAYR-1322`, and the role lookup still answers `PPD-Trust` because the case has not left the preauthorisation queue. + +The SHA may answer `queued` again when asked to approve an enhancement and decide it in its own time, a minute later or several. Report the scheme's pace; do not assert it away. + +### 7. Claim + +`/v1/claim/submit` on workflow `15`. Beyond the preauthorisation rules: + +- Send it under the preauthorisation's own number. A claim under a number of its own finds no case and is refused with `ERR-PYR-CLM-007`. The claim still owns its correlation id, so the answer lands on the right record. +- Bill the package alone, at the whole amount. A PMJAY rate is all-inclusive; room rent, consultations and investigations are not items and are refused as invalid item codes. +- Answer the plan's discharge consent questionnaire when there is no discharge biometric token, or meet `PAYR-1363`. +- Attach documents as `application/pdf`, `application/jpg`, `application/jpeg`, `application/png` or `application/fhir+json`. Anything else, `text/plain` included, is refused with `PAYR-1008`. + +### 8. Walk the claim through the roles + +Read the role, act, read again. On the run the claim was forwarded by `CEX-Trust`, approved by `CPD-Trust` as `cpdApprove`, then by `ACO-Trust` and `SHA-Trust`, after which the role lookup answered with no role at all: the case was decided and the verdict arrived on the claim's own thread. Neither committee held the case. The seven roles are the ones a case may pass through, not a queue every case walks, and a cycle that assumes the next role in the list will be refused. + +Two answers from the desk mean "try again shortly": no event found for the correlation id, while the exchange is still delivering the request, and case not found, while the case is mid-filing. Retry on both. + +## Refusals you will meet + +Each of these arrived on the run, in roughly this order. The message is the SHA's; the reading is what it turned out to mean. + +### PAYR-1027 Invalid item id + +The item has no FHIR element `id`. Not a package-code problem: the same bundle was refused with several valid codes until the ids were added. `PAYR-1028`, invalid item sequence, and `PAYR-1029`, invalid bundle id, are the same kind of fault. + +### PAYR-1083 No HPR details for the practitioner + +The SHA looks the doctor up by the identifier typed `HPIN` from the NRCeS identifier-type code system. Send the HPR id twice, as `HPID` and as `HPIN`, alongside the registration number typed `MD`: + +```json +"identifier": [ + { "type": { "coding": [{ "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", "code": "HPID" }] }, "system": "https://nhcx.abdm.gov.in", "value": "" }, + { "type": { "coding": [{ "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "MD" }] }, "system": "https://nhcx.abdm.gov.in", "value": "" }, + { "type": { "coding": [{ "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", "code": "HPIN" }] }, "system": "https://hpr.abdm.gov.in", "value": "" } +] +``` + +The sandbox did not check the id against the registry; a well-formed one was enough. Production may not be as kind. + +### PAYR-1238 An active preauthorisation exists + +A scheme rule, not a bundle fault, and it arrives after the bundle has passed validation. The refusal names the SHA's case reference; its last digits are the case id the payer service wants. Clear it with a cancel Task on `PC01` from the hospital that raised it, or a `Reject` at `PPD-Trust`. + +### PAYR-1256 and PAYR-1363 Consent questionnaire missing + +No biometric token and no consent answer. The questionnaire is the plan's: its url and link ids come out of the package master and change per SHA, so read them off the master. The answer rides as a `QuestionnaireResponse` naming that url, referenced from a supporting-info entry of category `INF`, code `ODN`. `PAYR-1256` is at the preauthorisation, `PAYR-1363` at the claim. + +### PAYR-1019 Invalid sequence in supporting info + +An entry without a `sequence`, typically one appended after the rest were numbered. Number the list after it is complete. + +### PAYR-1008 Invalid content type, or invalid code and reason + +On an attachment: a content type outside the five the SHA reads. On a Task: a code and reason combination the scheme does not take, see below. + +### ERR-PYR-CLM-007 No prior preauthorisation for the case + +The claim was sent under a number of its own. Send it under the preauthorisation's number. + +### PAYR-1245 Only one conservative procedure per case + +The enhancement added a second `Conservative` package. Add a `Medical` package or an enhanceable add-on instead. + +### PAYR-1322 Active instance found for the case + +A second request while the previous one is still queued. Wait for the decision. + +### PAYR-1401 Policy not allowed for the hospital + +The package master was asked for under a policy the hospital is not empanelled for. Use the beneficiary's policy code from the eligibility answer. + +## What the package master decides + +Read every package attribute from the master; none of it belongs in code. + +- Package code and display: `item.productOrService`, under the NDHM procedure-code system. +- Specialty: `item.category`, under the NDHM benefit-category system. Its value is the code of the category the master files the package under, exactly as `PAYR-1114` says. A generic category is wrong for every PMJAY package. +- `ProcedureType`: `Claim.procedure.type`, `conservative`, `medical` or `surgical`. Decides the one-conservative-per-case rule. +- `StratificationAllowed` and the tiers: whether a ward tier rides as `item.modifier`, code and display only, no system. A general, semi-private, private or deluxe bed is the routine ward tier, an HDU bed the HDU tier, an ICU bed the ICU tier without ventilator unless the record says otherwise. The tier's rate is what the SHA pays; the amount asked stays the hospital's own. +- `ApprovalNotRequired`: whether a preauthorisation is needed at all. +- `EnhancementAllowed`: whether the package may be added on an enhancement. + +The master also says what the claim may carry: the package alone. The generic flow, where every bill line is an item, stays right for an indemnity payer. + +## What the sandbox will not take + +- A status enquiry as a `Task` coded `status`, refused with `PAYR-1018` without a reason code and `PAYR-1008` with one. Where a case stands is read from the payer service's role lookup, not asked for over NHCX. +- A reprocess `Task` with reason `partialpayment` before payment notice `33` has arrived and been acknowledged, refused the same way. The combination is validated before the case is looked at. + +Both refusals cite a document of valid code-and-reason combinations that NHA does not publish with the rest of its material. + +## What this changes in the earlier chapters + +- Bundles and Conventions: element ids on every Claim bundle, and the `HPIN` identifier on every Practitioner. +- Preauthorisation Request: the sample's `factor: 0.5`, its `MP` category system and the SNOMED system on the package code are tolerated, not needed. `factor` 1, the master's category under the NDHM benefit-category system and the package under the NDHM procedure-code system pass. +- Building a Provider 07: the specialty is the master's category code, the ward tier the master's stratification code, the claim the package alone. The mandatory documents the sample carries were not demanded at submission; expect them to be queried for. +- Error Codes: `PAYR-1027`, `PAYR-1019` and `PAYR-1029` are structural, not code lookups. `PAYR-1008` is about a content type or a code-and-reason combination, depending on where it lands. +- Discharge and Claim: under PMJAY the claim carries the preauthorisation's number, the package alone at the whole amount, the discharge consent questionnaire, and documents in a content type the payer reads. diff --git a/site/docs/nhcx/v1/building-a-provider/preauthorisation.md b/site/docs/nhcx/v1/roles/provider/preauthorisation.md similarity index 88% rename from site/docs/nhcx/v1/building-a-provider/preauthorisation.md rename to site/docs/nhcx/v1/roles/provider/preauthorisation.md index 6cb386b5b..9b13011ac 100644 --- a/site/docs/nhcx/v1/building-a-provider/preauthorisation.md +++ b/site/docs/nhcx/v1/roles/provider/preauthorisation.md @@ -1,24 +1,20 @@ --- title: Preauthorisation sidebar_label: Preauthorisation -description: "The first bundle carrying clinical content: the five form sections, what goes in the Claim, and how to read the answer." +sidebar_position: 5 +description: Preauth request submission, clinical attachments, and query handling verification: unverified -source: NHCX Integration Handbook §8, Appendix B, Appendix C; Preauthorization (NHA); NHCX Dummy Payer Implementation; Standard Error Codes, Preauth; NHCX Requests and Responses, value sets -sidebar_position: 4 +source: nhcx-package/docs/03-Building a Provider/05-Preauthorisation.md +generated: true +sidebar_custom_props: + roles: + - provider --- # Preauthorisation The preauthorisation is the first bundle that carries clinical content, and the one the payer scrutinises hardest. Everything the treatment screen collected becomes a `Claim` resource with `use` set to `preauthorization`. -## In short - -- The first bundle carrying clinical content, and the one the payer scrutinises hardest. -- The form has five sections, in the order payers read them, and the `Claim` is the bundle's spine. -- The item is where most rejections originate: codes and displays must match the plan exactly. -- Read `outcome` and the adjudication reason together. `complete` alone means approved or rejected. -- Enhancements, resubmissions and cancels reuse the same case with a new correlation ID. - ## What the user does The form has five sections, and the order below is the order payers read them. @@ -97,7 +93,7 @@ The callback carries a `ClaimResponse`. Read two fields together, never one: On the general network, a query arrives as a **communication request** on `/v1/communication/request`, with reason `additionalinfo` and the case number. The provider attaches what was asked and answers on `/v1/communication/on_request`. The payer then issues the decision on `/v1/preauth/on_submit`. The queried `ClaimResponse` with workflow 24 tells the provider the case is waiting; the communication tells it what for. -Some payers instead take the answer on the preauthorisation endpoint itself with workflow 19. PMJAY does; chapter 07 covers it. +Some payers instead take the answer on the preauthorisation endpoint itself with workflow 19. PMJAY does; PMJAY Provider covers it. ## Follow-ups on the same case @@ -109,6 +105,6 @@ All reuse this screen's bundle with a new correlation ID, the original reference - **Resubmission** (121). Revises a request after a query or rejection. - **Cancel** (PC01). A Task, not a Claim: code `cancel`, the case number as input, a reason from the list (treatment plan changed, patient request, financial constraints, alternative treatment, duplicate, administrative error, other). Allowed until the claim is raised. The workflow sheet gives PC01 for this and PC02 for the answer; the handbook gives 122 in two places, including the heading of its cancellation-reason appendix. Confirm which the payer accepts. -The Task resource carries more codes than these two. The provider exit checklist names `reprocess`, `cancel`, `release` and `nullify`, and the value set adds `approve`, `search`, `poll` and `suspend`. `nullify` closes a submitted claim and `suspend` holds one; neither is described further in the sources. +The Task resource carries more codes than these two. The provider exit checklist names `reprocess`, `cancel`, `release` and `nullify`, and the value set adds `approve`, `search`, `poll` and `suspend`. `nullify` is described in Cancel, Reprocess and Shortfall in the FHIR Reference. `suspend` is not described in any source beyond its place in the value set. Payers enforce sequencing and say so: no approved record for this enhancement, a case already in progress, a claim already raised. Surface their errors as they are. diff --git a/site/docs/nhcx/v1/roles/provider/provider-checklist.md b/site/docs/nhcx/v1/roles/provider/provider-checklist.md new file mode 100644 index 000000000..8a3669fee --- /dev/null +++ b/site/docs/nhcx/v1/roles/provider/provider-checklist.md @@ -0,0 +1,255 @@ +--- +title: Provider checklist +sidebar_label: Provider checklist +sidebar_position: 10 +description: Sandbox exit list, 29 test cases by family (T-ML1, T-PLN, T-ELG, T-PRE, T-CLM, T-PAY, T-COM, T-CBK, T-SES), first-week failures +verification: unverified +source: nhcx-package/docs/03-Building a Provider/10-Provider Checklist.md +generated: true +sidebar_custom_props: + roles: + - provider +--- + +# Provider checklist + +What a provider has to demonstrate to leave the sandbox, the test cases to run before asking, and where the first week's failures come from. + +## The sandbox exit list + +NHA's provider exit process names thirteen use cases. Each must be shown working against the dummy payer in the internal demo, then in the HTC demo. + +1. Get participant list, `/fetch/participants/list`. +2. Get policy, `/participant/get/policies`. +3. Get public key, `/fetch/certs`. +4. Get auth token, `/get/session`. +5. Check coverage eligibility, `/v1/coverageeligibility/check`, answered on `/v1/coverageeligibility/on_check`. +6. Request insurance plan, `/v1/insuranceplan/request`, answered on `/v1/insuranceplan/on_request`. +7. Preauthorisation submission, `/v1/preauth/submit`, answered on `/v1/preauth/on_submit`. +8. Respond to a communication request, received on `/v1/communication/request`, answered on `/v1/communication/on_request`. +9. Claim submission, `/v1/claim/submit`, answered on `/v1/claim/on_submit`. +10. Claim search, `/v1/search/submit`, answered on `/v1/search/on_submit`. A caution: the Technical Specifications route `/search/submit` from NHA through NHCX to the payer, a cross-payer search for NHA or a regulator, and a provider's search over its own cases is `/claim/search` under the access-control policy. No source confirms which of the two the sandbox accepts from a provider. +11. Acknowledge payment notice, received on `/v1/paymentnotice/request`, answered on `/v1/paymentnotice/on_request`. +12. Reprocess or cancel, `/v1/task/submit`, answered on `/v1/task/on_submit`. +13. Get status, `/v1/status`, answered on `/v1/on_status`. + +Every callback must accept both a `JWEPayload` and a `ProtocolResponse`, and answer with the 202 receipt within 30 seconds. `/v1/error` is not on the list but is required: it takes a plain JSON report of an undeliverable request and must still be answered `202`. + +Under PMJAY, add biometric authentication in all three modes and the structured health-information types, and expect the PMJAY team demo as an extra step. + +## Test cases + +One id per case, by family: `ML1` beneficiary authentication, `PLN` insurance plan, `ELG` coverage eligibility, `PRE` preauthorisation, `CLM` claim, `PAY` payment, `COM` communication, `CBK` callbacks, `SES` session and keys. Cases marked PMJAY apply to the scheme only. The workflow codes named are the ones each leg must carry; the dummy payer's `process/request` hook drives approve, reject and query on demand, and `paymentNotice/init` drives a payment notice. The full list of NHA's own numbered scenarios is in NHCX Use Cases and the harness bundles in `fixtures/reference/payer/`. + +### Beneficiary authentication + +#### T-ML1-01 Validate the policy by ABHA + +`CoverageEligibilityRequest` with purpose `validation` for a valid ABHA with consent. Expect a `CoverageEligibilityResponse` with `inforce: true`. + +#### T-ML1-02 Biometric authentication in each mode (PMJAY) + +Fingerprint, iris and face, each yielding a user token that rides on the eligibility check and the preauthorisation. + +#### T-ML1-03 Consent fallback (PMJAY) + +No biometric device: the plan's authentication consent questionnaire is answered instead, at admission and again at discharge. + +#### T-ML1-04 Token refresh and expiry (PMJAY) + +A user token refreshed before the preauthorisation; an expired one refused and re-obtained. + +### Insurance plan + +#### T-PLN-01 Fetch the package master + +`InsurancePlan` request keyed on the beneficiary's own policy code and the provider id. Expect the master with packages, inclusions, exclusions, claim conditions and document requirements. A policy the hospital is not empanelled under is refused with `PAYR-1401`. + +### Coverage eligibility + +#### T-ELG-01 Auth-requirements before a preauthorisation + +Purpose `auth-requirements` for a package. Expect eligible, balance sufficient, and the mandatory documents the preauthorisation must carry. + +#### T-ELG-02 Benefits and discovery + +Purpose `benefits` for a package, and `discovery` with no policy to find what the beneficiary holds. + +#### T-ELG-03 Refusals + +A policy not in force; a limit exhausted. The refusal is read off the response, not off a transport error. + +### Preauthorisation + +#### T-PRE-01 Submitted and approved + +Workflow `12`, acknowledged on `20`, approved on `21`. The payer's case number arrives in `preAuthRef`. + +#### T-PRE-02 Queried, answered and approved + +Workflow `12`, `20`, `24`, `19`, `21`. The query on the case thread under PMJAY or over communication with another payer, then a positive adjudication. + +#### T-PRE-03 Rejected, resubmitted, cancelled + +Workflow `12`, `23`, `121`, `PC01`, `PC02`. The rejection carries `preAuthRef`; the resubmission reuses it; the cancel Task withdraws the case. + +#### T-PRE-04 Enhancement queried, answered and approved + +Workflow `13`, `241`, `131`, `22`, with the header `x-hcx-use_case: Enhancement`. A longer stay or an added package on the same case. + +#### T-PRE-05 Implant, stratification and STG (PMJAY) + +A package with an implant line, a ward tier as `item.modifier`, and the STG questionnaire answered under `supportingInfo`. + +#### T-PRE-06 Auto-approval (PMJAY) + +A first preauthorisation on a case whose packages all allow it comes back approved without a desk action. + +### Claim + +#### T-CLM-01 Approved + +Workflow `15`, acknowledged on `25`, approved on `26`, after an approved preauthorisation, with the discharge biometric token or consent. + +#### T-CLM-02 Queried, answered and approved + +Workflow `15`, `25`, `27`, `151`, `26`. Under PMJAY the answer goes on `161`. The documents asked for ride in `supportingInfo`. + +#### T-CLM-03 Rejected and reprocessed + +Workflow `15`, `291`, then a reprocess Task on `36` with the justification attached, acknowledged on `37`, decided on `252` or `253`. + +#### T-CLM-04 Discharge in every mode (PMJAY) + +`DTH`, `DTM`, `LAMA` and `DAMA`, with the amount each one allows: `LM100` per day for LAMA or DAMA before or during surgery, the full package after surgery, and the death date under `ONS/DTM` for `DTM`. + +#### T-CLM-05 Shortfall after partial payment (PMJAY) + +A Task with reason `partialpayment` after payment notice `33` is acknowledged; refused before it. + +#### T-CLM-06 Unusual cases (PMJAY) + +An unspecified procedure `SGU100`; a cyclic procedure across several visits; a newborn on the parent's card; twins. + +#### T-CLM-07 Provisional discharge + +Where the payer supports it: submitted on `14`, then approved, rejected and queried. + +### Payment + +#### T-PAY-01 Payment notices acknowledged + +Notices on `30`, `31` and `33`, each acknowledged on `17` under PMJAY or with the notice's own code on the generic network. The UTR on `33` is stored. + +### Communication + +#### T-COM-01 A communication of each reason + +`additionalinfo`, `tatquery`, `grievance`, `walletupdate`, `policychange`, `claimArbitration`, each acknowledged within thirty seconds without touching the case status. + +### Callbacks + +#### T-CBK-01 The same callback twice + +The second delivery is recognised by `x-hcx-api_call_id` and answered `202` without acting twice. + +#### T-CBK-02 Unknown correlation id + +A callback for a thread this system never opened is answered `202` and logged, not processed. + +#### T-CBK-03 A protocol response + +A `ProtocolResponse` body, with its `x-hcx-error_details`, handled without attempting to decrypt. + +#### T-CBK-04 The error endpoint + +A report on `/v1/error` answered `202` and surfaced to the desk as a failed delivery, not a case under review. + +### Session and keys + +#### T-SES-01 Token expiry mid-flow + +A `401` on any call leads to a fresh session token and one retry, never a retry with the same token. + +#### T-SES-02 Certificate rotation on the payer side + +A decrypt failure on the payer's side clears the cached certificate and fetches it again before resending. + +## PMJAY HMIS test cases + +The NHCX-PMJAY-HMIS test case workbook carries eight worked cases for a hospital system integrating PMJAY through NHCX. They are reproduced here as published. + +| Id | Scenario | Precondition | API or resource | Inputs | Validation | Expected output | Remark | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| `TC-ABHA-01` | Validate the PMJAY policy using ABHA | Valid ABHA, consent available | `CoverageEligibilityRequest`, purpose `validation` | ABHA `91-XXXX-XXXX-XXXX`, purpose `validation` | ABHA linkage and an active policy | `CoverageEligibilityResponse` with active coverage | Happy path | +| `TC-HBP-01` | Fetch the admissible HBP package | Policy validated | `InsurancePlan` | Plan id `PMJAY-TS-001`, provider id `HOSP123`, payer id `SHA-HARYANA` | Provider validated against the state's network hospitals | `InsurancePlan` with all HBP packages, their inclusions and exclusions, claim conditions and document requirements | State-specific HBP applied | +| `TC-CE-01` | Coverage eligibility for auth-requirements | Wallet available | `CoverageEligibilityRequest`, purpose `auth-requirements` | Amount `25000`, package `HBP-123` | Wallet balance and specialty rules | Eligible, balance sufficient | Preauth allowed | +| `TC-PA-01` | Submit a preauthorisation | Eligibility successful | `/preauth/submit`, `Claim` | Diagnosis `I10`, treatment plan, supporting documents, doctor details | Clinical and financial rules | Preauth id generated, status `PENDING` | Sent to workflow | +| `TC-PA-02` | Submit a preauthorisation query update | Preauthorisation submitted | `/preauth/submit`, `Claim` | Additional documents | Preauthorisation and treatment details match | Query details accepted for adjudication | Sent to workflow | +| `TC-CL-01` | Submit the claim after discharge | Preauthorisation approved | `/claim/submit`, `Claim` | Approved amount `23000`, documents attached | Preauthorisation and treatment details match | Claim accepted for adjudication | Sent to workflow | +| `TC-CL-02` | Submit a claim query update | Claim submitted | `/claim/submit`, `Claim` | Documents | Claim and treatment details match | Query details accepted for adjudication | Sent to workflow | +| `TC-CL-03` | Submit a CRC claim | Claim rejected or partially paid | `/task/submit`, `Task` | Not given | Claim and treatment details match | Not given | Not given | + +`TC-CL-03` is incomplete in the workbook: it gives no inputs, expected output or remark. Both query updates go to the same endpoint as the first submission; the workflow code tells them apart, as PMJAY Provider sets out. + +### The scenario list + +The workbook's second sheet is a bare list of nineteen scenario names, with no steps, inputs or amounts. Many of them have no worked case above. + +| No. | Scenario | +| :---- | :---- | +| 1 | Registration | +| 2 | Wallet update | +| 3 | Registration cancel | +| 4 | Preauthorisation submission | +| 5 | Preauthorisation query | +| 6 | Preauthorisation submitted with the query response | +| 7 | Preauthorisation enhancement | +| 8 | Preauthorisation with implant | +| 9 | Preauthorisation resubmission | +| 10 | Preauthorisation rejection | +| 11 | Preauthorisation approval | +| 12 | Preauthorisation cancel or delete | +| 13 | Discharge in multiple modes, and the amount calculation for each | +| 14 | Claim submission | +| 15 | Claim query | +| 16 | Claim rejection | +| 17 | Claim approval | +| 18 | Claim final paid, and update at the payer's bank transaction detail | +| 19 | CRC in case of claim rejection and partial payment | + +The workbook does not give the amounts for scenario 13. The discharge modes and what each one allows are in T-CLM-04 above. + +## Where the first week goes wrong + +Roughly in the order the portal's own support list has them: + +1. Wrong status word on a leg of the message. +2. No `/v1/error` endpoint. +3. Callback answering with something other than 202 and the receipt. +4. Envelope headers missing or malformed. +5. Registry id inside the bundle not matching the participant record. +6. `Accept: application/json` missing. +7. Sending to `payerid` instead of `processingid`. +8. Reusing a correlation id after an error. +9. Retrying a `401` with the same token. +10. Package code or display not matching the plan, character for character. + +## Exchanges this documentation does not cover + +The workflow sheet defines families that no NHA document describes beyond their codes. A participant may receive one; log it and escalate rather than ignore it. + +- Final bill: `45` submitted, `46` approved, `47` queried, `181` query answered, `491` denied. +- Reimbursement claims: `R15`, `R151`, `R26`, `R27`, `R28`, `R291`, `R122`, `R252` to `R254`. +- Discharge correction: `DC01`, `DC02`. +- Preauthorisation arbitration: `41`, `42`. +- Wallet upgrade `34`, `35`; fraud alert `38`, `39`; grievance `G11`, `G12`, `G13`. +- `16`, for a preauthorisation resubmission. + +## Before going live + +- FHIR bundles emailed for NRCeS validation and passed. +- Internal demo with NHA, then the HTC demo. +- Production participant created through the passcode flow; certificate and callback URL registered; own certificate fetched back and checked. +- Under PMJAY, the HEM-to-participant mapping ticket raised, and staff briefed that in-flight TMS cases finish in TMS; see PMJAY Provider. +- A pilot on a few real cases before switching the whole hospital. diff --git a/site/docs/nhcx/v1/building-a-provider/registration-and-eligibility.md b/site/docs/nhcx/v1/roles/provider/registration-and-eligibility.md similarity index 82% rename from site/docs/nhcx/v1/building-a-provider/registration-and-eligibility.md rename to site/docs/nhcx/v1/roles/provider/registration-and-eligibility.md index fb4c833cb..7d7452cee 100644 --- a/site/docs/nhcx/v1/building-a-provider/registration-and-eligibility.md +++ b/site/docs/nhcx/v1/roles/provider/registration-and-eligibility.md @@ -1,10 +1,14 @@ --- title: Registration and eligibility sidebar_label: Registration and eligibility -description: "The first screen: finding the policy, confirming cover before the patient is registered, and what to store from the answer." -verification: unverified -source: Coverage Eligibility (NHA); Insurance Plan Implementation Guide, CoverageEligibility; NHCX Integration Handbook §5, §7; Standard Error Codes, Payer and Coverage sidebar_position: 2 +description: Patient intake, Aadhaar eKYC and biometrics, and the coverage check +verification: unverified +source: nhcx-package/docs/03-Building a Provider/02-Registration and Eligibility.md +generated: true +sidebar_custom_props: + roles: + - provider --- # Registration and eligibility @@ -13,17 +17,15 @@ This chapter comes before the Insurance Plan chapter because registration comes The first screen decides whether the rest of the journey can happen. A patient who is registered without a confirmed policy and a confirmed processor code will fail at preauthorisation with errors that look like FHIR problems and are not. -## In short - -- The first screen decides whether the rest of the journey can happen. -- Register the patient only once eligibility with purpose validation comes back positive. -- Send eligibility to the processor code from the policy lookup, and call it again whenever a treatment is added. -- Store the answer: the auth-requirements version of the same call drives the document checklist later. - ## What the user does **Search.** The front desk enters one identifier: ABHA number, member or policy number, or mobile. The system tries them in that order of strength and shows the matching policies with the insurer's name. The user picks the payer. +**Beneficiary Verification & KYC.** +Before checking eligibility, the patient's identity is established: +- **Commercial / Private Insurance**: Uses the **Aadhaar Digital eKYC API**. The desk triggers an Aadhaar OTP or demographic validation, retrieving the beneficiary's verified ABHA profile (Name, DOB, Gender, Address, Photo) and unhyphenated ABHA ID for the envelope (`x-hcx-ben-abha-id`). +- **PMJAY Scheme**: Gated by **Mandatory Biometric Authentication**. The patient performs a live biometric verification (Fingerprint, Iris, or FaceAuth) via the ABDM biometric gateway (see Biometric Authentication), returning a user auth token (valid 1,800s). If the patient cannot be biometrically authenticated due to physical trauma, burns, or amputation, the hospital executes the signed **Aadhaar Exemption Consent Form** and submits the Authentication Consent Questionnaire. + **Confirm cover.** The screen calls eligibility with purpose validation and shows the result in words the desk can act on: policy in force or not, and what remains against the sum insured. Register the patient only once this comes back positive. If the limit is exhausted or the policy is not in force, say so and stop; do not let a registration proceed on a promise. **Capture the rest.** Communication address, attendant details, and whatever the payer's plan lists as required at registration. @@ -43,14 +45,14 @@ Call eligibility again, still with purpose validation, whenever a treatment is a ```mermaid sequenceDiagram - box rgb(220,239,227) Provider side + box Provider side participant D as Front desk participant B as Provider backend end - box rgb(227,240,240) Exchange + box Exchange participant X as NHCX end - box rgb(220,232,245) Payer side + box Payer side participant Y as Payer end D->>B: identifier typed at the desk @@ -81,7 +83,7 @@ One `CoverageEligibilityRequest` carries four different questions, and `purpose` ## What goes in the bundle -A `CoverageEligibilityRequest` in a collection bundle, alongside the `Patient`, the provider and insurer `Organization`s, the `Coverage`, and the `PractitionerRole` of the person making the check. +A `CoverageEligibilityRequest` in a collection bundle, alongside the `Patient`, the provider and insurer `Organization`s, the `Coverage`, and the `Practitioner` who made the check. | Element | Set it to | | :---- | :---- | @@ -90,7 +92,7 @@ A `CoverageEligibilityRequest` in a collection bundle, alongside the `Patient`, | `insurer`, `provider` | References to the two Organizations | | `insurance.coverage` | Reference to the Coverage carrying the policy code | | `servicedDate` | Today | -| `enterer` | The desk user, as a PractitionerRole | +| `enterer` | The desk user. The samples send a `Practitioner`; the handbook asks for a `PractitionerRole`. FHIR allows either and the published bundles use `Practitioner`, so send that | Element tables and a worked example are in the FHIR Reference. Two details from the samples save a day each. The `Patient` carries a `PI` identifier that is the hospital's own MRN, and a hospital with none yet sends the literal string `NA`. And `servicedDate` is the date of service, not the date of asking. @@ -115,6 +117,10 @@ Three traps in that bundle, all of them real in the published sample. **The balance is a subtraction.** `allowedMoney` alone reads as more cover than the patient has. Show allowed less used, and group the digits the Indian way. +## The forward instruction + +The coverage eligibility specification gives it one sentence: a payer might respond with a forward instruction asking NHCX to submit the same request to another payer. No fields or flow are published for it, so there is nothing to build against. Ask about it at onboarding; Governance and Audit lists the question. + ## Errors you will meet Business refusals travel inside the sealed response as a `PAYR-` code; protocol refusals arrive on the envelope. Map each to something the desk can act on. diff --git a/site/docs/nhcx/v1/building-a-provider/ui-guide.md b/site/docs/nhcx/v1/roles/provider/ui-guide.md similarity index 94% rename from site/docs/nhcx/v1/building-a-provider/ui-guide.md rename to site/docs/nhcx/v1/roles/provider/ui-guide.md index 5e01e1b2d..2fcfd7e7a 100644 --- a/site/docs/nhcx/v1/building-a-provider/ui-guide.md +++ b/site/docs/nhcx/v1/roles/provider/ui-guide.md @@ -1,10 +1,14 @@ --- title: Provider UI guide sidebar_label: Provider UI guide -description: "The provider screens flow by flow: what the user sees, what the UI must enforce, and where each value on screen comes from." +sidebar_position: 9 +description: Provider desk wireframes and UX recommendations verification: unverified -source: NHCX-PMJAY-HMIS Integration Guide §5.2, TMS provider application steps; NHCX APIs to be called based on scenario, place-to-call column; NHCX Integration Handbook §5 and Appendix C; NHCX-PMJAY-HMIS Test Cases, scenario list; Standard Error Codes -sidebar_position: 8 +source: nhcx-package/docs/03-Building a Provider/09-UI Guide.md +generated: true +sidebar_custom_props: + roles: + - provider --- # Provider UI guide @@ -21,14 +25,6 @@ That rule has a consequence which is easy to miss. A case the payer has not answ A case is keyed by its correlation ID, which the provider generates and which stays fixed for the whole conversation, so it is the only identifier available at the moment of submission. The payer's own case or preauthorisation number arrives later, on the answer. Show the payer's number to the user, since that is the number they will quote on the phone, but address the case internally by the correlation ID. Screen addresses are yours to choose; the chapter does not prescribe them. -## In short - -- Two rules run through every screen: nothing the exchange already knows is typed, and no decision is shown that the exchange has not sent. -- Keep a record of what you sent as well as what came back, or a waiting case cannot be rendered. -- A case is keyed internally by correlation ID; the payer's own number arrives later and is what users quote. -- Seven flows cover the same ground as the rest of the section, screen by screen. -- Two things break a naive screen: a delivery failure on an answered case, and the same answer delivered twice. - ## Where the data comes from ```mermaid From bdf18463d23b9b0b7454c0fd3e50c7039a180f5b Mon Sep 17 00:00:00 2001 From: Soubhik BIswas Date: Mon, 14 Sep 2026 00:59:07 +0530 Subject: [PATCH 6/7] fix check:routes after the nhcx module rename, and keep glossary atoms on pages that agree with them check:routes was red because catalogue/atom-routes.json still named the nhcx pages as they were before the rename: nhcx-gateway became session, recipient-certificate became fetching-a-recipient-certificate, and nhcx-glossary became glossary. Regenerating alone moved two glossary atoms onto wrong nhcx pages: - shared.glossary.timestamp-header, a verified atom saying TIMESTAMP is ISO 8601 UTC, moved to the nhcx envelope fields page, whose Timestamp section is a Unix time field. A heading on another gateway's reference page no longer beats a mention on the atom's own gateway. - shared.glossary.dsc matched the DSCHD code on the nhcx codes page. The fallback now matches whole words only, so it is unmapped again. A heading on another gateway's glossary still counts as a definition, so shared.glossary.eua and shared.glossary.hspa keep their uhi entries. Also commits the generated files the rename left stale: the nhcx api _category_.json files and site/src/data/reference-links.json. --- catalogue/atom-routes.json | 16 +++--- scripts/build-atom-routes.mjs | 46 ++++++++++----- .../nhcx/v1/api/adjudicator/_category_.json | 4 ++ .../nhcx/v1/api/biometric/_category_.json | 4 ++ site/docs/nhcx/v1/api/claim/_category_.json | 4 ++ .../nhcx/v1/api/communication/_category_.json | 4 ++ .../nhcx/v1/api/eligibility/_category_.json | 4 ++ .../v1/api/insurance-plan/_category_.json | 4 ++ .../nhcx/v1/api/onboarding/_category_.json | 4 ++ site/docs/nhcx/v1/api/other/_category_.json | 4 ++ .../v1/api/payment-notice/_category_.json | 4 ++ site/docs/nhcx/v1/api/preauth/_category_.json | 4 ++ .../v1/api/predetermination/_category_.json | 4 ++ .../docs/nhcx/v1/api/registry/_category_.json | 4 ++ site/docs/nhcx/v1/api/session/_category_.json | 4 ++ site/docs/nhcx/v1/api/status/_category_.json | 4 ++ site/src/data/reference-links.json | 56 ++++++++++++++++--- 17 files changed, 145 insertions(+), 29 deletions(-) create mode 100644 site/docs/nhcx/v1/api/adjudicator/_category_.json create mode 100644 site/docs/nhcx/v1/api/biometric/_category_.json create mode 100644 site/docs/nhcx/v1/api/claim/_category_.json create mode 100644 site/docs/nhcx/v1/api/communication/_category_.json create mode 100644 site/docs/nhcx/v1/api/eligibility/_category_.json create mode 100644 site/docs/nhcx/v1/api/insurance-plan/_category_.json create mode 100644 site/docs/nhcx/v1/api/onboarding/_category_.json create mode 100644 site/docs/nhcx/v1/api/other/_category_.json create mode 100644 site/docs/nhcx/v1/api/payment-notice/_category_.json create mode 100644 site/docs/nhcx/v1/api/preauth/_category_.json create mode 100644 site/docs/nhcx/v1/api/predetermination/_category_.json create mode 100644 site/docs/nhcx/v1/api/registry/_category_.json create mode 100644 site/docs/nhcx/v1/api/session/_category_.json create mode 100644 site/docs/nhcx/v1/api/status/_category_.json diff --git a/catalogue/atom-routes.json b/catalogue/atom-routes.json index 3f2197a9e..2b5fec530 100644 --- a/catalogue/atom-routes.json +++ b/catalogue/atom-routes.json @@ -269,9 +269,9 @@ { "atom": "hiecm.endpoint.gateway-sessions", "type": "endpoint", - "route": "/docs/nhcx/v1/api/nhcx-gateway/endpoints/nhcx-sessions-create", + "route": "/docs/nhcx/v1/api/session/endpoints/session-session-token", "anchor": null, - "link": "/docs/nhcx/v1/api/nhcx-gateway/endpoints/nhcx-sessions-create", + "link": "/docs/nhcx/v1/api/session/endpoints/session-session-token", "rule": "method and path join, module unconfirmed", "confidence": "needs review" }, @@ -1520,10 +1520,10 @@ { "atom": "shared.glossary.key-material", "type": "glossary", - "route": "/docs/nhcx/v1/getting-started/recipient-certificate", + "route": "/docs/nhcx/v1/getting-started/fetching-a-recipient-certificate", "anchor": "what-comes-back", - "link": "/docs/nhcx/v1/getting-started/recipient-certificate#what-comes-back", - "rule": "term defined on recipient-certificate", + "link": "/docs/nhcx/v1/getting-started/fetching-a-recipient-certificate#what-comes-back", + "rule": "term defined on fetching-a-recipient-certificate", "confidence": "derived" }, { @@ -1682,10 +1682,10 @@ { "atom": "shared.glossary.snomed-ct", "type": "glossary", - "route": "/docs/nhcx/v1/getting-started/nhcx-glossary", + "route": "/docs/nhcx/v1/getting-started/glossary", "anchor": "organisations-and-programmes", - "link": "/docs/nhcx/v1/getting-started/nhcx-glossary#organisations-and-programmes", - "rule": "term defined on nhcx-glossary", + "link": "/docs/nhcx/v1/getting-started/glossary#organisations-and-programmes", + "rule": "term defined on glossary", "confidence": "derived" }, { diff --git a/scripts/build-atom-routes.mjs b/scripts/build-atom-routes.mjs index 871b8319b..ea02f60a3 100644 --- a/scripts/build-atom-routes.mjs +++ b/scripts/build-atom-routes.mjs @@ -83,7 +83,10 @@ const pages = files.filter((f) => !isPartial(f)).map((f) => { // whole body: slicing first can cut a heading line in half and yield a // truncated anchor that does not exist on the rendered page. function headingFor(body, needle) { - const i = body.toLowerCase().indexOf(needle.toLowerCase()); + return headingAt(body, body.toLowerCase().indexOf(needle.toLowerCase())); +} + +function headingAt(body, i) { if (i < 0) return null; // Both levels: a glossary term is a "### Term", and landing a reader on // the term beats landing them on the section that contains it. @@ -221,22 +224,39 @@ for (const [id, atom] of atoms) { // terms like X-CM-ID are defined where they are used, not in the list. const candidates = [glossaryPage, ...pages.filter((p) => /\/reference\/|\/getting-started\//.test(p.route))] .filter(Boolean); + // The atom's own gateway is searched first, and a shared atom counts + // HIE-CM as its own. + const home = `/docs/${fm.gateway === "shared" ? "hiecm" : fm.gateway}/`; + const mine = candidates.filter((p) => p.route.startsWith(home)); + const others = candidates.filter((p) => !p.route.startsWith(home)); + const glossaries = candidates.filter((p) => /glossary$/.test(p.route)); + const esc = term.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // A glossary term must anchor on its own heading, never on the first // place the string appears: "M2" occurs inside the ECDH definition, and // a citation that lands a reader on the wrong term is worse than one // that lands them on the top of the page. - const heading = new RegExp(`^#{2,4}\\s+${term.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s*$`, "im"); - const owns = candidates.find((p) => heading.test(p.body)); - if (owns) { - route = owns.route; anchor = slug(term); - rule = `term defined under its own heading on ${basename(owns.route)}`; - confidence = "derived"; - } - const page = owns ? null : candidates.find((p) => p.body.toLowerCase().includes(term.toLowerCase())); - if (page) { - const h = headingFor(page.body, term); - route = page.route; anchor = h ? slug(h) : null; - rule = `term defined on ${basename(page.route)}`; confidence = "derived"; + const heading = new RegExp(`^#{2,4}\\s+${esc}\\s*$`, "im"); + // Anywhere else the term must stand as a whole word: "DSC" is not "DSCHD". + const word = new RegExp(`(? re.test(p.body)); + if (!page) continue; + route = page.route; confidence = "derived"; + if (re === heading) { + anchor = slug(term); + rule = `term defined under its own heading on ${basename(page.route)}`; + } else { + const h = headingAt(page.body, page.body.search(word)); + anchor = h ? slug(h) : null; + rule = `term defined on ${basename(page.route)}`; + } + break; } } diff --git a/site/docs/nhcx/v1/api/adjudicator/_category_.json b/site/docs/nhcx/v1/api/adjudicator/_category_.json new file mode 100644 index 000000000..7d8d05b70 --- /dev/null +++ b/site/docs/nhcx/v1/api/adjudicator/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "PMJAY adjudicator", + "position": 13 +} diff --git a/site/docs/nhcx/v1/api/biometric/_category_.json b/site/docs/nhcx/v1/api/biometric/_category_.json new file mode 100644 index 000000000..583ad89be --- /dev/null +++ b/site/docs/nhcx/v1/api/biometric/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "ABHA biometric authentication", + "position": 15 +} diff --git a/site/docs/nhcx/v1/api/claim/_category_.json b/site/docs/nhcx/v1/api/claim/_category_.json new file mode 100644 index 000000000..8e3d2c92a --- /dev/null +++ b/site/docs/nhcx/v1/api/claim/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Claim", + "position": 6 +} diff --git a/site/docs/nhcx/v1/api/communication/_category_.json b/site/docs/nhcx/v1/api/communication/_category_.json new file mode 100644 index 000000000..9220fa183 --- /dev/null +++ b/site/docs/nhcx/v1/api/communication/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Communication", + "position": 8 +} diff --git a/site/docs/nhcx/v1/api/eligibility/_category_.json b/site/docs/nhcx/v1/api/eligibility/_category_.json new file mode 100644 index 000000000..a395ae3a8 --- /dev/null +++ b/site/docs/nhcx/v1/api/eligibility/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Coverage eligibility", + "position": 3 +} diff --git a/site/docs/nhcx/v1/api/insurance-plan/_category_.json b/site/docs/nhcx/v1/api/insurance-plan/_category_.json new file mode 100644 index 000000000..97506a899 --- /dev/null +++ b/site/docs/nhcx/v1/api/insurance-plan/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Insurance plan", + "position": 10 +} diff --git a/site/docs/nhcx/v1/api/onboarding/_category_.json b/site/docs/nhcx/v1/api/onboarding/_category_.json new file mode 100644 index 000000000..21bdf9ef3 --- /dev/null +++ b/site/docs/nhcx/v1/api/onboarding/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Onboarding", + "position": 12 +} diff --git a/site/docs/nhcx/v1/api/other/_category_.json b/site/docs/nhcx/v1/api/other/_category_.json new file mode 100644 index 000000000..8245417a7 --- /dev/null +++ b/site/docs/nhcx/v1/api/other/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Other", + "position": 14 +} diff --git a/site/docs/nhcx/v1/api/payment-notice/_category_.json b/site/docs/nhcx/v1/api/payment-notice/_category_.json new file mode 100644 index 000000000..fab1d2a96 --- /dev/null +++ b/site/docs/nhcx/v1/api/payment-notice/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Payment notice", + "position": 7 +} diff --git a/site/docs/nhcx/v1/api/preauth/_category_.json b/site/docs/nhcx/v1/api/preauth/_category_.json new file mode 100644 index 000000000..1d41cdc32 --- /dev/null +++ b/site/docs/nhcx/v1/api/preauth/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Pre-authorisation", + "position": 4 +} diff --git a/site/docs/nhcx/v1/api/predetermination/_category_.json b/site/docs/nhcx/v1/api/predetermination/_category_.json new file mode 100644 index 000000000..e5bae320c --- /dev/null +++ b/site/docs/nhcx/v1/api/predetermination/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Predetermination", + "position": 5 +} diff --git a/site/docs/nhcx/v1/api/registry/_category_.json b/site/docs/nhcx/v1/api/registry/_category_.json new file mode 100644 index 000000000..8957ff92d --- /dev/null +++ b/site/docs/nhcx/v1/api/registry/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Participant registry", + "position": 11 +} diff --git a/site/docs/nhcx/v1/api/session/_category_.json b/site/docs/nhcx/v1/api/session/_category_.json new file mode 100644 index 000000000..487914d6f --- /dev/null +++ b/site/docs/nhcx/v1/api/session/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Session", + "position": 2 +} diff --git a/site/docs/nhcx/v1/api/status/_category_.json b/site/docs/nhcx/v1/api/status/_category_.json new file mode 100644 index 000000000..76c004b5c --- /dev/null +++ b/site/docs/nhcx/v1/api/status/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Status and search", + "position": 9 +} diff --git a/site/src/data/reference-links.json b/site/src/data/reference-links.json index 6c02bdc21..9145b6fbe 100644 --- a/site/src/data/reference-links.json +++ b/site/src/data/reference-links.json @@ -36,19 +36,59 @@ "to": "/reference/hiecm-phr-services" }, { - "label": "NHCX biometric authentication", - "to": "/reference/nhcx-biometric" + "label": "Session", + "to": "/reference/nhcx-session" + }, + { + "label": "Coverage eligibility", + "to": "/reference/nhcx-eligibility" + }, + { + "label": "Pre-authorisation", + "to": "/reference/nhcx-preauth" + }, + { + "label": "Predetermination", + "to": "/reference/nhcx-predetermination" + }, + { + "label": "Claim", + "to": "/reference/nhcx-claim" + }, + { + "label": "Payment notice", + "to": "/reference/nhcx-payment-notice" }, { - "label": "NHCX session token", - "to": "/reference/nhcx-gateway" + "label": "Communication", + "to": "/reference/nhcx-communication" }, { - "label": "NHCX participant service", - "to": "/reference/nhcx-participant" + "label": "Status and search", + "to": "/reference/nhcx-status" }, { - "label": "NHCX use case endpoints", - "to": "/reference/nhcx-usecases" + "label": "Insurance plan", + "to": "/reference/nhcx-insurance-plan" + }, + { + "label": "Participant registry", + "to": "/reference/nhcx-registry" + }, + { + "label": "Onboarding", + "to": "/reference/nhcx-onboarding" + }, + { + "label": "PMJAY adjudicator", + "to": "/reference/nhcx-adjudicator" + }, + { + "label": "Other", + "to": "/reference/nhcx-other" + }, + { + "label": "ABHA biometric authentication", + "to": "/reference/nhcx-biometric" } ] From 1a290bd4edcafacb50cc7b126a6c3d6fa31b68a8 Mon Sep 17 00:00:00 2001 From: Soubhik BIswas Date: Tue, 15 Sep 2026 03:15:49 +0530 Subject: [PATCH 7/7] added nhcx skills and plugin --- .claude-plugin/marketplace.json | 28 +- README.md | 4 +- catalogue/atom-routes.json | 4909 ++++++++++++++++- catalogue/nhcx/README.md | 4 + catalogue/nhcx/callbacks/claim-on-submit.md | 303 + catalogue/nhcx/callbacks/claim-submit.md | 267 + .../callbacks/communication-on-request.md | 286 + .../nhcx/callbacks/communication-request.md | 256 + .../callbacks/coverageeligibility-check.md | 253 + .../callbacks/coverageeligibility-on-check.md | 292 + catalogue/nhcx/callbacks/error.md | 217 + .../callbacks/insuranceplan-on-request.md | 287 + .../nhcx/callbacks/insuranceplan-request.md | 257 + .../nhcx/callbacks/notification-delivery.md | 160 + catalogue/nhcx/callbacks/on-status.md | 208 + .../callbacks/paymentnotice-on-request.md | 289 + .../nhcx/callbacks/paymentnotice-request.md | 259 + catalogue/nhcx/callbacks/preauth-on-submit.md | 314 ++ catalogue/nhcx/callbacks/preauth-submit.md | 285 + .../callbacks/predetermination-on-submit.md | 280 + .../nhcx/callbacks/predetermination-submit.md | 246 + catalogue/nhcx/callbacks/search-on-submit.md | 285 + catalogue/nhcx/callbacks/search-submit.md | 254 + catalogue/nhcx/callbacks/status.md | 156 + catalogue/nhcx/callbacks/task-on-submit.md | 306 + catalogue/nhcx/callbacks/task-submit.md | 273 + catalogue/nhcx/concepts/access-control.md | 126 + .../concepts/audit-and-non-repudiation.md | 130 + .../nhcx/concepts/beneficiary-consent.md | 138 + .../nhcx/concepts/biometric-authentication.md | 134 + catalogue/nhcx/concepts/claim-cycle.md | 149 + .../concepts/coverage-eligibility-purposes.md | 124 + .../nhcx/concepts/encryption-certificate.md | 120 + catalogue/nhcx/concepts/error-code-spaces.md | 197 + catalogue/nhcx/concepts/fhir-in-nhcx.md | 147 + catalogue/nhcx/concepts/four-message-legs.md | 111 + .../nhcx/concepts/grievance-redressal.md | 122 + .../concepts/hmis-integration-architecture.md | 115 + catalogue/nhcx/concepts/insurance-plan.md | 138 + catalogue/nhcx/concepts/jwe-envelope.md | 134 + .../nhcx/concepts/message-identifiers.md | 116 + catalogue/nhcx/concepts/notifications.md | 117 + catalogue/nhcx/concepts/participant-code.md | 133 + .../nhcx/concepts/participant-registry.md | 136 + catalogue/nhcx/concepts/participant-roles.md | 145 + catalogue/nhcx/concepts/pmjay-on-nhcx.md | 125 + catalogue/nhcx/concepts/policy-linking.md | 125 + catalogue/nhcx/concepts/protocol-headers.md | 130 + .../concepts/queries-and-communication.md | 124 + .../nhcx/concepts/reprocess-and-cancel.md | 132 + catalogue/nhcx/concepts/retries-and-expiry.md | 112 + catalogue/nhcx/concepts/session-token.md | 114 + catalogue/nhcx/concepts/status-lifecycle.md | 114 + .../concepts/synchronous-acknowledgement.md | 119 + catalogue/nhcx/concepts/what-nhcx-is.md | 140 + catalogue/nhcx/concepts/workflow-codes.md | 124 + .../nhcx/decisions/biometric-modality.md | 104 + .../nhcx/decisions/eligibility-purpose.md | 95 + catalogue/nhcx/decisions/jwe-serialisation.md | 99 + .../decisions/key-encryption-algorithm.md | 94 + .../nhcx/decisions/payer-implementation.md | 106 + .../decisions/preauth-or-predetermination.md | 97 + catalogue/nhcx/decisions/session-endpoint.md | 118 + .../nhcx/decisions/status-poll-or-wait.md | 99 + .../endpoints/abha-biometric-auth-init.md | 117 + .../abha-biometric-auth-refresh-token.md | 94 + .../endpoints/abha-biometric-auth-verify.md | 129 + .../endpoints/abha-biometric-capture-pid.md | 99 + .../endpoints/abha-biometric-faceauth-init.md | 103 + .../abha-biometric-v2-auth-verify.md | 128 + catalogue/nhcx/endpoints/claim-on-submit.md | 192 + catalogue/nhcx/endpoints/claim-submit.md | 207 + .../endpoints/communication-on-request.md | 184 + .../nhcx/endpoints/communication-request.md | 189 + .../endpoints/coverageeligibility-check.md | 194 + .../endpoints/coverageeligibility-on-check.md | 183 + .../dummy-payer-paymentnotice-init.md | 89 + .../endpoints/dummy-payer-process-request.md | 97 + catalogue/nhcx/endpoints/fetch-certs.md | 126 + .../nhcx/endpoints/fetch-participants-list.md | 138 + catalogue/nhcx/endpoints/get-session.md | 112 + .../endpoints/insuranceplan-on-request.md | 179 + .../nhcx/endpoints/insuranceplan-request.md | 195 + .../nhcx/endpoints/notification-subscribe.md | 123 + catalogue/nhcx/endpoints/on-status.md | 146 + .../nhcx/endpoints/participant-create.md | 160 + .../participant-delink-abha-policy.md | 116 + .../nhcx/endpoints/participant-details.md | 93 + .../endpoints/participant-get-policies.md | 133 + .../endpoints/participant-link-abha-policy.md | 129 + .../nhcx/endpoints/participant-search.md | 120 + .../nhcx/endpoints/participant-update.md | 120 + .../endpoints/payer-service-get-user-role.md | 112 + .../endpoints/payer-service-process-case.md | 115 + .../endpoints/paymentnotice-on-request.md | 192 + .../nhcx/endpoints/paymentnotice-request.md | 189 + catalogue/nhcx/endpoints/preauth-on-submit.md | 194 + catalogue/nhcx/endpoints/preauth-submit.md | 211 + .../endpoints/predetermination-on-submit.md | 153 + .../nhcx/endpoints/predetermination-submit.md | 158 + catalogue/nhcx/endpoints/search-on-submit.md | 172 + catalogue/nhcx/endpoints/search-submit.md | 179 + catalogue/nhcx/endpoints/session-token.md | 124 + catalogue/nhcx/endpoints/status.md | 172 + catalogue/nhcx/endpoints/task-on-submit.md | 183 + catalogue/nhcx/endpoints/task-submit.md | 190 + catalogue/nhcx/endpoints/update-validate.md | 106 + .../nhcx/endpoints/v2-participant-create.md | 146 + .../v2-participant-delink-abha-policy.md | 100 + .../endpoints/v2-participant-get-policies.md | 110 + .../v2-participant-link-abha-policy.md | 101 + .../nhcx/endpoints/v2-participant-update.md | 120 + catalogue/nhcx/endpoints/v2-update-cert.md | 99 + catalogue/nhcx/endpoints/validate.md | 97 + catalogue/nhcx/errors/err-pyr-clm-007.md | 73 + catalogue/nhcx/errors/nhcx-1001.md | 82 + catalogue/nhcx/errors/nhcx-1002.md | 71 + catalogue/nhcx/errors/nhcx-1003.md | 74 + catalogue/nhcx/errors/nhcx-1004.md | 72 + catalogue/nhcx/errors/nhcx-1005.md | 73 + catalogue/nhcx/errors/nhcx-1006.md | 71 + catalogue/nhcx/errors/nhcx-1007.md | 70 + catalogue/nhcx/errors/nhcx-1008.md | 64 + catalogue/nhcx/errors/nhcx-1009.md | 65 + catalogue/nhcx/errors/nhcx-1010.md | 75 + catalogue/nhcx/errors/nhcx-1011.md | 75 + catalogue/nhcx/errors/nhcx-1012.md | 68 + catalogue/nhcx/errors/nhcx-1013.md | 67 + catalogue/nhcx/errors/nhcx-1014.md | 79 + catalogue/nhcx/errors/nhcx-1015.md | 107 + catalogue/nhcx/errors/nhcx-1016.md | 67 + catalogue/nhcx/errors/nhcx-1017.md | 107 + catalogue/nhcx/errors/nhcx-1018.md | 71 + catalogue/nhcx/errors/nhcx-401.md | 72 + catalogue/nhcx/errors/payr-1001.md | 84 + catalogue/nhcx/errors/payr-1002.md | 76 + catalogue/nhcx/errors/payr-1003.md | 90 + catalogue/nhcx/errors/payr-1004.md | 101 + catalogue/nhcx/errors/payr-1005.md | 99 + catalogue/nhcx/errors/payr-1006.md | 94 + catalogue/nhcx/errors/payr-1007.md | 92 + catalogue/nhcx/errors/payr-1008.md | 97 + catalogue/nhcx/errors/payr-1009.md | 92 + catalogue/nhcx/errors/payr-1010.md | 91 + catalogue/nhcx/errors/payr-1011.md | 85 + catalogue/nhcx/errors/payr-1012.md | 86 + catalogue/nhcx/errors/payr-1013.md | 91 + catalogue/nhcx/errors/payr-1014.md | 95 + catalogue/nhcx/errors/payr-1015.md | 84 + catalogue/nhcx/errors/payr-1016.md | 86 + catalogue/nhcx/errors/payr-1017.md | 97 + catalogue/nhcx/errors/payr-1018.md | 96 + catalogue/nhcx/errors/payr-1019.md | 92 + catalogue/nhcx/errors/payr-1020.md | 86 + catalogue/nhcx/errors/payr-1021.md | 122 + catalogue/nhcx/errors/payr-1023.md | 105 + catalogue/nhcx/errors/payr-1024.md | 104 + catalogue/nhcx/errors/payr-1025.md | 103 + catalogue/nhcx/errors/payr-1026.md | 105 + catalogue/nhcx/errors/payr-1027.md | 102 + catalogue/nhcx/errors/payr-1028.md | 104 + catalogue/nhcx/errors/payr-1029.md | 106 + catalogue/nhcx/errors/payr-1030.md | 109 + catalogue/nhcx/errors/payr-1031.md | 106 + catalogue/nhcx/errors/payr-1032.md | 97 + catalogue/nhcx/errors/payr-1033.md | 97 + catalogue/nhcx/errors/payr-1034.md | 106 + catalogue/nhcx/errors/payr-1035.md | 108 + catalogue/nhcx/errors/payr-1036.md | 106 + catalogue/nhcx/errors/payr-1037.md | 90 + catalogue/nhcx/errors/payr-1038.md | 89 + catalogue/nhcx/errors/payr-1039.md | 90 + catalogue/nhcx/errors/payr-1040.md | 108 + catalogue/nhcx/errors/payr-1041.md | 102 + catalogue/nhcx/errors/payr-1042.md | 102 + catalogue/nhcx/errors/payr-1043.md | 108 + catalogue/nhcx/errors/payr-1044.md | 108 + catalogue/nhcx/errors/payr-1045.md | 105 + catalogue/nhcx/errors/payr-1046.md | 108 + catalogue/nhcx/errors/payr-1047.md | 107 + catalogue/nhcx/errors/payr-1048.md | 107 + catalogue/nhcx/errors/payr-1049.md | 104 + catalogue/nhcx/errors/payr-1050.md | 102 + catalogue/nhcx/errors/payr-1051.md | 102 + catalogue/nhcx/errors/payr-1052.md | 103 + catalogue/nhcx/errors/payr-1053.md | 102 + catalogue/nhcx/errors/payr-1054.md | 101 + catalogue/nhcx/errors/payr-1055.md | 108 + catalogue/nhcx/errors/payr-1056.md | 102 + catalogue/nhcx/errors/payr-1057.md | 103 + catalogue/nhcx/errors/payr-1058.md | 103 + catalogue/nhcx/errors/payr-1059.md | 104 + catalogue/nhcx/errors/payr-1060.md | 107 + catalogue/nhcx/errors/payr-1061.md | 100 + catalogue/nhcx/errors/payr-1062.md | 97 + catalogue/nhcx/errors/payr-1063.md | 97 + catalogue/nhcx/errors/payr-1064.md | 97 + catalogue/nhcx/errors/payr-1065.md | 97 + catalogue/nhcx/errors/payr-1066.md | 99 + catalogue/nhcx/errors/payr-1067.md | 97 + catalogue/nhcx/errors/payr-1068.md | 97 + catalogue/nhcx/errors/payr-1069.md | 97 + catalogue/nhcx/errors/payr-1070.md | 97 + catalogue/nhcx/errors/payr-1071.md | 98 + catalogue/nhcx/errors/payr-1072.md | 108 + catalogue/nhcx/errors/payr-1073.md | 96 + catalogue/nhcx/errors/payr-1074.md | 96 + catalogue/nhcx/errors/payr-1075.md | 96 + catalogue/nhcx/errors/payr-1076.md | 96 + catalogue/nhcx/errors/payr-1077.md | 95 + catalogue/nhcx/errors/payr-1078.md | 95 + catalogue/nhcx/errors/payr-1079.md | 107 + catalogue/nhcx/errors/payr-1080.md | 120 + catalogue/nhcx/errors/payr-1081.md | 100 + catalogue/nhcx/errors/payr-1082.md | 101 + catalogue/nhcx/errors/payr-1083.md | 119 + catalogue/nhcx/errors/payr-1084.md | 101 + catalogue/nhcx/errors/payr-1085.md | 100 + catalogue/nhcx/errors/payr-1086.md | 100 + catalogue/nhcx/errors/payr-1087.md | 99 + catalogue/nhcx/errors/payr-1088.md | 104 + catalogue/nhcx/errors/payr-1089.md | 108 + catalogue/nhcx/errors/payr-1090.md | 118 + catalogue/nhcx/errors/payr-1091.md | 117 + catalogue/nhcx/errors/payr-1092.md | 95 + catalogue/nhcx/errors/payr-1093.md | 101 + catalogue/nhcx/errors/payr-1094.md | 101 + catalogue/nhcx/errors/payr-1095.md | 95 + catalogue/nhcx/errors/payr-1096.md | 94 + catalogue/nhcx/errors/payr-1097.md | 107 + catalogue/nhcx/errors/payr-1098.md | 101 + catalogue/nhcx/errors/payr-1099.md | 97 + catalogue/nhcx/errors/payr-1101.md | 98 + catalogue/nhcx/errors/payr-1102.md | 103 + catalogue/nhcx/errors/payr-1103.md | 94 + catalogue/nhcx/errors/payr-1104.md | 94 + catalogue/nhcx/errors/payr-1105.md | 96 + catalogue/nhcx/errors/payr-1106.md | 98 + catalogue/nhcx/errors/payr-1107.md | 94 + catalogue/nhcx/errors/payr-1108.md | 93 + catalogue/nhcx/errors/payr-1109.md | 95 + catalogue/nhcx/errors/payr-1110.md | 95 + catalogue/nhcx/errors/payr-1111.md | 92 + catalogue/nhcx/errors/payr-1112.md | 92 + catalogue/nhcx/errors/payr-1113.md | 94 + catalogue/nhcx/errors/payr-1114.md | 96 + catalogue/nhcx/errors/payr-1115.md | 93 + catalogue/nhcx/errors/payr-1116.md | 92 + catalogue/nhcx/errors/payr-1117.md | 97 + catalogue/nhcx/errors/payr-1118.md | 95 + catalogue/nhcx/errors/payr-1119.md | 96 + catalogue/nhcx/errors/payr-1120.md | 90 + catalogue/nhcx/errors/payr-1121.md | 97 + catalogue/nhcx/errors/payr-1122.md | 96 + catalogue/nhcx/errors/payr-1123.md | 96 + catalogue/nhcx/errors/payr-1201.md | 84 + catalogue/nhcx/errors/payr-1202.md | 82 + catalogue/nhcx/errors/payr-1203.md | 86 + catalogue/nhcx/errors/payr-1204.md | 87 + catalogue/nhcx/errors/payr-1205.md | 83 + catalogue/nhcx/errors/payr-1206.md | 77 + catalogue/nhcx/errors/payr-1207.md | 77 + catalogue/nhcx/errors/payr-1208.md | 77 + catalogue/nhcx/errors/payr-1209.md | 77 + catalogue/nhcx/errors/payr-1210.md | 76 + catalogue/nhcx/errors/payr-1211.md | 77 + catalogue/nhcx/errors/payr-1212.md | 78 + catalogue/nhcx/errors/payr-1213.md | 77 + catalogue/nhcx/errors/payr-1214.md | 76 + catalogue/nhcx/errors/payr-1215.md | 77 + catalogue/nhcx/errors/payr-1216.md | 77 + catalogue/nhcx/errors/payr-1217.md | 77 + catalogue/nhcx/errors/payr-1218.md | 76 + catalogue/nhcx/errors/payr-1219.md | 75 + catalogue/nhcx/errors/payr-1220.md | 82 + catalogue/nhcx/errors/payr-1221.md | 80 + catalogue/nhcx/errors/payr-1222.md | 77 + catalogue/nhcx/errors/payr-1223.md | 82 + catalogue/nhcx/errors/payr-1224.md | 82 + catalogue/nhcx/errors/payr-1225.md | 81 + catalogue/nhcx/errors/payr-1226.md | 76 + catalogue/nhcx/errors/payr-1227.md | 82 + catalogue/nhcx/errors/payr-1228.md | 77 + catalogue/nhcx/errors/payr-1229.md | 77 + catalogue/nhcx/errors/payr-1230.md | 78 + catalogue/nhcx/errors/payr-1231.md | 65 + catalogue/nhcx/errors/payr-1232.md | 77 + catalogue/nhcx/errors/payr-1233.md | 79 + catalogue/nhcx/errors/payr-1234.md | 76 + catalogue/nhcx/errors/payr-1235.md | 78 + catalogue/nhcx/errors/payr-1236.md | 74 + catalogue/nhcx/errors/payr-1237.md | 76 + catalogue/nhcx/errors/payr-1238.md | 79 + catalogue/nhcx/errors/payr-1239.md | 75 + catalogue/nhcx/errors/payr-1240.md | 80 + catalogue/nhcx/errors/payr-1241.md | 77 + catalogue/nhcx/errors/payr-1242.md | 76 + catalogue/nhcx/errors/payr-1243.md | 76 + catalogue/nhcx/errors/payr-1244.md | 76 + catalogue/nhcx/errors/payr-1245.md | 77 + catalogue/nhcx/errors/payr-1246.md | 76 + catalogue/nhcx/errors/payr-1247.md | 77 + catalogue/nhcx/errors/payr-1248.md | 78 + catalogue/nhcx/errors/payr-1249.md | 75 + catalogue/nhcx/errors/payr-1250.md | 75 + catalogue/nhcx/errors/payr-1251.md | 76 + catalogue/nhcx/errors/payr-1252.md | 70 + catalogue/nhcx/errors/payr-1253.md | 69 + catalogue/nhcx/errors/payr-1254.md | 80 + catalogue/nhcx/errors/payr-1255.md | 75 + catalogue/nhcx/errors/payr-1256.md | 84 + catalogue/nhcx/errors/payr-1257.md | 69 + catalogue/nhcx/errors/payr-1258.md | 70 + catalogue/nhcx/errors/payr-1259.md | 80 + catalogue/nhcx/errors/payr-1260.md | 79 + catalogue/nhcx/errors/payr-1261.md | 89 + catalogue/nhcx/errors/payr-1262.md | 78 + catalogue/nhcx/errors/payr-1263.md | 89 + catalogue/nhcx/errors/payr-1264.md | 89 + catalogue/nhcx/errors/payr-1265.md | 89 + catalogue/nhcx/errors/payr-1266.md | 89 + catalogue/nhcx/errors/payr-1267.md | 81 + catalogue/nhcx/errors/payr-1268.md | 76 + catalogue/nhcx/errors/payr-1269.md | 79 + catalogue/nhcx/errors/payr-1270.md | 76 + catalogue/nhcx/errors/payr-1271.md | 80 + catalogue/nhcx/errors/payr-1272.md | 80 + catalogue/nhcx/errors/payr-1273.md | 77 + catalogue/nhcx/errors/payr-1301.md | 91 + catalogue/nhcx/errors/payr-1302.md | 89 + catalogue/nhcx/errors/payr-1303.md | 91 + catalogue/nhcx/errors/payr-1304.md | 91 + catalogue/nhcx/errors/payr-1305.md | 86 + catalogue/nhcx/errors/payr-1306.md | 87 + catalogue/nhcx/errors/payr-1307.md | 90 + catalogue/nhcx/errors/payr-1308.md | 86 + catalogue/nhcx/errors/payr-1309.md | 87 + catalogue/nhcx/errors/payr-1310.md | 85 + catalogue/nhcx/errors/payr-1311.md | 86 + catalogue/nhcx/errors/payr-1312.md | 88 + catalogue/nhcx/errors/payr-1313.md | 84 + catalogue/nhcx/errors/payr-1314.md | 87 + catalogue/nhcx/errors/payr-1315.md | 85 + catalogue/nhcx/errors/payr-1316.md | 85 + catalogue/nhcx/errors/payr-1317.md | 85 + catalogue/nhcx/errors/payr-1318.md | 86 + catalogue/nhcx/errors/payr-1319.md | 85 + catalogue/nhcx/errors/payr-1320.md | 87 + catalogue/nhcx/errors/payr-1321.md | 88 + catalogue/nhcx/errors/payr-1322.md | 87 + catalogue/nhcx/errors/payr-1323.md | 89 + catalogue/nhcx/errors/payr-1324.md | 86 + catalogue/nhcx/errors/payr-1325.md | 88 + catalogue/nhcx/errors/payr-1326.md | 88 + catalogue/nhcx/errors/payr-1327.md | 86 + catalogue/nhcx/errors/payr-1328.md | 86 + catalogue/nhcx/errors/payr-1329.md | 88 + catalogue/nhcx/errors/payr-1330.md | 86 + catalogue/nhcx/errors/payr-1331.md | 86 + catalogue/nhcx/errors/payr-1332.md | 84 + catalogue/nhcx/errors/payr-1333.md | 82 + catalogue/nhcx/errors/payr-1334.md | 85 + catalogue/nhcx/errors/payr-1335.md | 83 + catalogue/nhcx/errors/payr-1336.md | 84 + catalogue/nhcx/errors/payr-1337.md | 84 + catalogue/nhcx/errors/payr-1338.md | 86 + catalogue/nhcx/errors/payr-1339.md | 85 + catalogue/nhcx/errors/payr-1340.md | 84 + catalogue/nhcx/errors/payr-1341.md | 85 + catalogue/nhcx/errors/payr-1342.md | 89 + catalogue/nhcx/errors/payr-1343.md | 88 + catalogue/nhcx/errors/payr-1344.md | 89 + catalogue/nhcx/errors/payr-1345.md | 84 + catalogue/nhcx/errors/payr-1346.md | 83 + catalogue/nhcx/errors/payr-1347.md | 82 + catalogue/nhcx/errors/payr-1348.md | 82 + catalogue/nhcx/errors/payr-1349.md | 84 + catalogue/nhcx/errors/payr-1350.md | 85 + catalogue/nhcx/errors/payr-1351.md | 84 + catalogue/nhcx/errors/payr-1352.md | 86 + catalogue/nhcx/errors/payr-1353.md | 83 + catalogue/nhcx/errors/payr-1354.md | 86 + catalogue/nhcx/errors/payr-1355.md | 87 + catalogue/nhcx/errors/payr-1356.md | 87 + catalogue/nhcx/errors/payr-1357.md | 85 + catalogue/nhcx/errors/payr-1358.md | 84 + catalogue/nhcx/errors/payr-1359.md | 84 + catalogue/nhcx/errors/payr-1360.md | 86 + catalogue/nhcx/errors/payr-1361.md | 85 + catalogue/nhcx/errors/payr-1362.md | 93 + catalogue/nhcx/errors/payr-1363.md | 93 + catalogue/nhcx/errors/payr-1364.md | 89 + catalogue/nhcx/errors/payr-1365.md | 88 + catalogue/nhcx/errors/payr-1366.md | 90 + catalogue/nhcx/errors/payr-1367.md | 89 + catalogue/nhcx/errors/payr-1368.md | 89 + catalogue/nhcx/errors/payr-1369.md | 88 + catalogue/nhcx/errors/payr-1370.md | 88 + catalogue/nhcx/errors/payr-1401.md | 80 + catalogue/nhcx/errors/payr-1402.md | 92 + catalogue/nhcx/errors/payr-1403.md | 78 + catalogue/nhcx/errors/payr-1404.md | 80 + catalogue/nhcx/errors/payr-1405.md | 82 + catalogue/nhcx/errors/payr-1406.md | 85 + catalogue/nhcx/errors/payr-1501.md | 100 + catalogue/nhcx/errors/payr-1502.md | 107 + catalogue/nhcx/errors/payr-1503.md | 103 + catalogue/nhcx/errors/payr-1504.md | 94 + catalogue/nhcx/errors/payr-1505.md | 108 + catalogue/nhcx/errors/payr-1506.md | 99 + catalogue/nhcx/errors/payr-1507.md | 93 + catalogue/nhcx/errors/payr-1508.md | 103 + catalogue/nhcx/errors/payr-1509.md | 112 + catalogue/nhcx/errors/payr-1510.md | 90 + catalogue/nhcx/errors/payr-1511.md | 91 + catalogue/nhcx/errors/payr-1512.md | 87 + catalogue/nhcx/errors/payr-1513.md | 99 + catalogue/nhcx/errors/payr-1514.md | 106 + catalogue/nhcx/errors/payr-1515.md | 85 + catalogue/nhcx/errors/payr-1516.md | 78 + catalogue/nhcx/errors/payr-1517.md | 103 + catalogue/nhcx/errors/payr-1518.md | 111 + catalogue/nhcx/errors/payr-1519.md | 111 + catalogue/nhcx/errors/payr-1520.md | 79 + catalogue/nhcx/fhir/claim-request.md | 633 +++ catalogue/nhcx/fhir/claim-response.md | 278 + catalogue/nhcx/fhir/collection-bundle.md | 229 + .../nhcx/fhir/coverage-eligibility-request.md | 422 ++ .../fhir/coverage-eligibility-response.md | 211 + catalogue/nhcx/fhir/insurance-plan-bundle.md | 204 + catalogue/nhcx/fhir/payment-notice.md | 268 + catalogue/nhcx/fhir/pmjay-insurance-plan.md | 220 + catalogue/nhcx/fhir/preauth-cancel.md | 275 + catalogue/nhcx/fhir/preauth-enhancement.md | 225 + catalogue/nhcx/fhir/preauth-request.md | 565 ++ catalogue/nhcx/fhir/preauth-response.md | 261 + catalogue/nhcx/fhir/query-update.md | 231 + catalogue/nhcx/fhir/task.md | 307 ++ catalogue/nhcx/fhir/terminologies.md | 152 + catalogue/nhcx/fhir/validation.md | 139 + catalogue/nhcx/flows/biometric-face.md | 208 + .../nhcx/flows/biometric-fingerprint-iris.md | 196 + catalogue/nhcx/flows/claim-query-response.md | 182 + catalogue/nhcx/flows/claim-reprocess.md | 161 + catalogue/nhcx/flows/claim-search.md | 123 + catalogue/nhcx/flows/claim-submit.md | 177 + .../nhcx/flows/coverage-eligibility-check.md | 181 + .../generate-and-register-certificate.md | 169 + .../nhcx/flows/insurance-plan-request.md | 173 + .../nhcx/flows/notification-subscribe.md | 191 + .../nhcx/flows/payer-process-a-request.md | 234 + catalogue/nhcx/flows/payment-notice.md | 158 + .../nhcx/flows/pmjay-hospital-migration.md | 193 + .../nhcx/flows/pmjay-patient-to-cashless.md | 184 + .../nhcx/flows/policy-link-and-delink.md | 180 + catalogue/nhcx/flows/preauth-cancel.md | 141 + catalogue/nhcx/flows/preauth-enhancement.md | 157 + .../nhcx/flows/preauth-query-response.md | 182 + catalogue/nhcx/flows/preauth-submit.md | 201 + catalogue/nhcx/flows/predetermination.md | 131 + catalogue/nhcx/flows/production-onboarding.md | 212 + .../nhcx/flows/receive-a-sealed-callback.md | 197 + .../nhcx/flows/report-a-processing-error.md | 184 + catalogue/nhcx/flows/rotate-certificate.md | 155 + catalogue/nhcx/flows/sandbox-onboarding.md | 191 + catalogue/nhcx/flows/send-a-sealed-request.md | 263 + catalogue/nhcx/flows/status-check.md | 140 + catalogue/nhcx/glossary/adjudication.md | 56 + catalogue/nhcx/glossary/api-call-id.md | 55 + catalogue/nhcx/glossary/bis.md | 44 + catalogue/nhcx/glossary/claim.md | 57 + .../nhcx/glossary/communication-request.md | 51 + catalogue/nhcx/glossary/correlation-id.md | 64 + .../nhcx/glossary/coverage-eligibility.md | 59 + catalogue/nhcx/glossary/crc.md | 51 + catalogue/nhcx/glossary/enhancement.md | 57 + catalogue/nhcx/glossary/hbp.md | 50 + catalogue/nhcx/glossary/insurance-plan.md | 59 + catalogue/nhcx/glossary/irdai.md | 55 + catalogue/nhcx/glossary/jwe.md | 59 + catalogue/nhcx/glossary/participant-code.md | 54 + catalogue/nhcx/glossary/payer.md | 57 + catalogue/nhcx/glossary/payment-notice.md | 60 + catalogue/nhcx/glossary/pid-block.md | 48 + catalogue/nhcx/glossary/pmjay.md | 50 + catalogue/nhcx/glossary/preauthorisation.md | 55 + catalogue/nhcx/glossary/predetermination.md | 54 + catalogue/nhcx/glossary/protected-header.md | 56 + catalogue/nhcx/glossary/provider.md | 50 + catalogue/nhcx/glossary/rd-service.md | 53 + catalogue/nhcx/glossary/reprocess.md | 59 + catalogue/nhcx/glossary/sandbox-exit.md | 56 + catalogue/nhcx/glossary/sha.md | 50 + catalogue/nhcx/glossary/tms.md | 56 + catalogue/nhcx/glossary/tpa.md | 63 + catalogue/nhcx/glossary/workflow-id.md | 54 + catalogue/nhcx/glossary/x509-certificate.md | 53 + .../nhcx/sandbox/callback-url-requirements.md | 143 + catalogue/nhcx/sandbox/dummy-payer.md | 126 + .../sandbox/environments-and-base-urls.md | 119 + catalogue/nhcx/sandbox/going-live.md | 120 + catalogue/nhcx/sandbox/prerequisites.md | 130 + catalogue/nhcx/sandbox/sandbox-exit.md | 134 + catalogue/nhcx/sandbox/support-contacts.md | 103 + catalogue/nhcx/sandbox/test-participants.md | 104 + catalogue/nhcx/tests/payer-uc-01.md | 126 + catalogue/nhcx/tests/payer-uc-02.md | 106 + catalogue/nhcx/tests/payer-uc-03.md | 113 + catalogue/nhcx/tests/payer-uc-04.md | 111 + catalogue/nhcx/tests/payer-uc-05.md | 118 + catalogue/nhcx/tests/payer-uc-06.md | 114 + catalogue/nhcx/tests/payer-uc-07.md | 160 + catalogue/nhcx/tests/payer-uc-08.md | 161 + catalogue/nhcx/tests/payer-uc-09.md | 162 + catalogue/nhcx/tests/payer-uc-10.md | 160 + catalogue/nhcx/tests/payer-uc-11.md | 169 + catalogue/nhcx/tests/payer-uc-12.md | 162 + catalogue/nhcx/tests/payer-uc-13.md | 166 + catalogue/nhcx/tests/payer-uc-14.md | 167 + catalogue/nhcx/tests/payer-uc-15.md | 138 + catalogue/nhcx/tests/provider-uc-01.md | 119 + catalogue/nhcx/tests/provider-uc-02.md | 123 + catalogue/nhcx/tests/provider-uc-03.md | 127 + catalogue/nhcx/tests/provider-uc-04.md | 115 + catalogue/nhcx/tests/provider-uc-05.md | 175 + catalogue/nhcx/tests/provider-uc-06.md | 176 + catalogue/nhcx/tests/provider-uc-07.md | 197 + catalogue/nhcx/tests/provider-uc-08.md | 185 + catalogue/nhcx/tests/provider-uc-09.md | 197 + catalogue/nhcx/tests/provider-uc-10.md | 177 + catalogue/nhcx/tests/provider-uc-11.md | 184 + catalogue/nhcx/tests/provider-uc-12.md | 185 + catalogue/nhcx/tests/provider-uc-13.md | 144 + catalogue/nhcx/tests/tc-abha-01.md | 161 + catalogue/nhcx/tests/tc-ce-01.md | 154 + catalogue/nhcx/tests/tc-cl-01.md | 164 + catalogue/nhcx/tests/tc-cl-02.md | 146 + catalogue/nhcx/tests/tc-cl-03.md | 150 + catalogue/nhcx/tests/tc-hbp-01.md | 137 + catalogue/nhcx/tests/tc-pa-01.md | 161 + catalogue/nhcx/tests/tc-pa-02.md | 148 + .../accepted-then-no-callback.md | 110 + .../nhcx/troubleshooting/bundle-rejected.md | 96 + .../troubleshooting/callback-url-rejected.md | 90 + .../duplicate-or-mismatched-correlation.md | 95 + .../troubleshooting/everything-returns-401.md | 87 + .../recipient-cannot-decrypt.md | 93 + .../nhcx-package-2026-09-15/nhcx-error.yaml | 1128 ++++ ...PI Response Handling to avoid Failures.pdf | Bin 0 -> 55346 bytes ...HCX-OnBoarding APIs Postman Collection.zip | Bin 0 -> 1323 bytes ...ndbox)-NHCX USECASE Postman Collection.zip | Bin 0 -> 527797 bytes ...CIPANT SERVICE_APIs Postman Collection.zip | Bin 0 -> 1386 bytes ...HCX-OnBoarding APIs Postman Collection.zip | Bin 0 -> 4293 bytes .../documents/Authenticating with NHCX.pdf | Bin 0 -> 87043 bytes .../nhcx-site-2026-09-14/documents/Claim.pdf | Bin 0 -> 281674 bytes ...stakes while implementing through NHCX.pdf | Bin 0 -> 61442 bytes .../documents/Coverage Eligibility.pdf | Bin 0 -> 279321 bytes .../nhcx-site-2026-09-14/documents/FAQs.pdf | Bin 0 -> 338757 bytes ... for Adoption of FHIR in ABDM and NHCX.pdf | Bin 0 -> 1297683 bytes ...ets references for payload preparation.pdf | Bin 0 -> 265421 bytes .../NHCX Dummy Payer Implementation.pdf | Bin 0 -> 278011 bytes .../NHCX Notification Integration.docx | Bin 0 -> 27710 bytes ...r Side Use Cases- Sandbox Exit Process.pdf | Bin 0 -> 149094 bytes ...r Side Use Cases- Sandbox Exit Process.pdf | Bin 0 -> 143930 bytes ...X Requests and Responses for UseCases.xlsx | Bin 0 -> 56137 bytes .../documents/NHCX Usecases.pdf | Bin 0 -> 134558 bytes ...ing providers and payers in Production.pdf | Bin 0 -> 116517 bytes ...arding providers and payers in Sandbox.pdf | Bin 0 -> 136691 bytes .../documents/Payment.pdf | Bin 0 -> 275075 bytes .../Policy Linking and De-Linking Process.pdf | Bin 0 -> 160995 bytes .../documents/Preauthorization.pdf | Bin 0 -> 303060 bytes .../documents/Standard Error Codes.xlsx | Bin 0 -> 37123 bytes .../documents/Standards for NHCX.pdf | Bin 0 -> 4329357 bytes ...eps to generate encryption Certificate.pdf | Bin 0 -> 115492 bytes .../Workflow Status Sheets(with Codes).xlsx | Bin 0 -> 13241 bytes ...Authentication APIs Postman Collection.zip | Bin 0 -> 1278 bytes ...c Authentication Implementation Steps.docx | Bin 0 -> 676168 bytes .../FaceAuth Postman Collection.zip | Bin 0 -> 1685 bytes .../hmisdocuments/Insurance Plan IG.docx | Bin 0 -> 51790 bytes .../NHCX PMJAY Integration Handbook.docx | Bin 0 -> 7721400 bytes .../NHCX-PMJAY-HMIS Integration Guide.pdf | Bin 0 -> 3511014 bytes .../NHCX-PMJAY-HMIS Integration Overview.pdf | Bin 0 -> 800968 bytes .../NHCX-PMJAY-HMIS Test Cases.xlsx | Bin 0 -> 53750 bytes ...X_APIs to be called based on scenario.xlsx | Bin 0 -> 11206 bytes .../NHCX_Services-Request and Response.xlsx | Bin 0 -> 55707 bytes ...Y Hospital Migration to HMIS via NHCX.docx | Bin 0 -> 33302 bytes .../hmisdocuments/Sample FHIR bundles.zip | Bin 0 -> 2163389 bytes .../.raw/nhcx-site-2026-09-14/manifest.json | 1186 ++++ .../media/Guide For Providers.pdf | Bin 0 -> 1124890 bytes .../media/NHCX Brochure.pdf | Bin 0 -> 478457 bytes ...NHCX_Payer_Service_API_Workflow_Guide.docx | Bin 0 -> 32637 bytes .../nhcx-site-2026-09-14/pages/documents.md | 35 + .../pages/domain-specifications.md | 298 + ...cifications__domain-data-specifications.md | 30 + ...data-specifications__domain-data-models.md | 46 + ...ications__domain-data-models__e-objects.md | 200 + ...omain-data-models__implementation-guide.md | 12 + ...ecifications__domain-specific-languages.md | 19 + ...main-data-specifications__terminologies.md | 53 + ...ifications__healthcare-operation-policy.md | 19 + ...thcare-operation-policy__access-control.md | 89 + ...eration-policy__guidelines-event-audits.md | 11 + ...cy__guidelines-for-grienvance-redressal.md | 50 + ...operation-policy__guidlines-beneficiary.md | 10 + .../pages/hmisdocuments.md | 56 + .../pages/introduction-NHCX.md | 112 + ...X__guidlines-for-participant-onboarding.md | 65 + .../pages/technical-specifications.md | 441 ++ ...ical-specifications__api-specifications.md | 35 + ...ifications__appendix-NHCX-relay-example.md | 13 + ...technical-specifications__open-protocol.md | 5 + ...pen-protocol__data-security-and-privacy.md | 8 + ...data-security-and-privacy__api-security.md | 77 + ...curity-and-privacy__audit-and-reporting.md | 10 + ...privacy__message-security-and-integrity.md | 63 + ...ecurity-and-privacy__transport-security.md | 5 + ...rotocol__healthclaims-exchange-protocol.md | 202 + ..._open-protocol__keydesign-consideration.md | 17 + ...ecifications__open-protocol__registries.md | 86 + .../swagger/claimhcxservice.json | 1 + .../swagger/communicationhcxservice.json | 1 + .../coverageeligibilityhcxservice.json | 1 + .../swagger/insuranceplanhcxservice.json | 1 + .../swagger/participanthcxservice.json | 1 + .../swagger/preauthhcxservice.json | 1 + .../swagger/searchhcxservice.json | 1 + .../swagger/servicehcxpayment.json | 1 + .../swagger/statushcxservice.json | 1 + .../swagger/subscriptionhcxservice.json | 1 + .../swagger/taskhcxservice.json | 1 + catalogue/openapi/CONVENTIONS.md | 28 +- .../corrections/2026-09-15-nhcx-ingest.md | 93 + .../openapi/nhcx/v1/nhcx-adjudicator.yaml | 8 +- catalogue/openapi/nhcx/v1/nhcx-biometric.yaml | 10 +- catalogue/openapi/nhcx/v1/nhcx-claim.yaml | 10 +- .../openapi/nhcx/v1/nhcx-communication.yaml | 10 +- .../openapi/nhcx/v1/nhcx-eligibility.yaml | 10 +- .../openapi/nhcx/v1/nhcx-insurance-plan.yaml | 10 +- .../openapi/nhcx/v1/nhcx-onboarding.yaml | 8 +- catalogue/openapi/nhcx/v1/nhcx-other.yaml | 16 +- .../openapi/nhcx/v1/nhcx-payment-notice.yaml | 10 +- catalogue/openapi/nhcx/v1/nhcx-preauth.yaml | 10 +- .../nhcx/v1/nhcx-predetermination.yaml | 10 +- catalogue/openapi/nhcx/v1/nhcx-registry.yaml | 18 +- catalogue/openapi/nhcx/v1/nhcx-session.yaml | 5 +- catalogue/openapi/nhcx/v1/nhcx-status.yaml | 14 +- mcp/eval/README.md | 9 +- mcp/eval/retrieval_eval.py | 54 +- plugins/nhcx/.claude-plugin/plugin.json | 11 + plugins/nhcx/skills/README.md | 25 + plugins/nhcx/skills/nhcx-claim/SKILL.md | 100 + .../nhcx/skills/nhcx-claim/core/FOUNDATION.md | 65 + plugins/nhcx/skills/nhcx-claim/core/LADDER.md | 185 + plugins/nhcx/skills/nhcx-claim/fhir/FHIR.md | 658 +++ plugins/nhcx/skills/nhcx-claim/flow/FLOW.md | 228 + plugins/nhcx/skills/nhcx-claim/flow/flow.json | 818 +++ .../nhcx-claim/references/api-knowledge.md | 400 ++ .../references/errors-and-debugging.md | 167 + .../nhcx-claim/references/fhir-knowledge.md | 206 + .../nhcx-claim/references/flow-knowledge.md | 206 + .../skills/nhcx-claim/references/material.md | 120 + .../references/testing-knowledge.md | 405 ++ .../references/transport-knowledge.md | 283 + .../nhcx-claim/scripts/fetch-package.sh | 122 + .../nhcx-claim/stages/0-capability-check.md | 92 + .../nhcx/skills/nhcx-claim/stages/1-idea.md | 80 + .../skills/nhcx-claim/stages/10-run-tests.md | 59 + .../nhcx-claim/stages/11-build-report.md | 64 + .../skills/nhcx-claim/stages/2-planning.md | 67 + .../skills/nhcx-claim/stages/3-discovery.md | 97 + .../stages/4-flow-and-data-mapping.md | 92 + .../skills/nhcx-claim/stages/5-screen-plan.md | 74 + .../skills/nhcx-claim/stages/6-code-plan.md | 68 + .../7-write-code/7.1-config-and-transport.md | 131 + .../7.10-communication-and-payment.md | 124 + .../7.11-state-and-payer-adapters.md | 145 + .../stages/7-write-code/7.12-screens.md | 124 + .../7-write-code/7.13-standalone-shell.md | 100 + .../stages/7-write-code/7.2-storage.md | 125 + .../7-write-code/7.3-callback-and-archive.md | 144 + .../7-write-code/7.4-policy-and-coverage.md | 99 + .../stages/7-write-code/7.5-insurance-plan.md | 111 + .../7-write-code/7.6-auth-requirements.md | 96 + .../stages/7-write-code/7.7-claim-bundle.md | 147 + .../7-write-code/7.8-claim-response-reader.md | 78 + .../stages/7-write-code/7.9-tasks.md | 104 + .../nhcx-claim/stages/7-write-code/README.md | 56 + .../nhcx-claim/stages/8-validate-modules.md | 73 + .../skills/nhcx-claim/stages/9-write-tests.md | 66 + .../nhcx-claim/templates/0-capability.md | 34 + .../skills/nhcx-claim/templates/1-idea.md | 47 + .../nhcx-claim/templates/10-test-run.md | 45 + .../skills/nhcx-claim/templates/11-report.md | 71 + .../skills/nhcx-claim/templates/2-planning.md | 39 + .../nhcx-claim/templates/3-discovery.md | 27 + .../templates/4-flow-data-mapping.md | 0 .../nhcx-claim/templates/5-screen-plan.md | 0 .../nhcx-claim/templates/6-code-plan.md | 63 + .../nhcx-claim/templates/8-validation.md | 38 + .../skills/nhcx-claim/templates/9-tests.md | 54 + .../nhcx/skills/nhcx-claim/templates/STATE.md | 49 + .../nhcx-claim/templates/capabilities.json | 28 + .../skills/nhcx-claim/templates/mapping.json | 299 + .../nhcx-claim/templates/module-record.md | 29 + .../skills/nhcx-claim/templates/modules.json | 21 + .../skills/nhcx-claim/templates/screens.json | 292 + .../templates/validation-record.json | 8 + plugins/nhcx/skills/nhcx-claim/ui/UI-GUIDE.md | 263 + .../nhcx/skills/nhcx-communication/SKILL.md | 96 + .../nhcx-communication/core/FOUNDATION.md | 65 + .../skills/nhcx-communication/core/LADDER.md | 185 + .../skills/nhcx-communication/fhir/FHIR.md | 658 +++ .../skills/nhcx-communication/flow/FLOW.md | 228 + .../skills/nhcx-communication/flow/flow.json | 818 +++ .../references/api-knowledge.md | 400 ++ .../references/errors-and-debugging.md | 167 + .../references/fhir-knowledge.md | 206 + .../references/flow-knowledge.md | 206 + .../nhcx-communication/references/material.md | 120 + .../references/testing-knowledge.md | 405 ++ .../references/transport-knowledge.md | 283 + .../scripts/fetch-package.sh | 122 + .../stages/0-capability-check.md | 92 + .../nhcx-communication/stages/1-idea.md | 80 + .../nhcx-communication/stages/10-run-tests.md | 59 + .../stages/11-build-report.md | 64 + .../nhcx-communication/stages/2-planning.md | 67 + .../nhcx-communication/stages/3-discovery.md | 97 + .../stages/4-flow-and-data-mapping.md | 92 + .../stages/5-screen-plan.md | 74 + .../nhcx-communication/stages/6-code-plan.md | 68 + .../7-write-code/7.1-config-and-transport.md | 131 + .../7.10-communication-and-payment.md | 124 + .../7.11-state-and-payer-adapters.md | 145 + .../stages/7-write-code/7.12-screens.md | 124 + .../7-write-code/7.13-standalone-shell.md | 100 + .../stages/7-write-code/7.2-storage.md | 125 + .../7-write-code/7.3-callback-and-archive.md | 144 + .../7-write-code/7.4-policy-and-coverage.md | 99 + .../stages/7-write-code/7.5-insurance-plan.md | 111 + .../7-write-code/7.6-auth-requirements.md | 96 + .../stages/7-write-code/7.7-claim-bundle.md | 147 + .../7-write-code/7.8-claim-response-reader.md | 78 + .../stages/7-write-code/7.9-tasks.md | 104 + .../stages/7-write-code/README.md | 56 + .../stages/8-validate-modules.md | 73 + .../stages/9-write-tests.md | 66 + .../templates/0-capability.md | 34 + .../nhcx-communication/templates/1-idea.md | 47 + .../templates/10-test-run.md | 45 + .../nhcx-communication/templates/11-report.md | 71 + .../templates/2-planning.md | 39 + .../templates/3-discovery.md | 27 + .../templates/4-flow-data-mapping.md | 0 .../templates/5-screen-plan.md | 0 .../templates/6-code-plan.md | 63 + .../templates/8-validation.md | 38 + .../nhcx-communication/templates/9-tests.md | 54 + .../nhcx-communication/templates/STATE.md | 49 + .../templates/capabilities.json | 28 + .../nhcx-communication/templates/mapping.json | 299 + .../templates/module-record.md | 29 + .../nhcx-communication/templates/modules.json | 21 + .../nhcx-communication/templates/screens.json | 292 + .../templates/validation-record.json | 8 + .../skills/nhcx-communication/ui/UI-GUIDE.md | 263 + plugins/nhcx/skills/nhcx-coverage/SKILL.md | 92 + .../skills/nhcx-coverage/core/FOUNDATION.md | 65 + .../nhcx/skills/nhcx-coverage/core/LADDER.md | 185 + .../nhcx/skills/nhcx-coverage/fhir/FHIR.md | 658 +++ .../nhcx/skills/nhcx-coverage/flow/FLOW.md | 228 + .../nhcx/skills/nhcx-coverage/flow/flow.json | 818 +++ .../nhcx-coverage/references/api-knowledge.md | 400 ++ .../references/errors-and-debugging.md | 167 + .../references/fhir-knowledge.md | 206 + .../references/flow-knowledge.md | 206 + .../nhcx-coverage/references/material.md | 120 + .../references/testing-knowledge.md | 405 ++ .../references/transport-knowledge.md | 283 + .../nhcx-coverage/scripts/fetch-package.sh | 122 + .../stages/0-capability-check.md | 92 + .../skills/nhcx-coverage/stages/1-idea.md | 80 + .../nhcx-coverage/stages/10-run-tests.md | 59 + .../nhcx-coverage/stages/11-build-report.md | 64 + .../skills/nhcx-coverage/stages/2-planning.md | 67 + .../nhcx-coverage/stages/3-discovery.md | 97 + .../stages/4-flow-and-data-mapping.md | 92 + .../nhcx-coverage/stages/5-screen-plan.md | 74 + .../nhcx-coverage/stages/6-code-plan.md | 68 + .../7-write-code/7.1-config-and-transport.md | 131 + .../7.10-communication-and-payment.md | 124 + .../7.11-state-and-payer-adapters.md | 145 + .../stages/7-write-code/7.12-screens.md | 124 + .../7-write-code/7.13-standalone-shell.md | 100 + .../stages/7-write-code/7.2-storage.md | 125 + .../7-write-code/7.3-callback-and-archive.md | 144 + .../7-write-code/7.4-policy-and-coverage.md | 99 + .../stages/7-write-code/7.5-insurance-plan.md | 111 + .../7-write-code/7.6-auth-requirements.md | 96 + .../stages/7-write-code/7.7-claim-bundle.md | 147 + .../7-write-code/7.8-claim-response-reader.md | 78 + .../stages/7-write-code/7.9-tasks.md | 104 + .../stages/7-write-code/README.md | 56 + .../stages/8-validate-modules.md | 73 + .../nhcx-coverage/stages/9-write-tests.md | 66 + .../nhcx-coverage/templates/0-capability.md | 34 + .../skills/nhcx-coverage/templates/1-idea.md | 47 + .../nhcx-coverage/templates/10-test-run.md | 45 + .../nhcx-coverage/templates/11-report.md | 71 + .../nhcx-coverage/templates/2-planning.md | 39 + .../nhcx-coverage/templates/3-discovery.md | 27 + .../templates/4-flow-data-mapping.md | 0 .../nhcx-coverage/templates/5-screen-plan.md | 0 .../nhcx-coverage/templates/6-code-plan.md | 63 + .../nhcx-coverage/templates/8-validation.md | 38 + .../skills/nhcx-coverage/templates/9-tests.md | 54 + .../skills/nhcx-coverage/templates/STATE.md | 49 + .../nhcx-coverage/templates/capabilities.json | 28 + .../nhcx-coverage/templates/mapping.json | 299 + .../nhcx-coverage/templates/module-record.md | 29 + .../nhcx-coverage/templates/modules.json | 21 + .../nhcx-coverage/templates/screens.json | 292 + .../templates/validation-record.json | 8 + .../nhcx/skills/nhcx-coverage/ui/UI-GUIDE.md | 263 + plugins/nhcx/skills/nhcx-insurance/SKILL.md | 95 + .../skills/nhcx-insurance/core/FOUNDATION.md | 65 + .../nhcx/skills/nhcx-insurance/core/LADDER.md | 185 + .../nhcx/skills/nhcx-insurance/fhir/FHIR.md | 658 +++ .../nhcx/skills/nhcx-insurance/flow/FLOW.md | 228 + .../nhcx/skills/nhcx-insurance/flow/flow.json | 818 +++ .../references/api-knowledge.md | 400 ++ .../references/errors-and-debugging.md | 167 + .../references/fhir-knowledge.md | 206 + .../references/flow-knowledge.md | 206 + .../nhcx-insurance/references/material.md | 120 + .../references/testing-knowledge.md | 405 ++ .../references/transport-knowledge.md | 283 + .../nhcx-insurance/scripts/fetch-package.sh | 122 + .../stages/0-capability-check.md | 92 + .../skills/nhcx-insurance/stages/1-idea.md | 80 + .../nhcx-insurance/stages/10-run-tests.md | 59 + .../nhcx-insurance/stages/11-build-report.md | 64 + .../nhcx-insurance/stages/2-planning.md | 67 + .../nhcx-insurance/stages/3-discovery.md | 97 + .../stages/4-flow-and-data-mapping.md | 92 + .../nhcx-insurance/stages/5-screen-plan.md | 74 + .../nhcx-insurance/stages/6-code-plan.md | 68 + .../7-write-code/7.1-config-and-transport.md | 131 + .../7.10-communication-and-payment.md | 124 + .../7.11-state-and-payer-adapters.md | 145 + .../stages/7-write-code/7.12-screens.md | 124 + .../7-write-code/7.13-standalone-shell.md | 100 + .../stages/7-write-code/7.2-storage.md | 125 + .../7-write-code/7.3-callback-and-archive.md | 144 + .../7-write-code/7.4-policy-and-coverage.md | 99 + .../stages/7-write-code/7.5-insurance-plan.md | 111 + .../7-write-code/7.6-auth-requirements.md | 96 + .../stages/7-write-code/7.7-claim-bundle.md | 147 + .../7-write-code/7.8-claim-response-reader.md | 78 + .../stages/7-write-code/7.9-tasks.md | 104 + .../stages/7-write-code/README.md | 56 + .../stages/8-validate-modules.md | 73 + .../nhcx-insurance/stages/9-write-tests.md | 66 + .../nhcx-insurance/templates/0-capability.md | 34 + .../skills/nhcx-insurance/templates/1-idea.md | 47 + .../nhcx-insurance/templates/10-test-run.md | 45 + .../nhcx-insurance/templates/11-report.md | 71 + .../nhcx-insurance/templates/2-planning.md | 39 + .../nhcx-insurance/templates/3-discovery.md | 27 + .../templates/4-flow-data-mapping.md | 0 .../nhcx-insurance/templates/5-screen-plan.md | 0 .../nhcx-insurance/templates/6-code-plan.md | 63 + .../nhcx-insurance/templates/8-validation.md | 38 + .../nhcx-insurance/templates/9-tests.md | 54 + .../skills/nhcx-insurance/templates/STATE.md | 49 + .../templates/capabilities.json | 28 + .../nhcx-insurance/templates/mapping.json | 299 + .../nhcx-insurance/templates/module-record.md | 29 + .../nhcx-insurance/templates/modules.json | 21 + .../nhcx-insurance/templates/screens.json | 292 + .../templates/validation-record.json | 8 + .../nhcx/skills/nhcx-insurance/ui/UI-GUIDE.md | 263 + plugins/nhcx/skills/nhcx-payment/SKILL.md | 92 + .../skills/nhcx-payment/core/FOUNDATION.md | 65 + .../nhcx/skills/nhcx-payment/core/LADDER.md | 185 + plugins/nhcx/skills/nhcx-payment/fhir/FHIR.md | 658 +++ plugins/nhcx/skills/nhcx-payment/flow/FLOW.md | 228 + .../nhcx/skills/nhcx-payment/flow/flow.json | 818 +++ .../nhcx-payment/references/api-knowledge.md | 400 ++ .../references/errors-and-debugging.md | 167 + .../nhcx-payment/references/fhir-knowledge.md | 206 + .../nhcx-payment/references/flow-knowledge.md | 206 + .../nhcx-payment/references/material.md | 120 + .../references/testing-knowledge.md | 405 ++ .../references/transport-knowledge.md | 283 + .../nhcx-payment/scripts/fetch-package.sh | 122 + .../nhcx-payment/stages/0-capability-check.md | 92 + .../nhcx/skills/nhcx-payment/stages/1-idea.md | 80 + .../nhcx-payment/stages/10-run-tests.md | 59 + .../nhcx-payment/stages/11-build-report.md | 64 + .../skills/nhcx-payment/stages/2-planning.md | 67 + .../skills/nhcx-payment/stages/3-discovery.md | 97 + .../stages/4-flow-and-data-mapping.md | 92 + .../nhcx-payment/stages/5-screen-plan.md | 74 + .../skills/nhcx-payment/stages/6-code-plan.md | 68 + .../7-write-code/7.1-config-and-transport.md | 131 + .../7.10-communication-and-payment.md | 124 + .../7.11-state-and-payer-adapters.md | 145 + .../stages/7-write-code/7.12-screens.md | 124 + .../7-write-code/7.13-standalone-shell.md | 100 + .../stages/7-write-code/7.2-storage.md | 125 + .../7-write-code/7.3-callback-and-archive.md | 144 + .../7-write-code/7.4-policy-and-coverage.md | 99 + .../stages/7-write-code/7.5-insurance-plan.md | 111 + .../7-write-code/7.6-auth-requirements.md | 96 + .../stages/7-write-code/7.7-claim-bundle.md | 147 + .../7-write-code/7.8-claim-response-reader.md | 78 + .../stages/7-write-code/7.9-tasks.md | 104 + .../stages/7-write-code/README.md | 56 + .../nhcx-payment/stages/8-validate-modules.md | 73 + .../nhcx-payment/stages/9-write-tests.md | 66 + .../nhcx-payment/templates/0-capability.md | 34 + .../skills/nhcx-payment/templates/1-idea.md | 47 + .../nhcx-payment/templates/10-test-run.md | 45 + .../nhcx-payment/templates/11-report.md | 71 + .../nhcx-payment/templates/2-planning.md | 39 + .../nhcx-payment/templates/3-discovery.md | 27 + .../templates/4-flow-data-mapping.md | 0 .../nhcx-payment/templates/5-screen-plan.md | 0 .../nhcx-payment/templates/6-code-plan.md | 63 + .../nhcx-payment/templates/8-validation.md | 38 + .../skills/nhcx-payment/templates/9-tests.md | 54 + .../skills/nhcx-payment/templates/STATE.md | 49 + .../nhcx-payment/templates/capabilities.json | 28 + .../nhcx-payment/templates/mapping.json | 299 + .../nhcx-payment/templates/module-record.md | 29 + .../nhcx-payment/templates/modules.json | 21 + .../nhcx-payment/templates/screens.json | 292 + .../templates/validation-record.json | 8 + .../nhcx/skills/nhcx-payment/ui/UI-GUIDE.md | 263 + plugins/nhcx/skills/nhcx-preauth/SKILL.md | 106 + .../skills/nhcx-preauth/core/FOUNDATION.md | 65 + .../nhcx/skills/nhcx-preauth/core/LADDER.md | 185 + plugins/nhcx/skills/nhcx-preauth/fhir/FHIR.md | 658 +++ plugins/nhcx/skills/nhcx-preauth/flow/FLOW.md | 228 + .../nhcx/skills/nhcx-preauth/flow/flow.json | 818 +++ .../nhcx-preauth/references/api-knowledge.md | 400 ++ .../references/errors-and-debugging.md | 167 + .../nhcx-preauth/references/fhir-knowledge.md | 206 + .../nhcx-preauth/references/flow-knowledge.md | 206 + .../nhcx-preauth/references/material.md | 120 + .../references/testing-knowledge.md | 405 ++ .../references/transport-knowledge.md | 283 + .../nhcx-preauth/scripts/fetch-package.sh | 122 + .../nhcx-preauth/stages/0-capability-check.md | 92 + .../nhcx/skills/nhcx-preauth/stages/1-idea.md | 80 + .../nhcx-preauth/stages/10-run-tests.md | 59 + .../nhcx-preauth/stages/11-build-report.md | 64 + .../skills/nhcx-preauth/stages/2-planning.md | 67 + .../skills/nhcx-preauth/stages/3-discovery.md | 97 + .../stages/4-flow-and-data-mapping.md | 92 + .../nhcx-preauth/stages/5-screen-plan.md | 74 + .../skills/nhcx-preauth/stages/6-code-plan.md | 68 + .../7-write-code/7.1-config-and-transport.md | 131 + .../7.10-communication-and-payment.md | 124 + .../7.11-state-and-payer-adapters.md | 145 + .../stages/7-write-code/7.12-screens.md | 124 + .../7-write-code/7.13-standalone-shell.md | 100 + .../stages/7-write-code/7.2-storage.md | 125 + .../7-write-code/7.3-callback-and-archive.md | 144 + .../7-write-code/7.4-policy-and-coverage.md | 99 + .../stages/7-write-code/7.5-insurance-plan.md | 111 + .../7-write-code/7.6-auth-requirements.md | 96 + .../stages/7-write-code/7.7-claim-bundle.md | 147 + .../7-write-code/7.8-claim-response-reader.md | 78 + .../stages/7-write-code/7.9-tasks.md | 104 + .../stages/7-write-code/README.md | 56 + .../nhcx-preauth/stages/8-validate-modules.md | 73 + .../nhcx-preauth/stages/9-write-tests.md | 66 + .../nhcx-preauth/templates/0-capability.md | 34 + .../skills/nhcx-preauth/templates/1-idea.md | 47 + .../nhcx-preauth/templates/10-test-run.md | 45 + .../nhcx-preauth/templates/11-report.md | 71 + .../nhcx-preauth/templates/2-planning.md | 39 + .../nhcx-preauth/templates/3-discovery.md | 27 + .../templates/4-flow-data-mapping.md | 0 .../nhcx-preauth/templates/5-screen-plan.md | 0 .../nhcx-preauth/templates/6-code-plan.md | 63 + .../nhcx-preauth/templates/8-validation.md | 38 + .../skills/nhcx-preauth/templates/9-tests.md | 54 + .../skills/nhcx-preauth/templates/STATE.md | 49 + .../nhcx-preauth/templates/capabilities.json | 28 + .../nhcx-preauth/templates/mapping.json | 299 + .../nhcx-preauth/templates/module-record.md | 29 + .../nhcx-preauth/templates/modules.json | 21 + .../nhcx-preauth/templates/screens.json | 292 + .../templates/validation-record.json | 8 + .../nhcx/skills/nhcx-preauth/ui/UI-GUIDE.md | 263 + plugins/nhcx/skills/nhcx-reprocess/SKILL.md | 99 + .../skills/nhcx-reprocess/core/FOUNDATION.md | 65 + .../nhcx/skills/nhcx-reprocess/core/LADDER.md | 185 + .../nhcx/skills/nhcx-reprocess/fhir/FHIR.md | 658 +++ .../nhcx/skills/nhcx-reprocess/flow/FLOW.md | 228 + .../nhcx/skills/nhcx-reprocess/flow/flow.json | 818 +++ .../references/api-knowledge.md | 400 ++ .../references/errors-and-debugging.md | 167 + .../references/fhir-knowledge.md | 206 + .../references/flow-knowledge.md | 206 + .../nhcx-reprocess/references/material.md | 120 + .../references/testing-knowledge.md | 405 ++ .../references/transport-knowledge.md | 283 + .../nhcx-reprocess/scripts/fetch-package.sh | 122 + .../stages/0-capability-check.md | 92 + .../skills/nhcx-reprocess/stages/1-idea.md | 80 + .../nhcx-reprocess/stages/10-run-tests.md | 59 + .../nhcx-reprocess/stages/11-build-report.md | 64 + .../nhcx-reprocess/stages/2-planning.md | 67 + .../nhcx-reprocess/stages/3-discovery.md | 97 + .../stages/4-flow-and-data-mapping.md | 92 + .../nhcx-reprocess/stages/5-screen-plan.md | 74 + .../nhcx-reprocess/stages/6-code-plan.md | 68 + .../7-write-code/7.1-config-and-transport.md | 131 + .../7.10-communication-and-payment.md | 124 + .../7.11-state-and-payer-adapters.md | 145 + .../stages/7-write-code/7.12-screens.md | 124 + .../7-write-code/7.13-standalone-shell.md | 100 + .../stages/7-write-code/7.2-storage.md | 125 + .../7-write-code/7.3-callback-and-archive.md | 144 + .../7-write-code/7.4-policy-and-coverage.md | 99 + .../stages/7-write-code/7.5-insurance-plan.md | 111 + .../7-write-code/7.6-auth-requirements.md | 96 + .../stages/7-write-code/7.7-claim-bundle.md | 147 + .../7-write-code/7.8-claim-response-reader.md | 78 + .../stages/7-write-code/7.9-tasks.md | 104 + .../stages/7-write-code/README.md | 56 + .../stages/8-validate-modules.md | 73 + .../nhcx-reprocess/stages/9-write-tests.md | 66 + .../nhcx-reprocess/templates/0-capability.md | 34 + .../skills/nhcx-reprocess/templates/1-idea.md | 47 + .../nhcx-reprocess/templates/10-test-run.md | 45 + .../nhcx-reprocess/templates/11-report.md | 71 + .../nhcx-reprocess/templates/2-planning.md | 39 + .../nhcx-reprocess/templates/3-discovery.md | 27 + .../templates/4-flow-data-mapping.md | 0 .../nhcx-reprocess/templates/5-screen-plan.md | 0 .../nhcx-reprocess/templates/6-code-plan.md | 63 + .../nhcx-reprocess/templates/8-validation.md | 38 + .../nhcx-reprocess/templates/9-tests.md | 54 + .../skills/nhcx-reprocess/templates/STATE.md | 49 + .../templates/capabilities.json | 28 + .../nhcx-reprocess/templates/mapping.json | 299 + .../nhcx-reprocess/templates/module-record.md | 29 + .../nhcx-reprocess/templates/modules.json | 21 + .../nhcx-reprocess/templates/screens.json | 292 + .../templates/validation-record.json | 8 + .../nhcx/skills/nhcx-reprocess/ui/UI-GUIDE.md | 263 + scripts/build-api-reference.mjs | 91 +- scripts/build-atom-routes.mjs | 43 +- scripts/build-nav.mjs | 37 +- scripts/build-skills.mjs | 156 +- scripts/emit-page-markdown.mjs | 80 +- scripts/emit-page-markdown.test.mjs | 57 +- scripts/install-skill.sh | 10 +- scripts/validate-skills.mjs | 8 +- scripts/verify-nhcx.sh | 274 + site/README.md | 2 +- site/docs/nhcx/v1/README.md | 1 + site/docs/nhcx/v1/api/adjudicator/index.md | 1 + site/docs/nhcx/v1/api/claim/index.md | 1 + site/docs/nhcx/v1/api/communication/index.md | 1 + site/docs/nhcx/v1/api/eligibility/index.md | 1 + site/docs/nhcx/v1/api/insurance-plan/index.md | 1 + site/docs/nhcx/v1/api/onboarding/index.md | 1 + site/docs/nhcx/v1/api/other/index.md | 2 + site/docs/nhcx/v1/api/payment-notice/index.md | 1 + site/docs/nhcx/v1/api/preauth/index.md | 1 + .../nhcx/v1/api/predetermination/index.md | 1 + site/docs/nhcx/v1/api/registry/index.md | 3 + site/docs/nhcx/v1/api/session/index.md | 1 + site/docs/nhcx/v1/api/status/index.md | 3 + .../docs/nhcx/v1/getting-started/base-urls.md | 6 +- .../nhcx/v1/getting-started/build-with-ai.mdx | 53 + .../get-your-sandbox-credentials.md | 111 + .../nhcx/v1/getting-started/quickstart.md | 107 + .../getting-started/receiving-a-callback.md | 2 + site/docs/nhcx/v1/go-live/index.md | 5 +- site/docs/nhcx/v1/go-live/security-audit.md | 65 + .../reference/environments-and-addresses.md | 2 +- site/docs/nhcx/v1/reference/fhir/index.md | 2 +- site/docs/nhcx/v1/registries/index.md | 2 +- .../nhcx/v1/troubleshooting/_category_.json | 4 + .../accepted-then-no-callback.md | 59 + .../troubleshooting/every-call-returns-401.md | 51 + site/docs/nhcx/v1/troubleshooting/index.md | 27 + ...ponses-arrive-against-the-wrong-request.md | 56 + .../the-payer-rejects-your-bundle.md | 59 + .../the-recipient-cannot-decrypt.md | 52 + .../your-callback-url-is-rejected.md | 55 + site/docs/whats-new/2026-08-24.mdx | 2 +- site/docs/whats-new/2026-08-25.mdx | 2 +- site/docs/whats-new/2026-09-01.mdx | 2 +- site/docs/whats-new/2026-09-02.mdx | 2 +- site/docs/whats-new/2026-09-03.mdx | 2 +- site/docs/whats-new/2026-09-15.mdx | 62 + site/docs/whats-new/index.mdx | 11 + site/src/components/docs/SkillInstall.tsx | 70 +- site/src/components/docs/SkillPicker.tsx | 76 +- site/static/agent-setup/prompt.md | 28 +- 1108 files changed, 129150 insertions(+), 192 deletions(-) create mode 100644 catalogue/nhcx/callbacks/claim-on-submit.md create mode 100644 catalogue/nhcx/callbacks/claim-submit.md create mode 100644 catalogue/nhcx/callbacks/communication-on-request.md create mode 100644 catalogue/nhcx/callbacks/communication-request.md create mode 100644 catalogue/nhcx/callbacks/coverageeligibility-check.md create mode 100644 catalogue/nhcx/callbacks/coverageeligibility-on-check.md create mode 100644 catalogue/nhcx/callbacks/error.md create mode 100644 catalogue/nhcx/callbacks/insuranceplan-on-request.md create mode 100644 catalogue/nhcx/callbacks/insuranceplan-request.md create mode 100644 catalogue/nhcx/callbacks/notification-delivery.md create mode 100644 catalogue/nhcx/callbacks/on-status.md create mode 100644 catalogue/nhcx/callbacks/paymentnotice-on-request.md create mode 100644 catalogue/nhcx/callbacks/paymentnotice-request.md create mode 100644 catalogue/nhcx/callbacks/preauth-on-submit.md create mode 100644 catalogue/nhcx/callbacks/preauth-submit.md create mode 100644 catalogue/nhcx/callbacks/predetermination-on-submit.md create mode 100644 catalogue/nhcx/callbacks/predetermination-submit.md create mode 100644 catalogue/nhcx/callbacks/search-on-submit.md create mode 100644 catalogue/nhcx/callbacks/search-submit.md create mode 100644 catalogue/nhcx/callbacks/status.md create mode 100644 catalogue/nhcx/callbacks/task-on-submit.md create mode 100644 catalogue/nhcx/callbacks/task-submit.md create mode 100644 catalogue/nhcx/concepts/access-control.md create mode 100644 catalogue/nhcx/concepts/audit-and-non-repudiation.md create mode 100644 catalogue/nhcx/concepts/beneficiary-consent.md create mode 100644 catalogue/nhcx/concepts/biometric-authentication.md create mode 100644 catalogue/nhcx/concepts/claim-cycle.md create mode 100644 catalogue/nhcx/concepts/coverage-eligibility-purposes.md create mode 100644 catalogue/nhcx/concepts/encryption-certificate.md create mode 100644 catalogue/nhcx/concepts/error-code-spaces.md create mode 100644 catalogue/nhcx/concepts/fhir-in-nhcx.md create mode 100644 catalogue/nhcx/concepts/four-message-legs.md create mode 100644 catalogue/nhcx/concepts/grievance-redressal.md create mode 100644 catalogue/nhcx/concepts/hmis-integration-architecture.md create mode 100644 catalogue/nhcx/concepts/insurance-plan.md create mode 100644 catalogue/nhcx/concepts/jwe-envelope.md create mode 100644 catalogue/nhcx/concepts/message-identifiers.md create mode 100644 catalogue/nhcx/concepts/notifications.md create mode 100644 catalogue/nhcx/concepts/participant-code.md create mode 100644 catalogue/nhcx/concepts/participant-registry.md create mode 100644 catalogue/nhcx/concepts/participant-roles.md create mode 100644 catalogue/nhcx/concepts/pmjay-on-nhcx.md create mode 100644 catalogue/nhcx/concepts/policy-linking.md create mode 100644 catalogue/nhcx/concepts/protocol-headers.md create mode 100644 catalogue/nhcx/concepts/queries-and-communication.md create mode 100644 catalogue/nhcx/concepts/reprocess-and-cancel.md create mode 100644 catalogue/nhcx/concepts/retries-and-expiry.md create mode 100644 catalogue/nhcx/concepts/session-token.md create mode 100644 catalogue/nhcx/concepts/status-lifecycle.md create mode 100644 catalogue/nhcx/concepts/synchronous-acknowledgement.md create mode 100644 catalogue/nhcx/concepts/what-nhcx-is.md create mode 100644 catalogue/nhcx/concepts/workflow-codes.md create mode 100644 catalogue/nhcx/decisions/biometric-modality.md create mode 100644 catalogue/nhcx/decisions/eligibility-purpose.md create mode 100644 catalogue/nhcx/decisions/jwe-serialisation.md create mode 100644 catalogue/nhcx/decisions/key-encryption-algorithm.md create mode 100644 catalogue/nhcx/decisions/payer-implementation.md create mode 100644 catalogue/nhcx/decisions/preauth-or-predetermination.md create mode 100644 catalogue/nhcx/decisions/session-endpoint.md create mode 100644 catalogue/nhcx/decisions/status-poll-or-wait.md create mode 100644 catalogue/nhcx/endpoints/abha-biometric-auth-init.md create mode 100644 catalogue/nhcx/endpoints/abha-biometric-auth-refresh-token.md create mode 100644 catalogue/nhcx/endpoints/abha-biometric-auth-verify.md create mode 100644 catalogue/nhcx/endpoints/abha-biometric-capture-pid.md create mode 100644 catalogue/nhcx/endpoints/abha-biometric-faceauth-init.md create mode 100644 catalogue/nhcx/endpoints/abha-biometric-v2-auth-verify.md create mode 100644 catalogue/nhcx/endpoints/claim-on-submit.md create mode 100644 catalogue/nhcx/endpoints/claim-submit.md create mode 100644 catalogue/nhcx/endpoints/communication-on-request.md create mode 100644 catalogue/nhcx/endpoints/communication-request.md create mode 100644 catalogue/nhcx/endpoints/coverageeligibility-check.md create mode 100644 catalogue/nhcx/endpoints/coverageeligibility-on-check.md create mode 100644 catalogue/nhcx/endpoints/dummy-payer-paymentnotice-init.md create mode 100644 catalogue/nhcx/endpoints/dummy-payer-process-request.md create mode 100644 catalogue/nhcx/endpoints/fetch-certs.md create mode 100644 catalogue/nhcx/endpoints/fetch-participants-list.md create mode 100644 catalogue/nhcx/endpoints/get-session.md create mode 100644 catalogue/nhcx/endpoints/insuranceplan-on-request.md create mode 100644 catalogue/nhcx/endpoints/insuranceplan-request.md create mode 100644 catalogue/nhcx/endpoints/notification-subscribe.md create mode 100644 catalogue/nhcx/endpoints/on-status.md create mode 100644 catalogue/nhcx/endpoints/participant-create.md create mode 100644 catalogue/nhcx/endpoints/participant-delink-abha-policy.md create mode 100644 catalogue/nhcx/endpoints/participant-details.md create mode 100644 catalogue/nhcx/endpoints/participant-get-policies.md create mode 100644 catalogue/nhcx/endpoints/participant-link-abha-policy.md create mode 100644 catalogue/nhcx/endpoints/participant-search.md create mode 100644 catalogue/nhcx/endpoints/participant-update.md create mode 100644 catalogue/nhcx/endpoints/payer-service-get-user-role.md create mode 100644 catalogue/nhcx/endpoints/payer-service-process-case.md create mode 100644 catalogue/nhcx/endpoints/paymentnotice-on-request.md create mode 100644 catalogue/nhcx/endpoints/paymentnotice-request.md create mode 100644 catalogue/nhcx/endpoints/preauth-on-submit.md create mode 100644 catalogue/nhcx/endpoints/preauth-submit.md create mode 100644 catalogue/nhcx/endpoints/predetermination-on-submit.md create mode 100644 catalogue/nhcx/endpoints/predetermination-submit.md create mode 100644 catalogue/nhcx/endpoints/search-on-submit.md create mode 100644 catalogue/nhcx/endpoints/search-submit.md create mode 100644 catalogue/nhcx/endpoints/session-token.md create mode 100644 catalogue/nhcx/endpoints/status.md create mode 100644 catalogue/nhcx/endpoints/task-on-submit.md create mode 100644 catalogue/nhcx/endpoints/task-submit.md create mode 100644 catalogue/nhcx/endpoints/update-validate.md create mode 100644 catalogue/nhcx/endpoints/v2-participant-create.md create mode 100644 catalogue/nhcx/endpoints/v2-participant-delink-abha-policy.md create mode 100644 catalogue/nhcx/endpoints/v2-participant-get-policies.md create mode 100644 catalogue/nhcx/endpoints/v2-participant-link-abha-policy.md create mode 100644 catalogue/nhcx/endpoints/v2-participant-update.md create mode 100644 catalogue/nhcx/endpoints/v2-update-cert.md create mode 100644 catalogue/nhcx/endpoints/validate.md create mode 100644 catalogue/nhcx/errors/err-pyr-clm-007.md create mode 100644 catalogue/nhcx/errors/nhcx-1001.md create mode 100644 catalogue/nhcx/errors/nhcx-1002.md create mode 100644 catalogue/nhcx/errors/nhcx-1003.md create mode 100644 catalogue/nhcx/errors/nhcx-1004.md create mode 100644 catalogue/nhcx/errors/nhcx-1005.md create mode 100644 catalogue/nhcx/errors/nhcx-1006.md create mode 100644 catalogue/nhcx/errors/nhcx-1007.md create mode 100644 catalogue/nhcx/errors/nhcx-1008.md create mode 100644 catalogue/nhcx/errors/nhcx-1009.md create mode 100644 catalogue/nhcx/errors/nhcx-1010.md create mode 100644 catalogue/nhcx/errors/nhcx-1011.md create mode 100644 catalogue/nhcx/errors/nhcx-1012.md create mode 100644 catalogue/nhcx/errors/nhcx-1013.md create mode 100644 catalogue/nhcx/errors/nhcx-1014.md create mode 100644 catalogue/nhcx/errors/nhcx-1015.md create mode 100644 catalogue/nhcx/errors/nhcx-1016.md create mode 100644 catalogue/nhcx/errors/nhcx-1017.md create mode 100644 catalogue/nhcx/errors/nhcx-1018.md create mode 100644 catalogue/nhcx/errors/nhcx-401.md create mode 100644 catalogue/nhcx/errors/payr-1001.md create mode 100644 catalogue/nhcx/errors/payr-1002.md create mode 100644 catalogue/nhcx/errors/payr-1003.md create mode 100644 catalogue/nhcx/errors/payr-1004.md create mode 100644 catalogue/nhcx/errors/payr-1005.md create mode 100644 catalogue/nhcx/errors/payr-1006.md create mode 100644 catalogue/nhcx/errors/payr-1007.md create mode 100644 catalogue/nhcx/errors/payr-1008.md create mode 100644 catalogue/nhcx/errors/payr-1009.md create mode 100644 catalogue/nhcx/errors/payr-1010.md create mode 100644 catalogue/nhcx/errors/payr-1011.md create mode 100644 catalogue/nhcx/errors/payr-1012.md create mode 100644 catalogue/nhcx/errors/payr-1013.md create mode 100644 catalogue/nhcx/errors/payr-1014.md create mode 100644 catalogue/nhcx/errors/payr-1015.md create mode 100644 catalogue/nhcx/errors/payr-1016.md create mode 100644 catalogue/nhcx/errors/payr-1017.md create mode 100644 catalogue/nhcx/errors/payr-1018.md create mode 100644 catalogue/nhcx/errors/payr-1019.md create mode 100644 catalogue/nhcx/errors/payr-1020.md create mode 100644 catalogue/nhcx/errors/payr-1021.md create mode 100644 catalogue/nhcx/errors/payr-1023.md create mode 100644 catalogue/nhcx/errors/payr-1024.md create mode 100644 catalogue/nhcx/errors/payr-1025.md create mode 100644 catalogue/nhcx/errors/payr-1026.md create mode 100644 catalogue/nhcx/errors/payr-1027.md create mode 100644 catalogue/nhcx/errors/payr-1028.md create mode 100644 catalogue/nhcx/errors/payr-1029.md create mode 100644 catalogue/nhcx/errors/payr-1030.md create mode 100644 catalogue/nhcx/errors/payr-1031.md create mode 100644 catalogue/nhcx/errors/payr-1032.md create mode 100644 catalogue/nhcx/errors/payr-1033.md create mode 100644 catalogue/nhcx/errors/payr-1034.md create mode 100644 catalogue/nhcx/errors/payr-1035.md create mode 100644 catalogue/nhcx/errors/payr-1036.md create mode 100644 catalogue/nhcx/errors/payr-1037.md create mode 100644 catalogue/nhcx/errors/payr-1038.md create mode 100644 catalogue/nhcx/errors/payr-1039.md create mode 100644 catalogue/nhcx/errors/payr-1040.md create mode 100644 catalogue/nhcx/errors/payr-1041.md create mode 100644 catalogue/nhcx/errors/payr-1042.md create mode 100644 catalogue/nhcx/errors/payr-1043.md create mode 100644 catalogue/nhcx/errors/payr-1044.md create mode 100644 catalogue/nhcx/errors/payr-1045.md create mode 100644 catalogue/nhcx/errors/payr-1046.md create mode 100644 catalogue/nhcx/errors/payr-1047.md create mode 100644 catalogue/nhcx/errors/payr-1048.md create mode 100644 catalogue/nhcx/errors/payr-1049.md create mode 100644 catalogue/nhcx/errors/payr-1050.md create mode 100644 catalogue/nhcx/errors/payr-1051.md create mode 100644 catalogue/nhcx/errors/payr-1052.md create mode 100644 catalogue/nhcx/errors/payr-1053.md create mode 100644 catalogue/nhcx/errors/payr-1054.md create mode 100644 catalogue/nhcx/errors/payr-1055.md create mode 100644 catalogue/nhcx/errors/payr-1056.md create mode 100644 catalogue/nhcx/errors/payr-1057.md create mode 100644 catalogue/nhcx/errors/payr-1058.md create mode 100644 catalogue/nhcx/errors/payr-1059.md create mode 100644 catalogue/nhcx/errors/payr-1060.md create mode 100644 catalogue/nhcx/errors/payr-1061.md create mode 100644 catalogue/nhcx/errors/payr-1062.md create mode 100644 catalogue/nhcx/errors/payr-1063.md create mode 100644 catalogue/nhcx/errors/payr-1064.md create mode 100644 catalogue/nhcx/errors/payr-1065.md create mode 100644 catalogue/nhcx/errors/payr-1066.md create mode 100644 catalogue/nhcx/errors/payr-1067.md create mode 100644 catalogue/nhcx/errors/payr-1068.md create mode 100644 catalogue/nhcx/errors/payr-1069.md create mode 100644 catalogue/nhcx/errors/payr-1070.md create mode 100644 catalogue/nhcx/errors/payr-1071.md create mode 100644 catalogue/nhcx/errors/payr-1072.md create mode 100644 catalogue/nhcx/errors/payr-1073.md create mode 100644 catalogue/nhcx/errors/payr-1074.md create mode 100644 catalogue/nhcx/errors/payr-1075.md create mode 100644 catalogue/nhcx/errors/payr-1076.md create mode 100644 catalogue/nhcx/errors/payr-1077.md create mode 100644 catalogue/nhcx/errors/payr-1078.md create mode 100644 catalogue/nhcx/errors/payr-1079.md create mode 100644 catalogue/nhcx/errors/payr-1080.md create mode 100644 catalogue/nhcx/errors/payr-1081.md create mode 100644 catalogue/nhcx/errors/payr-1082.md create mode 100644 catalogue/nhcx/errors/payr-1083.md create mode 100644 catalogue/nhcx/errors/payr-1084.md create mode 100644 catalogue/nhcx/errors/payr-1085.md create mode 100644 catalogue/nhcx/errors/payr-1086.md create mode 100644 catalogue/nhcx/errors/payr-1087.md create mode 100644 catalogue/nhcx/errors/payr-1088.md create mode 100644 catalogue/nhcx/errors/payr-1089.md create mode 100644 catalogue/nhcx/errors/payr-1090.md create mode 100644 catalogue/nhcx/errors/payr-1091.md create mode 100644 catalogue/nhcx/errors/payr-1092.md create mode 100644 catalogue/nhcx/errors/payr-1093.md create mode 100644 catalogue/nhcx/errors/payr-1094.md create mode 100644 catalogue/nhcx/errors/payr-1095.md create mode 100644 catalogue/nhcx/errors/payr-1096.md create mode 100644 catalogue/nhcx/errors/payr-1097.md create mode 100644 catalogue/nhcx/errors/payr-1098.md create mode 100644 catalogue/nhcx/errors/payr-1099.md create mode 100644 catalogue/nhcx/errors/payr-1101.md create mode 100644 catalogue/nhcx/errors/payr-1102.md create mode 100644 catalogue/nhcx/errors/payr-1103.md create mode 100644 catalogue/nhcx/errors/payr-1104.md create mode 100644 catalogue/nhcx/errors/payr-1105.md create mode 100644 catalogue/nhcx/errors/payr-1106.md create mode 100644 catalogue/nhcx/errors/payr-1107.md create mode 100644 catalogue/nhcx/errors/payr-1108.md create mode 100644 catalogue/nhcx/errors/payr-1109.md create mode 100644 catalogue/nhcx/errors/payr-1110.md create mode 100644 catalogue/nhcx/errors/payr-1111.md create mode 100644 catalogue/nhcx/errors/payr-1112.md create mode 100644 catalogue/nhcx/errors/payr-1113.md create mode 100644 catalogue/nhcx/errors/payr-1114.md create mode 100644 catalogue/nhcx/errors/payr-1115.md create mode 100644 catalogue/nhcx/errors/payr-1116.md create mode 100644 catalogue/nhcx/errors/payr-1117.md create mode 100644 catalogue/nhcx/errors/payr-1118.md create mode 100644 catalogue/nhcx/errors/payr-1119.md create mode 100644 catalogue/nhcx/errors/payr-1120.md create mode 100644 catalogue/nhcx/errors/payr-1121.md create mode 100644 catalogue/nhcx/errors/payr-1122.md create mode 100644 catalogue/nhcx/errors/payr-1123.md create mode 100644 catalogue/nhcx/errors/payr-1201.md create mode 100644 catalogue/nhcx/errors/payr-1202.md create mode 100644 catalogue/nhcx/errors/payr-1203.md create mode 100644 catalogue/nhcx/errors/payr-1204.md create mode 100644 catalogue/nhcx/errors/payr-1205.md create mode 100644 catalogue/nhcx/errors/payr-1206.md create mode 100644 catalogue/nhcx/errors/payr-1207.md create mode 100644 catalogue/nhcx/errors/payr-1208.md create mode 100644 catalogue/nhcx/errors/payr-1209.md create mode 100644 catalogue/nhcx/errors/payr-1210.md create mode 100644 catalogue/nhcx/errors/payr-1211.md create mode 100644 catalogue/nhcx/errors/payr-1212.md create mode 100644 catalogue/nhcx/errors/payr-1213.md create mode 100644 catalogue/nhcx/errors/payr-1214.md create mode 100644 catalogue/nhcx/errors/payr-1215.md create mode 100644 catalogue/nhcx/errors/payr-1216.md create mode 100644 catalogue/nhcx/errors/payr-1217.md create mode 100644 catalogue/nhcx/errors/payr-1218.md create mode 100644 catalogue/nhcx/errors/payr-1219.md create mode 100644 catalogue/nhcx/errors/payr-1220.md create mode 100644 catalogue/nhcx/errors/payr-1221.md create mode 100644 catalogue/nhcx/errors/payr-1222.md create mode 100644 catalogue/nhcx/errors/payr-1223.md create mode 100644 catalogue/nhcx/errors/payr-1224.md create mode 100644 catalogue/nhcx/errors/payr-1225.md create mode 100644 catalogue/nhcx/errors/payr-1226.md create mode 100644 catalogue/nhcx/errors/payr-1227.md create mode 100644 catalogue/nhcx/errors/payr-1228.md create mode 100644 catalogue/nhcx/errors/payr-1229.md create mode 100644 catalogue/nhcx/errors/payr-1230.md create mode 100644 catalogue/nhcx/errors/payr-1231.md create mode 100644 catalogue/nhcx/errors/payr-1232.md create mode 100644 catalogue/nhcx/errors/payr-1233.md create mode 100644 catalogue/nhcx/errors/payr-1234.md create mode 100644 catalogue/nhcx/errors/payr-1235.md create mode 100644 catalogue/nhcx/errors/payr-1236.md create mode 100644 catalogue/nhcx/errors/payr-1237.md create mode 100644 catalogue/nhcx/errors/payr-1238.md create mode 100644 catalogue/nhcx/errors/payr-1239.md create mode 100644 catalogue/nhcx/errors/payr-1240.md create mode 100644 catalogue/nhcx/errors/payr-1241.md create mode 100644 catalogue/nhcx/errors/payr-1242.md create mode 100644 catalogue/nhcx/errors/payr-1243.md create mode 100644 catalogue/nhcx/errors/payr-1244.md create mode 100644 catalogue/nhcx/errors/payr-1245.md create mode 100644 catalogue/nhcx/errors/payr-1246.md create mode 100644 catalogue/nhcx/errors/payr-1247.md create mode 100644 catalogue/nhcx/errors/payr-1248.md create mode 100644 catalogue/nhcx/errors/payr-1249.md create mode 100644 catalogue/nhcx/errors/payr-1250.md create mode 100644 catalogue/nhcx/errors/payr-1251.md create mode 100644 catalogue/nhcx/errors/payr-1252.md create mode 100644 catalogue/nhcx/errors/payr-1253.md create mode 100644 catalogue/nhcx/errors/payr-1254.md create mode 100644 catalogue/nhcx/errors/payr-1255.md create mode 100644 catalogue/nhcx/errors/payr-1256.md create mode 100644 catalogue/nhcx/errors/payr-1257.md create mode 100644 catalogue/nhcx/errors/payr-1258.md create mode 100644 catalogue/nhcx/errors/payr-1259.md create mode 100644 catalogue/nhcx/errors/payr-1260.md create mode 100644 catalogue/nhcx/errors/payr-1261.md create mode 100644 catalogue/nhcx/errors/payr-1262.md create mode 100644 catalogue/nhcx/errors/payr-1263.md create mode 100644 catalogue/nhcx/errors/payr-1264.md create mode 100644 catalogue/nhcx/errors/payr-1265.md create mode 100644 catalogue/nhcx/errors/payr-1266.md create mode 100644 catalogue/nhcx/errors/payr-1267.md create mode 100644 catalogue/nhcx/errors/payr-1268.md create mode 100644 catalogue/nhcx/errors/payr-1269.md create mode 100644 catalogue/nhcx/errors/payr-1270.md create mode 100644 catalogue/nhcx/errors/payr-1271.md create mode 100644 catalogue/nhcx/errors/payr-1272.md create mode 100644 catalogue/nhcx/errors/payr-1273.md create mode 100644 catalogue/nhcx/errors/payr-1301.md create mode 100644 catalogue/nhcx/errors/payr-1302.md create mode 100644 catalogue/nhcx/errors/payr-1303.md create mode 100644 catalogue/nhcx/errors/payr-1304.md create mode 100644 catalogue/nhcx/errors/payr-1305.md create mode 100644 catalogue/nhcx/errors/payr-1306.md create mode 100644 catalogue/nhcx/errors/payr-1307.md create mode 100644 catalogue/nhcx/errors/payr-1308.md create mode 100644 catalogue/nhcx/errors/payr-1309.md create mode 100644 catalogue/nhcx/errors/payr-1310.md create mode 100644 catalogue/nhcx/errors/payr-1311.md create mode 100644 catalogue/nhcx/errors/payr-1312.md create mode 100644 catalogue/nhcx/errors/payr-1313.md create mode 100644 catalogue/nhcx/errors/payr-1314.md create mode 100644 catalogue/nhcx/errors/payr-1315.md create mode 100644 catalogue/nhcx/errors/payr-1316.md create mode 100644 catalogue/nhcx/errors/payr-1317.md create mode 100644 catalogue/nhcx/errors/payr-1318.md create mode 100644 catalogue/nhcx/errors/payr-1319.md create mode 100644 catalogue/nhcx/errors/payr-1320.md create mode 100644 catalogue/nhcx/errors/payr-1321.md create mode 100644 catalogue/nhcx/errors/payr-1322.md create mode 100644 catalogue/nhcx/errors/payr-1323.md create mode 100644 catalogue/nhcx/errors/payr-1324.md create mode 100644 catalogue/nhcx/errors/payr-1325.md create mode 100644 catalogue/nhcx/errors/payr-1326.md create mode 100644 catalogue/nhcx/errors/payr-1327.md create mode 100644 catalogue/nhcx/errors/payr-1328.md create mode 100644 catalogue/nhcx/errors/payr-1329.md create mode 100644 catalogue/nhcx/errors/payr-1330.md create mode 100644 catalogue/nhcx/errors/payr-1331.md create mode 100644 catalogue/nhcx/errors/payr-1332.md create mode 100644 catalogue/nhcx/errors/payr-1333.md create mode 100644 catalogue/nhcx/errors/payr-1334.md create mode 100644 catalogue/nhcx/errors/payr-1335.md create mode 100644 catalogue/nhcx/errors/payr-1336.md create mode 100644 catalogue/nhcx/errors/payr-1337.md create mode 100644 catalogue/nhcx/errors/payr-1338.md create mode 100644 catalogue/nhcx/errors/payr-1339.md create mode 100644 catalogue/nhcx/errors/payr-1340.md create mode 100644 catalogue/nhcx/errors/payr-1341.md create mode 100644 catalogue/nhcx/errors/payr-1342.md create mode 100644 catalogue/nhcx/errors/payr-1343.md create mode 100644 catalogue/nhcx/errors/payr-1344.md create mode 100644 catalogue/nhcx/errors/payr-1345.md create mode 100644 catalogue/nhcx/errors/payr-1346.md create mode 100644 catalogue/nhcx/errors/payr-1347.md create mode 100644 catalogue/nhcx/errors/payr-1348.md create mode 100644 catalogue/nhcx/errors/payr-1349.md create mode 100644 catalogue/nhcx/errors/payr-1350.md create mode 100644 catalogue/nhcx/errors/payr-1351.md create mode 100644 catalogue/nhcx/errors/payr-1352.md create mode 100644 catalogue/nhcx/errors/payr-1353.md create mode 100644 catalogue/nhcx/errors/payr-1354.md create mode 100644 catalogue/nhcx/errors/payr-1355.md create mode 100644 catalogue/nhcx/errors/payr-1356.md create mode 100644 catalogue/nhcx/errors/payr-1357.md create mode 100644 catalogue/nhcx/errors/payr-1358.md create mode 100644 catalogue/nhcx/errors/payr-1359.md create mode 100644 catalogue/nhcx/errors/payr-1360.md create mode 100644 catalogue/nhcx/errors/payr-1361.md create mode 100644 catalogue/nhcx/errors/payr-1362.md create mode 100644 catalogue/nhcx/errors/payr-1363.md create mode 100644 catalogue/nhcx/errors/payr-1364.md create mode 100644 catalogue/nhcx/errors/payr-1365.md create mode 100644 catalogue/nhcx/errors/payr-1366.md create mode 100644 catalogue/nhcx/errors/payr-1367.md create mode 100644 catalogue/nhcx/errors/payr-1368.md create mode 100644 catalogue/nhcx/errors/payr-1369.md create mode 100644 catalogue/nhcx/errors/payr-1370.md create mode 100644 catalogue/nhcx/errors/payr-1401.md create mode 100644 catalogue/nhcx/errors/payr-1402.md create mode 100644 catalogue/nhcx/errors/payr-1403.md create mode 100644 catalogue/nhcx/errors/payr-1404.md create mode 100644 catalogue/nhcx/errors/payr-1405.md create mode 100644 catalogue/nhcx/errors/payr-1406.md create mode 100644 catalogue/nhcx/errors/payr-1501.md create mode 100644 catalogue/nhcx/errors/payr-1502.md create mode 100644 catalogue/nhcx/errors/payr-1503.md create mode 100644 catalogue/nhcx/errors/payr-1504.md create mode 100644 catalogue/nhcx/errors/payr-1505.md create mode 100644 catalogue/nhcx/errors/payr-1506.md create mode 100644 catalogue/nhcx/errors/payr-1507.md create mode 100644 catalogue/nhcx/errors/payr-1508.md create mode 100644 catalogue/nhcx/errors/payr-1509.md create mode 100644 catalogue/nhcx/errors/payr-1510.md create mode 100644 catalogue/nhcx/errors/payr-1511.md create mode 100644 catalogue/nhcx/errors/payr-1512.md create mode 100644 catalogue/nhcx/errors/payr-1513.md create mode 100644 catalogue/nhcx/errors/payr-1514.md create mode 100644 catalogue/nhcx/errors/payr-1515.md create mode 100644 catalogue/nhcx/errors/payr-1516.md create mode 100644 catalogue/nhcx/errors/payr-1517.md create mode 100644 catalogue/nhcx/errors/payr-1518.md create mode 100644 catalogue/nhcx/errors/payr-1519.md create mode 100644 catalogue/nhcx/errors/payr-1520.md create mode 100644 catalogue/nhcx/fhir/claim-request.md create mode 100644 catalogue/nhcx/fhir/claim-response.md create mode 100644 catalogue/nhcx/fhir/collection-bundle.md create mode 100644 catalogue/nhcx/fhir/coverage-eligibility-request.md create mode 100644 catalogue/nhcx/fhir/coverage-eligibility-response.md create mode 100644 catalogue/nhcx/fhir/insurance-plan-bundle.md create mode 100644 catalogue/nhcx/fhir/payment-notice.md create mode 100644 catalogue/nhcx/fhir/pmjay-insurance-plan.md create mode 100644 catalogue/nhcx/fhir/preauth-cancel.md create mode 100644 catalogue/nhcx/fhir/preauth-enhancement.md create mode 100644 catalogue/nhcx/fhir/preauth-request.md create mode 100644 catalogue/nhcx/fhir/preauth-response.md create mode 100644 catalogue/nhcx/fhir/query-update.md create mode 100644 catalogue/nhcx/fhir/task.md create mode 100644 catalogue/nhcx/fhir/terminologies.md create mode 100644 catalogue/nhcx/fhir/validation.md create mode 100644 catalogue/nhcx/flows/biometric-face.md create mode 100644 catalogue/nhcx/flows/biometric-fingerprint-iris.md create mode 100644 catalogue/nhcx/flows/claim-query-response.md create mode 100644 catalogue/nhcx/flows/claim-reprocess.md create mode 100644 catalogue/nhcx/flows/claim-search.md create mode 100644 catalogue/nhcx/flows/claim-submit.md create mode 100644 catalogue/nhcx/flows/coverage-eligibility-check.md create mode 100644 catalogue/nhcx/flows/generate-and-register-certificate.md create mode 100644 catalogue/nhcx/flows/insurance-plan-request.md create mode 100644 catalogue/nhcx/flows/notification-subscribe.md create mode 100644 catalogue/nhcx/flows/payer-process-a-request.md create mode 100644 catalogue/nhcx/flows/payment-notice.md create mode 100644 catalogue/nhcx/flows/pmjay-hospital-migration.md create mode 100644 catalogue/nhcx/flows/pmjay-patient-to-cashless.md create mode 100644 catalogue/nhcx/flows/policy-link-and-delink.md create mode 100644 catalogue/nhcx/flows/preauth-cancel.md create mode 100644 catalogue/nhcx/flows/preauth-enhancement.md create mode 100644 catalogue/nhcx/flows/preauth-query-response.md create mode 100644 catalogue/nhcx/flows/preauth-submit.md create mode 100644 catalogue/nhcx/flows/predetermination.md create mode 100644 catalogue/nhcx/flows/production-onboarding.md create mode 100644 catalogue/nhcx/flows/receive-a-sealed-callback.md create mode 100644 catalogue/nhcx/flows/report-a-processing-error.md create mode 100644 catalogue/nhcx/flows/rotate-certificate.md create mode 100644 catalogue/nhcx/flows/sandbox-onboarding.md create mode 100644 catalogue/nhcx/flows/send-a-sealed-request.md create mode 100644 catalogue/nhcx/flows/status-check.md create mode 100644 catalogue/nhcx/glossary/adjudication.md create mode 100644 catalogue/nhcx/glossary/api-call-id.md create mode 100644 catalogue/nhcx/glossary/bis.md create mode 100644 catalogue/nhcx/glossary/claim.md create mode 100644 catalogue/nhcx/glossary/communication-request.md create mode 100644 catalogue/nhcx/glossary/correlation-id.md create mode 100644 catalogue/nhcx/glossary/coverage-eligibility.md create mode 100644 catalogue/nhcx/glossary/crc.md create mode 100644 catalogue/nhcx/glossary/enhancement.md create mode 100644 catalogue/nhcx/glossary/hbp.md create mode 100644 catalogue/nhcx/glossary/insurance-plan.md create mode 100644 catalogue/nhcx/glossary/irdai.md create mode 100644 catalogue/nhcx/glossary/jwe.md create mode 100644 catalogue/nhcx/glossary/participant-code.md create mode 100644 catalogue/nhcx/glossary/payer.md create mode 100644 catalogue/nhcx/glossary/payment-notice.md create mode 100644 catalogue/nhcx/glossary/pid-block.md create mode 100644 catalogue/nhcx/glossary/pmjay.md create mode 100644 catalogue/nhcx/glossary/preauthorisation.md create mode 100644 catalogue/nhcx/glossary/predetermination.md create mode 100644 catalogue/nhcx/glossary/protected-header.md create mode 100644 catalogue/nhcx/glossary/provider.md create mode 100644 catalogue/nhcx/glossary/rd-service.md create mode 100644 catalogue/nhcx/glossary/reprocess.md create mode 100644 catalogue/nhcx/glossary/sandbox-exit.md create mode 100644 catalogue/nhcx/glossary/sha.md create mode 100644 catalogue/nhcx/glossary/tms.md create mode 100644 catalogue/nhcx/glossary/tpa.md create mode 100644 catalogue/nhcx/glossary/workflow-id.md create mode 100644 catalogue/nhcx/glossary/x509-certificate.md create mode 100644 catalogue/nhcx/sandbox/callback-url-requirements.md create mode 100644 catalogue/nhcx/sandbox/dummy-payer.md create mode 100644 catalogue/nhcx/sandbox/environments-and-base-urls.md create mode 100644 catalogue/nhcx/sandbox/going-live.md create mode 100644 catalogue/nhcx/sandbox/prerequisites.md create mode 100644 catalogue/nhcx/sandbox/sandbox-exit.md create mode 100644 catalogue/nhcx/sandbox/support-contacts.md create mode 100644 catalogue/nhcx/sandbox/test-participants.md create mode 100644 catalogue/nhcx/tests/payer-uc-01.md create mode 100644 catalogue/nhcx/tests/payer-uc-02.md create mode 100644 catalogue/nhcx/tests/payer-uc-03.md create mode 100644 catalogue/nhcx/tests/payer-uc-04.md create mode 100644 catalogue/nhcx/tests/payer-uc-05.md create mode 100644 catalogue/nhcx/tests/payer-uc-06.md create mode 100644 catalogue/nhcx/tests/payer-uc-07.md create mode 100644 catalogue/nhcx/tests/payer-uc-08.md create mode 100644 catalogue/nhcx/tests/payer-uc-09.md create mode 100644 catalogue/nhcx/tests/payer-uc-10.md create mode 100644 catalogue/nhcx/tests/payer-uc-11.md create mode 100644 catalogue/nhcx/tests/payer-uc-12.md create mode 100644 catalogue/nhcx/tests/payer-uc-13.md create mode 100644 catalogue/nhcx/tests/payer-uc-14.md create mode 100644 catalogue/nhcx/tests/payer-uc-15.md create mode 100644 catalogue/nhcx/tests/provider-uc-01.md create mode 100644 catalogue/nhcx/tests/provider-uc-02.md create mode 100644 catalogue/nhcx/tests/provider-uc-03.md create mode 100644 catalogue/nhcx/tests/provider-uc-04.md create mode 100644 catalogue/nhcx/tests/provider-uc-05.md create mode 100644 catalogue/nhcx/tests/provider-uc-06.md create mode 100644 catalogue/nhcx/tests/provider-uc-07.md create mode 100644 catalogue/nhcx/tests/provider-uc-08.md create mode 100644 catalogue/nhcx/tests/provider-uc-09.md create mode 100644 catalogue/nhcx/tests/provider-uc-10.md create mode 100644 catalogue/nhcx/tests/provider-uc-11.md create mode 100644 catalogue/nhcx/tests/provider-uc-12.md create mode 100644 catalogue/nhcx/tests/provider-uc-13.md create mode 100644 catalogue/nhcx/tests/tc-abha-01.md create mode 100644 catalogue/nhcx/tests/tc-ce-01.md create mode 100644 catalogue/nhcx/tests/tc-cl-01.md create mode 100644 catalogue/nhcx/tests/tc-cl-02.md create mode 100644 catalogue/nhcx/tests/tc-cl-03.md create mode 100644 catalogue/nhcx/tests/tc-hbp-01.md create mode 100644 catalogue/nhcx/tests/tc-pa-01.md create mode 100644 catalogue/nhcx/tests/tc-pa-02.md create mode 100644 catalogue/nhcx/troubleshooting/accepted-then-no-callback.md create mode 100644 catalogue/nhcx/troubleshooting/bundle-rejected.md create mode 100644 catalogue/nhcx/troubleshooting/callback-url-rejected.md create mode 100644 catalogue/nhcx/troubleshooting/duplicate-or-mismatched-correlation.md create mode 100644 catalogue/nhcx/troubleshooting/everything-returns-401.md create mode 100644 catalogue/nhcx/troubleshooting/recipient-cannot-decrypt.md create mode 100644 catalogue/openapi/.raw/nhcx-package-2026-09-15/nhcx-error.yaml create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(PROD)_NHCX-OnBoarding APIs Postman Collection.zip create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection.zip create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)NHCX-OnBoarding APIs Postman Collection.zip create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Authenticating with NHCX.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Claim.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Coverage Eligibility.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Implementation Guide for Adoption of FHIR in ABDM and NHCX.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Code Snippets references for payload preparation.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Notification Integration.docx create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Usecases.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Sandbox.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Payment.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Preauthorization.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standards for NHCX.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Steps to generate encryption Certificate.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication APIs Postman Collection.zip create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication Implementation Steps.docx create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/FaceAuth Postman Collection.zip create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Insurance Plan IG.docx create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Overview.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Test Cases.xlsx create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_Services-Request and Response.xlsx create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/PMJAY Hospital Migration to HMIS via NHCX.docx create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/manifest.json create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/media/NHCX Brochure.pdf create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/not-on-site/External_NHCX_Payer_Service_API_Workflow_Guide.docx create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/documents.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__domain-data-specifications.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__domain-data-specifications__domain-data-models.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__domain-data-specifications__domain-data-models__e-objects.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__domain-data-specifications__domain-data-models__implementation-guide.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__domain-data-specifications__domain-specific-languages.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__domain-data-specifications__terminologies.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__healthcare-operation-policy.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__healthcare-operation-policy__access-control.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__healthcare-operation-policy__guidelines-event-audits.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__healthcare-operation-policy__guidelines-for-grienvance-redressal.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__healthcare-operation-policy__guidlines-beneficiary.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/hmisdocuments.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/introduction-NHCX.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/introduction-NHCX__guidlines-for-participant-onboarding.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__api-specifications.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__appendix-NHCX-relay-example.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__api-security.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__audit-and-reporting.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__message-security-and-integrity.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__transport-security.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__healthclaims-exchange-protocol.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__keydesign-consideration.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__registries.md create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/claimhcxservice.json create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/communicationhcxservice.json create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/coverageeligibilityhcxservice.json create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/insuranceplanhcxservice.json create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/preauthhcxservice.json create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/searchhcxservice.json create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/servicehcxpayment.json create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/statushcxservice.json create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/subscriptionhcxservice.json create mode 100644 catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/taskhcxservice.json create mode 100644 catalogue/openapi/corrections/2026-09-15-nhcx-ingest.md create mode 100644 plugins/nhcx/.claude-plugin/plugin.json create mode 100644 plugins/nhcx/skills/README.md create mode 100644 plugins/nhcx/skills/nhcx-claim/SKILL.md create mode 100644 plugins/nhcx/skills/nhcx-claim/core/FOUNDATION.md create mode 100644 plugins/nhcx/skills/nhcx-claim/core/LADDER.md create mode 100644 plugins/nhcx/skills/nhcx-claim/fhir/FHIR.md create mode 100644 plugins/nhcx/skills/nhcx-claim/flow/FLOW.md create mode 100644 plugins/nhcx/skills/nhcx-claim/flow/flow.json create mode 100644 plugins/nhcx/skills/nhcx-claim/references/api-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-claim/references/errors-and-debugging.md create mode 100644 plugins/nhcx/skills/nhcx-claim/references/fhir-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-claim/references/flow-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-claim/references/material.md create mode 100644 plugins/nhcx/skills/nhcx-claim/references/testing-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-claim/references/transport-knowledge.md create mode 100755 plugins/nhcx/skills/nhcx-claim/scripts/fetch-package.sh create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/0-capability-check.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/1-idea.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/10-run-tests.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/11-build-report.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/2-planning.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/3-discovery.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/4-flow-and-data-mapping.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/5-screen-plan.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/6-code-plan.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/7-write-code/7.1-config-and-transport.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/7-write-code/7.10-communication-and-payment.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/7-write-code/7.11-state-and-payer-adapters.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/7-write-code/7.12-screens.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/7-write-code/7.13-standalone-shell.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/7-write-code/7.2-storage.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/7-write-code/7.3-callback-and-archive.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/7-write-code/7.4-policy-and-coverage.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/7-write-code/7.5-insurance-plan.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/7-write-code/7.6-auth-requirements.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/7-write-code/7.7-claim-bundle.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/7-write-code/7.8-claim-response-reader.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/7-write-code/7.9-tasks.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/7-write-code/README.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/8-validate-modules.md create mode 100644 plugins/nhcx/skills/nhcx-claim/stages/9-write-tests.md create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/0-capability.md create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/1-idea.md create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/10-test-run.md create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/11-report.md create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/2-planning.md create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/3-discovery.md create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/4-flow-data-mapping.md create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/5-screen-plan.md create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/6-code-plan.md create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/8-validation.md create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/9-tests.md create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/STATE.md create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/capabilities.json create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/mapping.json create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/module-record.md create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/modules.json create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/screens.json create mode 100644 plugins/nhcx/skills/nhcx-claim/templates/validation-record.json create mode 100644 plugins/nhcx/skills/nhcx-claim/ui/UI-GUIDE.md create mode 100644 plugins/nhcx/skills/nhcx-communication/SKILL.md create mode 100644 plugins/nhcx/skills/nhcx-communication/core/FOUNDATION.md create mode 100644 plugins/nhcx/skills/nhcx-communication/core/LADDER.md create mode 100644 plugins/nhcx/skills/nhcx-communication/fhir/FHIR.md create mode 100644 plugins/nhcx/skills/nhcx-communication/flow/FLOW.md create mode 100644 plugins/nhcx/skills/nhcx-communication/flow/flow.json create mode 100644 plugins/nhcx/skills/nhcx-communication/references/api-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-communication/references/errors-and-debugging.md create mode 100644 plugins/nhcx/skills/nhcx-communication/references/fhir-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-communication/references/flow-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-communication/references/material.md create mode 100644 plugins/nhcx/skills/nhcx-communication/references/testing-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-communication/references/transport-knowledge.md create mode 100755 plugins/nhcx/skills/nhcx-communication/scripts/fetch-package.sh create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/0-capability-check.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/1-idea.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/10-run-tests.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/11-build-report.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/2-planning.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/3-discovery.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/4-flow-and-data-mapping.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/5-screen-plan.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/6-code-plan.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/7-write-code/7.1-config-and-transport.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/7-write-code/7.10-communication-and-payment.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/7-write-code/7.11-state-and-payer-adapters.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/7-write-code/7.12-screens.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/7-write-code/7.13-standalone-shell.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/7-write-code/7.2-storage.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/7-write-code/7.3-callback-and-archive.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/7-write-code/7.4-policy-and-coverage.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/7-write-code/7.5-insurance-plan.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/7-write-code/7.6-auth-requirements.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/7-write-code/7.7-claim-bundle.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/7-write-code/7.8-claim-response-reader.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/7-write-code/7.9-tasks.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/7-write-code/README.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/8-validate-modules.md create mode 100644 plugins/nhcx/skills/nhcx-communication/stages/9-write-tests.md create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/0-capability.md create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/1-idea.md create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/10-test-run.md create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/11-report.md create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/2-planning.md create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/3-discovery.md create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/4-flow-data-mapping.md create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/5-screen-plan.md create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/6-code-plan.md create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/8-validation.md create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/9-tests.md create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/STATE.md create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/capabilities.json create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/mapping.json create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/module-record.md create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/modules.json create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/screens.json create mode 100644 plugins/nhcx/skills/nhcx-communication/templates/validation-record.json create mode 100644 plugins/nhcx/skills/nhcx-communication/ui/UI-GUIDE.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/SKILL.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/core/FOUNDATION.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/core/LADDER.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/fhir/FHIR.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/flow/FLOW.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/flow/flow.json create mode 100644 plugins/nhcx/skills/nhcx-coverage/references/api-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/references/errors-and-debugging.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/references/fhir-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/references/flow-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/references/material.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/references/testing-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/references/transport-knowledge.md create mode 100755 plugins/nhcx/skills/nhcx-coverage/scripts/fetch-package.sh create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/0-capability-check.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/1-idea.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/10-run-tests.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/11-build-report.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/2-planning.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/3-discovery.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/4-flow-and-data-mapping.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/5-screen-plan.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/6-code-plan.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/7-write-code/7.1-config-and-transport.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/7-write-code/7.10-communication-and-payment.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/7-write-code/7.11-state-and-payer-adapters.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/7-write-code/7.12-screens.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/7-write-code/7.13-standalone-shell.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/7-write-code/7.2-storage.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/7-write-code/7.3-callback-and-archive.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/7-write-code/7.4-policy-and-coverage.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/7-write-code/7.5-insurance-plan.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/7-write-code/7.6-auth-requirements.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/7-write-code/7.7-claim-bundle.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/7-write-code/7.8-claim-response-reader.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/7-write-code/7.9-tasks.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/7-write-code/README.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/8-validate-modules.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/stages/9-write-tests.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/0-capability.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/1-idea.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/10-test-run.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/11-report.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/2-planning.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/3-discovery.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/4-flow-data-mapping.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/5-screen-plan.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/6-code-plan.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/8-validation.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/9-tests.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/STATE.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/capabilities.json create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/mapping.json create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/module-record.md create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/modules.json create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/screens.json create mode 100644 plugins/nhcx/skills/nhcx-coverage/templates/validation-record.json create mode 100644 plugins/nhcx/skills/nhcx-coverage/ui/UI-GUIDE.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/SKILL.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/core/FOUNDATION.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/core/LADDER.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/fhir/FHIR.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/flow/FLOW.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/flow/flow.json create mode 100644 plugins/nhcx/skills/nhcx-insurance/references/api-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/references/errors-and-debugging.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/references/fhir-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/references/flow-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/references/material.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/references/testing-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/references/transport-knowledge.md create mode 100755 plugins/nhcx/skills/nhcx-insurance/scripts/fetch-package.sh create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/0-capability-check.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/1-idea.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/10-run-tests.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/11-build-report.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/2-planning.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/3-discovery.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/4-flow-and-data-mapping.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/5-screen-plan.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/6-code-plan.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/7-write-code/7.1-config-and-transport.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/7-write-code/7.10-communication-and-payment.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/7-write-code/7.11-state-and-payer-adapters.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/7-write-code/7.12-screens.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/7-write-code/7.13-standalone-shell.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/7-write-code/7.2-storage.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/7-write-code/7.3-callback-and-archive.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/7-write-code/7.4-policy-and-coverage.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/7-write-code/7.5-insurance-plan.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/7-write-code/7.6-auth-requirements.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/7-write-code/7.7-claim-bundle.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/7-write-code/7.8-claim-response-reader.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/7-write-code/7.9-tasks.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/7-write-code/README.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/8-validate-modules.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/stages/9-write-tests.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/0-capability.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/1-idea.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/10-test-run.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/11-report.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/2-planning.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/3-discovery.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/4-flow-data-mapping.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/5-screen-plan.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/6-code-plan.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/8-validation.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/9-tests.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/STATE.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/capabilities.json create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/mapping.json create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/module-record.md create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/modules.json create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/screens.json create mode 100644 plugins/nhcx/skills/nhcx-insurance/templates/validation-record.json create mode 100644 plugins/nhcx/skills/nhcx-insurance/ui/UI-GUIDE.md create mode 100644 plugins/nhcx/skills/nhcx-payment/SKILL.md create mode 100644 plugins/nhcx/skills/nhcx-payment/core/FOUNDATION.md create mode 100644 plugins/nhcx/skills/nhcx-payment/core/LADDER.md create mode 100644 plugins/nhcx/skills/nhcx-payment/fhir/FHIR.md create mode 100644 plugins/nhcx/skills/nhcx-payment/flow/FLOW.md create mode 100644 plugins/nhcx/skills/nhcx-payment/flow/flow.json create mode 100644 plugins/nhcx/skills/nhcx-payment/references/api-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-payment/references/errors-and-debugging.md create mode 100644 plugins/nhcx/skills/nhcx-payment/references/fhir-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-payment/references/flow-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-payment/references/material.md create mode 100644 plugins/nhcx/skills/nhcx-payment/references/testing-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-payment/references/transport-knowledge.md create mode 100755 plugins/nhcx/skills/nhcx-payment/scripts/fetch-package.sh create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/0-capability-check.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/1-idea.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/10-run-tests.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/11-build-report.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/2-planning.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/3-discovery.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/4-flow-and-data-mapping.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/5-screen-plan.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/6-code-plan.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/7-write-code/7.1-config-and-transport.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/7-write-code/7.10-communication-and-payment.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/7-write-code/7.11-state-and-payer-adapters.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/7-write-code/7.12-screens.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/7-write-code/7.13-standalone-shell.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/7-write-code/7.2-storage.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/7-write-code/7.3-callback-and-archive.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/7-write-code/7.4-policy-and-coverage.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/7-write-code/7.5-insurance-plan.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/7-write-code/7.6-auth-requirements.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/7-write-code/7.7-claim-bundle.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/7-write-code/7.8-claim-response-reader.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/7-write-code/7.9-tasks.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/7-write-code/README.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/8-validate-modules.md create mode 100644 plugins/nhcx/skills/nhcx-payment/stages/9-write-tests.md create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/0-capability.md create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/1-idea.md create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/10-test-run.md create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/11-report.md create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/2-planning.md create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/3-discovery.md create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/4-flow-data-mapping.md create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/5-screen-plan.md create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/6-code-plan.md create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/8-validation.md create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/9-tests.md create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/STATE.md create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/capabilities.json create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/mapping.json create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/module-record.md create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/modules.json create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/screens.json create mode 100644 plugins/nhcx/skills/nhcx-payment/templates/validation-record.json create mode 100644 plugins/nhcx/skills/nhcx-payment/ui/UI-GUIDE.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/SKILL.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/core/FOUNDATION.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/core/LADDER.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/fhir/FHIR.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/flow/FLOW.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/flow/flow.json create mode 100644 plugins/nhcx/skills/nhcx-preauth/references/api-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/references/errors-and-debugging.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/references/fhir-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/references/flow-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/references/material.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/references/testing-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/references/transport-knowledge.md create mode 100755 plugins/nhcx/skills/nhcx-preauth/scripts/fetch-package.sh create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/0-capability-check.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/1-idea.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/10-run-tests.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/11-build-report.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/2-planning.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/3-discovery.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/4-flow-and-data-mapping.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/5-screen-plan.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/6-code-plan.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/7-write-code/7.1-config-and-transport.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/7-write-code/7.10-communication-and-payment.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/7-write-code/7.11-state-and-payer-adapters.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/7-write-code/7.12-screens.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/7-write-code/7.13-standalone-shell.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/7-write-code/7.2-storage.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/7-write-code/7.3-callback-and-archive.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/7-write-code/7.4-policy-and-coverage.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/7-write-code/7.5-insurance-plan.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/7-write-code/7.6-auth-requirements.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/7-write-code/7.7-claim-bundle.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/7-write-code/7.8-claim-response-reader.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/7-write-code/7.9-tasks.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/7-write-code/README.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/8-validate-modules.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/stages/9-write-tests.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/0-capability.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/1-idea.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/10-test-run.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/11-report.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/2-planning.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/3-discovery.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/4-flow-data-mapping.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/5-screen-plan.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/6-code-plan.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/8-validation.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/9-tests.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/STATE.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/capabilities.json create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/mapping.json create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/module-record.md create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/modules.json create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/screens.json create mode 100644 plugins/nhcx/skills/nhcx-preauth/templates/validation-record.json create mode 100644 plugins/nhcx/skills/nhcx-preauth/ui/UI-GUIDE.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/SKILL.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/core/FOUNDATION.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/core/LADDER.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/fhir/FHIR.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/flow/FLOW.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/flow/flow.json create mode 100644 plugins/nhcx/skills/nhcx-reprocess/references/api-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/references/errors-and-debugging.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/references/fhir-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/references/flow-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/references/material.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/references/testing-knowledge.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/references/transport-knowledge.md create mode 100755 plugins/nhcx/skills/nhcx-reprocess/scripts/fetch-package.sh create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/0-capability-check.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/1-idea.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/10-run-tests.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/11-build-report.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/2-planning.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/3-discovery.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/4-flow-and-data-mapping.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/5-screen-plan.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/6-code-plan.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/7-write-code/7.1-config-and-transport.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/7-write-code/7.10-communication-and-payment.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/7-write-code/7.11-state-and-payer-adapters.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/7-write-code/7.12-screens.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/7-write-code/7.13-standalone-shell.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/7-write-code/7.2-storage.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/7-write-code/7.3-callback-and-archive.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/7-write-code/7.4-policy-and-coverage.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/7-write-code/7.5-insurance-plan.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/7-write-code/7.6-auth-requirements.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/7-write-code/7.7-claim-bundle.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/7-write-code/7.8-claim-response-reader.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/7-write-code/7.9-tasks.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/7-write-code/README.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/8-validate-modules.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/stages/9-write-tests.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/0-capability.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/1-idea.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/10-test-run.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/11-report.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/2-planning.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/3-discovery.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/4-flow-data-mapping.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/5-screen-plan.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/6-code-plan.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/8-validation.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/9-tests.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/STATE.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/capabilities.json create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/mapping.json create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/module-record.md create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/modules.json create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/screens.json create mode 100644 plugins/nhcx/skills/nhcx-reprocess/templates/validation-record.json create mode 100644 plugins/nhcx/skills/nhcx-reprocess/ui/UI-GUIDE.md create mode 100644 scripts/verify-nhcx.sh create mode 100644 site/docs/nhcx/v1/getting-started/build-with-ai.mdx create mode 100644 site/docs/nhcx/v1/getting-started/get-your-sandbox-credentials.md create mode 100644 site/docs/nhcx/v1/getting-started/quickstart.md create mode 100644 site/docs/nhcx/v1/go-live/security-audit.md create mode 100644 site/docs/nhcx/v1/troubleshooting/_category_.json create mode 100644 site/docs/nhcx/v1/troubleshooting/accepted-then-no-callback.md create mode 100644 site/docs/nhcx/v1/troubleshooting/every-call-returns-401.md create mode 100644 site/docs/nhcx/v1/troubleshooting/index.md create mode 100644 site/docs/nhcx/v1/troubleshooting/responses-arrive-against-the-wrong-request.md create mode 100644 site/docs/nhcx/v1/troubleshooting/the-payer-rejects-your-bundle.md create mode 100644 site/docs/nhcx/v1/troubleshooting/the-recipient-cannot-decrypt.md create mode 100644 site/docs/nhcx/v1/troubleshooting/your-callback-url-is-rejected.md create mode 100644 site/docs/whats-new/2026-09-15.mdx diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index f05ef9847..282ff29d4 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1,7 +1,7 @@ { "$schema": "https://anthropic.com/claude-code/marketplace.schema.json", "name": "abdm-portal", - "description": "The ABDM Developer Portal: integration skills for ABDM integrators, and the contributor's assistant for building the portal itself", + "description": "The ABDM Developer Portal: integration skills for ABDM and NHCX integrators, and the contributor's assistant for building the portal itself", "owner": { "name": "ABDM Developer Portal working group", "url": "https://github.com/eka-care/abdm-docs" @@ -12,7 +12,31 @@ "source": "./plugins/abdm", "description": "hiecm-m1-build and hiecm-m1-debug scaffold and debug an ABDM Milestone 1 (ABHA) integration, citing the Catalogue atom behind every call. fhir-generate and fhir-audit build or audit NRCES compliant FHIR document bundles, iterating against the Docs MCP validator until clean.", "category": "documentation", - "keywords": ["abdm", "abha", "hie-cm", "fhir", "nrces", "healthcare", "india-health"], + "keywords": [ + "abdm", + "abha", + "hie-cm", + "fhir", + "nrces", + "healthcare", + "india-health" + ], + "homepage": "https://github.com/eka-care/abdm-docs" + }, + { + "name": "nhcx", + "source": "./plugins/nhcx", + "description": "One agent skill per NHCX use case, in episode order: coverage, insurance plan, pre-authorisation, claim, payment, communication and reprocess. Each builds its use case into a hospital information system or a claims desk, held to the NHCX package's pinned FHIR bundles.", + "category": "documentation", + "keywords": [ + "nhcx", + "claims", + "insurance", + "pmjay", + "fhir", + "healthcare", + "india-health" + ], "homepage": "https://github.com/eka-care/abdm-docs" }, { diff --git a/README.md b/README.md index 927eb2897..1d92096cd 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,9 @@ the plugin for building this portal, not for integrating with ABDM: atom authoring, verification, linting, OpenAPI ingestion, docs, skill compilation, the update pipeline, the support agent, planning and proof. Four of its skills are compiled from the plan above. The separate `plugins/abdm` ships the -compiled integration skills that ABDM integrators install. +compiled integration skills that ABDM integrators install, and +[plugins/nhcx](plugins/nhcx) ships seven NHCX agent skills, one per NHCX use +case, for building claims into a hospital system or a claims desk. ## How retrieval and chat work diff --git a/catalogue/atom-routes.json b/catalogue/atom-routes.json index 2b5fec530..a97067a55 100644 --- a/catalogue/atom-routes.json +++ b/catalogue/atom-routes.json @@ -1,8 +1,8 @@ { "note": "Generated by scripts/build-atom-routes.mjs. Do not edit by hand. An atom never carries a route; a page may claim one with covers:.", - "atoms": 196, - "mapped": 180, - "derived": 179, + "atoms": 739, + "mapped": 603, + "derived": 603, "validatedAgainstBuild": true, "routes": [ { @@ -269,11 +269,11 @@ { "atom": "hiecm.endpoint.gateway-sessions", "type": "endpoint", - "route": "/docs/nhcx/v1/api/session/endpoints/session-session-token", + "route": "/docs/hiecm/v3/api/gateway/endpoints/gateway-sessions-create", "anchor": null, - "link": "/docs/nhcx/v1/api/session/endpoints/session-session-token", - "rule": "method and path join, module unconfirmed", - "confidence": "needs review" + "link": "/docs/hiecm/v3/api/gateway/endpoints/gateway-sessions-create", + "rule": "same spec operation as the generated API page", + "confidence": "derived" }, { "atom": "hiecm.endpoint.gateway-update-bridge-url", @@ -746,18 +746,18 @@ { "atom": "hiecm.endpoint.m2-on-link-confirm", "type": "endpoint", - "route": "/docs/hiecm/v3/api/m2/endpoints/m2-on-link-confirm", + "route": "/docs/hiecm/v3/api/m2/endpoints/m2-receive-link-confirm", "anchor": null, - "link": "/docs/hiecm/v3/api/m2/endpoints/m2-on-link-confirm", + "link": "/docs/hiecm/v3/api/m2/endpoints/m2-receive-link-confirm", "rule": "same spec operation as the generated API page", "confidence": "derived" }, { "atom": "hiecm.endpoint.m2-on-link-init", "type": "endpoint", - "route": "/docs/hiecm/v3/api/m2/endpoints/m2-on-link-init", + "route": "/docs/hiecm/v3/api/m2/endpoints/m2-receive-link-init", "anchor": null, - "link": "/docs/hiecm/v3/api/m2/endpoints/m2-on-link-init", + "link": "/docs/hiecm/v3/api/m2/endpoints/m2-receive-link-init", "rule": "same spec operation as the generated API page", "confidence": "derived" }, @@ -1166,6 +1166,4893 @@ "rule": "claimed by otp-never-arrives", "confidence": "derived" }, + { + "atom": "nhcx.callback.claim-on-submit", + "type": "callback", + "route": "/docs/nhcx/v1/api/claim/endpoints/claim-webhook-v1-claim-on-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/claim/endpoints/claim-webhook-v1-claim-on-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.claim-submit", + "type": "callback", + "route": "/docs/nhcx/v1/api/claim/endpoints/claim-webhook-v1-claim-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/claim/endpoints/claim-webhook-v1-claim-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.communication-on-request", + "type": "callback", + "route": "/docs/nhcx/v1/api/communication/endpoints/communication-webhook-v1-communication-on-request", + "anchor": null, + "link": "/docs/nhcx/v1/api/communication/endpoints/communication-webhook-v1-communication-on-request", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.communication-request", + "type": "callback", + "route": "/docs/nhcx/v1/api/communication/endpoints/communication-webhook-v1-communication-request", + "anchor": null, + "link": "/docs/nhcx/v1/api/communication/endpoints/communication-webhook-v1-communication-request", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.coverageeligibility-check", + "type": "callback", + "route": "/docs/nhcx/v1/api/eligibility/endpoints/eligibility-webhook-v1-coverageeligibility-check", + "anchor": null, + "link": "/docs/nhcx/v1/api/eligibility/endpoints/eligibility-webhook-v1-coverageeligibility-check", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.coverageeligibility-on-check", + "type": "callback", + "route": "/docs/nhcx/v1/api/eligibility/endpoints/eligibility-webhook-v1-coverageeligibility-on-check", + "anchor": null, + "link": "/docs/nhcx/v1/api/eligibility/endpoints/eligibility-webhook-v1-coverageeligibility-on-check", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.error", + "type": "callback", + "route": "/docs/nhcx/v1/api/other/endpoints/other-webhook-v1-error", + "anchor": null, + "link": "/docs/nhcx/v1/api/other/endpoints/other-webhook-v1-error", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.insuranceplan-on-request", + "type": "callback", + "route": "/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-webhook-v1-insuranceplan-on-request", + "anchor": null, + "link": "/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-webhook-v1-insuranceplan-on-request", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.insuranceplan-request", + "type": "callback", + "route": "/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-webhook-v1-insuranceplan-request", + "anchor": null, + "link": "/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-webhook-v1-insuranceplan-request", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.notification-delivery", + "type": "callback", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.callback.on-status", + "type": "callback", + "route": "/docs/nhcx/v1/api/other/endpoints/other-webhook-v1-on-status", + "anchor": null, + "link": "/docs/nhcx/v1/api/other/endpoints/other-webhook-v1-on-status", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.paymentnotice-on-request", + "type": "callback", + "route": "/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-webhook-v1-paymentnotice-on-request", + "anchor": null, + "link": "/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-webhook-v1-paymentnotice-on-request", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.paymentnotice-request", + "type": "callback", + "route": "/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-webhook-v1-paymentnotice-request", + "anchor": null, + "link": "/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-webhook-v1-paymentnotice-request", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.preauth-on-submit", + "type": "callback", + "route": "/docs/nhcx/v1/api/preauth/endpoints/preauth-webhook-v1-preauth-on-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/preauth/endpoints/preauth-webhook-v1-preauth-on-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.preauth-submit", + "type": "callback", + "route": "/docs/nhcx/v1/api/preauth/endpoints/preauth-webhook-v1-preauth-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/preauth/endpoints/preauth-webhook-v1-preauth-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.predetermination-on-submit", + "type": "callback", + "route": "/docs/nhcx/v1/api/predetermination/endpoints/predetermination-webhook-v1-predetermination-on-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/predetermination/endpoints/predetermination-webhook-v1-predetermination-on-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.predetermination-submit", + "type": "callback", + "route": "/docs/nhcx/v1/api/predetermination/endpoints/predetermination-webhook-v1-predetermination-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/predetermination/endpoints/predetermination-webhook-v1-predetermination-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.search-on-submit", + "type": "callback", + "route": "/docs/nhcx/v1/api/status/endpoints/status-webhook-v1-search-on-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/status/endpoints/status-webhook-v1-search-on-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.search-submit", + "type": "callback", + "route": "/docs/nhcx/v1/api/status/endpoints/status-webhook-v1-search-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/status/endpoints/status-webhook-v1-search-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.status", + "type": "callback", + "route": "/docs/nhcx/v1/api/status/endpoints/status-webhook-v1-status", + "anchor": null, + "link": "/docs/nhcx/v1/api/status/endpoints/status-webhook-v1-status", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.task-on-submit", + "type": "callback", + "route": "/docs/nhcx/v1/api/other/endpoints/other-webhook-v1-task-on-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/other/endpoints/other-webhook-v1-task-on-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.callback.task-submit", + "type": "callback", + "route": "/docs/nhcx/v1/api/other/endpoints/other-webhook-v1-task-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/other/endpoints/other-webhook-v1-task-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.concept.access-control", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.audit-and-non-repudiation", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.beneficiary-consent", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.biometric-authentication", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.claim-cycle", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.coverage-eligibility-purposes", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.encryption-certificate", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.error-code-spaces", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.fhir-in-nhcx", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.four-message-legs", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.grievance-redressal", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.hmis-integration-architecture", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.insurance-plan", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.jwe-envelope", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.message-identifiers", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.notifications", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.participant-code", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.participant-registry", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.participant-roles", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.pmjay-on-nhcx", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.policy-linking", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.protocol-headers", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.queries-and-communication", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.reprocess-and-cancel", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.retries-and-expiry", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.session-token", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.status-lifecycle", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.synchronous-acknowledgement", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.what-nhcx-is", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.concept.workflow-codes", + "type": "concept", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.decision.biometric-modality", + "type": "decision", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.decision.eligibility-purpose", + "type": "decision", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.decision.jwe-serialisation", + "type": "decision", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.decision.key-encryption-algorithm", + "type": "decision", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.decision.payer-implementation", + "type": "decision", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.decision.preauth-or-predetermination", + "type": "decision", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.decision.session-endpoint", + "type": "decision", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.decision.status-poll-or-wait", + "type": "decision", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.endpoint.abha-biometric-auth-init", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/biometric/endpoints/biometric-auth-init", + "anchor": null, + "link": "/docs/nhcx/v1/api/biometric/endpoints/biometric-auth-init", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.abha-biometric-auth-refresh-token", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/biometric/endpoints/biometric-auth-refresh-token", + "anchor": null, + "link": "/docs/nhcx/v1/api/biometric/endpoints/biometric-auth-refresh-token", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.abha-biometric-auth-verify", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/biometric/endpoints/biometric-auth-verify", + "anchor": null, + "link": "/docs/nhcx/v1/api/biometric/endpoints/biometric-auth-verify", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.abha-biometric-capture-pid", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/biometric/endpoints/biometric-faceauth-capture-pid", + "anchor": null, + "link": "/docs/nhcx/v1/api/biometric/endpoints/biometric-faceauth-capture-pid", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.abha-biometric-faceauth-init", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/biometric/endpoints/biometric-faceauth-init", + "anchor": null, + "link": "/docs/nhcx/v1/api/biometric/endpoints/biometric-faceauth-init", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.abha-biometric-v2-auth-verify", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/biometric/endpoints/biometric-faceauth-v2-auth-verify", + "anchor": null, + "link": "/docs/nhcx/v1/api/biometric/endpoints/biometric-faceauth-v2-auth-verify", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.claim-on-submit", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/claim/endpoints/claim-v1-claim-on-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/claim/endpoints/claim-v1-claim-on-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.claim-submit", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/claim/endpoints/claim-v1-claim-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/claim/endpoints/claim-v1-claim-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.communication-on-request", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/communication/endpoints/communication-v1-communication-on-request", + "anchor": null, + "link": "/docs/nhcx/v1/api/communication/endpoints/communication-v1-communication-on-request", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.communication-request", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/communication/endpoints/communication-v1-communication-request", + "anchor": null, + "link": "/docs/nhcx/v1/api/communication/endpoints/communication-v1-communication-request", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.coverageeligibility-check", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/eligibility/endpoints/eligibility-v1-coverageeligibility-check", + "anchor": null, + "link": "/docs/nhcx/v1/api/eligibility/endpoints/eligibility-v1-coverageeligibility-check", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.coverageeligibility-on-check", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/eligibility/endpoints/eligibility-v1-coverageeligibility-on-check", + "anchor": null, + "link": "/docs/nhcx/v1/api/eligibility/endpoints/eligibility-v1-coverageeligibility-on-check", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.dummy-payer-paymentnotice-init", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-dummy-payer-paymentnotice-init", + "anchor": null, + "link": "/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-dummy-payer-paymentnotice-init", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.dummy-payer-process-request", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-dummy-payer-process-request", + "anchor": null, + "link": "/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-dummy-payer-process-request", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.fetch-certs", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/registry/endpoints/registry-fetch-certs", + "anchor": null, + "link": "/docs/nhcx/v1/api/registry/endpoints/registry-fetch-certs", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.fetch-participants-list", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/registry/endpoints/registry-fetch-participants-list", + "anchor": null, + "link": "/docs/nhcx/v1/api/registry/endpoints/registry-fetch-participants-list", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.get-session", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/registry/endpoints/registry-get-session", + "anchor": null, + "link": "/docs/nhcx/v1/api/registry/endpoints/registry-get-session", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.insuranceplan-on-request", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-v1-insuranceplan-on-request", + "anchor": null, + "link": "/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-v1-insuranceplan-on-request", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.insuranceplan-request", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-v1-insuranceplan-request", + "anchor": null, + "link": "/docs/nhcx/v1/api/insurance-plan/endpoints/insurance-plan-v1-insuranceplan-request", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.notification-subscribe", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/other/endpoints/other-v1-notification-subscribe", + "anchor": null, + "link": "/docs/nhcx/v1/api/other/endpoints/other-v1-notification-subscribe", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.on-status", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/other/endpoints/other-v1-on-status", + "anchor": null, + "link": "/docs/nhcx/v1/api/other/endpoints/other-v1-on-status", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.participant-create", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/onboarding/endpoints/onboarding-participant-create", + "anchor": null, + "link": "/docs/nhcx/v1/api/onboarding/endpoints/onboarding-participant-create", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.participant-delink-abha-policy", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/registry/endpoints/registry-participant-delink-abha-policy", + "anchor": null, + "link": "/docs/nhcx/v1/api/registry/endpoints/registry-participant-delink-abha-policy", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.participant-details", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/registry/endpoints/registry-participant-details", + "anchor": null, + "link": "/docs/nhcx/v1/api/registry/endpoints/registry-participant-details", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.participant-get-policies", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/registry/endpoints/registry-participant-get-policies", + "anchor": null, + "link": "/docs/nhcx/v1/api/registry/endpoints/registry-participant-get-policies", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.participant-link-abha-policy", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/registry/endpoints/registry-participant-link-abha-policy", + "anchor": null, + "link": "/docs/nhcx/v1/api/registry/endpoints/registry-participant-link-abha-policy", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.participant-search", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/registry/endpoints/registry-participant-search", + "anchor": null, + "link": "/docs/nhcx/v1/api/registry/endpoints/registry-participant-search", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.participant-update", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/registry/endpoints/registry-participant-update", + "anchor": null, + "link": "/docs/nhcx/v1/api/registry/endpoints/registry-participant-update", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.payer-service-get-user-role", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-adjudicator-role", + "anchor": null, + "link": "/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-adjudicator-role", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.payer-service-process-case", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-adjudicator-process", + "anchor": null, + "link": "/docs/nhcx/v1/api/adjudicator/endpoints/adjudicator-adjudicator-process", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.paymentnotice-on-request", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-v1-paymentnotice-on-request", + "anchor": null, + "link": "/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-v1-paymentnotice-on-request", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.paymentnotice-request", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-v1-paymentnotice-request", + "anchor": null, + "link": "/docs/nhcx/v1/api/payment-notice/endpoints/payment-notice-v1-paymentnotice-request", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.preauth-on-submit", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-on-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-on-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.preauth-submit", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/preauth/endpoints/preauth-v1-preauth-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.predetermination-on-submit", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/predetermination/endpoints/predetermination-v1-predetermination-on-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/predetermination/endpoints/predetermination-v1-predetermination-on-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.predetermination-submit", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/predetermination/endpoints/predetermination-v1-predetermination-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/predetermination/endpoints/predetermination-v1-predetermination-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.search-on-submit", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/status/endpoints/status-v1-search-on-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/status/endpoints/status-v1-search-on-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.search-submit", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/status/endpoints/status-v1-search-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/status/endpoints/status-v1-search-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.session-token", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/session/endpoints/session-session-token", + "anchor": null, + "link": "/docs/nhcx/v1/api/session/endpoints/session-session-token", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.status", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/status/endpoints/status-v1-status", + "anchor": null, + "link": "/docs/nhcx/v1/api/status/endpoints/status-v1-status", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.task-on-submit", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/other/endpoints/other-v1-task-on-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/other/endpoints/other-v1-task-on-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.task-submit", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/other/endpoints/other-v1-task-submit", + "anchor": null, + "link": "/docs/nhcx/v1/api/other/endpoints/other-v1-task-submit", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.update-validate", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/onboarding/endpoints/onboarding-update-validate", + "anchor": null, + "link": "/docs/nhcx/v1/api/onboarding/endpoints/onboarding-update-validate", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.v2-participant-create", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/onboarding/endpoints/onboarding-v2-participant-create", + "anchor": null, + "link": "/docs/nhcx/v1/api/onboarding/endpoints/onboarding-v2-participant-create", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.v2-participant-delink-abha-policy", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/registry/endpoints/registry-v2-participant-delink-abha-policy", + "anchor": null, + "link": "/docs/nhcx/v1/api/registry/endpoints/registry-v2-participant-delink-abha-policy", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.v2-participant-get-policies", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/registry/endpoints/registry-v2-participant-get-policies", + "anchor": null, + "link": "/docs/nhcx/v1/api/registry/endpoints/registry-v2-participant-get-policies", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.v2-participant-link-abha-policy", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/registry/endpoints/registry-v2-participant-link-abha-policy", + "anchor": null, + "link": "/docs/nhcx/v1/api/registry/endpoints/registry-v2-participant-link-abha-policy", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.v2-participant-update", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/registry/endpoints/registry-v2-participant-update", + "anchor": null, + "link": "/docs/nhcx/v1/api/registry/endpoints/registry-v2-participant-update", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.v2-update-cert", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/registry/endpoints/registry-v2-update-cert", + "anchor": null, + "link": "/docs/nhcx/v1/api/registry/endpoints/registry-v2-update-cert", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.endpoint.validate", + "type": "endpoint", + "route": "/docs/nhcx/v1/api/onboarding/endpoints/onboarding-validate", + "anchor": null, + "link": "/docs/nhcx/v1/api/onboarding/endpoints/onboarding-validate", + "rule": "same spec operation as the generated API page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.err-pyr-clm-007", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-observed", + "link": "/docs/nhcx/v1/reference/error-codes#other-observed", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1001", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other", + "link": "/docs/nhcx/v1/reference/error-codes#other", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1002", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other", + "link": "/docs/nhcx/v1/reference/error-codes#other", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1003", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1004", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1005", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1006", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1007", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1008", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1009", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1010", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1011", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1012", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1013", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1014", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1015", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1016", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1017", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-1018", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.nhcx-401", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-gateway", + "link": "/docs/nhcx/v1/reference/error-codes#other-gateway", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1001", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1002", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other", + "link": "/docs/nhcx/v1/reference/error-codes#other", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1003", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1004", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1005", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1006", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1007", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1008", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1009", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1010", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1011", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1012", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1013", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1014", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1015", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1016", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1017", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1018", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1019", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1020", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-standard-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-standard-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1021", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1023", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1024", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1025", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1026", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1027", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1028", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1029", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1030", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1031", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1032", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1033", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1034", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1035", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1036", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1037", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1038", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1039", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1040", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1041", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1042", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1043", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1044", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1045", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1046", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1047", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1048", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1049", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1050", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1051", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1052", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1053", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1054", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1055", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1056", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1057", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1058", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1059", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1060", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1061", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1062", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1063", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1064", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1065", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1066", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1067", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1068", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1069", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1070", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1071", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1072", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1073", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1074", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1075", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1076", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1077", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1078", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1079", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1080", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1081", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1082", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1083", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1084", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1085", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1086", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1087", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1088", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1089", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1090", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1091", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1092", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1093", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1094", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1095", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1096", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1097", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1098", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1099", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "other-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#other-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1101", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1102", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1103", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1104", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1105", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1106", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1107", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1108", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1109", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1110", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1111", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1112", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1113", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1114", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1115", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1116", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1117", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1118", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1119", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1120", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1121", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1122", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1123", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1201", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1202", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1203", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1204", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1205", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1206", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1207", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1208", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1209", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1210", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1211", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1212", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1213", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1214", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1215", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1216", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1217", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1218", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1219", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1220", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1221", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1222", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1223", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1224", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1225", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1226", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1227", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1228", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1229", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1230", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1231", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1232", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1233", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1234", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1235", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1236", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1237", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1238", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1239", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1240", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1241", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1242", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1243", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1244", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1245", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1246", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1247", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1248", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1249", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1250", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1251", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1252", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1253", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1254", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1255", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1256", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1257", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1258", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1259", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1260", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1261", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1262", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1263", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1264", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1265", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1266", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1267", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1268", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1269", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1270", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1271", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1272", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1273", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "pre-authorisation-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#pre-authorisation-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1301", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1302", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1303", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1304", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1305", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1306", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1307", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1308", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1309", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1310", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1311", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1312", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1313", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1314", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1315", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1316", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1317", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1318", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1319", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1320", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1321", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1322", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1323", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1324", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1325", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1326", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1327", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1328", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1329", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1330", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1331", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1332", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1333", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1334", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1335", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1336", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1337", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1338", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1339", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1340", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1341", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1342", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1343", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1344", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1345", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1346", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1347", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1348", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1349", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1350", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1351", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1352", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1353", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1354", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1355", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1356", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1357", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1358", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1359", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1360", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1361", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1362", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1363", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1364", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1365", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1366", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1367", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1368", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1369", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1370", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "claim-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#claim-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1401", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1402", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1403", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1404", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1405", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1406", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1501", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1502", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1503", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1504", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1505", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1506", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1507", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1508", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1509", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1510", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1511", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1512", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1513", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1514", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1515", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1516", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1517", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1518", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1519", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "insurance-plan-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#insurance-plan-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.error.payr-1520", + "type": "error", + "route": "/docs/nhcx/v1/reference/error-codes", + "anchor": "coverage-eligibility-reference-payer", + "link": "/docs/nhcx/v1/reference/error-codes#coverage-eligibility-reference-payer", + "rule": "error code listed on the error codes page", + "confidence": "derived" + }, + { + "atom": "nhcx.fhir.claim-request", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.fhir.claim-response", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.fhir.collection-bundle", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.fhir.coverage-eligibility-request", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.fhir.coverage-eligibility-response", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.fhir.insurance-plan-bundle", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.fhir.payment-notice", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.fhir.pmjay-insurance-plan", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.fhir.preauth-cancel", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.fhir.preauth-enhancement", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.fhir.preauth-request", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.fhir.preauth-response", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.fhir.query-update", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.fhir.task", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.fhir.terminologies", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.fhir.validation", + "type": "fhir", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.biometric-face", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.biometric-fingerprint-iris", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.claim-query-response", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.claim-reprocess", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.claim-search", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.claim-submit", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.coverage-eligibility-check", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.generate-and-register-certificate", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.insurance-plan-request", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.notification-subscribe", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.payer-process-a-request", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.payment-notice", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.pmjay-hospital-migration", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.pmjay-patient-to-cashless", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.policy-link-and-delink", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.preauth-cancel", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.preauth-enhancement", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.preauth-query-response", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.preauth-submit", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.predetermination", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.production-onboarding", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.receive-a-sealed-callback", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.report-a-processing-error", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.rotate-certificate", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.sandbox-onboarding", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.send-a-sealed-request", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.flow.status-check", + "type": "flow", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.glossary.adjudication", + "type": "glossary", + "route": "/docs/nhcx/v1/reference/fhir/codes-and-value-sets", + "anchor": "adjudication", + "link": "/docs/nhcx/v1/reference/fhir/codes-and-value-sets#adjudication", + "rule": "term defined under its own heading on codes-and-value-sets", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.api-call-id", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/glossary", + "anchor": "messages", + "link": "/docs/nhcx/v1/getting-started/glossary#messages", + "rule": "term defined on glossary", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.bis", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/glossary", + "anchor": "pmjay-systems-and-roles", + "link": "/docs/nhcx/v1/getting-started/glossary#pmjay-systems-and-roles", + "rule": "term defined on glossary", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.claim", + "type": "glossary", + "route": "/docs/nhcx/v1/reference/authentication", + "anchor": "claim", + "link": "/docs/nhcx/v1/reference/authentication#claim", + "rule": "term defined under its own heading on authentication", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.communication-request", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/receiving-a-callback", + "anchor": "closing-the-loop", + "link": "/docs/nhcx/v1/getting-started/receiving-a-callback#closing-the-loop", + "rule": "term defined on receiving-a-callback", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.correlation-id", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/get-your-sandbox-credentials", + "anchor": "when-it-goes-wrong", + "link": "/docs/nhcx/v1/getting-started/get-your-sandbox-credentials#when-it-goes-wrong", + "rule": "term defined on get-your-sandbox-credentials", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.coverage-eligibility", + "type": "glossary", + "route": "/docs/nhcx/v1/reference/authentication", + "anchor": "coverage-eligibility", + "link": "/docs/nhcx/v1/reference/authentication#coverage-eligibility", + "rule": "term defined under its own heading on authentication", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.crc", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/glossary", + "anchor": "pmjay-systems-and-roles", + "link": "/docs/nhcx/v1/getting-started/glossary#pmjay-systems-and-roles", + "rule": "term defined on glossary", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.enhancement", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/build-with-ai", + "anchor": "agent-skills", + "link": "/docs/nhcx/v1/getting-started/build-with-ai#agent-skills", + "rule": "term defined on build-with-ai", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.hbp", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/glossary", + "anchor": "pmjay-systems-and-roles", + "link": "/docs/nhcx/v1/getting-started/glossary#pmjay-systems-and-roles", + "rule": "term defined on glossary", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.insurance-plan", + "type": "glossary", + "route": "/docs/nhcx/v1/reference/authentication", + "anchor": "insurance-plan", + "link": "/docs/nhcx/v1/reference/authentication#insurance-plan", + "rule": "term defined under its own heading on authentication", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.irdai", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/creating-and-updating-a-participant", + "anchor": "sandbox-create", + "link": "/docs/nhcx/v1/getting-started/creating-and-updating-a-participant#sandbox-create", + "rule": "term defined on creating-and-updating-a-participant", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.jwe", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/building-and-sending-a-jwe", + "anchor": null, + "link": "/docs/nhcx/v1/getting-started/building-and-sending-a-jwe", + "rule": "term defined on building-and-sending-a-jwe", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.participant-code", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/creating-and-updating-a-participant", + "anchor": null, + "link": "/docs/nhcx/v1/getting-started/creating-and-updating-a-participant", + "rule": "term defined on creating-and-updating-a-participant", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.payer", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/base-urls", + "anchor": "every-base-in-both-environments", + "link": "/docs/nhcx/v1/getting-started/base-urls#every-base-in-both-environments", + "rule": "term defined on base-urls", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.payment-notice", + "type": "glossary", + "route": "/docs/nhcx/v1/reference/authentication", + "anchor": "payment-notice", + "link": "/docs/nhcx/v1/reference/authentication#payment-notice", + "rule": "term defined under its own heading on authentication", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.pid-block", + "type": "glossary", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.glossary.pmjay", + "type": "glossary", + "route": "/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall", + "anchor": "pmjay", + "link": "/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall#pmjay", + "rule": "term defined under its own heading on cancel-reprocess-and-shortfall", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.preauthorisation", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/base-urls", + "anchor": "every-base-in-both-environments", + "link": "/docs/nhcx/v1/getting-started/base-urls#every-base-in-both-environments", + "rule": "term defined on base-urls", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.predetermination", + "type": "glossary", + "route": "/docs/nhcx/v1/reference/authentication", + "anchor": "predetermination", + "link": "/docs/nhcx/v1/reference/authentication#predetermination", + "rule": "term defined under its own heading on authentication", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.protected-header", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/building-and-sending-a-jwe", + "anchor": null, + "link": "/docs/nhcx/v1/getting-started/building-and-sending-a-jwe", + "rule": "term defined on building-and-sending-a-jwe", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.provider", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/creating-and-updating-a-participant", + "anchor": "sandbox-create", + "link": "/docs/nhcx/v1/getting-started/creating-and-updating-a-participant#sandbox-create", + "rule": "term defined on creating-and-updating-a-participant", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.rd-service", + "type": "glossary", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.glossary.reprocess", + "type": "glossary", + "route": "/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall", + "anchor": "reprocess", + "link": "/docs/nhcx/v1/reference/fhir/cancel-reprocess-and-shortfall#reprocess", + "rule": "term defined under its own heading on cancel-reprocess-and-shortfall", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.sandbox-exit", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/get-your-sandbox-credentials", + "anchor": "where-to-get-help", + "link": "/docs/nhcx/v1/getting-started/get-your-sandbox-credentials#where-to-get-help", + "rule": "term defined on get-your-sandbox-credentials", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.sha", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/glossary", + "anchor": "organisations-and-programmes", + "link": "/docs/nhcx/v1/getting-started/glossary#organisations-and-programmes", + "rule": "term defined on glossary", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.tms", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/glossary", + "anchor": "pmjay-systems-and-roles", + "link": "/docs/nhcx/v1/getting-started/glossary#pmjay-systems-and-roles", + "rule": "term defined on glossary", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.tpa", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/creating-and-updating-a-participant", + "anchor": "sandbox-create", + "link": "/docs/nhcx/v1/getting-started/creating-and-updating-a-participant#sandbox-create", + "rule": "term defined on creating-and-updating-a-participant", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.workflow-id", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/glossary", + "anchor": "messages", + "link": "/docs/nhcx/v1/getting-started/glossary#messages", + "rule": "term defined on glossary", + "confidence": "derived" + }, + { + "atom": "nhcx.glossary.x509-certificate", + "type": "glossary", + "route": "/docs/nhcx/v1/getting-started/fetching-a-recipient-certificate", + "anchor": "what-comes-back", + "link": "/docs/nhcx/v1/getting-started/fetching-a-recipient-certificate#what-comes-back", + "rule": "term defined on fetching-a-recipient-certificate", + "confidence": "derived" + }, + { + "atom": "nhcx.sandbox.callback-url-requirements", + "type": "sandbox", + "route": "/docs/nhcx/v1/getting-started/receiving-a-callback", + "anchor": null, + "link": "/docs/nhcx/v1/getting-started/receiving-a-callback", + "rule": "claimed by receiving-a-callback", + "confidence": "derived" + }, + { + "atom": "nhcx.sandbox.dummy-payer", + "type": "sandbox", + "route": "/docs/nhcx/v1/getting-started/get-your-sandbox-credentials", + "anchor": null, + "link": "/docs/nhcx/v1/getting-started/get-your-sandbox-credentials", + "rule": "claimed by get-your-sandbox-credentials", + "confidence": "derived" + }, + { + "atom": "nhcx.sandbox.environments-and-base-urls", + "type": "sandbox", + "route": "/docs/nhcx/v1/getting-started/base-urls", + "anchor": null, + "link": "/docs/nhcx/v1/getting-started/base-urls", + "rule": "claimed by base-urls", + "confidence": "derived" + }, + { + "atom": "nhcx.sandbox.going-live", + "type": "sandbox", + "route": "/docs/nhcx/v1/go-live", + "anchor": null, + "link": "/docs/nhcx/v1/go-live", + "rule": "claimed by go-live", + "confidence": "derived" + }, + { + "atom": "nhcx.sandbox.prerequisites", + "type": "sandbox", + "route": "/docs/nhcx/v1/getting-started/get-your-sandbox-credentials", + "anchor": null, + "link": "/docs/nhcx/v1/getting-started/get-your-sandbox-credentials", + "rule": "claimed by get-your-sandbox-credentials", + "confidence": "derived" + }, + { + "atom": "nhcx.sandbox.sandbox-exit", + "type": "sandbox", + "route": "/docs/nhcx/v1/go-live", + "anchor": null, + "link": "/docs/nhcx/v1/go-live", + "rule": "claimed by go-live", + "confidence": "derived" + }, + { + "atom": "nhcx.sandbox.support-contacts", + "type": "sandbox", + "route": "/docs/nhcx/v1/getting-started/get-your-sandbox-credentials", + "anchor": null, + "link": "/docs/nhcx/v1/getting-started/get-your-sandbox-credentials", + "rule": "claimed by get-your-sandbox-credentials", + "confidence": "derived" + }, + { + "atom": "nhcx.sandbox.test-participants", + "type": "sandbox", + "route": "/docs/nhcx/v1/getting-started/get-your-sandbox-credentials", + "anchor": null, + "link": "/docs/nhcx/v1/getting-started/get-your-sandbox-credentials", + "rule": "claimed by get-your-sandbox-credentials", + "confidence": "derived" + }, + { + "atom": "nhcx.test.payer-uc-01", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.payer-uc-02", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.payer-uc-03", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.payer-uc-04", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.payer-uc-05", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.payer-uc-06", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.payer-uc-07", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.payer-uc-08", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.payer-uc-09", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.payer-uc-10", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.payer-uc-11", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.payer-uc-12", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.payer-uc-13", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.payer-uc-14", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.payer-uc-15", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.provider-uc-01", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.provider-uc-02", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.provider-uc-03", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.provider-uc-04", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.provider-uc-05", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.provider-uc-06", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.provider-uc-07", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.provider-uc-08", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.provider-uc-09", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.provider-uc-10", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.provider-uc-11", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.provider-uc-12", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.provider-uc-13", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.tc-abha-01", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.tc-ce-01", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.tc-cl-01", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.tc-cl-02", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.tc-cl-03", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.tc-hbp-01", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.tc-pa-01", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.test.tc-pa-02", + "type": "test", + "route": null, + "anchor": null, + "link": null, + "rule": "no rule matched", + "confidence": "unmapped" + }, + { + "atom": "nhcx.troubleshooting.accepted-then-no-callback", + "type": "troubleshooting", + "route": "/docs/nhcx/v1/troubleshooting/accepted-then-no-callback", + "anchor": null, + "link": "/docs/nhcx/v1/troubleshooting/accepted-then-no-callback", + "rule": "claimed by accepted-then-no-callback", + "confidence": "derived" + }, + { + "atom": "nhcx.troubleshooting.bundle-rejected", + "type": "troubleshooting", + "route": "/docs/nhcx/v1/troubleshooting/the-payer-rejects-your-bundle", + "anchor": null, + "link": "/docs/nhcx/v1/troubleshooting/the-payer-rejects-your-bundle", + "rule": "claimed by the-payer-rejects-your-bundle", + "confidence": "derived" + }, + { + "atom": "nhcx.troubleshooting.callback-url-rejected", + "type": "troubleshooting", + "route": "/docs/nhcx/v1/troubleshooting/your-callback-url-is-rejected", + "anchor": null, + "link": "/docs/nhcx/v1/troubleshooting/your-callback-url-is-rejected", + "rule": "claimed by your-callback-url-is-rejected", + "confidence": "derived" + }, + { + "atom": "nhcx.troubleshooting.duplicate-or-mismatched-correlation", + "type": "troubleshooting", + "route": "/docs/nhcx/v1/troubleshooting/responses-arrive-against-the-wrong-request", + "anchor": null, + "link": "/docs/nhcx/v1/troubleshooting/responses-arrive-against-the-wrong-request", + "rule": "claimed by responses-arrive-against-the-wrong-request", + "confidence": "derived" + }, + { + "atom": "nhcx.troubleshooting.everything-returns-401", + "type": "troubleshooting", + "route": "/docs/nhcx/v1/troubleshooting/every-call-returns-401", + "anchor": null, + "link": "/docs/nhcx/v1/troubleshooting/every-call-returns-401", + "rule": "claimed by every-call-returns-401", + "confidence": "derived" + }, + { + "atom": "nhcx.troubleshooting.recipient-cannot-decrypt", + "type": "troubleshooting", + "route": "/docs/nhcx/v1/troubleshooting/the-recipient-cannot-decrypt", + "anchor": null, + "link": "/docs/nhcx/v1/troubleshooting/the-recipient-cannot-decrypt", + "rule": "claimed by the-recipient-cannot-decrypt", + "confidence": "derived" + }, { "atom": "shared.decision.role-model-two-axes", "type": "decision", diff --git a/catalogue/nhcx/README.md b/catalogue/nhcx/README.md index aa68b31ac..5e776e0dd 100644 --- a/catalogue/nhcx/README.md +++ b/catalogue/nhcx/README.md @@ -13,6 +13,10 @@ MCP index and compile into agent skills; they are not site pages. | `flows/` | One atom per end-to-end journey, stitching endpoints and callbacks in call order. | | `decisions/` | One atom per integration decision: the options, the trade-off, the recommendation. | | `tests/` | One atom per test case: what it proves functionally, and its exact pass and fail conditions. | +| `troubleshooting/` | One atom per symptom a developer reports, not per error code: the checks that rule out the common causes, in order. | +| `fhir/` | One atom per FHIR bundle an exchange carries: its resources, profiles and the fields a payer reads. | +| `glossary/` | One atom per NHCX term, where the term is the exchange's own rather than shared across gateways. Shared terms live in `catalogue/shared/glossary/`. | +| `sandbox/` | One atom per fact about the NHCX sandbox: hosts, test participants, the dummy payer, callback rules, exit and going live. | Scaffold a new atom with the `atom-new` skill so the frontmatter and the five mandatory sections come out right. READMEs like this one are contributor diff --git a/catalogue/nhcx/callbacks/claim-on-submit.md b/catalogue/nhcx/callbacks/claim-on-submit.md new file mode 100644 index 000000000..4c16d4025 --- /dev/null +++ b/catalogue/nhcx/callbacks/claim-on-submit.md @@ -0,0 +1,303 @@ +--- +id: nhcx.callback.claim-on-submit +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/claim/on_submit +summary: >- + What your hospital system receives when the payer answers a claim through the + claims exchange, and how to acknowledge and read it. +sources: +- url: https://hcxsbx.abdm.gov.in/claimhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/claimhcxservice.json + hash: sha256:488eea449c6ee45dc324f4f7c095a862c7d50d0e238075846122b51b2bab4878 + fetched: '2026-09-14' + note: 'API specification: claimhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/claim/on_submit.' +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 4.2 Payer-Side Response Codes. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/064cf2e059987011e53a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Claim.pdf + hash: sha256:66290de20d57d69e681946a0101518092ca43b3775bb38997c43beb17fb38076 + fetched: '2026-09-14' + note: Claim, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. pages 1-2, Claim Submit Response. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.claim-on-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.status + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.claim-submit + - nhcx.callback.on-status + - nhcx.callback.error + flows: + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + - nhcx.flow.status-check + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.claim-response + - nhcx.fhir.query-update + tests: + - nhcx.test.provider-uc-09 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1015 + - nhcx.error.payr-1001 + - nhcx.error.payr-1002 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + - nhcx.concept.status-lifecycle + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.accepted-then-no-callback + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + - nhcx.decision.status-poll-or-wait + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.claim + - shared.glossary.fhir + - shared.glossary.abha +--- + +# Receiving POST /v1/claim/on_submit + +## In plain words + +After you submit a claim, the [payer](../glossary/payer.md) answers through [NHCX](../../shared/glossary/nhcx.md). NHCX delivers the answer to your system as `POST /v1/claim/on_submit`. You receive it as the [provider](../glossary/provider.md) that sent the claim. One claim can bring several deliveries: an interim answer first, such as received or in process, then the final decision. Acknowledge each delivery within 30 seconds, then update the case. + +## Before you start + +**Who receives it:** the provider that sent `/v1/claim/submit`. **Who sends it:** the payer, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/claim/on_submit` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- You sent the request with [`/v1/claim/submit`](../endpoints/claim-submit.md). You stored its `x-hcx-api_call_id` and `x-hcx-correlation_id` before sending it. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant Y as Your provider system + participant N as NHCX gateway + participant O as Payer system + Y->>N: POST /v1/claim/submit + N-->>Y: 202 Accepted + N->>O: POST /v1/claim/submit + O->>N: POST /v1/claim/on_submit (sealed answer) + N->>Y: POST /v1/claim/on_submit + Y-->>N: 202 Accepted with receipt, within 30 seconds +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/claim/on_submit`. The body takes one of two forms. Branch on its `type` field. + +- `ProtocolResponse`: the payer could not process your request. The body is plain JSON with the error details, and nothing is sealed. +- Any other body carries the payer's answer sealed in `payload`, with `type` set to `JWEPayload`. + +```json +{ + "type": "JWEPayload", + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "26", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The payer that answered. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. Each answer has its own value. A repeat delivery carries the same value. | +| `x-hcx-correlation_id` | The exchange you started. Match it to the request you stored. | +| `x-hcx-workflow_id` | The step the answer reports. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-status` | Where the exchange stands. See the status list below. | +| `x-hcx-error_details` | An object with `code`, `message` and `trace` when something failed. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. + +`x-hcx-status` takes these values: + +- `response.partial`: an interim answer, such as received or in process. More follows on the same correlation id. +- `response.complete`: the final answer. The case is closed on this exchange. +- `response.error`: the request failed on protocol grounds. Treat `response.fail` the same way. + +The payer's workflow code says which step the answer reports: + +| `x-hcx-workflow_id` | Meaning | +|---|---| +| `25` | Claim received by the payer | +| `26` | Claim approved | +| `27` | Claim queried: the payer needs more documents | +| `28` | Claim in process | +| `29` | Claim forwarded to another processing entity | + +Answer a query with a claim query response on [`/v1/claim/submit`](../endpoints/claim-submit.md). See [answer a payer query on a claim](../flows/claim-query-response.md). + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) collection bundle: see [the claim response bundle](../fhir/claim-response.md). The ClaimResponse carries the decision, the approved amounts and any reason. + +#### When `type` is `ProtocolResponse` + +The body is plain JSON. Read `x-hcx-error_details` for the reason. + +```json +{ + "type": "ProtocolResponse", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "", + "x-hcx-timestamp": "", + "x-hcx-debug_flag": "Error", + "x-hcx-status": "response.error", + "x-hcx-redirect_to": "", + "x-hcx-error_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-debug_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-domain-header": { + "use_case_name": "", + "amt_processed": "" + }, + "x-hcx-entity-type": "claim", + "x-hcx-ben-abha-id": "" +} +``` + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "claim", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- `result.entity_type` is `claim` for this exchange. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. +- An interim answer and a final answer share `x-hcx-correlation_id`. They differ in `x-hcx-api_call_id`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- The `x-hcx-correlation_id` matches a request you sent. +- The case holds the payer's latest answer. It is final when `x-hcx-status` is `response.complete`. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. Your `/v1/claim/submit` call got a 202 from NHCX. Without it, NHCX never forwarded the request. + 2. Your `/v1/error` endpoint holds no report for this correlation id. A report means the payer never received your request. + 3. The `endpoint_url` in your registry record is right. It uses a domain name, with no IP address and no port number. + 4. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 5. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 6. Ask NHCX with [`/v1/status`](../endpoints/status.md). `request.dispatched` means the payer has your request, so wait. `request.stopped` means it is dead. + If the payer cannot seal its answer to your certificate, it reports [PAYR-1002](../errors/payr-1002.md). Update the certificate in your registry record. See [accepted with 202 and no callback arrives](../troubleshooting/accepted-then-no-callback.md). +- **It arrives as a `ProtocolResponse`.** The payer could not open or validate your request. Read `x-hcx-error_details.code` and open its error atom. [PAYR-1001](../errors/payr-1001.md) means your payload could not be decrypted: fetch the recipient's certificate again with [`/fetch/certs`](../endpoints/fetch-certs.md). The correlation id of a failed request is inactive. Send a fresh request with a new correlation id; reusing the old one is refused as [NHCX-1006](../errors/nhcx-1006.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **The correlation id matches nothing you sent.** You stored the ids after sending instead of before, or you looked in one field only. Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). +- **The answer is a rejection.** A rejection is not a protocol error. It arrives sealed, like an approval. The reason sits inside the decrypted resource, not in `x-hcx-error_details`. diff --git a/catalogue/nhcx/callbacks/claim-submit.md b/catalogue/nhcx/callbacks/claim-submit.md new file mode 100644 index 000000000..4226da62d --- /dev/null +++ b/catalogue/nhcx/callbacks/claim-submit.md @@ -0,0 +1,267 @@ +--- +id: nhcx.callback.claim-submit +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/claim/submit +summary: >- + What your payer system receives when a hospital submits a claim through the claims + exchange, and how to acknowledge it before you adjudicate. +sources: +- url: https://hcxsbx.abdm.gov.in/claimhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/claimhcxservice.json + hash: sha256:488eea449c6ee45dc324f4f7c095a862c7d50d0e238075846122b51b2bab4878 + fetched: '2026-09-14' + note: 'API specification: claimhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/claim/submit.' +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 4.1 Provider-Side Workflow Codes; 9.1. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Value sets, Use case codes. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 11 Respond to the Claim Submitted. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 4, 7 and 8. +- url: https://hcxsbx.abdm.gov.in/images/064cf2e059987011e53a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Claim.pdf + hash: sha256:66290de20d57d69e681946a0101518092ca43b3775bb38997c43beb17fb38076 + fetched: '2026-09-14' + note: Claim, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. page 2, items 4-6. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.claim-submit + - nhcx.endpoint.claim-on-submit + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.claim-on-submit + - nhcx.callback.error + flows: + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + - nhcx.fhir.claim-response + - nhcx.fhir.validation + tests: + - nhcx.test.payer-uc-11 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1015 + - nhcx.error.nhcx-1016 + - nhcx.error.payr-1001 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.claim + - shared.glossary.fhir + - shared.glossary.abha + - shared.glossary.nrces +--- + +# Receiving POST /v1/claim/submit + +## In plain words + +When a [provider](../glossary/provider.md) submits a claim, [NHCX](../../shared/glossary/nhcx.md) delivers `POST /v1/claim/submit` to your system. You receive it as the [payer](../glossary/payer.md), or as the entity that processes claims for the policy. The message is the final claim after discharge. The same path also carries the provider's answer to your query on a claim, and a resubmitted claim. Acknowledge each delivery within 30 seconds. Then adjudicate and answer on [`/v1/claim/on_submit`](../endpoints/claim-on-submit.md). + +## Before you start + +**Who receives it:** the payer, as the system that processes the request for the policy. **Who sends it:** a provider, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/claim/submit` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- Your system can call [`/v1/claim/on_submit`](../endpoints/claim-on-submit.md) to answer. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant S as Provider system + participant N as NHCX gateway + participant Y as Your payer system + S->>N: POST /v1/claim/submit (sealed) + N-->>S: 202 Accepted + N->>Y: POST /v1/claim/submit (same sealed message) + Y-->>N: 202 Accepted with receipt, within 30 seconds + Note over Y: Decrypt, validate, process + Y->>N: POST /v1/claim/on_submit (your answer) + N->>S: POST /v1/claim/on_submit +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/claim/submit`. The JSON body carries one field, `payload`: + +```json +{ + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "15", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "", + "x-hcx-use_case": "New" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The provider that sent it. Your answer goes back to this code. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. A repeat delivery carries the same value. | +| `x-hcx-request_id` | The originating request. Read it when present. | +| `x-hcx-correlation_id` | The whole exchange. Copy it into your answer. | +| `x-hcx-workflow_id` | The business step. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-timestamp` | When the sender sealed the message. | +| `x-hcx-status` | `request.initiated` for a new request. Accept `request.initiate` as the same value. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | +| `x-hcx-use_case` | `New` or `Resubmit`. Optional. | + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) collection bundle: see [the claim request bundle](../fhir/claim-request.md). `Claim.use` is `claim`. Validate it against the [NRCeS](../../shared/glossary/nrces.md) profiles before you adjudicate; see [validating a bundle](../fhir/validation.md). `x-hcx-workflow_id` `15` marks a new claim. `151` marks the provider's answer to your claim query; see [query update bundles](../fhir/query-update.md). + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "claim", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- `result.entity_type` is `claim` for this exchange. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. + +### What you do next + +Process the message, then answer on [`/v1/claim/on_submit`](../endpoints/claim-on-submit.md): + +- Copy `x-hcx-correlation_id` from this message. +- Give your answer its own fresh `x-hcx-api_call_id`. +- Send it to the sender: its `x-hcx-sender_code` becomes your `x-hcx-recipient_code`. +- Set `x-hcx-status` to `response.partial` for an interim answer, such as received or in process. Use `response.complete` for the decision. +- Seal a ClaimResponse bundle to the provider's certificate. See [the claim response bundle](../fhir/claim-response.md). +- If you cannot decrypt or validate this message, answer with a protocol response instead. Set `type` to `ProtocolResponse`, `x-hcx-status` to `response.error`, and fill `x-hcx-error_details`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- You decrypted the payload and hold a Claim bundle with `Claim.use` `claim`, stored against its `x-hcx-correlation_id`. +- Your answer on `/v1/claim/on_submit` gets its own 202 from NHCX. No NHCX error names its correlation id. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. The `endpoint_url` in your registry record is the address you expect. + 2. It uses a domain name, with no IP address and no port number. + 3. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 4. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 5. The provider addressed the message to your participant code. Providers address the processor code from their policy lookup, so check that code is yours. + When NHCX cannot reach you, the sender is told [NHCX-1001](../errors/nhcx-1001.md), "Receiver system is not reachable." See [your callback URL is rejected or never called](../troubleshooting/callback-url-rejected.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **You cannot decrypt it.** The sender sealed it to an old certificate, or your registry certificate does not match your private key. Still return 202 with the receipt. Then answer on `/v1/claim/on_submit` with a protocol response. [PAYR-1001](../errors/payr-1001.md) names a decryption failure. See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **Your answer is refused.** [NHCX-1010](../errors/nhcx-1010.md) means NHCX holds no exchange with that correlation id. [NHCX-1016](../errors/nhcx-1016.md) means the action does not fit that correlation id. [NHCX-1011](../errors/nhcx-1011.md) means the `x-hcx-status` value is invalid. Copy the correlation id from this message, answer on the paired path, and use a documented status. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). +- **The request fails your business rules.** That is not a protocol error. Answer with a sealed ClaimResponse that carries the decision and the reason. Keep protocol responses for messages you cannot open or validate. diff --git a/catalogue/nhcx/callbacks/communication-on-request.md b/catalogue/nhcx/callbacks/communication-on-request.md new file mode 100644 index 000000000..63cfba880 --- /dev/null +++ b/catalogue/nhcx/callbacks/communication-on-request.md @@ -0,0 +1,286 @@ +--- +id: nhcx.callback.communication-on-request +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/communication/on_request +summary: >- + What your payer system receives when a hospital answers your request for documents + or information, and how to acknowledge it. +sources: +- url: https://hcxsbx.abdm.gov.in/communicationhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/communicationhcxservice.json + hash: sha256:0ad58a98851158057d38d42a8327349548644c1b2f1a33b4f94acb4c1840a8a4 + fetched: '2026-09-14' + note: 'API specification: communicationhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/communication/on_request.' +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Communication (additional docs), on_request. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 12.1 API and workflow codes. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.communication-on-request + - nhcx.endpoint.communication-request + - nhcx.endpoint.status + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.communication-request + - nhcx.callback.on-status + - nhcx.callback.error + flows: + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-query-response + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.task + - nhcx.fhir.collection-bundle + tests: + - nhcx.test.payer-uc-10 + - nhcx.test.provider-uc-08 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1015 + - nhcx.error.payr-1001 + - nhcx.error.payr-1002 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.queries-and-communication + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.accepted-then-no-callback + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.communication-request + - shared.glossary.fhir + - shared.glossary.abha +--- + +# Receiving POST /v1/communication/on_request + +## In plain words + +After you send a communication request, the [provider](../glossary/provider.md) answers through [NHCX](../../shared/glossary/nhcx.md). NHCX delivers the answer to your system as `POST /v1/communication/on_request`. You receive it as the [payer](../glossary/payer.md) that asked. It carries the documents or information you requested. Acknowledge the delivery within 30 seconds, then resume the case it belongs to. + +## Before you start + +**Who receives it:** the payer that sent `/v1/communication/request`. **Who sends it:** the provider, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/communication/on_request` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- You sent the request with [`/v1/communication/request`](../endpoints/communication-request.md). You stored its `x-hcx-api_call_id` and `x-hcx-correlation_id` before sending it. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant Y as Your payer system + participant N as NHCX gateway + participant O as Provider system + Y->>N: POST /v1/communication/request + N-->>Y: 202 Accepted + N->>O: POST /v1/communication/request + O->>N: POST /v1/communication/on_request (sealed answer) + N->>Y: POST /v1/communication/on_request + Y-->>N: 202 Accepted with receipt, within 30 seconds +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/communication/on_request`. The body takes one of two forms. Branch on its `type` field. + +- `ProtocolResponse`: the provider could not process your request. The body is plain JSON with the error details, and nothing is sealed. +- Any other body carries the provider's answer sealed in `payload`, with `type` set to `JWEPayload`. + +```json +{ + "type": "JWEPayload", + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The provider that answered. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. Each answer has its own value. A repeat delivery carries the same value. | +| `x-hcx-correlation_id` | The exchange you started. Match it to the request you stored. | +| `x-hcx-workflow_id` | The step the answer reports. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-status` | Where the exchange stands. See the status list below. | +| `x-hcx-error_details` | An object with `code`, `message` and `trace` when something failed. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. + +`x-hcx-status` takes these values: + +- `response.complete`: the provider's answer. Accept `response.completed` as the same value. +- `response.error`: the request failed on protocol grounds. Treat `response.fail` the same way. + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) collection bundle built around a Task: see [the Task bundle](../fhir/task.md). The Task has `status` `completed`. Its input is a Communication, and the documents sit in `payload.contentAttachment`. The `x-hcx-workflow_id` matches the one on your request. + +#### When `type` is `ProtocolResponse` + +The body is plain JSON. Read `x-hcx-error_details` for the reason. + +```json +{ + "type": "ProtocolResponse", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "", + "x-hcx-timestamp": "", + "x-hcx-debug_flag": "Error", + "x-hcx-status": "response.error", + "x-hcx-redirect_to": "", + "x-hcx-error_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-debug_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-domain-header": { + "use_case_name": "", + "amt_processed": "" + }, + "x-hcx-entity-type": "", + "x-hcx-ben-abha-id": "" +} +``` + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- An `entity_type` value for this exchange is not yet published. The published values are `coverageeligibility`, `preauth`, `claim`, `task`, `payment` and `insuranceplan`. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- The `x-hcx-correlation_id` matches a request you sent. +- You decrypted the payload and hold the Communication with its attachments, matched to your request. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. Your `/v1/communication/request` call got a 202 from NHCX. Without it, NHCX never forwarded the request. + 2. Your `/v1/error` endpoint holds no report for this correlation id. A report means the provider never received your request. + 3. The `endpoint_url` in your registry record is right. It uses a domain name, with no IP address and no port number. + 4. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 5. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 6. Ask NHCX with [`/v1/status`](../endpoints/status.md). `request.dispatched` means the provider has your request, so wait. `request.stopped` means it is dead. + If the provider cannot seal its answer to your certificate, it reports [PAYR-1002](../errors/payr-1002.md). Update the certificate in your registry record. See [accepted with 202 and no callback arrives](../troubleshooting/accepted-then-no-callback.md). +- **It arrives as a `ProtocolResponse`.** The provider could not open or validate your request. Read `x-hcx-error_details.code` and open its error atom. [PAYR-1001](../errors/payr-1001.md) means your payload could not be decrypted: fetch the recipient's certificate again with [`/fetch/certs`](../endpoints/fetch-certs.md). The correlation id of a failed request is inactive. Send a fresh request with a new correlation id; reusing the old one is refused as [NHCX-1006](../errors/nhcx-1006.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **The correlation id matches nothing you sent.** You stored the ids after sending instead of before, or you looked in one field only. Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). +- **The attachments are missing.** Answer the provider with a new communication request that names what is still needed. diff --git a/catalogue/nhcx/callbacks/communication-request.md b/catalogue/nhcx/callbacks/communication-request.md new file mode 100644 index 000000000..19c23f99a --- /dev/null +++ b/catalogue/nhcx/callbacks/communication-request.md @@ -0,0 +1,256 @@ +--- +id: nhcx.callback.communication-request +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/communication/request +summary: >- + What your hospital system receives when a payer asks for more documents or information + in the middle of a case, and how to acknowledge it. +sources: +- url: https://hcxsbx.abdm.gov.in/communicationhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/communicationhcxservice.json + hash: sha256:0ad58a98851158057d38d42a8327349548644c1b2f1a33b4f94acb4c1840a8a4 + fetched: '2026-09-14' + note: 'API specification: communicationhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/communication/request.' +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 12.1 Business context; API and workflow codes; 12.2. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Communication (additional docs). +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 8. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 4, 7 and 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.communication-request + - nhcx.endpoint.communication-on-request + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.communication-on-request + - nhcx.callback.error + flows: + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-query-response + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.task + - nhcx.fhir.collection-bundle + tests: + - nhcx.test.provider-uc-08 + - nhcx.test.payer-uc-10 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1015 + - nhcx.error.nhcx-1016 + - nhcx.error.payr-1001 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.queries-and-communication + - nhcx.concept.workflow-codes + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.communication-request + - shared.glossary.fhir + - shared.glossary.abha +--- + +# Receiving POST /v1/communication/request + +## In plain words + +A [payer](../glossary/payer.md) that needs more from you in the middle of a case sends a communication request. [NHCX](../../shared/glossary/nhcx.md) delivers it to your system as `POST /v1/communication/request`. You receive it as the [provider](../glossary/provider.md). The payer can ask for additional documents, raise a turnaround-time query, or tell you about a grievance, a wallet change or a policy change. Acknowledge the delivery within 30 seconds. Then answer on [`/v1/communication/on_request`](../endpoints/communication-on-request.md). + +## Before you start + +**Who receives it:** the provider. **Who sends it:** a payer, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/communication/request` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- Your system can call [`/v1/communication/on_request`](../endpoints/communication-on-request.md) to answer. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant S as Payer system + participant N as NHCX gateway + participant Y as Your provider system + S->>N: POST /v1/communication/request (sealed) + N-->>S: 202 Accepted + N->>Y: POST /v1/communication/request (same sealed message) + Y-->>N: 202 Accepted with receipt, within 30 seconds + Note over Y: Decrypt, validate, process + Y->>N: POST /v1/communication/on_request (your answer) + N->>S: POST /v1/communication/on_request +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/communication/request`. The JSON body carries one field, `payload`: + +```json +{ + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The payer that sent it. Your answer goes back to this code. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. A repeat delivery carries the same value. | +| `x-hcx-request_id` | The originating request. Read it when present. | +| `x-hcx-correlation_id` | The whole exchange. Copy it into your answer. | +| `x-hcx-workflow_id` | The business step. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-timestamp` | When the sender sealed the message. | +| `x-hcx-status` | `request.initiated` for a new request. Accept `request.initiate` as the same value. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) collection bundle built around a Task: see [the Task bundle](../fhir/task.md). The Task `code` is `poll`. Follow the Task's `input` reference to the resource it names in the bundle. That resource carries the payer's message. `Task.reasonCode` says why the payer wrote. Codes in use include `tatquery`, `grievance`, `walletupdate`, `policychange`, `additionalinfo` and `claimArbitration`. + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- An `entity_type` value for this exchange is not yet published. The published values are `coverageeligibility`, `preauth`, `claim`, `task`, `payment` and `insuranceplan`. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. + +### What you do next + +Process the message, then answer on [`/v1/communication/on_request`](../endpoints/communication-on-request.md): + +- Copy `x-hcx-correlation_id` from this message. +- Give your answer its own fresh `x-hcx-api_call_id`. +- Send it to the sender: its `x-hcx-sender_code` becomes your `x-hcx-recipient_code`. +- Keep `x-hcx-workflow_id` the same as the request's. NHCX validates the workflow id on both messages. Set `x-hcx-status` to `response.complete`. +- Seal a Task bundle whose Task has `status` `completed` and carries a Communication with the documents as attachments. +- If you cannot decrypt or validate this message, answer with a protocol response instead. Set `type` to `ProtocolResponse`, `x-hcx-status` to `response.error`, and fill `x-hcx-error_details`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- You decrypted the payload, followed the Task input and stored the payer's message against its `x-hcx-correlation_id`. +- Your answer on `/v1/communication/on_request` gets its own 202 from NHCX. It carries the same correlation id and workflow id. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. The `endpoint_url` in your registry record is the address you expect. + 2. It uses a domain name, with no IP address and no port number. + 3. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 4. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 5. The payer addressed the message to your participant code. + When NHCX cannot reach you, the sender is told [NHCX-1001](../errors/nhcx-1001.md), "Receiver system is not reachable." See [your callback URL is rejected or never called](../troubleshooting/callback-url-rejected.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **You cannot decrypt it.** The sender sealed it to an old certificate, or your registry certificate does not match your private key. Still return 202 with the receipt. Then answer on `/v1/communication/on_request` with a protocol response. [PAYR-1001](../errors/payr-1001.md) names a decryption failure. See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **Your answer is refused.** [NHCX-1010](../errors/nhcx-1010.md) means NHCX holds no exchange with that correlation id. [NHCX-1016](../errors/nhcx-1016.md) means the action does not fit that correlation id. [NHCX-1011](../errors/nhcx-1011.md) means the `x-hcx-status` value is invalid. Copy the correlation id from this message, answer on the paired path, and use a documented status. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). +- **The payer receives no documents.** The Communication in your answer needs its attachment in `payload.contentAttachment`. Check the bundle before you seal it. diff --git a/catalogue/nhcx/callbacks/coverageeligibility-check.md b/catalogue/nhcx/callbacks/coverageeligibility-check.md new file mode 100644 index 000000000..47e260fc0 --- /dev/null +++ b/catalogue/nhcx/callbacks/coverageeligibility-check.md @@ -0,0 +1,253 @@ +--- +id: nhcx.callback.coverageeligibility-check +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/coverageeligibility/check +summary: >- + What your payer system receives when a hospital asks whether a patient's policy + is in force and what it covers, and how to acknowledge it. +sources: +- url: https://hcxsbx.abdm.gov.in/coverageeligibilityhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/coverageeligibilityhcxservice.json + hash: sha256:1723a4020b1b33d0bc1d7175609f0d05e6a6a78e8b4c52041222396639ceb52c + fetched: '2026-09-14' + note: 'API specification: coverageeligibilityhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/coverageeligibility/check.' +- url: https://hcxsbx.abdm.gov.in/images/cfcbe62e8378d4f48ee6.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Coverage Eligibility.pdf + hash: sha256:69dd680ddac44231a97276a1d735e45777d8e43b5563b7248fd367a838d9744f + fetched: '2026-09-14' + note: Coverage Eligibility, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 7 Response to the coverageeligibility request. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 4, 7 and 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.coverageeligibility-on-check + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.error + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + - nhcx.fhir.validation + tests: + - nhcx.test.payer-uc-07 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1015 + - nhcx.error.nhcx-1016 + - nhcx.error.payr-1001 + - nhcx.error.payr-1004 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.coverage-eligibility-purposes + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + - nhcx.decision.eligibility-purpose + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.coverage-eligibility + - shared.glossary.fhir + - shared.glossary.abha + - shared.glossary.nrces +--- + +# Receiving POST /v1/coverageeligibility/check + +## In plain words + +Before treatment, a [provider](../glossary/provider.md) asks whether a patient's policy is in force and what it covers. [NHCX](../../shared/glossary/nhcx.md) delivers that question to your system as `POST /v1/coverageeligibility/check`. You receive it as the [payer](../glossary/payer.md). The request can also ask for the plan's benefits, or for what a preauthorisation will need. Acknowledge the delivery within 30 seconds. Then answer on [`/v1/coverageeligibility/on_check`](../endpoints/coverageeligibility-on-check.md). + +## Before you start + +**Who receives it:** the payer, as the system that processes the request for the policy. **Who sends it:** a provider, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/coverageeligibility/check` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- Your system can call [`/v1/coverageeligibility/on_check`](../endpoints/coverageeligibility-on-check.md) to answer. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant S as Provider system + participant N as NHCX gateway + participant Y as Your payer system + S->>N: POST /v1/coverageeligibility/check (sealed) + N-->>S: 202 Accepted + N->>Y: POST /v1/coverageeligibility/check (same sealed message) + Y-->>N: 202 Accepted with receipt, within 30 seconds + Note over Y: Decrypt, validate, process + Y->>N: POST /v1/coverageeligibility/on_check (your answer) + N->>S: POST /v1/coverageeligibility/on_check +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/coverageeligibility/check`. The JSON body carries one field, `payload`: + +```json +{ + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The provider that sent it. Your answer goes back to this code. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. A repeat delivery carries the same value. | +| `x-hcx-request_id` | The originating request. Read it when present. | +| `x-hcx-correlation_id` | The whole exchange. Copy it into your answer. | +| `x-hcx-workflow_id` | The business step. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-timestamp` | When the sender sealed the message. | +| `x-hcx-status` | `request.initiated` for a new request. Accept `request.initiate` as the same value. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) collection bundle: see [the coverage eligibility request bundle](../fhir/coverage-eligibility-request.md). Its purpose tells you what the provider asks; see [the three coverage eligibility purposes](../concepts/coverage-eligibility-purposes.md). Check the benefit, payer and provider identifiers in the request against your records. + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "coverageeligibility", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- `result.entity_type` is `coverageeligibility` for this exchange. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. + +### What you do next + +Process the message, then answer on [`/v1/coverageeligibility/on_check`](../endpoints/coverageeligibility-on-check.md): + +- Copy `x-hcx-correlation_id` from this message. +- Give your answer its own fresh `x-hcx-api_call_id`. +- Send it to the sender: its `x-hcx-sender_code` becomes your `x-hcx-recipient_code`. +- Set `x-hcx-status` to `response.complete` for your answer. +- Seal a CoverageEligibilityResponse bundle to the provider's certificate. Business failures, such as a provider not registered with you for the policy, go inside it. See [the coverage eligibility response bundle](../fhir/coverage-eligibility-response.md). +- If you cannot decrypt or validate this message, answer with a protocol response instead. Set `type` to `ProtocolResponse`, `x-hcx-status` to `response.error`, and fill `x-hcx-error_details`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- You decrypted the payload and hold a CoverageEligibilityRequest bundle, stored against its `x-hcx-correlation_id`. +- Your answer on `/v1/coverageeligibility/on_check` gets its own 202 from NHCX. No NHCX error names its correlation id. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. The `endpoint_url` in your registry record is the address you expect. + 2. It uses a domain name, with no IP address and no port number. + 3. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 4. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 5. The provider addressed the message to your participant code. Providers address the processor code from their policy lookup, so check that code is yours. + When NHCX cannot reach you, the sender is told [NHCX-1001](../errors/nhcx-1001.md), "Receiver system is not reachable." See [your callback URL is rejected or never called](../troubleshooting/callback-url-rejected.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **You cannot decrypt it.** The sender sealed it to an old certificate, or your registry certificate does not match your private key. Still return 202 with the receipt. Then answer on `/v1/coverageeligibility/on_check` with a protocol response. [PAYR-1001](../errors/payr-1001.md) names a decryption failure. See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **Your answer is refused.** [NHCX-1010](../errors/nhcx-1010.md) means NHCX holds no exchange with that correlation id. [NHCX-1016](../errors/nhcx-1016.md) means the action does not fit that correlation id. [NHCX-1011](../errors/nhcx-1011.md) means the `x-hcx-status` value is invalid. Copy the correlation id from this message, answer on the paired path, and use a documented status. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). +- **The request fails your business rules.** That is not a protocol error. Answer with a sealed CoverageEligibilityResponse that carries the decision and the reason. Keep protocol responses for messages you cannot open or validate. [PAYR-1004](../errors/payr-1004.md) names a provider not registered with you for the requested policy. diff --git a/catalogue/nhcx/callbacks/coverageeligibility-on-check.md b/catalogue/nhcx/callbacks/coverageeligibility-on-check.md new file mode 100644 index 000000000..ce65f7957 --- /dev/null +++ b/catalogue/nhcx/callbacks/coverageeligibility-on-check.md @@ -0,0 +1,292 @@ +--- +id: nhcx.callback.coverageeligibility-on-check +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/coverageeligibility/on_check +summary: >- + What your hospital system receives when the payer answers a coverage check through + the claims exchange, and how to acknowledge and read it. +sources: +- url: https://hcxsbx.abdm.gov.in/coverageeligibilityhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/coverageeligibilityhcxservice.json + hash: sha256:1723a4020b1b33d0bc1d7175609f0d05e6a6a78e8b4c52041222396639ceb52c + fetched: '2026-09-14' + note: 'API specification: coverageeligibilityhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/coverageeligibility/on_check.' +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 5 Callback API logic. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet CoverageEligibility, on_check. +- url: https://hcxsbx.abdm.gov.in/images/cfcbe62e8378d4f48ee6.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Coverage Eligibility.pdf + hash: sha256:69dd680ddac44231a97276a1d735e45777d8e43b5563b7248fd367a838d9744f + fetched: '2026-09-14' + note: Coverage Eligibility, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.coverageeligibility-on-check + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.status + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.coverageeligibility-check + - nhcx.callback.on-status + - nhcx.callback.error + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.status-check + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.coverage-eligibility-response + tests: + - nhcx.test.provider-uc-05 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1015 + - nhcx.error.payr-1001 + - nhcx.error.payr-1002 + - nhcx.error.payr-1004 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.coverage-eligibility-purposes + - nhcx.concept.status-lifecycle + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.accepted-then-no-callback + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + - nhcx.decision.status-poll-or-wait + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.coverage-eligibility + - shared.glossary.fhir + - shared.glossary.abha +--- + +# Receiving POST /v1/coverageeligibility/on_check + +## In plain words + +After you check a patient's coverage, the [payer](../glossary/payer.md) answers through [NHCX](../../shared/glossary/nhcx.md). NHCX delivers the answer to your system as `POST /v1/coverageeligibility/on_check`. You receive it as the [provider](../glossary/provider.md) that asked. It says whether the policy is in force. Depending on what you asked, it also gives the benefits or what a preauthorisation will need. Acknowledge it within 30 seconds, then update the case. + +## Before you start + +**Who receives it:** the provider that sent `/v1/coverageeligibility/check`. **Who sends it:** the payer, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/coverageeligibility/on_check` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- You sent the request with [`/v1/coverageeligibility/check`](../endpoints/coverageeligibility-check.md). You stored its `x-hcx-api_call_id` and `x-hcx-correlation_id` before sending it. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant Y as Your provider system + participant N as NHCX gateway + participant O as Payer system + Y->>N: POST /v1/coverageeligibility/check + N-->>Y: 202 Accepted + N->>O: POST /v1/coverageeligibility/check + O->>N: POST /v1/coverageeligibility/on_check (sealed answer) + N->>Y: POST /v1/coverageeligibility/on_check + Y-->>N: 202 Accepted with receipt, within 30 seconds +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/coverageeligibility/on_check`. The body takes one of two forms. Branch on its `type` field. + +- `ProtocolResponse`: the payer could not process your request. The body is plain JSON with the error details, and nothing is sealed. +- Any other body carries the payer's answer sealed in `payload`, with `type` set to `JWEPayload`. + +```json +{ + "type": "JWEPayload", + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The payer that answered. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. Each answer has its own value. A repeat delivery carries the same value. | +| `x-hcx-correlation_id` | The exchange you started. Match it to the request you stored. | +| `x-hcx-workflow_id` | The step the answer reports. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-status` | Where the exchange stands. See the status list below. | +| `x-hcx-error_details` | An object with `code`, `message` and `trace` when something failed. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. + +`x-hcx-status` takes these values: + +- `response.complete`: the payer's answer. Accept `response.completed` as the same value. +- `response.error`: the request failed on protocol grounds. Treat `response.fail` the same way. + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) collection bundle: see [the coverage eligibility response bundle](../fhir/coverage-eligibility-response.md). Business failures sit inside the CoverageEligibilityResponse, sealed like any answer. + +#### When `type` is `ProtocolResponse` + +The body is plain JSON. Read `x-hcx-error_details` for the reason. + +```json +{ + "type": "ProtocolResponse", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "", + "x-hcx-timestamp": "", + "x-hcx-debug_flag": "Error", + "x-hcx-status": "response.error", + "x-hcx-redirect_to": "", + "x-hcx-error_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-debug_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-domain-header": { + "use_case_name": "", + "amt_processed": "" + }, + "x-hcx-entity-type": "coverageeligibility", + "x-hcx-ben-abha-id": "" +} +``` + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "coverageeligibility", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- `result.entity_type` is `coverageeligibility` for this exchange. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. +- An interim answer and a final answer share `x-hcx-correlation_id`. They differ in `x-hcx-api_call_id`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- The `x-hcx-correlation_id` matches a request you sent. +- The case shows whether the policy is in force, with the benefits or requirements you asked for. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. Your `/v1/coverageeligibility/check` call got a 202 from NHCX. Without it, NHCX never forwarded the request. + 2. Your `/v1/error` endpoint holds no report for this correlation id. A report means the payer never received your request. + 3. The `endpoint_url` in your registry record is right. It uses a domain name, with no IP address and no port number. + 4. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 5. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 6. Ask NHCX with [`/v1/status`](../endpoints/status.md). `request.dispatched` means the payer has your request, so wait. `request.stopped` means it is dead. + If the payer cannot seal its answer to your certificate, it reports [PAYR-1002](../errors/payr-1002.md). Update the certificate in your registry record. See [accepted with 202 and no callback arrives](../troubleshooting/accepted-then-no-callback.md). +- **It arrives as a `ProtocolResponse`.** The payer could not open or validate your request. Read `x-hcx-error_details.code` and open its error atom. [PAYR-1001](../errors/payr-1001.md) means your payload could not be decrypted: fetch the recipient's certificate again with [`/fetch/certs`](../endpoints/fetch-certs.md). The correlation id of a failed request is inactive. Send a fresh request with a new correlation id; reusing the old one is refused as [NHCX-1006](../errors/nhcx-1006.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **The correlation id matches nothing you sent.** You stored the ids after sending instead of before, or you looked in one field only. Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). +- **The answer is a rejection.** A rejection is not a protocol error. It arrives sealed, like an approval. The reason sits inside the decrypted resource, not in `x-hcx-error_details`. [PAYR-1004](../errors/payr-1004.md) names a provider not registered with the payer for the requested policy. diff --git a/catalogue/nhcx/callbacks/error.md b/catalogue/nhcx/callbacks/error.md new file mode 100644 index 000000000..3661426b5 --- /dev/null +++ b/catalogue/nhcx/callbacks/error.md @@ -0,0 +1,217 @@ +--- +id: nhcx.callback.error +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/error +summary: >- + What your system receives when the claims exchange gives up delivering a request + you sent, and what to do with the report. +sources: +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 2 and 8. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Error Handling. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.status + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.on-status + flows: + - nhcx.flow.report-a-processing-error + - nhcx.flow.send-a-sealed-request + - nhcx.flow.status-check + - nhcx.flow.receive-a-sealed-callback + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1014 + - nhcx.error.nhcx-1015 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.error-code-spaces + - nhcx.concept.status-lifecycle + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.accepted-then-no-callback + sandbox: + - nhcx.sandbox.callback-url-requirements + - nhcx.sandbox.support-contacts + decisions: + - nhcx.decision.key-encryption-algorithm + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - shared.glossary.abha +--- + +# Receiving POST /v1/error + +## In plain words + +When [NHCX](../../shared/glossary/nhcx.md) cannot deliver a request you sent, it tells you on `POST /v1/error`. Every participant receives it: [providers](../glossary/provider.md) and [payers](../glossary/payer.md) alike. It arrives after NHCX has tried 5 times and given up. Without it, a dead request looks the same as a case still under review. Acknowledge the report within 30 seconds, then mark the case undelivered. + +## Before you start + +**Who receives it:** every participant, as the sender of the failed request. **Who sends it:** NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/error` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- Your handler for this path accepts a plain JSON body. It does not expect a sealed payload. +- You store the `x-hcx-correlation_id` of every request you send, so a report can find its case. + +## What happens + +```mermaid +sequenceDiagram + participant Y as Your system + participant N as NHCX gateway + participant R as Recipient system + Y->>N: POST a request (sealed) + N-->>Y: 202 Accepted + loop Up to 5 attempts + N->>R: POST the same request + R-->>N: No valid receipt within 30 seconds + end + Note over N: Deletes the request and retires its correlation id + N->>Y: POST /v1/error (reject details) + Y-->>N: 202 Accepted with receipt, within 30 seconds +``` + +### Why it arrives + +- A recipient must return 202 with the receipt for every delivery. A rejection, a late answer or a receipt in another shape counts as a failure. +- NHCX tries the same request 5 times. Then it deletes the request identified by the correlation id. +- The reject details come back to you, the sender, on `/v1/error`. +- The gateway validates protocol headers too, and can report a header failure to you asynchronously. + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/error`. The body is a protocol response in plain JSON, not a sealed payload: + +```json +{ + "type": "ProtocolResponse", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "", + "x-hcx-timestamp": "", + "x-hcx-debug_flag": "Error", + "x-hcx-status": "response.error", + "x-hcx-redirect_to": "", + "x-hcx-error_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-debug_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-domain-header": { + "use_case_name": "", + "amt_processed": "" + }, + "x-hcx-entity-type": "", + "x-hcx-ben-abha-id": "" +} +``` + +- `x-hcx-correlation_id` names your failed request. +- `x-hcx-error_details.code` names the failure. Codes that start `NHCX-` come from the gateway; see [error code spaces](../concepts/error-code-spaces.md). +- [NHCX-1001](../errors/nhcx-1001.md) means the receiver system is not reachable. +- `x-hcx-entity-type` names the exchange: `coverageeligibility`, `payment`, `insuranceplan`, `task`, `claim` or `preauth`. + +Store the body whole before you parse it. Do not refuse a body because it has fields you do not expect. + +### What you send back + +Answer the report first, before you act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- `result.entity_type` repeats `x-hcx-entity-type` from the report. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Repeat reports + +NHCX expects your 202 and receipt within 30 seconds, as for every delivery. If the same report arrives twice, store it once and return the same receipt. + +### What you do next + +- Mark the case named by the correlation id as undelivered, so nobody waits for a decision that will not come. +- Fix the cause. For an unreachable recipient, wait until it is reachable, or contact [NHCX support](../sandbox/support-contacts.md). +- Send a fresh request with a new correlation id. The old one is inactive; reusing it is refused as [NHCX-1006](../errors/nhcx-1006.md). + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the report. +- The case named by `x-hcx-correlation_id` shows as undelivered in your system, with the error code stored. +- Your resubmission, under a new correlation id, gets a 202 from NHCX and later its answer on your callback. + +## When it goes wrong + +- **It never arrives.** The most common cause is that you do not host `/v1/error` at all, so failures pass unseen. Host it before any other asynchronous path. Then check the registration. The `endpoint_url` uses a domain name with no IP address or port. The server is in India, and your firewall accepts the addresses in [callback URL rules](../sandbox/callback-url-requirements.md). NHCX names a failure to deliver a protocol response to you as [NHCX-1014](../errors/nhcx-1014.md): unable to send protocol response to sender. If a case goes quiet with no report, ask with [`/v1/status`](../endpoints/status.md). `request.stopped` means the request is dead. +- **Your handler refuses the report.** It parsed the body against a fixed schema and returned an error. Store the body whole, return 202 with the receipt, and parse afterwards. +- **Your retry is refused as a duplicate.** You resent the request on its retired correlation id. That is [NHCX-1006](../errors/nhcx-1006.md). Send it again under a new correlation id. +- **The same recipient keeps failing.** Its endpoint is down or rejects deliveries. [NHCX-1001](../errors/nhcx-1001.md) and [NHCX-1015](../errors/nhcx-1015.md) name these conditions. Contact the recipient, or [NHCX support](../sandbox/support-contacts.md). diff --git a/catalogue/nhcx/callbacks/insuranceplan-on-request.md b/catalogue/nhcx/callbacks/insuranceplan-on-request.md new file mode 100644 index 000000000..d47d34d9b --- /dev/null +++ b/catalogue/nhcx/callbacks/insuranceplan-on-request.md @@ -0,0 +1,287 @@ +--- +id: nhcx.callback.insuranceplan-on-request +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/insuranceplan/on_request +summary: >- + What your hospital system receives when the payer returns the insurance plan for + a patient's policy, and how to acknowledge and read it. +sources: +- url: https://hcxsbx.abdm.gov.in/insuranceplanhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/insuranceplanhcxservice.json + hash: sha256:03665c6e6a5c8d86e3d621ab577dd683cf13c155d5b9529f5be6ca70fef13dee + fetched: '2026-09-14' + note: 'API specification: insuranceplanhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/insuranceplan/on_request.' +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Insurance Plan, on_request. +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 6 Callback API logic. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14, Q15 and Q21. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.insuranceplan-on-request + - nhcx.endpoint.insuranceplan-request + - nhcx.endpoint.status + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.insuranceplan-request + - nhcx.callback.on-status + - nhcx.callback.error + flows: + - nhcx.flow.insurance-plan-request + - nhcx.flow.status-check + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.insurance-plan-bundle + - nhcx.fhir.pmjay-insurance-plan + tests: + - nhcx.test.provider-uc-06 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1015 + - nhcx.error.payr-1001 + - nhcx.error.payr-1002 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.insurance-plan + - nhcx.concept.status-lifecycle + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.accepted-then-no-callback + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + - nhcx.decision.status-poll-or-wait + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.insurance-plan + - nhcx.glossary.pmjay + - shared.glossary.fhir + - shared.glossary.abha +--- + +# Receiving POST /v1/insuranceplan/on_request + +## In plain words + +After you request a patient's insurance plan, the [payer](../glossary/payer.md) answers through [NHCX](../../shared/glossary/nhcx.md). NHCX delivers the plan to your system as `POST /v1/insuranceplan/on_request`. You receive it as the [provider](../glossary/provider.md) that asked. The plan shows the benefit rules and the documents a preauthorisation will need, before you submit one. Acknowledge it within 30 seconds. + +## Before you start + +**Who receives it:** the provider that sent `/v1/insuranceplan/request`. **Who sends it:** the payer, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/insuranceplan/on_request` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- You sent the request with [`/v1/insuranceplan/request`](../endpoints/insuranceplan-request.md). You stored its `x-hcx-api_call_id` and `x-hcx-correlation_id` before sending it. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant Y as Your provider system + participant N as NHCX gateway + participant O as Payer system + Y->>N: POST /v1/insuranceplan/request + N-->>Y: 202 Accepted + N->>O: POST /v1/insuranceplan/request + O->>N: POST /v1/insuranceplan/on_request (sealed answer) + N->>Y: POST /v1/insuranceplan/on_request + Y-->>N: 202 Accepted with receipt, within 30 seconds +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/insuranceplan/on_request`. The body takes one of two forms. Branch on its `type` field. + +- `ProtocolResponse`: the payer could not process your request. The body is plain JSON with the error details, and nothing is sealed. +- Any other body carries the payer's answer sealed in `payload`, with `type` set to `JWEPayload`. + +```json +{ + "type": "JWEPayload", + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The payer that answered. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. Each answer has its own value. A repeat delivery carries the same value. | +| `x-hcx-correlation_id` | The exchange you started. Match it to the request you stored. | +| `x-hcx-workflow_id` | The step the answer reports. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-status` | Where the exchange stands. See the status list below. | +| `x-hcx-error_details` | An object with `code`, `message` and `trace` when something failed. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. + +`x-hcx-status` takes these values: + +- `response.complete`: the payer's answer. +- `response.error`: the request failed on protocol grounds. Treat `response.fail` the same way. + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) bundle that carries the payer's InsurancePlan resources. When it is a Task bundle, the Task output holds the InsurancePlan bundle. See [InsurancePlan request and response bundles](../fhir/insurance-plan-bundle.md). For [PMJAY](../glossary/pmjay.md), see [the PMJAY InsurancePlan profile](../fhir/pmjay-insurance-plan.md). + +#### When `type` is `ProtocolResponse` + +The body is plain JSON. Read `x-hcx-error_details` for the reason. + +```json +{ + "type": "ProtocolResponse", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "", + "x-hcx-timestamp": "", + "x-hcx-debug_flag": "Error", + "x-hcx-status": "response.error", + "x-hcx-redirect_to": "", + "x-hcx-error_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-debug_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-domain-header": { + "use_case_name": "", + "amt_processed": "" + }, + "x-hcx-entity-type": "insuranceplan", + "x-hcx-ben-abha-id": "" +} +``` + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "insuranceplan", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- `result.entity_type` is `insuranceplan` for this exchange. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. +- An interim answer and a final answer share `x-hcx-correlation_id`. They differ in `x-hcx-api_call_id`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- The `x-hcx-correlation_id` matches a request you sent. +- Your system holds the InsurancePlan resources for the policy, and shows the benefits and required documents before preauthorisation. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. Your `/v1/insuranceplan/request` call got a 202 from NHCX. Without it, NHCX never forwarded the request. + 2. Your `/v1/error` endpoint holds no report for this correlation id. A report means the payer never received your request. + 3. The `endpoint_url` in your registry record is right. It uses a domain name, with no IP address and no port number. + 4. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 5. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 6. Ask NHCX with [`/v1/status`](../endpoints/status.md). `request.dispatched` means the payer has your request, so wait. `request.stopped` means it is dead. + If the payer cannot seal its answer to your certificate, it reports [PAYR-1002](../errors/payr-1002.md). Update the certificate in your registry record. See [accepted with 202 and no callback arrives](../troubleshooting/accepted-then-no-callback.md). +- **It arrives as a `ProtocolResponse`.** The payer could not open or validate your request. Read `x-hcx-error_details.code` and open its error atom. [PAYR-1001](../errors/payr-1001.md) means your payload could not be decrypted: fetch the recipient's certificate again with [`/fetch/certs`](../endpoints/fetch-certs.md). The correlation id of a failed request is inactive. Send a fresh request with a new correlation id; reusing the old one is refused as [NHCX-1006](../errors/nhcx-1006.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **The correlation id matches nothing you sent.** You stored the ids after sending instead of before, or you looked in one field only. Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). diff --git a/catalogue/nhcx/callbacks/insuranceplan-request.md b/catalogue/nhcx/callbacks/insuranceplan-request.md new file mode 100644 index 000000000..ad9432bf4 --- /dev/null +++ b/catalogue/nhcx/callbacks/insuranceplan-request.md @@ -0,0 +1,257 @@ +--- +id: nhcx.callback.insuranceplan-request +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/insuranceplan/request +summary: >- + What your payer system receives when a hospital asks for the insurance plan behind + a patient's policy, and how to acknowledge it. +sources: +- url: https://hcxsbx.abdm.gov.in/insuranceplanhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/insuranceplanhcxservice.json + hash: sha256:03665c6e6a5c8d86e3d621ab577dd683cf13c155d5b9529f5be6ca70fef13dee + fetched: '2026-09-14' + note: 'API specification: insuranceplanhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/insuranceplan/request.' +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Insurance Plan, request. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 8 Response to the insurance plan request. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 4, 7 and 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.insuranceplan-request + - nhcx.endpoint.insuranceplan-on-request + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.insuranceplan-on-request + - nhcx.callback.error + flows: + - nhcx.flow.insurance-plan-request + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.insurance-plan-bundle + - nhcx.fhir.pmjay-insurance-plan + tests: + - nhcx.test.payer-uc-08 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1015 + - nhcx.error.nhcx-1016 + - nhcx.error.payr-1001 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.insurance-plan + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.insurance-plan + - nhcx.glossary.pmjay + - shared.glossary.fhir + - shared.glossary.abha +--- + +# Receiving POST /v1/insuranceplan/request + +## In plain words + +A [provider](../glossary/provider.md) asks for the insurance plan behind a patient's policy: the benefits, rules and documents it sets. [NHCX](../../shared/glossary/nhcx.md) delivers that request to your system as `POST /v1/insuranceplan/request`. You receive it as the [payer](../glossary/payer.md). Acknowledge the delivery within 30 seconds. Then answer on [`/v1/insuranceplan/on_request`](../endpoints/insuranceplan-on-request.md) with the plan. + +## Before you start + +**Who receives it:** the payer, as the system that processes the request for the policy. **Who sends it:** a provider, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/insuranceplan/request` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- Your system can call [`/v1/insuranceplan/on_request`](../endpoints/insuranceplan-on-request.md) to answer. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant S as Provider system + participant N as NHCX gateway + participant Y as Your payer system + S->>N: POST /v1/insuranceplan/request (sealed) + N-->>S: 202 Accepted + N->>Y: POST /v1/insuranceplan/request (same sealed message) + Y-->>N: 202 Accepted with receipt, within 30 seconds + Note over Y: Decrypt, validate, process + Y->>N: POST /v1/insuranceplan/on_request (your answer) + N->>S: POST /v1/insuranceplan/on_request +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/insuranceplan/request`. The JSON body carries one field, `payload`: + +```json +{ + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The provider that sent it. Your answer goes back to this code. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. A repeat delivery carries the same value. | +| `x-hcx-request_id` | The originating request. Read it when present. | +| `x-hcx-correlation_id` | The whole exchange. Copy it into your answer. | +| `x-hcx-workflow_id` | The business step. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-timestamp` | When the sender sealed the message. | +| `x-hcx-status` | `request.initiated` for a new request. Accept `request.initiate` as the same value. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) Task with `code` `poll`. Its inputs name what to look up: + +| Task input | Required | +|---|---| +| `PolicyNumber` | Yes | +| `ProductNumber` | No | +| `ProviderId` | No | + +See [InsurancePlan request and response bundles](../fhir/insurance-plan-bundle.md). + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "insuranceplan", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- `result.entity_type` is `insuranceplan` for this exchange. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. + +### What you do next + +Process the message, then answer on [`/v1/insuranceplan/on_request`](../endpoints/insuranceplan-on-request.md): + +- Copy `x-hcx-correlation_id` from this message. +- Give your answer its own fresh `x-hcx-api_call_id`. +- Send it to the sender: its `x-hcx-sender_code` becomes your `x-hcx-recipient_code`. +- Set `x-hcx-status` to `response.complete` for your answer. +- Seal a Task bundle whose output is an InsurancePlan bundle holding your InsurancePlan resources. For a [PMJAY](../glossary/pmjay.md) plan, see [the PMJAY InsurancePlan profile](../fhir/pmjay-insurance-plan.md). +- If you cannot decrypt or validate this message, answer with a protocol response instead. Set `type` to `ProtocolResponse`, `x-hcx-status` to `response.error`, and fill `x-hcx-error_details`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- You decrypted the payload and hold the Task with its `PolicyNumber`, stored against its `x-hcx-correlation_id`. +- Your answer on `/v1/insuranceplan/on_request` gets its own 202 from NHCX. No NHCX error names its correlation id. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. The `endpoint_url` in your registry record is the address you expect. + 2. It uses a domain name, with no IP address and no port number. + 3. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 4. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 5. The provider addressed the message to your participant code. Providers address the processor code from their policy lookup, so check that code is yours. + When NHCX cannot reach you, the sender is told [NHCX-1001](../errors/nhcx-1001.md), "Receiver system is not reachable." See [your callback URL is rejected or never called](../troubleshooting/callback-url-rejected.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **You cannot decrypt it.** The sender sealed it to an old certificate, or your registry certificate does not match your private key. Still return 202 with the receipt. Then answer on `/v1/insuranceplan/on_request` with a protocol response. [PAYR-1001](../errors/payr-1001.md) names a decryption failure. See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **Your answer is refused.** [NHCX-1010](../errors/nhcx-1010.md) means NHCX holds no exchange with that correlation id. [NHCX-1016](../errors/nhcx-1016.md) means the action does not fit that correlation id. [NHCX-1011](../errors/nhcx-1011.md) means the `x-hcx-status` value is invalid. Copy the correlation id from this message, answer on the paired path, and use a documented status. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). diff --git a/catalogue/nhcx/callbacks/notification-delivery.md b/catalogue/nhcx/callbacks/notification-delivery.md new file mode 100644 index 000000000..a80a1a766 --- /dev/null +++ b/catalogue/nhcx/callbacks/notification-delivery.md @@ -0,0 +1,160 @@ +--- +id: nhcx.callback.notification-delivery +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving a notification on a patient app +summary: >- + What a patient app receives when the claims exchange pushes a claim update for + a patient who logged in to it, and how to handle it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/01db86335b7c226eb745.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Notification Integration.docx + hash: sha256:05908862c103522fac0dbb482f8eb6a0f8536fc12b1ae3bdb0e98615f30812aa + fetched: '2026-09-14' + note: NHCX Notification Integration, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. sections 2-7. +- url: https://hcxsbx.abdm.gov.in/subscriptionhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/subscriptionhcxservice.json + hash: sha256:0d0d4781aa96017c06c8c2533e63dd1a6b36bb2342ebb51aeefca3349d892029 + fetched: '2026-09-14' + note: 'API specification: subscriptionhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/notification/on_subscribe and /v1/notification/subscribe.' +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.notification-subscribe + flows: + - nhcx.flow.notification-subscribe + concepts: + - nhcx.concept.notifications + - nhcx.concept.beneficiary-consent + - nhcx.concept.jwe-envelope + errors: + - nhcx.error.nhcx-401 + sandbox: + - nhcx.sandbox.callback-url-requirements + glossary: + - shared.glossary.nhcx + - shared.glossary.phr + - shared.glossary.abha + - shared.glossary.abha-address + - shared.glossary.abdm + - shared.glossary.m1 + - nhcx.glossary.jwe +--- + +# Receiving a notification on a patient app + +## In plain words + +A patient app can follow a patient's claims on [NHCX](../../shared/glossary/nhcx.md). After it subscribes, NHCX pushes each claim event to the app as a notification. You receive it as the [PHR](../../shared/glossary/phr.md) app the patient last logged in to. Each notification carries a ready-to-show message, such as a preauthorisation approval, and optional detail for audit. Only one app receives a patient's notifications at a time: the one that subscribed last. + +## Before you start + +**Who receives it:** the patient app, registered in NHCX as a beneficiary service provider. **Who sends it:** NHCX. + +- Your app has completed [ABHA](../../shared/glossary/abha.md) integration, milestone [M1](../../shared/glossary/m1.md) of [ABDM](../../shared/glossary/abdm.md). +- Your app is registered in NHCX as a beneficiary service provider: sandbox testing, sandbox certification, then onboarding to the production registry. +- Your notification endpoint is an HTTPS address with TLS 1.2 or newer. +- When the patient logs in and consents, your app calls [`/v1/notification/subscribe`](../endpoints/notification-subscribe.md). The call names the patient's [ABHA address](../../shared/glossary/abha-address.md) in `subscriber.id` and your endpoint in `on_notification_url`. See [subscribe a patient app to notifications](../flows/notification-subscribe.md). +- Your app stored the `subscription_id` it sent. +- The subscription is the registration that makes notifications arrive. A later subscription for the same patient by another app replaces yours. + +## What happens + +```mermaid +sequenceDiagram + participant P as Patient + participant A as Your patient app + participant N as NHCX gateway + P->>A: Logs in with ABHA address and consents + A->>N: POST /v1/notification/subscribe + N-->>A: Subscription accepted, older subscriptions replaced + Note over N: Later, a payer answers a preauthorisation + N->>A: POST + A-->>N: Success status + A->>P: Shows the message +``` + +### What arrives + +NHCX sends `POST `. The notification carries these fields: + +| Field | Meaning | +|---|---| +| `notification_id` | This notification. Unique to it. | +| `topic_code` | The topic, for example `workflow_events`. | +| `timestamp` | When the event happened, in ISO 8601. | +| `subscriber.id` | The patient's ABHA address. | +| `message` | A human-readable message to show the patient as it is. | +| `domain_values` | Optional. The `x-hcx-*` values of the underlying exchange, for audit or custom formatting. | + +```json +{ + "notification_id": "", + "topic_code": "workflow_events", + "timestamp": "", + "subscriber": { + "id": "" + }, + "message": "", + "domain_values": { + "x-hcx-workflow_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-status": "response.complete", + "x-hcx-action": "preauth_response", + "x-hcx-amount_submitted": "" + } +} +``` + +Show `message` to the patient without parsing anything else. You can ignore `domain_values` if you only display messages. + +Under `workflow_events`, these events arrive: + +| Event | Trigger | Status values | +|---|---|---| +| `preauth_request` | The provider submitted a preauthorisation | `queued`, `processing` | +| `preauth_response` | The payer decided a preauthorisation | `approved`, `rejected` | +| `claim_request` | The provider submitted a claim | `queued`, `processing` | +| `claim_response` | The payer adjudicated a claim | `approved`, `rejected` | +| `payment_notice` | The payment was processed | `paid`, `pending` | +| `communication` | Information was requested | `information_required` | + +Notifications and subscriptions use [JWE](../glossary/jwe.md) with `RSA-OAEP` and `A256GCM`. If the body arrives sealed, decrypt it with your private key first. The fields above are its content. + +### Checks on every delivery + +- Validate the token NHCX presents against the NHCX public certificate. +- Check that the sender code is the NHCX gateway's. +- Rate-limit the endpoint. + +### What you send back + +An acknowledgement body for a notification is not yet published. Answer with an HTTP success status as soon as you have stored the notification. Do the display work afterwards. + +### Repeat deliveries + +Each notification has its own `notification_id`. Store the ids you have shown. If one arrives again, answer with success and do not show it twice. + +## How you know it worked + +- Your endpoint stored the notification and answered with a success status. +- `subscriber.id` matches a patient whose subscription you hold. +- The patient sees `message` in your app once for each `notification_id`. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. The patient has not logged in to another app since. A later subscription by another app replaced yours. Subscribe again at the patient's next login. + 2. Your subscribe call succeeded. A 401 means your token expired: generate a new one and subscribe again. See [NHCX-401](../errors/nhcx-401.md). + 3. A 403 means your app is not authorised. Check your beneficiary service provider registration in the NHCX registry. + 4. A 500 means a gateway failure. Retry the subscription with backoff. + 5. `on_notification_url` is exact, with no trailing space, and serves HTTPS with TLS 1.2 or newer. + 6. Your `topic_code` array includes `workflow_events`. +- **The subscribe call returns 409.** A subscription for this patient already exists. Check your subscription parameters. +- **The same notification shows twice.** You did not store `notification_id`. Show each id once. diff --git a/catalogue/nhcx/callbacks/on-status.md b/catalogue/nhcx/callbacks/on-status.md new file mode 100644 index 000000000..107a5332b --- /dev/null +++ b/catalogue/nhcx/callbacks/on-status.md @@ -0,0 +1,208 @@ +--- +id: nhcx.callback.on-status +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/on_status +summary: >- + What your system receives when the claims exchange answers your question about + where one of your messages stands, and how to act on it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Status, /v1/on_status. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Status Description (Protected Header). +- url: https://hcxsbx.abdm.gov.in/statushcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/statushcxservice.json + hash: sha256:93b6355a234ef56607427fcdfa32da4921124180c9df08ecd73c8af8955c2adf + fetched: '2026-09-14' + note: 'API specification: statushcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/status description.' +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Acceptance and Error scenario. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.on-status + - nhcx.endpoint.status + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.status + - nhcx.callback.error + flows: + - nhcx.flow.status-check + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + tests: + - nhcx.test.provider-uc-13 + - nhcx.test.payer-uc-15 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1012 + - nhcx.error.nhcx-1015 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.status-lifecycle + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.accepted-then-no-callback + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + - nhcx.decision.status-poll-or-wait + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - shared.glossary.abha +--- + +# Receiving POST /v1/on_status + +## In plain words + +When a case goes quiet, you can ask [NHCX](../../shared/glossary/nhcx.md) where one of your own messages stands. You ask with [`/v1/status`](../endpoints/status.md). NHCX answers from its own records and delivers the answer to your system as `POST /v1/on_status`. You receive it as the participant that asked: usually a [provider](../glossary/provider.md), sometimes a [payer](../glossary/payer.md) checking a message it sent. The answer says whether NHCX still holds the message, delivered it, or gave up. + +## Before you start + +**Who receives it:** the participant that sent `/v1/status`. **Who sends it:** NHCX, which answers status requests itself. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/on_status` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- You sent [`/v1/status`](../endpoints/status.md) with `x-hcx-correlation_id` set to the `x-hcx-api_call_id` of the message you asked about. +- You keep every `x-hcx-api_call_id` you send. Without it you cannot ask, and you cannot match the answer. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant Y as Your system + participant N as NHCX gateway + Y->>N: POST /v1/status (correlation id = API call id of the message in question) + N-->>Y: 202 Accepted + Note over N: Looks up the message in its own records + N->>Y: POST /v1/on_status + Y-->>N: 202 Accepted with receipt, within 30 seconds +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/on_status`. The answer travels in the protocol header attributes. There is no FHIR bundle. + +- If the body carries a sealed `payload`, decode the first part of the JWE to read the protected header. +- If the body is a plain object of `x-hcx-*` attributes, read them directly. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.dispatched", + "x-hcx-ben-abha-id": "" +} +``` + +Match the answer by `x-hcx-correlation_id`. It equals the `x-hcx-api_call_id` of the message you asked about. `x-hcx-error_details`, with `code`, `message` and `trace`, reports a failure when there is one. + +| `x-hcx-status` | Meaning | What you do | +|---|---|---| +| `request.queued` | NHCX holds the message and has not delivered it yet. | Wait, then ask again later. | +| `request.dispatched` | The message reached the recipient's system. | Wait for the recipient's answer on your callback. | +| `request.stopped` | NHCX stopped after failed attempts to reach the recipient. | Treat the request as dead. Fix the cause and send a fresh request with a new correlation id. | + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- An `entity_type` value for this exchange is not yet published. The published values are `coverageeligibility`, `preauth`, `claim`, `task`, `payment` and `insuranceplan`. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- `x-hcx-correlation_id` equals the `x-hcx-api_call_id` of a message you sent. You recorded the `x-hcx-status` against that message. +- After `request.stopped`, your fresh request under a new correlation id gets a 202 from NHCX. + +## When it goes wrong + +- **It never arrives.** Check that your `/v1/status` call got a 202 from NHCX. [NHCX-1012](../errors/nhcx-1012.md), "No records found with the requested api caller id", means the id you asked about is not one NHCX holds. Put the `x-hcx-api_call_id` of your original message in `x-hcx-correlation_id`. Then check your registration. The `endpoint_url` uses a domain name with no IP address or port. The server is in India, and your firewall accepts the addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- **You matched it to the wrong case.** The correlation id of this answer is the API call id of the message you asked about. Compare it with the API call ids you stored, not with correlation ids. +- **You retried a stopped request on its old correlation id.** That correlation id is inactive. A new request under it is refused as [NHCX-1006](../errors/nhcx-1006.md). Send a fresh request with a new correlation id. +- **You expected a bundle.** The status answer has no FHIR payload. Everything you need is in the header attributes. +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." diff --git a/catalogue/nhcx/callbacks/paymentnotice-on-request.md b/catalogue/nhcx/callbacks/paymentnotice-on-request.md new file mode 100644 index 000000000..b03753ea9 --- /dev/null +++ b/catalogue/nhcx/callbacks/paymentnotice-on-request.md @@ -0,0 +1,289 @@ +--- +id: nhcx.callback.paymentnotice-on-request +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/paymentnotice/on_request +summary: >- + What your payer system receives when a hospital acknowledges your payment notice, + and how to acknowledge it in turn. +sources: +- url: https://hcxsbx.abdm.gov.in/servicehcxpayment/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/servicehcxpayment.json + hash: sha256:f5c9e3728efbbeaa5e0e8083334b0ae60a05930e5a1e096ca06d40abb235d658 + fetched: '2026-09-14' + note: 'API specification: servicehcxpayment, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/paymentnotice/on_request.' +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 11.1, 11.4, 11.6 and implementation notes. +- url: https://hcxsbx.abdm.gov.in/images/b7260763ce8270b6baac.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Payment.pdf + hash: sha256:6d372cdeec0abaea66b4d267c5ee6137a01830c577360dba7699e0244e49615f + fetched: '2026-09-14' + note: Payment, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.paymentnotice-on-request + - nhcx.endpoint.paymentnotice-request + - nhcx.endpoint.status + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.paymentnotice-request + - nhcx.callback.task-submit + - nhcx.callback.on-status + - nhcx.callback.error + flows: + - nhcx.flow.payment-notice + - nhcx.flow.status-check + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.payment-notice + - nhcx.fhir.task + tests: + - nhcx.test.payer-uc-13 + - nhcx.test.provider-uc-11 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1015 + - nhcx.error.payr-1001 + - nhcx.error.payr-1002 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.claim-cycle + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.accepted-then-no-callback + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.payment-notice + - nhcx.glossary.pmjay + - shared.glossary.fhir + - shared.glossary.abha +--- + +# Receiving POST /v1/paymentnotice/on_request + +## In plain words + +After you send a payment notice, the [provider](../glossary/provider.md) acknowledges it through [NHCX](../../shared/glossary/nhcx.md). NHCX delivers the acknowledgement to your system as `POST /v1/paymentnotice/on_request`. You receive it as the [payer](../glossary/payer.md) that sent the notice. It confirms the provider received the payment details. Acknowledge the delivery within 30 seconds, then close the payment record. + +## Before you start + +**Who receives it:** the payer that sent `/v1/paymentnotice/request`. **Who sends it:** the provider, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/paymentnotice/on_request` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- You sent the request with [`/v1/paymentnotice/request`](../endpoints/paymentnotice-request.md). You stored its `x-hcx-api_call_id` and `x-hcx-correlation_id` before sending it. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant Y as Your payer system + participant N as NHCX gateway + participant O as Provider system + Y->>N: POST /v1/paymentnotice/request + N-->>Y: 202 Accepted + N->>O: POST /v1/paymentnotice/request + O->>N: POST /v1/paymentnotice/on_request (sealed answer) + N->>Y: POST /v1/paymentnotice/on_request + Y-->>N: 202 Accepted with receipt, within 30 seconds +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/paymentnotice/on_request`. The body takes one of two forms. Branch on its `type` field. + +- `ProtocolResponse`: the provider could not process your request. The body is plain JSON with the error details, and nothing is sealed. +- Any other body carries the provider's answer sealed in `payload`, with `type` set to `JWEPayload`. + +```json +{ + "type": "JWEPayload", + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "17", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The provider that answered. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. Each answer has its own value. A repeat delivery carries the same value. | +| `x-hcx-correlation_id` | The exchange you started. Match it to the request you stored. | +| `x-hcx-workflow_id` | The step the answer reports. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-status` | Where the exchange stands. See the status list below. | +| `x-hcx-error_details` | An object with `code`, `message` and `trace` when something failed. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. + +`x-hcx-status` takes these values: + +- `response.complete`: the provider's answer. Accept `response.completed` as the same value. +- `response.error`: the request failed on protocol grounds. Treat `response.fail` the same way. + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) Task bundle: see [the payment notice bundle](../fhir/payment-notice.md). A completed Task is the acknowledgement. Its output carries the code `paymentack` and the claim number. `x-hcx-workflow_id` `17` means payment received. + +#### When `type` is `ProtocolResponse` + +The body is plain JSON. Read `x-hcx-error_details` for the reason. + +```json +{ + "type": "ProtocolResponse", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "", + "x-hcx-timestamp": "", + "x-hcx-debug_flag": "Error", + "x-hcx-status": "response.error", + "x-hcx-redirect_to": "", + "x-hcx-error_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-debug_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-domain-header": { + "use_case_name": "", + "amt_processed": "" + }, + "x-hcx-entity-type": "payment", + "x-hcx-ben-abha-id": "" +} +``` + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "payment", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- `result.entity_type` is `payment` for this exchange. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- The `x-hcx-correlation_id` matches a request you sent. +- The payment record for that claim is closed with the provider's acknowledgement. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. Your `/v1/paymentnotice/request` call got a 202 from NHCX. Without it, NHCX never forwarded the request. + 2. Your `/v1/error` endpoint holds no report for this correlation id. A report means the provider never received your request. + 3. The `endpoint_url` in your registry record is right. It uses a domain name, with no IP address and no port number. + 4. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 5. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 6. Ask NHCX with [`/v1/status`](../endpoints/status.md). `request.dispatched` means the provider has your request, so wait. `request.stopped` means it is dead. + If the provider cannot seal its answer to your certificate, it reports [PAYR-1002](../errors/payr-1002.md). Update the certificate in your registry record. See [accepted with 202 and no callback arrives](../troubleshooting/accepted-then-no-callback.md). +- **It arrives as a `ProtocolResponse`.** The provider could not open or validate your request. Read `x-hcx-error_details.code` and open its error atom. [PAYR-1001](../errors/payr-1001.md) means your payload could not be decrypted: fetch the recipient's certificate again with [`/fetch/certs`](../endpoints/fetch-certs.md). The correlation id of a failed request is inactive. Send a fresh request with a new correlation id; reusing the old one is refused as [NHCX-1006](../errors/nhcx-1006.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **The correlation id matches nothing you sent.** You stored the ids after sending instead of before, or you looked in one field only. Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). +- **No acknowledgement comes at all.** A missing acknowledgement does not block your payment. You need it for complete lifecycle tracking, so follow up with the provider. +- **The acknowledgement comes on another path.** A [PMJAY](../glossary/pmjay.md) provider can send it to `/v1/task/submit`. Accept a `paymentack` Task there too; see [receiving `/v1/task/submit`](task-submit.md). diff --git a/catalogue/nhcx/callbacks/paymentnotice-request.md b/catalogue/nhcx/callbacks/paymentnotice-request.md new file mode 100644 index 000000000..3972e14fe --- /dev/null +++ b/catalogue/nhcx/callbacks/paymentnotice-request.md @@ -0,0 +1,259 @@ +--- +id: nhcx.callback.paymentnotice-request +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/paymentnotice/request +summary: >- + What your hospital system receives when a payer reports a payment against your + claim, and how to acknowledge it. +sources: +- url: https://hcxsbx.abdm.gov.in/servicehcxpayment/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/servicehcxpayment.json + hash: sha256:f5c9e3728efbbeaa5e0e8083334b0ae60a05930e5a1e096ca06d40abb235d658 + fetched: '2026-09-14' + note: 'API specification: servicehcxpayment, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/paymentnotice/request.' +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 11.1-11.5. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Erroneous Claim Q6 and Q12; Q14; Q21. +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 11 Acknowledge Payment notice. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 4, 7 and 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.paymentnotice-request + - nhcx.endpoint.paymentnotice-on-request + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.paymentnotice-on-request + - nhcx.callback.error + flows: + - nhcx.flow.payment-notice + - nhcx.flow.claim-reprocess + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.payment-notice + tests: + - nhcx.test.provider-uc-11 + - nhcx.test.payer-uc-13 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1015 + - nhcx.error.nhcx-1016 + - nhcx.error.payr-1001 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.payment-notice + - shared.glossary.fhir + - shared.glossary.abha +--- + +# Receiving POST /v1/paymentnotice/request + +## In plain words + +After a [payer](../glossary/payer.md) approves your claim and pays, it sends a payment notice. [NHCX](../../shared/glossary/nhcx.md) delivers it to your system as `POST /v1/paymentnotice/request`. You receive it as the [provider](../glossary/provider.md). It carries the amount paid, the deductions, the payment date and the bank's transaction reference. Several notices can arrive for one claim: payment initiated, processed, then settled. Acknowledge each delivery within 30 seconds. Then acknowledge the payment on [`/v1/paymentnotice/on_request`](../endpoints/paymentnotice-on-request.md). + +## Before you start + +**Who receives it:** the provider. **Who sends it:** a payer, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/paymentnotice/request` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- Your system can call [`/v1/paymentnotice/on_request`](../endpoints/paymentnotice-on-request.md) to acknowledge the payment. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant S as Payer system + participant N as NHCX gateway + participant Y as Your provider system + S->>N: POST /v1/paymentnotice/request (sealed) + N-->>S: 202 Accepted + N->>Y: POST /v1/paymentnotice/request (same sealed message) + Y-->>N: 202 Accepted with receipt, within 30 seconds + Note over Y: Decrypt, validate, process + Y->>N: POST /v1/paymentnotice/on_request (your answer) + N->>S: POST /v1/paymentnotice/on_request +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/paymentnotice/request`. The JSON body carries one field, `payload`: + +```json +{ + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "30", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The payer that sent it. Your answer goes back to this code. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. A repeat delivery carries the same value. | +| `x-hcx-request_id` | The originating request. Read it when present. | +| `x-hcx-correlation_id` | The whole exchange. Copy it into your answer. | +| `x-hcx-workflow_id` | The business step. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-timestamp` | When the sender sealed the message. | +| `x-hcx-status` | `request.initiated` for a new request. Accept `request.initiate` as the same value. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) Task bundle: see [the payment notice bundle](../fhir/payment-notice.md). The Task has `code` `deliver` and a PaymentNotice as input. The bundle also holds a PaymentReconciliation and the provider and payer Organizations. The PaymentReconciliation carries `status`, `paymentDate`, `paymentAmount` and `paymentIdentifier`. `paymentIdentifier.value` is the bank's unique transaction reference. Store it for audit. + +The workflow code says which stage the notice reports: + +| `x-hcx-workflow_id` | Meaning | +|---|---| +| `30` | Payment initiated to the bank | +| `31` | Payment processed | +| `33` | Payment settled: the bank confirmed clearance | + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "payment", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- `result.entity_type` is `payment` for this exchange. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. + +### What you do next + +Process the message, then answer on [`/v1/paymentnotice/on_request`](../endpoints/paymentnotice-on-request.md): + +- Copy `x-hcx-correlation_id` from this message. +- Give your answer its own fresh `x-hcx-api_call_id`. +- Send it to the sender: its `x-hcx-sender_code` becomes your `x-hcx-recipient_code`. +- Set `x-hcx-workflow_id` to `17`, payment received, and `x-hcx-status` to `response.complete`. After a `33` notice, verify the cleared payment before you acknowledge it. +- Seal a Task bundle whose Task has `status` `completed` and output `paymentack`. Name the claim number in the output too. +- If you cannot decrypt or validate this message, answer with a protocol response instead. Set `type` to `ProtocolResponse`, `x-hcx-status` to `response.error`, and fill `x-hcx-error_details`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- You decrypted the payload and stored the amount, date and transaction reference against the claim. +- Your acknowledgement on `/v1/paymentnotice/on_request` gets its own 202 from NHCX. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. The `endpoint_url` in your registry record is the address you expect. + 2. It uses a domain name, with no IP address and no port number. + 3. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 4. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 5. The payer addressed the message to your participant code. + When NHCX cannot reach you, the sender is told [NHCX-1001](../errors/nhcx-1001.md), "Receiver system is not reachable." See [your callback URL is rejected or never called](../troubleshooting/callback-url-rejected.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **You cannot decrypt it.** The sender sealed it to an old certificate, or your registry certificate does not match your private key. Still return 202 with the receipt. Then answer on `/v1/paymentnotice/on_request` with a protocol response. [PAYR-1001](../errors/payr-1001.md) names a decryption failure. See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **Your answer is refused.** [NHCX-1010](../errors/nhcx-1010.md) means NHCX holds no exchange with that correlation id. [NHCX-1016](../errors/nhcx-1016.md) means the action does not fit that correlation id. [NHCX-1011](../errors/nhcx-1011.md) means the `x-hcx-status` value is invalid. Copy the correlation id from this message, answer on the paired path, and use a documented status. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). +- **You need to claim a shortfall.** Wait for workflow `33`, verify the payment and acknowledge it first. Then raise the shortfall as a task; see [ask the payer to reprocess a claim](../flows/claim-reprocess.md). diff --git a/catalogue/nhcx/callbacks/preauth-on-submit.md b/catalogue/nhcx/callbacks/preauth-on-submit.md new file mode 100644 index 000000000..f3b095b31 --- /dev/null +++ b/catalogue/nhcx/callbacks/preauth-on-submit.md @@ -0,0 +1,314 @@ +--- +id: nhcx.callback.preauth-on-submit +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/preauth/on_submit +summary: >- + What your hospital system receives when the payer answers a request to authorise + treatment, and how to acknowledge and read it. +sources: +- url: https://hcxsbx.abdm.gov.in/preauthhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/preauthhcxservice.json + hash: sha256:2e8c594c51d9640ae4a576be34a5d190614918d1e7697d6718bc91c31fa66948 + fetched: '2026-09-14' + note: 'API specification: preauthhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/preauth/on_submit.' +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 4.2 and 8.5. +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 7 Callback API logic. +- url: https://hcxsbx.abdm.gov.in/images/3799f26f2a0b2c9a80c5.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Preauthorization.pdf + hash: sha256:75d5628e7dd8a8e1a55c4ab3836c0591088ba378a8cd498e8277d83911129439 + fetched: '2026-09-14' + note: Preauthorization, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.preauth-on-submit + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.status + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.preauth-submit + - nhcx.callback.on-status + - nhcx.callback.error + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.status-check + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.preauth-response + - nhcx.fhir.preauth-enhancement + - nhcx.fhir.query-update + tests: + - nhcx.test.provider-uc-07 + - nhcx.test.tc-pa-01 + - nhcx.test.tc-pa-02 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1015 + - nhcx.error.payr-1001 + - nhcx.error.payr-1002 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + - nhcx.concept.status-lifecycle + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.accepted-then-no-callback + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + - nhcx.decision.status-poll-or-wait + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.preauthorisation + - nhcx.glossary.enhancement + - shared.glossary.fhir + - shared.glossary.abha +--- + +# Receiving POST /v1/preauth/on_submit + +## In plain words + +After you submit a preauthorisation, the [payer](../glossary/payer.md) answers through [NHCX](../../shared/glossary/nhcx.md). NHCX delivers the answer to your system as `POST /v1/preauth/on_submit`. You receive it as the [provider](../glossary/provider.md) that asked. The decision can be an approval, a partial approval, a query or a rejection. The same path brings the answer to an enhancement or a resubmission. Acknowledge each delivery within 30 seconds, then update the case. + +## Before you start + +**Who receives it:** the provider that sent `/v1/preauth/submit`. **Who sends it:** the payer, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/preauth/on_submit` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- You sent the request with [`/v1/preauth/submit`](../endpoints/preauth-submit.md). You stored its `x-hcx-api_call_id` and `x-hcx-correlation_id` before sending it. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant Y as Your provider system + participant N as NHCX gateway + participant O as Payer system + Y->>N: POST /v1/preauth/submit + N-->>Y: 202 Accepted + N->>O: POST /v1/preauth/submit + O->>N: POST /v1/preauth/on_submit (sealed answer) + N->>Y: POST /v1/preauth/on_submit + Y-->>N: 202 Accepted with receipt, within 30 seconds +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/preauth/on_submit`. The body takes one of two forms. Branch on its `type` field. + +- `ProtocolResponse`: the payer could not process your request. The body is plain JSON with the error details, and nothing is sealed. +- Any other body carries the payer's answer sealed in `payload`, with `type` set to `JWEPayload`. + +```json +{ + "type": "JWEPayload", + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "21", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The payer that answered. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. Each answer has its own value. A repeat delivery carries the same value. | +| `x-hcx-correlation_id` | The exchange you started. Match it to the request you stored. | +| `x-hcx-workflow_id` | The step the answer reports. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-status` | Where the exchange stands. See the status list below. | +| `x-hcx-error_details` | An object with `code`, `message` and `trace` when something failed. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. + +`x-hcx-status` takes these values: + +- `response.partial`: an interim answer, such as received and acknowledged. More follows on the same correlation id. +- `response.complete`: the final answer. The case is closed on this exchange. +- `response.error`: the request failed on protocol grounds. Treat `response.fail` the same way. + +The payer's workflow code says which step the answer reports: + +| `x-hcx-workflow_id` | Meaning | +|---|---| +| `20` | Preauthorisation received and acknowledged | +| `21` | Preauthorisation approved: proceed with treatment | +| `22` | Enhancement approved | +| `23` | Preauthorisation rejected: read the reason in the ClaimResponse | +| `24` | Preauthorisation queried: answer with workflow `19` | +| `241` | Enhancement queried | + +Answer a query on [`/v1/preauth/submit`](../endpoints/preauth-submit.md). See [answer a payer query on a preauthorisation](../flows/preauth-query-response.md). + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) collection bundle: see [the preauthorisation response bundle](../fhir/preauth-response.md). The ClaimResponse carries the decision, the approved amount and any reason. For enhancements, see [enhancement bundles](../fhir/preauth-enhancement.md). + +#### When `type` is `ProtocolResponse` + +The body is plain JSON. Read `x-hcx-error_details` for the reason. + +```json +{ + "type": "ProtocolResponse", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "", + "x-hcx-timestamp": "", + "x-hcx-debug_flag": "Error", + "x-hcx-status": "response.error", + "x-hcx-redirect_to": "", + "x-hcx-error_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-debug_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-domain-header": { + "use_case_name": "", + "amt_processed": "" + }, + "x-hcx-entity-type": "preauth", + "x-hcx-ben-abha-id": "" +} +``` + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "preauth", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- `result.entity_type` is `preauth` for this exchange. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. +- An interim answer and a final answer share `x-hcx-correlation_id`. They differ in `x-hcx-api_call_id`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- The `x-hcx-correlation_id` matches a request you sent. +- The case holds the payer's latest answer. It is final when `x-hcx-status` is `response.complete`. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. Your `/v1/preauth/submit` call got a 202 from NHCX. Without it, NHCX never forwarded the request. + 2. Your `/v1/error` endpoint holds no report for this correlation id. A report means the payer never received your request. + 3. The `endpoint_url` in your registry record is right. It uses a domain name, with no IP address and no port number. + 4. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 5. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 6. Ask NHCX with [`/v1/status`](../endpoints/status.md). `request.dispatched` means the payer has your request, so wait. `request.stopped` means it is dead. + If the payer cannot seal its answer to your certificate, it reports [PAYR-1002](../errors/payr-1002.md). Update the certificate in your registry record. See [accepted with 202 and no callback arrives](../troubleshooting/accepted-then-no-callback.md). +- **It arrives as a `ProtocolResponse`.** The payer could not open or validate your request. Read `x-hcx-error_details.code` and open its error atom. [PAYR-1001](../errors/payr-1001.md) means your payload could not be decrypted: fetch the recipient's certificate again with [`/fetch/certs`](../endpoints/fetch-certs.md). The correlation id of a failed request is inactive. Send a fresh request with a new correlation id; reusing the old one is refused as [NHCX-1006](../errors/nhcx-1006.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **The correlation id matches nothing you sent.** You stored the ids after sending instead of before, or you looked in one field only. Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). +- **The answer is a rejection.** A rejection is not a protocol error. It arrives sealed, like an approval. The reason sits inside the decrypted resource, not in `x-hcx-error_details`. diff --git a/catalogue/nhcx/callbacks/preauth-submit.md b/catalogue/nhcx/callbacks/preauth-submit.md new file mode 100644 index 000000000..3f04b3c72 --- /dev/null +++ b/catalogue/nhcx/callbacks/preauth-submit.md @@ -0,0 +1,285 @@ +--- +id: nhcx.callback.preauth-submit +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/preauth/submit +summary: >- + What your payer system receives when a hospital asks you to authorise treatment + in advance, and how to acknowledge it before you adjudicate. +sources: +- url: https://hcxsbx.abdm.gov.in/preauthhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/preauthhcxservice.json + hash: sha256:2e8c594c51d9640ae4a576be34a5d190614918d1e7697d6718bc91c31fa66948 + fetched: '2026-09-14' + note: 'API specification: preauthhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/preauth/submit.' +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 4.1 and 8.6. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Value sets (Use case) and sheet Status. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 9 Respond to the Preauthorization Submitted. +- url: https://hcxsbx.abdm.gov.in/images/3799f26f2a0b2c9a80c5.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Preauthorization.pdf + hash: sha256:75d5628e7dd8a8e1a55c4ab3836c0591088ba378a8cd498e8277d83911129439 + fetched: '2026-09-14' + note: Preauthorization, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. page 2, items 5-6. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 4, 7 and 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.preauth-on-submit + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.task-submit + - nhcx.callback.error + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.preauth-enhancement + - nhcx.fhir.query-update + - nhcx.fhir.preauth-response + - nhcx.fhir.validation + tests: + - nhcx.test.payer-uc-09 + - nhcx.test.tc-pa-01 + - nhcx.test.tc-pa-02 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1015 + - nhcx.error.nhcx-1016 + - nhcx.error.payr-1001 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.preauthorisation + - nhcx.glossary.enhancement + - shared.glossary.fhir + - shared.glossary.abha + - shared.glossary.nrces +--- + +# Receiving POST /v1/preauth/submit + +## In plain words + +Before planned treatment, a [provider](../glossary/provider.md) asks you to authorise the cost. [NHCX](../../shared/glossary/nhcx.md) delivers the request to your system as `POST /v1/preauth/submit`. You receive it as the [payer](../glossary/payer.md), or as the entity that processes the policy. The same path carries an enhancement, a resubmission and the provider's answer to your query. Acknowledge each delivery within 30 seconds. Then adjudicate and answer on [`/v1/preauth/on_submit`](../endpoints/preauth-on-submit.md). + +## Before you start + +**Who receives it:** the payer, as the system that processes the request for the policy. **Who sends it:** a provider, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/preauth/submit` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- Your system can call [`/v1/preauth/on_submit`](../endpoints/preauth-on-submit.md) to answer. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant S as Provider system + participant N as NHCX gateway + participant Y as Your payer system + S->>N: POST /v1/preauth/submit (sealed) + N-->>S: 202 Accepted + N->>Y: POST /v1/preauth/submit (same sealed message) + Y-->>N: 202 Accepted with receipt, within 30 seconds + Note over Y: Decrypt, validate, process + Y->>N: POST /v1/preauth/on_submit (your answer) + N->>S: POST /v1/preauth/on_submit +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/preauth/submit`. The JSON body carries one field, `payload`: + +```json +{ + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "12", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "", + "x-hcx-use_case": "New" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The provider that sent it. Your answer goes back to this code. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. A repeat delivery carries the same value. | +| `x-hcx-request_id` | The originating request. Read it when present. | +| `x-hcx-correlation_id` | The whole exchange. Copy it into your answer. | +| `x-hcx-workflow_id` | The business step. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-timestamp` | When the sender sealed the message. | +| `x-hcx-status` | `request.initiated` for a new request. Accept `request.initiate` as the same value. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | +| `x-hcx-use_case` | `New`, `Enhancement` or `Resubmit`. Optional. | + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) collection bundle with a Claim whose `use` is `preauthorization`. See [the preauthorisation request bundle](../fhir/preauth-request.md) and [enhancement bundles](../fhir/preauth-enhancement.md). Validate it against the [NRCeS](../../shared/glossary/nrces.md) profiles before you adjudicate; see [validating a bundle](../fhir/validation.md). + +The workflow code says what the provider sends: + +| `x-hcx-workflow_id` | What the provider sends | +|---|---| +| `12` | A new preauthorisation | +| `121` | A resubmission after a query or rejection | +| `13` | An enhancement: a request for more amount | +| `19` | An answer to your query on a preauthorisation | +| `131` | An answer to your query on an enhancement | + +A cancellation does not come here. It arrives as a task on [`/v1/task/submit`](task-submit.md). + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "preauth", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- `result.entity_type` is `preauth` for this exchange. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. + +### What you do next + +Process the message, then answer on [`/v1/preauth/on_submit`](../endpoints/preauth-on-submit.md): + +- Copy `x-hcx-correlation_id` from this message. +- Give your answer its own fresh `x-hcx-api_call_id`. +- Send it to the sender: its `x-hcx-sender_code` becomes your `x-hcx-recipient_code`. +- Set `x-hcx-status` to `response.partial` for an interim answer, such as received. Use `response.complete` for the decision. +- Seal a ClaimResponse bundle to the provider's certificate. See [the preauthorisation response bundle](../fhir/preauth-response.md). +- If you cannot decrypt or validate this message, answer with a protocol response instead. Set `type` to `ProtocolResponse`, `x-hcx-status` to `response.error`, and fill `x-hcx-error_details`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- You decrypted the payload and hold a Claim bundle with `Claim.use` `preauthorization`, stored against its `x-hcx-correlation_id`. +- Your answer on `/v1/preauth/on_submit` gets its own 202 from NHCX. No NHCX error names its correlation id. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. The `endpoint_url` in your registry record is the address you expect. + 2. It uses a domain name, with no IP address and no port number. + 3. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 4. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 5. The provider addressed the message to your participant code. Providers address the processor code from their policy lookup, so check that code is yours. + When NHCX cannot reach you, the sender is told [NHCX-1001](../errors/nhcx-1001.md), "Receiver system is not reachable." See [your callback URL is rejected or never called](../troubleshooting/callback-url-rejected.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **You cannot decrypt it.** The sender sealed it to an old certificate, or your registry certificate does not match your private key. Still return 202 with the receipt. Then answer on `/v1/preauth/on_submit` with a protocol response. [PAYR-1001](../errors/payr-1001.md) names a decryption failure. See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **Your answer is refused.** [NHCX-1010](../errors/nhcx-1010.md) means NHCX holds no exchange with that correlation id. [NHCX-1016](../errors/nhcx-1016.md) means the action does not fit that correlation id. [NHCX-1011](../errors/nhcx-1011.md) means the `x-hcx-status` value is invalid. Copy the correlation id from this message, answer on the paired path, and use a documented status. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). +- **The request fails your business rules.** That is not a protocol error. Answer with a sealed ClaimResponse that carries the decision and the reason. Keep protocol responses for messages you cannot open or validate. diff --git a/catalogue/nhcx/callbacks/predetermination-on-submit.md b/catalogue/nhcx/callbacks/predetermination-on-submit.md new file mode 100644 index 000000000..da05598fb --- /dev/null +++ b/catalogue/nhcx/callbacks/predetermination-on-submit.md @@ -0,0 +1,280 @@ +--- +id: nhcx.callback.predetermination-on-submit +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/predetermination/on_submit +summary: >- + What your hospital system receives when the payer returns an estimate for a proposed + treatment, and how to acknowledge and read it. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. API Structure, use case table. +- url: https://hcxsbx.abdm.gov.in/images/2c3fbb4e6b09f0834f69.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Implementation Guide for Adoption of FHIR in ABDM and NHCX.pdf + hash: sha256:549377c9c26b1bd23decac3a1b9e5ebedfdc8e0fe99e53ef733859b188f51366 + fetched: '2026-09-14' + note: Implementation Guide for Adoption of FHIR in ABDM and NHCX, row 14 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 21, Annexure. +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. request /v1/predetermination/on_submit. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.predetermination-on-submit + - nhcx.endpoint.predetermination-submit + - nhcx.endpoint.status + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.predetermination-submit + - nhcx.callback.on-status + - nhcx.callback.error + flows: + - nhcx.flow.predetermination + - nhcx.flow.status-check + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.preauth-response + - nhcx.fhir.collection-bundle + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1015 + - nhcx.error.payr-1001 + - nhcx.error.payr-1002 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.status-lifecycle + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.accepted-then-no-callback + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + - nhcx.decision.preauth-or-predetermination + - nhcx.decision.status-poll-or-wait + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.predetermination + - shared.glossary.fhir + - shared.glossary.abha +--- + +# Receiving POST /v1/predetermination/on_submit + +## In plain words + +After you send a predetermination request, the [payer](../glossary/payer.md) answers through [NHCX](../../shared/glossary/nhcx.md) with an estimate. NHCX delivers it to your system as `POST /v1/predetermination/on_submit`. You receive it as the [provider](../glossary/provider.md) that asked. It tells you what the payer would approve for the proposed treatment. Use it to decide whether to go ahead with a preauthorisation. Acknowledge it within 30 seconds. + +## Before you start + +**Who receives it:** the provider that sent `/v1/predetermination/submit`. **Who sends it:** the payer, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/predetermination/on_submit` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- You sent the request with [`/v1/predetermination/submit`](../endpoints/predetermination-submit.md). You stored its `x-hcx-api_call_id` and `x-hcx-correlation_id` before sending it. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant Y as Your provider system + participant N as NHCX gateway + participant O as Payer system + Y->>N: POST /v1/predetermination/submit + N-->>Y: 202 Accepted + N->>O: POST /v1/predetermination/submit + O->>N: POST /v1/predetermination/on_submit (sealed answer) + N->>Y: POST /v1/predetermination/on_submit + Y-->>N: 202 Accepted with receipt, within 30 seconds +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/predetermination/on_submit`. The body takes one of two forms. Branch on its `type` field. + +- `ProtocolResponse`: the payer could not process your request. The body is plain JSON with the error details, and nothing is sealed. +- Any other body carries the payer's answer sealed in `payload`, with `type` set to `JWEPayload`. + +```json +{ + "type": "JWEPayload", + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The payer that answered. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. Each answer has its own value. A repeat delivery carries the same value. | +| `x-hcx-correlation_id` | The exchange you started. Match it to the request you stored. | +| `x-hcx-workflow_id` | The step the answer reports. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-status` | Where the exchange stands. See the status list below. | +| `x-hcx-error_details` | An object with `code`, `message` and `trace` when something failed. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. + +`x-hcx-status` takes these values: + +- `response.partial`: an interim answer, such as received or in process. More follows on the same correlation id. +- `response.complete`: the final answer. The case is closed on this exchange. +- `response.error`: the request failed on protocol grounds. Treat `response.fail` the same way. + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) collection bundle with a ClaimResponse whose `use` is `predetermination`. It carries the benefit the payer would approve. + +#### When `type` is `ProtocolResponse` + +The body is plain JSON. Read `x-hcx-error_details` for the reason. + +```json +{ + "type": "ProtocolResponse", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "", + "x-hcx-timestamp": "", + "x-hcx-debug_flag": "Error", + "x-hcx-status": "response.error", + "x-hcx-redirect_to": "", + "x-hcx-error_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-debug_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-domain-header": { + "use_case_name": "", + "amt_processed": "" + }, + "x-hcx-entity-type": "", + "x-hcx-ben-abha-id": "" +} +``` + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- An `entity_type` value for this exchange is not yet published. The published values are `coverageeligibility`, `preauth`, `claim`, `task`, `payment` and `insuranceplan`. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. +- An interim answer and a final answer share `x-hcx-correlation_id`. They differ in `x-hcx-api_call_id`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- The `x-hcx-correlation_id` matches a request you sent. +- You hold the payer's estimate, stored against the request, ready for the preauthorisation decision. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. Your `/v1/predetermination/submit` call got a 202 from NHCX. Without it, NHCX never forwarded the request. + 2. Your `/v1/error` endpoint holds no report for this correlation id. A report means the payer never received your request. + 3. The `endpoint_url` in your registry record is right. It uses a domain name, with no IP address and no port number. + 4. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 5. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 6. Ask NHCX with [`/v1/status`](../endpoints/status.md). `request.dispatched` means the payer has your request, so wait. `request.stopped` means it is dead. + If the payer cannot seal its answer to your certificate, it reports [PAYR-1002](../errors/payr-1002.md). Update the certificate in your registry record. See [accepted with 202 and no callback arrives](../troubleshooting/accepted-then-no-callback.md). +- **It arrives as a `ProtocolResponse`.** The payer could not open or validate your request. Read `x-hcx-error_details.code` and open its error atom. [PAYR-1001](../errors/payr-1001.md) means your payload could not be decrypted: fetch the recipient's certificate again with [`/fetch/certs`](../endpoints/fetch-certs.md). The correlation id of a failed request is inactive. Send a fresh request with a new correlation id; reusing the old one is refused as [NHCX-1006](../errors/nhcx-1006.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **The correlation id matches nothing you sent.** You stored the ids after sending instead of before, or you looked in one field only. Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). diff --git a/catalogue/nhcx/callbacks/predetermination-submit.md b/catalogue/nhcx/callbacks/predetermination-submit.md new file mode 100644 index 000000000..8198ab130 --- /dev/null +++ b/catalogue/nhcx/callbacks/predetermination-submit.md @@ -0,0 +1,246 @@ +--- +id: nhcx.callback.predetermination-submit +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/predetermination/submit +summary: >- + What your payer system receives when a hospital asks what you would approve for + a proposed treatment, and how to acknowledge it. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. API Structure, use case table. +- url: https://hcxsbx.abdm.gov.in/images/af8d243edcc2139a515d.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Usecases.pdf + hash: sha256:8709b2907a0d5a0dbb36f5e63ed8deae269e0c75372b05d71ce7380c8a0929e7 + fetched: '2026-09-14' + note: NHCX Usecases, row 1 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Table 1.1, Predetermination Request Submission. +- url: https://hcxsbx.abdm.gov.in/images/2c3fbb4e6b09f0834f69.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Implementation Guide for Adoption of FHIR in ABDM and NHCX.pdf + hash: sha256:549377c9c26b1bd23decac3a1b9e5ebedfdc8e0fe99e53ef733859b188f51366 + fetched: '2026-09-14' + note: Implementation Guide for Adoption of FHIR in ABDM and NHCX, row 14 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 21, Annexure. +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. request /v1/predetermination/submit. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 4, 7 and 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.predetermination-submit + - nhcx.endpoint.predetermination-on-submit + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.predetermination-on-submit + - nhcx.callback.error + flows: + - nhcx.flow.predetermination + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.collection-bundle + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1015 + - nhcx.error.nhcx-1016 + - nhcx.error.payr-1001 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + - nhcx.decision.preauth-or-predetermination + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.predetermination + - shared.glossary.fhir + - shared.glossary.abha +--- + +# Receiving POST /v1/predetermination/submit + +## In plain words + +A [provider](../glossary/provider.md) can ask what you would approve for a proposed treatment, before it commits to a preauthorisation. [NHCX](../../shared/glossary/nhcx.md) delivers that request to your system as `POST /v1/predetermination/submit`. You receive it as the [payer](../glossary/payer.md). Acknowledge the delivery within 30 seconds. Then answer on [`/v1/predetermination/on_submit`](../endpoints/predetermination-on-submit.md) with your estimate. + +## Before you start + +**Who receives it:** the payer, as the system that processes the request for the policy. **Who sends it:** a provider, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/predetermination/submit` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- Your system can call [`/v1/predetermination/on_submit`](../endpoints/predetermination-on-submit.md) to answer. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant S as Provider system + participant N as NHCX gateway + participant Y as Your payer system + S->>N: POST /v1/predetermination/submit (sealed) + N-->>S: 202 Accepted + N->>Y: POST /v1/predetermination/submit (same sealed message) + Y-->>N: 202 Accepted with receipt, within 30 seconds + Note over Y: Decrypt, validate, process + Y->>N: POST /v1/predetermination/on_submit (your answer) + N->>S: POST /v1/predetermination/on_submit +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/predetermination/submit`. The JSON body carries one field, `payload`: + +```json +{ + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The provider that sent it. Your answer goes back to this code. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. A repeat delivery carries the same value. | +| `x-hcx-request_id` | The originating request. Read it when present. | +| `x-hcx-correlation_id` | The whole exchange. Copy it into your answer. | +| `x-hcx-workflow_id` | The business step. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-timestamp` | When the sender sealed the message. | +| `x-hcx-status` | `request.initiated` for a new request. Accept `request.initiate` as the same value. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) collection bundle with the shape of a preauthorisation request. Its Claim has `use` `predetermination`. See [the preauthorisation request bundle](../fhir/preauth-request.md). + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- An `entity_type` value for this exchange is not yet published. The published values are `coverageeligibility`, `preauth`, `claim`, `task`, `payment` and `insuranceplan`. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. + +### What you do next + +Process the message, then answer on [`/v1/predetermination/on_submit`](../endpoints/predetermination-on-submit.md): + +- Copy `x-hcx-correlation_id` from this message. +- Give your answer its own fresh `x-hcx-api_call_id`. +- Send it to the sender: its `x-hcx-sender_code` becomes your `x-hcx-recipient_code`. +- Set `x-hcx-status` to `response.complete` for your estimate. +- Seal a ClaimResponse with `use` `predetermination`, carrying the benefit you would approve. Base it on the policy and the beneficiary's past history. +- If you cannot decrypt or validate this message, answer with a protocol response instead. Set `type` to `ProtocolResponse`, `x-hcx-status` to `response.error`, and fill `x-hcx-error_details`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- You decrypted the payload and hold a Claim with `use` `predetermination`, stored against its `x-hcx-correlation_id`. +- Your estimate on `/v1/predetermination/on_submit` gets its own 202 from NHCX. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. The `endpoint_url` in your registry record is the address you expect. + 2. It uses a domain name, with no IP address and no port number. + 3. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 4. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 5. The provider addressed the message to your participant code. Providers address the processor code from their policy lookup, so check that code is yours. + When NHCX cannot reach you, the sender is told [NHCX-1001](../errors/nhcx-1001.md), "Receiver system is not reachable." See [your callback URL is rejected or never called](../troubleshooting/callback-url-rejected.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **You cannot decrypt it.** The sender sealed it to an old certificate, or your registry certificate does not match your private key. Still return 202 with the receipt. Then answer on `/v1/predetermination/on_submit` with a protocol response. [PAYR-1001](../errors/payr-1001.md) names a decryption failure. See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **Your answer is refused.** [NHCX-1010](../errors/nhcx-1010.md) means NHCX holds no exchange with that correlation id. [NHCX-1016](../errors/nhcx-1016.md) means the action does not fit that correlation id. [NHCX-1011](../errors/nhcx-1011.md) means the `x-hcx-status` value is invalid. Copy the correlation id from this message, answer on the paired path, and use a documented status. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). diff --git a/catalogue/nhcx/callbacks/search-on-submit.md b/catalogue/nhcx/callbacks/search-on-submit.md new file mode 100644 index 000000000..8bdb0a51d --- /dev/null +++ b/catalogue/nhcx/callbacks/search-on-submit.md @@ -0,0 +1,285 @@ +--- +id: nhcx.callback.search-on-submit +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/search/on_submit +summary: >- + What your system receives when a payer returns the claim information you searched + for, and how to acknowledge and read it. +sources: +- url: https://hcxsbx.abdm.gov.in/searchhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/searchhcxservice.json + hash: sha256:21749dd2ba84a19c5523772da359d76293493d44b48651f1af2e6042d78fa296 + fetched: '2026-09-14' + note: 'API specification: searchhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/search/on_submit.' +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Search, /v1/search/on_submit. +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 10 Claim Search. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.search-on-submit + - nhcx.endpoint.search-submit + - nhcx.endpoint.status + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.search-submit + - nhcx.callback.on-status + - nhcx.callback.error + flows: + - nhcx.flow.claim-search + - nhcx.flow.status-check + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.task + - nhcx.fhir.claim-response + tests: + - nhcx.test.provider-uc-10 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1015 + - nhcx.error.payr-1001 + - nhcx.error.payr-1002 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.status-lifecycle + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.accepted-then-no-callback + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + - nhcx.decision.status-poll-or-wait + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - shared.glossary.fhir + - shared.glossary.abha +--- + +# Receiving POST /v1/search/on_submit + +## In plain words + +After you search for claim information, the [payer](../glossary/payer.md) answers through [NHCX](../../shared/glossary/nhcx.md). NHCX delivers the result to your system as `POST /v1/search/on_submit`. You receive it as the participant that searched, usually a [provider](../glossary/provider.md). The result carries the claim responses that match your search. Acknowledge it within 30 seconds. + +## Before you start + +**Who receives it:** the participant, usually a provider, that sent `/v1/search/submit`. **Who sends it:** the payer, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/search/on_submit` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- You sent the request with [`/v1/search/submit`](../endpoints/search-submit.md). You stored its `x-hcx-api_call_id` and `x-hcx-correlation_id` before sending it. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant Y as Your system + participant N as NHCX gateway + participant O as Payer system + Y->>N: POST /v1/search/submit + N-->>Y: 202 Accepted + N->>O: POST /v1/search/submit + O->>N: POST /v1/search/on_submit (sealed answer) + N->>Y: POST /v1/search/on_submit + Y-->>N: 202 Accepted with receipt, within 30 seconds +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/search/on_submit`. The body takes one of two forms. Branch on its `type` field. + +- `ProtocolResponse`: the payer could not process your request. The body is plain JSON with the error details, and nothing is sealed. +- Any other body carries the payer's answer sealed in `payload`, with `type` set to `JWEPayload`. + +```json +{ + "type": "JWEPayload", + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The payer that answered. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. Each answer has its own value. A repeat delivery carries the same value. | +| `x-hcx-correlation_id` | The exchange you started. Match it to the request you stored. | +| `x-hcx-workflow_id` | The step the answer reports. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-status` | Where the exchange stands. See the status list below. | +| `x-hcx-error_details` | An object with `code`, `message` and `trace` when something failed. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. + +`x-hcx-status` takes these values: + +- `response.partial`: an interim answer, such as received or in process. More follows on the same correlation id. +- `response.complete`: the final answer. The case is closed on this exchange. +- `response.error`: the request failed on protocol grounds. Treat `response.fail` the same way. + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) Task bundle: see [the Task bundle](../fhir/task.md). The Task output carries the ClaimResponse resources that match your inputs. See [the claim response bundle](../fhir/claim-response.md). + +#### When `type` is `ProtocolResponse` + +The body is plain JSON. Read `x-hcx-error_details` for the reason. + +```json +{ + "type": "ProtocolResponse", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "", + "x-hcx-timestamp": "", + "x-hcx-debug_flag": "Error", + "x-hcx-status": "response.error", + "x-hcx-redirect_to": "", + "x-hcx-error_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-debug_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-domain-header": { + "use_case_name": "", + "amt_processed": "" + }, + "x-hcx-entity-type": "", + "x-hcx-ben-abha-id": "" +} +``` + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- An `entity_type` value for this exchange is not yet published. The published values are `coverageeligibility`, `preauth`, `claim`, `task`, `payment` and `insuranceplan`. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. +- An interim answer and a final answer share `x-hcx-correlation_id`. They differ in `x-hcx-api_call_id`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- The `x-hcx-correlation_id` matches a request you sent. +- You hold the matching ClaimResponse resources, stored against your search. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. Your `/v1/search/submit` call got a 202 from NHCX. Without it, NHCX never forwarded the request. + 2. Your `/v1/error` endpoint holds no report for this correlation id. A report means the payer never received your request. + 3. The `endpoint_url` in your registry record is right. It uses a domain name, with no IP address and no port number. + 4. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 5. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 6. Ask NHCX with [`/v1/status`](../endpoints/status.md). `request.dispatched` means the payer has your request, so wait. `request.stopped` means it is dead. + If the payer cannot seal its answer to your certificate, it reports [PAYR-1002](../errors/payr-1002.md). Update the certificate in your registry record. See [accepted with 202 and no callback arrives](../troubleshooting/accepted-then-no-callback.md). +- **It arrives as a `ProtocolResponse`.** The payer could not open or validate your request. Read `x-hcx-error_details.code` and open its error atom. [PAYR-1001](../errors/payr-1001.md) means your payload could not be decrypted: fetch the recipient's certificate again with [`/fetch/certs`](../endpoints/fetch-certs.md). The correlation id of a failed request is inactive. Send a fresh request with a new correlation id; reusing the old one is refused as [NHCX-1006](../errors/nhcx-1006.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **The correlation id matches nothing you sent.** You stored the ids after sending instead of before, or you looked in one field only. Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). diff --git a/catalogue/nhcx/callbacks/search-submit.md b/catalogue/nhcx/callbacks/search-submit.md new file mode 100644 index 000000000..4d7f59e51 --- /dev/null +++ b/catalogue/nhcx/callbacks/search-submit.md @@ -0,0 +1,254 @@ +--- +id: nhcx.callback.search-submit +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/search/submit +summary: >- + What your payer system receives when a hospital or an authorised body searches + for claim information, and how to acknowledge it. +sources: +- url: https://hcxsbx.abdm.gov.in/searchhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/searchhcxservice.json + hash: sha256:21749dd2ba84a19c5523772da359d76293493d44b48651f1af2e6042d78fa296 + fetched: '2026-09-14' + note: 'API specification: searchhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/search/submit.' +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Search; sheet Value sets, Task Codes. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 12 Respond to search request. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 4, 7 and 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.search-submit + - nhcx.endpoint.search-on-submit + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.search-on-submit + - nhcx.callback.error + flows: + - nhcx.flow.claim-search + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.task + - nhcx.fhir.claim-response + tests: + - nhcx.test.payer-uc-12 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1015 + - nhcx.error.nhcx-1016 + - nhcx.error.payr-1001 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - shared.glossary.nha + - shared.glossary.fhir + - shared.glossary.abha +--- + +# Receiving POST /v1/search/submit + +## In plain words + +A [provider](../glossary/provider.md), a regulator or NHA can search for claim information that a payer holds. [NHCX](../../shared/glossary/nhcx.md) delivers the search to your system as `POST /v1/search/submit`. You receive it as the [payer](../glossary/payer.md). It names the claims to look for, by claim number, policy, product or date range. Acknowledge the delivery within 30 seconds. Then answer on [`/v1/search/on_submit`](../endpoints/search-on-submit.md) with the matching claim responses. + +## Before you start + +**Who receives it:** the payer, as the system that processes the request for the policy. **Who sends it:** a provider, a regulator or NHA, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/search/submit` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- Your system can call [`/v1/search/on_submit`](../endpoints/search-on-submit.md) to answer. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant S as Searching system + participant N as NHCX gateway + participant Y as Your payer system + S->>N: POST /v1/search/submit (sealed) + N-->>S: 202 Accepted + N->>Y: POST /v1/search/submit (same sealed message) + Y-->>N: 202 Accepted with receipt, within 30 seconds + Note over Y: Decrypt, validate, process + Y->>N: POST /v1/search/on_submit (your answer) + N->>S: POST /v1/search/on_submit +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/search/submit`. The JSON body carries one field, `payload`: + +```json +{ + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The participant that searched. Your answer goes back to this code. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. A repeat delivery carries the same value. | +| `x-hcx-request_id` | The originating request. Read it when present. | +| `x-hcx-correlation_id` | The whole exchange. Copy it into your answer. | +| `x-hcx-workflow_id` | The business step. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-timestamp` | When the sender sealed the message. | +| `x-hcx-status` | `request.initiated` for a new request. Accept `request.initiate` as the same value. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) Task bundle: see [the Task bundle](../fhir/task.md). Read the Task inputs to learn what is asked. Do not refuse a search on its Task code alone; codes in use include `search`, `status` and `poll`. + +| Task input | What it narrows | +|---|---| +| `ClaimNumber` | One claim | +| `PolicyNumber` | Claims under a policy | +| `ProductNumber` | Claims under a product | +| `FromDate` and `ToDate` | Claims in a date range | + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- An `entity_type` value for this exchange is not yet published. The published values are `coverageeligibility`, `preauth`, `claim`, `task`, `payment` and `insuranceplan`. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. + +### What you do next + +Process the message, then answer on [`/v1/search/on_submit`](../endpoints/search-on-submit.md): + +- Copy `x-hcx-correlation_id` from this message. +- Give your answer its own fresh `x-hcx-api_call_id`. +- Send it to the sender: its `x-hcx-sender_code` becomes your `x-hcx-recipient_code`. +- Set `x-hcx-status` to `response.partial` for an interim answer, or `response.complete` for the final one. +- Seal a Task bundle to the sender's certificate. Its output carries the ClaimResponse resources that match the inputs. See [the claim response bundle](../fhir/claim-response.md). +- If you cannot decrypt or validate this message, answer with a protocol response instead. Set `type` to `ProtocolResponse`, `x-hcx-status` to `response.error`, and fill `x-hcx-error_details`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- You decrypted the payload and hold the Task inputs, stored against its `x-hcx-correlation_id`. +- Your answer on `/v1/search/on_submit` gets its own 202 from NHCX. No NHCX error names its correlation id. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. The `endpoint_url` in your registry record is the address you expect. + 2. It uses a domain name, with no IP address and no port number. + 3. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 4. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 5. The sender addressed the search to your participant code. + When NHCX cannot reach you, the sender is told [NHCX-1001](../errors/nhcx-1001.md), "Receiver system is not reachable." See [your callback URL is rejected or never called](../troubleshooting/callback-url-rejected.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **You cannot decrypt it.** The sender sealed it to an old certificate, or your registry certificate does not match your private key. Still return 202 with the receipt. Then answer on `/v1/search/on_submit` with a protocol response. [PAYR-1001](../errors/payr-1001.md) names a decryption failure. See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **Your answer is refused.** [NHCX-1010](../errors/nhcx-1010.md) means NHCX holds no exchange with that correlation id. [NHCX-1016](../errors/nhcx-1016.md) means the action does not fit that correlation id. [NHCX-1011](../errors/nhcx-1011.md) means the `x-hcx-status` value is invalid. Copy the correlation id from this message, answer on the paired path, and use a documented status. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). diff --git a/catalogue/nhcx/callbacks/status.md b/catalogue/nhcx/callbacks/status.md new file mode 100644 index 000000000..ff8859bfb --- /dev/null +++ b/catalogue/nhcx/callbacks/status.md @@ -0,0 +1,156 @@ +--- +id: nhcx.callback.status +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/status +summary: >- + Why the claims exchange answers status questions itself, so your system never + needs to handle one, and what to do if one reaches you. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Status, /v1/status. +- url: https://hcxsbx.abdm.gov.in/statushcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/statushcxservice.json + hash: sha256:93b6355a234ef56607427fcdfa32da4921124180c9df08ecd73c8af8955c2adf + fetched: '2026-09-14' + note: 'API specification: statushcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/status description.' +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. API Structure, Status Check rows. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Acceptance and Error scenario. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.status + - nhcx.endpoint.on-status + callbacks: + - nhcx.callback.on-status + flows: + - nhcx.flow.status-check + tests: + - nhcx.test.provider-uc-13 + - nhcx.test.payer-uc-15 + errors: + - nhcx.error.nhcx-1012 + concepts: + - nhcx.concept.status-lifecycle + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + decisions: + - nhcx.decision.status-poll-or-wait + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.api-call-id +--- + +# Receiving POST /v1/status + +## In plain words + +`/v1/status` is the question a sender asks [NHCX](../../shared/glossary/nhcx.md) about one of its own messages. NHCX answers it from its own records. It does not forward the question to a [payer](../glossary/payer.md) or a [provider](../glossary/provider.md). The answer goes back to the sender on [`/v1/on_status`](on-status.md). In normal operation, no participant receives `/v1/status`. + +## Before you start + +**Who receives it:** NHCX, which implements `/v1/status` for providers and payers alike. **Who sends it:** any participant asking about a message it sent. + +- Your registered `endpoint_url` stays as it is for every other path. You need no business logic for `/v1/status`. +- To ask about your own messages, see [`/v1/status`](../endpoints/status.md) and [receiving `/v1/on_status`](on-status.md). +- Every path under your `endpoint_url` answers a delivery within 30 seconds. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). + +## What happens + +```mermaid +sequenceDiagram + participant S as Sender system + participant N as NHCX gateway + S->>N: POST /v1/status + N-->>S: 202 Accepted + Note over N: Looks up the message in its own records + N->>S: POST /v1/on_status + S-->>N: 202 Accepted with receipt +``` + +### What a status request carries + +A status request is sealed as a [JWE](../glossary/jwe.md) like any other message. Its payload is an empty string. Its protected header names the message in question: + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +`x-hcx-correlation_id` holds the `x-hcx-api_call_id` of the message the sender asks about. Everything else follows [the x-hcx protocol headers](../concepts/protocol-headers.md). + +### If one reaches your endpoint + +Answer it like any other delivery: HTTP 202 with the receipt, within 30 seconds. Take no further action. NHCX, not you, reports the status on `/v1/on_status`. + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- An `entity_type` value for this exchange is not yet published. The published values are `coverageeligibility`, `preauth`, `claim`, `task`, `payment` and `insuranceplan`. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +## How you know it worked + +- You have nothing to build for this path. +- Your own `/v1/status` calls are answered on `/v1/on_status`, with `x-hcx-status` `request.queued`, `request.dispatched` or `request.stopped`. +- If your endpoint ever logs a delivery at `/v1/status`, it returned 202 with the receipt within 30 seconds. + +## When it goes wrong + +- **It never arrives.** That is expected. NHCX answers status requests itself. +- **You are waiting for a status answer.** It comes on `/v1/on_status`. See [receiving `/v1/on_status`](on-status.md). +- **Your status call is refused with [NHCX-1012](../errors/nhcx-1012.md).** NHCX holds no message with that API call id. Put the `x-hcx-api_call_id` of your original message in `x-hcx-correlation_id`. +- **Your server answers `/v1/status` with a 404.** Route the path to a handler that returns the receipt. NHCX then stops sending it again. diff --git a/catalogue/nhcx/callbacks/task-on-submit.md b/catalogue/nhcx/callbacks/task-on-submit.md new file mode 100644 index 000000000..53583693a --- /dev/null +++ b/catalogue/nhcx/callbacks/task-on-submit.md @@ -0,0 +1,306 @@ +--- +id: nhcx.callback.task-on-submit +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/task/on_submit +summary: >- + What your hospital system receives when the payer answers a reprocess or cancel + task, and how to acknowledge and read it. +sources: +- url: https://hcxsbx.abdm.gov.in/taskhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/taskhcxservice.json + hash: sha256:0418eca6478dece4d72c5a49a6547d50772511f7ffaf32f901f245591ba84656 + fetched: '2026-09-14' + note: 'API specification: taskhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/task/on_submit.' +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 4.2, 10.4 workflow table and 10.5. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Reprocess, /v1/task/on_submit. +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 12 Request for Reprocess/Cancel. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.task-on-submit + - nhcx.endpoint.task-submit + - nhcx.endpoint.status + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.task-submit + - nhcx.callback.on-status + - nhcx.callback.error + flows: + - nhcx.flow.claim-reprocess + - nhcx.flow.preauth-cancel + - nhcx.flow.status-check + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.task + - nhcx.fhir.claim-response + tests: + - nhcx.test.provider-uc-12 + - nhcx.test.tc-cl-03 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1015 + - nhcx.error.payr-1001 + - nhcx.error.payr-1002 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.reprocess-and-cancel + - nhcx.concept.workflow-codes + - nhcx.concept.status-lifecycle + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.accepted-then-no-callback + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + - nhcx.decision.status-poll-or-wait + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.reprocess + - shared.glossary.fhir + - shared.glossary.abha +--- + +# Receiving POST /v1/task/on_submit + +## In plain words + +After you send a reprocess or cancel task, the [payer](../glossary/payer.md) answers through [NHCX](../../shared/glossary/nhcx.md). NHCX delivers the outcome to your system as `POST /v1/task/on_submit`. You receive it as the [provider](../glossary/provider.md) that sent the task. Acknowledge it within 30 seconds, then update the claim or preauthorisation it names. + +## Before you start + +**Who receives it:** the provider that sent `/v1/task/submit`. **Who sends it:** the payer, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/task/on_submit` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- You sent the request with [`/v1/task/submit`](../endpoints/task-submit.md). You stored its `x-hcx-api_call_id` and `x-hcx-correlation_id` before sending it. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant Y as Your provider system + participant N as NHCX gateway + participant O as Payer system + Y->>N: POST /v1/task/submit + N-->>Y: 202 Accepted + N->>O: POST /v1/task/submit + O->>N: POST /v1/task/on_submit (sealed answer) + N->>Y: POST /v1/task/on_submit + Y-->>N: 202 Accepted with receipt, within 30 seconds +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/task/on_submit`. The body takes one of two forms. Branch on its `type` field. + +- `ProtocolResponse`: the payer could not process your request. The body is plain JSON with the error details, and nothing is sealed. +- Any other body carries the payer's answer sealed in `payload`, with `type` set to `JWEPayload`. + +```json +{ + "type": "JWEPayload", + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "252", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The payer that answered. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. Each answer has its own value. A repeat delivery carries the same value. | +| `x-hcx-correlation_id` | The exchange you started. Match it to the request you stored. | +| `x-hcx-workflow_id` | The step the answer reports. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-status` | Where the exchange stands. See the status list below. | +| `x-hcx-error_details` | An object with `code`, `message` and `trace` when something failed. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. + +`x-hcx-status` takes these values: + +- `response.partial`: an interim answer, such as received. More follows on the same correlation id. +- `response.complete`: the final answer. The case is closed on this exchange. +- `response.error`: the request failed on protocol grounds. Treat `response.fail` the same way. + +The payer's workflow code says which outcome the answer reports: + +| `x-hcx-workflow_id` | Meaning | +|---|---| +| `251` | Reprocess request received | +| `252` | Reprocess request approved | +| `253` | Reprocess request rejected | +| `254` | Reprocess request queried | + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) Task bundle: see [the Task bundle](../fhir/task.md). The Task has `status` `completed`. Its output references a ClaimResponse that carries the outcome. + +#### When `type` is `ProtocolResponse` + +The body is plain JSON. Read `x-hcx-error_details` for the reason. + +```json +{ + "type": "ProtocolResponse", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "", + "x-hcx-timestamp": "", + "x-hcx-debug_flag": "Error", + "x-hcx-status": "response.error", + "x-hcx-redirect_to": "", + "x-hcx-error_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-debug_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-domain-header": { + "use_case_name": "", + "amt_processed": "" + }, + "x-hcx-entity-type": "task", + "x-hcx-ben-abha-id": "" +} +``` + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "task", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- `result.entity_type` is `task` for this exchange. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. +- An interim answer and a final answer share `x-hcx-correlation_id`. They differ in `x-hcx-api_call_id`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- The `x-hcx-correlation_id` matches a request you sent. +- The claim or preauthorisation shows the payer's outcome from the referenced ClaimResponse. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. Your `/v1/task/submit` call got a 202 from NHCX. Without it, NHCX never forwarded the request. + 2. Your `/v1/error` endpoint holds no report for this correlation id. A report means the payer never received your request. + 3. The `endpoint_url` in your registry record is right. It uses a domain name, with no IP address and no port number. + 4. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 5. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 6. Ask NHCX with [`/v1/status`](../endpoints/status.md). `request.dispatched` means the payer has your request, so wait. `request.stopped` means it is dead. + If the payer cannot seal its answer to your certificate, it reports [PAYR-1002](../errors/payr-1002.md). Update the certificate in your registry record. See [accepted with 202 and no callback arrives](../troubleshooting/accepted-then-no-callback.md). +- **It arrives as a `ProtocolResponse`.** The payer could not open or validate your request. Read `x-hcx-error_details.code` and open its error atom. [PAYR-1001](../errors/payr-1001.md) means your payload could not be decrypted: fetch the recipient's certificate again with [`/fetch/certs`](../endpoints/fetch-certs.md). The correlation id of a failed request is inactive. Send a fresh request with a new correlation id; reusing the old one is refused as [NHCX-1006](../errors/nhcx-1006.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **The correlation id matches nothing you sent.** You stored the ids after sending instead of before, or you looked in one field only. Look up `x-hcx-correlation_id` against the correlation ids you sent. If nothing matches, look it up against the `x-hcx-api_call_id` values you sent. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). +- **The answer is a rejection.** A rejection is not a protocol error. It arrives sealed, like an approval. The reason sits inside the decrypted resource, not in `x-hcx-error_details`. diff --git a/catalogue/nhcx/callbacks/task-submit.md b/catalogue/nhcx/callbacks/task-submit.md new file mode 100644 index 000000000..89f6d7182 --- /dev/null +++ b/catalogue/nhcx/callbacks/task-submit.md @@ -0,0 +1,273 @@ +--- +id: nhcx.callback.task-submit +type: callback +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receiving POST /v1/task/submit +summary: >- + What your payer system receives when a hospital asks you to reprocess a claim + or cancel a preauthorisation, and how to acknowledge it. +sources: +- url: https://hcxsbx.abdm.gov.in/taskhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/taskhcxservice.json + hash: sha256:0418eca6478dece4d72c5a49a6547d50772511f7ffaf32f901f245591ba84656 + fetched: '2026-09-14' + note: 'API specification: taskhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/task/submit.' +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Reprocess, /v1/task/submit. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sections 22 and 23 (PMJAY); Q14; Q21. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 10.4 and 11.1-11.2. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 14 Respond to the Task request submitted. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 4, 7 and 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.task-submit + - nhcx.endpoint.task-on-submit + - nhcx.endpoint.paymentnotice-on-request + - nhcx.endpoint.participant-update + callbacks: + - nhcx.callback.task-on-submit + - nhcx.callback.paymentnotice-on-request + - nhcx.callback.error + flows: + - nhcx.flow.claim-reprocess + - nhcx.flow.preauth-cancel + - nhcx.flow.payment-notice + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + fhir: + - nhcx.fhir.task + - nhcx.fhir.claim-response + - nhcx.fhir.payment-notice + tests: + - nhcx.test.payer-uc-14 + - nhcx.test.tc-cl-03 + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1015 + - nhcx.error.nhcx-1016 + - nhcx.error.payr-1001 + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + - nhcx.concept.four-message-legs + - nhcx.concept.reprocess-and-cancel + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + sandbox: + - nhcx.sandbox.callback-url-requirements + decisions: + - nhcx.decision.key-encryption-algorithm + glossary: + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.protected-header + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.reprocess + - nhcx.glossary.crc + - nhcx.glossary.pmjay + - shared.glossary.fhir + - shared.glossary.abha +--- + +# Receiving POST /v1/task/submit + +## In plain words + +A [provider](../glossary/provider.md) uses a task to act on an earlier case. It can ask you to reprocess a rejected or short-paid claim, or to cancel a preauthorisation. [NHCX](../../shared/glossary/nhcx.md) delivers the task to your system as `POST /v1/task/submit`. You receive it as the [payer](../glossary/payer.md). Acknowledge the delivery within 30 seconds. Then answer on [`/v1/task/on_submit`](../endpoints/task-on-submit.md). + +## Before you start + +**Who receives it:** the payer, as the system that processes the request for the policy. **Who sends it:** a provider, through NHCX. + +- Your participant record in the [participant registry](../concepts/participant-registry.md) holds an `endpoint_url`. [NHCX](../../shared/glossary/nhcx.md) posts to that address with `/v1/task/submit` appended. +- You set `endpoint_url` when you register, in [sandbox onboarding](../flows/sandbox-onboarding.md). You change it with [`/participant/update`](../endpoints/participant-update.md). +- The URL uses a domain name over HTTPS. It has no IP address and no port number. +- The server behind it is in India. Your firewall accepts calls from the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). +- Your handler can open a [JWE](../glossary/jwe.md) with your private key. That key pairs with the certificate in your registry record. See [your encryption certificate](../concepts/encryption-certificate.md). +- Your handler answers within 30 seconds and does slow work afterwards. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +- Your system can call [`/v1/task/on_submit`](../endpoints/task-on-submit.md) to answer. +- You also host [`/v1/error`](error.md), so a request that dies is never silent. + +## What happens + +```mermaid +sequenceDiagram + participant S as Provider system + participant N as NHCX gateway + participant Y as Your payer system + S->>N: POST /v1/task/submit (sealed) + N-->>S: 202 Accepted + N->>Y: POST /v1/task/submit (same sealed message) + Y-->>N: 202 Accepted with receipt, within 30 seconds + Note over Y: Decrypt, validate, process + Y->>N: POST /v1/task/on_submit (your answer) + N->>S: POST /v1/task/on_submit +``` + +### What arrives + +[NHCX](../../shared/glossary/nhcx.md) sends `POST /v1/task/submit`. The JSON body carries one field, `payload`: + +```json +{ + "payload": "" +} +``` + +The payload is a JWE in compact form: five base64url parts joined by dots. Decode the first part to read the protected header. You do not need your private key for that step. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +| Protected header | What it tells you | +|---|---| +| `x-hcx-sender_code` | The provider that sent it. Your answer goes back to this code. | +| `x-hcx-recipient_code` | Your participant code. | +| `x-hcx-api_call_id` | This one message. A repeat delivery carries the same value. | +| `x-hcx-request_id` | The originating request. Read it when present. | +| `x-hcx-correlation_id` | The whole exchange. Copy it into your answer. | +| `x-hcx-workflow_id` | The business step. Read it when present. See [workflow codes](../concepts/workflow-codes.md). | +| `x-hcx-timestamp` | When the sender sealed the message. | +| `x-hcx-status` | `request.initiated` for a new request. Accept `request.initiate` as the same value. | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA](../../shared/glossary/abha.md) number. Accept it with or without hyphens. | + +Decrypt the payload with your private key. Use the algorithm the header names in `alg`. [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) covers both values. The plaintext is a [FHIR](../../shared/glossary/fhir.md) Task bundle: see [the Task bundle](../fhir/task.md). The Task has `status` `requested`, and a `ClaimNumber` input names the claim or preauthorisation. + +| `Task.code` | What the provider asks | +|---|---| +| `reprocess` | Reprocess a rejected or short-paid claim | +| `cancel` | Cancel a claim or preauthorisation | +| `release` | Release, as the use case sets | +| `nullify` | Nullify, as the use case sets | + +`Task.reasonCode` says why. Codes in use include `claimrejected`, `rejectiondisputed` and `partialpayment`. In [PMJAY](../glossary/pmjay.md), a reprocess or shortfall task must carry a supporting document as `valueAttachment`. Reprocess cases go to the [CRC](../glossary/crc.md), whose decision is final. + +A PMJAY provider can also send its payment acknowledgement here: a completed Task whose output is `paymentack`. Accept it on this path as well as on [`/v1/paymentnotice/on_request`](paymentnotice-on-request.md). + +### What you send back + +Answer the delivery first, before you decrypt or act on it. Return HTTP status `202 Accepted` with this receipt: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "task", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `api_call_id` and `correlation_id` repeat the values in this delivery. +- `result.sender_code` is the sender's code. `result.recipient_code` is yours. +- `result.entity_type` is `task` for this exchange. +- `result.protocol_status` is one of `request.queued`, `request.dispatched` or `request.error`. +- `error.code` and `error.message` stay empty when you accept the message. +- `timestamp` takes the form `DD/MM/YYYY hh:mm:ss:sss`. + +### Retries and repeat deliveries + +- NHCX waits 30 seconds for your 202 and receipt. +- A late answer, another status code or a receipt in another shape counts as a failed delivery. NHCX sends the same message again. +- After 5 attempts NHCX stops. It deletes the request and retires its correlation id. The original sender learns of it on its own `/v1/error`. +- A repeat delivery is the same sealed message, so it carries the same `x-hcx-api_call_id`. Record every `x-hcx-api_call_id` you accept. +- On a repeat, return 202 with the same receipt and do not process the message again. +- Never deduplicate on `x-hcx-correlation_id`. Every message in one exchange shares it. + +### What you do next + +Process the message, then answer on [`/v1/task/on_submit`](../endpoints/task-on-submit.md): + +- Copy `x-hcx-correlation_id` from this message. +- Give your answer its own fresh `x-hcx-api_call_id`. +- Send it to the sender: its `x-hcx-sender_code` becomes your `x-hcx-recipient_code`. +- Set `x-hcx-status` to `response.complete` for your answer. +- Seal a Task bundle whose Task has `status` `completed` and whose output references a ClaimResponse with the outcome. See [the claim response bundle](../fhir/claim-response.md). +- If you cannot decrypt or validate this message, answer with a protocol response instead. Set `type` to `ProtocolResponse`, `x-hcx-status` to `response.error`, and fill `x-hcx-error_details`. + +## How you know it worked + +- NHCX receives your HTTP 202 and receipt within 30 seconds of the delivery. +- Your log shows one delivery per `x-hcx-api_call_id`. A second delivery with the same value means NHCX did not accept your receipt. +- You decrypted the payload and hold the Task with its `code`, `reasonCode` and `ClaimNumber`, stored against its `x-hcx-correlation_id`. +- Your answer on `/v1/task/on_submit` gets its own 202 from NHCX. No NHCX error names its correlation id. + +## When it goes wrong + +- **It never arrives.** Check these in order. + 1. The `endpoint_url` in your registry record is the address you expect. + 2. It uses a domain name, with no IP address and no port number. + 3. Your server is in India, and your firewall accepts the NHCX egress addresses in [callback URL rules](../sandbox/callback-url-requirements.md). + 4. Your application routes the path to the handler: load balancer rules, service routes and endpoint versions. + 5. The provider addressed the message to your participant code. Providers address the processor code from their policy lookup, so check that code is yours. + When NHCX cannot reach you, the sender is told [NHCX-1001](../errors/nhcx-1001.md), "Receiver system is not reachable." See [your callback URL is rejected or never called](../troubleshooting/callback-url-rejected.md). +- **The same message arrives again and again.** NHCX did not accept your receipt. It was later than 30 seconds, used another status code, or had another shape. Fix the receipt, and keep processing each `x-hcx-api_call_id` once. An invalid answer from a receiver is reported as [NHCX-1015](../errors/nhcx-1015.md), "Invalid response received from receiver." +- **You cannot decrypt it.** The sender sealed it to an old certificate, or your registry certificate does not match your private key. Still return 202 with the receipt. Then answer on `/v1/task/on_submit` with a protocol response. [PAYR-1001](../errors/payr-1001.md) names a decryption failure. See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **Your answer is refused.** [NHCX-1010](../errors/nhcx-1010.md) means NHCX holds no exchange with that correlation id. [NHCX-1016](../errors/nhcx-1016.md) means the action does not fit that correlation id. [NHCX-1011](../errors/nhcx-1011.md) means the `x-hcx-status` value is invalid. Copy the correlation id from this message, answer on the paired path, and use a documented status. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). +- **The request fails your business rules.** That is not a protocol error. Answer with a sealed ClaimResponse, referenced from the Task output, that carries the decision and the reason. Keep protocol responses for messages you cannot open or validate. diff --git a/catalogue/nhcx/concepts/access-control.md b/catalogue/nhcx/concepts/access-control.md new file mode 100644 index 000000000..acef3eedc --- /dev/null +++ b/catalogue/nhcx/concepts/access-control.md @@ -0,0 +1,126 @@ +--- +id: nhcx.concept.access-control +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Who may call what: the NHCX access control matrix' +summary: >- + Each role on the exchange may send and receive only certain messages and search + only certain data, and the exchange and payers enforce this from the registry + and the session token. +sources: +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications/healthcare-operation-policy/access-control + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__healthcare-operation-policy__access-control.md + hash: sha256:7c3d7b2cf396a9daaca76ade1c059a8d358d0686b7b7e041e96c5f7f239dae57 + fetched: '2026-09-14' + note: Site page /domain-specifications/healthcare-operation-policy/access-control, text as shown on the site. Access Controls role table. +- url: https://hcxsbx.abdm.gov.in/#/introduction-NHCX/guidlines-for-participant-onboarding + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/introduction-NHCX__guidlines-for-participant-onboarding.md + hash: sha256:58aaa762f2a04565e2060658b0eda95e3cac4cbb0819b6d865f04cf53066680d + fetched: '2026-09-14' + note: Site page /introduction-NHCX/guidlines-for-participant-onboarding, text as shown on the site. Deboarding scenarios. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, Validation for De-Linking. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/registries + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__registries.md + hash: sha256:04bf78739fa0c3807a8a5a49d8c3e004f8aba664f524d0344d7fc44c3b2baf42 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/registries, text as shown on the site. Participating Organisations/Systems Registry, roles attribute. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 3, Q9 correct Role and Registry mapping. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error, 'No user role found' row. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-roles + - nhcx.concept.policy-linking + - nhcx.concept.beneficiary-consent + - nhcx.concept.audit-and-non-repudiation + - nhcx.concept.grievance-redressal + - nhcx.concept.session-token + endpoints: + - nhcx.endpoint.search-submit + - nhcx.endpoint.status + flows: + - nhcx.flow.claim-search + - nhcx.flow.status-check + glossary: + - nhcx.glossary.irdai + - nhcx.glossary.payer + - nhcx.glossary.provider +--- + +# Who may call what: the NHCX access control matrix + +## In plain words + +Not every participant may send every message. A hospital may submit claims but not payment notices. A payer may send payment notices but not claims. A regulator may search claims but not submit them. + +These rules follow from each participant's registered role. NHCX and the payers check them on every call. + +## Before you start + +Read [participant roles](./participant-roles.md). + +## What happens + +### The matrix, version 1 + +| Role | May send | May receive | May search | +|---|---|---|---| +| `provider` | Eligibility, preauthorisation and claim requests; payment acknowledgements | Their responses; payment notices | Status of preauthorisations and claims it sent | +| `payer`, `agency.tpa` | Responses to eligibility, preauthorisation and claim; payment notices | Those requests; payment acknowledgements | Payment confirmation for notices it sent | +| `agency.regulator` | Claim searches | Search results | Claims, forwarded by NHCX to all payers | +| `research` | Eligibility responses | Eligibility requests | Preauthorisations and claims, aggregate and anonymised only | +| `member.isnp` | As research | As research | As research, plus individual claims with the beneficiary's consent | +| `agency.sponsor` | As a payer | As a payer | As a payer | +| Other NHCX instances | As the use case needs | As the use case needs | Never the payload | + +A TPA acts exactly like a payer in version 1. A scheme sponsor, such as the owner of a government scheme, gets payer-level access. + +### How the rules are enforced + +```mermaid +graph LR + T["Session token
identifies the client"] --> X["NHCX"] + RG[("Registry
roles per participant")] --> X + X -->|allowed| P["Recipient"] + P -->|checks the sender's role| OK["Processes"] +``` + +- Your session token identifies your client. NHCX compares it with the participant that client registered. +- The registry records your role. NHCX and payers read it. +- Some actions are tied to one participant. Only the participant named as `payerid` or `processingid` on a policy link may de-link it. + +### Losing access + +A participant can be removed. A regulator may suspend a provider for fraud, or a payer or TPA. NHCX may remove a participant for serious policy breaches, hacking attempts, or traffic that harms the exchange. A participant may also leave on its own. Removal that is not voluntary comes with warnings, and the participant can appeal through [grievance redressal](./grievance-redressal.md). + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A research body asks NHCX for a named patient's claim history. What does its role allow it to see? +2. Your hospital system tries to search claims raised by another hospital. What does the matrix allow? + +## When it goes wrong + +**Role and registry type do not match.** A wrong mapping at creation leads to refused calls and wrong routing later. + +**No role for the sender.** A payer refuses a sender with no role with the message "No user role found/associated for sender code". + +**De-linking with the wrong credentials.** The token must come from the client that created the `payerid` or `processingid` participant. + +**Individual data without consent.** An insurance self network platform may query an individual's claims only with that person's consent. See [beneficiary consent](./beneficiary-consent.md). diff --git a/catalogue/nhcx/concepts/audit-and-non-repudiation.md b/catalogue/nhcx/concepts/audit-and-non-repudiation.md new file mode 100644 index 000000000..c374e8438 --- /dev/null +++ b/catalogue/nhcx/concepts/audit-and-non-repudiation.md @@ -0,0 +1,130 @@ +--- +id: nhcx.concept.audit-and-non-repudiation +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Audit logging and non-repudiation +summary: >- + The exchange logs the readable envelope of every call and never the sealed claim, + while the sealing itself proves a message was not altered, and each participant + keeps its own records of what it sent and received. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/data-security-and-privacy/audit-and-reporting + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__audit-and-reporting.md + hash: sha256:3805b33513ec0863294014053849d921b6fc4093d1cd0356a5e10b9eb54ef6c6 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/data-security-and-privacy/audit-and-reporting, text as shown on the site. Audit and Reporting. +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications/healthcare-operation-policy/guidelines-event-audits + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__healthcare-operation-policy__guidelines-event-audits.md + hash: sha256:2ad75de1a412e4f39b1a922a0d90fa8f7c76770ea55a42cb4b308d3ba534a9c7 + fetched: '2026-09-14' + note: Site page /domain-specifications/healthcare-operation-policy/guidelines-event-audits, text as shown on the site. Guidelines for Event Audits. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__message-security-and-integrity.md + hash: sha256:3768fd89932e4081c9e03a8695619bcaf70c641e28bb55a77eec090bb926eeb3 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity, text as shown on the site. Message Encryption and Decryption steps. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/healthclaims-exchange-protocol + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__healthclaims-exchange-protocol.md + hash: sha256:ff4b3aa02f2aa61e2b29e50699fe16bee82c3684908bc2be0815c07b97a83371 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/healthclaims-exchange-protocol, text as shown on the site. Message Structure, Signatures. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section on Payment Notice, UTR note. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Page 16, Insurance Plan technical guidelines. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Section 26 Cyclic Procedure, Q10. +verified: + status: unverified +related: + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.access-control + - nhcx.concept.beneficiary-consent + - nhcx.concept.what-nhcx-is + - nhcx.concept.insurance-plan + - nhcx.concept.protocol-headers + glossary: + - nhcx.glossary.protected-header + - nhcx.glossary.jwe +--- + +# Audit logging and non-repudiation + +## In plain words + +Claims involve money and health data, so every party must be able to show later what happened. NHCX keeps a record of every call it receives. It records only what it can read: the envelope, never the sealed claim. + +The sealing does the rest. A message cannot be changed without breaking it, so a received message is provably the one that was sent. + +## Before you start + +Read [the JWE envelope](./jwe-envelope.md). + +## What happens + +### What NHCX records + +For every call it receives, NHCX logs: + +- the protocol and domain headers, +- the signature and encryption algorithm details, +- the sender and the recipient, +- the result of signature verification. + +It cannot log the payload, because it cannot open it. + +Each NHCX instance publishes the audit reports it offers for payers, providers, beneficiaries, regulators and observers. It publishes an archival policy for how long logs are kept, and it can limit how much each log holds. Participants can query the audit records about their own transactions through an API. Method and path for that API are not yet published. + +### Why a message cannot be denied + +```mermaid +graph LR + H["Protected header"] --> AE["AES-GCM
authenticated encryption"] + P["FHIR bundle"] --> AE + AE --> TAG["Authentication tag"] + TAG -->|any change breaks it| R["Recipient rejects"] +``` + +The authentication tag covers the protected header and the payload together. A changed header or payload fails the tag, and the recipient must reject it. So NHCX adds no separate signature to a message. + +### The event audit rules + +Every event in a claim, such as a claim created, forwarded, queried, authorised or paid, is to be logged and signed by the systems involved. Logs are append only and never edited. They are kept for the period the law sets, and the audit trail is open to the beneficiary it concerns. + +### What your system should keep + +| Record | Why | +|---|---| +| Every envelope you sent and received, with its identifiers and your 202 | To prove delivery and answer a dispute | +| The insurance plan version each preauthorisation and claim used | A rate dispute turns on it | +| The UTR from each payment notice | Reconciliation and payment disputes | +| Biometric capture times for each cycle of a cyclic treatment | The payer checks them against the claim | + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A regulator asks NHCX for the diagnosis on a disputed claim. What can NHCX's audit log show, and who holds the diagnosis? +2. A payer says your preauthorisation arrived with a different amount. How does the envelope itself settle whether it was changed on the way? + +## When it goes wrong + +**Logs that can be edited.** Audit logs must be append only. A log you can rewrite proves nothing. + +**No record of the plan version.** Without it, a claim priced from an older tariff cannot be defended. + +**Discarded payment references.** Keep the UTR from every payment notice. It is the only link to the bank transfer. + +**Relying on NHCX to hold the payload.** NHCX never sees it. Keep your own copies of what you sent and received. diff --git a/catalogue/nhcx/concepts/beneficiary-consent.md b/catalogue/nhcx/concepts/beneficiary-consent.md new file mode 100644 index 000000000..0d6902e64 --- /dev/null +++ b/catalogue/nhcx/concepts/beneficiary-consent.md @@ -0,0 +1,138 @@ +--- +id: nhcx.concept.beneficiary-consent +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Beneficiary consent and data rights +summary: >- + The patient's data stays sealed from the exchange, research sees only aggregates, + individual data needs the patient's consent, and the patient must agree before + an app subscribes to their claim updates. +sources: +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications/healthcare-operation-policy/access-control + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__healthcare-operation-policy__access-control.md + hash: sha256:7c3d7b2cf396a9daaca76ade1c059a8d358d0686b7b7e041e96c5f7f239dae57 + fetched: '2026-09-14' + note: Site page /domain-specifications/healthcare-operation-policy/access-control, text as shown on the site. Access Controls, research and member.isnp rows. +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications/healthcare-operation-policy/guidlines-beneficiary + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__healthcare-operation-policy__guidlines-beneficiary.md + hash: sha256:3eee6ea210a8711f953221c91f172513d9b0dd6a33c70367833d2755443fdb08 + fetched: '2026-09-14' + note: Site page /domain-specifications/healthcare-operation-policy/guidlines-beneficiary, text as shown on the site. Guidelines for Beneficiary Authentication. +- url: https://hcxsbx.abdm.gov.in/images/9f1e6b545a693d38a704.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication Implementation Steps.docx + hash: sha256:fac8b14bfe8d518c0e651740537b9441c501d3cf2ab0f0482a07ab9f417e43a9 + fetched: '2026-09-14' + note: Biometric Authentication Implementation Steps, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. Handle Exemption and Biometric Authentication rows. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Page 5 section 1.2 and page 19 biometric table. +- url: https://hcxsbx.abdm.gov.in/images/01db86335b7c226eb745.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Notification Integration.docx + hash: sha256:05908862c103522fac0dbb482f8eb6a0f8536fc12b1ae3bdb0e98615f30812aa + fetched: '2026-09-14' + note: NHCX Notification Integration, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. Section 7.3 Privacy. +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications/healthcare-operation-policy/guidelines-event-audits + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__healthcare-operation-policy__guidelines-event-audits.md + hash: sha256:2ad75de1a412e4f39b1a922a0d90fa8f7c76770ea55a42cb4b308d3ba534a9c7 + fetched: '2026-09-14' + note: Site page /domain-specifications/healthcare-operation-policy/guidelines-event-audits, text as shown on the site. Guidelines for Event Audits. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Policy Linking Process. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error, PAYR-1256 message. +verified: + status: unverified +related: + concepts: + - nhcx.concept.biometric-authentication + - nhcx.concept.notifications + - nhcx.concept.access-control + - nhcx.concept.audit-and-non-repudiation + - nhcx.concept.policy-linking + - nhcx.concept.jwe-envelope + glossary: + - shared.glossary.consent-manager + - shared.glossary.abha + - shared.glossary.kyc + - shared.glossary.otp + errors: + - nhcx.error.payr-1256 + - nhcx.error.payr-1363 +--- + +# Beneficiary consent and data rights + +## In plain words + +A claim carries a patient's diagnosis, treatment and money. The exchange is built so that this data reaches only the parties that need it. + +Some protections are technical: the exchange cannot read the claim at all. Others are rules about consent: some parties may see a patient's data only if the patient agrees. And the patient must prove who they are before a claim starts. + +## Before you start + +Read [access control](./access-control.md). + +## What happens + +### Where the patient's data can go + +| Who | What they may see | +|---|---| +| The hospital and the payer on the claim | The full claim, sealed for each other | +| NHCX | The envelope only, never the payload | +| Research bodies | Aggregate and anonymised data only | +| Insurance self network platforms | Individual claims only with the patient's consent | +| The patient | The audit trail of events on their claims | + +An insurance self network platform submits the patient's consent in the domain header of its request. The consent flow works with the existing [consent manager](../../shared/glossary/consent-manager.md) infrastructure. + +### Consent before notifications + +A patient app must get the patient's explicit consent before it subscribes to their claim updates. It must show the subscription status and let the patient turn it off. See [notifications](./notifications.md). + +### Proving the patient is present + +```mermaid +graph TD + P["Patient at the hospital"] --> K["Aadhaar eKYC"] + P --> A["Aadhaar OTP or biometric"] + A --> T["Token carried into preauth and claim"] + P --> X["Biometric not possible"] + X --> E["Exemption consent document
signed by patient and hospital"] + E --> QR["Authentication Consent Questionnaire
answered in the bundle"] +``` + +A provider verifies the patient with Aadhaar eKYC, or with Aadhaar [OTP](../../shared/glossary/otp.md) or biometric authentication. For PMJAY, biometric presence is required at registration, preauthorisation and discharge. See [biometric authentication](./biometric-authentication.md). + +When biometric authentication is not possible, the hospital obtains an Aadhaar exemption consent document signed by the patient and a hospital representative. It stores the document, links it to the patient's record, and answers the Authentication Consent Questionnaire in the bundle. + +### Linking the patient's policy + +A payer links a patient's [ABHA](../../shared/glossary/abha.md) to the policies the patient holds, so hospitals can find their cover. Only the payer or its TPA can change that link. See [policy linking](./policy-linking.md). + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A patient cannot give a fingerprint after an accident. What must the hospital obtain and store, and what goes into the preauthorisation instead of the token? +2. A research body wants to study claim delays at one hospital. What data may it receive? + +## When it goes wrong + +**No authentication and no consent questionnaire.** The PMJAY payer refuses the preauthorisation with [PAYR-1256](../errors/payr-1256.md) and the claim with [PAYR-1363](../errors/payr-1363.md). + +**Subscribing without consent.** A patient app must ask first and must let the patient see and switch off the subscription. + +**Exemption without the signed document.** The questionnaire answer relies on a document signed by both the patient and the hospital. Keep it linked to the patient's record. + +**Individual data sent to a research body.** Research access is aggregate and anonymised only. diff --git a/catalogue/nhcx/concepts/biometric-authentication.md b/catalogue/nhcx/concepts/biometric-authentication.md new file mode 100644 index 000000000..a09978393 --- /dev/null +++ b/catalogue/nhcx/concepts/biometric-authentication.md @@ -0,0 +1,134 @@ +--- +id: nhcx.concept.biometric-authentication +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Biometric authentication of the beneficiary +summary: >- + Under the government health assurance scheme a hospital proves the patient is + present by fingerprint, iris or face scan, and carries the resulting token or + a signed exemption into preauthorisation and claim. +sources: +- url: https://hcxsbx.abdm.gov.in/images/9f1e6b545a693d38a704.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication Implementation Steps.docx + hash: sha256:fac8b14bfe8d518c0e651740537b9441c501d3cf2ab0f0482a07ab9f417e43a9 + fetched: '2026-09-14' + note: 'Biometric Authentication Implementation Steps, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. Whole document: policy table, Fingerprint/IRIS APIs, Face-Auth API curl.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Section 26 Cyclic Procedure Q2-Q13; Section 27 Q4; Q10 K-547. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 8.2 Biometric Authentication, pages 18-19. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error, PAYR-1256 and PAYR-1366 messages. +verified: + status: unverified +related: + flows: + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.biometric-face + endpoints: + - nhcx.endpoint.abha-biometric-auth-init + - nhcx.endpoint.abha-biometric-auth-verify + - nhcx.endpoint.abha-biometric-auth-refresh-token + - nhcx.endpoint.abha-biometric-faceauth-init + - nhcx.endpoint.abha-biometric-capture-pid + - nhcx.endpoint.abha-biometric-v2-auth-verify + decisions: + - nhcx.decision.biometric-modality + errors: + - nhcx.error.payr-1256 + - nhcx.error.payr-1271 + - nhcx.error.payr-1272 + - nhcx.error.payr-1363 + - nhcx.error.payr-1364 + - nhcx.error.payr-1366 + - nhcx.error.payr-1367 + - nhcx.error.payr-1369 + glossary: + - nhcx.glossary.rd-service + - nhcx.glossary.pid-block + - shared.glossary.abha-number + - shared.glossary.auth-modes + - shared.glossary.kyc + concepts: + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.beneficiary-consent +--- + +# Biometric authentication of the beneficiary + +## In plain words + +PMJAY pays only for patients who were really at the hospital. So the hospital proves it: the patient places a finger on a scanner, looks into an iris camera, or has their face scanned on a phone. The scan is checked against Aadhaar through the ABHA biometric service. + +A successful check gives the hospital a user token. The hospital carries that token, or a signed exemption, into the preauthorisation and the claim. + +## Before you start + +The patient's [ABHA number](../../shared/glossary/abha-number.md) must be linked to their PMJAY card. For patients without that link, the scheme's other [KYC](../../shared/glossary/kyc.md) procedures apply. Fingerprint and iris need a registered device with its [RD service](../glossary/rd-service.md) on the hospital computer. + +## What happens + +### When to authenticate + +| Moment | `process` header | +|---|---| +| Patient registration and preauthorisation | `Preauth` | +| Every cycle of a cyclic treatment, such as dialysis | `Discharge` | +| Discharge, before the claim | `Discharge` | + +Biometric authentication is not an NHCX use case call. The hospital system calls the ABHA biometric service directly, sending the payer's participant code in `payerid`. + +### The three modalities + +| Modality | `authMode` | `scope` | Evidence sent | +|---|---|---|---| +| Fingerprint | `FINGERPRINT` | `abha-login`, `aadhaar-bio-verify` | The device's [PID block](../glossary/pid-block.md) in `fingerPrintAuthPid` | +| Iris | `IRIS` | `abha-login`, `aadhaar-iris-verify` | The PID block in `irisAuthPid` | +| Face | `FACE_AUTH` | from the face auth init call | A phone scan through the ABHA app, then the Aadhaar number, RSA encrypted | + +Fingerprint and iris take two calls: init returns a `txnId`, and verify sends the PID block with it. Face takes four steps: init, show a QR code for the patient's phone, poll `capture/pid` until it returns `COMPLETE`, then verify. Which to use is covered in [choosing a modality](../decisions/biometric-modality.md). A PMJAY integration must support all three. + +### The tokens + +```mermaid +graph LR + S["Successful scan"] --> UT["User token
30 minutes"] + S --> RT["Refresh token
15 days"] + RT -->|refresh call| UT2["New user token
+ new refresh token"] +``` + +Refresh at least once every 10 days to keep a long stay covered without scanning again. A cyclic treatment cycle is the exception: every cycle needs a live scan, never a refresh, and two cycles of the same procedure need 24 hours between them. + +The request header that carries the user token on preauthorisation and claim is not yet published. + +### When a scan is impossible + +For trauma, amputations or unreadable biometrics, the hospital obtains an Aadhaar exemption consent document signed by the patient and a hospital representative. It stores the document, and answers the Authentication Consent Questionnaire from the insurance plan in the preauthorisation or claim instead of sending a token. Cyclic treatments cannot use this route. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A dialysis patient came in yesterday at 18:00. Can you scan them for the next cycle at 09:00 today? Can you use the refresh token instead? +2. A patient's fingerprints cannot be read at discharge. What does your claim carry in place of the discharge token? + +## When it goes wrong + +**Neither token nor questionnaire.** The PMJAY payer refuses a preauthorisation with [PAYR-1256](../errors/payr-1256.md) and a claim with [PAYR-1363](../errors/payr-1363.md). A questionnaire with a blank link id fails with [PAYR-1271](../errors/payr-1271.md) or [PAYR-1364](../errors/payr-1364.md). + +**Invalid or expired user token.** [PAYR-1272](../errors/payr-1272.md) at preauthorisation, [PAYR-1366](../errors/payr-1366.md) at claim. Scan again. + +**Missing cycle scans.** A cycle with no scan on its date fails with [PAYR-1367](../errors/payr-1367.md). Two scans for one date fail with [PAYR-1369](../errors/payr-1369.md). + +**Device error K-547 on fingerprint.** Set the `lr` attribute to `Y` when computing the WADH value. diff --git a/catalogue/nhcx/concepts/claim-cycle.md b/catalogue/nhcx/concepts/claim-cycle.md new file mode 100644 index 000000000..9f4dfe95d --- /dev/null +++ b/catalogue/nhcx/concepts/claim-cycle.md @@ -0,0 +1,149 @@ +--- +id: nhcx.concept.claim-cycle +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: The claim cycle from eligibility to payment +summary: >- + A cashless claim moves through eligibility, insurance plan, preauthorisation, + claim, payment notice and, if needed, reprocess, and each stage is its own request + and response on the exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. API Structure table. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheets Value sets, Preauth, Claim, Payment, Task, InsurancePlan. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 8.4 page 32 and 8.5 page 35 functional points. +- url: https://hcxsbx.abdm.gov.in/images/13093b5f9b88fe826123.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Insurance Plan IG.docx + hash: sha256:e9c6c82b6d67fd8476d6d19a5961419beb04e3c0613533453ed1e16e2a569cc1 + fetched: '2026-09-14' + note: Insurance Plan IG, row 25 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Task request table. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 8.1 and Payment Notice section. +- url: https://hcxsbx.abdm.gov.in/images/2c3fbb4e6b09f0834f69.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Implementation Guide for Adoption of FHIR in ABDM and NHCX.pdf + hash: sha256:549377c9c26b1bd23decac3a1b9e5ebedfdc8e0fe99e53ef733859b188f51366 + fetched: '2026-09-14' + note: Implementation Guide for Adoption of FHIR in ABDM and NHCX, row 14 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. API table rows 5-6. +verified: + status: unverified +related: + concepts: + - nhcx.concept.coverage-eligibility-purposes + - nhcx.concept.insurance-plan + - nhcx.concept.queries-and-communication + - nhcx.concept.reprocess-and-cancel + - nhcx.concept.workflow-codes + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.policy-linking + - nhcx.concept.fhir-in-nhcx + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.insurance-plan-request + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.preauth-cancel + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + - nhcx.flow.claim-reprocess + - nhcx.flow.payment-notice + - nhcx.flow.status-check + - nhcx.flow.claim-search + - nhcx.flow.predetermination + glossary: + - nhcx.glossary.coverage-eligibility + - nhcx.glossary.preauthorisation + - nhcx.glossary.enhancement + - nhcx.glossary.predetermination + - nhcx.glossary.claim + - nhcx.glossary.payment-notice +--- + +# The claim cycle from eligibility to payment + +## In plain words + +A cashless hospital stay produces a series of exchanges between the hospital and the payer. First the hospital checks the patient's cover. Then it asks the payer to approve the treatment. After discharge it submits the claim. Finally the payer tells the hospital the money has been paid. + +Each of those steps is a separate request and response on NHCX. Together they are the claim cycle. + +## Before you start + +Read [the four message legs](./four-message-legs.md). Every stage below follows that pattern. + +## What happens + +```mermaid +graph TD + L["Policy linked to ABHA
get policies"] --> E["Coverage eligibility
/v1/coverageeligibility/check"] + IP["Insurance plan
/v1/insuranceplan/request"] --> PA + E --> PA["Preauthorisation
/v1/preauth/submit"] + PA -->|queried| QP["Query answered"] + QP --> PA + PA -->|approved| T["Treatment"] + T -->|more needed| EN["Enhancement
/v1/preauth/submit"] + EN --> T + PA -->|not going ahead| CX["Cancel
/v1/task/submit"] + T --> C["Claim after discharge
/v1/claim/submit"] + C -->|queried| QC["Query answered"] + QC --> C + C -->|approved| PN["Payment notice
payer sends /v1/paymentnotice/request"] + PN --> ACK["Provider acknowledges"] + C -->|rejected| RP["Reprocess
/v1/task/submit"] +``` + +| Stage | Who starts | Request path | Bundle | +|---|---|---|---| +| [Coverage eligibility](./coverage-eligibility-purposes.md) | Provider | `/v1/coverageeligibility/check` | CoverageEligibilityRequest | +| [Insurance plan](./insurance-plan.md) | Provider | `/v1/insuranceplan/request` | Task with code `poll` | +| Predetermination | Provider | `/v1/predetermination/submit` | Claim with use `predetermination` | +| Preauthorisation | Provider | `/v1/preauth/submit` | Claim with use `preauthorization` | +| Enhancement | Provider | `/v1/preauth/submit` | Claim, resubmitted with added items | +| Query | Payer | See [queries](./queries-and-communication.md) | ClaimResponse or CommunicationRequest | +| Claim | Provider | `/v1/claim/submit` | Claim with use `claim` | +| Payment notice | Payer | `/v1/paymentnotice/request` | Task with PaymentNotice | +| Reprocess or cancel | Provider | `/v1/task/submit` | Task | +| Status and search | Provider or regulator | `/v1/status`, `/v1/search/submit` | Protocol headers, Task | + +Every request path has an `on_` answer path, as described in [the four message legs](./four-message-legs.md). The [workflow id](./workflow-codes.md) on each message names the stage. + +### Rules that shape the cycle + +- Preauthorisation comes before planned treatment. Under PMJAY it cannot be raised more than one day before admission. +- An enhancement asks for more on an approved preauthorisation. It goes to the same path with workflow id `13`. +- The claim follows discharge. Under PMJAY, discharge details travel inside the claim, and a claim cannot be cancelled. +- A payment notice follows claim approval. The provider acknowledges it, which closes the cycle. +- A rejected or short-paid claim can be sent for reprocess. See [reprocess and cancel](./reprocess-and-cancel.md). + +## How you know it worked + +You have understood this when you can answer both of these. + +1. Your patient needs a further procedure during an approved stay. Which path do you call, with which workflow id, and what bundle? +2. The payer approved the claim. What message does the payer send next, and what must your system send back? + +## When it goes wrong + +**Claim before preauthorisation.** A standard payer refuses it with [PAYR-1010](../errors/payr-1010.md), preauthorisation required but not obtained. + +**Claiming more than was approved.** A standard payer refuses it with [PAYR-1012](../errors/payr-1012.md). + +**Answering a query with a fresh request.** A query is part of the same case. Answer it with the query response workflow id. See [queries and communication](./queries-and-communication.md). + +**Skipping the payment acknowledgement.** The cycle stays open on the payer's side until you acknowledge. diff --git a/catalogue/nhcx/concepts/coverage-eligibility-purposes.md b/catalogue/nhcx/concepts/coverage-eligibility-purposes.md new file mode 100644 index 000000000..c383151f5 --- /dev/null +++ b/catalogue/nhcx/concepts/coverage-eligibility-purposes.md @@ -0,0 +1,124 @@ +--- +id: nhcx.concept.coverage-eligibility-purposes +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: The four coverage eligibility purposes +summary: >- + A coverage eligibility request asks one of four questions, discovery, validation, + benefits or auth-requirements, and the purpose decides what you must send and + what comes back. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 7.3 to 7.6 Coverage Eligibility. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 8.3.1 to 8.3.4, page 32 functional points. +- url: https://hcxsbx.abdm.gov.in/images/13093b5f9b88fe826123.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Insurance Plan IG.docx + hash: sha256:e9c6c82b6d67fd8476d6d19a5961419beb04e3c0613533453ed1e16e2a569cc1 + fetched: '2026-09-14' + note: Insurance Plan IG, row 25 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. CoverageEligibility request and response tables. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.coverageeligibility-on-check + callbacks: + - nhcx.callback.coverageeligibility-check + - nhcx.callback.coverageeligibility-on-check + decisions: + - nhcx.decision.eligibility-purpose + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + errors: + - nhcx.error.payr-1032 + - nhcx.error.payr-1033 + - nhcx.error.payr-1101 + - nhcx.error.payr-1005 + - nhcx.error.payr-1006 + - nhcx.error.payr-1007 + - nhcx.error.payr-1123 + concepts: + - nhcx.concept.insurance-plan + - nhcx.concept.policy-linking + - nhcx.concept.claim-cycle + glossary: + - nhcx.glossary.coverage-eligibility + - shared.glossary.abha-number + tests: + - nhcx.test.provider-uc-05 + - nhcx.test.payer-uc-07 +--- + +# The four coverage eligibility purposes + +## In plain words + +Before treatment, a hospital asks the payer about the patient's cover. That request is a [coverage eligibility](../glossary/coverage-eligibility.md) check. + +The check always asks one question, set in `CoverageEligibilityRequest.purpose`. Is there a policy at all? Is it in force? What does it cover? Does this treatment need approval first? The purpose you choose decides what you must send and what you get back. + +## Before you start + +You need the patient's policy code, or at least their beneficiary ID. See [policy linking](./policy-linking.md). For a PMJAY patient, fetch the [insurance plan](./insurance-plan.md) first, so you know the package codes. + +## What happens + +| Purpose | The question | Procedure or package items | What comes back | +|---|---|---|---| +| `discovery` | Does this beneficiary have an active policy? | Not used | The active policy code | +| `validation` | Is the policy in force today? | Not used | `insurance.inforce`, used and available amounts | +| `benefits` | What cover and limits apply to these items? | Required | Benefit lines with allowed amounts, and exclusions | +| `auth-requirements` | Does this treatment need preauthorisation? | Required | `authorizationRequired`, covered amount, required documents and questionnaires | + +Every purpose needs the beneficiary ID, the coverage or policy code, the payer and the provider. For a PMJAY patient the beneficiary ID is the PMJAY member ID, the [ABHA number](../../shared/glossary/abha-number.md), or both. + +```mermaid +graph LR + GP["Get policies"] -->|found| V["validation"] + GP -->|nothing found| D["discovery"] + D -->|policy code| V + V --> AR["auth-requirements
for the planned packages"] + AR -->|authorizationRequired true| PA["Preauthorisation"] + V -.-> B["benefits
for cover and limits"] +``` + +### Reading the response + +- `outcome` is `complete` when the payer processed the check. +- `disposition` is a sentence such as "Policy is currently in-force". +- `insurance[].inforce` is `true` when the policy is active. +- For each item, `excluded` says whether it is covered and `authorizationRequired` whether it needs approval first. +- `authorizationSupporting` lists the document codes the preauthorisation must carry, such as `MAND0409`. + +### When to check again + +Run an eligibility check whenever a new or additional treatment is planned, before you submit or enhance a preauthorisation. The choice between purposes is covered in [which eligibility purpose](../decisions/eligibility-purpose.md). + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A patient arrives and the get policies call returns nothing. Which purpose do you send first, and what do you do with its answer? +2. You plan package `MG004A` for a patient. Which purpose tells you whether you need preauthorisation, and which response fields answer it? + +## When it goes wrong + +**Purpose not accepted.** The PMJAY payer refuses an unknown purpose with [PAYR-1101](../errors/payr-1101.md). Its structure checks use [PAYR-1032](../errors/payr-1032.md) for "Invalid purpose received". + +**Items missing for benefits or auth-requirements.** The PMJAY payer refuses the request with [PAYR-1033](../errors/payr-1033.md), no items received for the purpose. + +**Not covered, no policy, expired.** A standard payer answers with [PAYR-1005](../errors/payr-1005.md), [PAYR-1006](../errors/payr-1006.md) or [PAYR-1007](../errors/payr-1007.md). These codes carry other meanings from the PMJAY payer, so read the message text. See [error code spaces](./error-code-spaces.md). + +**Beneficiary not covered by this payer.** The PMJAY payer answers [PAYR-1123](../errors/payr-1123.md). diff --git a/catalogue/nhcx/concepts/encryption-certificate.md b/catalogue/nhcx/concepts/encryption-certificate.md new file mode 100644 index 000000000..22c86ee9b --- /dev/null +++ b/catalogue/nhcx/concepts/encryption-certificate.md @@ -0,0 +1,120 @@ +--- +id: nhcx.concept.encryption-certificate +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Your encryption certificate and the recipient's +summary: >- + Each participant publishes a public certificate so others can seal messages for + it, and keeps the matching private key to open what it receives. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ec361a6c3e90e766d227.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Steps to generate encryption Certificate.pdf + hash: sha256:94605e935f05ebb49e24dee50787cb4f3f1c401983a9616a5aaabdbc302f664b + fetched: '2026-09-14' + note: Steps to generate encryption Certificate, row 20 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Steps 1-3. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 2.4 and 3.3 Certificate Fetch. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__message-security-and-integrity.md + hash: sha256:3768fd89932e4081c9e03a8695619bcaf70c641e28bb55a77eec090bb926eeb3 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity, text as shown on the site. Message Encryption steps and key rotation note. +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Step 3 and Participant Certificate Updation, page 4. +verified: + status: unverified +related: + flows: + - nhcx.flow.generate-and-register-certificate + - nhcx.flow.rotate-certificate + endpoints: + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.v2-update-cert + - nhcx.endpoint.participant-update + - nhcx.endpoint.v2-participant-update + errors: + - nhcx.error.payr-1001 + - nhcx.error.payr-1002 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.participant-registry + - nhcx.concept.participant-code + glossary: + - nhcx.glossary.x509-certificate + - nhcx.glossary.jwe + troubleshooting: + - nhcx.troubleshooting.recipient-cannot-decrypt + tests: + - nhcx.test.provider-uc-03 + - nhcx.test.payer-uc-05 +--- + +# Your encryption certificate and the recipient's + +## In plain words + +Every message on NHCX is sealed for one recipient. To seal it, the sender needs the recipient's public key. To open it, the recipient needs its own private key. + +So every participant does two things. It publishes a public [X.509 certificate](../glossary/x509-certificate.md) in the participant registry. It keeps the matching private key secret on its own servers. + +## Before you start + +You need a participant record you can update. See [the participant registry](./participant-registry.md). + +## What happens + +### Two keys in every exchange + +```mermaid +graph LR + S["Sender"] -->|fetch recipient's certificate| RG[("Participant registry")] + S -->|seal with recipient's public key| M["Sealed message"] + M -->|via NHCX| R["Recipient"] + R -->|open with its own private key| B["FHIR bundle"] + R -->|seal response with the sender's public key| M2["Sealed response"] +``` + +Your certificate is how others reach you. The recipient's certificate is how you reach them. A response travels the same way in reverse: the payer seals it with your public key. + +### Your certificate + +- An RSA key pair of 2048 bits. +- A self-signed X.509 certificate made from it, valid for 365 days. +- The PEM certificate, Base64 encoded, sent as the encryption certificate when you update your participant record. + +The steps are in [generate and register a certificate](../flows/generate-and-register-certificate.md). The private key never leaves your system. + +### The recipient's certificate + +You fetch it with `/fetch/certs`, passing the recipient's participant code as `participantid`. The response carries the certificate in `encryption_cert`. The value is either a PEM X.509 certificate or a bare public key, so try X.509 first and fall back to the public key form. + +Cache each fetched certificate for 24 hours. Do not call `/fetch/certs` before every message. + +### Rotation + +Rotate your key pair once a year, and at once if the private key may be compromised. Upload the new certificate to your record. In production the certificate update needs no passcode. Senders that cached your old certificate keep using it until their cache expires, so keep the old private key able to open messages for a day after rotating. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. You are about to send a claim to a payer. Whose certificate seals it, and where does your system get that certificate? +2. You rotated your key pair this morning and a payer's response fails to open. What is the likely cause, and how do you avoid it next time? + +## When it goes wrong + +**The recipient cannot open your message.** It reports [PAYR-1001](../errors/payr-1001.md). Fetch the recipient's certificate again from `/fetch/certs` and seal with that. See [the recipient cannot decrypt](../troubleshooting/recipient-cannot-decrypt.md). + +**The payer cannot seal its response to you.** It reports [PAYR-1002](../errors/payr-1002.md). Your certificate in the registry is missing, invalid or out of date. Update it. + +**Certificate not Base64 encoded.** The update is refused. Encode the whole PEM file, header and footer lines included. + +**Expired certificate.** A self-signed certificate made with `-days 365` expires after a year. Rotate before it does. diff --git a/catalogue/nhcx/concepts/error-code-spaces.md b/catalogue/nhcx/concepts/error-code-spaces.md new file mode 100644 index 000000000..b4a6b5db1 --- /dev/null +++ b/catalogue/nhcx/concepts/error-code-spaces.md @@ -0,0 +1,197 @@ +--- +id: nhcx.concept.error-code-spaces +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Error code spaces: NHCX codes, standard payer codes and reference payer + codes' +summary: >- + Errors on the exchange come from three sources, the exchange itself, a standard + payer, and the government scheme's payer, and eighteen payer codes mean different + things depending on which payer sent them. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheets NHCX Error Codes, Payer Error Codes, Bridge Error, Coverage, Preauth, Claim, Insurance Plan. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Error Handling section. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1 error scenario and page 2 ProtocolResponse. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Page 26 response forms. +verified: + status: unverified +related: + concepts: + - nhcx.concept.retries-and-expiry + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.pmjay-on-nhcx + callbacks: + - nhcx.callback.error + flows: + - nhcx.flow.report-a-processing-error + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1002 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1004 + - nhcx.error.nhcx-1005 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1007 + - nhcx.error.nhcx-1008 + - nhcx.error.nhcx-1009 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.nhcx-1013 + - nhcx.error.nhcx-1014 + - nhcx.error.nhcx-1015 + - nhcx.error.nhcx-1016 + - nhcx.error.nhcx-1017 + - nhcx.error.nhcx-1018 + - nhcx.error.payr-1001 + - nhcx.error.payr-1002 + - nhcx.error.payr-1003 + - nhcx.error.payr-1004 + - nhcx.error.payr-1005 + - nhcx.error.payr-1006 + - nhcx.error.payr-1007 + - nhcx.error.payr-1008 + - nhcx.error.payr-1009 + - nhcx.error.payr-1010 + - nhcx.error.payr-1011 + - nhcx.error.payr-1012 + - nhcx.error.payr-1013 + - nhcx.error.payr-1014 + - nhcx.error.payr-1015 + - nhcx.error.payr-1016 + - nhcx.error.payr-1017 + - nhcx.error.payr-1018 + - nhcx.error.payr-1019 + - nhcx.error.payr-1020 + - nhcx.error.payr-1101 + - nhcx.error.payr-1201 + - nhcx.error.payr-1301 + - nhcx.error.payr-1401 + - nhcx.error.payr-1501 + - nhcx.error.err-pyr-clm-007 +--- + +# Error code spaces: NHCX codes, standard payer codes and reference payer codes + +## In plain words + +An error on NHCX can come from three places. The exchange refuses a bad envelope. A payer refuses a request it cannot accept. And the PMJAY payer has its own, much longer catalogue. + +Each source has its own codes. The catch: some payer codes are shared between the standard list and the PMJAY catalogue with different meanings. So a code alone does not always tell you what went wrong. + +## Before you start + +Read [the JWE envelope](./jwe-envelope.md) and [retries and expiry](./retries-and-expiry.md). Your system needs a `/v1/error` endpoint. + +## What happens + +### The three spaces + +| Space | Codes | Sent by | Arrives | +|---|---|---|---| +| Gateway | `NHCX-401`, `NHCX-1001` to `NHCX-1018` | NHCX itself | In the HTTP response to your call, or later on your callback or `/v1/error` | +| Standard payer | `PAYR-1001` to `PAYR-1020` | Any payer following the published standard | In `x-hcx-error_details` of a `ProtocolResponse`, or inside the sealed response | +| PMJAY reference payer | `PAYR-1001` to `PAYR-1520` | The PMJAY payer | The same way | + +```mermaid +graph LR + Y["Your request"] --> X["NHCX"] + X -->|envelope, registry, delivery problem| G["NHCX- code"] + X --> P["Payer"] + P -->|cannot open or validate| PR["ProtocolResponse
x-hcx-error_details"] + P -->|clinical or business problem| SR["Sealed response
error inside the bundle"] +``` + +A payer that cannot decrypt or validate your request answers with a `ProtocolResponse` in the clear, `x-hcx-status` `response.error`, and the code, message and trace in `x-hcx-error_details`. Clinical and business errors go inside the sealed response instead, so NHCX never sees them. + +### Gateway codes + +`NHCX-` codes are about the envelope, the registry and delivery: unregistered sender or receiver, bad headers, duplicate correlation id, unknown status, unreachable receiver. `NHCX-1001` is a transport error. The rest are business errors. + +### Standard payer codes + +| Codes | Meaning | +|---|---| +| `PAYR-1001` to `PAYR-1003` | Transport: cannot decrypt, cannot encrypt, cannot reach NHCX | +| `PAYR-1004` to `PAYR-1020` | Business: provider not registered, beneficiary not covered, policy missing or expired, amounts, preauthorisation, time limits, bank details | + +### PMJAY reference payer bands + +| Band | Where it arises | What it usually means | +|---|---|---| +| `PAYR-10xx` and `PAYR-15xx` | Envelope and bundle structure | An element, id, sequence, type or attachment is missing or malformed | +| `PAYR-11xx` | Coverage eligibility | The policy, the beneficiary or the hospital configuration | +| `PAYR-12xx` | Preauthorisation | Codes, amounts, dates, sequencing and scheme rules | +| `PAYR-13xx` | Claim | The same, checked against the approved preauthorisation | +| `PAYR-14xx` | Insurance plan | Empanelment, policy association, plan configuration | + +The PMJAY catalogue also has messages with no code, and marks `PAYR-1003`, `PAYR-1006` and `PAYR-1007` as deprecated in the structure band. + +### Eighteen codes with two readings + +`PAYR-1001` and `PAYR-1002` mean decryption and encryption failure in both spaces. From `PAYR-1003` to `PAYR-1020`, every code has one meaning from a standard payer and another from the PMJAY payer. + +| Code | Standard payer | PMJAY reference payer | +|---|---|---| +| `PAYR-1003` | Error connecting to NHCX; it will resend | Invalid workflow requested | +| `PAYR-1004` | Provider not registered with the payer for the policy | Received FHIR bundle is malformed | +| `PAYR-1005` | Beneficiary not covered by the policy | Maximum time limit exceeded in receiving the request | +| `PAYR-1006` | Policy does not exist | Invalid name in request | +| `PAYR-1007` | Policy expired | Invalid gender in request | +| `PAYR-1008` | Coverage amount insufficient | Invalid FHIR bundle received | +| `PAYR-1009` | Items not valid or not covered | No identifier for the patient | +| `PAYR-1010` | Preauthorisation required but not obtained | No type for the patient identifier | +| `PAYR-1011` | Package does not support enhancement | No identifier for the claim | +| `PAYR-1012` | Claim above the approved preauthorisation | No type for the claim identifier | +| `PAYR-1013` | No prior approval for the packages | No identifier for the provider organisation | +| `PAYR-1014` | Date of birth after date of service | No type for the provider organisation identifier | +| `PAYR-1015` | Date of service after date of death | No identifier for the payer organisation | +| `PAYR-1016` | Duplicate claim | No type for the payer organisation identifier | +| `PAYR-1017` | Amount calculations wrong | No task code received | +| `PAYR-1018` | Time limit for submission expired | No task reason code received | +| `PAYR-1019` | Additional information not received in time | Invalid sequence in supporting info | +| `PAYR-1020` | No valid bank details for the provider | Invalid category in supporting info | + +### The rule + +Handle a `PAYR` code together with its message text, never by the code alone. Log the code, the message and the trace. Keep a note of which payer sent it: the sender code on the response tells you. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A response arrives with `PAYR-1004` and the message "Received FHIR bundle is malformed". Which reading applies, and what do you fix? +2. Your claim submission gets `NHCX-1003` in the HTTP response. Did the payer ever see the claim? + +## When it goes wrong + +**Switching on the code alone.** A handler that maps `PAYR-1005` to "beneficiary not covered" misleads staff when the PMJAY payer means a stale timestamp. Read the message. + +**Treating a gateway error as a payer decision.** An `NHCX-` code means the exchange stopped the message. Fix the envelope or registration and send again. + +**No `/v1/error` endpoint.** Requests that NHCX drops after its retries are reported there. Without it, a failed claim looks like a slow one. See [report a processing error](../flows/report-a-processing-error.md). + +**Hard coding one list.** New PMJAY codes appear over time. Fall back to showing the payer's message for any code your system does not know. diff --git a/catalogue/nhcx/concepts/fhir-in-nhcx.md b/catalogue/nhcx/concepts/fhir-in-nhcx.md new file mode 100644 index 000000000..c1db0921e --- /dev/null +++ b/catalogue/nhcx/concepts/fhir-in-nhcx.md @@ -0,0 +1,147 @@ +--- +id: nhcx.concept.fhir-in-nhcx +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: FHIR collection bundles and the NHCX claim profiles +summary: >- + Every claim message carries a collection bundle of health data records built to + the national claim profiles, with clinical records attached inside it, and it + must validate before it is sealed. +sources: +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications.md + hash: sha256:56234dd8a55fe4eb9dd852779b22b522b04760c9bec5c263d5e9bc3ac2c6f167 + fetched: '2026-09-14' + note: Site page /domain-specifications, text as shown on the site. Data Structure and Bundle types sections. +- url: https://hcxsbx.abdm.gov.in/images/2c3fbb4e6b09f0834f69.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Implementation Guide for Adoption of FHIR in ABDM and NHCX.pdf + hash: sha256:549377c9c26b1bd23decac3a1b9e5ebedfdc8e0fe99e53ef733859b188f51366 + fetched: '2026-09-14' + note: Implementation Guide for Adoption of FHIR in ABDM and NHCX, row 14 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Bundle structure section and validation steps. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 1.3 Key Principles; identifier types table. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 8.5.0 Structured Data Exchange; page 31 file limits. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error, attachment and HFR rows. +verified: + status: unverified +related: + fhir: + - nhcx.fhir.collection-bundle + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + - nhcx.fhir.insurance-plan-bundle + - nhcx.fhir.preauth-request + - nhcx.fhir.preauth-response + - nhcx.fhir.preauth-enhancement + - nhcx.fhir.preauth-cancel + - nhcx.fhir.query-update + - nhcx.fhir.claim-request + - nhcx.fhir.claim-response + - nhcx.fhir.payment-notice + - nhcx.fhir.task + - nhcx.fhir.terminologies + - nhcx.fhir.validation + - shared.fhir.hl7-validator-recipe + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.claim-cycle + - nhcx.concept.insurance-plan + - nhcx.concept.pmjay-on-nhcx + glossary: + - shared.glossary.fhir + - shared.glossary.nrces + - shared.glossary.hi-type + - shared.glossary.snomed-ct + errors: + - nhcx.error.payr-1004 + - nhcx.error.payr-1008 + - nhcx.error.payr-1043 + - nhcx.error.payr-1044 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# FHIR collection bundles and the NHCX claim profiles + +## In plain words + +The payload inside every sealed NHCX message is a [FHIR](../../shared/glossary/fhir.md) bundle: a set of related records packed together. A claim bundle holds the claim itself, the patient, the hospital, the payer, the policy, the diagnoses and procedures, and the supporting documents. + +The [NRCeS](../../shared/glossary/nrces.md) publishes the profiles these bundles must follow. A bundle that does not follow them is refused by the payer. + +## Before you start + +Read [the claim cycle](./claim-cycle.md), so you know which bundle each stage needs. + +## What happens + +### Collection, not document + +ABDM health records are FHIR bundles of type `document`, headed by a `Composition`. NHCX claim messages are bundles of type `collection`. A collection groups the records one workflow needs, with the main resource first and no bundle-level `Composition`. + +```mermaid +graph TD + B["Bundle, type collection"] --> C["Claim
use preauthorization or claim"] + B --> P["Patient"] + B --> O1["Organization: hospital, HFR ID as NPI"] + B --> O2["Organization: payer"] + B --> CV["Coverage: the policy"] + B --> PR["Practitioner, Procedure, Condition"] + C -->|supportingInfo| DR["DocumentReference
an ABDM health record inside"] +``` + +### The six claim bundles + +| Bundle | Main resource | Used for | +|---|---|---| +| Coverage eligibility request | `CoverageEligibilityRequest` | Eligibility checks | +| Coverage eligibility response | `CoverageEligibilityResponse` | Eligibility answers | +| Claim | `Claim`, with `use` of `predetermination`, `preauthorization` or `claim` | Predetermination, preauthorisation, claim | +| Claim response | `ClaimResponse` | Every decision on a claim bundle | +| Task | `Task` | Communication, payment notice, search, reprocess, insurance plan request | +| Insurance plan | `InsurancePlan` | The payer's plan | + +### Rules every bundle follows + +- Reference resources inside the bundle with `urn:uuid:` references. +- Declare the NRCeS profile of each resource in `meta.profile`. +- Send the hospital's HFR ID in the hospital `Organization` identifier, with type code `NPI`. +- Attach files as Base64. Allowed content types are `application/pdf`, `application/jpg`, `application/jpeg`, `application/png` and `application/fhir+json`. + +### Clinical records inside a claim + +Under PMJAY, clinical records travel as structured ABDM [health information types](../../shared/glossary/hi-type.md). Each record is a FHIR bundle, Base64 encoded into a `DocumentReference`, and referenced from `Claim.supportingInfo` with category `DIA`, `HDS`, `CD` or `INF`. Each document may be up to 2 MB and the whole bundle up to 20 MB. + +### Validate before you seal + +Validate every bundle against the NRCeS profile package, `https://nrces.in/ndhm/fhir/r4/package.tgz`, before encryption. A payer can only report a bad bundle after decrypting it, which costs you a full round trip. The validator command is in [the validator recipe](../../shared/fhir/hl7-validator-recipe.md). + +## How you know it worked + +You have understood this when you can answer both of these. + +1. You copied an ABDM discharge summary bundle and set its type to `collection` to use as a claim. What is still wrong with it? +2. Where in a preauthorisation bundle does a lab report go, and in what form? + +## When it goes wrong + +**Malformed bundle.** The PMJAY payer answers "Received FHIR bundle is malformed" with the validator's details. On the standard payer list the same code, [PAYR-1004](../errors/payr-1004.md), means something else, so read the message. Validate and fix. + +**Unparseable bundle.** The PMJAY payer answers [PAYR-1008](../errors/payr-1008.md) from its structure checks: invalid FHIR bundle received. + +**Dates in the wrong format.** The PMJAY payer refuses dates that do not follow the NRCeS date and date-time formats with [PAYR-1043](../errors/payr-1043.md) and [PAYR-1044](../errors/payr-1044.md). + +**Attachment rejected.** A missing name, a non Base64 value or a content type outside the list above is refused. See [the bundle is rejected](../troubleshooting/bundle-rejected.md). diff --git a/catalogue/nhcx/concepts/four-message-legs.md b/catalogue/nhcx/concepts/four-message-legs.md new file mode 100644 index 000000000..b3c5e3c73 --- /dev/null +++ b/catalogue/nhcx/concepts/four-message-legs.md @@ -0,0 +1,111 @@ +--- +id: nhcx.concept.four-message-legs +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'The four legs of every exchange: request, acknowledgement, callback, acknowledgement' +summary: >- + Every use case completes in four legs, sender to exchange, exchange to receiver, + receiver to exchange and exchange to sender, and each leg is acknowledged at once. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/healthclaims-exchange-protocol + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__healthclaims-exchange-protocol.md + hash: sha256:ff4b3aa02f2aa61e2b29e50699fe16bee82c3684908bc2be0815c07b97a83371 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/healthclaims-exchange-protocol, text as shown on the site. Exchange Protocol, Legs 1-4 and Relays. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Flow and API Structure table. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 8.5 claim table, APIs to be called and implemented. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1 Acceptance scenario. +verified: + status: unverified +related: + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.what-nhcx-is + - nhcx.concept.status-lifecycle + - nhcx.concept.retries-and-expiry + - nhcx.concept.message-identifiers + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.payer-process-a-request + endpoints: + - nhcx.endpoint.claim-submit + - nhcx.endpoint.claim-on-submit + callbacks: + - nhcx.callback.claim-submit + - nhcx.callback.claim-on-submit + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback +--- + +# The four legs of every exchange: request, acknowledgement, callback, acknowledgement + +## In plain words + +NHCX works like email. You hand a message to the exchange and walk away. The answer comes back later as a new message, on a separate call. + +So every use case takes four legs. Your request goes to NHCX, NHCX delivers it, the recipient's answer goes to NHCX, and NHCX delivers the answer to you. Each leg is acknowledged at once, before any real work happens. + +## Before you start + +You need a registered endpoint URL that NHCX can reach. See [the participant registry](./participant-registry.md). + +## What happens + +```mermaid +graph LR + S["Sender"] -->|"Leg 1: POST /v1/claim/submit"| X["NHCX"] + X -->|"Leg 2: POST /v1/claim/submit"| R["Receiver"] + R -->|"Leg 3: POST /v1/claim/on_submit"| X + X -->|"Leg 4: POST /v1/claim/on_submit"| S +``` + +| Leg | Who calls | NHCX checks | Acknowledged by | +|---|---|---|---| +| 1. Sender to NHCX | The sender | Sender and recipient status, headers | NHCX, HTTP 202 | +| 2. NHCX to receiver | NHCX, to the receiver's registered endpoint | Recipient status | The receiver, HTTP 202 | +| 3. Receiver to NHCX | The receiver, on the `on_` path | Both statuses, headers | NHCX, HTTP 202 | +| 4. NHCX to sender | NHCX, to the sender's registered endpoint | Sender status | The sender, HTTP 202 | + +### The same path in both roles + +NHCX forwards a message on the same path it received it on. So `/v1/claim/submit` is a call a provider makes to NHCX, and also a call NHCX makes to the payer. `/v1/claim/on_submit` is a call the payer makes to NHCX, and also a call NHCX makes to the provider. + +Your system therefore implements the paths you receive. A provider implements the `on_` paths for its requests. A payer implements the request paths. + +### Who is the sender + +For eligibility, insurance plan, preauthorisation, claim and task requests, the provider is the sender. For payment notices and communication requests, the payer is the sender and the provider answers. + +### Between exchange instances + +The protocol allows relays between NHCX instances at the routing steps. Your system always talks to the one instance it is registered with. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. You are a payer. Which path do you implement to receive a claim, and which path do you call to answer it? +2. Leg 1 returned HTTP 202 an hour ago and leg 4 has not arrived. Which legs could have failed, and which acknowledgement would have told NHCX to retry? + +## When it goes wrong + +**Waiting on the leg 1 response for the answer.** The 202 only closes leg 1. The answer is leg 4. See [the 202 acknowledgement](./synchronous-acknowledgement.md). + +**Leg 4 never arrives.** Your endpoint may be unreachable or slow to acknowledge. See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). + +**Leg 2 fails at the receiver.** NHCX retries, then gives up and reports to your `/v1/error` endpoint. See [retries and expiry](./retries-and-expiry.md). diff --git a/catalogue/nhcx/concepts/grievance-redressal.md b/catalogue/nhcx/concepts/grievance-redressal.md new file mode 100644 index 000000000..d9c0431ee --- /dev/null +++ b/catalogue/nhcx/concepts/grievance-redressal.md @@ -0,0 +1,122 @@ +--- +id: nhcx.concept.grievance-redressal +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Grievance redressal on the exchange +summary: >- + Any participant can raise a grievance against another under the exchange operator's + published policy, with named contacts, time limits, reopening and escalation, + and grievance messages carry their own workflow ids. +sources: +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications/healthcare-operation-policy/guidelines-for-grienvance-redressal + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__healthcare-operation-policy__guidelines-for-grienvance-redressal.md + hash: sha256:c223f711b5158dbc2c3d10870c3a9610c4af32681306f53593babb64ee382230 + fetched: '2026-09-14' + note: Site page /domain-specifications/healthcare-operation-policy/guidelines-for-grienvance-redressal, text as shown on the site. Key Policy Design Guidelines. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, G11 to G13 rows. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Communication reason code table; POST /communication/on_request row. +- url: https://hcxsbx.abdm.gov.in/#/introduction-NHCX/guidlines-for-participant-onboarding + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/introduction-NHCX__guidlines-for-participant-onboarding.md + hash: sha256:58aaa762f2a04565e2060658b0eda95e3cac4cbb0819b6d865f04cf53066680d + fetched: '2026-09-14' + note: Site page /introduction-NHCX/guidlines-for-participant-onboarding, text as shown on the site. Deboarding scenarios, last paragraph. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Section 23 Claim Reprocess, Q15. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. Integrator's Journey, FHIR Bundle Validation. +verified: + status: unverified +related: + concepts: + - nhcx.concept.access-control + - nhcx.concept.reprocess-and-cancel + - nhcx.concept.queries-and-communication + - nhcx.concept.audit-and-non-repudiation + - nhcx.concept.workflow-codes + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - nhcx.glossary.irdai + - nhcx.glossary.crc +--- + +# Grievance redressal on the exchange + +## In plain words + +Disputes happen between hospitals, payers, TPAs and patients. A payer ignores a case for weeks. A hospital bills a patient wrongly. A participant is removed from the exchange and disagrees. + +Each NHCX operator publishes a grievance policy that says how such disputes are raised, tracked and resolved, and how they escalate. The policy follows the insurance regulator's grievance guidelines, extended to disputes between any two participants. + +## Before you start + +Record a nodal contact for grievances, digital and physical, when your participant is onboarded. Other participants read it from the registry. + +## What happens + +### What the policy must provide + +| Guarantee | What it means for you | +|---|---| +| Digital grievances | You raise, route and track a grievance online | +| A stated scope | The policy lists which grievances it covers and where others go | +| Nodal bodies | Every participant, and the operator, publishes a contact in the registry | +| Types, priorities and time limits | Published per grievance type, including those set by regulation | +| A versioned policy | You sign it at onboarding, and you are told of every change | +| Due diligence | Grievances are investigated and reviewed before a reply | +| Reopening | You can reopen a grievance you are not satisfied with | +| Escalation | You can escalate to the operator, on faster time limits | +| Status updates | You are kept informed while it is open | + +### Grievance messages on the wire + +```mermaid +graph LR + G11["G11 grievance intimation
request.initiated"] --> G12["G12 acknowledgement
response.complete"] + G11 --> G13["G13 intimation failure
response.error"] +``` + +Workflow ids `G11`, `G12` and `G13` identify grievance intimation, acknowledgement and failure. The path a participant uses to raise a `G11` grievance is not yet published. + +A PMJAY payer also tells a hospital about a grievance that needs its action through a communication request with `Task.reasonCode` `grievance`. Acknowledge it like any communication request. See [queries and communication](./queries-and-communication.md). + +### A grievance is not a claim dispute + +To dispute a claim decision, raise a reprocess or erroneous claim through the task path. Under PMJAY those go to the [Claim Review Committee](../glossary/crc.md). See [reprocess and cancel](./reprocess-and-cancel.md). + +### Appealing removal + +A participant removed from the exchange against its will can appeal through the grievance process. + +For help with an integration, write to hcx.integration@nha.gov.in. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A payer has not answered your hospital's preauthorisation within the policy's time limit. Is that a reprocess, a query, or a grievance? What guarantees does the policy give you? +2. Your participant was blocked for repeated rate limit breaches. What route does the policy give you to challenge it? + +## When it goes wrong + +**Using a grievance to dispute a claim decision.** A rejected or short-paid claim goes through reprocess on the task path, not through grievance. + +**No nodal contact in the registry.** Other participants cannot reach you, and grievances against you escalate to the operator. + +**Ignoring a grievance communication.** Acknowledge a communication request with reason `grievance` like any other, within 30 seconds, and act on it. diff --git a/catalogue/nhcx/concepts/hmis-integration-architecture.md b/catalogue/nhcx/concepts/hmis-integration-architecture.md new file mode 100644 index 000000000..a80962daf --- /dev/null +++ b/catalogue/nhcx/concepts/hmis-integration-architecture.md @@ -0,0 +1,115 @@ +--- +id: nhcx.concept.hmis-integration-architecture +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Hospital HMIS integration for PMJAY through NHCX +summary: >- + A hospital on the government health assurance scheme can move claims out of the + scheme's provider portal and into its own hospital system, after a six step migration + that ends in a manual mapping. +sources: +- url: https://hcxsbx.abdm.gov.in/images/be2e25fede3bf711f783.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/PMJAY Hospital Migration to HMIS via NHCX.docx + hash: sha256:cf5c9bf1c402b214f65bbb7bd0822f3a76d8ccda9b69c7bf77ba131befef3bc6 + fetched: '2026-09-14' + note: PMJAY Hospital Migration to HMIS via NHCX, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. Sections 2 to 3.6. +- url: https://hcxsbx.abdm.gov.in/images/b6bd99dab49a5e928ea3.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Overview.pdf + hash: sha256:c95469758a25cb8aca8c47757d8b18b4dedb8b4d42669663cff7343205f77fda + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Overview, row 27 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Pages 2-8. +verified: + status: unverified +related: + flows: + - nhcx.flow.pmjay-hospital-migration + - nhcx.flow.production-onboarding + - nhcx.flow.pmjay-patient-to-cashless + concepts: + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.participant-registry + - nhcx.concept.insurance-plan + - nhcx.concept.biometric-authentication + - nhcx.concept.encryption-certificate + endpoints: + - nhcx.endpoint.v2-participant-create + - nhcx.endpoint.validate + - nhcx.endpoint.participant-update + - nhcx.endpoint.update-validate + glossary: + - shared.glossary.hmis + - nhcx.glossary.tms + - nhcx.glossary.pmjay + - shared.glossary.dsc + - shared.glossary.hfr +--- + +# Hospital HMIS integration for PMJAY through NHCX + +## In plain words + +Today a PMJAY hospital records a patient in its own [HMIS](../../shared/glossary/hmis.md), then types the same details again into the scheme's [TMS](../glossary/tms.md) provider portal. Two systems, two rounds of data entry. + +With NHCX, the HMIS sends preauthorisations and claims itself, system to system, to the payer's TMS. The portal drops out of the hospital's workflow. + +## Before you start + +The hospital needs an [HFR](../../shared/glossary/hfr.md) facility ID with a registered mobile number, its PMJAY hospital ID, and an ABDM Milestone 1 compliant HMIS. + +## What happens + +### Before and after + +```mermaid +graph LR + subgraph "Today" + H1["HMIS"] -->|re-keyed by staff| TP["TMS 2.0 provider portal"] + TP --> TY1["TMS 2.0 payer system"] + end + subgraph "Through NHCX" + H2["NHCX-integrated HMIS"] -->|sealed FHIR messages| X["NHCX"] + X --> TY2["TMS 2.0 payer system"] + end +``` + +### What the HMIS must hold + +| Capability | Why | +|---|---| +| Session tokens and a certificate pair | To call NHCX and to seal and open messages | +| A public HTTPS endpoint | NHCX delivers payer responses there | +| An insurance plan store | Packages, rates, forms and required documents per policy | +| Biometric capture | Patient presence at registration, preauthorisation and discharge | +| A FHIR bundle builder and validator | Structured claims and clinical records | + +### The migration, in six steps + +1. **Create the participant** with registry type `10001` (HFR), role `10001` (provider), the HFR ID and the HFR-registered mobile number. +2. **Confirm it** with the transaction ID and the passcode sent to that mobile. +3. **Update it** with the HMIS endpoint URL and the Base64 encoded certificate. +4. **Confirm the update** with a second passcode, valid for 24 hours. +5. **Map it.** The hospital raises a ticket with the NHA NHCX operations team, giving the PMJAY hospital ID and the new participant ID. This step is manual. +6. **Go live.** The mapping is the switch. + +### Dual processing + +Cases submitted before the mapping finish in the TMS provider portal. Cases started after it go only through the HMIS. TMS stops accepting new preauthorisations from that hospital. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A patient's preauthorisation was raised in the TMS portal the day before your mapping. Where does its claim go? +2. Steps 1 to 4 are complete but claims still show only in TMS. Which step is missing, and who performs it? + +## When it goes wrong + +**Mobile number mismatch.** Participant creation fails unless the mobile matches the HFR record exactly. Update HFR first. + +**Wrong registry type or role.** A PMJAY hospital must use HFR (`10001`) and provider (`10001`). Anything else is rejected. + +**Mapping not raised or not complete.** Until the NHA operations team maps the hospital ID to the participant ID, new cases do not route through the HMIS. + +**Endpoint not reachable.** The mapping needs a live HTTPS endpoint that NHCX can reach. diff --git a/catalogue/nhcx/concepts/insurance-plan.md b/catalogue/nhcx/concepts/insurance-plan.md new file mode 100644 index 000000000..bc665b4fd --- /dev/null +++ b/catalogue/nhcx/concepts/insurance-plan.md @@ -0,0 +1,138 @@ +--- +id: nhcx.concept.insurance-plan +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: The insurance plan and what a provider learns from it +summary: >- + The insurance plan is the payer's policy published as structured data, listing + the packages, rates, conditions and documents a hospital may claim, and the hospital + fetches and caches it before treating. +sources: +- url: https://hcxsbx.abdm.gov.in/images/13093b5f9b88fe826123.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Insurance Plan IG.docx + hash: sha256:e9c6c82b6d67fd8476d6d19a5961419beb04e3c0613533453ed1e16e2a569cc1 + fetched: '2026-09-14' + note: Insurance Plan IG, row 25 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Task request tables; InsurancePlan structure tables. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. InsurancePlan section, claim condition table. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Page 16 Insurance Plan technical guidelines. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Insurance Plan Error, PAYR-1406. +verified: + status: unverified +related: + flows: + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.insuranceplan-request + - nhcx.endpoint.insuranceplan-on-request + callbacks: + - nhcx.callback.insuranceplan-request + - nhcx.callback.insuranceplan-on-request + fhir: + - nhcx.fhir.insurance-plan-bundle + - nhcx.fhir.pmjay-insurance-plan + errors: + - nhcx.error.payr-1401 + - nhcx.error.payr-1402 + - nhcx.error.payr-1403 + - nhcx.error.payr-1404 + - nhcx.error.payr-1405 + - nhcx.error.payr-1406 + concepts: + - nhcx.concept.coverage-eligibility-purposes + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.claim-cycle + - nhcx.concept.fhir-in-nhcx + glossary: + - nhcx.glossary.insurance-plan + - nhcx.glossary.hbp + - nhcx.glossary.pmjay + - shared.glossary.hfr + tests: + - nhcx.test.provider-uc-06 + - nhcx.test.payer-uc-08 +--- + +# The insurance plan and what a provider learns from it + +## In plain words + +An [insurance plan](../glossary/insurance-plan.md) is the payer's policy published as data rather than as a PDF. It tells a hospital what it may treat under the policy, at what rate, under which conditions, and with which documents. + +The hospital fetches it through NHCX, stores it, and uses it to fill in preauthorisations and claims. Under [PMJAY](../glossary/pmjay.md) nearly every later step depends on it. + +## Before you start + +You need the policy code, your [HFR](../../shared/glossary/hfr.md) facility ID, and the payer's participant code. + +## What happens + +### Asking for the plan + +You send a FHIR `Task` to `/v1/insuranceplan/request`: + +| Element | Value | +|---|---| +| `Task.status` | `requested` | +| `Task.intent` | `order` | +| `Task.code` | `poll`, system `https://nhcx.abdm.gov.in/api` | +| `Task.input` | `policyNumber` and `providerId`; at least one is required | + +The plan arrives later on `/v1/insuranceplan/on_request` as a `collection` bundle of `InsurancePlan`, `Organization` and `Questionnaire` resources. + +### What the plan holds + +```mermaid +graph TD + P["InsurancePlan.plan"] --> G["generalCost
overall sum insured"] + P --> SC["specificCost"] + SC --> CAT["category
speciality, such as GM"] + CAT --> BEN["benefit
package, such as SE012A"] + BEN --> COST["cost
package rate"] + COST --> QUAL["qualifiers
implant, stratification"] + P --> EXT["extensions
claim conditions, exclusions,
required documents"] +``` + +- **Specialities and packages.** Only those your hospital is empanelled for. The plan is specific to the payer, the policy and your hospital. +- **Package rates and qualifiers.** ICU or HDU stratification and implants carry their own amounts. +- **Claim conditions.** Per package flags such as `ApprovalNotRequired`, `EnhancementAllowed`, `ImplantApplicable`, `CyclicProcedure`, `Standalone` and `Unspecified`. +- **Required documents.** At policy level and per package, for preauthorisation and for claim. +- **Questionnaires.** Standard treatment guideline forms. You return the questionnaire URL in the `QuestionnaireResponse` of your preauthorisation or claim. + +### Keeping it current + +- The bundle can exceed 20 MB. Store it in a queryable form, linked to the policy. +- Refresh it weekly, and at once when the payer renews or amends the policy. +- Keep versions of rates and packages, and record which version each preauthorisation and claim used. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A package you want to add during an enhancement shows `EnhancementAllowed` as `N`. What should your system do? +2. Your weekly refresh fails for a policy while an earlier request is still running. What does the payer tell you, and how long do you wait? + +## When it goes wrong + +**A second request while one is running.** The PMJAY payer refuses it with [PAYR-1406](../errors/payr-1406.md). Wait 15 to 60 minutes. If no plan arrives after 60 minutes, contact support. + +**Policy not allowed for your hospital.** [PAYR-1401](../errors/payr-1401.md). + +**Policy or renewal unknown to the payer.** [PAYR-1402](../errors/payr-1402.md) and [PAYR-1403](../errors/payr-1403.md). Check the values in your `Task`. + +**No speciality configured, or hospital not found.** [PAYR-1404](../errors/payr-1404.md) and [PAYR-1405](../errors/payr-1405.md). Check the HFR ID you sent. + +**Stale rates.** A claim priced from an outdated plan version is rejected. Refresh before you price. diff --git a/catalogue/nhcx/concepts/jwe-envelope.md b/catalogue/nhcx/concepts/jwe-envelope.md new file mode 100644 index 000000000..4b97163fa --- /dev/null +++ b/catalogue/nhcx/concepts/jwe-envelope.md @@ -0,0 +1,134 @@ +--- +id: nhcx.concept.jwe-envelope +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: The JWE envelope that seals every payload +summary: >- + Every use case message is a sealed encryption envelope: routing headers the exchange + can read, wrapped around a claim bundle only the recipient can open. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__message-security-and-integrity.md + hash: sha256:3768fd89932e4081c9e03a8695619bcaf70c641e28bb55a77eec090bb926eeb3 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity, text as shown on the site. Message Security and Integrity, encryption steps. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/healthclaims-exchange-protocol + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__healthclaims-exchange-protocol.md + hash: sha256:ff4b3aa02f2aa61e2b29e50699fe16bee82c3684908bc2be0815c07b97a83371 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/healthclaims-exchange-protocol, text as shown on the site. Message Structure, Registered JOSE and Signatures. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 4, Q13. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 1.3 Key Principles; Section 2.3 HTTP Request Format. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 7 API logic. +verified: + status: unverified +related: + decisions: + - nhcx.decision.key-encryption-algorithm + - nhcx.decision.jwe-serialisation + concepts: + - nhcx.concept.protocol-headers + - nhcx.concept.encryption-certificate + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.error-code-spaces + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + errors: + - nhcx.error.payr-1001 + - nhcx.error.payr-1517 + glossary: + - nhcx.glossary.jwe + - nhcx.glossary.protected-header + - shared.glossary.fhir + troubleshooting: + - nhcx.troubleshooting.recipient-cannot-decrypt +--- + +# The JWE envelope that seals every payload + +## In plain words + +Every use case message on NHCX is a [JSON Web Encryption (JWE)](../glossary/jwe.md) envelope. Think of a sealed envelope with the address printed on the outside. + +The outside is the [protected header](../glossary/protected-header.md). It carries who sent the message, who must receive it and where it sits in the claim. NHCX reads it to route. The inside is the [FHIR](../../shared/glossary/fhir.md) bundle, encrypted so that only the recipient can read it. + +## Before you start + +You need the recipient's public certificate and your own private key. See [encryption certificates](./encryption-certificate.md). + +## What happens + +### The five parts + +A sealed message is five Base64URL parts joined by dots. + +```mermaid +graph LR + H["1. Protected header
alg, enc, x-hcx-*"] --- K["2. Encrypted key
content key, sealed with
recipient's RSA key"] + K --- I["3. Initialisation vector"] + I --- C["4. Ciphertext
the FHIR bundle"] + C --- T["5. Authentication tag"] +``` + +1. **Protected header.** The JOSE fields `alg` and `enc`, plus the [protocol headers](./protocol-headers.md) and any domain headers. +2. **Encrypted key.** A random content key, wrapped with the recipient's RSA public key using RSA-OAEP. Which RSA-OAEP variant to set in `alg` is covered in [the key encryption algorithm](../decisions/key-encryption-algorithm.md). +3. **Initialisation vector.** Random, fresh for every message. +4. **Ciphertext.** The FHIR bundle, encrypted with AES-256-GCM, so `enc` is `A256GCM`. +5. **Authentication tag.** Proves nothing changed. + +### Why there is no separate signature + +AES-GCM authenticates the protected header as well as the ciphertext. If anyone changes a header or a byte of the payload, the tag no longer matches and the recipient must reject the message. So the envelope needs no second signature. + +The protocol allows no unprotected headers and no multiple recipients. One envelope, one recipient. + +### What goes on the wire + +The request body carries the sealed string in a `payload` field: + +```json +{ "payload": "" } +``` + +How the five parts are serialised is covered in [JWE serialisation](../decisions/jwe-serialisation.md). + +### What comes back + +A response from a payer takes one of two forms, named by its `type`: + +| `type` | When | Readable by NHCX | +|---|---|---| +| `JWEPayloadResponse` | The payer processed the request | No, sealed for you | +| `ProtocolResponse` | The payer could not open or validate the request | Yes, headers and error in the clear | + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A proxy between your system and NHCX rewrites `x-hcx-timestamp` inside the protected header. What happens when the payer tries to open the message, and why? +2. A payer cannot decrypt your request. In which of the two response forms does it tell you, and why can that form not be sealed? + +## When it goes wrong + +**The recipient cannot decrypt.** It reports [PAYR-1001](../errors/payr-1001.md). The usual cause is a stale or wrong certificate. Fetch it again. + +**Error sent sealed.** An error reply must be a `ProtocolResponse` in the clear. A sealed reply where an error structure is expected is refused with [PAYR-1517](../errors/payr-1517.md). + +**Header edited after sealing.** Any change to the protected header after encryption breaks the tag. Build the full header first, then seal. + +**Plaintext bundle in the body.** Every use case request must be sealed. No FHIR content travels in the clear. diff --git a/catalogue/nhcx/concepts/message-identifiers.md b/catalogue/nhcx/concepts/message-identifiers.md new file mode 100644 index 000000000..5d933a144 --- /dev/null +++ b/catalogue/nhcx/concepts/message-identifiers.md @@ -0,0 +1,116 @@ +--- +id: nhcx.concept.message-identifiers +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Correlation id, API call id and workflow id +summary: >- + Four identifiers track every message: one per network call, one per request, one + per conversation and one for the stage of the case. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Protected Header table. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 3, Q4. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 7 Validations. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, item 8. +verified: + status: unverified +related: + glossary: + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.workflow-id + concepts: + - nhcx.concept.protocol-headers + - nhcx.concept.workflow-codes + - nhcx.concept.retries-and-expiry + - nhcx.concept.four-message-legs + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1012 + - nhcx.error.nhcx-1016 + - nhcx.error.payr-1516 + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + endpoints: + - nhcx.endpoint.status +--- + +# Correlation id, API call id and workflow id + +## In plain words + +Many messages fly back and forth for one patient's claim. Four identifiers in the protocol headers keep them apart and tie them together. + +The [API call id](../glossary/api-call-id.md) names one network call. The request id names one request. The [correlation id](../glossary/correlation-id.md) names one conversation, a request and everything that answers it. The [workflow id](../glossary/workflow-id.md) names the stage the case has reached. + +## Before you start + +Read [the protocol headers](./protocol-headers.md) first. + +## What happens + +| Identifier | Header | Scope | Who sets it | +|---|---|---|---| +| API call id | `x-hcx-api_call_id` | One HTTP call | The caller, new on every call | +| Request id | `x-hcx-request_id` | One originating request | The sender | +| Correlation id | `x-hcx-correlation_id` | One conversation | The initiator; responders copy it | +| Workflow id | `x-hcx-workflow_id` | The stage of the case | Whoever sends the message | + +API call id, request id and correlation id are random 36 character UUIDs. The API call id and the correlation id on a message are always different values. + +### How they relate in one exchange + +```mermaid +graph TD + R["Provider request
correlation C, call id A1"] --> ACK1["NHCX 202"] + R --> F["Delivered to payer
correlation C"] + F --> RS["Payer response
correlation C, call id A2"] + RS --> D["Delivered to provider
correlation C"] +``` + +The payer's response carries the same correlation id as the request, and a new API call id of its own. Your system matches the response to its request by the correlation id. + +### Rules + +- **New call, new API call id.** Never reuse one, even on a retry you send yourself. +- **New request, new correlation id.** NHCX refuses an initiating request whose correlation id it already holds. +- **A response copies the correlation id.** Every message that answers a request carries that request's correlation id. +- **After a failure, start again.** When a request fails, NHCX makes its correlation id inactive. Send a fresh request with a new correlation id. +- **The workflow id changes with the stage.** It says what this message is: a new preauthorisation, a query response, a payment acknowledgement. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. Your preauthorisation failed on the payer's side and you fixed the bundle. Which identifiers must be new on the resubmission, and why? +2. Two responses arrive for two different claims from the same payer. Which header tells you which claim each one belongs to? + +## When it goes wrong + +**Duplicate correlation id.** NHCX refuses the request with [NHCX-1006](../errors/nhcx-1006.md). Generate a fresh correlation id. + +**Response with an unknown correlation id.** NHCX refuses a callback whose correlation id it does not hold with [NHCX-1010](../errors/nhcx-1010.md). + +**Unknown API call id.** A lookup by an API call id NHCX has no record of returns [NHCX-1012](../errors/nhcx-1012.md). + +**Wrong action for the conversation.** [NHCX-1016](../errors/nhcx-1016.md) means the action does not fit the correlation id you sent. + +**The payer has no matching event.** The PMJAY payer reports [PAYR-1516](../errors/payr-1516.md) when it cannot find the API call id and correlation id pair. See [mismatched correlation](../troubleshooting/duplicate-or-mismatched-correlation.md). diff --git a/catalogue/nhcx/concepts/notifications.md b/catalogue/nhcx/concepts/notifications.md new file mode 100644 index 000000000..c74c61220 --- /dev/null +++ b/catalogue/nhcx/concepts/notifications.md @@ -0,0 +1,117 @@ +--- +id: nhcx.concept.notifications +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Notifications to patient apps +summary: >- + A patient's health record app subscribes on login to claim events for that person, + and the exchange then pushes short readable updates to the app, with only the + most recently linked app receiving them. +sources: +- url: https://hcxsbx.abdm.gov.in/images/01db86335b7c226eb745.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Notification Integration.docx + hash: sha256:05908862c103522fac0dbb482f8eb6a0f8536fc12b1ae3bdb0e98615f30812aa + fetched: '2026-09-14' + note: NHCX Notification Integration, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. Whole document, sections 1 to 7. +verified: + status: unverified +related: + flows: + - nhcx.flow.notification-subscribe + endpoints: + - nhcx.endpoint.notification-subscribe + callbacks: + - nhcx.callback.notification-delivery + concepts: + - nhcx.concept.beneficiary-consent + - nhcx.concept.session-token + - nhcx.concept.jwe-envelope + - nhcx.concept.participant-roles + glossary: + - shared.glossary.phr + - shared.glossary.eua + - shared.glossary.abha-address + - nhcx.glossary.payment-notice +--- + +# Notifications to patient apps + +## In plain words + +A patient wants to know when their preauthorisation is approved or their claim is paid. NHCX can tell their [personal health record (PHR)](../../shared/glossary/phr.md) app directly. + +The app subscribes for the patient when the patient logs in. From then on, NHCX pushes each claim event to the app as a short message the app can show as it is. + +## Before you start + +The app must have completed ABDM Milestone 1, be registered on NHCX as a beneficiary service provider, and host an HTTPS endpoint on TLS 1.2 or later. It needs a [session token](./session-token.md) and must be able to seal a [JWE](./jwe-envelope.md). It must also have the patient's explicit consent to receive claim updates. + +## What happens + +```mermaid +graph LR + U["Patient logs in
with ABHA"] --> APP["PHR app"] + APP -->|"/v1/notification/subscribe
subscriber.id = ABHA"| X["NHCX"] + H["Hospital and payer
exchange claim messages"] --> X + X -->|"event pushed to
on_notification_url"| APP + APP --> U2["Patient sees the message"] +``` + +### Last linked wins + +A subscription is for one ABHA. When the patient logs into another app and that app subscribes, the new subscription replaces the old one. At any moment exactly one app receives the patient's notifications, so no app needs to handle duplicates. + +### The subscription + +| Field | Holds | +|---|---| +| `subscription_id` | Your ID for this subscription | +| `topic_code` | A list of topics | +| `recipient_code` | Your participant code | +| `subscriber.id` | The patient's ABHA address or number | +| `on_notification_url` | Your HTTPS endpoint for pushed events | +| `expiry` | Optional end time | + +| Topic | Carries | +|---|---| +| `workflow_events` | Preauthorisation, claim, payment and communication events for the patient | +| `network_events` | Platform updates and maintenance | +| `participant_events` | Changes to payer and provider registrations | + +Most patient apps need only `workflow_events`. + +### A pushed event + +Each event carries `notification_id`, `topic_code`, `timestamp`, `subscriber.id` and `message`. The `message` is written for the patient, for example "Preauthorization approved for Rs. 50,000". An optional `domain_values` map repeats `x-hcx-*` headers for apps that want detail. + +| Event type | Status values | +|---|---| +| `preauth_request`, `claim_request` | `queued`, `processing` | +| `preauth_response`, `claim_response` | `approved`, `rejected` | +| `payment_notice` | `paid`, `pending` | +| `communication` | `information_required` | + +### Not the same as a payment notice + +A [payment notice](../glossary/payment-notice.md) is a payer telling a hospital about money, as a FHIR bundle. A patient notification is NHCX telling an app about an event, as a short message. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A patient uses app A, then logs into app B, which subscribes. Which app receives the next claim event, and does app A need to do anything? +2. Your app wants only to show updates to the patient. Which field of the pushed event do you display? + +## When it goes wrong + +**401 Unauthorized.** The session token expired. Fetch a new one and subscribe again. + +**403 Forbidden.** Your participant is not authorised. Check your registration on NHCX. + +**No events arrive.** Another app subscribed for the same patient later, or your endpoint is not reachable over HTTPS with TLS 1.2 or later. + +**500 Server Error.** Retry the subscription with backoff. + +**Trusting any caller.** Validate the token NHCX sends with each push, check that the sender code is NHCX's, and rate limit the endpoint. diff --git a/catalogue/nhcx/concepts/participant-code.md b/catalogue/nhcx/concepts/participant-code.md new file mode 100644 index 000000000..bdf422848 --- /dev/null +++ b/catalogue/nhcx/concepts/participant-code.md @@ -0,0 +1,133 @@ +--- +id: nhcx.concept.participant-code +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Participant codes and how every message is addressed +summary: >- + A participant code is the address the exchange issues to each registered organisation, + and every message carries two of them: the sender's and the recipient's. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/registries + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__registries.md + hash: sha256:04bf78739fa0c3807a8a5a49d8c3e004f8aba664f524d0344d7fc44c3b2baf42 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/registries, text as shown on the site. Registry table, participant_code row. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 7 Validations. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, item 7. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 4, Q11. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. Integrator's Journey page 6, step 3c. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1 Acceptance scenario body. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Policy Linking Process. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-registry + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.policy-linking + glossary: + - nhcx.glossary.participant-code + - shared.glossary.hfr + endpoints: + - nhcx.endpoint.fetch-participants-list + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.participant-get-policies + errors: + - nhcx.error.nhcx-1003 + - nhcx.error.payr-1001 + sandbox: + - nhcx.sandbox.test-participants + - nhcx.sandbox.dummy-payer +--- + +# Participant codes and how every message is addressed + +## In plain words + +A [participant code](../glossary/participant-code.md) is your address on the exchange. NHCX issues it when you register. It looks like a number followed by `@` and an instance code, for example `100001@sbx`. + +Every message carries two codes: who sent it and who must receive it. NHCX routes on those two codes alone. + +## Before you start + +You need a confirmed participant record. See [the participant registry](./participant-registry.md). + +## What happens + +### Where the codes appear + +| Place | Field | Holds | +|---|---|---| +| Protected header | `x-hcx-sender_code` | Your code | +| Protected header | `x-hcx-recipient_code` | The code of the participant that must act | +| Certificate lookup | `participantid` in `/fetch/certs` | The code whose certificate you need | +| Your 202 acknowledgement | `result.sender_code`, `result.recipient_code` | The codes from the message you received | +| Policy link | `payerid`, `processingid` | The insurer's code and the TPA's code | + +### Codes swap on the way back + +```mermaid +graph LR + subgraph Request + A1["sender: hospital code"] --> B1["recipient: payer code"] + end + subgraph Response + A2["sender: payer code"] --> B2["recipient: hospital code"] + end +``` + +A response reverses the pair. The responder puts its own code in `x-hcx-sender_code`. It puts the original sender's code in `x-hcx-recipient_code`. + +### One code per facility + +An organisation can hold several participant codes, one for each HFR facility ID. It uses the same ABDM credentials to create all of them. + +### Rules for handling a code + +- Store the code exactly as NHCX issued it, suffix included. +- Do not build codes or read meaning into the suffix. Sandbox and production codes are both opaque strings. +- Take a payer's code from the participant list or from the policy, never from memory. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A payer answers your claim. What must it put in `x-hcx-sender_code` and in `x-hcx-recipient_code`? +2. Your hospital group has three facilities with three HFR IDs. How many participant codes do you need, and how many sets of credentials? + +## When it goes wrong + +**Addressing the wrong party.** A provider must put the policy's `processingID` in `x-hcx-recipient_code`, not the `PayerID`. + +**Codes not swapped on a response.** A payer's response must name the original sender as recipient. Otherwise NHCX cannot deliver it to the right system. + +**Recipient not registered.** NHCX refuses the message with [NHCX-1003](../errors/nhcx-1003.md). + +**Certificate fetched for the wrong code.** The recipient cannot open a message sealed with someone else's key and reports [PAYR-1001](../errors/payr-1001.md). diff --git a/catalogue/nhcx/concepts/participant-registry.md b/catalogue/nhcx/concepts/participant-registry.md new file mode 100644 index 000000000..74edd433c --- /dev/null +++ b/catalogue/nhcx/concepts/participant-registry.md @@ -0,0 +1,136 @@ +--- +id: nhcx.concept.participant-registry +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: The participant registry and what a participant record holds +summary: >- + The participant registry is the exchange's address book: each record holds a participant's + code, role, callback address and public certificate, and nothing routes until + the record is confirmed. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/registries + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__registries.md + hash: sha256:04bf78739fa0c3807a8a5a49d8c3e004f8aba664f524d0344d7fc44c3b2baf42 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/registries, text as shown on the site. Participating Organisations/Systems Registry table. +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Steps 1-4 and Participant Certificate Updation. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths /fetch/participants/list and /fetch/certs.' +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error, HFR mismatch row. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-code + - nhcx.concept.participant-roles + - nhcx.concept.encryption-certificate + - nhcx.concept.session-token + endpoints: + - nhcx.endpoint.participant-create + - nhcx.endpoint.v2-participant-create + - nhcx.endpoint.validate + - nhcx.endpoint.participant-update + - nhcx.endpoint.v2-participant-update + - nhcx.endpoint.update-validate + - nhcx.endpoint.participant-search + - nhcx.endpoint.participant-details + - nhcx.endpoint.fetch-participants-list + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.v2-update-cert + flows: + - nhcx.flow.sandbox-onboarding + - nhcx.flow.production-onboarding + - nhcx.flow.generate-and-register-certificate + errors: + - nhcx.error.nhcx-1002 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1004 + glossary: + - nhcx.glossary.participant-code + - shared.glossary.hfr +--- + +# The participant registry and what a participant record holds + +## In plain words + +The participant registry is the exchange's address book. It holds one record for every organisation that can send or receive through NHCX. + +When a message arrives, NHCX looks up the sender and the recipient here. It finds where to deliver the message. Other participants find your public certificate here, so they can seal messages for you. + +## Before you start + +You need a session token from your ABDM credentials. See [the session token](./session-token.md). A provider also needs an [HFR](../../shared/glossary/hfr.md) facility ID whose registered mobile number you can receive a passcode on. + +## What happens + +### What a record holds + +| Attribute | Required | What it is for | +|---|---|---| +| `participant_code` | Yes | Your address on the exchange, issued by NHCX. See [participant codes](./participant-code.md) | +| `participant_name` | Yes | Your organisation's name | +| `roles` | Yes | What you may send and receive. See [participant roles](./participant-roles.md) | +| `registry_code` | No | Your ID in the external registry, such as your HFR ID | +| `mobile` | Yes | One to three numbers; passcodes go here | +| `email`, `phone` | No | Up to three each | +| `status` | Yes | Where the record is in its life | +| `endpoint_url` | Yes | Where NHCX delivers your incoming messages | +| `encryption_cert` | Yes | Your public certificate, so others can seal messages for you | +| `signing_cert_path`, `address`, `payment_details` | No | Signing certificate, address, bank or UPI details | + +### How a record comes to life + +```mermaid +graph LR + C["Create
role, registry ID, mobile"] -->|passcode to registered mobile| V["Confirm
transaction ID + passcode"] + V --> A["Active"] + A --> U["Update
endpoint URL + certificate"] + U -->|passcode| UV["Confirm update"] + UV --> R["Ready to exchange"] +``` + +1. **Create.** You send the registry type, registry ID, role, mobile and email. NHCX checks the mobile number against the HFR record for a provider, or the payer record for a payer. It returns your participant code. +2. **Confirm.** When the create response carries a `transactionid`, NHCX sends a passcode to the registered mobile. You confirm with both. Until then the record cannot be used. +3. **Update.** You add your endpoint URL and your Base64 encoded certificate. +4. **Confirm the update.** A second passcode confirms it. The endpoint and certificate then become live. + +In production the transaction ID and passcode are valid for 24 hours. A certificate alone can later be replaced without a passcode. + +### The four states + +The registry model defines four states: created and not yet verified, active, inactive, and blocked. Only an active participant can exchange messages. + +### How others read the registry + +A sender lists participants by role with `/fetch/participants/list`. It fetches a recipient's certificate with `/fetch/certs`, passing the recipient's participant code. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. Your participant is created and confirmed, but no endpoint URL is recorded. What happens to a claim response a payer sends you? +2. You changed your key pair. Which attribute must change in your record, and why do other participants care? + +## When it goes wrong + +**The mobile number does not match.** For a provider, the mobile you send must match the HFR record exactly. Correct it in HFR or send the registered number. + +**Lost transaction ID or expired passcode.** Start the create or update call again. Each call issues a new transaction ID and passcode. + +**Sender or receiver not registered.** NHCX refuses the message with [NHCX-1002](../errors/nhcx-1002.md) or [NHCX-1003](../errors/nhcx-1003.md). [NHCX-1004](../errors/nhcx-1004.md) means no receiver is registered for the scheme you addressed. + +**HFR ID in the bundle differs from the registry.** The PMJAY payer checks the hospital HFR ID in the bundle. It refuses the bundle when that ID differs from the sender's registry ID. diff --git a/catalogue/nhcx/concepts/participant-roles.md b/catalogue/nhcx/concepts/participant-roles.md new file mode 100644 index 000000000..cb43ea682 --- /dev/null +++ b/catalogue/nhcx/concepts/participant-roles.md @@ -0,0 +1,145 @@ +--- +id: nhcx.concept.participant-roles +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Participant roles: provider, payer, TPA and the exchange' +summary: >- + Every system on the claims exchange registers with one role, and the role decides + which messages it sends, which it receives and how it is addressed. +sources: +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 4, Valid Role Enums and Registry Enums. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 3, Q6 to Q9. +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications/healthcare-operation-policy/access-control + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__healthcare-operation-policy__access-control.md + hash: sha256:7c3d7b2cf396a9daaca76ade1c059a8d358d0686b7b7e041e96c5f7f239dae57 + fetched: '2026-09-14' + note: Site page /domain-specifications/healthcare-operation-policy/access-control, text as shown on the site. Access Controls role list. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. API Structure table. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Policy Linking Process. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1 item 5; page 2 item 7. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error, 'No user role found' row. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-registry + - nhcx.concept.participant-code + - nhcx.concept.access-control + - nhcx.concept.policy-linking + - nhcx.concept.what-nhcx-is + glossary: + - nhcx.glossary.provider + - nhcx.glossary.payer + - nhcx.glossary.tpa + - nhcx.glossary.irdai + - shared.glossary.eua + - shared.glossary.hfr + endpoints: + - nhcx.endpoint.participant-create + - nhcx.endpoint.v2-participant-create + - nhcx.endpoint.participant-get-policies + flows: + - nhcx.flow.sandbox-onboarding + - nhcx.flow.production-onboarding + - nhcx.flow.payer-process-a-request +--- + +# Participant roles: provider, payer, TPA and the exchange + +## In plain words + +Every system that talks through NHCX registers with a role. A hospital registers as a [provider](../glossary/provider.md). An insurer registers as a [payer](../glossary/payer.md). A [third party administrator (TPA)](../glossary/tpa.md) processes claims on an insurer's behalf. + +The role decides which messages your system sends and which it must receive. NHCX itself has no role in a claim. It routes messages between the participants. + +## Before you start + +Know which kind of organisation you are building for. A hospital system registers as a provider. An insurer or TPA system registers as a payer or TPA. + +## What happens + +### The role codes + +You pass one of these codes in `role` when you create a participant. + +| Role | Code | Who | +|---|---|---| +| `PROVIDER` | `10001` | Hospitals, clinics, diagnostic centres | +| `PAYER` | `10002` | Insurers and State Health Agencies | +| `AGENCY_TPA` | `10003` | Third party administrators acting for a payer | +| `AGENCY_REGULATOR` | `10004` | Regulators such as the [IRDAI](../glossary/irdai.md) | +| `RESEARCH` | `10005` | Research bodies | +| `MEMBER_ISNP` | `10006` | Insurance self network platforms | +| `AGENCY_SPONSOR` | `10007` | Scheme owners | +| `HIE_HIO_HCX` | `10008` | Other exchange instances | +| `EUA` | `10009` | [End user applications](../../shared/glossary/eua.md), such as patient apps | + +### Who starts which exchange + +```mermaid +graph LR + PR["Provider"] -->|eligibility, insurance plan,
preauth, claim, reprocess| X["NHCX"] + X --> PY["Payer or TPA"] + PY -->|payment notice,
communication request| X + X --> PR + RG["Regulator"] -->|claim search| X +``` + +A provider starts coverage eligibility, insurance plan, preauthorisation, claim and reprocess requests. A payer answers them. A payer starts payment notices and communication requests, and the provider answers those. + +In version 1 of the exchange a TPA behaves like a payer. It receives the same requests and sends the same responses. + +### The registry you prove yourself against + +| Role | Registry ID you send | Registry type code | +|---|---|---| +| Provider | Your [HFR](../../shared/glossary/hfr.md) facility ID | `10001` (HFR) | +| Payer or TPA | Your IRDAI registration ID, without leading zeros | `10004` (PAYER) | +| End user application | Your client ID | `10001` | + +The other registry type codes are `10002` (NIN) and `10003` (ROHINI). + +### Payer and TPA together + +Every insurer has its own participant code, even when a TPA processes its claims. When a policy is linked, `payerid` carries the insurer's code and `processingid` carries the TPA's code. A provider addresses claims on that policy to the `processingid`, because the TPA does the processing. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. An insurer uses a TPA. Which participant code does your hospital system put in `x-hcx-recipient_code` for a claim on that insurer's policy? +2. Which role sends a payment notice, and which role must answer it? + +## When it goes wrong + +**Addressing the insurer instead of the TPA.** A provider that uses the `PayerID` from the get policies response sends the claim to the wrong participant. Use the `processingID`. See [policy linking](./policy-linking.md). + +**Wrong role or registry type at creation.** A code outside the lists above fails participant creation. A mismatch between role and registry type causes access problems and wrong routing later. + +**No role on the sender.** A payer refuses a sender that has no role in NHCX with the message "No user role found/associated for sender code". diff --git a/catalogue/nhcx/concepts/pmjay-on-nhcx.md b/catalogue/nhcx/concepts/pmjay-on-nhcx.md new file mode 100644 index 000000000..540b3af88 --- /dev/null +++ b/catalogue/nhcx/concepts/pmjay-on-nhcx.md @@ -0,0 +1,125 @@ +--- +id: nhcx.concept.pmjay-on-nhcx +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PMJAY on NHCX and how it differs from the standard exchange +summary: >- + Claims under the government health assurance scheme use the same exchange calls + as any insurer, but the scheme adds four duties: use the insurance plan, authenticate + the patient biometrically, send structured records, and handle queries inside + responses. +sources: +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 1.2, 1.7, 8.1, 8.4 and 8.5 functional points. +- url: https://hcxsbx.abdm.gov.in/images/b6bd99dab49a5e928ea3.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Overview.pdf + hash: sha256:c95469758a25cb8aca8c47757d8b18b4dedb8b4d42669663cff7343205f77fda + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Overview, row 27 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Pages 7-8, NHCX normal flow vs PMJAY flow. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Section 24 Q9; Section 22 Q11; Section 23 Q4. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 8 partial approval table. +verified: + status: unverified +related: + concepts: + - nhcx.concept.hmis-integration-architecture + - nhcx.concept.biometric-authentication + - nhcx.concept.insurance-plan + - nhcx.concept.queries-and-communication + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.claim-cycle + - nhcx.concept.reprocess-and-cancel + flows: + - nhcx.flow.pmjay-patient-to-cashless + - nhcx.flow.pmjay-hospital-migration + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.biometric-face + decisions: + - nhcx.decision.payer-implementation + glossary: + - nhcx.glossary.pmjay + - nhcx.glossary.sha + - nhcx.glossary.hbp + - nhcx.glossary.tms + - nhcx.glossary.bis + - shared.glossary.hmis + - shared.glossary.ayushman-card + errors: + - nhcx.error.payr-1256 + - nhcx.error.payr-1271 + - nhcx.error.payr-1254 + - nhcx.error.payr-1365 +--- + +# PMJAY on NHCX and how it differs from the standard exchange + +## In plain words + +[PMJAY](../glossary/pmjay.md) is the government health assurance scheme. Its claims travel on NHCX like any other insurer's. A hospital system that works with private insurers on NHCX uses the same calls for PMJAY. + +The scheme adds rules on top. Treatments are fixed packages at fixed rates. The patient must prove they are present with a fingerprint, iris or face scan. Clinical records go as structured data. And the payer asks its questions inside its responses. + +## Before you start + +Build and test the standard NHCX calls first. See [the claim cycle](./claim-cycle.md). To start PMJAY work in the sandbox, share your participant ID, client ID and registry ID with the NHCX team. The team adds your participant to the PMJAY staging environment. + +## What happens + +### Same calls, four added duties + +| Call | Standard exchange | PMJAY | +|---|---|---| +| Insurance plan | Useful | The backbone: packages, rates, conditions, forms and documents come from it | +| Get policy, eligibility | Same | Same | +| Preauthorisation | Same | Same, after biometric authentication of the patient | +| Payer queries | Communication request | Query inside the ClaimResponse, answered with a query workflow id | +| Claim | Same | Same, with discharge details inside the claim | +| Payment notice, status | Same | Same | + +### The four duties + +1. **Use the [insurance plan](./insurance-plan.md).** Fetch it per hospital and policy, cache it, refresh it weekly, and build preauthorisations and claims from it. +2. **Authenticate the patient.** At registration, before preauthorisation, at every cycle of a cyclic treatment, and at discharge. See [biometric authentication](./biometric-authentication.md). +3. **Send structured records.** Supporting clinical records go as ABDM health information bundles inside the claim, not as scanned files. See [FHIR in NHCX](./fhir-in-nhcx.md). +4. **Handle queries inside responses.** See [queries and communication](./queries-and-communication.md). + +### Scheme rules that change your system + +- Treatment is package based. Rates come from the plan, not from your bill. +- PMJAY is fully cashless. No co-payment is allowed on any package. +- A preauthorisation cannot be raised more than one day before admission. +- There is no separate discharge workflow. Discharge details go inside the claim. +- A claim cannot be cancelled. A reprocess can be raised once per claim. +- Standard treatment guideline questionnaires from the plan must be answered in the preauthorisation and the claim. + +Once PMJAY integration is complete, the production keys you receive also work for private insurers. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A PMJAY payer needs a missing report on your preauthorisation. How does the request reach you, and how do you answer it? +2. Your system submits a PMJAY preauthorisation with no biometric token and no consent questionnaire. What happens? + +## When it goes wrong + +**No biometric authentication and no consent questionnaire.** The PMJAY payer refuses a new preauthorisation with [PAYR-1256](../errors/payr-1256.md) or [PAYR-1271](../errors/payr-1271.md). + +**Treatment guideline questionnaire missing.** The payer refuses the preauthorisation with [PAYR-1254](../errors/payr-1254.md), and the claim with [PAYR-1365](../errors/payr-1365.md). + +**Waiting for a communication request that never comes.** PMJAY queries arrive inside the `ClaimResponse`. Handle `outcome` `partial` with a queried reason. + +**Rates taken from your own tariff.** Amounts above the package rate are cut back to it or refused. Price from the plan. diff --git a/catalogue/nhcx/concepts/policy-linking.md b/catalogue/nhcx/concepts/policy-linking.md new file mode 100644 index 000000000..f9e67b484 --- /dev/null +++ b/catalogue/nhcx/concepts/policy-linking.md @@ -0,0 +1,125 @@ +--- +id: nhcx.concept.policy-linking +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Linking an ABHA to an insurance policy +summary: >- + A payer links a person's national health account number to the policies they hold, + so a hospital can look up the patient's cover from that number alone and address + its claims to the right processor. +sources: +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/b885e59891fedc7e725c.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection.zip + hash: sha256:2d082f244ee41d137a62af82380dcd2d5db9ebbab66824fd54a23c506d4d9a7f + fetched: '2026-09-14' + note: AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection, row 16 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Get Policies request body. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, item 7. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 7.4 Usage Guidelines, Discovery. +verified: + status: unverified +related: + flows: + - nhcx.flow.policy-link-and-delink + endpoints: + - nhcx.endpoint.participant-link-abha-policy + - nhcx.endpoint.v2-participant-link-abha-policy + - nhcx.endpoint.participant-delink-abha-policy + - nhcx.endpoint.v2-participant-delink-abha-policy + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.v2-participant-get-policies + tests: + - nhcx.test.payer-uc-01 + - nhcx.test.payer-uc-02 + - nhcx.test.payer-uc-03 + - nhcx.test.provider-uc-02 + concepts: + - nhcx.concept.participant-roles + - nhcx.concept.participant-code + - nhcx.concept.coverage-eligibility-purposes + - nhcx.concept.access-control + glossary: + - shared.glossary.abha-number + - shared.glossary.abha + - nhcx.glossary.tpa + - nhcx.glossary.payer +--- + +# Linking an ABHA to an insurance policy + +## In plain words + +When a person buys a health policy, the insurer can link it to the person's [ABHA number](../../shared/glossary/abha-number.md). After that, any hospital on NHCX can ask "which policies does this ABHA hold?" and get an answer. + +The answer also says who processes claims on each policy: the insurer itself, or a [TPA](../glossary/tpa.md) acting for it. That is the participant a hospital must address. + +## Before you start + +A payer needs its own participant code. Every insurer has one, even when a TPA handles its claims. See [participant roles](./participant-roles.md). + +## What happens + +```mermaid +graph LR + PY["Payer or TPA"] -->|link: ABHA, member ID,
payerid, processingid, policies| REG[("Policy links
in the participant service")] + H["Hospital"] -->|get policies: ABHA or mobile| REG + REG -->|policies with payerid, processingid| H + H -->|claims addressed to processingid| X["NHCX"] +``` + +### Linking + +The payer calls `/participant/link/abha/policy` on the participant service. The request carries: + +| Field | Holds | +|---|---| +| `requestid` | A UUID for this request | +| `abhanumber` | The person's ABHA number | +| `mobilenumber` | The person's mobile number | +| `memberid` | The payer's member ID for the person | +| `payerid` | The insurer's participant code | +| `processingid` | The participant code of whoever processes claims: the TPA, or the insurer itself | +| `policies` | A list of `productid` and `productname` pairs | + +### Looking up + +A hospital calls `/participant/get/policies` with the ABHA number or mobile number. Each policy comes back with its payer and processor. The hospital puts the `processingid` in `x-hcx-recipient_code` for eligibility, preauthorisation and claim messages on that policy. + +If the lookup returns nothing, the hospital can ask the payer directly with a coverage eligibility check using the `discovery` purpose. See [coverage eligibility purposes](./coverage-eligibility-purposes.md). + +### De-linking + +`/participant/delink/abha/policy` removes policies from the link. Only the participant named as `payerid` or `processingid` when the link was made may de-link it. NHCX reads the client ID from the session token and compares it with the one that registered that participant. + +When an insurer moves to a new TPA, it de-links its existing policies and links them again with the new TPA's participant code as `processingid`. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. The get policies response shows `payerid` A and `processingid` B. To which participant does your hospital send the claim, and why? +2. A TPA stops handling an insurer's policies. What must happen to the existing links, and who is allowed to do it? + +## When it goes wrong + +**Claims addressed to the insurer.** A provider that uses the `PayerID` instead of the `processingID` sends claims to a participant that does not process them. + +**De-link refused.** The session token belongs to a client other than the one registered for `payerid` or `processingid`. Generate the token with the credentials used when that participant was created. + +**Policy not in the link.** De-linking a policy the link does not hold fails with "There is no policies with requested details". + +**Nothing found for the patient.** Fall back to a `discovery` eligibility check. diff --git a/catalogue/nhcx/concepts/protocol-headers.md b/catalogue/nhcx/concepts/protocol-headers.md new file mode 100644 index 000000000..b7ae4c2d9 --- /dev/null +++ b/catalogue/nhcx/concepts/protocol-headers.md @@ -0,0 +1,130 @@ +--- +id: nhcx.concept.protocol-headers +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: The x-hcx protocol headers +summary: >- + The x-hcx headers inside the sealed envelope tell the exchange who is sending, + who must receive, which conversation the message belongs to and what state it + is in. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Protected Header table and Status Description. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2 ProtocolResponse. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 3, Q4. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error, PAYR-1005 description. +verified: + status: unverified +related: + concepts: + - nhcx.concept.message-identifiers + - nhcx.concept.status-lifecycle + - nhcx.concept.workflow-codes + - nhcx.concept.jwe-envelope + - nhcx.concept.participant-code + - nhcx.concept.retries-and-expiry + glossary: + - nhcx.glossary.protected-header + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.workflow-id + - shared.glossary.abha-number + errors: + - nhcx.error.nhcx-1005 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1018 + - nhcx.error.nhcx-1006 + flows: + - nhcx.flow.send-a-sealed-request +--- + +# The x-hcx protocol headers + +## In plain words + +The protocol headers are the address and tracking label on every sealed message. They live inside the [protected header](../glossary/protected-header.md), and every name starts with `x-hcx-`. + +NHCX reads them to route and audit the message. It never reads the bundle underneath. + +## Before you start + +Read [the JWE envelope](./jwe-envelope.md) first. You need your own and the recipient's [participant codes](./participant-code.md). + +## What happens + +### The headers to send on every request + +Send all of these. Together they satisfy every published header list. + +| Header | Holds | +|---|---| +| `x-hcx-sender_code` | Your participant code | +| `x-hcx-recipient_code` | The participant that must act on the message | +| `x-hcx-api_call_id` | A new UUID for this one call. See [message identifiers](./message-identifiers.md) | +| `x-hcx-request_id` | A UUID for the originating request | +| `x-hcx-correlation_id` | The UUID of the conversation | +| `x-hcx-workflow_id` | The stage of the case. See [workflow codes](./workflow-codes.md) | +| `x-hcx-timestamp` | When you sent it, from a synchronised clock | +| `x-hcx-status` | The message state. See below | +| `x-hcx-ben-abha-id` | The beneficiary's [ABHA number](../../shared/glossary/abha-number.md) | + +Each UUID is a random 36 character universally unique identifier. + +### Status values + +| Who sends | `x-hcx-status` | +|---|---| +| The party starting a request | `request.initiated` | +| The party answering, final answer | `response.complete` | +| The party answering, partial answer or acknowledgement | `response.partial` | +| The party answering, rejection or error | `response.error` | + +[The status lifecycle](./status-lifecycle.md) covers the states NHCX adds itself. + +### Optional headers + +| Header | Holds | +|---|---| +| `x-hcx-debug_flag` | `Error`, `Info` or `Debug`: asks for debug detail. Servers may ignore it | +| `x-hcx-error_details` | An object with `code`, `message` and `trace` | +| `x-hcx-debug_details` | The same shape, for debugging | + +### Extra fields on an error response + +A `ProtocolResponse` repeats the protocol headers in the clear and adds `x-hcx-redirect_to`, `x-hcx-domain-header` (with `use_case_name` and `amt_processed`) and `x-hcx-entity-type`. The entity type is one of `coverageeligibility`, `preauth`, `claim`, `task`, `payment` and `insuranceplan`. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. You answer a payer's communication request. What goes in `x-hcx-status`, and which header tells NHCX which conversation your answer belongs to? +2. Which three headers must hold fresh random UUIDs when you start a new preauthorisation? + +## When it goes wrong + +**Missing or malformed header.** NHCX refuses the envelope with [NHCX-1005](../errors/nhcx-1005.md). + +**Wrong status value.** NHCX refuses a status it does not recognise with [NHCX-1011](../errors/nhcx-1011.md). Use the four values above exactly, in lower case. + +**ABHA number in the wrong format.** NHCX refuses it with [NHCX-1018](../errors/nhcx-1018.md). The error message names the expected format, `XX-XXXX-XXXX-XXXX`. + +**Reused correlation ID.** A new request with a correlation ID NHCX has already seen is refused with [NHCX-1006](../errors/nhcx-1006.md). + +**Stale timestamp.** A payer refuses a request whose timestamp is 24 hours or more away from its own clock. See [retries and expiry](./retries-and-expiry.md). diff --git a/catalogue/nhcx/concepts/queries-and-communication.md b/catalogue/nhcx/concepts/queries-and-communication.md new file mode 100644 index 000000000..b52ba1051 --- /dev/null +++ b/catalogue/nhcx/concepts/queries-and-communication.md @@ -0,0 +1,124 @@ +--- +id: nhcx.concept.queries-and-communication +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Payer queries and the communication cycle +summary: >- + A payer asks a hospital for more information in one of two ways, a query inside + its response or a separate communication request, and each needs a different answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1 query and query response rows. +- url: https://hcxsbx.abdm.gov.in/images/b6bd99dab49a5e928ea3.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Overview.pdf + hash: sha256:c95469758a25cb8aca8c47757d8b18b4dedb8b4d42669663cff7343205f77fda + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Overview, row 27 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Pages 7-8 Query flow. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 8.4.2 Resubmission. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Communication use case reason code tables. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Communication. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.communication-request + - nhcx.endpoint.communication-on-request + callbacks: + - nhcx.callback.communication-request + - nhcx.callback.communication-on-request + concepts: + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.message-identifiers + glossary: + - nhcx.glossary.communication-request + errors: + - nhcx.error.payr-1019 + - nhcx.error.payr-1218 + - nhcx.error.payr-1219 + - nhcx.error.payr-1303 + - nhcx.error.payr-1304 + fhir: + - nhcx.fhir.query-update + tests: + - nhcx.test.provider-uc-08 + - nhcx.test.payer-uc-10 +--- + +# Payer queries and the communication cycle + +## In plain words + +Payers often need more before they decide. A missing report, an unclear diagnosis, a bill that does not add up. + +There are two ways a payer asks. It can answer your preauthorisation or claim with a query instead of a decision. Or it can send a separate [communication request](../glossary/communication-request.md). Your system must recognise both and answer each the right way. + +## Before you start + +Read [the claim cycle](./claim-cycle.md) and [workflow codes](./workflow-codes.md). + +## What happens + +```mermaid +graph TD + subgraph "Channel 1: query inside the response" + R1["Provider: preauth or claim"] --> Q1["Payer: ClaimResponse
outcome partial, queried
workflow 24 or 27"] + Q1 --> A1["Provider: same bundle, updated
workflow 19 or 151"] + A1 --> D1["Payer: decision"] + end + subgraph "Channel 2: communication request" + Q2["Payer: /v1/communication/request
Task with CommunicationRequest"] --> A2["Provider: /v1/communication/on_request
Task with Communication"] + end +``` + +### Channel 1: a query inside the response + +The payer answers your preauthorisation or claim with a `ClaimResponse` whose `outcome` is `partial` and whose adjudication reason is `queried`. The workflow id says which stage: `24` for a preauthorisation, `241` for an enhancement, `27` for a claim. + +You answer by sending the same kind of bundle again, updated with what was asked, to the same path. Use the query response workflow id: `19` for a preauthorisation, `131` for an enhancement, `151` for a claim. Do not use a resubmission code. A resubmission replaces all earlier instances of the request. + +Under PMJAY, this is how every query on a preauthorisation or claim arrives. The PMJAY payer does not use the communication request for queries. + +### Channel 2: a communication request + +The payer calls `/v1/communication/request` with a `Task` bundle that carries a `CommunicationRequest`. Your system answers on `/v1/communication/on_request` with a `Task` bundle whose input is a `Communication`, carrying the documents or information asked for. The request and your answer share one correlation id. + +A standard payer uses this channel to ask for additional documents during a claim cycle. The PMJAY payer uses it for other notices, named in `Task.reasonCode`: `tatquery`, `grievance`, `walletupdate`, `policychange`, `additionalinfo` and `claimArbitration`. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A PMJAY `ClaimResponse` arrives with workflow id `27`. Which path do you answer on, with which workflow id, and with what bundle? +2. A communication request arrives from a standard payer during a claim. Which path carries your answer, and what must stay the same as in the request? + +## When it goes wrong + +**Answering too late.** A standard payer closes the query with [PAYR-1019](../errors/payr-1019.md), information not received in time. + +**Answering a case that is not queried.** The PMJAY payer refuses a query update with [PAYR-1219](../errors/payr-1219.md), case not queried, or [PAYR-1218](../errors/payr-1218.md) for a preauthorisation. For a claim the codes are [PAYR-1304](../errors/payr-1304.md) and [PAYR-1303](../errors/payr-1303.md). + +**Using the resubmission code for a query answer.** Workflow id `121` replaces the preauthorisation instead of answering the query. Use `19`. + +**Treating a communication request as a decision.** A communication request never approves or rejects. The decision still arrives on the preauthorisation or claim path. diff --git a/catalogue/nhcx/concepts/reprocess-and-cancel.md b/catalogue/nhcx/concepts/reprocess-and-cancel.md new file mode 100644 index 000000000..46801a0fe --- /dev/null +++ b/catalogue/nhcx/concepts/reprocess-and-cancel.md @@ -0,0 +1,132 @@ +--- +id: nhcx.concept.reprocess-and-cancel +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Reprocess, cancel and the task resource +summary: >- + After a decision, a hospital sends a task request to dispute a rejection, claim + a shortfall or cancel a preauthorisation, and the payer answers with a task that + points at a new decision. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sections 22 and 23 Erroneous and Reprocess. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Preauth cancel and reprocess Task tables. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 8.4.5 Cancellation; 8.5 functional points. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Value sets, Task codes and input types. +verified: + status: unverified +related: + flows: + - nhcx.flow.claim-reprocess + - nhcx.flow.preauth-cancel + endpoints: + - nhcx.endpoint.task-submit + - nhcx.endpoint.task-on-submit + callbacks: + - nhcx.callback.task-submit + - nhcx.callback.task-on-submit + fhir: + - nhcx.fhir.task + - nhcx.fhir.preauth-cancel + glossary: + - nhcx.glossary.reprocess + - nhcx.glossary.crc + errors: + - nhcx.error.payr-1017 + - nhcx.error.payr-1018 + - nhcx.error.payr-1252 + - nhcx.error.payr-1253 + - nhcx.error.payr-1257 + - nhcx.error.payr-1258 + concepts: + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + - nhcx.concept.grievance-redressal + tests: + - nhcx.test.provider-uc-12 + - nhcx.test.payer-uc-14 +--- + +# Reprocess, cancel and the task resource + +## In plain words + +Sometimes a hospital needs to act on a decision already made. The claim was rejected and the hospital disagrees. The claim was paid, but less than it should have been. Or the planned treatment is not going ahead, so the preauthorisation should be cancelled. + +All three are requests to the payer to do something, so they travel as a FHIR `Task` on `/v1/task/submit`. The payer answers on `/v1/task/on_submit`. + +## Before you start + +You need the earlier decision: the claim or preauthorisation number and the payer's response. Read [the claim cycle](./claim-cycle.md). + +## What happens + +### The three requests + +| Request | When | `Task.code` | Reason | Workflow id | +|---|---|---|---|---| +| [Reprocess](../glossary/reprocess.md) | A claim was fully rejected | `reprocess` | Why the rejection is disputed | `36` | +| Erroneous claim | A claim was paid, but short | `reprocess` | `partialpayment` | `36` | +| Cancel | A preauthorisation should not proceed | `cancel` | Why, for example `treatmentplanchanged` | `PC01` | + +`Task.code` comes from `http://terminology.hl7.org/CodeSystem/financialtaskcode`, which also holds `release` and `nullify`. Reason codes come from `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code`. + +### What the task carries + +- `Task.status` `requested` and `Task.intent` `order`. +- An input `claimNumber` with the case number, and for a preauthorisation an input `initimationNumber`, spelt that way. +- A supporting document. It is mandatory for a reprocess and for an erroneous claim. +- For an erroneous claim only, the amount: never more than the gap between claimed and paid. + +### The answer + +```mermaid +graph LR + T["Provider Task
/v1/task/submit"] --> P["Payer re-adjudicates"] + P --> TR["Payer Task, status completed
/v1/task/on_submit"] + TR -->|output valueReference| CR["ClaimResponse
the new decision"] +``` + +The answer is a `Task` with `status` `completed`. Its `output` points at a `ClaimResponse`, which you read exactly like any other decision. + +### Rules under PMJAY + +- A reprocess or erroneous claim can be raised once per claim. +- Reprocess needs no payment notice and can follow the rejection at once. +- An erroneous claim waits for payment settled, workflow id `33`, and your acknowledgement of it. +- The [Claim Review Committee (CRC)](../glossary/crc.md) decides reprocess cases, and its decision is final. No erroneous claim can follow a CRC decision. +- A preauthorisation can be cancelled only while it is submitted or approved. A claim cannot be cancelled. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A claim for 10,000 was paid at 6,000. Which request do you raise, with which reason, and what is the largest amount you may ask for? +2. The answer to your reprocess arrives on `/v1/task/on_submit`. Where in the bundle is the new decision? + +## When it goes wrong + +**Wrong combination of code, reason and input.** The PMJAY payer refuses the task with "Invalid input, code and reason code received". Its structure checks use [PAYR-1017](../errors/payr-1017.md) for "No task code received" and [PAYR-1018](../errors/payr-1018.md) for "No task reason code received". + +**Missing case number.** The payer refuses a task without a valid `claimNumber` or `initimationNumber`. + +**Cancelling too late.** The PMJAY payer refuses to cancel a case that is not active ([PAYR-1252](../errors/payr-1252.md)), already cancelled ([PAYR-1253](../errors/payr-1253.md)), or in payment ([PAYR-1257](../errors/payr-1257.md), [PAYR-1258](../errors/payr-1258.md)). + +**Raising an erroneous claim before settlement.** Wait for workflow id `33`, acknowledge it, then raise it. diff --git a/catalogue/nhcx/concepts/retries-and-expiry.md b/catalogue/nhcx/concepts/retries-and-expiry.md new file mode 100644 index 000000000..b4894bef1 --- /dev/null +++ b/catalogue/nhcx/concepts/retries-and-expiry.md @@ -0,0 +1,112 @@ +--- +id: nhcx.concept.retries-and-expiry +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Gateway retries and the 24 hour expiry window +summary: >- + The exchange retries a delivery up to five times and then drops the request and + tells the sender, and a payer refuses any request whose timestamp is 24 hours + or more out. +sources: +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1 Error scenario. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 4, Q14. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, item 8. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error, PAYR-1005. +verified: + status: unverified +related: + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.message-identifiers + - nhcx.concept.protocol-headers + - nhcx.concept.status-lifecycle + - nhcx.concept.error-code-spaces + callbacks: + - nhcx.callback.error + flows: + - nhcx.flow.report-a-processing-error + errors: + - nhcx.error.payr-1005 + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback +--- + +# Gateway retries and the 24 hour expiry window + +## In plain words + +NHCX does not give up on the first failed delivery. If the recipient does not accept a message, NHCX sends it again, up to five times. After that it drops the request and tells the sender through the sender's `/v1/error` endpoint. + +Messages also go stale. A payer refuses a request whose timestamp is 24 hours or more away from the payer's own clock. + +## Before you start + +Read [the 202 acknowledgement](./synchronous-acknowledgement.md). Your system needs a `/v1/error` endpoint to hear about requests that were dropped. + +## What happens + +### The retry loop + +```mermaid +graph TD + D["NHCX delivers the message"] --> A{"202 with the acceptance body
within 30 seconds?"} + A -->|yes| OK["Delivered"] + A -->|no, or rejected| R{"Fewer than 5 attempts?"} + R -->|yes| D + R -->|no| T["Request terminated
and deleted"] + T --> E["Rejection sent to the sender's /v1/error"] +``` + +NHCX counts a delivery as failed when the recipient rejects it, answers with the wrong format, or does not answer with 202 within 30 seconds. The interval between attempts is not published. + +After the fifth failure, NHCX deletes the request for that correlation id and marks the correlation id inactive. The sender learns about it on `/v1/error`. + +### What this means for each side + +| You are | Your duty | +|---|---| +| The recipient | Accept within 30 seconds with the right body, or the same message arrives again | +| The recipient | Treat a repeat of a message you already accepted as the same message. Key your inbox on `x-hcx-api_call_id` and `x-hcx-correlation_id` | +| The sender | Implement `/v1/error`, record the rejection and alert your users | +| The sender | Resend a dropped request with a new correlation id | + +### The 24 hour window + +`x-hcx-timestamp` must be the time you actually send the message. The PMJAY payer refuses a request whose timestamp is 24 hours or more away from its current time. Keep your server clock synchronised, and never reuse a stored timestamp on a resend. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. Your endpoint was down for an hour. A payer's claim response was delivered during that time. What did NHCX do, and how does the payer find out? +2. You resend a request that was dropped yesterday, with the same headers. Name two things that make it fail. + +## When it goes wrong + +**The same message processed twice.** Your acknowledgement arrived late, so NHCX retried. Deduplicate on the identifiers above before you act. + +**Resending with the old correlation id.** NHCX refuses it with [NHCX-1006](../errors/nhcx-1006.md). A dropped request's correlation id is inactive. Use a new one. + +**Stale timestamp.** The PMJAY payer refuses it with the message "Maximum time limit exceeded in receiving the request". On the standard payer list [PAYR-1005](../errors/payr-1005.md) means something else, so read the message text. + +**Receiver unreachable.** The sender sees [NHCX-1001](../errors/nhcx-1001.md). See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). diff --git a/catalogue/nhcx/concepts/session-token.md b/catalogue/nhcx/concepts/session-token.md new file mode 100644 index 000000000..073089b76 --- /dev/null +++ b/catalogue/nhcx/concepts/session-token.md @@ -0,0 +1,114 @@ +--- +id: nhcx.concept.session-token +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: The session token every NHCX call carries +summary: >- + Your system trades its client credentials for a short-lived bearer token and sends + it on every call, while the exchange proves itself to you with a token of its + own. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/data-security-and-privacy/api-security + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__api-security.md + hash: sha256:9fe2d5a643356558131e5de801b5f325b76f80aa48e931ee6b77e088dd90a65c + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/data-security-and-privacy/api-security, text as shown on the site. API Security. +- url: https://hcxsbx.abdm.gov.in/images/54d18468412741b759f3.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Authenticating with NHCX.pdf + hash: sha256:0ea90b635634844aaf8981e917cbf8b765ddd83a340f3c934883912599a62d8b + fetched: '2026-09-14' + note: Authenticating with NHCX, row 3 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 5, Q20. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, items 6 and 9. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.get-session + - nhcx.endpoint.session-token + decisions: + - nhcx.decision.session-endpoint + errors: + - nhcx.error.nhcx-401 + troubleshooting: + - nhcx.troubleshooting.everything-returns-401 + tests: + - nhcx.test.provider-uc-04 + - nhcx.test.payer-uc-06 + concepts: + - nhcx.concept.participant-registry + - nhcx.concept.jwe-envelope + glossary: + - shared.glossary.sandbox + - shared.glossary.m1 +--- + +# The session token every NHCX call carries + +## In plain words + +Every call your system makes to NHCX carries a session token. The token tells NHCX which participant is calling. + +You get the token by sending your client ID and client secret to a session endpoint. The token expires after a short time, so your system fetches a new one before it lapses. + +## Before you start + +You need a client ID and client secret from the ABDM [sandbox](../../shared/glossary/sandbox.md) registration. If your system already has credentials for ABDM [Milestone 1](../../shared/glossary/m1.md), the same credentials work for NHCX. + +## What happens + +Two tokens are in play, one in each direction. + +| Direction | Who issues it | How it is checked | +|---|---|---| +| Your system to NHCX | NHCX, from your client ID and secret | NHCX checks it on every call | +| NHCX to your endpoint | NHCX signs its own token with RS256 | You check it with the NHCX instance's public key | + +```mermaid +graph LR + C["Client ID + secret"] -->|session endpoint| T["Bearer token
short lifetime"] + T -->|header on every call| X["NHCX"] + X -->|its own signed token
on every delivery| E["Your endpoint"] +``` + +### Getting and keeping a token + +- Call the session endpoint with your credentials. Which endpoint to call is covered in [choosing the session endpoint](../decisions/session-endpoint.md). +- Read the lifetime from the response, `expiresIn` or `expires_in` depending on the endpoint. +- Renew the token before it lapses, from a background task, so no request goes out with an expired token. +- Send it as `Bearer `. Each endpoint atom names the request header that carries it. + +### Revocation + +NHCX revokes access by issuing you a new client secret. Your old tokens stop working, and you must fetch a new token with the new secret. + +### The token NHCX sends you + +When NHCX delivers a message to your endpoint, it presents a token it signed itself with `alg` `RS256`. The claims are `jti`, `iss`, `sub`, `iat` and `exp`, with `iss` and `sub` both naming the NHCX instance. Validate the signature before you trust the delivery. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. Your token was issued at 10:00 and a call at 10:25 returns HTTP 401. What happened, and what does your system do before retrying? +2. Which token does your callback endpoint check when NHCX delivers a message, and whose key verifies it? + +## When it goes wrong + +**Expired token.** HTTP 401 with the message "Sender is not authorized to execute the operation" means the session token has expired. Fetch a new one and retry. See [NHCX-401](../errors/nhcx-401.md). + +**Missing `Bearer` prefix.** The header value must start with `Bearer ` followed by the token. A bare token is refused with 401. + +**Old secret.** After NHCX issues a new client secret, calls with tokens from the old secret fail. Update the secret in your configuration. + +**Every call fails.** Work through [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/concepts/status-lifecycle.md b/catalogue/nhcx/concepts/status-lifecycle.md new file mode 100644 index 000000000..ac5f42026 --- /dev/null +++ b/catalogue/nhcx/concepts/status-lifecycle.md @@ -0,0 +1,114 @@ +--- +id: nhcx.concept.status-lifecycle +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Status values and how a request moves through them +summary: >- + A message moves through states set by the sender, by the exchange and by the responder, + and each state is visible in the status header or the acknowledgement. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Status Description (Protected Header). +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Status. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1. +verified: + status: unverified +related: + concepts: + - nhcx.concept.protocol-headers + - nhcx.concept.workflow-codes + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.retries-and-expiry + endpoints: + - nhcx.endpoint.status + - nhcx.endpoint.on-status + callbacks: + - nhcx.callback.status + - nhcx.callback.on-status + flows: + - nhcx.flow.status-check + decisions: + - nhcx.decision.status-poll-or-wait + errors: + - nhcx.error.nhcx-1011 + tests: + - nhcx.test.provider-uc-13 +--- + +# Status values and how a request moves through them + +## In plain words + +Every message carries a status. The status says where the message is in its life: newly sent, waiting at the exchange, delivered, or answered. + +Three parties set statuses. The sender marks a new request. NHCX tracks delivery. The responder marks its answer as final, partial or an error. + +## Before you start + +Read [the protocol headers](./protocol-headers.md) and [the four message legs](./four-message-legs.md). + +## What happens + +```mermaid +stateDiagram-v2 + [*] --> initiated: sender sets request.initiated + initiated --> queued: NHCX accepts the envelope + queued --> dispatched: the recipient's system received it + queued --> stopped: delivery failed after retries + dispatched --> partial: responder sets response.partial + dispatched --> complete: responder sets response.complete + dispatched --> error: responder sets response.error + partial --> complete + complete --> [*] + error --> [*] + stopped --> [*] +``` + +| Status | Set by | Meaning | +|---|---|---| +| `request.initiated` | The sender, in `x-hcx-status` | Starts a request cycle | +| `request.queued` | NHCX | Accepted and waiting for delivery | +| `request.dispatched` | NHCX | Reached the recipient's system | +| `request.stopped` | NHCX | Stopped after failed delivery attempts | +| `response.partial` | The responder, in `x-hcx-status` | A partial answer or an acknowledgement | +| `response.complete` | The responder, in `x-hcx-status` | The final answer, closing the cycle | +| `response.error` | The responder, in `x-hcx-status` | The request was rejected or failed | + +You only ever put `request.initiated`, `response.partial`, `response.complete` or `response.error` in `x-hcx-status`. The `request.queued`, `request.dispatched` and `request.stopped` states belong to NHCX. You see them in acknowledgements and status answers. + +### Message status is not claim status + +`x-hcx-status` tracks the message. The claim's own progress lives in the [workflow id](./workflow-codes.md) and in the FHIR response, for example `ClaimResponse.outcome`. A `response.complete` message can carry a rejection. + +### Asking for a status + +Send `/v1/status` with the sealed request whose status you want. NHCX answers on your `/v1/on_status` endpoint with the protocol headers of that request. Whether to poll or wait is covered in [poll or wait](../decisions/status-poll-or-wait.md). + +## How you know it worked + +You have understood this when you can answer both of these. + +1. You sent a claim an hour ago and a status check shows it `request.dispatched`. Has the payer decided? Where would the decision show? +2. A payer's answer arrives with `response.complete` and a rejected claim inside. Is that a protocol error? Which fields tell you it was rejected? + +## When it goes wrong + +**Invented status values.** NHCX refuses an `x-hcx-status` it does not recognise with [NHCX-1011](../errors/nhcx-1011.md). Use the exact lower case values above. + +**Treating `response.partial` as final.** A partial answer means more is coming, or the payer wants something from you. Keep the case open until a `response.complete` or `response.error` arrives. + +**Reading claim outcome from the message status.** Read the workflow id and the FHIR outcome for the business decision. diff --git a/catalogue/nhcx/concepts/synchronous-acknowledgement.md b/catalogue/nhcx/concepts/synchronous-acknowledgement.md new file mode 100644 index 000000000..a600addde --- /dev/null +++ b/catalogue/nhcx/concepts/synchronous-acknowledgement.md @@ -0,0 +1,119 @@ +--- +id: nhcx.concept.synchronous-acknowledgement +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: The 202 acknowledgement and the 30 second rule +summary: >- + Every delivery on the exchange is answered at once with a short accepted reply, + within 30 seconds, and the real answer follows later as a separate message. +sources: +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 4, Q12 and Q14. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Flow and Error Handling. +verified: + status: unverified +related: + concepts: + - nhcx.concept.four-message-legs + - nhcx.concept.retries-and-expiry + - nhcx.concept.status-lifecycle + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.payer-process-a-request + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.callback-url-rejected + sandbox: + - nhcx.sandbox.callback-url-requirements + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1015 + - nhcx.error.nhcx-1017 +--- + +# The 202 acknowledgement and the 30 second rule + +## In plain words + +On NHCX, whoever receives a message answers it at once with HTTP 202 Accepted. The 202 says "I have it". It does not say "I have done it". + +This applies in both directions. NHCX answers your call with 202. Your system answers NHCX with 202 when NHCX delivers a message to you, and it must do so within 30 seconds. + +## Before you start + +Read [the four message legs](./four-message-legs.md). Your endpoint must be reachable from NHCX. See [the callback URL requirements](../sandbox/callback-url-requirements.md). + +## What happens + +### Two acknowledgements + +| When | Who sends the 202 | What it means | +|---|---|---| +| You call NHCX | NHCX | Your envelope passed validation and is queued for delivery | +| NHCX delivers a message to your endpoint | Your system | You received it and will process it | + +If NHCX finds a problem with your envelope, it answers with an error instead of 202. + +### Your acknowledgement body + +When NHCX delivers a message to you, return HTTP 202 with this body: + +```json +{ + "timestamp": "DD/MM/YYYY hh:mm:ss:sss", + "api_call_id": "UUID", + "correlation_id": "UUID", + "result": { + "sender_code": "PYRXX@hcx", + "recipient_code": "INXXXXX@hcx", + "entity_type": "coverageeligibility/preauth/claim/task/payment/insuranceplan", + "protocol_status": "request.queued/request.dispatched/request.error" + }, + "error": { "code": "", "message": "" } +} +``` + +`entity_type` takes one of `coverageeligibility`, `preauth`, `claim`, `task`, `payment` or `insuranceplan`. `protocol_status` takes one of `request.queued`, `request.dispatched` or `request.error`. The `error` fields stay empty when you accept. + +### Acknowledge first, work later + +```mermaid +graph LR + D["Delivery arrives"] --> C["Check it is a well formed envelope"] + C --> A["Return 202 with the body
within 30 seconds"] + A --> Q["Queue it"] + Q --> W["Decrypt, validate, process"] + W --> R["Send your answer later
on the on_ path"] +``` + +Decrypting, validating FHIR and adjudicating can take longer than 30 seconds. So accept first, then do the work from a queue. If the work fails, send your answer as a `ProtocolResponse` with `x-hcx-status` set to `response.error`. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. Your callback handler decrypts and stores the bundle before it replies, and sometimes that takes 40 seconds. What does NHCX conclude, and what will it do next? +2. NHCX returns 202 to your claim submission. Which of the four legs does that close? + +## When it goes wrong + +**Replying late.** If NHCX gets no 202 within 30 seconds, it treats the delivery as failed and retries. See [retries and expiry](./retries-and-expiry.md). + +**Replying with the wrong body or status.** A reply that does not follow the acceptance format counts as an error, and NHCX retries the same request. [NHCX-1015](../errors/nhcx-1015.md) and [NHCX-1017](../errors/nhcx-1017.md) report an invalid response from the receiver. + +**Endpoint unreachable.** NHCX reports [NHCX-1001](../errors/nhcx-1001.md) to the sender. See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). diff --git a/catalogue/nhcx/concepts/what-nhcx-is.md b/catalogue/nhcx/concepts/what-nhcx-is.md new file mode 100644 index 000000000..3308da68e --- /dev/null +++ b/catalogue/nhcx/concepts/what-nhcx-is.md @@ -0,0 +1,140 @@ +--- +id: nhcx.concept.what-nhcx-is +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: What the National Health Claims Exchange is and what it does not do +summary: >- + The claims exchange is a switch that carries sealed claim messages between hospitals + and insurers; it routes and checks envelopes but never reads or decides a claim. +sources: +- url: https://hcxsbx.abdm.gov.in/#/introduction-NHCX + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/introduction-NHCX.md + hash: sha256:39f92cfaa00639c278575132b12064ff6bfd557f16f324f13d8c2ccccf6153bb + fetched: '2026-09-14' + note: Site page /introduction-NHCX, text as shown on the site. Introduction to NHCX. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. NHCX Protocols and Message Flow. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__message-security-and-integrity.md + hash: sha256:3768fd89932e4081c9e03a8695619bcaf70c641e28bb55a77eec090bb926eeb3 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity, text as shown on the site. Message Security and Integrity. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/data-security-and-privacy/audit-and-reporting + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__audit-and-reporting.md + hash: sha256:3805b33513ec0863294014053849d921b6fc4093d1cd0356a5e10b9eb54ef6c6 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/data-security-and-privacy/audit-and-reporting, text as shown on the site. Audit and Reporting. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 4, Q12. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 8.2, page 18. +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications.md + hash: sha256:56234dd8a55fe4eb9dd852779b22b522b04760c9bec5c263d5e9bc3ac2c6f167 + fetched: '2026-09-14' + note: Site page /domain-specifications, text as shown on the site. ABDM sandbox onboarding section. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-roles + - nhcx.concept.four-message-legs + - nhcx.concept.claim-cycle + - nhcx.concept.jwe-envelope + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.audit-and-non-repudiation + glossary: + - shared.glossary.nhcx + - shared.glossary.abdm + - shared.glossary.fhir + - shared.glossary.uhi + - shared.glossary.hie-cm + - shared.glossary.hmis + - nhcx.glossary.payer + - nhcx.glossary.provider + - nhcx.glossary.tpa + - nhcx.glossary.adjudication + flows: + - nhcx.flow.sandbox-onboarding + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + errors: + - nhcx.error.nhcx-1002 + - nhcx.error.nhcx-1003 +--- + +# What the National Health Claims Exchange is and what it does not do + +## In plain words + +The [National Health Claims Exchange (NHCX)](../../shared/glossary/nhcx.md) is the claims switch of [ABDM](../../shared/glossary/abdm.md). A hospital sends a claim message to NHCX. NHCX routes it to the insurer or [third party administrator](../glossary/tpa.md) that must answer, and carries the answer back. + +It works like an email exchange. NHCX reads the address on the envelope and delivers the message. It cannot read the letter inside, because the sender seals it for the recipient. + +NHCX is one of three ABDM gateways. The other two are the [Unified Health Interface](../../shared/glossary/uhi.md) and the [Health Information Exchange and Consent Manager](../../shared/glossary/hie-cm.md). + +## Before you start + +Nothing. Read this first. Then read [participant roles](./participant-roles.md) and [the four message legs](./four-message-legs.md). + +## What happens + +Every exchange has the same shape. A sender builds a [FHIR](../../shared/glossary/fhir.md) bundle, seals it for the recipient, and posts it to NHCX. NHCX checks the envelope and forwards the sealed message. + +```mermaid +graph LR + H["Provider system
(hospital HMIS)"] -->|sealed request| X["NHCX"] + X -->|same sealed request| P["Payer or TPA system"] + P -->|sealed response| X + X -->|same sealed response| H + X -.->|looks up sender, recipient, endpoint| R[("Participant registry")] +``` + +### What NHCX does + +- Checks that the sender and the recipient are registered and allowed to exchange. +- Validates the protocol headers on the envelope. +- Accepts the call, then forwards the message to the recipient's registered endpoint. +- Retries delivery when the recipient does not acknowledge. +- Records each call it receives, using only the unencrypted envelope details. + +### What NHCX does not do + +| NHCX does not | Because | Who does it instead | +|---|---|---| +| Read the claim | The payload is sealed with the recipient's public key | The recipient, with its private key | +| Decide a claim | The gateway never returns an adjudication on your call | The payer, in a later callback | +| Authenticate the patient | Biometric authentication is a separate API, used for PMJAY | Your system, before preauthorisation | +| Create an ABHA | ABHA creation is ABDM Milestone 1 work | Your system, through the ABDM APIs | +| Hold your private key | You generate your own key pair | You | + +### The use cases it carries + +Coverage eligibility, insurance plan, preauthorisation, predetermination, claim, communication requests, payment notices, reprocess and cancel tasks, status checks and claim search. [The claim cycle](./claim-cycle.md) shows how they fit together. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. Your system submits a preauthorisation and receives HTTP 202 from NHCX. Has the payer approved anything yet? Where will the decision arrive? +2. Someone proposes that NHCX log the decrypted claim to help debugging. Why is that impossible, and where can the claim be read? + +## When it goes wrong + +**Treating the 202 as the answer.** The 202 means NHCX accepted the envelope. The payer's decision arrives later on your callback endpoint. See [the 202 acknowledgement](./synchronous-acknowledgement.md). + +**Sending before you are registered.** NHCX refuses a sender it does not know with [NHCX-1002](../errors/nhcx-1002.md), and an unknown recipient with [NHCX-1003](../errors/nhcx-1003.md). + +**Expecting NHCX to fix the payload.** NHCX cannot see the payload, so it cannot correct a bad bundle. The payer reports bundle problems back to you. See [error code spaces](./error-code-spaces.md). diff --git a/catalogue/nhcx/concepts/workflow-codes.md b/catalogue/nhcx/concepts/workflow-codes.md new file mode 100644 index 000000000..b7c08f3e9 --- /dev/null +++ b/catalogue/nhcx/concepts/workflow-codes.md @@ -0,0 +1,124 @@ +--- +id: nhcx.concept.workflow-codes +type: concept +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Workflow codes and the stage each one names +summary: >- + The workflow id header names the business stage a message belongs to, such as + a new preauthorisation or a payment settled, and pairs with the status header + to say exactly what the message is. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Section 22 Q5 and Section 23 Q5. +verified: + status: unverified +related: + concepts: + - nhcx.concept.protocol-headers + - nhcx.concept.status-lifecycle + - nhcx.concept.claim-cycle + - nhcx.concept.reprocess-and-cancel + - nhcx.concept.queries-and-communication + - nhcx.concept.message-identifiers + glossary: + - nhcx.glossary.workflow-id + - nhcx.glossary.preauthorisation + - nhcx.glossary.enhancement + errors: + - nhcx.error.payr-1321 + - nhcx.error.payr-1003 + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + - nhcx.flow.payment-notice +--- + +# Workflow codes and the stage each one names + +## In plain words + +The [workflow id](../glossary/workflow-id.md) says which stage of a case a message belongs to. `12` is a new preauthorisation. `15` is a claim. `33` is a payment settled. + +It travels in `x-hcx-workflow_id`, next to `x-hcx-status`. The pair tells the receiver exactly what the message is, without opening the bundle. + +## Before you start + +Read [the protocol headers](./protocol-headers.md) and [the claim cycle](./claim-cycle.md). + +## What happens + +### The codes a provider sends + +| Code | Stage | `x-hcx-status` | +|---|---|---| +| `10` | Patient registered | `request.initiated` | +| `11` | Patient admitted | `request.initiated` | +| `12` | Preauthorisation request initiated | `request.initiated` | +| `121` | Preauthorisation resubmission | `request.initiated` | +| `13` | Enhancement request initiated | `request.initiated` | +| `19` | Preauthorisation query response submitted | `response.complete` | +| `131` | Enhancement query response submitted | `response.complete` | +| `14` | Discharge submitted | `request.initiated` | +| `15` | Claim request initiated | `request.initiated` | +| `151` | Claim query response submitted | `response.complete` | +| `17` | Payment notice received | `response.complete` | +| `36` | Claim arbitration intimation (reprocess or erroneous claim) | `request.initiated` | +| `PC01` | Preauthorisation cancellation | `request.initiated` | + +### The codes a payer sends + +| Code | Stage | `x-hcx-status` | +|---|---|---| +| `20` | Preauthorisation acknowledged | `response.partial` | +| `21` | Preauthorisation approved | `response.complete` | +| `22` | Enhancement approved | `response.complete` | +| `23` | Preauthorisation rejected | `response.complete` | +| `24` | Preauthorisation queried | `request.initiated` | +| `241` | Enhancement queried | `request.initiated` | +| `25` | Claim documents acknowledged | `response.partial` | +| `26` | Claim approved | `response.complete` | +| `27` | Claim queried | `request.initiated` | +| `28` | Claim in process | `response.partial` | +| `29` | Claim forwarded | `response.partial` | +| `252`, `253`, `254` | Reprocess approved, rejected, queried | `response.complete`, `response.complete`, `request.initiated` | +| `30` | Payment notice initiated | `request.initiated` | +| `31` | Payment processed | `request.initiated` | +| `33` | Payment settled | `request.initiated` | +| `PC02` | Preauthorisation cancellation accomplished | `response.complete` | + +### Other families + +`R` codes cover reimbursement claims, for example `R15` for a reimbursement claim submitted. `G11` to `G13` cover grievances, `RP1` to `RP3` return payments, `N01` to `N04` notifications and `DC01` to `DC02` discharge corrections. + +### One code, several stages + +Some codes appear more than once and the status tells them apart. Code `20` with `response.partial` is an acknowledgement that succeeded. The same code with `response.error` is an acknowledgement that failed, and you handle it as a protocol error. + +### Rule + +Keep workflow ids in configuration, not in code. A payer may ask for a corrected code, and a configuration change needs no release. + +## How you know it worked + +You have understood this when you can answer both of these. + +1. A payer's message arrives with `x-hcx-workflow_id` `24`. What happened to your preauthorisation, and which code does your answer carry? +2. Code `20` arrives with `response.error`. Is the preauthorisation rejected? How do you treat it? + +## When it goes wrong + +**Invalid workflow id.** The PMJAY payer refuses a claim with an unknown workflow id with [PAYR-1321](../errors/payr-1321.md). Its structure checks use [PAYR-1003](../errors/payr-1003.md) for "Invalid workflow requested". + +**Query answered as a resubmission.** Answer a query with the query response code (`19` or `151`). A resubmission code (`121`) replaces the earlier request instead. + +**Acknowledgement failures read as rejections.** An "Ack Failed" code with `response.error` is a delivery or protocol problem, not a business decision. diff --git a/catalogue/nhcx/decisions/biometric-modality.md b/catalogue/nhcx/decisions/biometric-modality.md new file mode 100644 index 000000000..2b162ec83 --- /dev/null +++ b/catalogue/nhcx/decisions/biometric-modality.md @@ -0,0 +1,104 @@ +--- +id: nhcx.decision.biometric-modality +type: decision +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Fingerprint, iris or face authentication +summary: >- + Build all three ways of proving the patient is present, and let the desk use whichever + one the patient can complete. +sources: +- url: https://hcxsbx.abdm.gov.in/images/9f1e6b545a693d38a704.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication Implementation Steps.docx + hash: sha256:fac8b14bfe8d518c0e651740537b9441c501d3cf2ab0f0482a07ab9f417e43a9 + fetched: '2026-09-14' + note: Biometric Authentication Implementation Steps, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. Fingerprint/IRIS APIs and Face-Auth API curl. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Section 26 Q9-Q13; Section 27 Q1-Q4; Q10 K-547. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error, PAYR-1256. +verified: + status: unverified +related: + concepts: + - nhcx.concept.biometric-authentication + flows: + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.biometric-face + endpoints: + - nhcx.endpoint.abha-biometric-auth-init + - nhcx.endpoint.abha-biometric-auth-verify + - nhcx.endpoint.abha-biometric-auth-refresh-token + - nhcx.endpoint.abha-biometric-faceauth-init + - nhcx.endpoint.abha-biometric-capture-pid + - nhcx.endpoint.abha-biometric-v2-auth-verify + errors: + - nhcx.error.payr-1256 + - nhcx.error.payr-1272 + - nhcx.error.payr-1363 + - nhcx.error.payr-1366 + - nhcx.error.payr-1367 + - nhcx.error.payr-1369 + glossary: + - nhcx.glossary.rd-service + - nhcx.glossary.pid-block + - nhcx.glossary.pmjay + - shared.glossary.abha + - shared.glossary.kyc +--- + +# Fingerprint, iris or face authentication + +## In plain words + +[PMJAY](../glossary/pmjay.md) requires proof that the beneficiary is at the hospital. You capture it by fingerprint, iris or face at registration, preauthorisation and discharge. + +Build all three modalities: PMJAY integration requires it. At the desk, use fingerprint or iris where you have a scanner, and face on a phone where you do not. + +## Before you start + +- The beneficiary's [ABHA](../../shared/glossary/abha.md) is linked to their PMJAY card. Others follow the scheme's alternate [KYC](../../shared/glossary/kyc.md) process. +- You hold a session token. See [the session token every NHCX call carries](../concepts/session-token.md). +- You have read [biometric authentication of the beneficiary](../concepts/biometric-authentication.md). + +## What happens + +| | Fingerprint | Iris | Face | +|---|---|---|---| +| Hardware | Fingerprint scanner at the desk | Iris scanner at the desk | A phone with the ABHA app and the Aadhaar [RD Service](../glossary/rd-service.md) app | +| Calls | [`auth/init`](../endpoints/abha-biometric-auth-init.md), then [`auth/verify`](../endpoints/abha-biometric-auth-verify.md) | The same two calls | [`faceauth/init`](../endpoints/abha-biometric-faceauth-init.md), [`capture/pid`](../endpoints/abha-biometric-capture-pid.md) until `COMPLETE`, then [`v2/auth/verify`](../endpoints/abha-biometric-v2-auth-verify.md) | +| `authMode` | `FINGERPRINT` | `IRIS` | `FACE_AUTH` | +| Captured value you send | [`fingerPrintAuthPid`](../glossary/pid-block.md) | `irisAuthPid` | None. You send the Aadhaar number, RSA encrypted, and the mobile number | +| Result | A user token valid 1800 seconds and a refresh token valid 1296000 seconds | The same | The same | + +Rules that hold for every modality: + +- Preauthorisation and claim may use different modalities. +- Set the `process` header to `Preauth` or `Discharge`. Every cycle of a cyclic procedure uses `Discharge`. +- A refresh token keeps a session alive without a new capture, except for cyclic procedures. Every cycle needs a live capture, in any modality. +- Where no capture is possible, send the Authentication Consent Questionnaire response instead. This fallback is not allowed for cyclic procedures. + +The default is all three built, with the operator choosing per patient. A scanner capture needs no phone. Face needs no scanner. When one modality fails on a patient, the next is a new init call away. + +## How you know it worked + +- Fingerprint or iris: `auth/verify` returns `authResult` `success` with `token` and `refreshToken`. +- Face: `capture/pid` moves from `PENDING` to `COMPLETE`, and `v2/auth/verify` returns tokens. +- The preauthorisation or claim that carries the token is not refused with `PAYR-1272` or `PAYR-1366`. +- Your desk completes all three modalities in the sandbox. + +## When it goes wrong + +Switching modality is per capture: start a new init with the other `authMode`. Nothing is registered, so you can add a modality after go-live. PMJAY integration still needs all three. + +- `PAYR-1272` or `PAYR-1366`: the user token is invalid or has expired. Capture again. See [PAYR-1272](../errors/payr-1272.md) and [PAYR-1366](../errors/payr-1366.md). +- `PAYR-1256` or `PAYR-1363`: no biometric and no consent questionnaire at preauthorisation or discharge. See [PAYR-1256](../errors/payr-1256.md) and [PAYR-1363](../errors/payr-1363.md). +- `PAYR-1367` or `PAYR-1369`: a cycle has no capture for its date, or two captures share one date. See [PAYR-1367](../errors/payr-1367.md) and [PAYR-1369](../errors/payr-1369.md). +- Fingerprint capture fails with `K-547`: build the `wadh` value with `lr` set to `Y`. See [authenticate a beneficiary by fingerprint or iris](../flows/biometric-fingerprint-iris.md). diff --git a/catalogue/nhcx/decisions/eligibility-purpose.md b/catalogue/nhcx/decisions/eligibility-purpose.md new file mode 100644 index 000000000..8e28d6a28 --- /dev/null +++ b/catalogue/nhcx/decisions/eligibility-purpose.md @@ -0,0 +1,95 @@ +--- +id: nhcx.decision.eligibility-purpose +type: decision +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Which coverage eligibility purpose to send +summary: >- + Confirm the policy when the patient arrives, then ask what each planned treatment + needs before you request approval for it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 7.3 and 7.4. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 8.3; page 32 functional points. +- url: https://hcxsbx.abdm.gov.in/images/13093b5f9b88fe826123.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Insurance Plan IG.docx + hash: sha256:e9c6c82b6d67fd8476d6d19a5961419beb04e3c0613533453ed1e16e2a569cc1 + fetched: '2026-09-14' + note: Insurance Plan IG, row 25 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. CoverageEligibility tables. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Section 24 Unspecified Procedure, Q5. +verified: + status: unverified +related: + concepts: + - nhcx.concept.coverage-eligibility-purposes + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-query-response + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.participant-get-policies + fhir: + - nhcx.fhir.coverage-eligibility-request + errors: + - nhcx.error.payr-1032 + - nhcx.error.payr-1033 + - nhcx.error.payr-1101 + glossary: + - nhcx.glossary.coverage-eligibility +--- + +# Which coverage eligibility purpose to send + +## In plain words + +A [coverage eligibility](../glossary/coverage-eligibility.md) check asks the payer about a patient's policy over [NHCX](../../shared/glossary/nhcx.md). The `purpose` element of the `CoverageEligibilityRequest` says what you are asking. Four values exist: `discovery`, `validation`, `benefits` and `auth-requirements`. + +Send `validation` at registration or admission. Send `auth-requirements` before every preauthorisation and whenever a treatment is added. + +## Before you start + +- You know the patient's payer and policy. Get them from [`POST /participant/get/policies`](../endpoints/participant-get-policies.md). +- You can send a sealed eligibility request. See [check coverage eligibility](../flows/coverage-eligibility-check.md). +- You have read [the coverage eligibility purposes](../concepts/coverage-eligibility-purposes.md). + +## What happens + +Every purpose needs the beneficiary ID, the coverage or plan code, the payer ID and the provider ID. + +| Purpose | Send it when | Extra input | What comes back | +|---|---|---|---| +| `discovery` | `/participant/get/policies` finds no policy for the patient | None | The active policy code. Use it in a `validation` check next | +| `validation` | At registration or admission | None | `insurance[*].inforce`, the wallet amount used and the amount still available | +| `benefits` | You need benefit detail for procedures | Procedure or package codes | Benefit details for the listed items | +| `auth-requirements` | Before each preauthorisation, and when a treatment is added | Procedure or package codes in `item[*]`, mandatory | Whether each item is covered, the covered amount, `authorizationRequired`, required questionnaires and `authorizationSupporting` document codes | + +The default is `validation` first, then `auth-requirements` before each preauthorisation. `validation` tells you the policy is in force and how much wallet remains. `auth-requirements` tells you which documents and questionnaires the preauthorisation must carry, so you send it complete. Use `discovery` only as a fallback. An unspecified procedure also needs an `auth-requirements` check. + +`purpose` is a list. One request may carry more than one value, for example `validation` and `auth-requirements` together. + +## How you know it worked + +- The answer on `/v1/coverageeligibility/on_check` has `outcome` `complete`. +- For `validation`, `insurance[*].inforce` is `true` and the wallet amounts are present. +- For `auth-requirements`, every item you sent comes back with `authorizationRequired` and any `authorizationSupporting` codes. +- The preauthorisation you then send carries every document and questionnaire those codes named. + +## When it goes wrong + +The purpose is chosen per request and nothing is registered, so switching is immediate. + +- `PAYR-1033`: you sent a purpose that needs items without any `item[*]`. Add the procedure or package codes. See [PAYR-1033](../errors/payr-1033.md). +- `PAYR-1032` or `PAYR-1101`: the purpose is not one of the four values. Send it exactly as written above, lower case, no spaces. See [PAYR-1032](../errors/payr-1032.md) and [PAYR-1101](../errors/payr-1101.md). +- You skipped `auth-requirements` and the preauthorisation comes back queried for missing documents. Run the check, attach what it names, and answer the query. See [answer a payer query on a preauthorisation](../flows/preauth-query-response.md). diff --git a/catalogue/nhcx/decisions/jwe-serialisation.md b/catalogue/nhcx/decisions/jwe-serialisation.md new file mode 100644 index 000000000..f53c917fc --- /dev/null +++ b/catalogue/nhcx/decisions/jwe-serialisation.md @@ -0,0 +1,99 @@ +--- +id: nhcx.decision.jwe-serialisation +type: decision +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Compact or flattened JWE serialisation +summary: >- + Send the sealed payload as one compact string inside the payload field, and parse + either written form when you receive one. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 4, Q13. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 2.3 to 2.5. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__message-security-and-integrity.md + hash: sha256:3768fd89932e4081c9e03a8695619bcaf70c641e28bb55a77eec090bb926eeb3 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity, text as shown on the site. Message Encryption, final representation. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Response rows, all use case sheets. +- url: https://hcxsbx.abdm.gov.in/images/2b7fde4358fd0a4b2086.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Code Snippets references for payload preparation.pdf + hash: sha256:cea0cfbf5897e9642eaf9a515a941b0a1de39474ea39444c9e05abe21cd9ec73 + fetched: '2026-09-14' + note: NHCX Code Snippets references for payload preparation, row 13 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sections 3 and 4. +verified: + status: unverified +related: + concepts: + - nhcx.concept.jwe-envelope + decisions: + - nhcx.decision.key-encryption-algorithm + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + errors: + - nhcx.error.payr-1001 + troubleshooting: + - nhcx.troubleshooting.recipient-cannot-decrypt + glossary: + - nhcx.glossary.jwe + - nhcx.glossary.protected-header +--- + +# Compact or flattened JWE serialisation + +## In plain words + +A [JWE](../glossary/jwe.md) can be written two ways. Compact serialisation is one string of five Base64url parts joined by dots. Flattened JSON serialisation is an object with one member per part. + +Send compact, inside the `payload` field of the request body. Parse either form when you receive. + +## Before you start + +- You seal payloads with `alg` `RSA-OAEP-256` and `enc` `A256GCM`. See [RSA-OAEP or RSA-OAEP-256 for the content key](../decisions/key-encryption-algorithm.md). +- You have read [the JWE envelope that seals every payload](../concepts/jwe-envelope.md). + +## What happens + +| | Compact | Flattened JSON | +|---|---|---| +| Shape | `....`, one string | An object with `protected`, `encrypted_key`, `aad`, `iv`, `ciphertext` and `tag` | +| Where it travels | Inside the `payload` field of the body | As the body itself | +| Nimbus JOSE | `jweObject.serialize()` returns it | Built from the parts | +| Your system | Sends it on every request and callback | Parses it if one arrives | + +The default is compact. Every outgoing request to NHCX uses JWE Compact Serialization. The request body is exactly: + +```json +{"payload": ""} +``` + +Sealed answers arrive with a `type` member beside `payload`, for example `{"type": "JWEPayload", "payload": ""}`. A recipient that cannot process your message answers with `"type": "ProtocolResponse"` and clear-text headers instead. Read `type` first. `ProtocolResponse` is clear text; any other value means `payload` holds a sealed string. + +The five compact parts carry the same five values as the flattened members `protected`, `encrypted_key`, `iv`, `ciphertext` and `tag`. Split the compact string on its dots and pass the parts to one decrypt routine. The published decrypt sample takes exactly those five named parts, so it serves both forms. + +## How you know it worked + +- The body you send is one JSON object with one key, `payload`, whose value contains exactly four dots. +- Your receiver opens a sealed callback by splitting that string into five parts. +- Your receiver handles a `ProtocolResponse` without trying to decrypt it. + +## When it goes wrong + +Switching from flattened to compact changes one call: use your library's compact serializer and wrap the result in `payload`. Keys, headers and certificates stay the same, so you can switch after go-live. + +- Your callback handler tries to decrypt every body: a `ProtocolResponse` breaks it and you lose the error it carries. Branch on `type` first. See [receive, open and acknowledge a sealed message](../flows/receive-a-sealed-callback.md). +- The recipient answers `PAYR-1001`: check the serialisation along with the other causes in [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). See [PAYR-1001](../errors/payr-1001.md). diff --git a/catalogue/nhcx/decisions/key-encryption-algorithm.md b/catalogue/nhcx/decisions/key-encryption-algorithm.md new file mode 100644 index 000000000..41693b237 --- /dev/null +++ b/catalogue/nhcx/decisions/key-encryption-algorithm.md @@ -0,0 +1,94 @@ +--- +id: nhcx.decision.key-encryption-algorithm +type: decision +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: RSA-OAEP or RSA-OAEP-256 for the content key +summary: >- + Seal what you send with the stronger key wrapping value, and open messages sealed + with either value. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Protected Header rows, all use case sheets. +- url: https://hcxsbx.abdm.gov.in/images/2b7fde4358fd0a4b2086.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Code Snippets references for payload preparation.pdf + hash: sha256:cea0cfbf5897e9642eaf9a515a941b0a1de39474ea39444c9e05abe21cd9ec73 + fetched: '2026-09-14' + note: NHCX Code Snippets references for payload preparation, row 13 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Section 3 constants. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__message-security-and-integrity.md + hash: sha256:3768fd89932e4081c9e03a8695619bcaf70c641e28bb55a77eec090bb926eeb3 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity, text as shown on the site. Message Encryption and Decryption steps. +- url: https://hcxsbx.abdm.gov.in/images/ec361a6c3e90e766d227.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Steps to generate encryption Certificate.pdf + hash: sha256:94605e935f05ebb49e24dee50787cb4f3f1c401983a9616a5aaabdbc302f664b + fetched: '2026-09-14' + note: Steps to generate encryption Certificate, row 20 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Step 1. +verified: + status: unverified +related: + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.encryption-certificate + decisions: + - nhcx.decision.jwe-serialisation + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.generate-and-register-certificate + endpoints: + - nhcx.endpoint.fetch-certs + errors: + - nhcx.error.payr-1001 + troubleshooting: + - nhcx.troubleshooting.recipient-cannot-decrypt + glossary: + - nhcx.glossary.jwe + - nhcx.glossary.protected-header + - nhcx.glossary.x509-certificate +--- + +# RSA-OAEP or RSA-OAEP-256 for the content key + +## In plain words + +Every payload you send through [NHCX](../../shared/glossary/nhcx.md) is sealed as a [JWE](../glossary/jwe.md). A random content key encrypts the payload, and that key is wrapped with the recipient's RSA public key. The `alg` value in the [protected header](../glossary/protected-header.md) names how the key is wrapped. Two values are published: `RSA-OAEP`, which uses SHA-1, and `RSA-OAEP-256`, which uses SHA-256. + +Send `RSA-OAEP-256`. Accept both values when you decrypt. + +## Before you start + +- You have a 2048-bit RSA key pair and an [X.509 certificate](../glossary/x509-certificate.md) registered for it. See [generate an encryption certificate and register it](../flows/generate-and-register-certificate.md). +- You can fetch a recipient's certificate with [`POST /fetch/certs`](../endpoints/fetch-certs.md). +- You have read [the JWE envelope that seals every payload](../concepts/jwe-envelope.md). + +## What happens + +| | `RSA-OAEP-256` | `RSA-OAEP` | +|---|---|---| +| Digest used to wrap the content key | SHA-256 | SHA-1 | +| Content encryption, `enc` | `A256GCM` | `A256GCM` | +| Key pair | Your 2048-bit RSA pair | The same pair | +| Your system | Sends it on every message | Accepts it when decrypting | + +The default is `RSA-OAEP-256` on everything you send. It is the mandatory `alg` on every use case request and response. The reference Java code sets `KEY_MANAGEMENT_ALGORITHM = JWEAlgorithm.RSA_OAEP_256` with `EncryptionMethod.A256GCM`. Your outgoing protected header carries `"alg":"RSA-OAEP-256"` and `"enc":"A256GCM"` alongside the x-hcx protocol headers. + +Accepting both on receipt costs nothing. A recipient reads `alg` from the protected header of each message and chooses the key management mode from it. A decrypter that allows both values opens either, with the same private key. + +## How you know it worked + +- Base64url-decode the first segment of a JWE you sent. It shows `alg` `RSA-OAEP-256` and `enc` `A256GCM`. +- Seal a test payload to your own certificate twice, once with each `alg`. Your decrypter opens both. +- The recipient's answer arrives on your callback as a sealed payload, not as a `ProtocolResponse` carrying `PAYR-1001`. + +## When it goes wrong + +Switching the sending side is a one-line change to the algorithm constant. Switching the receiving side means adding the other value to your decrypter's allowed list. Neither touches your certificate or your registry entry, so both are safe after go-live. + +- A recipient answers `PAYR-1001` and you sent `RSA-OAEP`: change to `RSA-OAEP-256` first, then work through [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). See [PAYR-1001](../errors/payr-1001.md). +- Your decrypter rejects an incoming message on `alg`: you allowed only one value. Allow both. diff --git a/catalogue/nhcx/decisions/payer-implementation.md b/catalogue/nhcx/decisions/payer-implementation.md new file mode 100644 index 000000000..911e43e7c --- /dev/null +++ b/catalogue/nhcx/decisions/payer-implementation.md @@ -0,0 +1,106 @@ +--- +id: nhcx.decision.payer-implementation +type: decision +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Answer as your own payer system or through the PMJAY payer service +summary: >- + An insurer answers requests from its own system, while a government scheme case + is decided role by role in the scheme's system. +sources: +- file: catalogue/openapi/.raw/nhcx-site-2026-09-14/not-on-site/External_NHCX_Payer_Service_API_Workflow_Guide.docx + hash: sha256:1028d480d2fabe3204301f1c1b192a0077ddfa64f7f9084b01f73e004253fdd7 + fetched: '2026-09-05' + note: NHCX Payer Service API Workflow Guide for External Integrators, not listed on hcxsbx.abdm.gov.in and not named in the NHCX document sheet, received separately. Whole document. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use cases 7 to 14 Validations and API logic. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 4 Existing PMJAY workflow. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Pages 1-3. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-roles + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.payer-process-a-request + endpoints: + - nhcx.endpoint.payer-service-get-user-role + - nhcx.endpoint.payer-service-process-case + - nhcx.endpoint.dummy-payer-process-request + sandbox: + - nhcx.sandbox.dummy-payer + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + glossary: + - nhcx.glossary.adjudication + - nhcx.glossary.pmjay + - nhcx.glossary.tms + - nhcx.glossary.sha + - nhcx.glossary.tpa + - nhcx.glossary.payer +--- + +# Answer as your own payer system or through the PMJAY payer service + +## In plain words + +A request addressed to a payer needs an adjudicated answer on its `on_` callback. That answer comes from one of two places. Your own payer system decides it and answers over [NHCX](../../shared/glossary/nhcx.md). For a [PMJAY](../glossary/pmjay.md) case, named roles in the [SHA](../glossary/sha.md)'s [TMS](../glossary/tms.md) decide it, and integrators act on the case through the PMJAY payer service. + +If you are an insurer or a [TPA](../glossary/tpa.md), answer from your own payer system. Use the PMJAY payer service only for PMJAY cases. + +## Before you start + +- You are registered as a payer (`10002`) or TPA (`10003`), with a certificate and a callback endpoint. See [participant roles](../concepts/participant-roles.md). +- You know who processes each policy. A policy under a TPA names the insurer as `payerid` and the TPA as `processingid`. +- You have read [receive, adjudicate and answer a request as a payer](../flows/payer-process-a-request.md). + +## What happens + +| | Your own payer system | PMJAY payer service | +|---|---|---| +| Who decides | Your adjudication | The role holding the case in the SHA's TMS | +| What you build | A receiver for every request path, sealing, every `on_` call, and `/v1/error` | Two calls: [`get/user-role`](../endpoints/payer-service-get-user-role.md), then [`wrapper/process/case`](../endpoints/payer-service-process-case.md) | +| How the answer leaves | You send `/v1/preauth/on_submit`, `/v1/claim/on_submit` and the other `on_` calls, sealed to the provider | A role's action moves the case, and the verdict returns to the provider over NHCX | +| Preauthorisation roles | Yours | `PPD-Trust`: `Approve`, `Reject`, `Query` | +| Claim roles | Yours | `CEX-Trust`, `CPD-Trust`, Medical Audit Committee, `ACO-Trust`, `SHA-Trust`, Claim Review Committee, in that order | + +The default is your own payer system for any insurer or TPA. It is the only way requests addressed to your participant code are answered. The payer sandbox exit checks it one callback at a time. The PMJAY payer service exists because a PMJAY case is decided in the scheme's own system, by role, on that system's schedule. + +If you answer from your own system, each answer passes four checks: + +1. The payload validates against the [NRCeS](../../shared/glossary/nrces.md) profiles. +2. The api call id of your answer differs from its correlation id. +3. The correlation id is the api call id of the request you are answering. +4. The receiver code is the sender code of that request. + +If you act through the payer service, read the role before every action. Send the action name exactly as that role takes it: `cpdApprove`, `cpdReject` and `iQuery` are case sensitive. + +## How you know it worked + +Own payer system: every request addressed to your code reaches your endpoint, and each gets its `on_` call. The provider receives it with the correlation id it expects. + +PMJAY payer service: `get/user-role` names a role for the case. An action from that role's list is accepted, and the provider receives `/v1/preauth/on_submit` or `/v1/claim/on_submit`. + +## When it goes wrong + +Nothing built for one branch serves the other. Choose by who owns the decision, not by effort. + +- An action fails on the payer service: read the role again with `get/user-role`. The service moves cases on its own schedule, so the role you read earlier may have changed. +- A provider's request never reaches your own system: check that the provider addressed your processing code and that your endpoint is reachable. See [your callback URL is rejected or never called](../troubleshooting/callback-url-rejected.md). +- Your answer is refused or lands on the wrong case: check the four answer rules above. See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). + +Provider teams testing in the sandbox use the [dummy payer](../sandbox/dummy-payer.md) instead. [`POST /process/request`](../endpoints/dummy-payer-process-request.md) triggers an approve, reject or query answer for a preauthorisation or claim. diff --git a/catalogue/nhcx/decisions/preauth-or-predetermination.md b/catalogue/nhcx/decisions/preauth-or-predetermination.md new file mode 100644 index 000000000..c138f9e8e --- /dev/null +++ b/catalogue/nhcx/decisions/preauth-or-predetermination.md @@ -0,0 +1,97 @@ +--- +id: nhcx.decision.preauth-or-predetermination +type: decision +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Preauthorisation or predetermination +summary: >- + Ask the payer to approve planned treatment with a preauthorisation, and use a + predetermination only as an optional preview. +sources: +- url: https://hcxsbx.abdm.gov.in/images/af8d243edcc2139a515d.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Usecases.pdf + hash: sha256:8709b2907a0d5a0dbb36f5e63ed8deae269e0c75372b05d71ce7380c8a0929e7 + fetched: '2026-09-14' + note: NHCX Usecases, row 1 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case table, Preauth and Predetermination rows. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. API Structure table. +- url: https://hcxsbx.abdm.gov.in/images/2c3fbb4e6b09f0834f69.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Implementation Guide for Adoption of FHIR in ABDM and NHCX.pdf + hash: sha256:549377c9c26b1bd23decac3a1b9e5ebedfdc8e0fe99e53ef733859b188f51366 + fetched: '2026-09-14' + note: Implementation Guide for Adoption of FHIR in ABDM and NHCX, row 14 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. API table rows 5-6. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1 use case list. +- url: https://hcxsbx.abdm.gov.in/images/b6bd99dab49a5e928ea3.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Overview.pdf + hash: sha256:c95469758a25cb8aca8c47757d8b18b4dedb8b4d42669663cff7343205f77fda + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Overview, row 27 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Page 8 flow table. +verified: + status: unverified +related: + concepts: + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.predetermination + - nhcx.flow.preauth-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.predetermination-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.payr-1010 + decisions: + - nhcx.decision.eligibility-purpose + glossary: + - nhcx.glossary.preauthorisation + - nhcx.glossary.predetermination +--- + +# Preauthorisation or predetermination + +## In plain words + +Before planned treatment, a provider can ask a payer about it over [NHCX](../../shared/glossary/nhcx.md) in two ways. A [preauthorisation](../glossary/preauthorisation.md) asks the payer to approve the treatment. A [predetermination](../glossary/predetermination.md) asks the payer to adjudicate the planned claim in advance, against the policy and the beneficiary's past history. + +Send a preauthorisation. Send a predetermination only to a payer that answers them, when you want that preview first. + +## Before you start + +- You have run coverage eligibility with `auth-requirements`. See [which coverage eligibility purpose to send](../decisions/eligibility-purpose.md). +- You have read [the claim cycle from eligibility to payment](../concepts/claim-cycle.md). + +## What happens + +| | Preauthorisation | Predetermination | +|---|---|---| +| Request | [`POST /v1/preauth/submit`](../endpoints/preauth-submit.md) | [`POST /v1/predetermination/submit`](../endpoints/predetermination-submit.md) | +| Answer arrives on | `/v1/preauth/on_submit` | `/v1/predetermination/on_submit` | +| Payload | Claim bundle whose `use` marks a preauthorisation | Claim bundle whose `use` marks a predetermination | +| Payer's answer | A ClaimResponse approving, rejecting or querying the request | A ClaimResponse with auto adjudication details against the policy and past history | +| Sandbox dummy payer | Answers it | Not among its use cases | +| [PMJAY](../glossary/pmjay.md) | Part of the flow, after biometric authentication | Not part of the flow | + +The default is preauthorisation. It is the request a payer approves before treatment. It is in the PMJAY flow, and the sandbox dummy payer answers it, so you can test it end to end. Use predetermination when a payer offers it and you want an adjudication preview before you commit to a preauthorisation. + +## How you know it worked + +- The payer answers your preauthorisation on `/v1/preauth/on_submit` with a ClaimResponse. +- Where you use predetermination, the payer answers on `/v1/predetermination/on_submit`, and you still send the preauthorisation afterwards. + +## When it goes wrong + +The two share the Claim bundle, so switching is a change of path and `use`. Start the new request with a new correlation id; nothing carries over between the two cycles. + +- A predetermination gets no answer: confirm that the payer handles predeterminations. Then see [the request was accepted with 202 and no callback arrives](../troubleshooting/accepted-then-no-callback.md). +- The preauthorisation comes back queried: send a query response, not a resubmission. See [answer a payer query on a preauthorisation](../flows/preauth-query-response.md). +- The claim is refused with `PAYR-1010`, preauthorisation required but not obtained. See [PAYR-1010](../errors/payr-1010.md). diff --git a/catalogue/nhcx/decisions/session-endpoint.md b/catalogue/nhcx/decisions/session-endpoint.md new file mode 100644 index 000000000..742cb1408 --- /dev/null +++ b/catalogue/nhcx/decisions/session-endpoint.md @@ -0,0 +1,118 @@ +--- +id: nhcx.decision.session-endpoint +type: decision +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Which session token endpoint to call +summary: >- + Get the token that every exchange call carries from one place in your code, and + set the address it calls per environment. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, Q2 base URLs; Page 5, Q20. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 3.1 Token Request. +- url: https://hcxsbx.abdm.gov.in/images/54d18468412741b759f3.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Authenticating with NHCX.pdf + hash: sha256:0ea90b635634844aaf8981e917cbf8b765ddd83a340f3c934883912599a62d8b + fetched: '2026-09-14' + note: Authenticating with NHCX, row 3 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1. +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 4 Get the auth token. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 6 Get the auth token. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, items 6 and 9. +verified: + status: unverified +related: + concepts: + - nhcx.concept.session-token + endpoints: + - nhcx.endpoint.session-token + - nhcx.endpoint.get-session + errors: + - nhcx.error.nhcx-401 + tests: + - nhcx.test.provider-uc-04 + - nhcx.test.payer-uc-06 + troubleshooting: + - nhcx.troubleshooting.everything-returns-401 + sandbox: + - nhcx.sandbox.environments-and-base-urls + glossary: + - shared.glossary.request-id + - shared.glossary.timestamp-header + - shared.glossary.x-cm-id +--- + +# Which session token endpoint to call + +## In plain words + +Every call you make to [NHCX](../../shared/glossary/nhcx.md) carries a bearer token. You mint it from the client ID and secret issued at onboarding. Two token calls are published: the [ABDM](../../shared/glossary/abdm.md) gateway sessions call and the participant service `/get/session` call. Both take the same client credentials and return a token with its lifetime. + +Put token acquisition behind one client in your code. Make its address, body format and response field names configuration. Set it to the gateway sessions call at `/api/hiecm/gateway/v3/sessions` by default. + +## Before you start + +- You hold a client ID and secret. The [Milestone 1](../../shared/glossary/m1.md) credentials work here; no separate credentials are issued. See [onboard as a participant in the NHCX sandbox](../flows/sandbox-onboarding.md). +- You know which environment you are calling. See [environments and base URLs](../sandbox/environments-and-base-urls.md). +- You have read [the session token every NHCX call carries](../concepts/session-token.md). + +## What happens + +| | ABDM gateway sessions | Participant service `/get/session` | +|---|---|---| +| Sandbox address | `POST https://dev.abdm.gov.in/api/hiecm/gateway/v3/sessions` | `POST /get/session` on `apisbx.abdm.gov.in` | +| Request headers | `Content-Type: application/json`, [`REQUEST-ID`](../../shared/glossary/request-id.md), [`TIMESTAMP`](../../shared/glossary/timestamp-header.md), [`X-CM-ID`](../../shared/glossary/x-cm-id.md) `sbx` | `Content-Type: application/x-www-form-urlencoded` | +| Body | `clientId`, `clientSecret`, `grantType` `client_credentials` | `client_id`, `client_secret`, `grant_type=client_credentials` | +| Token field in the response | `accessToken` | `access_token` | +| Lifetime field in the response | `expiresIn`, in seconds | `expires_in`, in seconds | + +The same gateway call is also published at `/gateway/v0.5/sessions`, taking `clientId` and `clientSecret`. Point new builds at the v3 address, which requires `grantType`. + +The default is the gateway sessions call at the v3 address. It is the session address in the sandbox base URL list. It takes the credentials you already hold from Milestone 1. One token from it serves every NHCX call. + +Whichever address you configure, these rules hold: + +1. Read the token from `accessToken` or `access_token`, whichever is present. +2. Read the lifetime from `expiresIn` or `expires_in` on every response. Never hard-code a lifetime. +3. Store the token with the time you received it. Fetch a new one before it expires. +4. On a `401`, fetch a new token and retry that call once. A second `401` means the credentials are wrong or revoked: stop and alert. +5. Send the token as `Bearer ` in both the `bearer_auth` and `Authorization` headers. +6. Never log the token or the client secret. + +## How you know it worked + +You chose correctly when all of these hold: + +- A token call returns a token and a lifetime, and your client stores both. +- A call made with that token, such as `POST /fetch/participants/list`, returns its normal response, not `401`. +- Pointing the configuration at the other address needs no code change. + +Sandbox exit use case 4 for providers and use case 6 for payers name `/get/session` as the auth token call. Point the configuration there when you demonstrate those cases. See [provider use case 4](../tests/provider-uc-04.md) and [payer use case 6](../tests/payer-uc-06.md). + +## When it goes wrong + +Switching is a configuration change: the address, the body encoding and the two response field names. Nothing is registered against either call, so you can switch at any time, including after go-live. Production addresses come with production access; see [going live](../sandbox/going-live.md). + +If you hard-coded a lifetime or a field name, calls fail at a fixed interval after each new token. You see `401` with `Sender is not authorized to execute the operation`. See [every NHCX call returns 401](../troubleshooting/everything-returns-401.md) and [NHCX-401](../errors/nhcx-401.md). + +If the token call itself answers `400`, the body does not match the address. The gateway call takes JSON; `/get/session` takes form encoding with `grant_type=client_credentials`. diff --git a/catalogue/nhcx/decisions/status-poll-or-wait.md b/catalogue/nhcx/decisions/status-poll-or-wait.md new file mode 100644 index 000000000..97af3590d --- /dev/null +++ b/catalogue/nhcx/decisions/status-poll-or-wait.md @@ -0,0 +1,99 @@ +--- +id: nhcx.decision.status-poll-or-wait +type: decision +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Poll with /v1/status or wait for the callback +summary: >- + Wait for the answer to come to you, and ask where a request stands only when its + answer is overdue. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Status. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 4, Q12. +verified: + status: unverified +related: + concepts: + - nhcx.concept.four-message-legs + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.status-lifecycle + flows: + - nhcx.flow.status-check + endpoints: + - nhcx.endpoint.status + callbacks: + - nhcx.callback.on-status + - nhcx.callback.error + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1012 + tests: + - nhcx.test.provider-uc-13 + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + glossary: + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id +--- + +# Poll with /v1/status or wait for the callback + +## In plain words + +When [NHCX](../../shared/glossary/nhcx.md) accepts your request with `202`, the answer comes later on the `on_` callback. `POST /v1/status` tells you where a request stands in the meantime. + +Wait for the callback. Call `/v1/status` only when the callback is overdue, then act on what it says. Never resubmit to find out. + +## Before you start + +- Your callback endpoint answers `202` within 30 seconds. See [the 202 acknowledgement and the 30 second rule](../concepts/synchronous-acknowledgement.md). +- You implement `/v1/error`. See [receiving POST /v1/error](../callbacks/error.md). +- You store each request's api call id and correlation id against the case before you send it. + +## What happens + +| | Wait for the callback | Call `/v1/status` | +|---|---|---| +| What you learn | The decision itself, sealed in the `on_` callback | Where the request is: `request.queued` or `request.dispatched` | +| Cost | Nothing beyond your callback endpoint | One sealed call per check | +| What follows | Nothing: the callback ends the cycle | `request.queued`: nothing yet; the request is still inside NHCX. `request.dispatched`: the recipient holds it, and a `/v1/on_status` callback follows | + +The default is to wait. Every decision, acknowledgement and error reaches you through a callback. `/v1/status` reports transport position only. + +When a callback is overdue by your own tolerance, send one [status check](../endpoints/status.md): + +- Set `x-hcx-correlation_id` to the api call id of the request you are checking. +- Set `x-hcx-status` to `request.initiated`. +- Use a fresh `x-hcx-api_call_id`. + +Set each initiating request's correlation id equal to its api call id. The status call then carries that one value. See [correlation id](../glossary/correlation-id.md). + +## How you know it worked + +- Callbacks arrive for requests you never checked. +- Each status call you make returns `202` with `protocol_status` `request.queued` or `request.dispatched`. +- Your logs show no `NHCX-1006` from a resubmitted request. + +## When it goes wrong + +Moving from polling to waiting means deleting scheduled status calls and keeping one check for overdue requests. Nothing is registered, so you can switch at any time. + +- `NHCX-1006`: you resubmitted a request with its original correlation id. See [NHCX-1006](../errors/nhcx-1006.md). +- `NHCX-1012`: the status call's correlation id matches no api call id you sent. Use the original request's api call id. See [NHCX-1012](../errors/nhcx-1012.md). +- Status finds nothing for a request you did send: after five failed deliveries, NHCX deletes the request and the failure goes to your `/v1/error`. Start a new cycle. See [gateway retries and the 24 hour expiry window](../concepts/retries-and-expiry.md). +- The callback never comes at all: see [the request was accepted with 202 and no callback arrives](../troubleshooting/accepted-then-no-callback.md). diff --git a/catalogue/nhcx/endpoints/abha-biometric-auth-init.md b/catalogue/nhcx/endpoints/abha-biometric-auth-init.md new file mode 100644 index 000000000..4af097841 --- /dev/null +++ b/catalogue/nhcx/endpoints/abha-biometric-auth-init.md @@ -0,0 +1,117 @@ +--- +id: nhcx.endpoint.abha-biometric-auth-init +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /hcx/abha/biometric/auth/init +summary: >- + Start a fingerprint or iris check that proves a scheme patient is at the hospital, + and get the transaction id the next step needs. +sources: +- url: https://hcxsbx.abdm.gov.in/images/9f1e6b545a693d38a704.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication Implementation Steps.docx + hash: sha256:fac8b14bfe8d518c0e651740537b9441c501d3cf2ab0f0482a07ab9f417e43a9 + fetched: '2026-09-14' + note: Biometric Authentication Implementation Steps, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. Biometric Authentication - Fingerprint/IRIS, Auth INIT; applicability table. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 18-20, section 8.2 Biometric Authentication. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 15, Q26.9 process type. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.abha-biometric-auth-init + - nhcx.endpoint.abha-biometric-auth-verify + - nhcx.endpoint.abha-biometric-auth-refresh-token + - nhcx.endpoint.abha-biometric-faceauth-init + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.session-token + errors: + - nhcx.error.payr-1256 + - nhcx.error.payr-1363 + concepts: + - nhcx.concept.biometric-authentication + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.biometric-fingerprint-iris + decisions: + - nhcx.decision.biometric-modality + glossary: + - nhcx.glossary.rd-service + - nhcx.glossary.pid-block +--- + +# POST /hcx/abha/biometric/auth/init + +## In plain words + +[PMJAY](../glossary/pmjay.md) requires proof that the beneficiary is physically present at the hospital. The hospital proves it by authenticating the beneficiary against their [ABHA](../../shared/glossary/abha.md), by fingerprint, iris or face. Init starts a fingerprint or iris authentication and returns a `txnId`. You then capture the biometric on a device and complete it with [auth verify](abha-biometric-auth-verify.md). + +These are plain JSON calls: no JWE envelope and no callback. + +## Before you start + +- The beneficiary's ABHA is linked to their PMJAY card. Where it is not, follow the scheme's approved [KYC](../../shared/glossary/kyc.md) protocols instead. +- A session token for the `Authorization` header, not `bearer_auth`. See [the session token](../concepts/session-token.md). +- The participant code of the scheme payer the authentication is for. It goes in the `payerid` header. +- The beneficiary's ABHA number, with hyphens, as `91-XXXX-XXXX-XXXX`. +- A fingerprint or iris capture device with its [RD service](../glossary/rd-service.md) app. For iris or face instead, see [which modality to use](../decisions/biometric-modality.md). + +## What happens + +Your system calls the ABHA biometric service directly. Choose the modality: + +| Modality | `scope` | `authMode` | +|---|---|---| +| Fingerprint | `["abha-login", "aadhaar-bio-verify"]` | `FINGERPRINT` | +| Iris | `["abha-login", "aadhaar-iris-verify"]` | `IRIS` | + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/abha/biometric/auth/init' \ + --header 'accept: */*' \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ' \ + --header 'process: Preauth' \ + --header 'payerid: ' \ + --data-raw '{ + "scope": ["abha-login", "aadhaar-bio-verify"], + "loginHint": "abha-number", + "loginId": "", + "otpSystem": "aadhaar", + "authMode": "FINGERPRINT" + }' +``` + +`process` is `Preauth` at registration or pre-authorisation, and `Discharge` at discharge. + +**Retrying.** Each init starts a new transaction. If a call fails, call init again and use the `txnId` it returns. + +## How you know it worked + +You receive a JSON body with a `txnId`: + +```json +{ + "txnId": "", + "authMode": null, + "message": "FingerPrint authentication request successfully sent.", + "status": null +} +``` + +The step is done when you hold a `txnId`. Capture the biometric and send it with that `txnId` to auth verify. + +## When it goes wrong + +- `401` although the token is fresh: the token went on `bearer_auth`. These calls read `Authorization`. +- The request goes to the face host. Fingerprint and iris sit under `/hcx/abha/biometric/`, face under `/pmjay/sbxhcx/abdmproxy/abha/biometric/`. +- `loginId` has its hyphens stripped. Send the ABHA number as `91-XXXX-XXXX-XXXX`. diff --git a/catalogue/nhcx/endpoints/abha-biometric-auth-refresh-token.md b/catalogue/nhcx/endpoints/abha-biometric-auth-refresh-token.md new file mode 100644 index 000000000..cd765e71e --- /dev/null +++ b/catalogue/nhcx/endpoints/abha-biometric-auth-refresh-token.md @@ -0,0 +1,94 @@ +--- +id: nhcx.endpoint.abha-biometric-auth-refresh-token +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: GET /hcx/abha/biometric/auth/refresh/token +summary: >- + Swap a scheme patient's refresh token for a new short-lived presence token without + capturing their biometric again. +sources: +- url: https://hcxsbx.abdm.gov.in/images/9f1e6b545a693d38a704.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication Implementation Steps.docx + hash: sha256:fac8b14bfe8d518c0e651740537b9441c501d3cf2ab0f0482a07ab9f417e43a9 + fetched: '2026-09-14' + note: Biometric Authentication Implementation Steps, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. 3. Auth Refresh Token. +- url: https://hcxsbx.abdm.gov.in/images/8a3940fb518ea05d34e9.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication APIs Postman Collection.zip + hash: sha256:725dc838b39beb3e3ddd2c008314323e6d5cd1c237d98875280da5218da458a4 + fetched: '2026-09-14' + note: Biometric Authentication APIs Postman Collection, row 30 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. item auth/refresh/token Copy. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 15, Q26.9 process type. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.abha-biometric-auth-init + - nhcx.endpoint.abha-biometric-auth-verify + - nhcx.endpoint.abha-biometric-auth-refresh-token + - nhcx.endpoint.abha-biometric-faceauth-init + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.session-token + errors: + - nhcx.error.payr-1256 + - nhcx.error.payr-1363 + concepts: + - nhcx.concept.biometric-authentication + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.biometric-face + decisions: + - nhcx.decision.biometric-modality + glossary: + - nhcx.glossary.rd-service + - nhcx.glossary.pid-block +--- + +# GET /hcx/abha/biometric/auth/refresh/token + +## In plain words + +[PMJAY](../glossary/pmjay.md) requires proof that the beneficiary is physically present at the hospital. The hospital proves it by authenticating the beneficiary against their [ABHA](../../shared/glossary/abha.md), by fingerprint, iris or face. The user token from a biometric verify lasts 30 minutes, but a case lasts longer. This call exchanges the refresh token for a new user token and a new refresh token, so the case stays authenticated. + +These are plain JSON calls: no JWE envelope and no callback. + +## Before you start + +- A session token for the `Authorization` header, not `bearer_auth`. See [the session token](../concepts/session-token.md). +- The participant code of the scheme payer the authentication is for. It goes in the `payerid` header. +- A refresh token less than 15 days old, from [auth verify](abha-biometric-auth-verify.md), [face verify](abha-biometric-v2-auth-verify.md) or an earlier refresh. + +## What happens + +Your system calls the ABHA biometric service with the refresh token on the `R-token` header. The request has no body. + +```bash +curl --location --request GET 'https://apisbx.abdm.gov.in/hcx/abha/biometric/auth/refresh/token' \ + --header 'R-token: Bearer ' \ + --header 'Authorization: Bearer ' \ + --header 'payerid: ' \ + --header 'process: Preauth' +``` + +`process` is `Preauth` at registration or pre-authorisation, and `Discharge` at discharge. + +Each refresh returns a new refresh token whose 15 days run from that moment. Refresh at least once every 10 days and store the new token to keep the chain alive. + +## How you know it worked + +You receive a new token pair in the same shape as auth verify: `token` with `expiresIn` 1800 and `refreshToken` with `refreshExpiresIn` 1296000. + +The step is done when the new user token and the new refresh token are stored against the case, replacing the old ones. + +## When it goes wrong + +- The refresh token went on `Authorization`. It belongs on `R-token`, and the session token on `Authorization`. +- The old refresh token was kept after a refresh. Store the new one every time. +- The refresh token is more than 15 days old. Start a fresh biometric authentication. diff --git a/catalogue/nhcx/endpoints/abha-biometric-auth-verify.md b/catalogue/nhcx/endpoints/abha-biometric-auth-verify.md new file mode 100644 index 000000000..6934fb8cc --- /dev/null +++ b/catalogue/nhcx/endpoints/abha-biometric-auth-verify.md @@ -0,0 +1,129 @@ +--- +id: nhcx.endpoint.abha-biometric-auth-verify +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /hcx/abha/biometric/auth/verify +summary: >- + Complete a fingerprint or iris check of a scheme patient and receive the short-lived + token that proves they were present. +sources: +- url: https://hcxsbx.abdm.gov.in/images/9f1e6b545a693d38a704.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication Implementation Steps.docx + hash: sha256:fac8b14bfe8d518c0e651740537b9441c501d3cf2ab0f0482a07ab9f417e43a9 + fetched: '2026-09-14' + note: Biometric Authentication Implementation Steps, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. Auth Verify; Token Validity and Refresh Mechanism table. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 3-4, Q10 K-547; page 15, Q26.9 process type. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.abha-biometric-auth-init + - nhcx.endpoint.abha-biometric-auth-verify + - nhcx.endpoint.abha-biometric-auth-refresh-token + - nhcx.endpoint.abha-biometric-faceauth-init + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.session-token + errors: + - nhcx.error.payr-1256 + - nhcx.error.payr-1363 + concepts: + - nhcx.concept.biometric-authentication + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.biometric-fingerprint-iris + decisions: + - nhcx.decision.biometric-modality + glossary: + - nhcx.glossary.rd-service + - nhcx.glossary.pid-block +--- + +# POST /hcx/abha/biometric/auth/verify + +## In plain words + +[PMJAY](../glossary/pmjay.md) requires proof that the beneficiary is physically present at the hospital. The hospital proves it by authenticating the beneficiary against their [ABHA](../../shared/glossary/abha.md), by fingerprint, iris or face. Verify completes a fingerprint or iris authentication started by [auth init](abha-biometric-auth-init.md). It sends the captured biometric and returns the beneficiary's user token, valid 30 minutes, and a refresh token, valid 15 days. + +These are plain JSON calls: no JWE envelope and no callback. + +## Before you start + +- The beneficiary's ABHA is linked to their PMJAY card. Where it is not, follow the scheme's approved [KYC](../../shared/glossary/kyc.md) protocols instead. +- A session token for the `Authorization` header, not `bearer_auth`. See [the session token](../concepts/session-token.md). +- The participant code of the scheme payer the authentication is for. It goes in the `payerid` header. +- A `txnId` from [auth init](abha-biometric-auth-init.md) for the same modality. +- The [PID block](../glossary/pid-block.md) from the capture device. Build the device's wrapped Aadhaar data hash with `lr` set to `Y`. + +## What happens + +Your system calls the ABHA biometric service directly with the capture. + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/abha/biometric/auth/verify' \ + --header 'accept: */*' \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ' \ + --header 'process: Preauth' \ + --header 'payerid: ' \ + --data-raw '{ + "scope": ["abha-login", "aadhaar-bio-verify"], + "authData": { + "authMethods": ["bio"], + "bio": { + "txnId": "", + "fingerPrintAuthPid": "" + } + }, + "authMode": "FINGERPRINT" + }' +``` + +For iris, send `scope` `["abha-login", "aadhaar-iris-verify"]`, `authMethods` `["iris"]`, an `iris` object with `txnId` and `irisAuthPid`, and `authMode` `IRIS`. + +`process` is `Preauth` at registration or pre-authorisation, and `Discharge` at discharge. + +**Retrying.** A capture belongs to its `txnId`. After a failure, start again with a new init and a new capture. + +## How you know it worked + +You receive a JSON body with `authResult` `success`: + +```json +{ + "txnId": "", + "authResult": "success", + "message": "", + "token": "", + "refreshToken": "", + "expiresIn": 1800, + "refreshExpiresIn": 1296000, + "accounts": [ + { + "ABHANumber": "", + "preferredAbhaAddress": "", + "name": "", + "status": "ACTIVE" + } + ] +} +``` + +- `token` is the user token. It expires after `expiresIn` seconds, 1800. +- `refreshToken` lasts `refreshExpiresIn` seconds, 1296000, which is 15 days. +- `accounts[0].ABHANumber` is the beneficiary you authenticated. + +The step is done when both tokens are stored against the case. Keep the user token live with [the refresh call](abha-biometric-auth-refresh-token.md) until the transaction cycle ends. + +## When it goes wrong + +- The biometric APIs answer `K-547`: the wrapped Aadhaar data hash was built with `lr` `N`. Build it with `lr` `Y`, keeping `rc` `Y`, `de` `N` and `pfr` `N`. +- The PID block sits under the wrong key. Fingerprint uses `bio.fingerPrintAuthPid`, iris uses `iris.irisAuthPid`. +- The token lapsed and cannot be refreshed. Start a fresh authentication. Without one, a pre-authorisation is refused with [`PAYR-1256`](../errors/payr-1256.md) and a claim with [`PAYR-1363`](../errors/payr-1363.md), unless it carries the consent questionnaire response. +- `401`: the token went on `bearer_auth` instead of `Authorization`. diff --git a/catalogue/nhcx/endpoints/abha-biometric-capture-pid.md b/catalogue/nhcx/endpoints/abha-biometric-capture-pid.md new file mode 100644 index 000000000..35d5ccc46 --- /dev/null +++ b/catalogue/nhcx/endpoints/abha-biometric-capture-pid.md @@ -0,0 +1,99 @@ +--- +id: nhcx.endpoint.abha-biometric-capture-pid +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /pmjay/sbxhcx/abdmproxy/abha/biometric/capture/pid +summary: >- + Check whether a scheme patient has finished the face scan on their phone, so the + hospital can complete the face check. +sources: +- url: https://hcxsbx.abdm.gov.in/images/9f1e6b545a693d38a704.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication Implementation Steps.docx + hash: sha256:fac8b14bfe8d518c0e651740537b9441c501d3cf2ab0f0482a07ab9f417e43a9 + fetched: '2026-09-14' + note: Biometric Authentication Implementation Steps, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. NHCX Face-Auth API Curl, FACE AUTH Capture PID. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.abha-biometric-faceauth-init + - nhcx.endpoint.abha-biometric-capture-pid + - nhcx.endpoint.abha-biometric-v2-auth-verify + - nhcx.endpoint.abha-biometric-auth-refresh-token + - nhcx.endpoint.abha-biometric-auth-init + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.session-token + errors: + - nhcx.error.payr-1256 + - nhcx.error.payr-1363 + concepts: + - nhcx.concept.biometric-authentication + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.biometric-face + decisions: + - nhcx.decision.biometric-modality +--- + +# POST /pmjay/sbxhcx/abdmproxy/abha/biometric/capture/pid + +## In plain words + +[PMJAY](../glossary/pmjay.md) requires proof that the beneficiary is physically present at the hospital. The hospital proves it by authenticating the beneficiary against their [ABHA](../../shared/glossary/abha.md), by fingerprint, iris or face. In face authentication the capture happens on the patient's phone, out of your system's sight. This call tells you whether it has finished. You poll it between showing the QR code and calling face verify. + +These are plain JSON calls: no JWE envelope and no callback. + +## Before you start + +- A session token for the `Authorization` header, not `bearer_auth`. See [the session token](../concepts/session-token.md). +- A `txnId` from [face auth init](abha-biometric-faceauth-init.md), shown to the patient as a QR code. + +## What happens + +Your system calls the ABDM proxy host with the `txnId`, repeatedly, until the capture is complete. + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/abdmproxy/abha/biometric/capture/pid' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ' \ + --header 'REQUEST-ID: ' \ + --header 'TIMESTAMP: ' \ + --data-raw '{ + "txnId": "" + }' +``` + +`REQUEST-ID` is a new UUID for every call ([REQUEST-ID](../../shared/glossary/request-id.md)). `TIMESTAMP` is the current time in UTC, ISO 8601 with milliseconds and a trailing `Z` ([TIMESTAMP](../../shared/glossary/timestamp-header.md)). + +**Retrying.** The call only reads the capture state, so repeat it freely. Give each attempt a new `REQUEST-ID`. + +## How you know it worked + +Before the patient finishes, you receive: + +```json +{ + "status": "PENDING", + "message": "Awaiting PID capture" +} +``` + +After the face scan, you receive: + +```json +{ + "status": "COMPLETE", + "message": "PID capture successful" +} +``` + +The step is done when `status` is `COMPLETE`. Call [face verify](abha-biometric-v2-auth-verify.md) next. + +## When it goes wrong + +- The status stays `PENDING`: the patient has not scanned the code or not finished the scan. Ask them to complete it in the ABHA app. +- Face verify is called before `COMPLETE`. Wait for `COMPLETE` first. +- The call goes to the fingerprint host. Use the ABDM proxy host. diff --git a/catalogue/nhcx/endpoints/abha-biometric-faceauth-init.md b/catalogue/nhcx/endpoints/abha-biometric-faceauth-init.md new file mode 100644 index 000000000..98cd1a664 --- /dev/null +++ b/catalogue/nhcx/endpoints/abha-biometric-faceauth-init.md @@ -0,0 +1,103 @@ +--- +id: nhcx.endpoint.abha-biometric-faceauth-init +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /pmjay/sbxhcx/abdmproxy/abha/biometric/faceauth/init +summary: >- + Start a face check that proves a scheme patient is at the hospital, and get the + transaction id for the code the patient scans. +sources: +- url: https://hcxsbx.abdm.gov.in/images/9f1e6b545a693d38a704.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication Implementation Steps.docx + hash: sha256:fac8b14bfe8d518c0e651740537b9441c501d3cf2ab0f0482a07ab9f417e43a9 + fetched: '2026-09-14' + note: Biometric Authentication Implementation Steps, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. NHCX Face-Auth API Curl, Face Auth Init API and step 1.1. +- url: https://hcxsbx.abdm.gov.in/images/a2f07ff8158e86e9e92a.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/FaceAuth Postman Collection.zip + hash: sha256:f2db63f7fe272178ee57acfcfd32dbc40680d69527dc35c6724f0da2a32fcaab + fetched: '2026-09-14' + note: FaceAuth Postman Collection, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. item FaceAuth init. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.abha-biometric-faceauth-init + - nhcx.endpoint.abha-biometric-capture-pid + - nhcx.endpoint.abha-biometric-v2-auth-verify + - nhcx.endpoint.abha-biometric-auth-refresh-token + - nhcx.endpoint.abha-biometric-auth-init + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.session-token + errors: + - nhcx.error.payr-1256 + - nhcx.error.payr-1363 + concepts: + - nhcx.concept.biometric-authentication + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.biometric-face + decisions: + - nhcx.decision.biometric-modality +--- + +# POST /pmjay/sbxhcx/abdmproxy/abha/biometric/faceauth/init + +## In plain words + +[PMJAY](../glossary/pmjay.md) requires proof that the beneficiary is physically present at the hospital. The hospital proves it by authenticating the beneficiary against their [ABHA](../../shared/glossary/abha.md), by fingerprint, iris or face. Face authentication works when fingerprint and iris do not. The patient completes the capture on their own phone in the ABHA app. Init returns a `txnId` that you show to the patient as a QR code. + +These are plain JSON calls: no JWE envelope and no callback. + +## Before you start + +- The beneficiary's ABHA is linked to their PMJAY card. Where it is not, follow the scheme's approved [KYC](../../shared/glossary/kyc.md) protocols instead. +- A session token for the `Authorization` header, not `bearer_auth`. See [the session token](../concepts/session-token.md). +- The patient has the ABHA app on a phone. In the sandbox, use the sandbox ABHA app. +- The patient can complete a face scan with the Aadhaar [RD service](../glossary/rd-service.md) app. + +## What happens + +Your system calls the ABDM proxy host, not the fingerprint host. + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/abdmproxy/abha/biometric/faceauth/init' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ' \ + --header 'REQUEST-ID: ' \ + --header 'TIMESTAMP: ' \ + --data-raw '{ + "scope": ["abha-enrol", "face-auth"] + }' +``` + +`REQUEST-ID` is a new UUID for every call ([REQUEST-ID](../../shared/glossary/request-id.md)). `TIMESTAMP` is the current time in UTC, ISO 8601 with milliseconds and a trailing `Z` ([TIMESTAMP](../../shared/glossary/timestamp-header.md)). + +Then: + +1. Render `https://phrsbx.abdm.gov.in/face-auth?txnId=` as a QR code. +2. The patient taps the QR icon in the ABHA app, scans the code, presses **Continue** and completes the face scan. +3. Poll [capture PID](abha-biometric-capture-pid.md) until it answers `COMPLETE`. + +**Retrying.** Each init returns its own `txnId`. If the patient cannot finish, call init again and show the new code. + +## How you know it worked + +You receive a JSON body with a `txnId`: + +```json +{ + "txnId": "", + "message": "Transaction Id generated Successfully" +} +``` + +The step is done when the QR code built from that `txnId` is on screen for the patient. + +## When it goes wrong + +- The call goes to the fingerprint host. Face sits under `/pmjay/sbxhcx/abdmproxy/abha/biometric/`. +- You wait for a callback. None comes. Poll capture PID. +- The same `REQUEST-ID` is sent twice. Generate a new one for every call. diff --git a/catalogue/nhcx/endpoints/abha-biometric-v2-auth-verify.md b/catalogue/nhcx/endpoints/abha-biometric-v2-auth-verify.md new file mode 100644 index 000000000..8945ddc07 --- /dev/null +++ b/catalogue/nhcx/endpoints/abha-biometric-v2-auth-verify.md @@ -0,0 +1,128 @@ +--- +id: nhcx.endpoint.abha-biometric-v2-auth-verify +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /pmjay/sbxhcx/abdmproxy/abha/biometric/v2/auth/verify +summary: >- + Complete a face check of a scheme patient and receive the short-lived token that + proves they were present. +sources: +- url: https://hcxsbx.abdm.gov.in/images/9f1e6b545a693d38a704.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication Implementation Steps.docx + hash: sha256:fac8b14bfe8d518c0e651740537b9441c501d3cf2ab0f0482a07ab9f417e43a9 + fetched: '2026-09-14' + note: Biometric Authentication Implementation Steps, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. NHCX Face-Auth API Curl, FACE AUTH Aadhar Verify. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 15, Q26.9 process type. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.abha-biometric-faceauth-init + - nhcx.endpoint.abha-biometric-capture-pid + - nhcx.endpoint.abha-biometric-v2-auth-verify + - nhcx.endpoint.abha-biometric-auth-refresh-token + - nhcx.endpoint.abha-biometric-auth-init + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.session-token + errors: + - nhcx.error.payr-1256 + - nhcx.error.payr-1363 + concepts: + - nhcx.concept.biometric-authentication + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.biometric-face + decisions: + - nhcx.decision.biometric-modality +--- + +# POST /pmjay/sbxhcx/abdmproxy/abha/biometric/v2/auth/verify + +## In plain words + +[PMJAY](../glossary/pmjay.md) requires proof that the beneficiary is physically present at the hospital. The hospital proves it by authenticating the beneficiary against their [ABHA](../../shared/glossary/abha.md), by fingerprint, iris or face. Face verify completes a face authentication once the capture is `COMPLETE`. It sends the encrypted Aadhaar number and the Aadhaar-linked mobile, and returns the same token pair as fingerprint and iris, with the ABHA profile. + +These are plain JSON calls: no JWE envelope and no callback. + +## Before you start + +- A session token for the `Authorization` header, not `bearer_auth`. See [the session token](../concepts/session-token.md). +- The participant code of the scheme payer the authentication is for. It goes in the `payerid` header. +- A `txnId` from [face auth init](abha-biometric-faceauth-init.md) that [capture PID](abha-biometric-capture-pid.md) reports `COMPLETE`. +- The patient's Aadhaar number, encrypted with the public key below using the transformation `RSA/ECB/OAEPWithSHA-1AndMGF1Padding`, base64 encoded. +- The patient's Aadhaar-linked mobile number. + +## What happens + +Encrypt the Aadhaar number with this X.509 public key: + +```text +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAstWB95C5pHLXiYW59qyO4Xb+59KYVm9Hywbo77qETZVAyc6VIsxU+UWhd/k/YtjZibCznB+HaXWX9TVTFs9Nwgv7LRGq5uLczpZQDrU7dnGkl/urRA8p0Jv/f8T0MZdFWQgks91uFffeBmJOb58u68ZRxSYGMPe4hb9XXKDVsgoSJaRNYviH7RgAI2QhTCwLEiMqIaUX3p1SAc178ZlN8qHXSSGXvhDR1GKM+y2DIyJqlzfik7lD14mDY/I4lcbftib8cv7llkybtjX1AayfZp4XpmIXKWv8nRM488/jOAF81Bi13paKgpjQUUuwq9tb5Qd/DChytYgBTBTJFe7irDFCmTIcqPr8+IMB7tXA3YXPp3z605Z6cGoYxezUm2Nz2o6oUmarDUntDhq/PnkNergmSeSvS8gD9DHBuJkJWZweG3xOPXiKQAUBr92mdFhJGm6fitO5jsBxgpmulxpG0oKDy9lAOLWSqK92JMcbMNHn4wRikdI9HSiXrrI7fLhJYTbyU3I4v5ESdEsayHXuiwO/1C8y56egzKSw44GAtEpbAkTNEEfK5H5R0QnVBIXOvfeF4tzGvmkfOO6nNXU3o/WAdOyV3xSQ9dqLY5MEL4sJCGY1iJBIAQ452s8v0ynJG5Yq+8hNhsCVnklCzAlsIzQpnSVDUVEzv17grVAw078CAwEAAQ== +``` + +Then call the ABDM proxy host: + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/abdmproxy/abha/biometric/v2/auth/verify' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ' \ + --header 'REQUEST-ID: ' \ + --header 'TIMESTAMP: ' \ + --header 'payerid: ' \ + --header 'process: Preauth' \ + --data-raw '{ + "authData": { + "authMethods": ["face_auth"], + "face": { + "txnId": "", + "aadhaar": "", + "mobile": "" + } + }, + "authMode": "FACE_AUTH" + }' +``` + +`REQUEST-ID` is a new UUID for every call ([REQUEST-ID](../../shared/glossary/request-id.md)). `TIMESTAMP` is the current time in UTC, ISO 8601 with milliseconds and a trailing `Z` ([TIMESTAMP](../../shared/glossary/timestamp-header.md)). `process` is `Preauth` at registration or pre-authorisation, and `Discharge` at discharge. + +**Retrying.** A face capture belongs to its `txnId`. After a failure, start again with a new init. + +## How you know it worked + +You receive a JSON body with a `tokens` object and an `ABHAProfile`: + +```json +{ + "txnId": "", + "message": "", + "tokens": { + "token": "", + "expiresIn": "1800", + "refreshExpiresIn": "1296000", + "refreshToken": "" + }, + "ABHAProfile": { + "ABHANumber": "", + "preferredAddress": "", + "abhaStatus": "ACTIVE" + } +} +``` + +`expiresIn` and `refreshExpiresIn` arrive as strings here. The profile also carries name, date of birth, gender, photo, mobile and address. + +The step is done when both tokens are stored against the case. Keep only the profile fields the record needs. + +## When it goes wrong + +- The Aadhaar number is sent in the clear, or validated as twelve digits after encryption. Send the base64 ciphertext. +- The call is made before capture PID answers `COMPLETE`. +- The call goes to the fingerprint host. Use the ABDM proxy host. +- No token is obtained before the pre-authorisation or claim. The request is refused with [`PAYR-1256`](../errors/payr-1256.md) or [`PAYR-1363`](../errors/payr-1363.md) unless it carries the consent questionnaire response. diff --git a/catalogue/nhcx/endpoints/claim-on-submit.md b/catalogue/nhcx/endpoints/claim-on-submit.md new file mode 100644 index 000000000..e90f1f165 --- /dev/null +++ b/catalogue/nhcx/endpoints/claim-on-submit.md @@ -0,0 +1,192 @@ +--- +id: nhcx.endpoint.claim-on-submit +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/claim/on_submit +summary: >- + Send an insurer's decision on a hospital's claim back to that hospital through + the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: Claim, /v1/claim/on_submit rows.' +- url: https://hcxsbx.abdm.gov.in/claimhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/claimhcxservice.json + hash: sha256:488eea449c6ee45dc324f4f7c095a862c7d50d0e238075846122b51b2bab4878 + fetched: '2026-09-14' + note: 'API specification: claimhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/claim/on_submit.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/claim/on_submit. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1 Acceptance and Error scenario; page 2. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, workflow ids 25, 26, 27, 28 and 29. +- url: https://hcxsbx.abdm.gov.in/images/064cf2e059987011e53a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Claim.pdf + hash: sha256:66290de20d57d69e681946a0101518092ca43b3775bb38997c43beb17fb38076 + fetched: '2026-09-14' + note: Claim, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. page 2, items 4 to 6. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.claim-submit + - nhcx.endpoint.paymentnotice-request + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.claim-submit + - nhcx.callback.claim-on-submit + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1517 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.retries-and-expiry + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + flows: + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + fhir: + - nhcx.fhir.claim-response + tests: + - nhcx.test.payer-uc-11 + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/claim/on_submit + +## In plain words + +This carries the payer's decision on a claim, often in stages. As a payer, you send a sealed ClaimResponse bundle to [NHCX](../../shared/glossary/nhcx.md), which delivers it to the provider. Interim answers keep the claim open. A final answer closes it. + +You call it after you have received a [`/v1/claim/submit`](claim-submit.md). An approved claim is followed by [payment notices](paymentnotice-request.md). + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md). +- The `/v1/claim/submit` you are answering, received on [your registered address](../callbacks/claim-submit.md), decrypted, and acknowledged with 202 within 30 seconds. +- That request's `x-hcx-correlation_id` and `x-hcx-sender_code`, stored. You echo the first and address the answer to the second. +- The encryption certificate of the provider, fetched with [`/fetch/certs`](fetch-certs.md). +- A ClaimResponse bundle in [FHIR](../../shared/glossary/fhir.md), built as in [the claim response bundle](../fhir/claim-response.md). +- A handler for [`/v1/error`](../callbacks/error.md), where NHCX reports an answer it could not deliver. + +## What happens + +Your system, as the payer or a TPA acting for it, answers a request it received ([receiving the request](../callbacks/claim-submit.md)) by calling NHCX on `/v1/claim/on_submit`. NHCX answers 202 at once and delivers the same path to the registered address of the provider ([receiving `/v1/claim/on_submit`](../callbacks/claim-on-submit.md)). + +### 1. Seal the answer + +Swap the sender and recipient codes of the request. Echo its correlation id. Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md): + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "26", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +Interim answers carry `response.partial`: `25` received, `28` in process, `29` forwarded. `27` raises a query. `26` approves with `response.complete`. After a `response.complete`, send nothing more on that claim. The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/claim/on_submit' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "type": "JWEPayload", + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Refusing a request + +To refuse the request at protocol level instead, send `"type": "ProtocolResponse"` on this path with `x-hcx-status` `response.error` and `x-hcx-error_details` holding `code`, `message` and `trace`. Keep clinical and business reasons inside the sealed payload. Only protocol errors go in the header. + +### 4. Retrying + +**Idempotency.** Echo the `x-hcx-correlation_id` of the request you are answering. A correlation id NHCX does not hold, or one it has already deleted, is refused with [`NHCX-1010`](../errors/nhcx-1010.md). Generate a new `x-hcx-api_call_id` for every call. `/v1/status` looks a message up by that value ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so never reuse one. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "claim", + "protocol_status": "request.dispatched" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` matches the request you answered, and `api_call_id` matches the value you sealed. +- `result.entity_type` is `claim`. +- `error.code` and `error.message` are empty. + +NHCX then delivers your answer to the provider. The recipient must answer each delivery with 202 and the acknowledgement body within 30 seconds. Otherwise NHCX retries up to five times, then deletes the request and reports it on the sender's [`/v1/error`](../callbacks/error.md). The step is done when you hold the 202 and no report for this correlation id arrives on your `/v1/error`. + +## When it goes wrong + +- [`NHCX-1010`](../errors/nhcx-1010.md): NHCX holds no request with that correlation id. You minted a new one instead of echoing it, or the request was deleted after failed deliveries. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `response.complete`, `response.partial` or `response.error`. +- [`PAYR-1517`](../errors/payr-1517.md): a refusal arrived as a `JWEPayload`. Protocol refusals travel as `ProtocolResponse`. +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): get a new session token and send again. +- A report arrives on your [`/v1/error`](../callbacks/error.md): the requester's address did not acknowledge five deliveries. The request is dead on that correlation id. diff --git a/catalogue/nhcx/endpoints/claim-submit.md b/catalogue/nhcx/endpoints/claim-submit.md new file mode 100644 index 000000000..b087be667 --- /dev/null +++ b/catalogue/nhcx/endpoints/claim-submit.md @@ -0,0 +1,207 @@ +--- +id: nhcx.endpoint.claim-submit +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/claim/submit +summary: >- + Send the final bill for a treated patient to the insurer through the claims exchange, + and get a receipt while the decision follows later. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: Claim, /v1/claim/submit rows.' +- url: https://hcxsbx.abdm.gov.in/claimhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/claimhcxservice.json + hash: sha256:488eea449c6ee45dc324f4f7c095a862c7d50d0e238075846122b51b2bab4878 + fetched: '2026-09-14' + note: 'API specification: claimhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/claim/submit.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/claim/submit. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Acceptance scenario. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, workflow ids 15, 151 and 27. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2 Q3; page 4 Q12 and Q14. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 6, 7 and 8. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 5 table 5.1; page 12 Discharge details. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.claim-on-submit + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.dummy-payer-process-request + - nhcx.endpoint.task-submit + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.status + callbacks: + - nhcx.callback.claim-submit + - nhcx.callback.claim-on-submit + - nhcx.callback.communication-request + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1001 + - nhcx.error.payr-1302 + - nhcx.error.payr-1363 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + flows: + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + tests: + - nhcx.test.provider-uc-09 + - nhcx.test.tc-cl-01 + - nhcx.test.tc-cl-02 + sandbox: + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.environments-and-base-urls + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/claim/submit + +## In plain words + +A claim is the hospital's request to be paid for treatment already given. After discharge, your system, as the provider, sends a Claim bundle with `use` `claim` to [NHCX](../../shared/glossary/nhcx.md), sealed for the payer. NHCX gives you a receipt at once. The payer's decision arrives later on your `/v1/claim/on_submit`, possibly in several stages. + +The same path carries the first claim, a resubmission and your answer to a payer's query. + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md) and [how to get one](session-token.md). +- Your own [participant code](../glossary/participant-code.md), with your callback address registered, reachable from NHCX and answering 202 within 30 seconds. See [callback URL rules](../sandbox/callback-url-requirements.md). +- The payer's participant code. Take it from `processingID` in the [`/participant/get/policies`](participant-get-policies.md) response, not from `PayerID`. +- The recipient's encryption certificate, fetched with [`/fetch/certs`](fetch-certs.md). You seal the message with its public key. +- A Claim bundle in [FHIR](../../shared/glossary/fhir.md) with `use` `claim`, built as in [the claim request bundle](../fhir/claim-request.md), referencing the approved pre-authorisation. +- A handler for [`/v1/error`](../callbacks/error.md), so a request NHCX cannot deliver does not look like one still under review. +- An approved pre-authorisation for the case, from [`/v1/preauth/submit`](preauth-submit.md). +- For a [PMJAY](../glossary/pmjay.md) case: discharge biometric authentication, or the Authentication Consent questionnaire response. +- A handler for [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- In the sandbox you can address the [dummy payer](../sandbox/dummy-payer.md), participant `1000003538@hcx`, which answers without a real insurer. + +## What happens + +Your system, as the provider, calls NHCX on `/v1/claim/submit`. NHCX checks the envelope, answers 202 at once, and forwards the same path to the payer's registered address ([receiving `/v1/claim/submit`](../callbacks/claim-submit.md)). The payer answers later on [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md), which NHCX delivers to you. + +### 1. Seal the message + +Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md) and encrypt the bundle with the recipient's public key. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "15", + "x-hcx-use_case": "New", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. Workflow `15` is a new claim. Answer a payer's claim query (workflow `27`) with `151`, not a fresh `15`. `x-hcx-use_case` takes `New` or `Resubmit`. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/claim/submit' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Retrying + +**Idempotency.** NHCX keys every conversation on `x-hcx-correlation_id`. An initiating request that reuses a correlation id NHCX already holds is refused with [`NHCX-1006`](../errors/nhcx-1006.md). So a blind retry is not safe. If your call timed out, ask [`/v1/status`](status.md) before you resend. `/v1/status` finds a message by its `x-hcx-api_call_id` ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so generate a new one for every call, a retry included. After a request fails for good, NHCX makes its correlation id inactive. Start a new cycle with a new correlation id. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "claim", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` and `api_call_id` match the values you sealed. +- `result.entity_type` is `claim`. +- `result.protocol_status` is `request.queued` or `request.dispatched`. +- `error.code` and `error.message` are empty. + +The 202 is a receipt, not a decision. NHCX never returns a decision synchronously. The step is done when [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md) reaches your callback address with the same `x-hcx-correlation_id`, and your handler has answered it 202 within 30 seconds. Interim answers carry `response.partial`. The claim is decided when an answer carries `response.complete`. + +## When it goes wrong + +- [`PAYR-1302`](../errors/payr-1302.md): no approved pre-authorisation exists for the case number. +- [`PAYR-1363`](../errors/payr-1363.md): a [PMJAY](../glossary/pmjay.md) claim carries neither discharge biometric authentication nor the consent questionnaire response. +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): the session token expired or lacks the `Bearer ` prefix. Get a new token and send again. See [every call returns 401](../troubleshooting/everything-returns-401.md). +- [`NHCX-1003`](../errors/nhcx-1003.md): the recipient code is not registered. A provider used `PayerID` instead of `processingID`. +- [`NHCX-1006`](../errors/nhcx-1006.md): the correlation id was used before. Start the cycle with a new one. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `request.initiated`. diff --git a/catalogue/nhcx/endpoints/communication-on-request.md b/catalogue/nhcx/endpoints/communication-on-request.md new file mode 100644 index 000000000..2805d4272 --- /dev/null +++ b/catalogue/nhcx/endpoints/communication-on-request.md @@ -0,0 +1,184 @@ +--- +id: nhcx.endpoint.communication-on-request +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/communication/on_request +summary: >- + Answer an insurer's message about a case, for example with the documents it asked + for, through the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: Communication (additional docs), /v1/communication/on_request rows.' +- url: https://hcxsbx.abdm.gov.in/communicationhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/communicationhcxservice.json + hash: sha256:0ad58a98851158057d38d42a8327349548644c1b2f1a33b4f94acb4c1840a8a4 + fetched: '2026-09-14' + note: 'API specification: communicationhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/communication/on_request.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/communication/on_request. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1 Acceptance and Error scenario; page 2. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1 Preauth step 5; page 2 Communication steps 3 and 4. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.communication-request + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.dummy-payer-process-request + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.communication-request + - nhcx.callback.communication-on-request + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1517 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.retries-and-expiry + - nhcx.concept.queries-and-communication + flows: + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-query-response + tests: + - nhcx.test.provider-uc-08 + sandbox: + - nhcx.sandbox.dummy-payer + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/communication/on_request + +## In plain words + +When a payer sends you a communication request, you answer it here. Your system, as the provider, sends a sealed Task bundle with a Communication to [NHCX](../../shared/glossary/nhcx.md), carrying the documents or information the payer asked for. NHCX delivers it to the payer. + +After a query, the payer's final decision arrives later on `/v1/preauth/on_submit` or `/v1/claim/on_submit`. + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md). +- The `/v1/communication/request` you are answering, received on [your registered address](../callbacks/communication-request.md), decrypted, and acknowledged with 202 within 30 seconds. +- That request's `x-hcx-correlation_id` and `x-hcx-sender_code`, stored. You echo the first and address the answer to the second. +- The encryption certificate of the payer, fetched with [`/fetch/certs`](fetch-certs.md). +- A Task bundle in [FHIR](../../shared/glossary/fhir.md) with a Communication whose `payload.contentAttachment` carries what the payer asked for. +- A handler for [`/v1/error`](../callbacks/error.md), where NHCX reports an answer it could not deliver. + +## What happens + +Your system, as the provider, answers a request it received ([receiving the request](../callbacks/communication-request.md)) by calling NHCX on `/v1/communication/on_request`. NHCX answers 202 at once and delivers the same path to the registered address of the payer ([receiving `/v1/communication/on_request`](../callbacks/communication-on-request.md)). + +### 1. Seal the answer + +Swap the sender and recipient codes of the request. Echo its correlation id. Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md): + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +Send `response.complete`. The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/communication/on_request' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "type": "JWEPayload", + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Refusing a request + +To refuse the request at protocol level instead, send `"type": "ProtocolResponse"` on this path with `x-hcx-status` `response.error` and `x-hcx-error_details` holding `code`, `message` and `trace`. Keep clinical and business reasons inside the sealed payload. Only protocol errors go in the header. + +### 4. Retrying + +**Idempotency.** Echo the `x-hcx-correlation_id` of the request you are answering. A correlation id NHCX does not hold, or one it has already deleted, is refused with [`NHCX-1010`](../errors/nhcx-1010.md). Generate a new `x-hcx-api_call_id` for every call. `/v1/status` looks a message up by that value ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so never reuse one. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "task", + "protocol_status": "request.dispatched" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` matches the request you answered, and `api_call_id` matches the value you sealed. +- `result.entity_type` is `task`. +- `error.code` and `error.message` are empty. + +NHCX then delivers your answer to the payer. The recipient must answer each delivery with 202 and the acknowledgement body within 30 seconds. Otherwise NHCX retries up to five times, then deletes the request and reports it on the sender's [`/v1/error`](../callbacks/error.md). The step is done when you hold the 202 and no report for this correlation id arrives on your `/v1/error`. The payer's decision then arrives on [`/v1/preauth/on_submit`](../callbacks/preauth-on-submit.md) or [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). + +## When it goes wrong + +- [`NHCX-1010`](../errors/nhcx-1010.md): NHCX holds no request with that correlation id. You minted a new one instead of echoing it, or the request was deleted after failed deliveries. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `response.complete`, `response.partial` or `response.error`. +- [`PAYR-1517`](../errors/payr-1517.md): a refusal arrived as a `JWEPayload`. Protocol refusals travel as `ProtocolResponse`. +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): get a new session token and send again. +- A report arrives on your [`/v1/error`](../callbacks/error.md): the requester's address did not acknowledge five deliveries. The request is dead on that correlation id. diff --git a/catalogue/nhcx/endpoints/communication-request.md b/catalogue/nhcx/endpoints/communication-request.md new file mode 100644 index 000000000..aa2e53475 --- /dev/null +++ b/catalogue/nhcx/endpoints/communication-request.md @@ -0,0 +1,189 @@ +--- +id: nhcx.endpoint.communication-request +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/communication/request +summary: >- + Send a hospital a message about a case in progress, such as a request for more + documents, through the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: Communication (additional docs), /v1/communication/request rows.' +- url: https://hcxsbx.abdm.gov.in/communicationhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/communicationhcxservice.json + hash: sha256:0ad58a98851158057d38d42a8327349548644c1b2f1a33b4f94acb4c1840a8a4 + fetched: '2026-09-14' + note: 'API specification: communicationhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/communication/request.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/communication/request. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Acceptance scenario. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1 Preauth steps 3 to 5. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 12.1 Business context; 12.1 API and workflow codes. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2 Q3; page 4 Q12 and Q14. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 6 and 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.communication-on-request + - nhcx.endpoint.preauth-on-submit + - nhcx.endpoint.claim-on-submit + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.status + callbacks: + - nhcx.callback.communication-request + - nhcx.callback.communication-on-request + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1003 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.queries-and-communication + - nhcx.concept.workflow-codes + flows: + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-query-response + tests: + - nhcx.test.payer-uc-10 + sandbox: + - nhcx.sandbox.dummy-payer +--- + +# POST /v1/communication/request + +## In plain words + +A communication request is the payer's way to speak first. As a payer, you send the hospital a sealed message about a case already in progress, for example a request for additional documents. [NHCX](../../shared/glossary/nhcx.md) delivers it to the provider, which answers on `/v1/communication/on_request`. + +The claim or pre-authorisation stays with you while you wait. Your decision still goes out later on its own `on_submit` path. + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md) and [how to get one](session-token.md). +- Your own [participant code](../glossary/participant-code.md), with your callback address registered, reachable from NHCX and answering 202 within 30 seconds. See [callback URL rules](../sandbox/callback-url-requirements.md). +- The provider's participant code: the sender code of the claim or pre-authorisation this message concerns. +- The recipient's encryption certificate, fetched with [`/fetch/certs`](fetch-certs.md). You seal the message with its public key. +- A Task bundle in [FHIR](../../shared/glossary/fhir.md) that references a CommunicationRequest saying what you need. See [queries and communication](../concepts/queries-and-communication.md). +- A handler for [`/v1/error`](../callbacks/error.md), so a request NHCX cannot deliver does not look like one still under review. +- A handler for [`/v1/communication/on_request`](../callbacks/communication-on-request.md), where the provider's answer arrives. + +## What happens + +Your system, as the payer, calls NHCX on `/v1/communication/request`. NHCX checks the envelope, answers 202 at once, and forwards the same path to the provider's registered address ([receiving `/v1/communication/request`](../callbacks/communication-request.md)). The provider answers later on [`/v1/communication/on_request`](../callbacks/communication-on-request.md), which NHCX delivers to you. + +### 1. Seal the message + +Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md) and encrypt the bundle with the recipient's public key. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. `x-hcx-workflow_id` is the workflow of the claim or pre-authorisation the message concerns. NHCX checks it. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/communication/request' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Retrying + +**Idempotency.** NHCX keys every conversation on `x-hcx-correlation_id`. An initiating request that reuses a correlation id NHCX already holds is refused with [`NHCX-1006`](../errors/nhcx-1006.md). So a blind retry is not safe. If your call timed out, ask [`/v1/status`](status.md) before you resend. `/v1/status` finds a message by its `x-hcx-api_call_id` ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so generate a new one for every call, a retry included. After a request fails for good, NHCX makes its correlation id inactive. Start a new cycle with a new correlation id. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "task", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` and `api_call_id` match the values you sealed. +- `result.entity_type` is `task`. +- `result.protocol_status` is `request.queued` or `request.dispatched`. +- `error.code` and `error.message` are empty. + +The 202 is a receipt, not a decision. NHCX never returns a decision synchronously. The step is done when [`/v1/communication/on_request`](../callbacks/communication-on-request.md) reaches your callback address with the same `x-hcx-correlation_id`, and your handler has answered it 202 within 30 seconds. + +## When it goes wrong + +- [`PAYR-1003`](../errors/payr-1003.md), invalid workflow requested: the workflow id does not match the claim or pre-authorisation. +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): get a new session token and send again. +- [`NHCX-1003`](../errors/nhcx-1003.md): the provider code is not registered in NHCX. +- [`NHCX-1006`](../errors/nhcx-1006.md): the correlation id was used before. Open the cycle with a new one. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `request.initiated`. +- You got 202 and nothing more arrives. The provider's address may be unreachable. Check your [`/v1/error`](../callbacks/error.md) and ask [`/v1/status`](status.md). diff --git a/catalogue/nhcx/endpoints/coverageeligibility-check.md b/catalogue/nhcx/endpoints/coverageeligibility-check.md new file mode 100644 index 000000000..16e3460fc --- /dev/null +++ b/catalogue/nhcx/endpoints/coverageeligibility-check.md @@ -0,0 +1,194 @@ +--- +id: nhcx.endpoint.coverageeligibility-check +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/coverageeligibility/check +summary: >- + Ask an insurer, through the claims exchange, whether a patient's policy is active + and what it covers, and get a receipt while the answer follows later. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: CoverageEligibility, /v1/coverageeligibility/check rows.' +- url: https://hcxsbx.abdm.gov.in/coverageeligibilityhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/coverageeligibilityhcxservice.json + hash: sha256:1723a4020b1b33d0bc1d7175609f0d05e6a6a78e8b4c52041222396639ceb52c + fetched: '2026-09-14' + note: 'API specification: coverageeligibilityhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/coverageeligibility/check.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/coverageeligibility/check. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Acceptance scenario. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: 'NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet: Scenarios, rows 3 to 5.' +- url: https://hcxsbx.abdm.gov.in/images/cfcbe62e8378d4f48ee6.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Coverage Eligibility.pdf + hash: sha256:69dd680ddac44231a97276a1d735e45777d8e43b5563b7248fd367a838d9744f + fetched: '2026-09-14' + note: Coverage Eligibility, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. page 1, items 6 to 8. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2 Q3; page 4 Q12 and Q14. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 6, 7 and 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.coverageeligibility-on-check + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.status + callbacks: + - nhcx.callback.coverageeligibility-check + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1001 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.coverage-eligibility-purposes + flows: + - nhcx.flow.coverage-eligibility-check + fhir: + - nhcx.fhir.coverage-eligibility-request + decisions: + - nhcx.decision.eligibility-purpose + tests: + - nhcx.test.provider-uc-05 + - nhcx.test.tc-ce-01 + sandbox: + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.environments-and-base-urls + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/coverageeligibility/check + +## In plain words + +A hospital asks the patient's insurer whether the policy is in force, what it covers, and whether a treatment needs pre-authorisation. Your system, as the provider, sends the question to [NHCX](../../shared/glossary/nhcx.md), the National Health Claims Exchange, sealed so only the payer can read it. NHCX gives you a receipt at once. The payer's answer arrives later on your `/v1/coverageeligibility/on_check`. + +Call it at registration or admission, before [`/v1/preauth/submit`](preauth-submit.md). + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md) and [how to get one](session-token.md). +- Your own [participant code](../glossary/participant-code.md), with your callback address registered, reachable from NHCX and answering 202 within 30 seconds. See [callback URL rules](../sandbox/callback-url-requirements.md). +- The payer's participant code. Take it from `processingID` in the [`/participant/get/policies`](participant-get-policies.md) response, not from `PayerID`. +- The recipient's encryption certificate, fetched with [`/fetch/certs`](fetch-certs.md). You seal the message with its public key. +- A CoverageEligibilityRequest bundle in [FHIR](../../shared/glossary/fhir.md), built as in [the coverage eligibility request bundle](../fhir/coverage-eligibility-request.md). Its `purpose` decides what the payer computes. See [which purpose to send](../decisions/eligibility-purpose.md). +- A handler for [`/v1/error`](../callbacks/error.md), so a request NHCX cannot deliver does not look like one still under review. +- A handler for [`/v1/coverageeligibility/on_check`](../callbacks/coverageeligibility-on-check.md). +- In the sandbox you can address the [dummy payer](../sandbox/dummy-payer.md), participant `1000003538@hcx`, which answers without a real insurer. + +## What happens + +Your system, as the provider, calls NHCX on `/v1/coverageeligibility/check`. NHCX checks the envelope, answers 202 at once, and forwards the same path to the payer's registered address ([receiving `/v1/coverageeligibility/check`](../callbacks/coverageeligibility-check.md)). The payer answers later on [`/v1/coverageeligibility/on_check`](../callbacks/coverageeligibility-on-check.md), which NHCX delivers to you. + +### 1. Seal the message + +Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md) and encrypt the bundle with the recipient's public key. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. `x-hcx-workflow_id` is optional on this call. `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/coverageeligibility/check' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Retrying + +**Idempotency.** NHCX keys every conversation on `x-hcx-correlation_id`. An initiating request that reuses a correlation id NHCX already holds is refused with [`NHCX-1006`](../errors/nhcx-1006.md). So a blind retry is not safe. If your call timed out, ask [`/v1/status`](status.md) before you resend. `/v1/status` finds a message by its `x-hcx-api_call_id` ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so generate a new one for every call, a retry included. After a request fails for good, NHCX makes its correlation id inactive. Start a new cycle with a new correlation id. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "coverageeligibility", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` and `api_call_id` match the values you sealed. +- `result.entity_type` is `coverageeligibility`. +- `result.protocol_status` is `request.queued` or `request.dispatched`. +- `error.code` and `error.message` are empty. + +The 202 is a receipt, not a decision. NHCX never returns a decision synchronously. The step is done when [`/v1/coverageeligibility/on_check`](../callbacks/coverageeligibility-on-check.md) reaches your callback address with the same `x-hcx-correlation_id`, and your handler has answered it 202 within 30 seconds. The answer is a CoverageEligibilityResponse, a `ProtocolResponse` with an error, or an instruction to try another payer. + +## When it goes wrong + +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): the session token expired or lacks the `Bearer ` prefix. Get a new token and send again. See [every call returns 401](../troubleshooting/everything-returns-401.md). +- [`NHCX-1003`](../errors/nhcx-1003.md): the recipient code is not registered. A provider used `PayerID` instead of `processingID`. +- [`NHCX-1006`](../errors/nhcx-1006.md): the correlation id was used before. Start the cycle with a new one. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `request.initiated`. +- You got 202 and nothing more arrives. The recipient may have failed to decrypt ([`PAYR-1001`](../errors/payr-1001.md)) or your callback is unreachable. See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). diff --git a/catalogue/nhcx/endpoints/coverageeligibility-on-check.md b/catalogue/nhcx/endpoints/coverageeligibility-on-check.md new file mode 100644 index 000000000..f5e52de4d --- /dev/null +++ b/catalogue/nhcx/endpoints/coverageeligibility-on-check.md @@ -0,0 +1,183 @@ +--- +id: nhcx.endpoint.coverageeligibility-on-check +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/coverageeligibility/on_check +summary: >- + Send an insurer's answer to an eligibility question back to the hospital through + the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: CoverageEligibility, /v1/coverageeligibility/on_check rows.' +- url: https://hcxsbx.abdm.gov.in/coverageeligibilityhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/coverageeligibilityhcxservice.json + hash: sha256:1723a4020b1b33d0bc1d7175609f0d05e6a6a78e8b4c52041222396639ceb52c + fetched: '2026-09-14' + note: 'API specification: coverageeligibilityhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/coverageeligibility/on_check.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/coverageeligibility/on_check. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1 Acceptance and Error scenario; page 2. +- url: https://hcxsbx.abdm.gov.in/images/cfcbe62e8378d4f48ee6.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Coverage Eligibility.pdf + hash: sha256:69dd680ddac44231a97276a1d735e45777d8e43b5563b7248fd367a838d9744f + fetched: '2026-09-14' + note: Coverage Eligibility, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. page 2, items 4 to 7. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Status Description. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.coverageeligibility-check + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1517 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.retries-and-expiry + - nhcx.concept.coverage-eligibility-purposes + flows: + - nhcx.flow.coverage-eligibility-check + fhir: + - nhcx.fhir.coverage-eligibility-response + tests: + - nhcx.test.payer-uc-07 + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/coverageeligibility/on_check + +## In plain words + +This is the answer leg of an eligibility check. As a payer, you tell the hospital whether the policy is in force, what it covers, and whether a treatment needs pre-authorisation. You send a sealed CoverageEligibilityResponse to [NHCX](../../shared/glossary/nhcx.md), which delivers it to the provider. + +You call it after you have received and processed a [`/v1/coverageeligibility/check`](coverageeligibility-check.md). + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md). +- The `/v1/coverageeligibility/check` you are answering, received on [your registered address](../callbacks/coverageeligibility-check.md), decrypted, and acknowledged with 202 within 30 seconds. +- That request's `x-hcx-correlation_id` and `x-hcx-sender_code`, stored. You echo the first and address the answer to the second. +- The encryption certificate of the provider, fetched with [`/fetch/certs`](fetch-certs.md). +- A CoverageEligibilityResponse bundle in [FHIR](../../shared/glossary/fhir.md), built as in [the coverage eligibility response bundle](../fhir/coverage-eligibility-response.md). +- A handler for [`/v1/error`](../callbacks/error.md), where NHCX reports an answer it could not deliver. + +## What happens + +Your system, as the payer or a TPA acting for it, answers a request it received ([receiving the request](../callbacks/coverageeligibility-check.md)) by calling NHCX on `/v1/coverageeligibility/on_check`. NHCX answers 202 at once and delivers the same path to the registered address of the provider ([receiving `/v1/coverageeligibility/on_check`](../callbacks/coverageeligibility-on-check.md)). + +### 1. Seal the answer + +Swap the sender and recipient codes of the request. Echo its correlation id. Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md): + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +Send `response.complete` for a final answer and `response.partial` for a partial one. The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/coverageeligibility/on_check' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "type": "JWEPayload", + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Refusing a request + +To refuse the request at protocol level instead, send `"type": "ProtocolResponse"` on this path with `x-hcx-status` `response.error` and `x-hcx-error_details` holding `code`, `message` and `trace`. Keep clinical and business reasons inside the sealed payload. Only protocol errors go in the header. + +### 4. Retrying + +**Idempotency.** Echo the `x-hcx-correlation_id` of the request you are answering. A correlation id NHCX does not hold, or one it has already deleted, is refused with [`NHCX-1010`](../errors/nhcx-1010.md). Generate a new `x-hcx-api_call_id` for every call. `/v1/status` looks a message up by that value ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so never reuse one. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "coverageeligibility", + "protocol_status": "request.dispatched" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` matches the request you answered, and `api_call_id` matches the value you sealed. +- `result.entity_type` is `coverageeligibility`. +- `error.code` and `error.message` are empty. + +NHCX then delivers your answer to the provider. The recipient must answer each delivery with 202 and the acknowledgement body within 30 seconds. Otherwise NHCX retries up to five times, then deletes the request and reports it on the sender's [`/v1/error`](../callbacks/error.md). The step is done when you hold the 202 and no report for this correlation id arrives on your `/v1/error`. + +## When it goes wrong + +- [`NHCX-1010`](../errors/nhcx-1010.md): NHCX holds no request with that correlation id. You minted a new one instead of echoing it, or the request was deleted after failed deliveries. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `response.complete`, `response.partial` or `response.error`. +- [`PAYR-1517`](../errors/payr-1517.md): a refusal arrived as a `JWEPayload`. Protocol refusals travel as `ProtocolResponse`. +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): get a new session token and send again. +- A report arrives on your [`/v1/error`](../callbacks/error.md): the requester's address did not acknowledge five deliveries. The request is dead on that correlation id. diff --git a/catalogue/nhcx/endpoints/dummy-payer-paymentnotice-init.md b/catalogue/nhcx/endpoints/dummy-payer-paymentnotice-init.md new file mode 100644 index 000000000..a068c37cc --- /dev/null +++ b/catalogue/nhcx/endpoints/dummy-payer-paymentnotice-init.md @@ -0,0 +1,89 @@ +--- +id: nhcx.endpoint.dummy-payer-paymentnotice-init +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /paymentNotice/init +summary: >- + Make the sandbox's test insurer send your hospital a payment notice on demand, + so you can test receiving and acknowledging it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2-3, Payment Notice and CURL for Payment Notice Trigger API. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14 and Q16. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. sheet Scenarios, row 13. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.communication-on-request + - nhcx.endpoint.paymentnotice-on-request + - nhcx.endpoint.session-token + sandbox: + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.test-participants + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + - nhcx.flow.payment-notice + callbacks: + - nhcx.callback.paymentnotice-request +--- + +# POST /paymentNotice/init + +## In plain words + +A payment notice normally follows a settled claim, which is slow to reach in a test. This test hook makes the [NHCX](../../shared/glossary/nhcx.md) sandbox's [dummy payer](../sandbox/dummy-payer.md), `1000003538@hcx`, send one to you now. + +You call it as a provider integration testing its payment notice handling in the sandbox. It exists only in the sandbox. + +## Before you start + +- A handler for [`/v1/paymentnotice/request`](../callbacks/paymentnotice-request.md) on your registered callback address, answering 202 within 30 seconds. +- Your own participant code. +- A session token, sent on `bearer_auth`. See [the session token](../concepts/session-token.md). + +## What happens + +Your system calls the dummy payer's test hook directly. + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer/paymentNotice/init' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ + "providerId": "", + "claimNumber": "" + }' +``` + +Note the camel case in `paymentNotice`. Send `claimNumber` as an empty string. + +**Idempotency.** Each call triggers a notice. Call it again only when you want another one. + +## How you know it worked + +A payment notice from `1000003538@hcx` arrives on your [`/v1/paymentnotice/request`](../callbacks/paymentnotice-request.md). + +The step is done when your handler has answered it 202 within 30 seconds and you have sent the acknowledgement on [`/v1/paymentnotice/on_request`](paymentnotice-on-request.md). + +## When it goes wrong + +- Nothing arrives: `providerId` is not your participant code, or your callback address is unreachable. +- The notice arrives but the test is incomplete: you did not send the acknowledgement on `/v1/paymentnotice/on_request`. diff --git a/catalogue/nhcx/endpoints/dummy-payer-process-request.md b/catalogue/nhcx/endpoints/dummy-payer-process-request.md new file mode 100644 index 000000000..57ebe9e8e --- /dev/null +++ b/catalogue/nhcx/endpoints/dummy-payer-process-request.md @@ -0,0 +1,97 @@ +--- +id: nhcx.endpoint.dummy-payer-process-request +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /process/request +summary: >- + Make the sandbox's test insurer approve, reject or query a request you sent it, + so you can test your handling of each answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1-3, Preauth, Claim, Communication steps and CURL for Test Usecase Action API. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14 and Q16. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheets Preauth and Claim, on_submit rows. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.communication-on-request + - nhcx.endpoint.paymentnotice-on-request + - nhcx.endpoint.session-token + sandbox: + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.test-participants + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + - nhcx.flow.payment-notice + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + - nhcx.callback.communication-request +--- + +# POST /process/request + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) sandbox hosts a [dummy payer](../sandbox/dummy-payer.md), participant `1000003538@hcx`, that answers back. This test hook decides what it answers: approve, reject or query. + +You call it as a provider integration testing in the sandbox, after you have sent a pre-authorisation or claim to the dummy payer. It exists only in the sandbox. + +## Before you start + +- A pre-authorisation or claim sent to `1000003538@hcx` on [`/v1/preauth/submit`](preauth-submit.md) or [`/v1/claim/submit`](claim-submit.md), answered 202, with its correlation id kept. +- Your callback address registered, reachable from NHCX, and answering 202 within 30 seconds. +- A session token, sent on `bearer_auth`. See [the session token](../concepts/session-token.md). + +## What happens + +Your system calls the dummy payer's test hook directly. There is no JWE envelope on this call. + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer/process/request' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ + "action": "Approve", + "method": "Preauth", + "correlationId": "" + }' +``` + +`action` is `Approve`, `Reject` or `Query`. `method` is `Preauth` or `Claim`. + +After a `Query`, the dummy payer sends a communication request first. Answer it on [`/v1/communication/on_request`](communication-on-request.md) with the supporting documents. The final answer follows. + +**Idempotency.** Trigger one answer per request. To test another outcome, send a new request with its own correlation id. + +## How you know it worked + +The dummy payer's answer reaches your callback address on the correlation id you named: [`/v1/preauth/on_submit`](../callbacks/preauth-on-submit.md) for `Preauth`, [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md) for `Claim`. It is a sealed `ClaimResponse`, or a `ProtocolResponse` refusing the request. + +After a `Query`, a [`/v1/communication/request`](../callbacks/communication-request.md) arrives first. + +The step is done when your handler has answered that callback 202 within 30 seconds and recorded the outcome. + +## When it goes wrong + +- Nothing arrives: the correlation id belongs to a request that was not addressed to `1000003538@hcx`. +- After a `Query` the decision never comes: you did not answer the communication request on `/v1/communication/on_request`. +- A `ProtocolResponse` refuses an empty test bundle: there is no `Claim` inside. For a smoke test this refusal is the expected answer. diff --git a/catalogue/nhcx/endpoints/fetch-certs.md b/catalogue/nhcx/endpoints/fetch-certs.md new file mode 100644 index 000000000..e5154f7f4 --- /dev/null +++ b/catalogue/nhcx/endpoints/fetch-certs.md @@ -0,0 +1,126 @@ +--- +id: nhcx.endpoint.fetch-certs +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /fetch/certs +summary: >- + Fetch a recipient's public encryption certificate so you can seal a message only + they can open. +sources: +- url: https://hcxsbx.abdm.gov.in/images/b885e59891fedc7e725c.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection.zip + hash: sha256:2d082f244ee41d137a62af82380dcd2d5db9ebbab66824fd54a23c506d4d9a7f + fetched: '2026-09-14' + note: AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection, row 16 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Postman SANDBOX-Participant_APIs item Fetch Certs. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./fetch/certs.post.' +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 3.3 Certificate Fetch; Section 2.4. +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Use case 3 Get public Key. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Use case 5 Get public Key. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, For Sandbox / For Production envBaseUrl. +verified: + status: unverified +related: + concepts: + - nhcx.concept.encryption-certificate + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.send-a-sealed-request + decisions: + - nhcx.decision.key-encryption-algorithm + endpoints: + - nhcx.endpoint.fetch-participants-list + - nhcx.endpoint.participant-search + - nhcx.endpoint.session-token + errors: + - nhcx.error.nhcx-401 + troubleshooting: + - nhcx.troubleshooting.recipient-cannot-decrypt + tests: + - nhcx.test.provider-uc-03 + - nhcx.test.payer-uc-05 +--- + +# POST /fetch/certs + +## In plain words + +This call returns a participant's public encryption certificate. You seal every [NHCX](../../shared/glossary/nhcx.md) message with the recipient's certificate, so only the recipient can open it. See [encryption certificates](../concepts/encryption-certificate.md) and [the JWE envelope](../concepts/jwe-envelope.md). + +Get public Key is use case 3 of the provider [sandbox exit](../glossary/sandbox-exit.md) and use case 5 of the payer sandbox exit. + +## Before you start + +- A current access token from the [session call](session-token.md). It goes in the `bearer_auth` header as `Bearer `, with `Bearer` and a space in front. +- The recipient's [participant code](../glossary/participant-code.md). It is the same value you will put in `x-hcx-recipient_code`. + +## What happens + +Your system posts the recipient's participant code to the participant service. The registry answers on the same connection with the certificate. Nothing changes and no callback follows. + +| Environment | Participant service base URL | +|---|---| +| Sandbox | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | +| Production | `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` | + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/fetch/certs' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "participantid": "" + }' +``` + +Send all three headers on every participant service call: `Accept`, `Content-Type` and `bearer_auth`. The token header is `bearer_auth`, not `Authorization`. + +`participantid` is mandatory. + +The response body has this shape: + +```json +{ + "encryption_cert": "-----BEGIN CERTIFICATE-----\n\n-----END CERTIFICATE-----" +} +``` + +The value is PEM text. Some participants register a bare public key (SPKI) rather than a full [X.509 certificate](../glossary/x509-certificate.md). Import it as X.509 first, and fall back to SPKI if that fails. Short keys, under about 400 bytes, are usually SPKI. + +Cache each certificate for 24 hours, keyed by participant code. Do not fetch it before every message. + +**Idempotency.** The call only reads. Repeating it is safe. + +## How you know it worked + +You receive HTTP 200 with a PEM value in `encryption_cert`. Your code imports it as an X.509 certificate or an SPKI public key without error. + +A message you seal with that key reaches the recipient, and the recipient opens it. A decryption error from the recipient means the key is wrong or stale. + +## When it goes wrong + +- **400 or no certificate.** The body used `participant_code` or `participantcode`. This call takes `participantid`. +- **The recipient cannot decrypt your message.** You sealed it with your own certificate, or with a cached one the recipient has since replaced. Evict the cache entry, fetch again and resend. See [recipient cannot decrypt](../troubleshooting/recipient-cannot-decrypt.md). +- **Key import fails.** The participant registered a bare SPKI key. Fall back to SPKI import. +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/endpoints/fetch-participants-list.md b/catalogue/nhcx/endpoints/fetch-participants-list.md new file mode 100644 index 000000000..a30a38fd6 --- /dev/null +++ b/catalogue/nhcx/endpoints/fetch-participants-list.md @@ -0,0 +1,138 @@ +--- +id: nhcx.endpoint.fetch-participants-list +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /fetch/participants/list +summary: >- + List the payers, providers or third party administrators registered in a date + window, to pick who to address. +sources: +- url: https://hcxsbx.abdm.gov.in/images/b885e59891fedc7e725c.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection.zip + hash: sha256:2d082f244ee41d137a62af82380dcd2d5db9ebbab66824fd54a23c506d4d9a7f + fetched: '2026-09-14' + note: AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection, row 16 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Postman SANDBOX-Participant_APIs item Participant List. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./fetch/participants/list.post; schemas FetchParticipantRequest, ParticipantDetails.' +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 5.5 Payer Discovery API. +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Use case 1 Get Participant List. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Use case 4 Get Participant List. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, For Sandbox / For Production envBaseUrl. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-registry + - nhcx.concept.participant-code + flows: + - nhcx.flow.pmjay-patient-to-cashless + endpoints: + - nhcx.endpoint.participant-search + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.session-token + errors: + - nhcx.error.nhcx-401 + sandbox: + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.environments-and-base-urls + tests: + - nhcx.test.provider-uc-01 + - nhcx.test.payer-uc-04 +--- + +# POST /fetch/participants/list + +## In plain words + +This call lists the participants of one role registered on [NHCX](../../shared/glossary/nhcx.md) within a date window. A hospital uses it to find the [payer](../glossary/payer.md) to deal with. That payer's [participant code](../glossary/participant-code.md) becomes the address of every claim message. + +Get Participant List is use case 1 of the provider [sandbox exit](../glossary/sandbox-exit.md) and use case 4 of the payer sandbox exit. + +## Before you start + +- A current access token from the [session call](session-token.md). It goes in the `bearer_auth` header as `Bearer `, with `Bearer` and a space in front. +- A date window wide enough to cover the registration dates of the participants you expect. + +## What happens + +Your system posts a role and a date window to the participant service. The registry answers on the same connection. Nothing changes and no callback follows. + +| Environment | Participant service base URL | +|---|---| +| Sandbox | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | +| Production | `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` | + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/fetch/participants/list' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "role": "", + "fromdate": "", + "todate": "" + }' +``` + +Send all three headers on every participant service call: `Accept`, `Content-Type` and `bearer_auth`. The token header is `bearer_auth`, not `Authorization`. + +| Field | What to send | +|---|---| +| `role` | `PAYER`, `PROVIDER` or `TPA`. These are names, not the numeric role codes used at registration. | +| `fromdate`, `todate` | Dates in `dd/MM/yyyy` format only, for example `01/04/2021`. | +| `entitytype` | Optional. `Gov` narrows the list to government schemes. | + +The response body has this shape: + +```json +{ + "participantdetails": [ + { + "participantcode": "", + "participantname": "", + "address": "
", + "state": "" + } + ] +} +``` + +The list can also arrive under `participants`, or as a bare array. Accept all three forms. There is no name filter, so filter by name in your own code. + +**Idempotency.** The call only reads. Repeating it is safe. Fetch once with a wide window, cache the list and refresh it on a schedule. + +## How you know it worked + +You receive HTTP 200 with a list of participants of the role you asked for. The code you intend to address appears in it. + +In the sandbox, a `PAYER` list includes the [dummy payer](../sandbox/dummy-payer.md), `1000003538@hcx`. Confirm a chosen code with [`/participant/search`](participant-search.md) before you address it. + +## When it goes wrong + +- **400 or no results.** A date is not in `dd/MM/yyyy` format. Send `01/04/2021`, not `2021-04-01`. +- **A payer you expect is missing.** The date window is too narrow. Widen it to cover the payer's registration date. +- **Your parser finds nothing.** The list arrived under `participants` or as a bare array. Accept all three forms. +- **`role` is refused.** A numeric code such as `10002` went in. Send `PAYER`, `PROVIDER` or `TPA`. +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/endpoints/get-session.md b/catalogue/nhcx/endpoints/get-session.md new file mode 100644 index 000000000..830560083 --- /dev/null +++ b/catalogue/nhcx/endpoints/get-session.md @@ -0,0 +1,112 @@ +--- +id: nhcx.endpoint.get-session +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /get/session +summary: >- + Trade your client id and client secret, sent as a form, for an access token to + use on claims exchange calls. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 3.1 Token Request and Token Response. +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Use case 4 Get the auth token. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1-2, Use case 6 Get the auth token. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./get/session.post.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Q3; page 5, Q20. +verified: + status: unverified +related: + concepts: + - nhcx.concept.session-token + endpoints: + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + decisions: + - nhcx.decision.session-endpoint + errors: + - nhcx.error.nhcx-401 + troubleshooting: + - nhcx.troubleshooting.everything-returns-401 + tests: + - nhcx.test.provider-uc-04 + - nhcx.test.payer-uc-06 +--- + +# POST /get/session + +## In plain words + +`/get/session` returns an access token for [NHCX](../../shared/glossary/nhcx.md) calls. You post your client id and client secret as a form. The response carries `access_token` and its lifetime in `expires_in`. + +Get the auth token is use case 4 of the provider [sandbox exit](../glossary/sandbox-exit.md) and use case 6 of the payer sandbox exit. Both use cases name this call. The ABDM [session call](session-token.md) also issues NHCX tokens. [Choosing a session endpoint](../decisions/session-endpoint.md) compares the two. Use one of them across your whole integration. + +## Before you start + +- Your client id and client secret for the environment you are calling. Sandbox credentials do not work in production. +- No token is needed for this call itself. + +## What happens + +Your system posts a form to the sandbox host. The service answers on the same connection with the token. No callback follows. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/get/session' \ + -H 'Content-Type: application/x-www-form-urlencoded' \ + --data-urlencode 'client_id=' \ + --data-urlencode 'client_secret=' \ + --data-urlencode 'grant_type=client_credentials' +``` + +`grant_type` is always `client_credentials`. The two credentials are the only values you change. The body is a form, not JSON. + +A production address for this call is not yet published. + +The response body has this shape: + +```json +{ + "access_token": "", + "expires_in": , + "token_type": "Bearer" +} +``` + +Send `access_token` on every NHCX call as `bearer_auth: Bearer `. Read `expires_in` from each response and renew the token before it runs out. + +**Idempotency.** Each call mints a new token. Repeating it is safe. Keep the newest token. + +## How you know it worked + +You receive HTTP 200 with a non-empty `access_token`, `token_type` set to `Bearer` and an integer `expires_in`. + +A participant service call such as [`/fetch/certs`](fetch-certs.md) then returns 200 when it carries the token in `bearer_auth`. + +The token is valid for `expires_in` seconds from the moment it arrived. + +## When it goes wrong + +- **400 on this call.** The body went as JSON, or `grant_type` is missing or misspelt. Send `Content-Type: application/x-www-form-urlencoded` with all three fields. +- **Calls start returning 401 after a while.** The token lapsed. Mint a new one and retry the failed call once. See [NHCX-401](../errors/nhcx-401.md). +- **401 with a fresh token.** The `Bearer ` prefix is missing from `bearer_auth`. See [every call returns 401](../troubleshooting/everything-returns-401.md). +- **401 again after a retry with a new token.** The credentials are wrong or were replaced. Stop retrying and check the client id and secret. diff --git a/catalogue/nhcx/endpoints/insuranceplan-on-request.md b/catalogue/nhcx/endpoints/insuranceplan-on-request.md new file mode 100644 index 000000000..82b17dd4f --- /dev/null +++ b/catalogue/nhcx/endpoints/insuranceplan-on-request.md @@ -0,0 +1,179 @@ +--- +id: nhcx.endpoint.insuranceplan-on-request +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/insuranceplan/on_request +summary: >- + Send a policy's machine-readable terms for one hospital back to that hospital + through the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: Insurance Plan, /v1/insuranceplan/on_request rows.' +- url: https://hcxsbx.abdm.gov.in/insuranceplanhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/insuranceplanhcxservice.json + hash: sha256:03665c6e6a5c8d86e3d621ab577dd683cf13c155d5b9529f5be6ca70fef13dee + fetched: '2026-09-14' + note: 'API specification: insuranceplanhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/insuranceplan/on_request.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/insuranceplan/on_request. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1 Acceptance and Error scenario; page 2. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 6.1 Key Characteristics; 6.3 Business Conditions. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.insuranceplan-request + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.insuranceplan-request + - nhcx.callback.insuranceplan-on-request + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1517 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.retries-and-expiry + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.insurance-plan-request + fhir: + - nhcx.fhir.insurance-plan-bundle + - nhcx.fhir.pmjay-insurance-plan + tests: + - nhcx.test.payer-uc-08 + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/insuranceplan/on_request + +## In plain words + +This is the answer to an insurance plan request. As a payer, you return an InsurancePlan collection bundle for the policy and hospital named in the request. It lists specialities, packages, rates, claim conditions, mandatory documents and questionnaires. [NHCX](../../shared/glossary/nhcx.md) delivers it to the provider. + +You call it after you have received a [`/v1/insuranceplan/request`](insuranceplan-request.md). An empty plan is a valid answer when no coverage matches. + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md). +- The `/v1/insuranceplan/request` you are answering, received on [your registered address](../callbacks/insuranceplan-request.md), decrypted, and acknowledged with 202 within 30 seconds. +- That request's `x-hcx-correlation_id` and `x-hcx-sender_code`, stored. You echo the first and address the answer to the second. +- The encryption certificate of the provider, fetched with [`/fetch/certs`](fetch-certs.md). +- An InsurancePlan collection bundle in [FHIR](../../shared/glossary/fhir.md), built as in [the InsurancePlan bundles](../fhir/insurance-plan-bundle.md), filtered to the requesting hospital and policy. +- A handler for [`/v1/error`](../callbacks/error.md), where NHCX reports an answer it could not deliver. + +## What happens + +Your system, as the payer or a TPA acting for it, answers a request it received ([receiving the request](../callbacks/insuranceplan-request.md)) by calling NHCX on `/v1/insuranceplan/on_request`. NHCX answers 202 at once and delivers the same path to the registered address of the provider ([receiving `/v1/insuranceplan/on_request`](../callbacks/insuranceplan-on-request.md)). + +### 1. Seal the answer + +Swap the sender and recipient codes of the request. Echo its correlation id. Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md): + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +Send `response.complete` with the plan. When you cannot produce one, refuse as described below. The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/insuranceplan/on_request' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "type": "JWEPayload", + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Refusing a request + +To refuse the request at protocol level instead, send `"type": "ProtocolResponse"` on this path with `x-hcx-status` `response.error` and `x-hcx-error_details` holding `code`, `message` and `trace`. Keep clinical and business reasons inside the sealed payload. Only protocol errors go in the header. + +### 4. Retrying + +**Idempotency.** Echo the `x-hcx-correlation_id` of the request you are answering. A correlation id NHCX does not hold, or one it has already deleted, is refused with [`NHCX-1010`](../errors/nhcx-1010.md). Generate a new `x-hcx-api_call_id` for every call. `/v1/status` looks a message up by that value ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so never reuse one. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "insuranceplan", + "protocol_status": "request.dispatched" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` matches the request you answered, and `api_call_id` matches the value you sealed. +- `result.entity_type` is `insuranceplan`. +- `error.code` and `error.message` are empty. + +NHCX then delivers your answer to the provider. The recipient must answer each delivery with 202 and the acknowledgement body within 30 seconds. Otherwise NHCX retries up to five times, then deletes the request and reports it on the sender's [`/v1/error`](../callbacks/error.md). The step is done when you hold the 202 and no report for this correlation id arrives on your `/v1/error`. + +## When it goes wrong + +- [`NHCX-1010`](../errors/nhcx-1010.md): NHCX holds no request with that correlation id. You minted a new one instead of echoing it, or the request was deleted after failed deliveries. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `response.complete`, `response.partial` or `response.error`. +- [`PAYR-1517`](../errors/payr-1517.md): a refusal arrived as a `JWEPayload`. Protocol refusals travel as `ProtocolResponse`. +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): get a new session token and send again. +- A report arrives on your [`/v1/error`](../callbacks/error.md): the requester's address did not acknowledge five deliveries. The request is dead on that correlation id. diff --git a/catalogue/nhcx/endpoints/insuranceplan-request.md b/catalogue/nhcx/endpoints/insuranceplan-request.md new file mode 100644 index 000000000..5db17b530 --- /dev/null +++ b/catalogue/nhcx/endpoints/insuranceplan-request.md @@ -0,0 +1,195 @@ +--- +id: nhcx.endpoint.insuranceplan-request +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/insuranceplan/request +summary: >- + Ask an insurer, through the claims exchange, for the machine-readable terms of + a policy at your hospital: packages, rates and required documents. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: Insurance Plan, /v1/insuranceplan/request rows.' +- url: https://hcxsbx.abdm.gov.in/insuranceplanhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/insuranceplanhcxservice.json + hash: sha256:03665c6e6a5c8d86e3d621ab577dd683cf13c155d5b9529f5be6ca70fef13dee + fetched: '2026-09-14' + note: 'API specification: insuranceplanhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/insuranceplan/request.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/insuranceplan/request. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Acceptance scenario. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Insurance Plan. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 6.1 Recommended Integration Points; 6.3 Business Conditions. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2 Q3; page 4 Q12 and Q14. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 6, 7 and 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.insuranceplan-on-request + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.status + callbacks: + - nhcx.callback.insuranceplan-request + - nhcx.callback.insuranceplan-on-request + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1001 + - nhcx.error.payr-1406 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.insurance-plan-request + fhir: + - nhcx.fhir.insurance-plan-bundle + - nhcx.fhir.pmjay-insurance-plan + tests: + - nhcx.test.provider-uc-06 + - nhcx.test.tc-hbp-01 + sandbox: + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.environments-and-base-urls + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/insuranceplan/request + +## In plain words + +A hospital asks the insurer for the policy's terms as data, not as a PDF. The answer, an InsurancePlan, lists the specialities, packages, rates, claim conditions and mandatory documents that apply at your hospital. Your system, as the provider, sends the request to [NHCX](../../shared/glossary/nhcx.md) sealed for the payer. The plan arrives later on your `/v1/insuranceplan/on_request`. + +Call it before cost estimation and before any pre-authorisation for that payer and policy. + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md) and [how to get one](session-token.md). +- Your own [participant code](../glossary/participant-code.md), with your callback address registered, reachable from NHCX and answering 202 within 30 seconds. See [callback URL rules](../sandbox/callback-url-requirements.md). +- The payer's participant code. Take it from `processingID` in the [`/participant/get/policies`](participant-get-policies.md) response, not from `PayerID`. +- The recipient's encryption certificate, fetched with [`/fetch/certs`](fetch-certs.md). You seal the message with its public key. +- A Task bundle in [FHIR](../../shared/glossary/fhir.md) with `code` `poll` and at least one input: the policy number, your provider id, or both. See [the InsurancePlan request bundle](../fhir/insurance-plan-bundle.md). +- A handler for [`/v1/error`](../callbacks/error.md), so a request NHCX cannot deliver does not look like one still under review. +- A handler for [`/v1/insuranceplan/on_request`](../callbacks/insuranceplan-on-request.md). +- In the sandbox you can address the [dummy payer](../sandbox/dummy-payer.md), participant `1000003538@hcx`, which answers without a real insurer. With the dummy payer, use provider id `32722` inside the bundle and policy number `100217`. + +## What happens + +Your system, as the provider, calls NHCX on `/v1/insuranceplan/request`. NHCX checks the envelope, answers 202 at once, and forwards the same path to the payer's registered address ([receiving `/v1/insuranceplan/request`](../callbacks/insuranceplan-request.md)). The payer answers later on [`/v1/insuranceplan/on_request`](../callbacks/insuranceplan-on-request.md), which NHCX delivers to you. + +### 1. Seal the message + +Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md) and encrypt the bundle with the recipient's public key. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. `x-hcx-workflow_id` is optional on this call. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/insuranceplan/request' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Retrying + +**Idempotency.** NHCX keys every conversation on `x-hcx-correlation_id`. An initiating request that reuses a correlation id NHCX already holds is refused with [`NHCX-1006`](../errors/nhcx-1006.md). So a blind retry is not safe. If your call timed out, ask [`/v1/status`](status.md) before you resend. `/v1/status` finds a message by its `x-hcx-api_call_id` ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so generate a new one for every call, a retry included. After a request fails for good, NHCX makes its correlation id inactive. Start a new cycle with a new correlation id. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "insuranceplan", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` and `api_call_id` match the values you sealed. +- `result.entity_type` is `insuranceplan`. +- `result.protocol_status` is `request.queued` or `request.dispatched`. +- `error.code` and `error.message` are empty. + +The 202 is a receipt, not a decision. NHCX never returns a decision synchronously. The step is done when [`/v1/insuranceplan/on_request`](../callbacks/insuranceplan-on-request.md) reaches your callback address with the same `x-hcx-correlation_id`, and your handler has answered it 202 within 30 seconds. An empty plan is a valid answer when no coverage matches the policy and hospital. + +## When it goes wrong + +- [`PAYR-1406`](../errors/payr-1406.md): an earlier request with the same payer is still in progress. Wait 15 to 60 minutes for it to finish, then send again. +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): the session token expired or lacks the `Bearer ` prefix. Get a new token and send again. See [every call returns 401](../troubleshooting/everything-returns-401.md). +- [`NHCX-1003`](../errors/nhcx-1003.md): the recipient code is not registered. A provider used `PayerID` instead of `processingID`. +- [`NHCX-1006`](../errors/nhcx-1006.md): the correlation id was used before. Start the cycle with a new one. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `request.initiated`. +- You got 202 and nothing more arrives. The recipient may have failed to decrypt ([`PAYR-1001`](../errors/payr-1001.md)) or your callback is unreachable. See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). diff --git a/catalogue/nhcx/endpoints/notification-subscribe.md b/catalogue/nhcx/endpoints/notification-subscribe.md new file mode 100644 index 000000000..c83589a6a --- /dev/null +++ b/catalogue/nhcx/endpoints/notification-subscribe.md @@ -0,0 +1,123 @@ +--- +id: nhcx.endpoint.notification-subscribe +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/notification/subscribe +summary: >- + Let a patient's health record app receive plain-language updates about that patient's + insurance claims. +sources: +- url: https://hcxsbx.abdm.gov.in/images/01db86335b7c226eb745.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Notification Integration.docx + hash: sha256:05908862c103522fac0dbb482f8eb6a0f8536fc12b1ae3bdb0e98615f30812aa + fetched: '2026-09-14' + note: NHCX Notification Integration, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. sections 2, 3, 4.2, 6.1, 6.3, 7.3. +- url: https://hcxsbx.abdm.gov.in/subscriptionhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/subscriptionhcxservice.json + hash: sha256:0d0d4781aa96017c06c8c2533e63dd1a6b36bb2342ebb51aeefca3349d892029 + fetched: '2026-09-14' + note: 'API specification: subscriptionhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/notification/subscribe.post; components.schemas.SubscribeResponse.' +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.session-token + callbacks: + - nhcx.callback.notification-delivery + errors: + - nhcx.error.nhcx-401 + concepts: + - nhcx.concept.notifications + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.beneficiary-consent + flows: + - nhcx.flow.notification-subscribe + decisions: + - nhcx.decision.session-endpoint +--- + +# POST /v1/notification/subscribe + +## In plain words + +A [PHR](../../shared/glossary/phr.md) app registered with [NHCX](../../shared/glossary/nhcx.md) as a Beneficiary Service Provider subscribes a beneficiary to claim notifications. Afterwards, when a hospital and payer exchange a pre-authorisation, claim, payment or communication for that beneficiary, NHCX pushes a readable message to the app. + +You call it every time the beneficiary logs in to your app with their ABHA address. Only the most recently subscribed app receives notifications for an ABHA. + +## Before you start + +- [Milestone 1](../../shared/glossary/m1.md) integration complete, and your app registered in NHCX as a Beneficiary Service Provider. +- A session token, sent on `Authorization`. See [which session endpoint to call](../decisions/session-endpoint.md). +- An HTTPS callback endpoint, TLS 1.2 or newer, for notifications. See [receiving a notification](../callbacks/notification-delivery.md). +- The beneficiary's explicit consent to subscribe, and their [ABHA address](../../shared/glossary/abha-address.md). + +## What happens + +Your app calls NHCX on the portal host, not on the exchange host the other `/v1` calls use. + +Seal the subscription as a [JWE](../glossary/jwe.md) with these protected headers: + +```json +{ + "alg": "RSA-OAEP", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-timestamp": "", + "x-hcx-correlation_id": "" +} +``` + +The sealed payload: + +```json +{ + "subscription_id": "", + "topic_code": ["workflow_events"], + "recipient_code": "", + "subscriber": { "id": "" }, + "on_notification_url": "" +} +``` + +`topic_code` also accepts `network_events` and `participant_events`. `expiry` is optional. + +```bash +curl --location --request POST 'https://hcxsbx.abdm.gov.in/v1/notification/subscribe' \ + --header 'Authorization: Bearer ' \ + --header 'Content-Type: application/json' \ + --data-raw '{ + "payload": "" + }' +``` + +**Idempotency.** A subscription for an ABHA replaces any earlier one, from your app or another. Subscribing again on every login is safe. Generate a new `x-hcx-correlation_id` for every attempt, a retry included. + +## How you know it worked + +You receive HTTP `200` with the subscription state: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "subscription_id": "", + "subscription_status": "active", + "expiry": "", + "message": "" +} +``` + +The step is done when `subscription_status` is `active` for your `subscription_id`. Store the `subscription_id`, and show the status in your app's settings. A later `replaced` means another app has taken the beneficiary's notifications. + +## When it goes wrong + +- `401 Unauthorized`: the token expired. Get a new one and subscribe again. +- `403 Forbidden`: your app is not authorised. Check your registry entry in NHCX. +- `409 Conflict`: this should not occur when every attempt carries a new `x-hcx-correlation_id`. +- `500`: a gateway fault. Retry with backoff and a new correlation id. +- The call goes to `https://apisbx.abdm.gov.in/hcx`, or carries the token on `bearer_auth` only. Use the portal host and `Authorization`. diff --git a/catalogue/nhcx/endpoints/on-status.md b/catalogue/nhcx/endpoints/on-status.md new file mode 100644 index 000000000..4ed1a23dd --- /dev/null +++ b/catalogue/nhcx/endpoints/on-status.md @@ -0,0 +1,146 @@ +--- +id: nhcx.endpoint.on-status +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/on_status +summary: >- + Tell a participant who asked about one of its messages that the message has reached + you. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: Status, /v1/on_status rows.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/on_status. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1 Acceptance and Error scenario; page 2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.status + - nhcx.endpoint.session-token + callbacks: + - nhcx.callback.status + - nhcx.callback.on-status + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1517 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.retries-and-expiry + - nhcx.concept.status-lifecycle + flows: + - nhcx.flow.status-check + tests: + - nhcx.test.payer-uc-15 + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/on_status + +## In plain words + +A participant that sent you a message can ask [NHCX](../../shared/glossary/nhcx.md) where it stands with [`/v1/status`](status.md). When the message has reached you, NHCX forwards the question to you. You answer on `/v1/on_status`, and NHCX delivers the answer to the participant that asked. + +The answer reports delivery, not a decision. The sealed payload is an empty string. + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md). +- The `/v1/status` you are answering, received on [your registered address](../callbacks/status.md), decrypted, and acknowledged with 202 within 30 seconds. +- That request's `x-hcx-correlation_id` and `x-hcx-sender_code`, stored. You echo the first and address the answer to the second. +- The encryption certificate of the participant that asked, fetched with [`/fetch/certs`](fetch-certs.md). +- Nothing to build. The sealed payload is an empty string. +- A handler for [`/v1/error`](../callbacks/error.md), where NHCX reports an answer it could not deliver. + +## What happens + +Your system, as the recipient of the original message, answers a request it received ([receiving the request](../callbacks/status.md)) by calling NHCX on `/v1/on_status`. NHCX answers 202 at once and delivers the same path to the registered address of the participant that asked ([receiving `/v1/on_status`](../callbacks/on-status.md)). + +### 1. Seal the answer + +Swap the sender and recipient codes of the request. Echo its correlation id. Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md): + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.dispatched", + "x-hcx-ben-abha-id": "" +} +``` + +Send `request.dispatched`: the message the participant asked about has reached you. The correlation id is that of the status request, not of the original message. The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/on_status' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "type": "JWEPayload", + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Refusing a request + +To refuse the request at protocol level instead, send `"type": "ProtocolResponse"` on this path with `x-hcx-status` `response.error` and `x-hcx-error_details` holding `code`, `message` and `trace`. Keep clinical and business reasons inside the sealed payload. Only protocol errors go in the header. + +### 4. Retrying + +**Idempotency.** Echo the `x-hcx-correlation_id` of the request you are answering. A correlation id NHCX does not hold, or one it has already deleted, is refused with [`NHCX-1010`](../errors/nhcx-1010.md). Generate a new `x-hcx-api_call_id` for every call. `/v1/status` looks a message up by that value ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so never reuse one. + +## How you know it worked + +You receive HTTP `202 Accepted` with the acknowledgement body: `timestamp`, `api_call_id`, `correlation_id`, `result` and an empty `error`. + +- `correlation_id` matches the status request you answered. +- `error.code` and `error.message` are empty. + +NHCX then delivers your answer to the participant that asked. The recipient must answer each delivery with 202 and the acknowledgement body within 30 seconds. Otherwise NHCX retries up to five times, then deletes the request and reports it on the sender's [`/v1/error`](../callbacks/error.md). The step is done when you hold the 202 and no report for this correlation id arrives on your `/v1/error`. + +## When it goes wrong + +- [`NHCX-1010`](../errors/nhcx-1010.md): NHCX holds no request with that correlation id. You minted a new one instead of echoing it, or the request was deleted after failed deliveries. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `response.complete`, `response.partial` or `response.error`. +- [`PAYR-1517`](../errors/payr-1517.md): a refusal arrived as a `JWEPayload`. Protocol refusals travel as `ProtocolResponse`. +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): get a new session token and send again. +- A report arrives on your [`/v1/error`](../callbacks/error.md): the requester's address did not acknowledge five deliveries. The request is dead on that correlation id. diff --git a/catalogue/nhcx/endpoints/participant-create.md b/catalogue/nhcx/endpoints/participant-create.md new file mode 100644 index 000000000..225fe2460 --- /dev/null +++ b/catalogue/nhcx/endpoints/participant-create.md @@ -0,0 +1,160 @@ +--- +id: nhcx.endpoint.participant-create +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /participant/create +summary: >- + Register your organisation in the sandbox participant registry and receive the + participant code that addresses all your messages. +sources: +- url: https://hcxsbx.abdm.gov.in/images/e683dda0a8cf953abbc7.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)NHCX-OnBoarding APIs Postman Collection.zip + hash: sha256:ca4348e8a373c54bdcabd07eff8e49a55d93cdfae65fa5008ae0d56526a769f2 + fetched: '2026-09-14' + note: AWS(Sandbox)NHCX-OnBoarding APIs Postman Collection, row 6 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Postman SANDBOX_NHCX-OnBoarding APIs item Participant Create. +- url: https://hcxsbx.abdm.gov.in/images/bc2efb078b98548f8e6b.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Sandbox.pdf + hash: sha256:cbd03baf428655f0305e2f60ca331f8b76700496b070c522cafcc95001710b3a + fetched: '2026-09-14' + note: Onboarding providers and payers in Sandbox, row 4 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, API Definition - Create Participant. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./participant/create.post; schemas ParticipantCreateBody, ParticipantCreateResponse.' +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 4, Valid Role Enums and Valid Registry Enums. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 3 Q6-Q9; Page 4 Q11; Page 5 Q21. +- url: https://hcxsbx.abdm.gov.in/images/ec361a6c3e90e766d227.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Steps to generate encryption Certificate.pdf + hash: sha256:94605e935f05ebb49e24dee50787cb4f3f1c401983a9616a5aaabdbc302f664b + fetched: '2026-09-14' + note: Steps to generate encryption Certificate, row 20 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 3, Step 4 Base64 Encoding. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-registry + - nhcx.concept.participant-code + - nhcx.concept.participant-roles + - nhcx.concept.encryption-certificate + flows: + - nhcx.flow.sandbox-onboarding + - nhcx.flow.generate-and-register-certificate + endpoints: + - nhcx.endpoint.v2-participant-create + - nhcx.endpoint.participant-update + - nhcx.endpoint.participant-search + - nhcx.endpoint.fetch-participants-list + - nhcx.endpoint.session-token + errors: + - nhcx.error.nhcx-401 + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + sandbox: + - nhcx.sandbox.prerequisites + - nhcx.sandbox.callback-url-requirements +--- + +# POST /participant/create + +## In plain words + +This call registers your organisation in the [NHCX](../../shared/glossary/nhcx.md) [participant registry](../concepts/participant-registry.md). The registry answers with your [participant code](../glossary/participant-code.md). Every message you send or receive on NHCX is addressed with that code. + +This is the sandbox create call. In production, call [`/v2/participant/create`](v2-participant-create.md) and confirm it with [`/validate`](validate.md). + +## Before you start + +- A current access token from the [session call](session-token.md). +- Your registry id. A [provider](../glossary/provider.md) uses its [HFR](../../shared/glossary/hfr.md) ID. A [payer](../glossary/payer.md) or [TPA](../glossary/tpa.md) uses its [IRDAI](../glossary/irdai.md) or other authority-issued ID. An [EUA](../../shared/glossary/eua.md) uses its client id. +- Your public encryption certificate, Base64 encoded. See [generate and register a certificate](../flows/generate-and-register-certificate.md). +- Your callback bridge URL, on a domain name, served from India. See [callback URL requirements](../sandbox/callback-url-requirements.md). + +## What happens + +Your system posts a JSON profile to the sandbox participant service. The registry validates the linked registry codes, creates the record and answers on the same connection. No callback follows. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/create' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "linked_registry_codes": [""], + "registryid": "", + "participant_name": "", + "scheme_code": "", + "state": "", + "district": "", + "roles": [""], + "primaryEmail": "", + "phone": [""], + "primaryMobile": "", + "signing_cert_path": "", + "encryption_cert": "", + "endpoint_url": "" + }' +``` + +Send all three headers on every participant service call: `Accept`, `Content-Type` and `bearer_auth`. The token header is `bearer_auth`, not `Authorization`. + +Put a role code in `roles`: + +| Role | Code | +|---|---| +| PROVIDER | `10001` | +| PAYER | `10002` | +| AGENCY_TPA | `10003` | +| AGENCY_REGULATOR | `10004` | +| RESEARCH | `10005` | +| MEMBER_ISNP | `10006` | +| AGENCY_SPONSOR | `10007` | +| HIE_HIO_HCX | `10008` | +| EUA | `10009` | + +Put a registry code in `linked_registry_codes`: + +| Registry | Code | Who uses it | +|---|---|---| +| HFR | `10001` | Providers and EUAs | +| NIN | `10002` | | +| ROHINI | `10003` | | +| PAYER | `10004` | Payers and TPAs | + +Send every code as a five-digit string with no spaces, for example `"10003"`. `10001` means PROVIDER in `roles` and HFR in `linked_registry_codes`. They are different fields. + +`encryption_cert` is the Base64 encoding of the whole PEM certificate, including the `BEGIN` and `END` lines. `endpoint_url` is the bridge URL where NHCX delivers messages to you. + +The response body has this shape: + +```json +{ + "participant_code": "" +} +``` + +**Idempotency.** Do not repeat create to retry a timeout or to fix a field. If a create times out, look for your organisation in [`/fetch/participants/list`](fetch-participants-list.md) first. Change a field with [`/participant/update`](participant-update.md). An organisation holds more than one participant code only when each code is linked to a separate HFR ID. + +## How you know it worked + +You receive HTTP 200 with `participant_code` in the body. Store it as configuration. It becomes `x-hcx-sender_code` on every message you send. + +A [`/participant/search`](participant-search.md) with that code returns your record, with the `endpoint_url` and `encryption_cert` you sent. Your organisation exchanges claims only after the record reaches status `Active`. + +## When it goes wrong + +- **400 Client error.** A field is malformed or the `Accept` header is missing. Check the snake_case field names, the codes in `roles` and `linked_registry_codes`, and that `encryption_cert` is Base64 of the PEM, not the raw PEM. +- **Wrong role or registry code.** A wrong mapping leads to rejected requests or misrouted transactions later. Use the tables above. +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). +- **Messages never reach you after onboarding.** The `endpoint_url` uses an IP address or a port, or the host is outside India. See [callback URL rejected](../troubleshooting/callback-url-rejected.md). +- **404 or 500.** 404 means a resource was not found, so check the registry codes you sent. 500 means a downstream system is down. Retry a 500 later. diff --git a/catalogue/nhcx/endpoints/participant-delink-abha-policy.md b/catalogue/nhcx/endpoints/participant-delink-abha-policy.md new file mode 100644 index 000000000..6241e78bc --- /dev/null +++ b/catalogue/nhcx/endpoints/participant-delink-abha-policy.md @@ -0,0 +1,116 @@ +--- +id: nhcx.endpoint.participant-delink-abha-policy +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /participant/delink/abha/policy +summary: >- + As a payer, remove products from a beneficiary's policy link so hospitals stop + finding coverage that has ended. +sources: +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, Validation for De-Linking; Page 1 TPA change. +- url: https://hcxsbx.abdm.gov.in/images/b885e59891fedc7e725c.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection.zip + hash: sha256:2d082f244ee41d137a62af82380dcd2d5db9ebbab66824fd54a23c506d4d9a7f + fetched: '2026-09-14' + note: AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection, row 16 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Postman SANDBOX-Participant_APIs item Delink Abha. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./participant/delink/abha/policy.post; schema ParticipantDeLinkAbhaRequest.' +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, item 10 Policy Linking/Delinking auth restriction. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Use case 3 De-Link ABHA from Policy. +verified: + status: unverified +related: + concepts: + - nhcx.concept.policy-linking + flows: + - nhcx.flow.policy-link-and-delink + endpoints: + - nhcx.endpoint.v2-participant-delink-abha-policy + - nhcx.endpoint.participant-link-abha-policy + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.session-token + errors: + - nhcx.error.nhcx-401 + tests: + - nhcx.test.payer-uc-03 +--- + +# POST /participant/delink/abha/policy + +## In plain words + +A [payer](../glossary/payer.md) calls this to remove products from a beneficiary's policy link on [NHCX](../../shared/glossary/nhcx.md). Hospitals then stop finding that coverage through [`/participant/get/policies`](participant-get-policies.md). It reverses [`/participant/link/abha/policy`](participant-link-abha-policy.md). + +De-Link ABHA from Policy is use case 3 of the payer [sandbox exit](../glossary/sandbox-exit.md). Call this path. [`/V2/participant/delink/abha/policy`](v2-participant-delink-abha-policy.md) takes the same body. + +## Before you start + +- The products are linked for this `payerid` and `memberid`. +- You are the participant named as `payerid` or `processingid` when the products were linked. +- A current access token minted with the client id used when your participant was created. It goes in `bearer_auth` as `Bearer `. + +## What happens + +Your system posts the products to remove. NHCX reads the client id from your token and checks that it matches the insurer (`payerid`) or the TPA (`processingid`) that linked them. It then removes the products and answers on the same connection. No callback follows. + +| Environment | Participant service base URL | +|---|---| +| Sandbox | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | +| Production | `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` | + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/delink/abha/policy' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "requestid": "", + "payerid": "", + "memberid": "", + "processingid": "", + "policies": [ + { + "productid": "", + "productname": "" + } + ] + }' +``` + +Send all three headers on every participant service call: `Accept`, `Content-Type` and `bearer_auth`. The token header is `bearer_auth`, not `Authorization`. + +The body has no `abhanumber` field. It is keyed on `payerid`, `memberid` and the products listed. Omit `processingid` if the products were linked without one. List only the products to remove. + +To move an insurer to a new TPA, de-link its policies here, then link them again with the new TPA's code in `processingid`. + +**Idempotency.** Send a new `requestid` on every call. Repeating a de-link that already succeeded returns `There is no policies with requested details`. Treat that message after a timeout as done, and confirm with [`/participant/get/policies`](participant-get-policies.md). + +## How you know it worked + +You receive HTTP 200. + +[`/participant/get/policies`](participant-get-policies.md) for the beneficiary no longer returns the removed products for that payer. + +## When it goes wrong + +- **The de-link is refused with an error message.** The client id in your token belongs to neither the `payerid` nor the `processingid` participant from the link. Mint the token with the client id used when that participant was created. +- **`There is no policies with requested details`.** A listed product is not linked for this `payerid` and `memberid`. Check the product id and name against the link. +- **A hospital still sees the policy.** Hospitals cache policy lookups. Ask them to refresh the lookup for this beneficiary. +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/endpoints/participant-details.md b/catalogue/nhcx/endpoints/participant-details.md new file mode 100644 index 000000000..43057670c --- /dev/null +++ b/catalogue/nhcx/endpoints/participant-details.md @@ -0,0 +1,93 @@ +--- +id: nhcx.endpoint.participant-details +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /participant/details +summary: >- + Read one participant's full registry record by its participant code, through the + second lookup path. +sources: +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./participant/details.post; schemas ParticipantSearchReq, ParticipantSearchResponse.' +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/registries + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__registries.md + hash: sha256:04bf78739fa0c3807a8a5a49d8c3e004f8aba664f524d0344d7fc44c3b2baf42 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/registries, text as shown on the site. Participating Organisations/Systems Registry table, status. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, For Sandbox / For Production envBaseUrl. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, item 6 Missing the Accept parameter. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-registry + endpoints: + - nhcx.endpoint.participant-search + - nhcx.endpoint.fetch-participants-list + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.session-token + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 +--- + +# POST /participant/details + +## In plain words + +This call reads one participant's record from the [NHCX](../../shared/glossary/nhcx.md) participant registry by [participant code](../glossary/participant-code.md). It takes the same body as [`/participant/search`](participant-search.md) and returns the same record. + +Either path works. Use one of the two consistently across your integration. + +## Before you start + +- A current access token from the [session call](session-token.md). It goes in the `bearer_auth` header as `Bearer `, with `Bearer` and a space in front. +- The participant code you want to read. + +## What happens + +Your system posts the code to the participant service. The registry answers on the same connection. Nothing changes and no callback follows. + +| Environment | Participant service base URL | +|---|---| +| Sandbox | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | +| Production | `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` | + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/details' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "participant_code": "" + }' +``` + +Send all three headers on every participant service call: `Accept`, `Content-Type` and `bearer_auth`. The token header is `bearer_auth`, not `Authorization`. + +The response has the same shape as [`/participant/search`](participant-search.md): a `timestamp` and a `participants` array of records carrying `participant_code`, `roles`, `status`, `encryption_cert` and `endpoint_url`. + +**Idempotency.** The call only reads. Repeating it is safe. + +## How you know it worked + +You receive HTTP 200 with a `participants` array. One entry carries the `participant_code` you sent, with status `Active` when the participant can transact. + +## When it goes wrong + +- **400 or an empty result.** The body used `participantid` or `participantcode`. This call takes `participant_code`. +- **No entry for the code.** The code is wrong or not registered. Messages addressed to it fail with [NHCX-1003](../errors/nhcx-1003.md). +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/endpoints/participant-get-policies.md b/catalogue/nhcx/endpoints/participant-get-policies.md new file mode 100644 index 000000000..92a9d9678 --- /dev/null +++ b/catalogue/nhcx/endpoints/participant-get-policies.md @@ -0,0 +1,133 @@ +--- +id: nhcx.endpoint.participant-get-policies +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /participant/get/policies +summary: >- + Look up the policies linked to a beneficiary by health account number, member + id or mobile number, to learn whom to address. +sources: +- url: https://hcxsbx.abdm.gov.in/images/b885e59891fedc7e725c.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection.zip + hash: sha256:2d082f244ee41d137a62af82380dcd2d5db9ebbab66824fd54a23c506d4d9a7f + fetched: '2026-09-14' + note: AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection, row 16 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Postman SANDBOX-Participant_APIs item Get Policies. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, item 7 Providers pointing to the PayerID. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 5.6.2 to 5.6.4 Policy Discovery API. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./participant/get/policies.post; schema FetchParticipantPoliciesRequest.' +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Use case 2 Get Policy. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Use case 2 Get Policy. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, For Sandbox / For Production envBaseUrl. +verified: + status: unverified +related: + concepts: + - nhcx.concept.policy-linking + - nhcx.concept.participant-code + flows: + - nhcx.flow.pmjay-patient-to-cashless + - nhcx.flow.policy-link-and-delink + endpoints: + - nhcx.endpoint.v2-participant-get-policies + - nhcx.endpoint.participant-link-abha-policy + - nhcx.endpoint.fetch-participants-list + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.session-token + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.payr-1331 + tests: + - nhcx.test.provider-uc-02 + - nhcx.test.payer-uc-02 + - nhcx.test.tc-abha-01 +--- + +# POST /participant/get/policies + +## In plain words + +This call returns the policies that payers have linked to a beneficiary. A hospital uses it to learn which [payer](../glossary/payer.md) or [TPA](../glossary/tpa.md) to address, and the member id and product to put in claim messages. Payers use it to confirm their own links. + +Get Policy is use case 2 of both the provider and the payer [sandbox exit](../glossary/sandbox-exit.md). Call this path. [`/V2/participant/get/policies`](v2-participant-get-policies.md) takes the same body. + +## Before you start + +- A current access token from the [session call](session-token.md). It goes in the `bearer_auth` header as `Bearer `, with `Bearer` and a space in front. +- A payer or TPA has linked the beneficiary with [`/participant/link/abha/policy`](participant-link-abha-policy.md). Without a link, the lookup returns nothing. +- At least one identifier for the beneficiary: an [ABHA number](../../shared/glossary/abha-number.md), a member id or a mobile number. + +## What happens + +Your system posts one identifier to the participant service. The registry answers on the same connection with the linked policies. Nothing changes and no callback follows. + +| Environment | Participant service base URL | +|---|---| +| Sandbox | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | +| Production | `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` | + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/get/policies' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "identifiertype": "", + "identifiervalue": "" + }' +``` + +Send all three headers on every participant service call: `Accept`, `Content-Type` and `bearer_auth`. The token header is `bearer_auth`, not `Authorization`. + +| Field | What to send | +|---|---| +| `identifiertype` | `AbhaNumber`, `MemberId` or `MobileNo`. | +| `identifiervalue` | The value of that identifier. Send an ABHA number as 14 digits without hyphens. | + +Try the identifiers in this order until one returns a policy: `AbhaNumber` first, then `MemberId`, then `MobileNo`. + +For each returned policy, read the payer id, the processing id, the member id, and the product id and name. The processing id is the participant you address: it goes in `x-hcx-recipient_code`. Do not address the payer id. Field names in the response are not yet published, so map them from your first sandbox response. + +Cache the result per patient. Refresh it when a payer-side change is suspected. + +**Idempotency.** The call only reads. Repeating it is safe. + +## How you know it worked + +You receive HTTP 200 with at least one linked policy for the identifier. + +You hold a processing participant code, a member id and a product for the patient. A [`/participant/search`](participant-search.md) on the processing code shows status `Active`. + +## When it goes wrong + +- **Messages to the payer fail with a receiver error.** The payer id went into `x-hcx-recipient_code`. Use the processing id from this response. See [NHCX-1003](../errors/nhcx-1003.md) and [PAYR-1331](../errors/payr-1331.md). +- **Nothing is returned for an ABHA number.** The number went with hyphens. Send 14 digits without hyphens. If it is still empty, try `MemberId`, then `MobileNo`. +- **Nothing is returned for any identifier.** No payer has linked this beneficiary. The payer links with [`/participant/link/abha/policy`](participant-link-abha-policy.md). +- **A de-linked policy still appears.** Your cache is stale. Refresh the lookup for this patient. +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/endpoints/participant-link-abha-policy.md b/catalogue/nhcx/endpoints/participant-link-abha-policy.md new file mode 100644 index 000000000..b1f2ec7e5 --- /dev/null +++ b/catalogue/nhcx/endpoints/participant-link-abha-policy.md @@ -0,0 +1,129 @@ +--- +id: nhcx.endpoint.participant-link-abha-policy +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /participant/link/abha/policy +summary: >- + As a payer, link a beneficiary's health account number and member id to the products + they hold, so hospitals can find the policy. +sources: +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1 Policy Linking Process; Page 2 request. +- url: https://hcxsbx.abdm.gov.in/images/b885e59891fedc7e725c.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection.zip + hash: sha256:2d082f244ee41d137a62af82380dcd2d5db9ebbab66824fd54a23c506d4d9a7f + fetched: '2026-09-14' + note: AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection, row 16 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Postman SANDBOX-Participant_APIs item Link Abha. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./participant/link/abha/policy.post; schemas ParticipantLinkAbhaRequest, ParticipantLinkAbhaResponse.' +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, item 10 Policy Linking/Delinking auth restriction. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Use case 1 Link ABHA with Policy. +verified: + status: unverified +related: + concepts: + - nhcx.concept.policy-linking + flows: + - nhcx.flow.policy-link-and-delink + endpoints: + - nhcx.endpoint.v2-participant-link-abha-policy + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.participant-delink-abha-policy + - nhcx.endpoint.session-token + errors: + - nhcx.error.nhcx-401 + tests: + - nhcx.test.payer-uc-01 +--- + +# POST /participant/link/abha/policy + +## In plain words + +A [payer](../glossary/payer.md) calls this to link a beneficiary's [ABHA number](../../shared/glossary/abha-number.md) and member id to the products the beneficiary holds. Hospitals then find the policy with [`/participant/get/policies`](participant-get-policies.md). Without a link, a hospital's lookup returns nothing and the patient cannot be processed as cashless on [NHCX](../../shared/glossary/nhcx.md). + +Link ABHA with Policy is use case 1 of the payer [sandbox exit](../glossary/sandbox-exit.md). Call this path. [`/V2/participant/link/abha/policy`](v2-participant-link-abha-policy.md) takes the same body. See [policy linking](../concepts/policy-linking.md). + +## Before you start + +- Your insurance company is registered and holds its own [participant code](../glossary/participant-code.md). If a [TPA](../glossary/tpa.md) processes your claims, the TPA holds its own code too. +- A current access token minted with the client id that was used when the insurer or the TPA participant was created. It goes in `bearer_auth` as `Bearer `. +- The beneficiary's ABHA number, mobile number, member id and products. + +## What happens + +Your system posts the link to the participant service. The registry records it and answers on the same connection. No callback follows. + +| Environment | Participant service base URL | +|---|---| +| Sandbox | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | +| Production | `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` | + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/link/abha/policy' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "requestid": "", + "abhanumber": "", + "mobilenumber": "", + "memberid": "", + "payerid": "", + "processingid": "", + "policies": [ + { + "productid": "", + "productname": "" + } + ] + }' +``` + +Send all three headers on every participant service call: `Accept`, `Content-Type` and `bearer_auth`. The token header is `bearer_auth`, not `Authorization`. + +| Field | What to send | +|---|---| +| `requestid` | A new UUID for every call. | +| `abhanumber` | The policy holder's 14-digit ABHA number, without hyphens. | +| `mobilenumber` | The policy holder's mobile number. | +| `memberid` | The policy holder id in your system. | +| `payerid` | The insurance company's own participant code. Every payer has one, even under a TPA. | +| `processingid` | The participant code of the TPA that processes this insurer's claims. | +| `policies` | One entry per product, each with `productid` and `productname`. | + +For an insurer without a TPA, `payerid` is the insurer's own participant code. When an insurer moves to a new TPA, de-link its policies with [`/participant/delink/abha/policy`](participant-delink-abha-policy.md), then link them again with the new TPA's code in `processingid`. + +The response is JSON with a `result` string. + +**Idempotency.** Send a new `requestid` on every call and log it with the response. Before you retry a link that timed out, look the beneficiary up with [`/participant/get/policies`](participant-get-policies.md). Link again only if the products are missing. + +## How you know it worked + +You receive HTTP 200 with a `result` string. + +[`/participant/get/policies`](participant-get-policies.md) with `identifiertype` `AbhaNumber` and the same ABHA number returns the products you linked. + +## When it goes wrong + +- **The link is refused although the token is valid.** Only the participants named as `payerid` or `processingid` may link. The token must come from the client id used when that participant was created. +- **`payerid` and `processingid` are swapped.** `payerid` is always the insurer. `processingid` is the TPA. +- **Moving to a new TPA by linking again.** De-link the existing policies first, then link with the new `processingid`. +- **400 Client error.** A required field is missing, or `requestid` is not a UUID. +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/endpoints/participant-search.md b/catalogue/nhcx/endpoints/participant-search.md new file mode 100644 index 000000000..4de1bcec7 --- /dev/null +++ b/catalogue/nhcx/endpoints/participant-search.md @@ -0,0 +1,120 @@ +--- +id: nhcx.endpoint.participant-search +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /participant/search +summary: >- + Read one participant's full registry record by its participant code. +sources: +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./participant/search.post; schemas ParticipantSearchReq, ParticipantSearchResponse, ParticipantSearchRequest.' +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/registries + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__registries.md + hash: sha256:04bf78739fa0c3807a8a5a49d8c3e004f8aba664f524d0344d7fc44c3b2baf42 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/registries, text as shown on the site. Participating Organisations/Systems Registry table. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, For Sandbox / For Production envBaseUrl. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, item 6 Missing the Accept parameter. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-registry + - nhcx.concept.participant-code + endpoints: + - nhcx.endpoint.participant-details + - nhcx.endpoint.fetch-participants-list + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.session-token + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + sandbox: + - nhcx.sandbox.environments-and-base-urls +--- + +# POST /participant/search + +## In plain words + +This call reads one participant's record from the [NHCX](../../shared/glossary/nhcx.md) [participant registry](../concepts/participant-registry.md). You send a [participant code](../glossary/participant-code.md). You get back the roles, status, bridge URL and certificate reference held for that code. + +Use it before you address a new counterparty, and after every change to your own record. [`/participant/details`](participant-details.md) takes the same body and returns the same record. Use one of the two paths consistently. + +## Before you start + +- A current access token from the [session call](session-token.md). It goes in the `bearer_auth` header as `Bearer `, with `Bearer` and a space in front. +- The participant code you want to read, usually from [`/fetch/participants/list`](fetch-participants-list.md). + +## What happens + +Your system posts the code to the participant service. The registry answers on the same connection. Nothing changes and no callback follows. + +| Environment | Participant service base URL | +|---|---| +| Sandbox | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | +| Production | `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` | + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/search' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "participant_code": "" + }' +``` + +Send all three headers on every participant service call: `Accept`, `Content-Type` and `bearer_auth`. The token header is `bearer_auth`, not `Authorization`. + +The response body has this shape: + +```json +{ + "timestamp": , + "participants": [ + { + "participant_code": "", + "participant_name": "", + "linked_registry_codes": [""], + "scheme_code": "", + "roles": [""], + "status": [""], + "primaryEmail": "", + "primaryMobile": "", + "encryption_cert": "", + "endpoint_url": "" + } + ] +} +``` + +`status` is one of `Created` (not yet verified), `Active`, `Inactive` or `Blocked`. `encryption_cert` is a reference to the certificate. To get the certificate itself, call [`/fetch/certs`](fetch-certs.md). + +**Idempotency.** The call only reads. Repeating it is safe. + +## How you know it worked + +You receive HTTP 200 with a `participants` array. One entry carries the `participant_code` you sent. + +A counterparty is ready to receive messages when its entry shows status `Active`, the role you expect, and a filled `endpoint_url` and `encryption_cert`. + +## When it goes wrong + +- **400 or an empty result.** The body used `participantid` or `participantcode`. This call takes `participant_code`. +- **No entry for the code.** The code is wrong or not registered. Messages addressed to it fail with [NHCX-1003](../errors/nhcx-1003.md). Pick the code again from [`/fetch/participants/list`](fetch-participants-list.md). +- **Status is not `Active`.** The participant cannot transact yet. Do not address it. +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/endpoints/participant-update.md b/catalogue/nhcx/endpoints/participant-update.md new file mode 100644 index 000000000..89a6b2a6d --- /dev/null +++ b/catalogue/nhcx/endpoints/participant-update.md @@ -0,0 +1,120 @@ +--- +id: nhcx.endpoint.participant-update +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /participant/update +summary: >- + Change your sandbox registry record, such as your bridge address or encryption + certificate. +sources: +- url: https://hcxsbx.abdm.gov.in/images/e683dda0a8cf953abbc7.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)NHCX-OnBoarding APIs Postman Collection.zip + hash: sha256:ca4348e8a373c54bdcabd07eff8e49a55d93cdfae65fa5008ae0d56526a769f2 + fetched: '2026-09-14' + note: AWS(Sandbox)NHCX-OnBoarding APIs Postman Collection, row 6 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Postman SANDBOX_NHCX-OnBoarding APIs item Participant Update. +- url: https://hcxsbx.abdm.gov.in/images/bc2efb078b98548f8e6b.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Sandbox.pdf + hash: sha256:cbd03baf428655f0305e2f60ca331f8b76700496b070c522cafcc95001710b3a + fetched: '2026-09-14' + note: Onboarding providers and payers in Sandbox, row 4 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2-3, API Definition - Update Participant. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./participant/update.post; schema ParticipantUpdateBody.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 5, Q21 Not getting call back on my server. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + flows: + - nhcx.flow.sandbox-onboarding + - nhcx.flow.rotate-certificate + endpoints: + - nhcx.endpoint.v2-participant-update + - nhcx.endpoint.v2-update-cert + - nhcx.endpoint.participant-create + - nhcx.endpoint.participant-search + - nhcx.endpoint.fetch-certs + errors: + - nhcx.error.nhcx-401 + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.recipient-cannot-decrypt + sandbox: + - nhcx.sandbox.callback-url-requirements +--- + +# POST /participant/update + +## In plain words + +This call changes your record in the [NHCX](../../shared/glossary/nhcx.md) participant registry. Use it to move your bridge URL, replace your encryption certificate or change any other attribute. `participant_code` is mandatory in every request. + +This is the sandbox update call. In production, call [`/v2/participant/update`](v2-participant-update.md) and confirm it with [`/update/validate`](update-validate.md). For a production certificate change without a passcode, call [`/v2/update/cert`](v2-update-cert.md). + +## Before you start + +- Your [participant code](../glossary/participant-code.md) from [`/participant/create`](participant-create.md). +- A current access token from the [session call](session-token.md). It goes in the `bearer_auth` header as `Bearer `, with `Bearer` and a space in front. +- For a new certificate: the Base64 certificate, with its private key already deployed where you decrypt inbound messages. See [rotate a certificate](../flows/rotate-certificate.md). +- For a new bridge URL: the new host is live on a domain name in India. Your firewall lets the NHCX NAT addresses through. See [callback URL requirements](../sandbox/callback-url-requirements.md). + +## What happens + +Your system posts the record to the sandbox participant service. The registry validates the linked registry codes, applies the change and answers on the same connection. No callback follows. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/update' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "participant_code": "", + "participant_name": "", + "scheme_code": "", + "roles": [""], + "primaryEmail": "", + "phone": [""], + "primaryMobile": "", + "signing_cert_path": "", + "encryption_cert": "", + "endpoint_url": "" + }' +``` + +Send all three headers on every participant service call: `Accept`, `Content-Type` and `bearer_auth`. The token header is `bearer_auth`, not `Authorization`. + +The field names are snake_case, as in [`/participant/create`](participant-create.md). Role codes are listed there. + +The response body has this shape: + +```json +{ + "participant_code": "" +} +``` + +**Idempotency.** Send the values you want the record to hold. Before you retry an update that timed out, read your record with [`/participant/search`](participant-search.md) and compare. + +## How you know it worked + +You receive HTTP 200 with your own `participant_code` in the body. + +[`/participant/search`](participant-search.md) with your code returns the new `endpoint_url` or `encryption_cert`. After a certificate change, [`/fetch/certs`](fetch-certs.md) with your code returns the new certificate. + +## When it goes wrong + +- **400 Client error.** A field name came from the v2 body, such as `participantcode`, `encryptioncert` or `endpointurl`. Use the snake_case names above. A missing `Accept` header also fails the call. +- **Inbound messages stop decrypting after a certificate change.** The new certificate went live before its private key did. Deploy the key first. See [recipient cannot decrypt](../troubleshooting/recipient-cannot-decrypt.md). +- **Messages stop arriving after a bridge change.** The new `endpoint_url` uses an IP address or a port, or the host is outside India. See [callback URL rejected](../troubleshooting/callback-url-rejected.md). +- **404 Resource not found.** The `participant_code` is wrong. Copy it from the create response. +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/endpoints/payer-service-get-user-role.md b/catalogue/nhcx/endpoints/payer-service-get-user-role.md new file mode 100644 index 000000000..eb8b39605 --- /dev/null +++ b/catalogue/nhcx/endpoints/payer-service-get-user-role.md @@ -0,0 +1,112 @@ +--- +id: nhcx.endpoint.payer-service-get-user-role +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /pmjay/sbxhcx/nhcxpayerservice/v1/get/user-role +summary: >- + Find out which desk in the government scheme's case system currently holds a case, + and so which actions it can take next. +sources: +- file: catalogue/openapi/.raw/nhcx-site-2026-09-14/not-on-site/External_NHCX_Payer_Service_API_Workflow_Guide.docx + hash: sha256:1028d480d2fabe3204301f1c1b192a0077ddfa64f7f9084b01f73e004253fdd7 + fetched: '2026-09-05' + note: NHCX Payer Service API Workflow Guide for External Integrators, not listed on hcxsbx.abdm.gov.in and not named in the NHCX document sheet, received separately. Get User Role API (Mandatory for Claims); role table. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 9-10, sections 3 and 4.2. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.payer-service-get-user-role + - nhcx.endpoint.payer-service-process-case + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.session-token + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + concepts: + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.payer-process-a-request + - nhcx.flow.pmjay-patient-to-cashless + decisions: + - nhcx.decision.payer-implementation + glossary: + - nhcx.glossary.sha + - nhcx.glossary.tms + - nhcx.glossary.pmjay + errors: + - nhcx.error.payr-1238 +--- + +# POST /pmjay/sbxhcx/nhcxpayerservice/v1/get/user-role + +## In plain words + +[PMJAY](../glossary/pmjay.md) cases are not decided over [NHCX](../../shared/glossary/nhcx.md). The PMJAY payer service holds each PMJAY case in the [State Health Agency](../glossary/sha.md)'s [Transaction Management System](../glossary/tms.md). A case moves when the role that holds it acts on it. This call tells you which role holds a case now. Only that role's actions are accepted next. + +You call it as an integrator working a PMJAY case through the PMJAY payer service. In the sandbox, it moves a case your hospital system submitted. It is specific to that service. Other payers do not expose it. Call it before every [act on a case](payer-service-process-case.md) call, and whenever a case has gone quiet. + +## Before you start + +- A session token, sent on `bearer_auth`. See [the session token](../concepts/session-token.md). +- The scheme's case ID for the case, not your hospital's claim number. It appears in the payer's acknowledgement and status answers once a request is accepted. +- The PMJAY payer's code, written without `@hcx`. + +## What happens + +Your system calls the PMJAY payer service directly, on the sandbox host. There is no JWE envelope and no callback. + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/nhcxpayerservice/v1/get/user-role' \ + --header 'accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --data-raw '{ + "caseid": "", + "payerid": "" + }' +``` + +The role in the answer is one of these: + +| Step | Role | Actions | `usecase` | +|---|---|---|---| +| Pre-authorisation | `PPD-Trust` | `Approve`, `Reject`, `Query` | `PREAUTH` | +| Claim 1 | `CEX-Trust` | `Forward` | `CLAIM` | +| Claim 2 | `CPD-Trust` | `cpdApprove`, `cpdReject`, `Pending` | `CLAIM` | +| Claim 3 | `Medical Audit Committee` | `Approve`, `Reject`, `iQuery` | `Medical Audit Committee` | +| Claim 4 | `ACO-Trust` | `Approve`, `Reject`, `Pending` | `CLAIM` | +| Claim 5 | `SHA-Trust` | `Approve`, `Reject`, `Pending` | `CLAIM` | +| Claim 6 | `Claim Review Committee` | `Approve`, `Reject`, `Pending` | `Claim Review Committee` | + +**Retrying.** The call only reads, so repeat it freely. Read the role again before every action and after it. + +## How you know it worked + +You receive a JSON body naming the role that holds the case: + +```json +{ + "currentuserrole": "PPD-Trust", + "errormessage": null +} +``` + +- `currentuserrole` is set and `errormessage` is empty. +- Once the case is decided, the answer carries no role. + +The step is done when you hold the current role. Act on the case only with that role's actions. + +## When it goes wrong + +- The answer reads `No Data found with the caseid . Please use the current active case id.`: you sent your hospital's claim number. Send the scheme's case ID. +- `PPD-Trust` comes back while you ask about a claim: the case has not left the pre-authorisation queue yet. +- A later request for the same beneficiary is refused with [`PAYR-1238`](../errors/payr-1238.md). The refusal names the active case; use that case ID here. diff --git a/catalogue/nhcx/endpoints/payer-service-process-case.md b/catalogue/nhcx/endpoints/payer-service-process-case.md new file mode 100644 index 000000000..030bc901b --- /dev/null +++ b/catalogue/nhcx/endpoints/payer-service-process-case.md @@ -0,0 +1,115 @@ +--- +id: nhcx.endpoint.payer-service-process-case +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /pmjay/hcx/nhcxpayerservice/wrapper/process/case +summary: >- + Approve, reject, query or forward a government scheme case as the desk that currently + holds it, so the decision flows back to the hospital. +sources: +- file: catalogue/openapi/.raw/nhcx-site-2026-09-14/not-on-site/External_NHCX_Payer_Service_API_Workflow_Guide.docx + hash: sha256:1028d480d2fabe3204301f1c1b192a0077ddfa64f7f9084b01f73e004253fdd7 + fetched: '2026-09-05' + note: NHCX Payer Service API Workflow Guide for External Integrators, not listed on hcxsbx.abdm.gov.in and not named in the NHCX document sheet, received separately. Common Processing Endpoint; Example CURLs PREAUTH and CLAIM Steps 1-6; Important Notes. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 9-10, sections 3 and 4.2. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.payer-service-get-user-role + - nhcx.endpoint.payer-service-process-case + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.session-token + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + concepts: + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.payer-process-a-request + - nhcx.flow.pmjay-patient-to-cashless + decisions: + - nhcx.decision.payer-implementation + glossary: + - nhcx.glossary.sha + - nhcx.glossary.tms + - nhcx.glossary.pmjay +--- + +# POST /pmjay/hcx/nhcxpayerservice/wrapper/process/case + +## In plain words + +[PMJAY](../glossary/pmjay.md) cases are not decided over [NHCX](../../shared/glossary/nhcx.md). The PMJAY payer service holds each PMJAY case in the [State Health Agency](../glossary/sha.md)'s [Transaction Management System](../glossary/tms.md). A case moves when the role that holds it acts on it. This call takes that action: approve, reject, query, forward or hold, as the role that holds the case. + +You call it as an integrator working a PMJAY case through the PMJAY payer service. In the sandbox, it moves a case your hospital system submitted. It is specific to that service. Other payers do not expose it. + +## Before you start + +- A session token, sent on `bearer_auth`. See [the session token](../concepts/session-token.md). +- The current role for the case, read immediately before this call with [the role lookup](payer-service-get-user-role.md). +- The scheme's case ID, the beneficiary's member ID, the payer code and your provider participant code. Write both codes without `@hcx`. + +## What happens + +Your system calls the PMJAY payer service directly. The action call and the role lookup sit on different hosts. Use each exactly as shown. + +```bash +curl --location --request POST 'https://apisbeta.nha.gov.in/pmjay/hcx/nhcxpayerservice/wrapper/process/case' \ + --header 'Accept: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Content-Type: application/json' \ + --data-raw '{ + "casenumber": "", + "action": "Approve", + "receivercode": "", + "usecase": "PREAUTH", + "correlationid": "", + "sendercode": "", + "memberid": "", + "remarks": "" + }' +``` + +Spell `action` and `usecase` exactly as the holding role takes them. Both are case-sensitive: + +| Step | Role | Actions | `usecase` | +|---|---|---|---| +| Pre-authorisation | `PPD-Trust` | `Approve`, `Reject`, `Query` | `PREAUTH` | +| Claim 1 | `CEX-Trust` | `Forward` | `CLAIM` | +| Claim 2 | `CPD-Trust` | `cpdApprove`, `cpdReject`, `Pending` | `CLAIM` | +| Claim 3 | `Medical Audit Committee` | `Approve`, `Reject`, `iQuery` | `Medical Audit Committee` | +| Claim 4 | `ACO-Trust` | `Approve`, `Reject`, `Pending` | `CLAIM` | +| Claim 5 | `SHA-Trust` | `Approve`, `Reject`, `Pending` | `CLAIM` | +| Claim 6 | `Claim Review Committee` | `Approve`, `Reject`, `Pending` | `Claim Review Committee` | + +**Idempotency.** Use a new UUID in `correlationid` on every call. It is not the correlation id of the NHCX request. Read the role again before a repeat: if it has moved, the earlier call took effect. + +## How you know it worked + +The call answers synchronously, for example: + +```json +{ + "status": "success", + "message": "Case processed" +} +``` + +The step is done when the scheme's verdict reaches the provider over NHCX: a `ClaimResponse` on [`/v1/preauth/on_submit`](../callbacks/preauth-on-submit.md) or [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md), on the original request's correlation id. For a claim, repeat the lookup and the action for each role until the lookup returns no role. + +## When it goes wrong + +- `Approve` sent to `CPD-Trust`: that role takes `cpdApprove` and `cpdReject`. +- `usecase` `CLAIM` sent at a committee: each committee takes its full name, with spaces. +- The action is refused for the role: the case has moved. Read the role again. +- `Event Meta Log not found for correlationId`: NHCX has not finished delivering the request. Retry shortly. +- `Case not found for caseId`: the case is still being filed. Retry shortly. diff --git a/catalogue/nhcx/endpoints/paymentnotice-on-request.md b/catalogue/nhcx/endpoints/paymentnotice-on-request.md new file mode 100644 index 000000000..1683fcb3b --- /dev/null +++ b/catalogue/nhcx/endpoints/paymentnotice-on-request.md @@ -0,0 +1,192 @@ +--- +id: nhcx.endpoint.paymentnotice-on-request +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/paymentnotice/on_request +summary: >- + Confirm to an insurer, through the claims exchange, that your hospital has received + and recorded a payment notice. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 11.6 Payment Acknowledgement bundle; Implementation notes. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: PaymentNotice, /v1/paymentnotice/on_request rows.' +- url: https://hcxsbx.abdm.gov.in/servicehcxpayment/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/servicehcxpayment.json + hash: sha256:f5c9e3728efbbeaa5e0e8083334b0ae60a05930e5a1e096ca06d40abb235d658 + fetched: '2026-09-14' + note: 'API specification: servicehcxpayment, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/paymentnotice/on_request.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/paymentnotice/on_request. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1 Acceptance and Error scenario; page 2. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, workflow id 17. +- url: https://hcxsbx.abdm.gov.in/images/b7260763ce8270b6baac.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Payment.pdf + hash: sha256:6d372cdeec0abaea66b4d267c5ee6137a01830c577360dba7699e0244e49615f + fetched: '2026-09-14' + note: Payment, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. page 2, items 4 to 6. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.paymentnotice-request + - nhcx.endpoint.dummy-payer-paymentnotice-init + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.paymentnotice-request + - nhcx.callback.paymentnotice-on-request + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1517 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.retries-and-expiry + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.payment-notice + fhir: + - nhcx.fhir.payment-notice + tests: + - nhcx.test.provider-uc-11 + sandbox: + - nhcx.sandbox.dummy-payer + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/paymentnotice/on_request + +## In plain words + +When a payer sends you a payment notice, you acknowledge it here. Your system, as the provider, sends a sealed Task bundle to [NHCX](../../shared/glossary/nhcx.md) saying the payment is acknowledged for that claim. NHCX delivers it to the payer. The acknowledgement closes the payment for the claim on both sides. + +Send it after you have stored the amount, deductions and bank reference against the claim. + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md). +- The `/v1/paymentnotice/request` you are answering, received on [your registered address](../callbacks/paymentnotice-request.md), decrypted, and acknowledged with 202 within 30 seconds. +- That request's `x-hcx-correlation_id` and `x-hcx-sender_code`, stored. You echo the first and address the answer to the second. +- The encryption certificate of the payer, fetched with [`/fetch/certs`](fetch-certs.md). +- A Task bundle with `status` `completed`, `output` `paymentack` and the claim number. See [the PaymentNotice bundle and its acknowledgement](../fhir/payment-notice.md). +- A handler for [`/v1/error`](../callbacks/error.md), where NHCX reports an answer it could not deliver. + +## What happens + +Your system, as the provider, answers a request it received ([receiving the request](../callbacks/paymentnotice-request.md)) by calling NHCX on `/v1/paymentnotice/on_request`. NHCX answers 202 at once and delivers the same path to the registered address of the payer ([receiving `/v1/paymentnotice/on_request`](../callbacks/paymentnotice-on-request.md)). + +### 1. Seal the answer + +Swap the sender and recipient codes of the request. Echo its correlation id. Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md): + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "17", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +Workflow `17` is payment received. Send `response.complete`. The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/paymentnotice/on_request' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "type": "JWEPayload", + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Refusing a request + +To refuse the request at protocol level instead, send `"type": "ProtocolResponse"` on this path with `x-hcx-status` `response.error` and `x-hcx-error_details` holding `code`, `message` and `trace`. Keep clinical and business reasons inside the sealed payload. Only protocol errors go in the header. + +### 4. Retrying + +**Idempotency.** Echo the `x-hcx-correlation_id` of the request you are answering. A correlation id NHCX does not hold, or one it has already deleted, is refused with [`NHCX-1010`](../errors/nhcx-1010.md). Generate a new `x-hcx-api_call_id` for every call. `/v1/status` looks a message up by that value ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so never reuse one. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "payment", + "protocol_status": "request.dispatched" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` matches the request you answered, and `api_call_id` matches the value you sealed. +- `result.entity_type` is `payment`. +- `error.code` and `error.message` are empty. + +NHCX then delivers your answer to the payer. The recipient must answer each delivery with 202 and the acknowledgement body within 30 seconds. Otherwise NHCX retries up to five times, then deletes the request and reports it on the sender's [`/v1/error`](../callbacks/error.md). The step is done when you hold the 202 and no report for this correlation id arrives on your `/v1/error`. + +## When it goes wrong + +- [`NHCX-1010`](../errors/nhcx-1010.md): NHCX holds no request with that correlation id. You minted a new one instead of echoing it, or the request was deleted after failed deliveries. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `response.complete`, `response.partial` or `response.error`. +- [`PAYR-1517`](../errors/payr-1517.md): a refusal arrived as a `JWEPayload`. Protocol refusals travel as `ProtocolResponse`. +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): get a new session token and send again. +- A report arrives on your [`/v1/error`](../callbacks/error.md): the requester's address did not acknowledge five deliveries. The request is dead on that correlation id. diff --git a/catalogue/nhcx/endpoints/paymentnotice-request.md b/catalogue/nhcx/endpoints/paymentnotice-request.md new file mode 100644 index 000000000..4bbae6697 --- /dev/null +++ b/catalogue/nhcx/endpoints/paymentnotice-request.md @@ -0,0 +1,189 @@ +--- +id: nhcx.endpoint.paymentnotice-request +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/paymentnotice/request +summary: >- + Tell a hospital, through the claims exchange, that payment for an approved claim + has been started, processed or settled. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: PaymentNotice, /v1/paymentnotice/request rows.' +- url: https://hcxsbx.abdm.gov.in/servicehcxpayment/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/servicehcxpayment.json + hash: sha256:f5c9e3728efbbeaa5e0e8083334b0ae60a05930e5a1e096ca06d40abb235d658 + fetched: '2026-09-14' + note: 'API specification: servicehcxpayment, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/paymentnotice/request.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/paymentnotice/request. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Acceptance scenario. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, workflow ids 30, 31 and 33. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 11.4 API and workflow codes; Implementation notes. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2 Q3; page 4 Q12 and Q14. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 6 and 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.paymentnotice-on-request + - nhcx.endpoint.claim-on-submit + - nhcx.endpoint.dummy-payer-paymentnotice-init + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.status + callbacks: + - nhcx.callback.paymentnotice-request + - nhcx.callback.paymentnotice-on-request + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + flows: + - nhcx.flow.payment-notice + fhir: + - nhcx.fhir.payment-notice + tests: + - nhcx.test.payer-uc-13 + sandbox: + - nhcx.sandbox.dummy-payer +--- + +# POST /v1/paymentnotice/request + +## In plain words + +A payment notice tells the hospital whether the money for an approved claim has moved. As a payer, you send a sealed Task bundle to [NHCX](../../shared/glossary/nhcx.md) with a PaymentNotice and a PaymentReconciliation. They carry the amount, the deductions and the bank reference, including the UTR once settled. The provider acknowledges on `/v1/paymentnotice/on_request`. + +Send one notice at each stage of the transfer. + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md) and [how to get one](session-token.md). +- Your own [participant code](../glossary/participant-code.md), with your callback address registered, reachable from NHCX and answering 202 within 30 seconds. See [callback URL rules](../sandbox/callback-url-requirements.md). +- The provider's participant code: the sender code of the claim or pre-authorisation this message concerns. +- The recipient's encryption certificate, fetched with [`/fetch/certs`](fetch-certs.md). You seal the message with its public key. +- A Task bundle in [FHIR](../../shared/glossary/fhir.md) with `code` `deliver`, a PaymentNotice and a PaymentReconciliation carrying status, payment date, amount and payment identifier. See [the PaymentNotice bundle](../fhir/payment-notice.md). +- A handler for [`/v1/error`](../callbacks/error.md), so a request NHCX cannot deliver does not look like one still under review. +- A claim you approved on [`/v1/claim/on_submit`](claim-on-submit.md) with `response.complete`. +- A handler for [`/v1/paymentnotice/on_request`](../callbacks/paymentnotice-on-request.md). + +## What happens + +Your system, as the payer, calls NHCX on `/v1/paymentnotice/request`. NHCX checks the envelope, answers 202 at once, and forwards the same path to the provider's registered address ([receiving `/v1/paymentnotice/request`](../callbacks/paymentnotice-request.md)). The provider answers later on [`/v1/paymentnotice/on_request`](../callbacks/paymentnotice-on-request.md), which NHCX delivers to you. + +### 1. Seal the message + +Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md) and encrypt the bundle with the recipient's public key. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "30", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. `x-hcx-workflow_id` is the stage: `30` payment initiated, `31` processed, `33` settled. The UTR goes in the `33` notice. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/paymentnotice/request' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Retrying + +**Idempotency.** NHCX keys every conversation on `x-hcx-correlation_id`. An initiating request that reuses a correlation id NHCX already holds is refused with [`NHCX-1006`](../errors/nhcx-1006.md). So a blind retry is not safe. If your call timed out, ask [`/v1/status`](status.md) before you resend. `/v1/status` finds a message by its `x-hcx-api_call_id` ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so generate a new one for every call, a retry included. After a request fails for good, NHCX makes its correlation id inactive. Start a new cycle with a new correlation id. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "payment", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` and `api_call_id` match the values you sealed. +- `result.entity_type` is `payment`. +- `result.protocol_status` is `request.queued` or `request.dispatched`. +- `error.code` and `error.message` are empty. + +The 202 is a receipt, not a decision. NHCX never returns a decision synchronously. The step is done when [`/v1/paymentnotice/on_request`](../callbacks/paymentnotice-on-request.md) reaches your callback address with the same `x-hcx-correlation_id`, and your handler has answered it 202 within 30 seconds. + +## When it goes wrong + +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): get a new session token and send again. +- [`NHCX-1003`](../errors/nhcx-1003.md): the provider code is not registered in NHCX. +- [`NHCX-1006`](../errors/nhcx-1006.md): the correlation id was used before. Open the cycle with a new one. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `request.initiated`. +- You got 202 and nothing more arrives. The provider's address may be unreachable. Check your [`/v1/error`](../callbacks/error.md) and ask [`/v1/status`](status.md). diff --git a/catalogue/nhcx/endpoints/preauth-on-submit.md b/catalogue/nhcx/endpoints/preauth-on-submit.md new file mode 100644 index 000000000..d05fb6e9a --- /dev/null +++ b/catalogue/nhcx/endpoints/preauth-on-submit.md @@ -0,0 +1,194 @@ +--- +id: nhcx.endpoint.preauth-on-submit +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/preauth/on_submit +summary: >- + Send an insurer's decision on a pre-approval request back to the hospital through + the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: Preauth, /v1/preauth/on_submit rows.' +- url: https://hcxsbx.abdm.gov.in/preauthhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/preauthhcxservice.json + hash: sha256:2e8c594c51d9640ae4a576be34a5d190614918d1e7697d6718bc91c31fa66948 + fetched: '2026-09-14' + note: 'API specification: preauthhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/preauth/on_submit.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/preauth/on_submit. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1 Acceptance and Error scenario; page 2. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, workflow ids 20, 21, 22, 23, 24 and 241. +- url: https://hcxsbx.abdm.gov.in/images/3799f26f2a0b2c9a80c5.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Preauthorization.pdf + hash: sha256:75d5628e7dd8a8e1a55c4ab3836c0591088ba378a8cd498e8277d83911129439 + fetched: '2026-09-14' + note: Preauthorization, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. page 2, items 5 and 6. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 8.2 Preauth Lifecycle; 8.5 Response ClaimResponse Bundle. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.communication-request + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.preauth-submit + - nhcx.callback.preauth-on-submit + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1517 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.retries-and-expiry + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + fhir: + - nhcx.fhir.preauth-response + - nhcx.fhir.preauth-enhancement + tests: + - nhcx.test.payer-uc-09 + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/preauth/on_submit + +## In plain words + +This carries the payer's decision on a pre-authorisation: approved, partly approved, queried or rejected. As a payer, you send a sealed ClaimResponse bundle to [NHCX](../../shared/glossary/nhcx.md), which delivers it to the provider. An approval carries the `preAuthRef` the hospital needs for its claim. + +You call it after you have received a [`/v1/preauth/submit`](preauth-submit.md). You may call it more than once for one request, for example an acknowledgement first and the decision later. + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md). +- The `/v1/preauth/submit` you are answering, received on [your registered address](../callbacks/preauth-submit.md), decrypted, and acknowledged with 202 within 30 seconds. +- That request's `x-hcx-correlation_id` and `x-hcx-sender_code`, stored. You echo the first and address the answer to the second. +- The encryption certificate of the provider, fetched with [`/fetch/certs`](fetch-certs.md). +- A ClaimResponse bundle in [FHIR](../../shared/glossary/fhir.md), built as in [the preauthorisation response bundle](../fhir/preauth-response.md), with `preAuthRef` on an approval and `processNote` explaining any reduction. +- A handler for [`/v1/error`](../callbacks/error.md), where NHCX reports an answer it could not deliver. + +## What happens + +Your system, as the payer or a TPA acting for it, answers a request it received ([receiving the request](../callbacks/preauth-submit.md)) by calling NHCX on `/v1/preauth/on_submit`. NHCX answers 202 at once and delivers the same path to the registered address of the provider ([receiving `/v1/preauth/on_submit`](../callbacks/preauth-on-submit.md)). + +### 1. Seal the answer + +Swap the sender and recipient codes of the request. Echo its correlation id. Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md): + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "21", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +`x-hcx-workflow_id` names the outcome: `20` received, `21` approved, `23` rejected, `24` queried. For an enhancement, `22` approved and `241` queried. [Workflow codes](../concepts/workflow-codes.md) gives the status that goes with each. The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/preauth/on_submit' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "type": "JWEPayload", + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Refusing a request + +To refuse the request at protocol level instead, send `"type": "ProtocolResponse"` on this path with `x-hcx-status` `response.error` and `x-hcx-error_details` holding `code`, `message` and `trace`. Keep clinical and business reasons inside the sealed payload. Only protocol errors go in the header. + +### 4. Retrying + +**Idempotency.** Echo the `x-hcx-correlation_id` of the request you are answering. A correlation id NHCX does not hold, or one it has already deleted, is refused with [`NHCX-1010`](../errors/nhcx-1010.md). Generate a new `x-hcx-api_call_id` for every call. `/v1/status` looks a message up by that value ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so never reuse one. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "preauth", + "protocol_status": "request.dispatched" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` matches the request you answered, and `api_call_id` matches the value you sealed. +- `result.entity_type` is `preauth`. +- `error.code` and `error.message` are empty. + +NHCX then delivers your answer to the provider. The recipient must answer each delivery with 202 and the acknowledgement body within 30 seconds. Otherwise NHCX retries up to five times, then deletes the request and reports it on the sender's [`/v1/error`](../callbacks/error.md). The step is done when you hold the 202 and no report for this correlation id arrives on your `/v1/error`. + +## When it goes wrong + +- [`NHCX-1010`](../errors/nhcx-1010.md): NHCX holds no request with that correlation id. You minted a new one instead of echoing it, or the request was deleted after failed deliveries. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `response.complete`, `response.partial` or `response.error`. +- [`PAYR-1517`](../errors/payr-1517.md): a refusal arrived as a `JWEPayload`. Protocol refusals travel as `ProtocolResponse`. +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): get a new session token and send again. +- A report arrives on your [`/v1/error`](../callbacks/error.md): the requester's address did not acknowledge five deliveries. The request is dead on that correlation id. diff --git a/catalogue/nhcx/endpoints/preauth-submit.md b/catalogue/nhcx/endpoints/preauth-submit.md new file mode 100644 index 000000000..c41dd4fdf --- /dev/null +++ b/catalogue/nhcx/endpoints/preauth-submit.md @@ -0,0 +1,211 @@ +--- +id: nhcx.endpoint.preauth-submit +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/preauth/submit +summary: >- + Ask an insurer, through the claims exchange, to approve a treatment before it + happens, and get a receipt while the decision follows later. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: Preauth, /v1/preauth/submit rows.' +- url: https://hcxsbx.abdm.gov.in/preauthhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/preauthhcxservice.json + hash: sha256:2e8c594c51d9640ae4a576be34a5d190614918d1e7697d6718bc91c31fa66948 + fetched: '2026-09-14' + note: 'API specification: preauthhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/preauth/submit.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/preauth/submit. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Acceptance scenario. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, workflow ids 12, 13 and 131. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2 Q3; page 4 Q12 and Q14. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 6, 7 and 8. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 5 table 5.1; page 6 API Flows. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.preauth-on-submit + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.dummy-payer-process-request + - nhcx.endpoint.abha-biometric-auth-verify + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.status + callbacks: + - nhcx.callback.preauth-submit + - nhcx.callback.preauth-on-submit + - nhcx.callback.communication-request + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1001 + - nhcx.error.payr-1256 + - nhcx.error.payr-1238 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + - nhcx.concept.biometric-authentication + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.preauth-enhancement + - nhcx.fhir.query-update + tests: + - nhcx.test.provider-uc-07 + - nhcx.test.tc-pa-01 + - nhcx.test.tc-pa-02 + decisions: + - nhcx.decision.preauth-or-predetermination + sandbox: + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.environments-and-base-urls + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/preauth/submit + +## In plain words + +Pre-authorisation is the hospital's request for the insurer's approval of a specific treatment before it is given. Your system, as the provider, sends a Claim bundle with `use` `preauthorization` to [NHCX](../../shared/glossary/nhcx.md), sealed for the payer. NHCX gives you a receipt at once. The decision arrives later on your `/v1/preauth/on_submit`. + +The same path carries a new request, a resubmission, an enhancement and your answer to a payer's query. `x-hcx-workflow_id` and `x-hcx-use_case` tell the payer which one it is. + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md) and [how to get one](session-token.md). +- Your own [participant code](../glossary/participant-code.md), with your callback address registered, reachable from NHCX and answering 202 within 30 seconds. See [callback URL rules](../sandbox/callback-url-requirements.md). +- The payer's participant code. Take it from `processingID` in the [`/participant/get/policies`](participant-get-policies.md) response, not from `PayerID`. +- The recipient's encryption certificate, fetched with [`/fetch/certs`](fetch-certs.md). You seal the message with its public key. +- A Claim bundle in [FHIR](../../shared/glossary/fhir.md) with `use` `preauthorization`, built as in [the preauthorisation request bundle](../fhir/preauth-request.md). Attach every document the eligibility answer or insurance plan asked for. +- A handler for [`/v1/error`](../callbacks/error.md), so a request NHCX cannot deliver does not look like one still under review. +- For a [PMJAY](../glossary/pmjay.md) case: a beneficiary token from [biometric authentication](abha-biometric-auth-verify.md), or the Authentication Consent questionnaire response. +- A handler for [`/v1/preauth/on_submit`](../callbacks/preauth-on-submit.md) and for [`/v1/communication/request`](../callbacks/communication-request.md), where payer queries can arrive. +- In the sandbox you can address the [dummy payer](../sandbox/dummy-payer.md), participant `1000003538@hcx`, which answers without a real insurer. + +## What happens + +Your system, as the provider, calls NHCX on `/v1/preauth/submit`. NHCX checks the envelope, answers 202 at once, and forwards the same path to the payer's registered address ([receiving `/v1/preauth/submit`](../callbacks/preauth-submit.md)). The payer answers later on [`/v1/preauth/on_submit`](../callbacks/preauth-on-submit.md), which NHCX delivers to you. + +### 1. Seal the message + +Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md) and encrypt the bundle with the recipient's public key. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "12", + "x-hcx-use_case": "New", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. Workflow `12` with use case `New` opens a new pre-authorisation. An enhancement is workflow `13` with use case `Enhancement`, and its query answer is `131`. Take the code for any other step from [workflow codes](../concepts/workflow-codes.md). Always send both headers, even though the envelope marks them optional. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/preauth/submit' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Retrying + +**Idempotency.** NHCX keys every conversation on `x-hcx-correlation_id`. An initiating request that reuses a correlation id NHCX already holds is refused with [`NHCX-1006`](../errors/nhcx-1006.md). So a blind retry is not safe. If your call timed out, ask [`/v1/status`](status.md) before you resend. `/v1/status` finds a message by its `x-hcx-api_call_id` ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so generate a new one for every call, a retry included. After a request fails for good, NHCX makes its correlation id inactive. Start a new cycle with a new correlation id. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "preauth", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` and `api_call_id` match the values you sealed. +- `result.entity_type` is `preauth`. +- `result.protocol_status` is `request.queued` or `request.dispatched`. +- `error.code` and `error.message` are empty. + +The 202 is a receipt, not a decision. NHCX never returns a decision synchronously. The step is done when [`/v1/preauth/on_submit`](../callbacks/preauth-on-submit.md) reaches your callback address with the same `x-hcx-correlation_id`, and your handler has answered it 202 within 30 seconds. The payer may send an acknowledgement first and the decision later, each on the same correlation id. + +## When it goes wrong + +- [`PAYR-1256`](../errors/payr-1256.md): a new [PMJAY](../glossary/pmjay.md) pre-authorisation carries neither biometric authentication nor the consent questionnaire response. +- [`PAYR-1238`](../errors/payr-1238.md): the beneficiary already has an active pre-authorisation at this hospital. Cancel it or raise its claim first. +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): the session token expired or lacks the `Bearer ` prefix. Get a new token and send again. See [every call returns 401](../troubleshooting/everything-returns-401.md). +- [`NHCX-1003`](../errors/nhcx-1003.md): the recipient code is not registered. A provider used `PayerID` instead of `processingID`. +- [`NHCX-1006`](../errors/nhcx-1006.md): the correlation id was used before. Start the cycle with a new one. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `request.initiated`. diff --git a/catalogue/nhcx/endpoints/predetermination-on-submit.md b/catalogue/nhcx/endpoints/predetermination-on-submit.md new file mode 100644 index 000000000..3ca9fad13 --- /dev/null +++ b/catalogue/nhcx/endpoints/predetermination-on-submit.md @@ -0,0 +1,153 @@ +--- +id: nhcx.endpoint.predetermination-on-submit +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/predetermination/on_submit +summary: >- + Send an insurer's estimate for a planned treatment back to the hospital through + the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/predetermination/on_submit. +- url: https://hcxsbx.abdm.gov.in/images/2c3fbb4e6b09f0834f69.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Implementation Guide for Adoption of FHIR in ABDM and NHCX.pdf + hash: sha256:549377c9c26b1bd23decac3a1b9e5ebedfdc8e0fe99e53ef733859b188f51366 + fetched: '2026-09-14' + note: Implementation Guide for Adoption of FHIR in ABDM and NHCX, row 14 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. API table, row 6. +- url: https://hcxsbx.abdm.gov.in/images/af8d243edcc2139a515d.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Usecases.pdf + hash: sha256:8709b2907a0d5a0dbb36f5e63ed8deae269e0c75372b05d71ce7380c8a0929e7 + fetched: '2026-09-14' + note: NHCX Usecases, row 1 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1 to 2, Predetermination Request Submission. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1 Acceptance and Error scenario; page 2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.predetermination-submit + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.predetermination-submit + - nhcx.callback.predetermination-on-submit + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1517 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.retries-and-expiry + flows: + - nhcx.flow.predetermination + fhir: + - nhcx.fhir.preauth-response + decisions: + - nhcx.decision.preauth-or-predetermination + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/predetermination/on_submit + +## In plain words + +This carries the payer's estimate for a proposed treatment. As a payer that supports predetermination, you send a sealed ClaimResponse with `use` `predetermination` to [NHCX](../../shared/glossary/nhcx.md), which delivers it to the provider. The estimate reserves nothing against the policy. + +You call it after you have received a [`/v1/predetermination/submit`](predetermination-submit.md). + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md). +- The `/v1/predetermination/submit` you are answering, received on [your registered address](../callbacks/predetermination-submit.md), decrypted, and acknowledged with 202 within 30 seconds. +- That request's `x-hcx-correlation_id` and `x-hcx-sender_code`, stored. You echo the first and address the answer to the second. +- The encryption certificate of the provider, fetched with [`/fetch/certs`](fetch-certs.md). +- A bundle with `ClaimResponse`, `Patient`, both `Organization` entries and `Coverage`. `ClaimResponse.use` is `predetermination` and the estimated benefit sits in `ClaimResponse.total` under category `benefit`. +- A handler for [`/v1/error`](../callbacks/error.md), where NHCX reports an answer it could not deliver. + +## What happens + +Your system, as the payer or a TPA acting for it, answers a request it received ([receiving the request](../callbacks/predetermination-submit.md)) by calling NHCX on `/v1/predetermination/on_submit`. NHCX answers 202 at once and delivers the same path to the registered address of the provider ([receiving `/v1/predetermination/on_submit`](../callbacks/predetermination-on-submit.md)). + +### 1. Seal the answer + +Swap the sender and recipient codes of the request. Echo its correlation id. Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md): + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +Send `response.complete`. No workflow code applies. The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/predetermination/on_submit' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "type": "JWEPayload", + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Refusing a request + +To refuse the request at protocol level instead, send `"type": "ProtocolResponse"` on this path with `x-hcx-status` `response.error` and `x-hcx-error_details` holding `code`, `message` and `trace`. Keep clinical and business reasons inside the sealed payload. Only protocol errors go in the header. + +### 4. Retrying + +**Idempotency.** Echo the `x-hcx-correlation_id` of the request you are answering. A correlation id NHCX does not hold, or one it has already deleted, is refused with [`NHCX-1010`](../errors/nhcx-1010.md). Generate a new `x-hcx-api_call_id` for every call. `/v1/status` looks a message up by that value ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so never reuse one. + +## How you know it worked + +You receive HTTP `202 Accepted` with the acknowledgement body: `timestamp`, `api_call_id`, `correlation_id`, `result` and an empty `error`. + +- `correlation_id` matches the request you answered. +- `error.code` and `error.message` are empty. + +NHCX then delivers your answer to the provider. The recipient must answer each delivery with 202 and the acknowledgement body within 30 seconds. Otherwise NHCX retries up to five times, then deletes the request and reports it on the sender's [`/v1/error`](../callbacks/error.md). The step is done when you hold the 202 and no report for this correlation id arrives on your `/v1/error`. + +## When it goes wrong + +- [`NHCX-1010`](../errors/nhcx-1010.md): NHCX holds no request with that correlation id. You minted a new one instead of echoing it, or the request was deleted after failed deliveries. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `response.complete`, `response.partial` or `response.error`. +- [`PAYR-1517`](../errors/payr-1517.md): a refusal arrived as a `JWEPayload`. Protocol refusals travel as `ProtocolResponse`. +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): get a new session token and send again. +- A report arrives on your [`/v1/error`](../callbacks/error.md): the requester's address did not acknowledge five deliveries. The request is dead on that correlation id. diff --git a/catalogue/nhcx/endpoints/predetermination-submit.md b/catalogue/nhcx/endpoints/predetermination-submit.md new file mode 100644 index 000000000..006a1f07f --- /dev/null +++ b/catalogue/nhcx/endpoints/predetermination-submit.md @@ -0,0 +1,158 @@ +--- +id: nhcx.endpoint.predetermination-submit +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/predetermination/submit +summary: >- + Ask an insurer, through the claims exchange, what it would approve for a planned + treatment before the patient is admitted. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/predetermination/submit. +- url: https://hcxsbx.abdm.gov.in/images/2c3fbb4e6b09f0834f69.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Implementation Guide for Adoption of FHIR in ABDM and NHCX.pdf + hash: sha256:549377c9c26b1bd23decac3a1b9e5ebedfdc8e0fe99e53ef733859b188f51366 + fetched: '2026-09-14' + note: Implementation Guide for Adoption of FHIR in ABDM and NHCX, row 14 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. API table, rows 5 and 6. +- url: https://hcxsbx.abdm.gov.in/images/af8d243edcc2139a515d.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Usecases.pdf + hash: sha256:8709b2907a0d5a0dbb36f5e63ed8deae269e0c75372b05d71ce7380c8a0929e7 + fetched: '2026-09-14' + note: NHCX Usecases, row 1 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1 to 2, Predetermination Request Submission. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Acceptance scenario. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2 Q3; page 4 Q12 and Q14. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 6 and 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.predetermination-on-submit + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.status + callbacks: + - nhcx.callback.predetermination-submit + - nhcx.callback.predetermination-on-submit + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1001 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + flows: + - nhcx.flow.predetermination + fhir: + - nhcx.fhir.preauth-request + decisions: + - nhcx.decision.preauth-or-predetermination + sandbox: + - nhcx.sandbox.environments-and-base-urls + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/predetermination/submit + +## In plain words + +Predetermination asks the insurer for an estimate: what it would approve for a proposed treatment. Your system, as the provider, sends a bundle shaped like a pre-authorisation, with `Claim.use` `predetermination`, to [NHCX](../../shared/glossary/nhcx.md). The payer's estimate arrives later on your `/v1/predetermination/on_submit`. + +An estimate reserves nothing. The treatment still needs a pre-authorisation when it happens. Build this only with a payer that has confirmed it answers predetermination. + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md) and [how to get one](session-token.md). +- Your own [participant code](../glossary/participant-code.md), with your callback address registered, reachable from NHCX and answering 202 within 30 seconds. See [callback URL rules](../sandbox/callback-url-requirements.md). +- The payer's participant code, for a payer that has confirmed it supports predetermination. +- The recipient's encryption certificate, fetched with [`/fetch/certs`](fetch-certs.md). You seal the message with its public key. +- A bundle shaped as in [the preauthorisation request bundle](../fhir/preauth-request.md), with `Claim.use` `predetermination` and your predetermination reference in `Claim.identifier[0].value`. +- A handler for [`/v1/error`](../callbacks/error.md), so a request NHCX cannot deliver does not look like one still under review. +- A handler for [`/v1/predetermination/on_submit`](../callbacks/predetermination-on-submit.md). + +## What happens + +Your system, as the provider, calls NHCX on `/v1/predetermination/submit`. NHCX checks the envelope, answers 202 at once, and forwards the same path to the payer's registered address ([receiving `/v1/predetermination/submit`](../callbacks/predetermination-submit.md)). The payer answers later on [`/v1/predetermination/on_submit`](../callbacks/predetermination-on-submit.md), which NHCX delivers to you. + +### 1. Seal the message + +Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md) and encrypt the bundle with the recipient's public key. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. Give each predetermination a new correlation id. No workflow code applies. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/predetermination/submit' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Retrying + +**Idempotency.** NHCX keys every conversation on `x-hcx-correlation_id`. An initiating request that reuses a correlation id NHCX already holds is refused with [`NHCX-1006`](../errors/nhcx-1006.md). So a blind retry is not safe. If your call timed out, ask [`/v1/status`](status.md) before you resend. `/v1/status` finds a message by its `x-hcx-api_call_id` ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so generate a new one for every call, a retry included. After a request fails for good, NHCX makes its correlation id inactive. Start a new cycle with a new correlation id. + +## How you know it worked + +You receive HTTP `202 Accepted` with the acknowledgement body: `timestamp`, `api_call_id`, `correlation_id`, `result` and an empty `error`. + +- `correlation_id` and `api_call_id` match the values you sealed. +- `error.code` and `error.message` are empty. + +The step is done when [`/v1/predetermination/on_submit`](../callbacks/predetermination-on-submit.md) reaches your callback address with the same `x-hcx-correlation_id`. It carries a `ClaimResponse` with `use` `predetermination` and the estimated benefit in `ClaimResponse.total` under category `benefit`. Your handler answers it 202 within 30 seconds. + +## When it goes wrong + +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): the session token expired or lacks the `Bearer ` prefix. Get a new token and send again. See [every call returns 401](../troubleshooting/everything-returns-401.md). +- [`NHCX-1003`](../errors/nhcx-1003.md): the recipient code is not registered. A provider used `PayerID` instead of `processingID`. +- [`NHCX-1006`](../errors/nhcx-1006.md): the correlation id was used before. Start the cycle with a new one. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `request.initiated`. +- You got 202 and nothing more arrives. The recipient may have failed to decrypt ([`PAYR-1001`](../errors/payr-1001.md)) or your callback is unreachable. See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). diff --git a/catalogue/nhcx/endpoints/search-on-submit.md b/catalogue/nhcx/endpoints/search-on-submit.md new file mode 100644 index 000000000..7f4a5ac45 --- /dev/null +++ b/catalogue/nhcx/endpoints/search-on-submit.md @@ -0,0 +1,172 @@ +--- +id: nhcx.endpoint.search-on-submit +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/search/on_submit +summary: >- + Send the claim documents an authorised body asked for back to it through the claims + exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: Search, /v1/search/on_submit rows.' +- url: https://hcxsbx.abdm.gov.in/searchhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/searchhcxservice.json + hash: sha256:21749dd2ba84a19c5523772da359d76293493d44b48651f1af2e6042d78fa296 + fetched: '2026-09-14' + note: 'API specification: searchhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/search/on_submit.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/search/on_submit. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1 Acceptance and Error scenario; page 2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.search-submit + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.search-submit + - nhcx.callback.search-on-submit + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1517 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.retries-and-expiry + flows: + - nhcx.flow.claim-search + fhir: + - nhcx.fhir.task + tests: + - nhcx.test.payer-uc-12 + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/search/on_submit + +## In plain words + +This answers a search. As a payer, you return the claim documents for the case the search named, sealed, through [NHCX](../../shared/glossary/nhcx.md). The bundle is a Task whose `Task.output` references the `ClaimResponse` for that case. Nothing about the claim changes. + +You call it after you have received a [`/v1/search/submit`](search-submit.md). + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md). +- The `/v1/search/submit` you are answering, received on [your registered address](../callbacks/search-submit.md), decrypted, and acknowledged with 202 within 30 seconds. +- That request's `x-hcx-correlation_id` and `x-hcx-sender_code`, stored. You echo the first and address the answer to the second. +- The encryption certificate of the requester, fetched with [`/fetch/certs`](fetch-certs.md). +- A Task bundle with `Task.status` `completed`, the `ClaimResponse` as a bundle entry, and `Task.output` referencing it. +- A handler for [`/v1/error`](../callbacks/error.md), where NHCX reports an answer it could not deliver. + +## What happens + +Your system, as the payer or a TPA acting for it, answers a request it received ([receiving the request](../callbacks/search-submit.md)) by calling NHCX on `/v1/search/on_submit`. NHCX answers 202 at once and delivers the same path to the registered address of the requester ([receiving `/v1/search/on_submit`](../callbacks/search-on-submit.md)). + +### 1. Seal the answer + +Swap the sender and recipient codes of the request. Echo its correlation id. Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md): + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +Send `response.complete`, or `response.partial` when more results follow. The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/search/on_submit' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "type": "JWEPayload", + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Refusing a request + +To refuse the request at protocol level instead, send `"type": "ProtocolResponse"` on this path with `x-hcx-status` `response.error` and `x-hcx-error_details` holding `code`, `message` and `trace`. Keep clinical and business reasons inside the sealed payload. Only protocol errors go in the header. + +### 4. Retrying + +**Idempotency.** Echo the `x-hcx-correlation_id` of the request you are answering. A correlation id NHCX does not hold, or one it has already deleted, is refused with [`NHCX-1010`](../errors/nhcx-1010.md). Generate a new `x-hcx-api_call_id` for every call. `/v1/status` looks a message up by that value ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so never reuse one. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "task", + "protocol_status": "request.dispatched" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` matches the request you answered, and `api_call_id` matches the value you sealed. +- `result.entity_type` is `task`. +- `error.code` and `error.message` are empty. + +NHCX then delivers your answer to the requester. The recipient must answer each delivery with 202 and the acknowledgement body within 30 seconds. Otherwise NHCX retries up to five times, then deletes the request and reports it on the sender's [`/v1/error`](../callbacks/error.md). The step is done when you hold the 202 and no report for this correlation id arrives on your `/v1/error`. + +## When it goes wrong + +- [`NHCX-1010`](../errors/nhcx-1010.md): NHCX holds no request with that correlation id. You minted a new one instead of echoing it, or the request was deleted after failed deliveries. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `response.complete`, `response.partial` or `response.error`. +- [`PAYR-1517`](../errors/payr-1517.md): a refusal arrived as a `JWEPayload`. Protocol refusals travel as `ProtocolResponse`. +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): get a new session token and send again. +- A report arrives on your [`/v1/error`](../callbacks/error.md): the requester's address did not acknowledge five deliveries. The request is dead on that correlation id. diff --git a/catalogue/nhcx/endpoints/search-submit.md b/catalogue/nhcx/endpoints/search-submit.md new file mode 100644 index 000000000..f9ca41df0 --- /dev/null +++ b/catalogue/nhcx/endpoints/search-submit.md @@ -0,0 +1,179 @@ +--- +id: nhcx.endpoint.search-submit +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/search/submit +summary: >- + Ask an insurer, through the claims exchange, for the claim documents of a known + case, for audit or dispute review. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: Search, /v1/search/submit rows.' +- url: https://hcxsbx.abdm.gov.in/searchhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/searchhcxservice.json + hash: sha256:21749dd2ba84a19c5523772da359d76293493d44b48651f1af2e6042d78fa296 + fetched: '2026-09-14' + note: 'API specification: searchhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/search/submit.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/search/submit. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Acceptance scenario. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2 Q3; page 4 Q12 and Q14. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 6 and 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.search-on-submit + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.status + callbacks: + - nhcx.callback.search-submit + - nhcx.callback.search-on-submit + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1001 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + flows: + - nhcx.flow.claim-search + fhir: + - nhcx.fhir.task + tests: + - nhcx.test.provider-uc-10 + - nhcx.test.payer-uc-12 + sandbox: + - nhcx.sandbox.environments-and-base-urls + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/search/submit + +## In plain words + +Search lets an authorised entity, for example [NHA](../../shared/glossary/nha.md) or [IRDAI](../glossary/irdai.md), pull the claim documents for a case. Your system sends a Task bundle naming the case to [NHCX](../../shared/glossary/nhcx.md). The payer returns the documents later on your `/v1/search/on_submit`. + +Search only reads. Nothing about the claim changes. + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md) and [how to get one](session-token.md). +- Your own [participant code](../glossary/participant-code.md), with your callback address registered, reachable from NHCX and answering 202 within 30 seconds. See [callback URL rules](../sandbox/callback-url-requirements.md). +- The payer's participant code. +- The recipient's encryption certificate, fetched with [`/fetch/certs`](fetch-certs.md). You seal the message with its public key. +- A Task bundle in [FHIR](../../shared/glossary/fhir.md) with `code` `status`, `status` `requested` and `basedOn` your request reference. Its inputs name the claim number, a date range or the policy number. +- A handler for [`/v1/error`](../callbacks/error.md), so a request NHCX cannot deliver does not look like one still under review. +- A handler for [`/v1/search/on_submit`](../callbacks/search-on-submit.md). + +## What happens + +Your system, as an authorised entity, calls NHCX on `/v1/search/submit`. NHCX checks the envelope, answers 202 at once, and forwards the same path to the payer's registered address ([receiving `/v1/search/submit`](../callbacks/search-submit.md)). The payer answers later on [`/v1/search/on_submit`](../callbacks/search-on-submit.md), which NHCX delivers to you. + +### 1. Seal the message + +Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md) and encrypt the bundle with the recipient's public key. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. Give this call a new `x-hcx-correlation_id`, the same UUID as its `x-hcx-api_call_id`. Name the case inside the Task, not in the header. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/search/submit' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Retrying + +**Idempotency.** NHCX keys every conversation on `x-hcx-correlation_id`. An initiating request that reuses a correlation id NHCX already holds is refused with [`NHCX-1006`](../errors/nhcx-1006.md). So a blind retry is not safe. If your call timed out, ask [`/v1/status`](status.md) before you resend. `/v1/status` finds a message by its `x-hcx-api_call_id` ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so generate a new one for every call, a retry included. After a request fails for good, NHCX makes its correlation id inactive. Start a new cycle with a new correlation id. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "task", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` and `api_call_id` match the values you sealed. +- `result.entity_type` is `task`. +- `result.protocol_status` is `request.queued` or `request.dispatched`. +- `error.code` and `error.message` are empty. + +The 202 is a receipt, not a decision. NHCX never returns a decision synchronously. The step is done when [`/v1/search/on_submit`](../callbacks/search-on-submit.md) reaches your callback address with the same `x-hcx-correlation_id`, and your handler has answered it 202 within 30 seconds. Its Task bundle has `Task.output` referencing the `ClaimResponse` for the case. + +## When it goes wrong + +- The payer answers [`PAYR-1102`](../errors/payr-1102.md), invalid search parameter: the Task does not name the case it should search for. +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): the session token expired or lacks the `Bearer ` prefix. Get a new token and send again. See [every call returns 401](../troubleshooting/everything-returns-401.md). +- [`NHCX-1003`](../errors/nhcx-1003.md): the recipient code is not registered. A provider used `PayerID` instead of `processingID`. +- [`NHCX-1006`](../errors/nhcx-1006.md): the correlation id was used before. Start the cycle with a new one. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `request.initiated`. +- You got 202 and nothing more arrives. The recipient may have failed to decrypt ([`PAYR-1001`](../errors/payr-1001.md)) or your callback is unreachable. See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). diff --git a/catalogue/nhcx/endpoints/session-token.md b/catalogue/nhcx/endpoints/session-token.md new file mode 100644 index 000000000..4576ddf09 --- /dev/null +++ b/catalogue/nhcx/endpoints/session-token.md @@ -0,0 +1,124 @@ +--- +id: nhcx.endpoint.session-token +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /api/hiecm/gateway/v3/sessions +summary: >- + Trade your client id and client secret for the short-lived access token that every + claims exchange call carries. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Q2 base URLs; Q3; page 5, Q20. +- url: https://hcxsbx.abdm.gov.in/images/54d18468412741b759f3.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Authenticating with NHCX.pdf + hash: sha256:0ea90b635634844aaf8981e917cbf8b765ddd83a340f3c934883912599a62d8b + fetched: '2026-09-14' + note: Authenticating with NHCX, row 3 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1. +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications.md + hash: sha256:56234dd8a55fe4eb9dd852779b22b522b04760c9bec5c263d5e9bc3ac2c6f167 + fetched: '2026-09-14' + note: Site page /domain-specifications, text as shown on the site. participant onboarding section, Milestone 1 access token. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, items 6 and 9. +verified: + status: unverified +related: + concepts: + - nhcx.concept.session-token + endpoints: + - nhcx.endpoint.get-session + - nhcx.endpoint.fetch-participants-list + decisions: + - nhcx.decision.session-endpoint + errors: + - nhcx.error.nhcx-401 + troubleshooting: + - nhcx.troubleshooting.everything-returns-401 + sandbox: + - nhcx.sandbox.prerequisites + - nhcx.sandbox.going-live +--- + +# POST /api/hiecm/gateway/v3/sessions + +## In plain words + +This call gives you an access token. Every call you make to the National Health Claims Exchange ([NHCX](../../shared/glossary/nhcx.md)) carries it. + +You send the client id and client secret issued to you for [ABDM](../../shared/glossary/abdm.md) [Milestone 1](../../shared/glossary/m1.md). The ABDM [gateway](../../shared/glossary/gateway.md) returns a bearer token and its lifetime in seconds. The token is short lived, so you renew it on a timer. See [the session token](../concepts/session-token.md) for how one token serves every NHCX call. + +## Before you start + +- You hold an ABDM [sandbox](../../shared/glossary/sandbox.md) client id and client secret. See [sandbox prerequisites](../sandbox/prerequisites.md). A provider that already holds these for ABHA integration uses the same pair for NHCX. +- Your system clock is synchronised, because the `TIMESTAMP` header carries the current time. +- Your code can generate a fresh UUID for every call. + +## What happens + +Your system posts its credentials to the session address. The gateway answers on the same connection with the token. No callback follows. + +| Environment | Session address | +|---|---| +| Sandbox | `https://dev.abdm.gov.in/api/hiecm/gateway/v3/sessions` | +| Production | Issued with your production credentials after [going live](../sandbox/going-live.md) | + +```bash +curl -X POST 'https://dev.abdm.gov.in/api/hiecm/gateway/v3/sessions' \ + -H 'Content-Type: application/json' \ + -H 'REQUEST-ID: ' \ + -H 'TIMESTAMP: ' \ + -H 'X-CM-ID: sbx' \ + -d '{ + "clientId": "", + "clientSecret": "", + "grantType": "client_credentials" + }' +``` + +- `` and `` come from your ABDM sandbox registration. +- [`REQUEST-ID`](../../shared/glossary/request-id.md) is a new UUID for this call. Do not copy one from an example. +- [`TIMESTAMP`](../../shared/glossary/timestamp-header.md) is the current UTC time with milliseconds and a trailing `Z`, for example `2026-09-04T06:15:51.975Z`. Take it from the system clock. +- [`X-CM-ID`](../../shared/glossary/x-cm-id.md) is `sbx` on the sandbox. +- `grantType` is always `client_credentials`. + +The earlier address, `https://dev.abdm.gov.in/gateway/v0.5/sessions`, takes the same `clientId`, `clientSecret` and `grantType` body. It also returns `accessToken` and `expiresIn`. [Choosing a session endpoint](../decisions/session-endpoint.md) compares both addresses with [`/get/session`](get-session.md). + +The response body has this shape: + +```json +{ + "accessToken": "", + "expiresIn": , + "refreshTokenIn": , + "refreshToken": "", + "tokenType": "bearer" +} +``` + +Send `accessToken` on every NHCX call as `bearer_auth: Bearer `. Do not hard code a lifetime. Read `expiresIn` from each response and mint a new token before it runs out. + +**Idempotency.** Every call mints a new token. Repeating the call is safe. Keep the newest token and drop the old one. + +## How you know it worked + +You receive HTTP 200 with a non-empty `accessToken` and an integer `expiresIn`. + +Your next participant service call, for example [`/fetch/participants/list`](fetch-participants-list.md), returns 200 rather than 401 when it carries the token in `bearer_auth`. + +Record the time the token arrived. It is valid until that time plus `expiresIn` seconds. + +## When it goes wrong + +- **A later call returns 401 with `Sender is not authorized to execute the operation`.** The token has expired. Call this endpoint again, then retry the failed call once with the new token. See [NHCX-401](../errors/nhcx-401.md). +- **A later call returns 401 although the token is fresh.** The token went out without the `Bearer ` prefix. Send `bearer_auth: Bearer `. See [every call returns 401](../troubleshooting/everything-returns-401.md). +- **The session call itself is refused.** Check that the body carries `grantType` set to `client_credentials`, that `REQUEST-ID` is new, and that `TIMESTAMP` comes from a synchronised clock. +- **A retry with a new token also returns 401.** The credentials are wrong or were replaced. Stop retrying and check the client id and secret. diff --git a/catalogue/nhcx/endpoints/status.md b/catalogue/nhcx/endpoints/status.md new file mode 100644 index 000000000..9150736f2 --- /dev/null +++ b/catalogue/nhcx/endpoints/status.md @@ -0,0 +1,172 @@ +--- +id: nhcx.endpoint.status +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/status +summary: >- + Ask the claims exchange where one of your own sent messages stands, without sending + it again. +sources: +- url: https://hcxsbx.abdm.gov.in/statushcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/statushcxservice.json + hash: sha256:93b6355a234ef56607427fcdfa32da4921124180c9df08ecd73c8af8955c2adf + fetched: '2026-09-14' + note: 'API specification: statushcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/status.post description.' +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: Status, /v1/status rows.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/status. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Acceptance scenario; Error scenario. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.on-status + - nhcx.endpoint.session-token + callbacks: + - nhcx.callback.status + - nhcx.callback.on-status + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.status-lifecycle + - nhcx.concept.retries-and-expiry + flows: + - nhcx.flow.status-check + decisions: + - nhcx.decision.status-poll-or-wait + tests: + - nhcx.test.provider-uc-13 + - nhcx.test.payer-uc-15 + sandbox: + - nhcx.sandbox.environments-and-base-urls + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/status + +## In plain words + +When an answer has not come back, `/v1/status` tells you whether [NHCX](../../shared/glossary/nhcx.md) still holds your message or has passed it to the recipient. It answers where the message is, not what was decided. You can only ask about messages you sent yourself. + +Ask before you resend anything. Resending creates a duplicate. + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md). +- The `x-hcx-api_call_id` of the message you are asking about. Store every one you send. +- The participant code of that message's recipient, and its encryption certificate. +- A handler for [`/v1/on_status`](../callbacks/on-status.md), where the recipient's answer arrives. + +## What happens + +Your system calls NHCX on `/v1/status`. NHCX answers synchronously with the position of the message. If the recipient already has it, NHCX forwards the question ([receiving `/v1/status`](../callbacks/status.md)) and the recipient answers on [`/v1/on_status`](on-status.md). + +### 1. Seal the question + +The sealed payload is an empty string. Everything travels in the [protected header](../glossary/protected-header.md): + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +Set `x-hcx-correlation_id` to the `x-hcx-api_call_id` of the message you are checking. When the first message of a cycle uses its API call id as its correlation id, the two values are the same. The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/status' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Retrying + +A status call changes nothing, so you may repeat it. Give each attempt a new `x-hcx-api_call_id`. Space the attempts out rather than polling in a loop. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "", + "protocol_status": "request.dispatched" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `result.protocol_status` `request.queued` means NHCX still holds the message. No callback follows. Wait, then ask again. +- `result.protocol_status` `request.dispatched` means the recipient has it. An answer arrives on [`/v1/on_status`](../callbacks/on-status.md). +- `error.code` and `error.message` are empty. + +The step is done when you hold one of those two values for the message you asked about. + +## When it goes wrong + +- [`NHCX-1012`](../errors/nhcx-1012.md): no record for that API call id. You sent a new UUID as the correlation id instead of the checked message's `x-hcx-api_call_id`, or the original never landed. +- [`NHCX-1006`](../errors/nhcx-1006.md): you resent the original request after `request.queued`. Ask again instead of resending. +- Nothing is found for a message that failed delivery five times. NHCX deleted it and reported it on your `/v1/error`. Start a new cycle with a new correlation id. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `request.initiated`. +- `401 Unauthorized` or [`NHCX-401`](../errors/nhcx-401.md): get a new session token and ask again. diff --git a/catalogue/nhcx/endpoints/task-on-submit.md b/catalogue/nhcx/endpoints/task-on-submit.md new file mode 100644 index 000000000..a856cd263 --- /dev/null +++ b/catalogue/nhcx/endpoints/task-on-submit.md @@ -0,0 +1,183 @@ +--- +id: nhcx.endpoint.task-on-submit +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/task/on_submit +summary: >- + Send an insurer's outcome on a reprocess or cancellation request back to the hospital + through the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: Reprocess, /v1/task/on_submit rows.' +- url: https://hcxsbx.abdm.gov.in/taskhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/taskhcxservice.json + hash: sha256:0418eca6478dece4d72c5a49a6547d50772511f7ffaf32f901f245591ba84656 + fetched: '2026-09-14' + note: 'API specification: taskhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/task/on_submit.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/task/on_submit. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1 Acceptance and Error scenario; page 2. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 10.4 workflow table; 10.5 Response Task resource. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.task-submit + - nhcx.endpoint.paymentnotice-request + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.task-submit + - nhcx.callback.task-on-submit + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1517 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.retries-and-expiry + - nhcx.concept.reprocess-and-cancel + - nhcx.concept.workflow-codes + flows: + - nhcx.flow.claim-reprocess + - nhcx.flow.preauth-cancel + fhir: + - nhcx.fhir.task + - nhcx.fhir.preauth-cancel + tests: + - nhcx.test.payer-uc-14 + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/task/on_submit + +## In plain words + +This closes a reprocess or cancellation the provider opened. As a payer, you send a sealed Task bundle to [NHCX](../../shared/glossary/nhcx.md). `Task.status` is `completed` and `Task.output` references a `ClaimResponse` carrying the outcome, in the same shape as an ordinary adjudication. + +You call it after you have received a [`/v1/task/submit`](task-submit.md) and decided it. + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md). +- The `/v1/task/submit` you are answering, received on [your registered address](../callbacks/task-submit.md), decrypted, and acknowledged with 202 within 30 seconds. +- That request's `x-hcx-correlation_id` and `x-hcx-sender_code`, stored. You echo the first and address the answer to the second. +- The encryption certificate of the provider, fetched with [`/fetch/certs`](fetch-certs.md). +- A Task bundle in [FHIR](../../shared/glossary/fhir.md), built as in [the Task bundle](../fhir/task.md), with `Task.status` `completed` and `Task.output` referencing the `ClaimResponse`. +- A handler for [`/v1/error`](../callbacks/error.md), where NHCX reports an answer it could not deliver. + +## What happens + +Your system, as the payer or a TPA acting for it, answers a request it received ([receiving the request](../callbacks/task-submit.md)) by calling NHCX on `/v1/task/on_submit`. NHCX answers 202 at once and delivers the same path to the registered address of the provider ([receiving `/v1/task/on_submit`](../callbacks/task-on-submit.md)). + +### 1. Seal the answer + +Swap the sender and recipient codes of the request. Echo its correlation id. Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md): + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "252", + "x-hcx-timestamp": "", + "x-hcx-status": "response.complete", + "x-hcx-ben-abha-id": "" +} +``` + +`x-hcx-workflow_id` names the outcome: `251` received, `252` approved, `253` rejected, `254` queried. The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/task/on_submit' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "type": "JWEPayload", + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Refusing a request + +To refuse the request at protocol level instead, send `"type": "ProtocolResponse"` on this path with `x-hcx-status` `response.error` and `x-hcx-error_details` holding `code`, `message` and `trace`. Keep clinical and business reasons inside the sealed payload. Only protocol errors go in the header. + +### 4. Retrying + +**Idempotency.** Echo the `x-hcx-correlation_id` of the request you are answering. A correlation id NHCX does not hold, or one it has already deleted, is refused with [`NHCX-1010`](../errors/nhcx-1010.md). Generate a new `x-hcx-api_call_id` for every call. `/v1/status` looks a message up by that value ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so never reuse one. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "task", + "protocol_status": "request.dispatched" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` matches the request you answered, and `api_call_id` matches the value you sealed. +- `result.entity_type` is `task`. +- `error.code` and `error.message` are empty. + +NHCX then delivers your answer to the provider. The recipient must answer each delivery with 202 and the acknowledgement body within 30 seconds. Otherwise NHCX retries up to five times, then deletes the request and reports it on the sender's [`/v1/error`](../callbacks/error.md). The step is done when you hold the 202 and no report for this correlation id arrives on your `/v1/error`. + +## When it goes wrong + +- [`NHCX-1010`](../errors/nhcx-1010.md): NHCX holds no request with that correlation id. You minted a new one instead of echoing it, or the request was deleted after failed deliveries. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `response.complete`, `response.partial` or `response.error`. +- [`PAYR-1517`](../errors/payr-1517.md): a refusal arrived as a `JWEPayload`. Protocol refusals travel as `ProtocolResponse`. +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): get a new session token and send again. +- A report arrives on your [`/v1/error`](../callbacks/error.md): the requester's address did not acknowledge five deliveries. The request is dead on that correlation id. diff --git a/catalogue/nhcx/endpoints/task-submit.md b/catalogue/nhcx/endpoints/task-submit.md new file mode 100644 index 000000000..15dc031f4 --- /dev/null +++ b/catalogue/nhcx/endpoints/task-submit.md @@ -0,0 +1,190 @@ +--- +id: nhcx.endpoint.task-submit +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v1/task/submit +summary: >- + Ask an insurer, through the claims exchange, to look again at a rejected or short-paid + claim, or to cancel a pre-authorisation you will not use. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet: Reprocess, /v1/task/submit rows.' +- url: https://hcxsbx.abdm.gov.in/taskhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/taskhcxservice.json + hash: sha256:0418eca6478dece4d72c5a49a6547d50772511f7ffaf32f901f245591ba84656 + fetched: '2026-09-14' + note: 'API specification: taskhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/task/submit.post.' +- url: https://hcxsbx.abdm.gov.in/images/bc1e7d077857fc0fa071.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip + hash: sha256:9d15daafa813d6d57e688fe800baa5a73d2540b8d0d12c6a1315f86a424817e4 + fetched: '2026-09-14' + note: AWS(Sandbox)-NHCX USECASE Postman Collection, row 17 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item /v1/task/submit. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Acceptance scenario. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: 'NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet: Scenarios, rows 9, 12 and 14.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 7 to 9, sections 22 and 23; page 4 Q12 and Q14. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 6, 7 and 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.task-on-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.status + callbacks: + - nhcx.callback.task-submit + - nhcx.callback.task-on-submit + - nhcx.callback.error + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1001 + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.four-message-legs + - nhcx.concept.reprocess-and-cancel + - nhcx.concept.workflow-codes + flows: + - nhcx.flow.claim-reprocess + - nhcx.flow.preauth-cancel + fhir: + - nhcx.fhir.task + - nhcx.fhir.preauth-cancel + tests: + - nhcx.test.provider-uc-12 + - nhcx.test.tc-cl-03 + sandbox: + - nhcx.sandbox.environments-and-base-urls + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.everything-returns-401 +--- + +# POST /v1/task/submit + +## In plain words + +A Task asks the payer to act on something that already exists. Your system, as the provider, sends a Task bundle to [NHCX](../../shared/glossary/nhcx.md). It asks the payer to reprocess a rejected or partly paid claim, or to cancel a pre-authorisation. `Task.code` says which: `reprocess` or `cancel`. The payer's outcome arrives later on your `/v1/task/on_submit`. + +A reprocess needs new justification and a supporting document attached. + +## Before you start + +- A session token that has not expired. See [the session token](../concepts/session-token.md) and [how to get one](session-token.md). +- Your own [participant code](../glossary/participant-code.md), with your callback address registered, reachable from NHCX and answering 202 within 30 seconds. See [callback URL rules](../sandbox/callback-url-requirements.md). +- The payer's participant code. Take it from `processingID` in the [`/participant/get/policies`](participant-get-policies.md) response, not from `PayerID`. +- The recipient's encryption certificate, fetched with [`/fetch/certs`](fetch-certs.md). You seal the message with its public key. +- A Task bundle in [FHIR](../../shared/glossary/fhir.md) built as in [the Task bundle](../fhir/task.md). It has `Task.status` `requested`, references the original claim or pre-authorisation, and carries the claim number. +- A handler for [`/v1/error`](../callbacks/error.md), so a request NHCX cannot deliver does not look like one still under review. +- A handler for [`/v1/task/on_submit`](../callbacks/task-on-submit.md). + +## What happens + +Your system, as the provider, calls NHCX on `/v1/task/submit`. NHCX checks the envelope, answers 202 at once, and forwards the same path to the payer's registered address ([receiving `/v1/task/submit`](../callbacks/task-submit.md)). The payer answers later on [`/v1/task/on_submit`](../callbacks/task-on-submit.md), which NHCX delivers to you. + +### 1. Seal the message + +Put these values in the [JWE](../glossary/jwe.md) [protected header](../glossary/protected-header.md) and encrypt the bundle with the recipient's public key. + +```json +{ + "alg": "RSA-OAEP-256", + "enc": "A256GCM", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-request_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "", + "x-hcx-timestamp": "", + "x-hcx-status": "request.initiated", + "x-hcx-ben-abha-id": "" +} +``` + +The `x-hcx-*` values ride inside the JWE [protected header](../glossary/protected-header.md), not as HTTP headers. [The protocol headers](../concepts/protocol-headers.md) explains each one, including the timestamp format. Take the reprocess or cancellation code for your scheme from [workflow codes](../concepts/workflow-codes.md). Give this call a new `x-hcx-correlation_id`, the same UUID as its `x-hcx-api_call_id`. Name the case inside the Task, not in the header. + +### 2. Send it + +```bash +curl --location --request POST 'https://apisbx.abdm.gov.in/hcx/v1/task/submit' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'bearer_auth: Bearer ' \ + --header 'Authorization: Bearer ' \ + --data-raw '{ + "payload": "" + }' +``` + +Send the token on both `bearer_auth` and `Authorization`, with the same value and the word `Bearer` in front. `` is your sealed message: five base64url parts joined by dots. See [the JWE envelope](../concepts/jwe-envelope.md). + +### 3. Retrying + +**Idempotency.** NHCX keys every conversation on `x-hcx-correlation_id`. An initiating request that reuses a correlation id NHCX already holds is refused with [`NHCX-1006`](../errors/nhcx-1006.md). So a blind retry is not safe. If your call timed out, ask [`/v1/status`](status.md) before you resend. `/v1/status` finds a message by its `x-hcx-api_call_id` ([`NHCX-1012`](../errors/nhcx-1012.md) when it cannot), so generate a new one for every call, a retry included. After a request fails for good, NHCX makes its correlation id inactive. Start a new cycle with a new correlation id. + +## How you know it worked + +You receive HTTP `202 Accepted` with this body: + +```json +{ + "timestamp": "
", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "task", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +- `correlation_id` and `api_call_id` match the values you sealed. +- `result.entity_type` is `task`. +- `result.protocol_status` is `request.queued` or `request.dispatched`. +- `error.code` and `error.message` are empty. + +The 202 is a receipt, not a decision. NHCX never returns a decision synchronously. The step is done when [`/v1/task/on_submit`](../callbacks/task-on-submit.md) reaches your callback address with the same `x-hcx-correlation_id`, and your handler has answered it 202 within 30 seconds. Its Task bundle has `Task.output` referencing a `ClaimResponse` that carries the outcome. + +## When it goes wrong + +- `401 Unauthorized`, or [`NHCX-401`](../errors/nhcx-401.md): the session token expired or lacks the `Bearer ` prefix. Get a new token and send again. See [every call returns 401](../troubleshooting/everything-returns-401.md). +- [`NHCX-1003`](../errors/nhcx-1003.md): the recipient code is not registered. A provider used `PayerID` instead of `processingID`. +- [`NHCX-1006`](../errors/nhcx-1006.md): the correlation id was used before. Start the cycle with a new one. +- [`NHCX-1011`](../errors/nhcx-1011.md): `x-hcx-status` is not `request.initiated`. +- You got 202 and nothing more arrives. The recipient may have failed to decrypt ([`PAYR-1001`](../errors/payr-1001.md)) or your callback is unreachable. See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). diff --git a/catalogue/nhcx/endpoints/update-validate.md b/catalogue/nhcx/endpoints/update-validate.md new file mode 100644 index 000000000..153dd5051 --- /dev/null +++ b/catalogue/nhcx/endpoints/update-validate.md @@ -0,0 +1,106 @@ +--- +id: nhcx.endpoint.update-validate +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: GET /update/validate +summary: >- + Confirm a production change to your certificate or bridge address with the transaction + id and the passcode sent to your registered mobile. +sources: +- url: https://hcxsbx.abdm.gov.in/images/293a43103f575b4e7f7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(PROD)_NHCX-OnBoarding APIs Postman Collection.zip + hash: sha256:b96963e2eead0fe3e718eb7dd2374f1a15f0dbb1aed7197a1ceae59cefbc7214 + fetched: '2026-09-14' + note: AWS(PROD)_NHCX-OnBoarding APIs Postman Collection, row 7 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Postman PROD_NHCX-OnBoarding APIs item /update/validate. +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 3, Step 4 Participant Updation confirmation. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./update/validate.get.' +- url: https://hcxsbx.abdm.gov.in/images/be2e25fede3bf711f783.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/PMJAY Hospital Migration to HMIS via NHCX.docx + hash: sha256:cf5c9bf1c402b214f65bbb7bd0822f3a76d8ccda9b69c7bf77ba131befef3bc6 + fetched: '2026-09-14' + note: PMJAY Hospital Migration to HMIS via NHCX, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. Section 3.4 Update Confirmation (Step 4). +- url: https://hcxsbx.abdm.gov.in/images/bc2efb078b98548f8e6b.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Sandbox.pdf + hash: sha256:cbd03baf428655f0305e2f60ca331f8b76700496b070c522cafcc95001710b3a + fetched: '2026-09-14' + note: Onboarding providers and payers in Sandbox, row 4 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2-3, API Definition - Update Participant. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 3.3 Certificate Fetch. +verified: + status: unverified +related: + flows: + - nhcx.flow.production-onboarding + - nhcx.flow.rotate-certificate + endpoints: + - nhcx.endpoint.v2-participant-update + - nhcx.endpoint.validate + - nhcx.endpoint.v2-update-cert + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.session-token + errors: + - nhcx.error.nhcx-401 + concepts: + - nhcx.concept.encryption-certificate +--- + +# GET /update/validate + +## In plain words + +This call confirms a production change to your [NHCX](../../shared/glossary/nhcx.md) registry record. [`/v2/participant/update`](v2-participant-update.md) stages a new certificate or bridge URL and sends a passcode to your registered mobile number. This call presents that passcode, and the change takes effect. + +It confirms updates only. To confirm a creation, call [`/validate`](validate.md). To replace only the certificate without a passcode, call [`/v2/update/cert`](v2-update-cert.md). + +## Before you start + +- Your participant creation is already confirmed with [`/validate`](validate.md). +- A `transactionid` from [`/v2/participant/update`](v2-participant-update.md), less than 24 hours old. +- The passcode for that transaction, from the registered mobile number. +- A current access token from the [session call](session-token.md). It goes in the `bearer_auth` header as `Bearer `, with `Bearer` and a space in front. + +## What happens + +Your system sends a GET with two query parameters. The registry checks the passcode against the update transaction and answers on the same connection. There is no request body and no callback. + +```bash +curl -G 'https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice/update/validate' \ + -H 'Accept: application/json' \ + -H 'bearer_auth: Bearer ' \ + --data-urlencode 'transactionId=' \ + --data-urlencode 'passcode=' +``` + +The query parameter is `transactionId`, with a capital I. + +This is the production address. In the sandbox, [`/participant/update`](participant-update.md) applies changes directly, with no confirmation step. + +**Idempotency.** Call it once per transaction. Each new update issues a new transaction id and passcode. If the pair has expired, call [`/v2/participant/update`](v2-participant-update.md) again and validate the new pair. + +## How you know it worked + +You receive HTTP 200. The staged certificate and bridge URL are now your live registry values. + +[`/fetch/certs`](fetch-certs.md) with your own participant code returns the new certificate. NHCX delivers your next inbound message to the new bridge URL. + +## When it goes wrong + +- **More than 24 hours have passed.** The pair has expired. Issue the update again with [`/v2/participant/update`](v2-participant-update.md). +- **The passcode belongs to an earlier update.** A later update replaced the pair. Use the passcode that arrived after the latest update call. +- **You lost the transaction id.** Issue the update again. +- **You called `/validate` by mistake.** That call confirms creation. Updates are confirmed here. +- **The old certificate is still served.** Counterparties cache certificates for up to 24 hours. Keep your old private key available until that window has passed. +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/endpoints/v2-participant-create.md b/catalogue/nhcx/endpoints/v2-participant-create.md new file mode 100644 index 000000000..1c41ce26d --- /dev/null +++ b/catalogue/nhcx/endpoints/v2-participant-create.md @@ -0,0 +1,146 @@ +--- +id: nhcx.endpoint.v2-participant-create +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v2/participant/create +summary: >- + Start production registration by linking your organisation to its external registry + record, which sends a passcode to your registered mobile. +sources: +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Pages 1-2 Step 1 Participant Creation; Page 4 enums. +- url: https://hcxsbx.abdm.gov.in/images/293a43103f575b4e7f7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(PROD)_NHCX-OnBoarding APIs Postman Collection.zip + hash: sha256:b96963e2eead0fe3e718eb7dd2374f1a15f0dbb1aed7197a1ceae59cefbc7214 + fetched: '2026-09-14' + note: AWS(PROD)_NHCX-OnBoarding APIs Postman Collection, row 7 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Postman PROD_NHCX-OnBoarding APIs item /v2/participant/create. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, item 5 In PROD when passing the registry ID. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 3 Q6 and Q9. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v2/participant/create.post; schema ParticipantCreateV2Resp.' +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. Page 9 Integrator Journey. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-registry + - nhcx.concept.participant-code + - nhcx.concept.participant-roles + flows: + - nhcx.flow.production-onboarding + endpoints: + - nhcx.endpoint.validate + - nhcx.endpoint.participant-create + - nhcx.endpoint.v2-participant-update + - nhcx.endpoint.session-token + errors: + - nhcx.error.nhcx-401 + sandbox: + - nhcx.sandbox.going-live +--- + +# POST /v2/participant/create + +## In plain words + +This call starts production registration in the [NHCX](../../shared/glossary/nhcx.md) participant registry. It links your organisation to its record in an external registry. It then sends a passcode to the mobile number on that record. + +You confirm the registration with [`/validate`](validate.md). Your [participant code](../glossary/participant-code.md) is confirmed only after that call succeeds. + +In production, use this call. In the sandbox, use [`/participant/create`](participant-create.md). + +## Before you start + +- Sandbox exit is complete and your production client id carries your role. See [going live](../sandbox/going-live.md). +- A current production access token from the [session call](session-token.md). +- Your registry id. A [provider](../glossary/provider.md) sends its [HFR](../../shared/glossary/hfr.md) ID. A [payer](../glossary/payer.md) or [TPA](../glossary/tpa.md) sends its [IRDAI](../glossary/irdai.md) registry ID without leading zeros: `0123` goes as `123`. +- The mobile number already on record. For a provider it must match the HFR record. For a payer it must match the NHCX payer details. +- The person who holds that phone, ready to read you the passcode within 24 hours. + +## What happens + +1. Your system posts the registry link to the production participant service. +2. The registry validates the registry type, the role and the mobile number. +3. It answers on the same connection with your participant id and a `transactionid`. A passcode goes to the registered mobile number. +4. You call [`/validate`](validate.md) with the `transactionid` and the passcode within 24 hours. + +```bash +curl -X POST 'https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice/v2/participant/create' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "registrytype": "", + "registryid": "", + "role": [""], + "endpoint_url": "", + "mobilenumber": "", + "email": "" + }' +``` + +Send all three headers on every participant service call: `Accept`, `Content-Type` and `bearer_auth`. The token header is `bearer_auth`, not `Authorization`. + +| Field | What to send | +|---|---| +| `registrytype` | HFR `10001`, NIN `10002`, ROHINI `10003` or PAYER `10004`. Providers and EUAs use `10001`. Payers and TPAs use `10004`. | +| `registryid` | HFR ID for a provider. IRDAI ID, without leading zeros, for a payer or TPA. Client id for an [EUA](../../shared/glossary/eua.md). | +| `role` | An array of role codes: PROVIDER `10001`, PAYER `10002`, AGENCY_TPA `10003`, AGENCY_REGULATOR `10004`, RESEARCH `10005`, MEMBER_ISNP `10006`, AGENCY_SPONSOR `10007`, HIE_HIO_HCX `10008`, EUA `10009`. | +| `endpoint_url` | Your bridge URL. | +| `mobilenumber` | The mobile number on record. | +| `email` | Your registered email. | + +The response body has this shape: + +```json +{ + "participantid": "", + "facilityname": "", + "facilitycontact": "", + "facilityemail": "", + "transactionid": "", + "error": { + "code": null, + "message": null, + "trace": null + } +} +``` + +**Idempotency.** Each call generates a new `transactionid` and sends a new passcode. A passcode works only with its own transaction id. Confirm the pair from the call you intend to keep. If you lose the transaction id, call create again and use the new pair. + +## How you know it worked + +You receive HTTP 200 with `participantid` and `transactionid` filled in and `error.code` null. + +A passcode arrives on the registered mobile number. You now hold the transaction id and the passcode, and less than 24 hours have passed since the call. + +The step is complete when [`/validate`](validate.md) returns 200 for that pair. + +## When it goes wrong + +- **The mobile number does not match.** The number must match the HFR record for a provider, or the NHCX payer details for a payer. Send the number on record, or correct the record first. +- **The IRDAI ID has leading zeros.** Strip them: `0123` goes as `123`. +- **Wrong role or registry code.** A wrong mapping leads to rejected requests or misrouted transactions later. `10001` is PROVIDER as a role and HFR as a registry type. +- **The transaction id is lost, or 24 hours have passed.** Call create again. Validate the new pair. +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/endpoints/v2-participant-delink-abha-policy.md b/catalogue/nhcx/endpoints/v2-participant-delink-abha-policy.md new file mode 100644 index 000000000..3fec43c40 --- /dev/null +++ b/catalogue/nhcx/endpoints/v2-participant-delink-abha-policy.md @@ -0,0 +1,100 @@ +--- +id: nhcx.endpoint.v2-participant-delink-abha-policy +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /V2/participant/delink/abha/policy +summary: >- + The second path for removing products from a beneficiary's policy link; it takes + the same body as the main de-link call. +sources: +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./V2/participant/delink/abha/policy.post.' +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, Validation for De-Linking. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Use case 3 De-Link ABHA from Policy. +- url: https://hcxsbx.abdm.gov.in/images/b885e59891fedc7e725c.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection.zip + hash: sha256:2d082f244ee41d137a62af82380dcd2d5db9ebbab66824fd54a23c506d4d9a7f + fetched: '2026-09-14' + note: AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection, row 16 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Postman SANDBOX-Participant_APIs item Delink Abha. +verified: + status: unverified +related: + concepts: + - nhcx.concept.policy-linking + flows: + - nhcx.flow.policy-link-and-delink + endpoints: + - nhcx.endpoint.participant-delink-abha-policy + - nhcx.endpoint.v2-participant-link-abha-policy + - nhcx.endpoint.v2-participant-get-policies + errors: + - nhcx.error.nhcx-401 +--- + +# POST /V2/participant/delink/abha/policy + +## In plain words + +This path removes products from a beneficiary's policy link, like [`/participant/delink/abha/policy`](participant-delink-abha-policy.md). It takes the same body and returns the same response. + +Call [`/participant/delink/abha/policy`](participant-delink-abha-policy.md), the path in the payer [sandbox exit](../glossary/sandbox-exit.md). If you use the V2 paths, pair this with [`/V2/participant/link/abha/policy`](v2-participant-link-abha-policy.md) and [`/V2/participant/get/policies`](v2-participant-get-policies.md). + +## Before you start + +- The same as for [`/participant/delink/abha/policy`](participant-delink-abha-policy.md): the products are linked, you are the `payerid` or `processingid` participant, and your token comes from that participant's client id. + +## What happens + +Your system posts the products to remove. NHCX checks the client id in your token against the linking participants, removes the products and answers on the same connection. No callback follows. + +| Environment | Participant service base URL | +|---|---| +| Sandbox | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | +| Production | `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` | + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/V2/participant/delink/abha/policy' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "requestid": "", + "payerid": "", + "memberid": "", + "processingid": "", + "policies": [ + { + "productid": "", + "productname": "" + } + ] + }' +``` + +The path starts with a capital `V2`. The fields are described on [`/participant/delink/abha/policy`](participant-delink-abha-policy.md). + +**Idempotency.** Send a new `requestid` on every call. A repeat after success returns `There is no policies with requested details`. + +## How you know it worked + +You receive HTTP 200. [`/V2/participant/get/policies`](v2-participant-get-policies.md) no longer returns the removed products for that payer. + +## When it goes wrong + +- **404 on the path.** The path was written with a lower-case `v2`. Write `/V2/participant/delink/abha/policy`. +- **The de-link is refused with an error message.** The token does not belong to the `payerid` or `processingid` participant. +- **`There is no policies with requested details`.** A listed product is not linked for this `payerid` and `memberid`. +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/endpoints/v2-participant-get-policies.md b/catalogue/nhcx/endpoints/v2-participant-get-policies.md new file mode 100644 index 000000000..e313622eb --- /dev/null +++ b/catalogue/nhcx/endpoints/v2-participant-get-policies.md @@ -0,0 +1,110 @@ +--- +id: nhcx.endpoint.v2-participant-get-policies +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /V2/participant/get/policies +summary: >- + The second path for looking up a beneficiary's linked policies; it takes the same + body as the main lookup. +sources: +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./V2/participant/get/policies.post.' +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, item 7 Providers pointing to the PayerID. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 5.6.2 Supported Identifier Types. +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Use case 2 Get Policy. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Use case 2 Get Policy. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, For Sandbox / For Production envBaseUrl. +verified: + status: unverified +related: + concepts: + - nhcx.concept.policy-linking + endpoints: + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.v2-participant-link-abha-policy + - nhcx.endpoint.v2-participant-delink-abha-policy + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 +--- + +# POST /V2/participant/get/policies + +## In plain words + +This path returns the policies linked to a beneficiary, like [`/participant/get/policies`](participant-get-policies.md). It takes the same body and returns the same response. + +Call [`/participant/get/policies`](participant-get-policies.md), the path in the provider and payer [sandbox exit](../glossary/sandbox-exit.md). If you use the V2 paths, pair this with [`/V2/participant/link/abha/policy`](v2-participant-link-abha-policy.md) and [`/V2/participant/delink/abha/policy`](v2-participant-delink-abha-policy.md). + +## Before you start + +- A current access token from the [session call](session-token.md). It goes in the `bearer_auth` header as `Bearer `, with `Bearer` and a space in front. +- A payer or TPA has linked the beneficiary. +- An identifier for the beneficiary: an [ABHA number](../../shared/glossary/abha-number.md), a member id or a mobile number. + +## What happens + +Your system posts one identifier. The registry answers on the same connection with the linked policies. Nothing changes and no callback follows. + +| Environment | Participant service base URL | +|---|---| +| Sandbox | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | +| Production | `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` | + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/V2/participant/get/policies' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "identifiertype": "", + "identifiervalue": "" + }' +``` + +The path starts with a capital `V2`. + +| Field | What to send | +|---|---| +| `identifiertype` | `AbhaNumber`, `MemberId` or `MobileNo`. | +| `identifiervalue` | The value of that identifier. Send an ABHA number as 14 digits without hyphens. | + +Read the processing id from each returned policy. It goes in `x-hcx-recipient_code`, not the payer id. + +**Idempotency.** The call only reads. Repeating it is safe. + +## How you know it worked + +You receive HTTP 200 with at least one linked policy. You hold a processing participant code, a member id and a product for the patient. + +## When it goes wrong + +- **404 on the path.** The path was written with a lower-case `v2`. Write `/V2/participant/get/policies`. +- **Messages to the payer fail with a receiver error.** The payer id went into `x-hcx-recipient_code`. Use the processing id. See [NHCX-1003](../errors/nhcx-1003.md). +- **Nothing is returned for an ABHA number.** Send 14 digits without hyphens, then try `MemberId` and `MobileNo`. +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/endpoints/v2-participant-link-abha-policy.md b/catalogue/nhcx/endpoints/v2-participant-link-abha-policy.md new file mode 100644 index 000000000..4408b7b72 --- /dev/null +++ b/catalogue/nhcx/endpoints/v2-participant-link-abha-policy.md @@ -0,0 +1,101 @@ +--- +id: nhcx.endpoint.v2-participant-link-abha-policy +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /V2/participant/link/abha/policy +summary: >- + The second path for linking a beneficiary to the products they hold; it takes + the same body as the main link call. +sources: +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./V2/participant/link/abha/policy.post.' +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, item 10 Policy Linking/Delinking auth restriction. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Use case 1 Link ABHA with Policy. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, Policy Linking Process. +verified: + status: unverified +related: + concepts: + - nhcx.concept.policy-linking + flows: + - nhcx.flow.policy-link-and-delink + endpoints: + - nhcx.endpoint.participant-link-abha-policy + - nhcx.endpoint.v2-participant-get-policies + - nhcx.endpoint.v2-participant-delink-abha-policy + errors: + - nhcx.error.nhcx-401 +--- + +# POST /V2/participant/link/abha/policy + +## In plain words + +This path links a beneficiary's [ABHA number](../../shared/glossary/abha-number.md) and member id to the products they hold, like [`/participant/link/abha/policy`](participant-link-abha-policy.md). It takes the same body and returns the same response. + +Call [`/participant/link/abha/policy`](participant-link-abha-policy.md), the path in the payer [sandbox exit](../glossary/sandbox-exit.md). If you use this V2 path, pair it with [`/V2/participant/get/policies`](v2-participant-get-policies.md) and [`/V2/participant/delink/abha/policy`](v2-participant-delink-abha-policy.md). + +## Before you start + +- The same as for [`/participant/link/abha/policy`](participant-link-abha-policy.md): registered participant codes for the insurer and any TPA, and a token minted with the client id used when that participant was created. + +## What happens + +Your system posts the link to the participant service. The registry records it and answers on the same connection. No callback follows. + +| Environment | Participant service base URL | +|---|---| +| Sandbox | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | +| Production | `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` | + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/V2/participant/link/abha/policy' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "requestid": "", + "abhanumber": "", + "mobilenumber": "", + "memberid": "", + "payerid": "", + "processingid": "", + "policies": [ + { + "productid": "", + "productname": "" + } + ] + }' +``` + +The path starts with a capital `V2`. The fields are described on [`/participant/link/abha/policy`](participant-link-abha-policy.md). The response is JSON with a `result` string. + +**Idempotency.** Send a new `requestid` on every call. Before you retry a link that timed out, check [`/V2/participant/get/policies`](v2-participant-get-policies.md) for the products. + +## How you know it worked + +You receive HTTP 200 with a `result` string. [`/V2/participant/get/policies`](v2-participant-get-policies.md) with the same ABHA number returns the products you linked. + +## When it goes wrong + +- **404 on the path.** The path was written with a lower-case `v2`. Write `/V2/participant/link/abha/policy`. +- **The link is refused although the token is valid.** The token does not belong to the `payerid` or `processingid` participant. +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/endpoints/v2-participant-update.md b/catalogue/nhcx/endpoints/v2-participant-update.md new file mode 100644 index 000000000..099f4ddb9 --- /dev/null +++ b/catalogue/nhcx/endpoints/v2-participant-update.md @@ -0,0 +1,120 @@ +--- +id: nhcx.endpoint.v2-participant-update +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v2/participant/update +summary: >- + Stage a production change to your encryption certificate or bridge address, to + be confirmed with a passcode. +sources: +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Pages 2-3, Step 3 Participant Updation and Step 4. +- url: https://hcxsbx.abdm.gov.in/images/293a43103f575b4e7f7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(PROD)_NHCX-OnBoarding APIs Postman Collection.zip + hash: sha256:b96963e2eead0fe3e718eb7dd2374f1a15f0dbb1aed7197a1ceae59cefbc7214 + fetched: '2026-09-14' + note: AWS(PROD)_NHCX-OnBoarding APIs Postman Collection, row 7 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Postman PROD_NHCX-OnBoarding APIs item /v2/participant/update. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v2/participant/update.post; schemas ParticipantCertUpdateRequest, ParticipantCertUpdateResp.' +- url: https://hcxsbx.abdm.gov.in/images/be2e25fede3bf711f783.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/PMJAY Hospital Migration to HMIS via NHCX.docx + hash: sha256:cf5c9bf1c402b214f65bbb7bd0822f3a76d8ccda9b69c7bf77ba131befef3bc6 + fetched: '2026-09-14' + note: PMJAY Hospital Migration to HMIS via NHCX, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. Section 3.3 Participant Update (Step 3). +- url: https://hcxsbx.abdm.gov.in/images/ec361a6c3e90e766d227.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Steps to generate encryption Certificate.pdf + hash: sha256:94605e935f05ebb49e24dee50787cb4f3f1c401983a9616a5aaabdbc302f664b + fetched: '2026-09-14' + note: Steps to generate encryption Certificate, row 20 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 3, Step 4 Base64 Encoding. +verified: + status: unverified +related: + concepts: + - nhcx.concept.encryption-certificate + - nhcx.concept.participant-registry + flows: + - nhcx.flow.production-onboarding + - nhcx.flow.rotate-certificate + endpoints: + - nhcx.endpoint.update-validate + - nhcx.endpoint.validate + - nhcx.endpoint.v2-update-cert + - nhcx.endpoint.participant-update + - nhcx.endpoint.session-token + errors: + - nhcx.error.nhcx-401 + troubleshooting: + - nhcx.troubleshooting.recipient-cannot-decrypt +--- + +# POST /v2/participant/update + +## In plain words + +This call stages a change to your production record in the [NHCX](../../shared/glossary/nhcx.md) registry. It carries your public encryption certificate, your bridge URL, or both. The registry sends a passcode to your registered mobile number, and the change takes effect when you confirm it with [`/update/validate`](update-validate.md). + +In production, use this call for your first certificate and bridge URL after creation, and for later changes. For a certificate-only change without a passcode, call [`/v2/update/cert`](v2-update-cert.md). In the sandbox, use [`/participant/update`](participant-update.md). + +## Before you start + +- Your participant code is registered and its creation is confirmed with [`/validate`](validate.md). +- Your certificate, Base64 encoded. See [generate and register a certificate](../flows/generate-and-register-certificate.md). +- The matching private key is already deployed where you decrypt inbound messages. +- The person who holds the registered phone, ready to read you the passcode within 24 hours. +- A current access token from the [session call](session-token.md). It goes in the `bearer_auth` header as `Bearer `, with `Bearer` and a space in front. + +## What happens + +1. Your system posts the change to the production participant service. +2. The registry answers on the same connection with a `transactionid` and sends a passcode to the registered mobile number. +3. You call [`/update/validate`](update-validate.md) with both within 24 hours. The change goes live then. + +```bash +curl -X POST 'https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice/v2/participant/update' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "participantcode": "", + "encryptioncert": "", + "endpointurl": "" + }' +``` + +Send all three headers on every participant service call: `Accept`, `Content-Type` and `bearer_auth`. The token header is `bearer_auth`, not `Authorization`. + +The field names here have no underscores: `participantcode`, `encryptioncert`, `endpointurl`. + +The response body has this shape: + +```json +{ + "participant_code": "", + "status": "", + "transactionid": "" +} +``` + +**Idempotency.** Each call issues a new `transactionid` and a new passcode. A passcode works only with its own transaction id. If you lose the transaction id, issue the update again. + +## How you know it worked + +You receive HTTP 200 with your `participant_code` and a `transactionid`. A passcode arrives on the registered mobile number. + +The change is live only when [`/update/validate`](update-validate.md) returns 200 for that pair. Then [`/fetch/certs`](fetch-certs.md) with your own code returns the new certificate. + +## When it goes wrong + +- **The participant code is refused.** Creation is not yet confirmed. Call [`/validate`](validate.md) first. +- **The certificate is refused.** It went as raw PEM. Base64 encode the whole PEM text. +- **You skipped `/update/validate`.** The old certificate and bridge URL stay live. Validate the pair. +- **Inbound messages stop decrypting after the change.** The new private key was not deployed first. See [recipient cannot decrypt](../troubleshooting/recipient-cannot-decrypt.md). +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/endpoints/v2-update-cert.md b/catalogue/nhcx/endpoints/v2-update-cert.md new file mode 100644 index 000000000..4e5270f3b --- /dev/null +++ b/catalogue/nhcx/endpoints/v2-update-cert.md @@ -0,0 +1,99 @@ +--- +id: nhcx.endpoint.v2-update-cert +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: POST /v2/update/cert +summary: >- + Replace your production encryption certificate in the registry without a passcode + step. +sources: +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 4, Participant Certificate Updation. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v2/update/cert.post; schema UpdateCertV2.' +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 3.3 Certificate Fetch. +- url: https://hcxsbx.abdm.gov.in/images/ec361a6c3e90e766d227.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Steps to generate encryption Certificate.pdf + hash: sha256:94605e935f05ebb49e24dee50787cb4f3f1c401983a9616a5aaabdbc302f664b + fetched: '2026-09-14' + note: Steps to generate encryption Certificate, row 20 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 3, Step 4 Base64 Encoding. +verified: + status: unverified +related: + concepts: + - nhcx.concept.encryption-certificate + flows: + - nhcx.flow.rotate-certificate + - nhcx.flow.generate-and-register-certificate + endpoints: + - nhcx.endpoint.v2-participant-update + - nhcx.endpoint.participant-update + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.session-token + errors: + - nhcx.error.nhcx-401 + troubleshooting: + - nhcx.troubleshooting.recipient-cannot-decrypt +--- + +# POST /v2/update/cert + +## In plain words + +This call replaces the public encryption certificate on your production record in the [NHCX](../../shared/glossary/nhcx.md) registry. It needs no passcode. Only the certificate changes; your bridge URL stays as it is. + +To change the bridge URL too, call [`/v2/participant/update`](v2-participant-update.md) and confirm with [`/update/validate`](update-validate.md). In the sandbox, change your certificate with [`/participant/update`](participant-update.md). + +## Before you start + +- Your production [participant code](../glossary/participant-code.md). +- The new certificate, Base64 encoded. See [generate and register a certificate](../flows/generate-and-register-certificate.md). +- The matching private key is already deployed where you decrypt inbound messages. +- A current access token from the [session call](session-token.md). It goes in the `bearer_auth` header as `Bearer `, with `Bearer` and a space in front. + +## What happens + +Your system posts the participant id and the new certificate. The registry replaces the certificate and answers on the same connection. No callback follows. + +```bash +curl -X POST 'https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice/v2/update/cert' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "participantId": "", + "certificate": "" + }' +``` + +Send all three headers on every participant service call: `Accept`, `Content-Type` and `bearer_auth`. The token header is `bearer_auth`, not `Authorization`. + +Both fields are mandatory. Note the casing: `participantId` with a capital I, and `certificate`. + +**Idempotency.** Each call writes the certificate you send. Before you retry a call that timed out, fetch your own certificate with [`/fetch/certs`](fetch-certs.md) and compare. + +## How you know it worked + +You receive HTTP 200. [`/fetch/certs`](fetch-certs.md) with your own participant code returns the new certificate. + +Counterparties cache certificates for up to 24 hours. Keep the old private key available for that long, so messages sealed with the old certificate still open. + +## When it goes wrong + +- **The certificate is refused.** It went as raw PEM. Base64 encode the whole PEM text. +- **A field is refused.** The body used `participant_code`, `participantcode` or `encryptioncert`. This call takes `participantId` and `certificate`. +- **Inbound messages stop decrypting.** The new certificate went live before its private key. Deploy the key first. See [recipient cannot decrypt](../troubleshooting/recipient-cannot-decrypt.md). +- **The bridge URL did not change.** This call changes only the certificate. Use [`/v2/participant/update`](v2-participant-update.md). +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/endpoints/validate.md b/catalogue/nhcx/endpoints/validate.md new file mode 100644 index 000000000..b0e246345 --- /dev/null +++ b/catalogue/nhcx/endpoints/validate.md @@ -0,0 +1,97 @@ +--- +id: nhcx.endpoint.validate +type: endpoint +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: GET /validate +summary: >- + Confirm a production participant creation with the transaction id and the passcode + sent to your registered mobile. +sources: +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 2, Step 2 Participant Creation confirmation; Page 3 notes. +- url: https://hcxsbx.abdm.gov.in/images/293a43103f575b4e7f7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(PROD)_NHCX-OnBoarding APIs Postman Collection.zip + hash: sha256:b96963e2eead0fe3e718eb7dd2374f1a15f0dbb1aed7197a1ceae59cefbc7214 + fetched: '2026-09-14' + note: AWS(PROD)_NHCX-OnBoarding APIs Postman Collection, row 7 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Postman PROD_NHCX-OnBoarding APIs item /validate. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./validate.get.' +- url: https://hcxsbx.abdm.gov.in/images/be2e25fede3bf711f783.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/PMJAY Hospital Migration to HMIS via NHCX.docx + hash: sha256:cf5c9bf1c402b214f65bbb7bd0822f3a76d8ccda9b69c7bf77ba131befef3bc6 + fetched: '2026-09-14' + note: PMJAY Hospital Migration to HMIS via NHCX, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. Section 3.2 Participant Confirmation (Step 2). +- url: https://hcxsbx.abdm.gov.in/images/bc2efb078b98548f8e6b.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Sandbox.pdf + hash: sha256:cbd03baf428655f0305e2f60ca331f8b76700496b070c522cafcc95001710b3a + fetched: '2026-09-14' + note: Onboarding providers and payers in Sandbox, row 4 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Page 1, API Definition - Create Participant. +verified: + status: unverified +related: + flows: + - nhcx.flow.production-onboarding + endpoints: + - nhcx.endpoint.v2-participant-create + - nhcx.endpoint.update-validate + - nhcx.endpoint.v2-participant-update + - nhcx.endpoint.session-token + errors: + - nhcx.error.nhcx-401 + concepts: + - nhcx.concept.participant-registry +--- + +# GET /validate + +## In plain words + +This call confirms a production participant creation in the [NHCX](../../shared/glossary/nhcx.md) registry. You send the `transactionid` from [`/v2/participant/create`](v2-participant-create.md) and the passcode sent to your registered mobile number. Until it succeeds, your [participant code](../glossary/participant-code.md) is not confirmed. + +It confirms creation only. To confirm an update, call [`/update/validate`](update-validate.md). + +## Before you start + +- A `transactionid` from [`/v2/participant/create`](v2-participant-create.md), less than 24 hours old. +- The passcode for that transaction, from the registered mobile number. A passcode works only with its own transaction id. +- A current access token from the [session call](session-token.md). It goes in the `bearer_auth` header as `Bearer `, with `Bearer` and a space in front. + +## What happens + +Your system sends a GET with two query parameters. The registry checks the passcode against the transaction and answers on the same connection. There is no request body and no callback. + +```bash +curl -G 'https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice/validate' \ + -H 'Accept: application/json' \ + -H 'bearer_auth: Bearer ' \ + --data-urlencode 'transactionId=' \ + --data-urlencode 'passcode=' +``` + +The query parameter is `transactionId`, with a capital I. The create response spells the field `transactionid`. + +This is the production address. In the sandbox, [`/participant/create`](participant-create.md) returns your participant code directly, with no confirmation step. + +**Idempotency.** Call it once per transaction. If it fails, or the pair is older than 24 hours, call [`/v2/participant/create`](v2-participant-create.md) again and validate the new pair. + +## How you know it worked + +You receive HTTP 200. Your participant code is now confirmed. + +[`/v2/participant/update`](v2-participant-update.md) now accepts that code for your certificate and bridge URL. Before confirmation it refuses the code. + +## When it goes wrong + +- **More than 24 hours have passed.** The transaction id and passcode have expired. Start again from [`/v2/participant/create`](v2-participant-create.md). +- **The passcode belongs to another transaction.** Create was called again, so a new pair was issued. Use the passcode that arrived after the latest create, with that call's transaction id. +- **You lost the transaction id.** Call create again and validate the new pair. +- **You called `/update/validate` by mistake.** That call confirms updates. Creation is confirmed here. +- **401 Unauthorized.** The token is missing, has expired, or went out without the `Bearer ` prefix. Mint a new token, then retry the call once. See [NHCX-401](../errors/nhcx-401.md) and [every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/errors/err-pyr-clm-007.md b/catalogue/nhcx/errors/err-pyr-clm-007.md new file mode 100644 index 000000000..7d22f0236 --- /dev/null +++ b/catalogue/nhcx/errors/err-pyr-clm-007.md @@ -0,0 +1,73 @@ +--- +id: nhcx.error.err-pyr-clm-007 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'ERR-PYR-CLM-007: no preauthorisation or claim exists for the claim''s case + number' +summary: >- + The national scheme's reference payer found no earlier preauthorisation or claim + under the case number on your claim, so raise the claim under the preauthorisation's + case number. +sources: +- file: catalogue/openapi/.raw/nhcx-package-2026-09-15/nhcx-error.yaml + hash: sha256:d24ac927ed4dd722e60d7bd1d6fed15de370cc29f750d68999ee56fac93c941b + note: Recorded from a sandbox run. On none of the NHA error sheets. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.claim-submit + - nhcx.flow.preauth-submit + - nhcx.flow.pmjay-patient-to-cashless + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + errors: + - nhcx.error.payr-1302 +--- + +# ERR-PYR-CLM-007: no preauthorisation or claim exists for the claim's case number + +## In plain words + +The [PMJAY](../glossary/pmjay.md) payer refused your claim because it found no preauthorisation or claim under the case number you sent. + +It returns this code when a claim carries a case number of its own instead of the preauthorisation's. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +The code sits outside the PAYR- ranges. Match it by its full text: `No prior preauthorization or claim record found for case number`. + +## What happens + +The PMJAY payer raises this code when: + +- The claim uses a new case number instead of the one the preauthorisation was raised under. +- The case number has a typo. +- No preauthorisation was raised for the case. + +The case number travels as an identifier of the parent resource, the Claim. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +1. Raise the claim under the case number the preauthorisation used. Carry it in the Claim resource's identifier. +2. Keep the case number with the case in your system from preauthorisation onwards. +3. If no preauthorisation exists, submit one first. See [Submit a preauthorisation](../flows/preauth-submit.md). +4. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/nhcx-1001.md b/catalogue/nhcx/errors/nhcx-1001.md new file mode 100644 index 000000000..dff1bca3a --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1001.md @@ -0,0 +1,82 @@ +--- +id: nhcx.error.nhcx-1001 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1001: the recipient''s system is not reachable' +summary: >- + The exchange could not deliver your message because the recipient's endpoint did + not answer, so send the request again once the recipient is reachable. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.retries-and-expiry + - nhcx.concept.synchronous-acknowledgement + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.status-check + callbacks: + - nhcx.callback.error + errors: + - nhcx.error.nhcx-1006 + sandbox: + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback +--- + +# NHCX-1001: the recipient's system is not reachable + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) accepted your message but could not deliver it. The recipient's registered endpoint did not answer. + +This is a transport failure. Nothing in your content caused it. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +When a delivery fails, the exchange retries the same request five times. After the fifth failure it deletes the request and retires its correlation id. The report then arrives on your `/v1/error`. + +## What happens + +The exchange raises this code when: + +- The recipient's registered endpoint is down or refuses the connection. +- The recipient's endpoint does not answer within 30 seconds. +- The recipient's registered endpoint address cannot be reached from the exchange. + +## How you know it worked + +You send the request again with a fresh `x-hcx-correlation_id`. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. + +No report for the new correlation id arrives on your `/v1/error`. The recipient's answer arrives on the `on_` path paired with your request. + +## When it goes wrong + +### If you sent the request + +1. Mark the case as undelivered. The original request is dead and no answer will come for it. +2. Once the recipient is reachable, send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). +3. If the failures continue, contact the recipient, or NHCX support. See [support contacts](../sandbox/support-contacts.md). + +### If you are the recipient + +1. Check that your registered endpoint is reachable from outside your network over HTTPS. See [callback URL requirements](../sandbox/callback-url-requirements.md). +2. Answer every delivery with HTTP 202 within 30 seconds, then process it. See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). diff --git a/catalogue/nhcx/errors/nhcx-1002.md b/catalogue/nhcx/errors/nhcx-1002.md new file mode 100644 index 000000000..19b9067fe --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1002.md @@ -0,0 +1,71 @@ +--- +id: nhcx.error.nhcx-1002 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1002: the sender is not a registered participant' +summary: >- + The exchange does not know the sender named on your message, so register as a + participant or correct the sender code before sending again. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.participant-registry + - nhcx.concept.participant-code + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.sandbox-onboarding + - nhcx.flow.production-onboarding + callbacks: + - nhcx.callback.error + endpoints: + - nhcx.endpoint.participant-search +--- + +# NHCX-1002: the sender is not a registered participant + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) does not recognise the sender of your message. Your organisation is not registered as a participant, or the sender code on the message is wrong. + +Nothing was forwarded. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +The exchange checks the sender on your envelope before it forwards anything. + +## What happens + +The exchange raises this code when: + +- Your organisation has not completed participant registration in the environment you are calling. +- `x-hcx-sender_code` in the protected header is not your [participant code](../glossary/participant-code.md). A typo, or a code from the other environment, produces this. + +## How you know it worked + +Send the corrected request. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. `result.protocol_status` is `request.queued` or `request.dispatched`. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. The recipient's answer arrives later on the `on_` path paired with your request. + +## When it goes wrong + +1. Register your organisation as a participant. See [Onboard as a participant in the NHCX sandbox](../flows/sandbox-onboarding.md) or [Onboard as a participant in production](../flows/production-onboarding.md). +2. Set `x-hcx-sender_code` to the participant code the registry issued you. +3. Confirm the code with [POST /participant/search](../endpoints/participant-search.md). +4. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/nhcx-1003.md b/catalogue/nhcx/errors/nhcx-1003.md new file mode 100644 index 000000000..f81534d89 --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1003.md @@ -0,0 +1,74 @@ +--- +id: nhcx.error.nhcx-1003 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1003: the recipient is not a registered participant' +summary: >- + The exchange does not know the recipient your message is addressed to, so correct + the recipient code before sending again. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.participant-registry + - nhcx.concept.participant-code + - nhcx.concept.policy-linking + flows: + - nhcx.flow.send-a-sealed-request + callbacks: + - nhcx.callback.error + endpoints: + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.v2-participant-get-policies + - nhcx.endpoint.participant-search + errors: + - nhcx.error.nhcx-1004 +--- + +# NHCX-1003: the recipient is not a registered participant + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) does not recognise the recipient your message is addressed to. The recipient code is wrong, or that organisation is not registered. + +Nothing was forwarded. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +The exchange checks the recipient on your envelope before it forwards anything. + +## What happens + +The exchange raises this code when: + +- `x-hcx-recipient_code` matches no participant in the registry. +- As a provider, you used `PayerID` from the policy lookup instead of `processingID`. The processing id is the recipient code. +- The code belongs to the other environment. + +## How you know it worked + +Send the corrected request. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. `result.protocol_status` is `request.queued` or `request.dispatched`. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. The recipient's answer arrives later on the `on_` path paired with your request. + +## When it goes wrong + +1. Take the recipient code from `processingID` in the policy lookup, not from `PayerID`. See [POST /participant/get/policies](../endpoints/participant-get-policies.md). +2. Confirm the code with [POST /participant/search](../endpoints/participant-search.md). +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/nhcx-1004.md b/catalogue/nhcx/errors/nhcx-1004.md new file mode 100644 index 000000000..afaad0add --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1004.md @@ -0,0 +1,72 @@ +--- +id: nhcx.error.nhcx-1004 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1004: no recipient is registered for the scheme you asked for' +summary: >- + The exchange found no recipient registered for the scheme on your message, so + take the recipient code from the beneficiary's policy and send again. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.participant-registry + - nhcx.concept.policy-linking + flows: + - nhcx.flow.send-a-sealed-request + callbacks: + - nhcx.callback.error + endpoints: + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.v2-participant-get-policies + errors: + - nhcx.error.nhcx-1003 +--- + +# NHCX-1004: no recipient is registered for the scheme you asked for + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) found no recipient registered for the scheme on your message. The recipient details do not fit the scheme that the policy belongs to. + +Nothing was forwarded. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +The exchange checks the recipient on your envelope before it forwards anything. + +## What happens + +The exchange raises this code when: + +- The recipient code does not belong to a payer registered for the scheme. +- As a provider, the recipient code did not come from the policy lookup for this beneficiary's policy. + +## How you know it worked + +Send the corrected request. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. `result.protocol_status` is `request.queued` or `request.dispatched`. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. The recipient's answer arrives later on the `on_` path paired with your request. + +## When it goes wrong + +1. Look up the beneficiary's policies and take `processingID` from the policy you are sending against. See [POST /participant/get/policies](../endpoints/participant-get-policies.md). +2. Put that value in `x-hcx-recipient_code`. +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). +4. If the lookup gives no usable recipient for the scheme, contact NHCX support. See [support contacts](../sandbox/support-contacts.md). diff --git a/catalogue/nhcx/errors/nhcx-1005.md b/catalogue/nhcx/errors/nhcx-1005.md new file mode 100644 index 000000000..ab40c38f4 --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1005.md @@ -0,0 +1,73 @@ +--- +id: nhcx.error.nhcx-1005 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1005: a request header is missing or not valid' +summary: >- + The exchange refused your call because a header is missing or holds a value it + cannot accept, so fill every mandatory header and send again. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.workflow-codes + flows: + - nhcx.flow.send-a-sealed-request + callbacks: + - nhcx.callback.error + errors: + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1018 +--- + +# NHCX-1005: a request header is missing or not valid + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) refused your call because a header is missing or holds a value it cannot accept. + +The fault is in the envelope, not in the sealed content. Nothing was forwarded. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +## What happens + +The exchange raises this code when: + +- A mandatory header in the [protected header](../glossary/protected-header.md) is missing or empty. The envelope carries `x-hcx-sender_code`, `x-hcx-recipient_code`, `x-hcx-api_call_id`, `x-hcx-correlation_id`, `x-hcx-workflow_id`, `x-hcx-timestamp` and `x-hcx-status`. +- `x-hcx-api_call_id` or `x-hcx-correlation_id` is not a UUID. +- An HTTP header is missing. Every call carries `Accept: application/json`, `Content-Type: application/json` and `bearer_auth`. + +## How you know it worked + +Send the corrected request. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. `result.protocol_status` is `request.queued` or `request.dispatched`. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. The recipient's answer arrives later on the `on_` path paired with your request. + +## When it goes wrong + +1. Compare your protected header with [the x-hcx protocol headers](../concepts/protocol-headers.md). Fill every mandatory header. +2. Generate a new UUID for each `x-hcx-api_call_id`, and one per request cycle for `x-hcx-correlation_id`. +3. Set `x-hcx-workflow_id` to the code for this stage. See [workflow codes](../concepts/workflow-codes.md). +4. Send `Accept`, `Content-Type` and `bearer_auth` on the HTTP call. +5. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). + +An invalid `x-hcx-status` has its own code, [NHCX-1011](nhcx-1011.md). A badly formatted ABHA number has [NHCX-1018](nhcx-1018.md). diff --git a/catalogue/nhcx/errors/nhcx-1006.md b/catalogue/nhcx/errors/nhcx-1006.md new file mode 100644 index 000000000..ff21700f1 --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1006.md @@ -0,0 +1,71 @@ +--- +id: nhcx.error.nhcx-1006 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1006: the correlation id has already been used' +summary: >- + The exchange already holds a request with this correlation id, so send the request + again with a new correlation id. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.message-identifiers + - nhcx.concept.retries-and-expiry + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.status-check + callbacks: + - nhcx.callback.error + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation +--- + +# NHCX-1006: the correlation id has already been used + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) already has a request with the [correlation id](../glossary/correlation-id.md) on your message. Each request cycle needs its own correlation id. + +The exchange refused the new message as a duplicate. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +The exchange checks the correlation id on your envelope before it forwards anything. + +## What happens + +The exchange raises this code when: + +- You retried a failed request on its old correlation id. After an error or failure, the exchange makes that correlation id inactive, and it cannot be used again. +- Your system reused a correlation id for a second, unrelated request. +- Your system sent the same request twice, for example after a timeout on your side. + +## How you know it worked + +Your request with the new correlation id returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. + +No report for the new correlation id arrives on your `/v1/error`. The recipient's answer arrives on the `on_` path paired with your request. + +## When it goes wrong + +1. Generate a fresh UUID for `x-hcx-correlation_id` and send the request again as a new cycle. +2. Link the old and the new correlation id to the same case in your system. +3. Before retrying after a timeout, check whether the first request got through. See [Check the status of a request](../flows/status-check.md). +4. If this keeps happening, see [Duplicate or mismatched correlation id](../troubleshooting/duplicate-or-mismatched-correlation.md). diff --git a/catalogue/nhcx/errors/nhcx-1007.md b/catalogue/nhcx/errors/nhcx-1007.md new file mode 100644 index 000000000..9ec5efc17 --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1007.md @@ -0,0 +1,70 @@ +--- +id: nhcx.error.nhcx-1007 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1007: the exchange could not process the request''s structure or values' +summary: >- + The exchange failed while processing your message and points at its structure + or values, so check the body, the headers and the sealed envelope before sending + again. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + flows: + - nhcx.flow.send-a-sealed-request + callbacks: + - nhcx.callback.error + errors: + - nhcx.error.nhcx-1013 + - nhcx.error.nhcx-1005 +--- + +# NHCX-1007: the exchange could not process the request's structure or values + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) failed while processing your message. The message text points at the structure or the values of your request. + +Something in the request is malformed or holds a value the exchange cannot read. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +## What happens + +The exchange raises this code when: + +- The body is not the expected shape. A request body carries the sealed message in `payload` as a compact [JWE](../glossary/jwe.md) string. +- A header value has the wrong type or form. +- The JWE is not well formed, so the exchange cannot read its protected header. + +## How you know it worked + +Send the corrected request. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. `result.protocol_status` is `request.queued` or `request.dispatched`. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. The recipient's answer arrives later on the `on_` path paired with your request. + +## When it goes wrong + +1. Check the body: one `payload` field holding the compact JWE string. +2. Check every protected header value against [the x-hcx protocol headers](../concepts/protocol-headers.md). +3. Rebuild the JWE and confirm it has five parts separated by dots. See [the JWE envelope](../concepts/jwe-envelope.md). +4. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/nhcx-1008.md b/catalogue/nhcx/errors/nhcx-1008.md new file mode 100644 index 000000000..5643b6c00 --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1008.md @@ -0,0 +1,64 @@ +--- +id: nhcx.error.nhcx-1008 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1008: the exchange had a temporary failure' +summary: >- + The exchange failed while processing your message for a reason on its side, so + wait and send the request again. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.retries-and-expiry + flows: + - nhcx.flow.send-a-sealed-request + callbacks: + - nhcx.callback.error + sandbox: + - nhcx.sandbox.support-contacts +--- + +# NHCX-1008: the exchange had a temporary failure + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) failed while processing your message. The message text asks you to try again after some time. + +The code does not point at anything in your request. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +## What happens + +The exchange raises this code when a temporary failure inside the exchange stops it handling your message. + +The code names no fault in your request. + +## How you know it worked + +Send the corrected request. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. `result.protocol_status` is `request.queued` or `request.dispatched`. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. The recipient's answer arrives later on the `on_` path paired with your request. + +## When it goes wrong + +1. Wait, then send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). +2. Space your retries out. Do not retry in a tight loop. +3. If the code repeats over a long period, contact NHCX support with the correlation ids and timestamps. See [support contacts](../sandbox/support-contacts.md). diff --git a/catalogue/nhcx/errors/nhcx-1009.md b/catalogue/nhcx/errors/nhcx-1009.md new file mode 100644 index 000000000..79cd7f089 --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1009.md @@ -0,0 +1,65 @@ +--- +id: nhcx.error.nhcx-1009 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1009: the exchange failed and recorded the cause in its own logs' +summary: >- + The exchange failed while processing your message and the cause is in its own + logs, so keep the identifiers and contact support if a retry fails. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + flows: + - nhcx.flow.send-a-sealed-request + callbacks: + - nhcx.callback.error + sandbox: + - nhcx.sandbox.support-contacts +--- + +# NHCX-1009: the exchange failed and recorded the cause in its own logs + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) failed while processing your message. The detail is in the exchange's own logs, which you cannot see. + +NHCX support can read the cause from those logs. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +## What happens + +The exchange raises this code when a failure inside it has a cause that the message text does not state. + +A `/v1/error` report can carry more detail in `x-hcx-error_details.trace`. Read it when it is present. + +## How you know it worked + +Send the corrected request. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. `result.protocol_status` is `request.queued` or `request.dispatched`. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. The recipient's answer arrives later on the `on_` path paired with your request. + +## When it goes wrong + +1. Keep the `x-hcx-correlation_id`, the `x-hcx-api_call_id`, the timestamp and the full response. +2. Check the request against [the x-hcx protocol headers](../concepts/protocol-headers.md). +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). +4. If it fails again, contact NHCX support with those identifiers. See [support contacts](../sandbox/support-contacts.md). diff --git a/catalogue/nhcx/errors/nhcx-1010.md b/catalogue/nhcx/errors/nhcx-1010.md new file mode 100644 index 000000000..dd5784d86 --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1010.md @@ -0,0 +1,75 @@ +--- +id: nhcx.error.nhcx-1010 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1010: no request matches the correlation id on your answer' +summary: >- + The exchange holds no request with the correlation id on your answer, so answer + on the correlation id of the request you received, or check where that request + stands. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.message-identifiers + - nhcx.concept.retries-and-expiry + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.payer-process-a-request + - nhcx.flow.status-check + callbacks: + - nhcx.callback.error + endpoints: + - nhcx.endpoint.status + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation +--- + +# NHCX-1010: no request matches the correlation id on your answer + +## In plain words + +You sent an answer on an `on_` path, and the [NHCX](../../shared/glossary/nhcx.md) holds no request with its [correlation id](../glossary/correlation-id.md). + +The exchange cannot route an answer to a request it does not have. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +This code reaches the side that answers, usually the payer or its [TPA](../glossary/tpa.md). + +## What happens + +The exchange raises this code when: + +- The `x-hcx-correlation_id` on your answer differs from the one on the request you received. An answer carries the request's correlation id. +- Your system generated a new correlation id for the answer. +- The original request is gone. After five failed deliveries the exchange deletes a request and retires its correlation id. + +## How you know it worked + +Send the corrected message. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. + +## When it goes wrong + +1. Copy `x-hcx-correlation_id` from the request you received into your answer. Do not generate a new one. +2. Ask the exchange where the original request stands. See [Check the status of a request](../flows/status-check.md). +3. If the original request is gone, your answer cannot be delivered. The sender must start a new cycle. diff --git a/catalogue/nhcx/errors/nhcx-1011.md b/catalogue/nhcx/errors/nhcx-1011.md new file mode 100644 index 000000000..0f759b600 --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1011.md @@ -0,0 +1,75 @@ +--- +id: nhcx.error.nhcx-1011 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1011: the x-hcx-status value is not valid' +summary: >- + The exchange refused your message because its status header holds a value it does + not accept, so set the status that fits the kind of message you are sending. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.status-lifecycle + - nhcx.concept.protocol-headers + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + callbacks: + - nhcx.callback.error + errors: + - nhcx.error.nhcx-1005 +--- + +# NHCX-1011: the x-hcx-status value is not valid + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) refused your message because `x-hcx-status` in the [protected header](../glossary/protected-header.md) holds a value it does not accept. + +The status must fit the kind of message you are sending. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +## What happens + +Set `x-hcx-status` by the kind of message: + +| You are sending | `x-hcx-status` | +|---|---| +| A request, such as `/v1/claim/submit` | `request.initiated` | +| An answer on an `on_` path | `response.complete`, `response.partial` or `response.error` | + +The exchange raises this code when: + +- A request carries a response status, or an answer carries a request status. +- The value is misspelt, for example `request.initiate` instead of `request.initiated`. +- An error answer uses `response.fail`. Use `response.error`. + +## How you know it worked + +Send the corrected message. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. + +## When it goes wrong + +1. Set `x-hcx-status` from the table above. See [status values](../concepts/status-lifecycle.md). +2. Build the value from a constant in your code, not from free text. +3. Send the message again. An answer keeps the correlation id of the request it answers. diff --git a/catalogue/nhcx/errors/nhcx-1012.md b/catalogue/nhcx/errors/nhcx-1012.md new file mode 100644 index 000000000..1461791c6 --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1012.md @@ -0,0 +1,68 @@ +--- +id: nhcx.error.nhcx-1012 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1012: no message matches the api_call_id you gave' +summary: >- + The exchange found no message with the call id you referred to, so use the exact + call id you stored when you sent that message. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.message-identifiers + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.status-check + callbacks: + - nhcx.callback.error + - nhcx.callback.on-status + endpoints: + - nhcx.endpoint.status +--- + +# NHCX-1012: no message matches the api_call_id you gave + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) found no message with the [API call id](../glossary/api-call-id.md) you referred to. + +It cannot look up or act on a message it has no record of. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +## What happens + +The exchange raises this code when: + +- The id you referred to was never sent, or your system did not keep it. +- The id has a typo, or your system generated it again instead of reading the stored value. +- On `/v1/status`, `x-hcx-correlation_id` must carry the `api_call_id` of the message you ask about. Its correlation id points at no message. + +## How you know it worked + +Send the corrected request. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. `result.protocol_status` is `request.queued` or `request.dispatched`. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. The recipient's answer arrives later on the `on_` path paired with your request. + +## When it goes wrong + +1. Store the `x-hcx-api_call_id` of every message you send, against its case. +2. Refer to the stored value exactly. For a status check, put it in `x-hcx-correlation_id`. See [POST /v1/status](../endpoints/status.md). +3. Send the message again. diff --git a/catalogue/nhcx/errors/nhcx-1013.md b/catalogue/nhcx/errors/nhcx-1013.md new file mode 100644 index 000000000..05011f268 --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1013.md @@ -0,0 +1,67 @@ +--- +id: nhcx.error.nhcx-1013 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1013: the request body is empty or not valid' +summary: >- + The exchange received a call with an empty body or one it cannot read as a request, + so send a body carrying the sealed message. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.send-a-sealed-request + callbacks: + - nhcx.callback.error + errors: + - nhcx.error.nhcx-1007 +--- + +# NHCX-1013: the request body is empty or not valid + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) received a call with an empty body, or a body it cannot read as a request. + +There was nothing it could forward. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +## What happens + +The exchange raises this code when: + +- The body is empty. +- The body is not JSON, or it has no `payload` field. +- `payload` is empty, or is not a compact [JWE](../glossary/jwe.md) string. + +## How you know it worked + +Send the corrected request. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. `result.protocol_status` is `request.queued` or `request.dispatched`. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. The recipient's answer arrives later on the `on_` path paired with your request. + +## When it goes wrong + +1. Send a JSON body of the form `{"payload": ""}`. +2. Seal the [FHIR](../../shared/glossary/fhir.md) bundle and the headers into the JWE before sending. See [Send a sealed request through NHCX](../flows/send-a-sealed-request.md). +3. Log the exact body you send, so an empty body shows in your own logs. +4. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/nhcx-1014.md b/catalogue/nhcx/errors/nhcx-1014.md new file mode 100644 index 000000000..a91ab0e17 --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1014.md @@ -0,0 +1,79 @@ +--- +id: nhcx.error.nhcx-1014 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1014: the exchange could not deliver the response to its sender' +summary: >- + The exchange could not deliver a response to the participant it was meant for, + because that participant's endpoint did not take it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.status-check + callbacks: + - nhcx.callback.error + errors: + - nhcx.error.nhcx-1010 + sandbox: + - nhcx.sandbox.callback-url-requirements +--- + +# NHCX-1014: the exchange could not deliver the response to its sender + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) could not deliver a response to the participant it was meant for. That participant's registered endpoint did not take it. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +If you answered on an `on_` path, the code tells you your answer did not reach the original sender. If you started the exchange, your own endpoint is the one that failed. + +## What happens + +The exchange raises this code when: + +- The original sender's registered endpoint is down or refused the delivery. +- The endpoint did not answer HTTP 202 within 30 seconds. +- The endpoint answered with a body that does not follow the acknowledgement format. + +## How you know it worked + +Send the corrected message. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. + +## When it goes wrong + +### If you sent the response + +1. Keep your response and its correlation id. +2. Send it again once the original sender's endpoint is reachable. +3. If the exchange answers [NHCX-1010](nhcx-1010.md), the request is gone. The original sender must start again. + +### If you started the exchange + +1. Check that your registered endpoint is reachable and answers HTTP 202 within 30 seconds. See [callback URL requirements](../sandbox/callback-url-requirements.md). +2. Return the acknowledgement body described in [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). +3. Ask the exchange where your request stands. See [Check the status of a request](../flows/status-check.md). diff --git a/catalogue/nhcx/errors/nhcx-1015.md b/catalogue/nhcx/errors/nhcx-1015.md new file mode 100644 index 000000000..797ba3763 --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1015.md @@ -0,0 +1,107 @@ +--- +id: nhcx.error.nhcx-1015 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1015: the recipient answered a delivery in a form the exchange does + not accept' +summary: >- + NHCX-1015 means the recipient's system answered a delivered message with a status + or body the exchange does not accept, so the exchange treats the delivery as failed. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.status-check + callbacks: + - nhcx.callback.error + errors: + - nhcx.error.nhcx-1017 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback +--- + +# NHCX-1015: the recipient answered a delivery in a form the exchange does not accept + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) delivered a message, and the recipient's system answered in a form the exchange does not accept. The exchange treats that answer as a failed delivery. + +The message text is `Invalid response received from receiver.`. [NHCX-1017](nhcx-1017.md) carries the same text. Handle both codes the same way. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +The exchange retries a failed delivery five times. If every answer is invalid, it deletes the request and retires its correlation id. The report then reaches the sender's `/v1/error`. + +## What happens + +The recipient's system produced an answer the exchange cannot accept: + +- It answered with an HTTP status other than 202. +- Its acknowledgement body does not follow the published format. The body carries `timestamp`, `api_call_id`, `correlation_id`, `result` and `error`. +- `result.entity_type` is not one of `coverageeligibility`, `preauth`, `claim`, `task`, `payment` or `insuranceplan`. +- `result.protocol_status` is not one of `request.queued`, `request.dispatched` or `request.error`. +- It took longer than 30 seconds to answer. + +## How you know it worked + +Send the corrected request. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. `result.protocol_status` is `request.queued` or `request.dispatched`. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. The recipient's answer arrives later on the `on_` path paired with your request. + +## When it goes wrong + +### If you sent the request + +The recipient's system is at fault. Tell the recipient which code you received. + +Once the recipient has fixed its acknowledgement, send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). + +### If you are the recipient + +1. Answer every delivery with HTTP 202 and this body before you process it: + +```json +{ + "timestamp": "DD/MM/YYYY hh:mm:ss:sss", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "preauth", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +2. Copy `api_call_id` and `correlation_id` from the delivery you received. +3. Set `entity_type` to the use case of the delivery. +4. Leave `error.code` and `error.message` as empty strings when you accept. + +See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). diff --git a/catalogue/nhcx/errors/nhcx-1016.md b/catalogue/nhcx/errors/nhcx-1016.md new file mode 100644 index 000000000..da4973558 --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1016.md @@ -0,0 +1,67 @@ +--- +id: nhcx.error.nhcx-1016 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1016: the call does not fit the exchange open on this correlation id' +summary: >- + The exchange refused your call because its path is not a valid next step for the + exchange open under this correlation id, so answer on the paired path. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.four-message-legs + - nhcx.concept.message-identifiers + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.status-check + callbacks: + - nhcx.callback.error + endpoints: +--- + +# NHCX-1016: the call does not fit the exchange open on this correlation id + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) refused your call because its action does not fit the exchange open under this [correlation id](../glossary/correlation-id.md). + +The path you called is not a valid next step for that thread. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +## What happens + +The exchange raises this code when: + +- You answered on an `on_` path that is not paired with the request. An answer to `/v1/preauth/submit` belongs on `/v1/preauth/on_submit`. +- You reused a correlation id from one use case on a call for another. + +## How you know it worked + +Send the corrected message. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. + +## When it goes wrong + +1. Answer each request on the `on_` path paired with the path it arrived on. See [the four legs of every exchange](../concepts/four-message-legs.md). +2. Give each new request cycle its own correlation id. +3. Check what the exchange holds for the correlation id before you retry. See [Check the status of a request](../flows/status-check.md). diff --git a/catalogue/nhcx/errors/nhcx-1017.md b/catalogue/nhcx/errors/nhcx-1017.md new file mode 100644 index 000000000..eb67f7fe0 --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1017.md @@ -0,0 +1,107 @@ +--- +id: nhcx.error.nhcx-1017 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1017: the recipient answered a delivery in a form the exchange does + not accept' +summary: >- + NHCX-1017 means the recipient's system answered a delivered message with a status + or body the exchange does not accept, so the exchange treats the delivery as failed. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.status-check + callbacks: + - nhcx.callback.error + errors: + - nhcx.error.nhcx-1015 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback +--- + +# NHCX-1017: the recipient answered a delivery in a form the exchange does not accept + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) delivered a message, and the recipient's system answered in a form the exchange does not accept. The exchange treats that answer as a failed delivery. + +The message text is `Invalid response received from receiver`. [NHCX-1015](nhcx-1015.md) carries the same text. Handle both codes the same way. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +The exchange retries a failed delivery five times. If every answer is invalid, it deletes the request and retires its correlation id. The report then reaches the sender's `/v1/error`. + +## What happens + +The recipient's system produced an answer the exchange cannot accept: + +- It answered with an HTTP status other than 202. +- Its acknowledgement body does not follow the published format. The body carries `timestamp`, `api_call_id`, `correlation_id`, `result` and `error`. +- `result.entity_type` is not one of `coverageeligibility`, `preauth`, `claim`, `task`, `payment` or `insuranceplan`. +- `result.protocol_status` is not one of `request.queued`, `request.dispatched` or `request.error`. +- It took longer than 30 seconds to answer. + +## How you know it worked + +Send the corrected request. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. `result.protocol_status` is `request.queued` or `request.dispatched`. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. The recipient's answer arrives later on the `on_` path paired with your request. + +## When it goes wrong + +### If you sent the request + +The recipient's system is at fault. Tell the recipient which code you received. + +Once the recipient has fixed its acknowledgement, send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). + +### If you are the recipient + +1. Answer every delivery with HTTP 202 and this body before you process it: + +```json +{ + "timestamp": "DD/MM/YYYY hh:mm:ss:sss", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "preauth", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +2. Copy `api_call_id` and `correlation_id` from the delivery you received. +3. Set `entity_type` to the use case of the delivery. +4. Leave `error.code` and `error.message` as empty strings when you accept. + +See [the 202 acknowledgement](../concepts/synchronous-acknowledgement.md). diff --git a/catalogue/nhcx/errors/nhcx-1018.md b/catalogue/nhcx/errors/nhcx-1018.md new file mode 100644 index 000000000..2aa7de19f --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-1018.md @@ -0,0 +1,71 @@ +--- +id: nhcx.error.nhcx-1018 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-1018: the ABHA number is not in the XX-XXXX-XXXX-XXXX form' +summary: >- + The exchange refused the message because the beneficiary's health account number + is not written as fourteen digits in hyphenated groups of two, four, four and + four. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + flows: + - nhcx.flow.send-a-sealed-request + callbacks: + - nhcx.callback.error + glossary: + - shared.glossary.abha-number + errors: + - nhcx.error.nhcx-1005 +--- + +# NHCX-1018: the ABHA number is not in the XX-XXXX-XXXX-XXXX form + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) refused your message because the [ABHA number](../../shared/glossary/abha-number.md) is not in the form it accepts. + +The exchange accepts the ABHA number as `XX-XXXX-XXXX-XXXX`: 14 digits in groups of two, four, four and four, joined by hyphens. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +The beneficiary's ABHA number travels in the `x-hcx-ben-abha-id` [protected header](../glossary/protected-header.md). + +## What happens + +The exchange raises this code when: + +- The ABHA number was sent without hyphens. +- It has the wrong number of digits, or the hyphens sit in the wrong places. +- An [ABHA address](../../shared/glossary/abha-address.md) was sent where the ABHA number belongs. + +## How you know it worked + +Send the corrected request. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. `result.protocol_status` is `request.queued` or `request.dispatched`. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. The recipient's answer arrives later on the `on_` path paired with your request. + +## When it goes wrong + +1. Format the ABHA number as `XX-XXXX-XXXX-XXXX` before you place it in `x-hcx-ben-abha-id`. +2. Store the 14 digits once, and format them where you build the header. Every call then uses the same form. +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/nhcx-401.md b/catalogue/nhcx/errors/nhcx-401.md new file mode 100644 index 000000000..1eeac62ce --- /dev/null +++ b/catalogue/nhcx/errors/nhcx-401.md @@ -0,0 +1,72 @@ +--- +id: nhcx.error.nhcx-401 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'NHCX-401: the exchange does not accept your authorisation for this call' +summary: >- + The exchange refused the call because it does not accept the token or the caller + behind it, so renew the session token and check your participant may make this + call. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet NHCX Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.session-token + - nhcx.concept.access-control + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.policy-link-and-delink + callbacks: + - nhcx.callback.error + endpoints: + - nhcx.endpoint.session-token + troubleshooting: + - nhcx.troubleshooting.everything-returns-401 +--- + +# NHCX-401: the exchange does not accept your authorisation for this call + +## In plain words + +The [NHCX](../../shared/glossary/nhcx.md) refused your call because it does not accept you as authorised to make it. The message text is `User Unauthorized`. + +Nothing was forwarded to the recipient. + +## Before you start + +You sent a message through NHCX. The exchange returns a gateway code in one of two places: + +- The synchronous acknowledgement to your call. The code is in `error.code` and the text in `error.message`. +- A report posted to your own `/v1/error` endpoint. The code is in `x-hcx-error_details.code`, the text in `x-hcx-error_details.message`, and `x-hcx-correlation_id` names the request. + +The `/v1/error` report is a plain `ProtocolResponse` body, not a sealed payload. Your system must host `/v1/error` to see it. See [Receiving POST /v1/error](../callbacks/error.md). + +## What happens + +The exchange refuses the call when: + +- The session token in `bearer_auth` has expired. Tokens are short lived, so a token that worked earlier can fail now. +- The token is not a valid token from the session call. +- The token was generated with a client id other than the one your participant was created with. Policy linking and de-linking accept only the participants named on the policy. + +## How you know it worked + +Send the corrected request. Your call returns HTTP 202 with an acknowledgement in which `error.code` and `error.message` are empty strings. `result.protocol_status` is `request.queued` or `request.dispatched`. + +No report for that `x-hcx-correlation_id` arrives on your `/v1/error`. The recipient's answer arrives later on the `on_` path paired with your request. + +## When it goes wrong + +1. Call the session endpoint for a new token and retry with it. See [the session token](../concepts/session-token.md) and [POST /api/hiecm/gateway/v3/sessions](../endpoints/session-token.md). +2. Send the token as `bearer_auth: Bearer `. The exchange's own endpoints read `bearer_auth`, not `Authorization`. +3. Generate the token with the client id used when your participant was created. +4. If every call returns this code, see [Every call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/errors/payr-1001.md b/catalogue/nhcx/errors/payr-1001.md new file mode 100644 index 000000000..1c5722f76 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1001.md @@ -0,0 +1,84 @@ +--- +id: nhcx.error.payr-1001 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1001: the recipient could not decrypt your request' +summary: >- + The receiving payer could not open your sealed request, usually because it was + sealed with the wrong or an outdated certificate, so fetch the current certificate + and send again. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.encryption-certificate + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.rotate-certificate + endpoints: + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.participant-search + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + - nhcx.callback.coverageeligibility-on-check + troubleshooting: + - nhcx.troubleshooting.recipient-cannot-decrypt +--- + +# PAYR-1001: the recipient could not decrypt your request + +## In plain words + +The recipient could not open the sealed [JWE](../glossary/jwe.md) you sent. Its private key does not match the certificate you sealed with, or the sealed content is malformed. + +The recipient read nothing of your request. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +Both payer code spaces use PAYR-1001 for this failure. The text differs: + +| Message text | Sent by | +|---|---| +| `Error while decrypting request. Please reprocess the request encrypting with valid certificate of the payer.` | A payer using the standard payer codes | +| `Error occurred while decrypting payload for receiver code with correlation id .` | The [PMJAY](../glossary/pmjay.md) payer | + +## What happens + +The recipient raises this code when: + +- You sealed the request with a certificate that is not the recipient's current one. +- You sealed it with your own certificate, or another participant's. +- `x-hcx-recipient_code` names a different participant from the one whose certificate you used. +- The content you sealed is not in the expected key-value form. It carries `x-hcx-sender_code`, `x-hcx-recipient_code`, `x-hcx-api_call_id`, `x-hcx-correlation_id`, `x-hcx-workflow_id`, `x-hcx-timestamp`, `x-hcx-status`, and the sealed [FHIR](../../shared/glossary/fhir.md) bundle as `payload`. + +## How you know it worked + +Your resent request is not answered with PAYR-1001. The payer's answer opens with your private key: + +- The payer's answer arrives on the `on_` path paired with your request, with no `x-hcx-error_details`. + +## When it goes wrong + +1. Confirm the recipient is a registered participant with [POST /participant/search](../endpoints/participant-search.md). +2. Fetch the recipient's current certificate from the registry with [POST /fetch/certs](../endpoints/fetch-certs.md). +3. Seal the request again with that certificate. Check that every header listed above is present. +4. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). +5. If it still fails, contact NHCX support. See [support contacts](../sandbox/support-contacts.md). + +See [the recipient cannot decrypt](../troubleshooting/recipient-cannot-decrypt.md). diff --git a/catalogue/nhcx/errors/payr-1002.md b/catalogue/nhcx/errors/payr-1002.md new file mode 100644 index 000000000..75fee2f68 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1002.md @@ -0,0 +1,76 @@ +--- +id: nhcx.error.payr-1002 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1002: the payer could not encrypt its answer to you' +summary: >- + The payer processed your request but could not seal its answer with the certificate + you registered, so upload a valid certificate and the payer sends the answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.encryption-certificate + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.rotate-certificate + - nhcx.flow.generate-and-register-certificate + - nhcx.flow.receive-a-sealed-callback + endpoints: + - nhcx.endpoint.v2-update-cert + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + - nhcx.callback.coverageeligibility-on-check +--- + +# PAYR-1002: the payer could not encrypt its answer to you + +## In plain words + +The payer received and processed your request, but could not seal its answer to you. It seals answers with the public certificate your organisation registered in [NHCX](../../shared/glossary/nhcx.md). + +That certificate is missing, expired or not usable. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +Both payer code spaces use PAYR-1002 for this failure. The text differs: + +| Message text | Sent by | +|---|---| +| `Error while encrypting request. Please update encryption certificate in NHCX.` | A payer using the standard payer codes | +| `Error occurred while encrypting payload for receiver code with correlation id .` | The [PMJAY](../glossary/pmjay.md) payer | + +## What happens + +The payer raises this code when: + +- The certificate registered for your participant has expired. +- The registered certificate is not a valid [X.509 certificate](../glossary/x509-certificate.md), or cannot be used for encryption. +- Your organisation is not a valid registered participant. + +## How you know it worked + +After you update the certificate, the payer fetches it from the registry and sends its answer. The answer arrives on the `on_` path paired with your request, for the same `x-hcx-correlation_id`. + +It opens with your private key, and carries no `x-hcx-error_details`. + +## When it goes wrong + +1. Confirm your organisation is a registered participant. +2. Upload a valid encryption certificate to NHCX. See [Rotate your encryption certificate](../flows/rotate-certificate.md) and [POST /v2/update/cert](../endpoints/v2-update-cert.md). +3. Wait for the payer's answer. You do not need to resend the request. +4. If the answer does not arrive, contact NHCX support. See [support contacts](../sandbox/support-contacts.md). diff --git a/catalogue/nhcx/errors/payr-1003.md b/catalogue/nhcx/errors/payr-1003.md new file mode 100644 index 000000000..b8b65154e --- /dev/null +++ b/catalogue/nhcx/errors/payr-1003.md @@ -0,0 +1,90 @@ +--- +id: nhcx.error.payr-1003 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1003: the payer''s system could not reach the exchange and will resend, + or the workflow requested is not valid' +summary: >- + PAYR-1003 means one of two things, the payer's system could not reach the exchange + and will resend or, from the national scheme's reference payer, the workflow requested + is not valid, and the message text that comes with the code tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error, Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.workflow-codes + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + - nhcx.flow.status-check + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit +--- + +# PAYR-1003: the payer's system could not reach the exchange and will resend, or the workflow requested is not valid + +## In plain words + +PAYR-1003 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the payer's system could not reach the exchange and will resend. +- From the [PMJAY](../glossary/pmjay.md) payer: the workflow requested is not valid. This PMJAY meaning is deprecated. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/preauth/on_submit` or `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1003 for a transport failure on its own side, on any use case. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Error while connecting to NHCX. System will try to resend the message to NHCX after some time.` | A payer using the standard payer codes | The payer's system could not reach the exchange and will resend. | +| `Invalid workflow requested. Hence request will not be processed further.` | The PMJAY payer | The workflow requested is not valid. This meaning is deprecated. | + +### When the standard meaning applies + +- A network or transport failure between the payer's system and the exchange. The payer resends its message later. + +### When the PMJAY meaning applies + +- `x-hcx-workflow_id` is missing, or holds a code that does not fit the use case of the path you called. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a preauthorisation, `/v1/preauth/on_submit` arrives with no `x-hcx-error_details`. Its `x-hcx-workflow_id` names the decision, for example `21` approved or `24` queried. +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +### If the text reads `Error while connecting to NHCX` + +Nothing in your request needs to change. The payer resends its message when it reconnects. + +If nothing arrives within the payer's usual turnaround, ask the exchange where the request stands. See [Check the status of a request](../flows/status-check.md). + +### If the text reads `Invalid workflow requested` + +1. Set `x-hcx-workflow_id` to the workflow code for this stage. See [workflow codes](../concepts/workflow-codes.md). +2. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1004.md b/catalogue/nhcx/errors/payr-1004.md new file mode 100644 index 000000000..b6180f3fb --- /dev/null +++ b/catalogue/nhcx/errors/payr-1004.md @@ -0,0 +1,101 @@ +--- +id: nhcx.error.payr-1004 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1004: your facility is not registered with the payer for the policy, + or the FHIR bundle is malformed' +summary: >- + PAYR-1004 means one of two things, your facility is not registered with the payer + for the policy or, from the national scheme's reference payer, the data bundle + is malformed, and the message text that comes with the code tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.fhir-in-nhcx + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.validation + - shared.fhir.hl7-validator-recipe + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1004: your facility is not registered with the payer for the policy, or the FHIR bundle is malformed + +## In plain words + +PAYR-1004 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: your facility is not registered with the payer for the policy. +- From the [PMJAY](../glossary/pmjay.md) payer: the [FHIR](../../shared/glossary/fhir.md) bundle is malformed. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/coverageeligibility/on_check`, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1004 for coverage eligibility, preauthorisation and claim. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Provider is not registered with the payer for requested policy.` | A payer using the standard payer codes | Your facility is not registered with the payer for the policy. | +| `Received FHIR bundle is malformed. Please correct the bundle and try again. ` | The PMJAY payer | The FHIR bundle is malformed. | + +### When the standard meaning applies + +- Your facility is not registered with this payer for the policy named in the request. +- The request names a policy your facility is not registered for. + +### When the PMJAY meaning applies + +- The payer's structure check rejected the bundle. The message ends with the check's own details in place of ``. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a coverage eligibility check, `/v1/coverageeligibility/on_check` arrives for your `x-hcx-correlation_id` with no `x-hcx-error_details`. +- For a preauthorisation, `/v1/preauth/on_submit` arrives with no `x-hcx-error_details`. Its `x-hcx-workflow_id` names the decision, for example `21` approved or `24` queried. +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +### If the text reads `Provider is not registered with the payer for requested policy` + +1. Confirm with the payer that your facility is registered for this policy. +2. Check that the request names the beneficiary's policy. +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). + +### If the text reads `Received FHIR bundle is malformed` + +1. Read the details at the end of the message and fix what they name. +2. Validate the bundle with the [NRCeS](../../shared/glossary/nrces.md) validator. See [the validator recipe](../../shared/fhir/hl7-validator-recipe.md) and [validating an NHCX bundle](../fhir/validation.md). +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). +4. If it still fails, contact NHCX support. See [support contacts](../sandbox/support-contacts.md). diff --git a/catalogue/nhcx/errors/payr-1005.md b/catalogue/nhcx/errors/payr-1005.md new file mode 100644 index 000000000..1dcb6fca7 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1005.md @@ -0,0 +1,99 @@ +--- +id: nhcx.error.payr-1005 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1005: the beneficiary is not a covered member of the policy, or the + request is more than 24 hours old' +summary: >- + PAYR-1005 means one of two things, the beneficiary is not a covered member of + the policy or, from the national scheme's reference payer, the request is more + than 24 hours old, and the message text that comes with the code tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error, Coverage Error Codes, Preauth Error Codes, Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.retries-and-expiry + - nhcx.concept.protocol-headers + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit +--- + +# PAYR-1005: the beneficiary is not a covered member of the policy, or the request is more than 24 hours old + +## In plain words + +PAYR-1005 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the beneficiary is not a covered member of the policy. +- From the [PMJAY](../glossary/pmjay.md) payer: the request is more than 24 hours old. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/coverageeligibility/on_check`, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1005 for coverage eligibility, preauthorisation and claim. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Beneficiary is not a covered member for requested policy. Please enroll beneficiary for the policy and try again.` | A payer using the standard payer codes | The beneficiary is not a covered member of the policy. | +| `Maximum time limit exceeded in receiving the request. Please try again.` | The PMJAY payer | The request is more than 24 hours old. | + +### When the standard meaning applies + +- The beneficiary is not enrolled as a member of the policy named in the request. +- The request names a policy other than the one covering this beneficiary. + +### When the PMJAY meaning applies + +- `x-hcx-timestamp` is more than 24 hours before the time the payer received the request. +- Your system stamped the request long before sending it, or resent an old sealed request unchanged. +- Your server clock is wrong. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a coverage eligibility check, `/v1/coverageeligibility/on_check` arrives for your `x-hcx-correlation_id` with no `x-hcx-error_details`. +- For a preauthorisation, `/v1/preauth/on_submit` arrives with no `x-hcx-error_details`. Its `x-hcx-workflow_id` names the decision, for example `21` approved or `24` queried. +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +### If the text reads `Beneficiary is not a covered member for requested policy` + +1. Confirm membership with a coverage eligibility check. See [Check coverage eligibility](../flows/coverage-eligibility-check.md). +2. Enrol the beneficiary for the policy with the payer, or use the policy that covers them. +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). + +### If the text reads `Maximum time limit exceeded in receiving the request` + +1. Set `x-hcx-timestamp` to the current time when you build each request. +2. Rebuild and seal the request again. Do not resend the old sealed request. +3. Keep your server clock synchronised. +4. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1006.md b/catalogue/nhcx/errors/payr-1006.md new file mode 100644 index 000000000..3c7ab4a19 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1006.md @@ -0,0 +1,94 @@ +--- +id: nhcx.error.payr-1006 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1006: the policy does not exist, or a name in the request is not valid' +summary: >- + PAYR-1006 means one of two things, the policy does not exist or, from the national + scheme's reference payer, a name in the request is not valid, and the message + text that comes with the code tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.policy-linking + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.participant-get-policies + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit +--- + +# PAYR-1006: the policy does not exist, or a name in the request is not valid + +## In plain words + +PAYR-1006 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the policy does not exist. +- From the [PMJAY](../glossary/pmjay.md) payer: a name in the request is not valid. This PMJAY meaning is deprecated. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/coverageeligibility/on_check`, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1006 for coverage eligibility, preauthorisation and claim. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Policy does not exist. Please try with a valid policy.` | A payer using the standard payer codes | The policy does not exist. | +| `Invalid name in request. Hence request will not be processed further.` | The PMJAY payer | A name in the request is not valid. This meaning is deprecated. | + +### When the standard meaning applies + +- The policy number in the request is wrong. +- The policy belongs to a different payer from the one you addressed. + +### When the PMJAY meaning applies + +- A name in the request, such as the patient's name in the Patient resource, is missing or not valid. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a coverage eligibility check, `/v1/coverageeligibility/on_check` arrives for your `x-hcx-correlation_id` with no `x-hcx-error_details`. +- For a preauthorisation, `/v1/preauth/on_submit` arrives with no `x-hcx-error_details`. Its `x-hcx-workflow_id` names the decision, for example `21` approved or `24` queried. +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +### If the text reads `Policy does not exist` + +1. Take the policy from the beneficiary's policy lookup. See [POST /participant/get/policies](../endpoints/participant-get-policies.md). +2. Address the request to the payer that holds that policy. +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). + +### If the text reads `Invalid name in request` + +1. Check every name in the request, starting with the patient's name in the Patient resource. +2. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1007.md b/catalogue/nhcx/errors/payr-1007.md new file mode 100644 index 000000000..5f7694bf9 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1007.md @@ -0,0 +1,92 @@ +--- +id: nhcx.error.payr-1007 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1007: the policy has expired, or the gender in the request is not valid' +summary: >- + PAYR-1007 means one of two things, the policy has expired or, from the national + scheme's reference payer, the gender in the request is not valid, and the message + text that comes with the code tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.participant-get-policies + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit +--- + +# PAYR-1007: the policy has expired, or the gender in the request is not valid + +## In plain words + +PAYR-1007 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the policy has expired. +- From the [PMJAY](../glossary/pmjay.md) payer: the gender in the request is not valid. This PMJAY meaning is deprecated. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/coverageeligibility/on_check`, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1007 for coverage eligibility, preauthorisation and claim. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Requested policy is expired. Please try with a valid policy.` | A payer using the standard payer codes | The policy has expired. | +| `Invalid gender in request. Hence request will not be processed further.` | The PMJAY payer | The gender in the request is not valid. This meaning is deprecated. | + +### When the standard meaning applies + +- The policy's period of cover ended before the date of the request or of the service. + +### When the PMJAY meaning applies + +- The gender in the request is missing, or is not a code from the [FHIR](../../shared/glossary/fhir.md) administrative gender value set. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a coverage eligibility check, `/v1/coverageeligibility/on_check` arrives for your `x-hcx-correlation_id` with no `x-hcx-error_details`. +- For a preauthorisation, `/v1/preauth/on_submit` arrives with no `x-hcx-error_details`. Its `x-hcx-workflow_id` names the decision, for example `21` approved or `24` queried. +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +### If the text reads `Requested policy is expired` + +1. Check the beneficiary's current policy with a coverage eligibility check. See [Check coverage eligibility](../flows/coverage-eligibility-check.md). +2. Send the request against a policy that is in force. +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). + +### If the text reads `Invalid gender in request` + +1. Send the gender as a code from the value set at https://hl7.org/fhir/R4/valueset-administrative-gender.html. +2. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1008.md b/catalogue/nhcx/errors/payr-1008.md new file mode 100644 index 000000000..cbeeb50d4 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1008.md @@ -0,0 +1,97 @@ +--- +id: nhcx.error.payr-1008 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1008: the beneficiary''s remaining cover is not enough for the request, + or the FHIR bundle is not valid or cannot be parsed' +summary: >- + PAYR-1008 means one of two things, the beneficiary's remaining cover is not enough + for the request or, from the national scheme's reference payer, the data bundle + is not valid or cannot be parsed, and the message text that comes with the code + tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.fhir-in-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.validation + - shared.fhir.hl7-validator-recipe + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1008: the beneficiary's remaining cover is not enough for the request, or the FHIR bundle is not valid or cannot be parsed + +## In plain words + +PAYR-1008 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the beneficiary's remaining cover is not enough for the request. +- From the [PMJAY](../glossary/pmjay.md) payer: the [FHIR](../../shared/glossary/fhir.md) bundle is not valid or cannot be parsed. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/preauth/on_submit` or `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1008 for preauthorisation and claim. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Eligible coverage amount of the beneficiary for the requested policy is insufficient to process the request.` | A payer using the standard payer codes | The beneficiary's remaining cover is not enough for the request. | +| `Invalid FHIR bundle received. Hence request will not be processed further.` | The PMJAY payer | The FHIR bundle is not valid or cannot be parsed. | + +### When the standard meaning applies + +- The amount requested is more than the beneficiary's remaining cover under the policy. + +### When the PMJAY meaning applies + +- The bundle is not valid, or the payer cannot parse it. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a preauthorisation, `/v1/preauth/on_submit` arrives with no `x-hcx-error_details`. Its `x-hcx-workflow_id` names the decision, for example `21` approved or `24` queried. +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +### If the text reads `Eligible coverage amount of the beneficiary for the requested policy is insufficient to process the request` + +1. Check the remaining cover with a coverage eligibility check. See [Check coverage eligibility](../flows/coverage-eligibility-check.md). +2. Request no more than the remaining cover. +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). + +### If the text reads `Invalid FHIR bundle received` + +1. Validate the bundle with the [NRCeS](../../shared/glossary/nrces.md) validator. See [the validator recipe](../../shared/fhir/hl7-validator-recipe.md) and [validating an NHCX bundle](../fhir/validation.md). +2. Fix every error the validator reports. +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). +4. If it still fails, contact NHCX support. See [support contacts](../sandbox/support-contacts.md). diff --git a/catalogue/nhcx/errors/payr-1009.md b/catalogue/nhcx/errors/payr-1009.md new file mode 100644 index 000000000..ec10c9734 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1009.md @@ -0,0 +1,92 @@ +--- +id: nhcx.error.payr-1009 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1009: the requested items are not valid or not covered, or the Patient + resource has no identifier' +summary: >- + PAYR-1009 means one of two things, the requested items are not valid or not covered + or, from the national scheme's reference payer, the Patient resource has no identifier, + and the message text that comes with the code tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.insurance-plan + - nhcx.concept.fhir-in-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit +--- + +# PAYR-1009: the requested items are not valid or not covered, or the Patient resource has no identifier + +## In plain words + +PAYR-1009 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the requested items are not valid or not covered. +- From the [PMJAY](../glossary/pmjay.md) payer: the Patient resource has no identifier. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/preauth/on_submit` or `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1009 for preauthorisation and claim. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Requested items are not valid or not covered. Please try again with valid or covered items.` | A payer using the standard payer codes | The requested items are not valid or not covered. | +| `No identifier found for patient component. Hence request will not be processed further. https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html` | The PMJAY payer | The Patient resource has no identifier. | + +### When the standard meaning applies + +- An item code in the request is not valid for the policy. +- An item is valid but the policy does not cover it. + +### When the PMJAY meaning applies + +- The Patient resource in the bundle has no `identifier`. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a preauthorisation, `/v1/preauth/on_submit` arrives with no `x-hcx-error_details`. Its `x-hcx-workflow_id` names the decision, for example `21` approved or `24` queried. +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +### If the text reads `Requested items are not valid or not covered` + +1. Check each item against the policy's covered items. See [the insurance plan](../concepts/insurance-plan.md) and [Request a patient's insurance plan](../flows/insurance-plan-request.md). +2. Remove or replace items the policy does not cover. +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). + +### If the text reads `No identifier found for patient component` + +1. Add an `identifier` to the Patient resource. The profile is at https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html. +2. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1010.md b/catalogue/nhcx/errors/payr-1010.md new file mode 100644 index 000000000..79117a3f2 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1010.md @@ -0,0 +1,91 @@ +--- +id: nhcx.error.payr-1010 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1010: a preauthorisation was required but not obtained, or the Patient + identifier has no type' +summary: >- + PAYR-1010 means one of two things, a preauthorisation was required but not obtained + or, from the national scheme's reference payer, the Patient identifier has no + type, and the message text that comes with the code tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit +--- + +# PAYR-1010: a preauthorisation was required but not obtained, or the Patient identifier has no type + +## In plain words + +PAYR-1010 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: a preauthorisation was required but not obtained. +- From the [PMJAY](../glossary/pmjay.md) payer: the Patient identifier has no type. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/preauth/on_submit` or `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1010 for enhancements, resubmissions and claims. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Preauthorization is required to process the request but was not obtained.` | A payer using the standard payer codes | A preauthorisation was required but not obtained. | +| `No type found for patient component identifier. Hence request will not be processed further. https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html` | The PMJAY payer | The Patient identifier has no type. | + +### When the standard meaning applies + +- You sent a claim, an enhancement or a resubmission for treatment that needed a preauthorisation first. +- No approved preauthorisation exists for the case. + +### When the PMJAY meaning applies + +- The Patient resource's `identifier` has no `type`. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a preauthorisation, `/v1/preauth/on_submit` arrives with no `x-hcx-error_details`. Its `x-hcx-workflow_id` names the decision, for example `21` approved or `24` queried. +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +### If the text reads `Preauthorization is required to process the request but was not obtained` + +1. Obtain a preauthorisation before the claim or enhancement. See [Submit a preauthorisation](../flows/preauth-submit.md). +2. Carry the approved preauthorisation's reference in the later request. +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). + +### If the text reads `No type found for patient component identifier` + +1. Give every `identifier` a `type`, starting with the Patient identifier. The profile is at https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html. +2. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1011.md b/catalogue/nhcx/errors/payr-1011.md new file mode 100644 index 000000000..978f8cd68 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1011.md @@ -0,0 +1,85 @@ +--- +id: nhcx.error.payr-1011 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1011: the approved package does not support enhancement, or the Claim + resource has no identifier' +summary: >- + PAYR-1011 means one of two things, the approved package does not support enhancement + or, from the national scheme's reference payer, the Claim resource has no identifier, + and the message text that comes with the code tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit +--- + +# PAYR-1011: the approved package does not support enhancement, or the Claim resource has no identifier + +## In plain words + +PAYR-1011 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the approved package does not support enhancement. +- From the [PMJAY](../glossary/pmjay.md) payer: the Claim resource has no identifier. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/preauth/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1011 for preauthorisation enhancements. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Enhancement request can not be processed as the prior approved package/procedure does not support enhancement.` | A payer using the standard payer codes | The approved package does not support enhancement. | +| `No identifier found for claim component. Hence request will not be processed further.` | The PMJAY payer | The Claim resource has no identifier. | + +### When the standard meaning applies + +- You sent an enhancement against a package or procedure that does not allow one. + +### When the PMJAY meaning applies + +- The Claim resource in the bundle has no `identifier`. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a preauthorisation, `/v1/preauth/on_submit` arrives with no `x-hcx-error_details`. Its `x-hcx-workflow_id` names the decision, for example `21` approved or `24` queried. + +## When it goes wrong + +### If the text reads `Enhancement request can not be processed as the prior approved package/procedure does not support enhancement` + +1. Do not resend the same enhancement. The payer refuses it again. +2. Check whether a package allows enhancement before you send one. See [the insurance plan](../concepts/insurance-plan.md). + +### If the text reads `No identifier found for claim component` + +1. Add an `identifier` to the Claim resource. +2. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1012.md b/catalogue/nhcx/errors/payr-1012.md new file mode 100644 index 000000000..ab3478858 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1012.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1012 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1012: the claim amount is more than the approved preauthorisation amount, + or the Claim identifier has no type' +summary: >- + PAYR-1012 means one of two things, the claim amount is more than the approved + preauthorisation amount or, from the national scheme's reference payer, the Claim + identifier has no type, and the message text that comes with the code tells them + apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.claim-submit + - nhcx.flow.preauth-enhancement + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit +--- + +# PAYR-1012: the claim amount is more than the approved preauthorisation amount, or the Claim identifier has no type + +## In plain words + +PAYR-1012 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the claim amount is more than the approved preauthorisation amount. +- From the [PMJAY](../glossary/pmjay.md) payer: the Claim identifier has no type. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1012 for claims. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Claim amount requested is more than the preauthorization approved amount.` | A payer using the standard payer codes | The claim amount is more than the approved preauthorisation amount. | +| `No type found for claim component identifier. Hence request will not be processed further.` | The PMJAY payer | The Claim identifier has no type. | + +### When the standard meaning applies + +- The total claimed is higher than the amount the preauthorisation approved. + +### When the PMJAY meaning applies + +- The Claim resource's `identifier` has no `type`. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +### If the text reads `Claim amount requested is more than the preauthorization approved amount` + +1. Compare the claimed total with the approved amount in the preauthorisation's `ClaimResponse`. +2. Reduce the claim to the approved amount, or obtain an enhancement first. See [Request a preauthorisation enhancement](../flows/preauth-enhancement.md). +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). + +### If the text reads `No type found for claim component identifier` + +1. Give the Claim resource's `identifier` a `type`. +2. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1013.md b/catalogue/nhcx/errors/payr-1013.md new file mode 100644 index 000000000..4ca639aa3 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1013.md @@ -0,0 +1,91 @@ +--- +id: nhcx.error.payr-1013 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1013: the procedures or packages have no prior approval, or the provider + Organization resource has no identifier' +summary: >- + PAYR-1013 means one of two things, the procedures or packages have no prior approval + or, from the national scheme's reference payer, the provider Organization resource + has no identifier, and the message text that comes with the code tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + glossary: + - shared.glossary.hfr +--- + +# PAYR-1013: the procedures or packages have no prior approval, or the provider Organization resource has no identifier + +## In plain words + +PAYR-1013 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the procedures or packages have no prior approval. +- From the [PMJAY](../glossary/pmjay.md) payer: the provider Organization resource has no identifier. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/preauth/on_submit` or `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1013 for enhancements and claims. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `No prior approval for the requested procedures/packages obtained.` | A payer using the standard payer codes | The procedures or packages have no prior approval. | +| `No identifier found for organization component for provider. Hence request will not be processed further.` | The PMJAY payer | The provider Organization resource has no identifier. | + +### When the standard meaning applies + +- The request includes a procedure or package that the preauthorisation did not approve. + +### When the PMJAY meaning applies + +- The provider's Organization resource in the bundle has no `identifier`. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a preauthorisation, `/v1/preauth/on_submit` arrives with no `x-hcx-error_details`. Its `x-hcx-workflow_id` names the decision, for example `21` approved or `24` queried. +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +### If the text reads `No prior approval for the requested procedures/packages obtained` + +1. Claim or enhance only procedures and packages the preauthorisation approved. +2. Obtain approval for any other procedure first. See [Submit a preauthorisation](../flows/preauth-submit.md). +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). + +### If the text reads `No identifier found for organization component for provider` + +1. Add an `identifier` to the provider Organization resource. Send your [HFR](../../shared/glossary/hfr.md) ID as that identifier, with type code `NPI`. +2. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1014.md b/catalogue/nhcx/errors/payr-1014.md new file mode 100644 index 000000000..637068737 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1014.md @@ -0,0 +1,95 @@ +--- +id: nhcx.error.payr-1014 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1014: the date of birth is after the date of service, or the provider + Organization identifier has no type' +summary: >- + PAYR-1014 means one of two things, the date of birth is after the date of service + or, from the national scheme's reference payer, the provider Organization identifier + has no type, and the message text that comes with the code tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + glossary: + - shared.glossary.hfr +--- + +# PAYR-1014: the date of birth is after the date of service, or the provider Organization identifier has no type + +## In plain words + +PAYR-1014 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the date of birth is after the date of service. +- From the [PMJAY](../glossary/pmjay.md) payer: the provider Organization identifier has no type. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/coverageeligibility/on_check`, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1014 for coverage eligibility, preauthorisation and claim. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Date of birth of the beneficiary can not be after date of service.` | A payer using the standard payer codes | The date of birth is after the date of service. | +| `No type found for organization component identifier for provider. Hence request will not be processed further.` | The PMJAY payer | The provider Organization identifier has no type. | + +### When the standard meaning applies + +- The Patient `birthDate` is later than a service date in the request. +- One of the two dates was entered wrongly. + +### When the PMJAY meaning applies + +- The provider Organization resource's `identifier` has no `type`. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a coverage eligibility check, `/v1/coverageeligibility/on_check` arrives for your `x-hcx-correlation_id` with no `x-hcx-error_details`. +- For a preauthorisation, `/v1/preauth/on_submit` arrives with no `x-hcx-error_details`. Its `x-hcx-workflow_id` names the decision, for example `21` approved or `24` queried. +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +### If the text reads `Date of birth of the beneficiary can not be after date of service` + +1. Check the Patient `birthDate` and every service date in the request. +2. Correct whichever date is wrong. +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). + +### If the text reads `No type found for organization component identifier for provider` + +1. Give the provider Organization identifier a `type`. For the [HFR](../../shared/glossary/hfr.md) ID, the type code is `NPI`. +2. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1015.md b/catalogue/nhcx/errors/payr-1015.md new file mode 100644 index 000000000..d6652a5ab --- /dev/null +++ b/catalogue/nhcx/errors/payr-1015.md @@ -0,0 +1,84 @@ +--- +id: nhcx.error.payr-1015 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1015: the date of service is after the date of death, or the payer + Organization resource has no identifier' +summary: >- + PAYR-1015 means one of two things, the date of service is after the date of death + or, from the national scheme's reference payer, the payer Organization resource + has no identifier, and the message text that comes with the code tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit +--- + +# PAYR-1015: the date of service is after the date of death, or the payer Organization resource has no identifier + +## In plain words + +PAYR-1015 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the date of service is after the date of death. +- From the [PMJAY](../glossary/pmjay.md) payer: the payer Organization resource has no identifier. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1015 for claims. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Date of service cannot be after date of death.` | A payer using the standard payer codes | The date of service is after the date of death. | +| `No identifier found for organization component for payer. Hence request will not be processed further.` | The PMJAY payer | The payer Organization resource has no identifier. | + +### When the standard meaning applies + +- A service date in the claim is later than the patient's recorded date of death. + +### When the PMJAY meaning applies + +- The payer's Organization resource in the bundle has no `identifier`. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +### If the text reads `Date of service cannot be after date of death` + +1. Check the service dates and the date of death in the claim. +2. Correct whichever date is wrong. +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). + +### If the text reads `No identifier found for organization component for payer` + +1. Add an `identifier` to the payer Organization resource. +2. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1016.md b/catalogue/nhcx/errors/payr-1016.md new file mode 100644 index 000000000..80deff7c9 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1016.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1016 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1016: the claim duplicates one already submitted for the same services + and dates, or the payer Organization identifier has no type' +summary: >- + PAYR-1016 means one of two things, the claim duplicates one already submitted + for the same services and dates or, from the national scheme's reference payer, + the payer Organization identifier has no type, and the message text that comes + with the code tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.claim-submit + - nhcx.flow.status-check + - nhcx.flow.claim-search + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit +--- + +# PAYR-1016: the claim duplicates one already submitted for the same services and dates, or the payer Organization identifier has no type + +## In plain words + +PAYR-1016 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the claim duplicates one already submitted for the same services and dates. +- From the [PMJAY](../glossary/pmjay.md) payer: the payer Organization identifier has no type. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1016 for claims. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Duplicate claim submitted based on service codes and dates.` | A payer using the standard payer codes | The claim duplicates one already submitted for the same services and dates. | +| `No type found for organization component identifier for payer. Hence request will not be processed further.` | The PMJAY payer | The payer Organization identifier has no type. | + +### When the standard meaning applies + +- A claim with the same service codes and dates already exists with the payer. + +### When the PMJAY meaning applies + +- The payer Organization resource's `identifier` has no `type`. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +### If the text reads `Duplicate claim submitted based on service codes and dates` + +1. Check whether you already submitted a claim for these services and dates. See [Search for claims](../flows/claim-search.md). +2. Do not submit it again. Follow the first claim instead. See [Check the status of a request](../flows/status-check.md). + +### If the text reads `No type found for organization component identifier for payer` + +1. Give the payer Organization identifier a `type`. +2. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1017.md b/catalogue/nhcx/errors/payr-1017.md new file mode 100644 index 000000000..c4e3df0ac --- /dev/null +++ b/catalogue/nhcx/errors/payr-1017.md @@ -0,0 +1,97 @@ +--- +id: nhcx.error.payr-1017 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1017: the amount calculations are not correct, or the Task resource + has no task code' +summary: >- + PAYR-1017 means one of two things, the amount calculations are not correct or, + from the national scheme's reference payer, the Task resource has no task code, + and the message text that comes with the code tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.reprocess-and-cancel + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + - nhcx.flow.claim-reprocess + - nhcx.flow.preauth-cancel + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.task-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + - nhcx.callback.task-on-submit + fhir: + - nhcx.fhir.task +--- + +# PAYR-1017: the amount calculations are not correct, or the Task resource has no task code + +## In plain words + +PAYR-1017 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the amount calculations are not correct. +- From the [PMJAY](../glossary/pmjay.md) payer: the Task resource has no task code. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/preauth/on_submit` or `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1017 for preauthorisation and claim. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Amount calculations are not correct. Please verify calculated amount.` | A payer using the standard payer codes | The amount calculations are not correct. | +| `No task code received. Hence request will not be processed further.` | The PMJAY payer | The Task resource has no task code. | + +### When the standard meaning applies + +- An item's net amount does not match its quantity and unit price. +- The total does not match the sum of the items. + +### When the PMJAY meaning applies + +- A task request, such as a reprocess or a cancellation, arrived with no `Task.code`. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a preauthorisation, `/v1/preauth/on_submit` arrives with no `x-hcx-error_details`. Its `x-hcx-workflow_id` names the decision, for example `21` approved or `24` queried. +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. +- For a task, `/v1/task/on_submit` arrives with no `x-hcx-error_details`. + +## When it goes wrong + +### If the text reads `Amount calculations are not correct` + +1. Recompute each item's net amount from its quantity and unit price. +2. Recompute the total from the items. +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). + +### If the text reads `No task code received` + +1. Set `Task.code`, for example `reprocess` or `cancel`. See [Reprocess, cancel and the task resource](../concepts/reprocess-and-cancel.md). +2. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1018.md b/catalogue/nhcx/errors/payr-1018.md new file mode 100644 index 000000000..96eb7466a --- /dev/null +++ b/catalogue/nhcx/errors/payr-1018.md @@ -0,0 +1,96 @@ +--- +id: nhcx.error.payr-1018 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1018: the time limit for submission has expired, or the Task resource + has no reason code' +summary: >- + PAYR-1018 means one of two things, the time limit for submission has expired or, + from the national scheme's reference payer, the Task resource has no reason code, + and the message text that comes with the code tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.reprocess-and-cancel + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.claim-submit + - nhcx.flow.claim-reprocess + - nhcx.flow.preauth-cancel + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.task-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + - nhcx.callback.task-on-submit + fhir: + - nhcx.fhir.task +--- + +# PAYR-1018: the time limit for submission has expired, or the Task resource has no reason code + +## In plain words + +PAYR-1018 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the time limit for submission has expired. +- From the [PMJAY](../glossary/pmjay.md) payer: the Task resource has no reason code. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/preauth/on_submit` or `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1018 for enhancements, resubmissions and claims. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Time limit for submission expired.` | A payer using the standard payer codes | The time limit for submission has expired. | +| `No task reason code received. Hence request will not be processed further.` | The PMJAY payer | The Task resource has no reason code. | + +### When the standard meaning applies + +- You sent the enhancement, resubmission or claim after the payer's deadline for it. + +### When the PMJAY meaning applies + +- A task request arrived with no `Task.reasonCode`. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a preauthorisation, `/v1/preauth/on_submit` arrives with no `x-hcx-error_details`. Its `x-hcx-workflow_id` names the decision, for example `21` approved or `24` queried. +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. +- For a task, `/v1/task/on_submit` arrives with no `x-hcx-error_details`. + +## When it goes wrong + +### If the text reads `Time limit for submission expired` + +1. Submit within the payer's time limit for each stage. +2. For a submission that is already late, contact the payer. Resending it returns the same code. + +### If the text reads `No task reason code received` + +1. Set `Task.reasonCode`, for example `claimrejected` for a reprocess, or a cancellation reason such as `patientrequest`. The input, code and reason code must form a valid combination. +2. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1019.md b/catalogue/nhcx/errors/payr-1019.md new file mode 100644 index 000000000..214cfcd81 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1019.md @@ -0,0 +1,92 @@ +--- +id: nhcx.error.payr-1019 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1019: the additional information the payer asked for did not arrive + in time, or a supporting info sequence is not valid' +summary: >- + PAYR-1019 means one of two things, the additional information the payer asked + for did not arrive in time or, from the national scheme's reference payer, a supporting + info sequence is not valid, and the message text that comes with the code tells + them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.queries-and-communication + flows: + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-query-response + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit +--- + +# PAYR-1019: the additional information the payer asked for did not arrive in time, or a supporting info sequence is not valid + +## In plain words + +PAYR-1019 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the additional information the payer asked for did not arrive in time. +- From the [PMJAY](../glossary/pmjay.md) payer: a supporting info sequence is not valid. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/preauth/on_submit` or `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1019 for queries on preauthorisations and claims. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Requested additional information was not received or was not received within time limit` | A payer using the standard payer codes | The additional information the payer asked for did not arrive in time. | +| `Invalid sequence received in supporting info element. Hence request will not be processed further.` | The PMJAY payer | A supporting info sequence is not valid. | + +### When the standard meaning applies + +- The payer queried the case, and your answer did not arrive, or arrived after the time limit. + +### When the PMJAY meaning applies + +- A `supportingInfo` entry has a missing or repeated `sequence`, or an item refers to a sequence that does not exist. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a preauthorisation, `/v1/preauth/on_submit` arrives with no `x-hcx-error_details`. Its `x-hcx-workflow_id` names the decision, for example `21` approved or `24` queried. +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +### If the text reads `Requested additional information was not received or was not received within time limit` + +1. Answer each payer query within the time limit, with every document asked for. See [Answer a payer query on a preauthorisation](../flows/preauth-query-response.md) and [Answer a payer query on a claim](../flows/claim-query-response.md). +2. For a query already past its limit, contact the payer. + +### If the text reads `Invalid sequence received in supporting info element` + +1. Number each `supportingInfo` entry with a unique `sequence`. +2. Use those numbers wherever the bundle refers to a supporting info entry. +3. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1020.md b/catalogue/nhcx/errors/payr-1020.md new file mode 100644 index 000000000..74f356e32 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1020.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1020 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1020: the payer holds no valid bank details for your facility, or a + supporting info category is not valid' +summary: >- + PAYR-1020 means one of two things, the payer holds no valid bank details for your + facility or, from the national scheme's reference payer, a supporting info category + is not valid, and the message text that comes with the code tells them apart. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Payer Error Codes, Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.payment-notice + - nhcx.flow.claim-submit + callbacks: + - nhcx.callback.paymentnotice-request + - nhcx.callback.claim-on-submit + endpoints: + - nhcx.endpoint.claim-submit +--- + +# PAYR-1020: the payer holds no valid bank details for your facility, or a supporting info category is not valid + +## In plain words + +PAYR-1020 has two meanings, depending on which payer sent it: + +- From a payer using the standard payer codes: the payer holds no valid bank details for your facility. +- From the [PMJAY](../glossary/pmjay.md) payer: a supporting info category is not valid. + +Read the code together with the message text that comes with it. The text tells the two apart. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md), and the payer answered it with an error. The answer arrives on the `on_` path paired with your request, such as `/v1/claim/on_submit`. `x-hcx-status` marks it as an error. `x-hcx-error_details` carries the code in `code` and the text in `message`. + +Read these fields from the protected header once you open the [JWE](../glossary/jwe.md). Some payers send the same fields in a plain `ProtocolResponse` body instead. Handle both. + +A payer using the standard payer codes sends PAYR-1020 for payment. + +## What happens + +| Message text | Sent by | Meaning | +|---|---|---| +| `Unable to process payment as no valid bank details found for the provider.` | A payer using the standard payer codes | The payer holds no valid bank details for your facility. | +| `Invalid category received in supporting info element for sequence %s. Hence request will not be processed further.` | The PMJAY payer | A supporting info category is not valid. | + +### When the standard meaning applies + +- The payer has no bank details for your facility, or the details it holds are not valid. + +### When the PMJAY meaning applies + +- The `supportingInfo` entry named in the message has a missing or unknown `category`. The payer puts the entry's sequence number in place of `%s`. + +## How you know it worked + +Send the corrected request. The step is done when the payer answers without this code: + +- For a payment, the payer's payment exchange for the claim completes without `x-hcx-error_details`. +- For a claim, `/v1/claim/on_submit` arrives with no `x-hcx-error_details`, and its bundle carries a `ClaimResponse`. + +## When it goes wrong + +### If the text reads `Unable to process payment as no valid bank details found for the provider` + +1. Contact the payer to register or correct your facility's bank details. +2. Payment for the claim can go ahead once the payer holds valid details. + +### If the text reads `Invalid category received in supporting info element for sequence %s` + +1. Set `category` on the entry named in the message to a code from https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-category.html. +2. Send the request again with a fresh `x-hcx-correlation_id`. Reusing the old one returns [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1021.md b/catalogue/nhcx/errors/payr-1021.md new file mode 100644 index 000000000..5fa8e8030 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1021.md @@ -0,0 +1,122 @@ +--- +id: nhcx.error.payr-1021 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1021, a supporting info entry has an invalid code +summary: >- + The payer rejected your preauthorisation or claim because one supporting information + entry carries a code that does not fit it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + - nhcx.fhir.terminologies + errors: + - nhcx.error.payr-1019 + - nhcx.error.payr-1020 + - nhcx.error.payr-1095 + - nhcx.error.payr-1098 + - nhcx.error.payr-1099 + - nhcx.error.payr-1502 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1021, a supporting info entry has an invalid code + +## In plain words + +Your [FHIR](../../shared/glossary/fhir.md) bundle lists supporting information, such as dates, discharge details and documents. Each entry has a category and a code. The payer rejected the request because one entry's code is not valid for it. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1021`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1021` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid code received in supporting info element for sequence `%s`. Hence request will not be processed further. + +The payer puts the `sequence` of the rejected supporting info entry in place of `%s`. + +The payer returns this code when: + +- An entry in `Claim.supportingInfo` has no `code`, or its `code` is not one the payer accepts. +- The `code` does not belong with the entry's `category`. A discharge date, for example, needs category `ONS` with code `DSDE`. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1021`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Find the `Claim.supportingInfo` entry whose `sequence` matches the number in the message. +2. Check its `category` and `code` as a pair. The payer reads these pairs: + +| Content | `category` | `code` | +|---|---|---| +| Registration date | `OTH` | `EDT` | +| Admission date | `ONS` | `ADDD` | +| Surgery date | `ONS` | `PSP` | +| Discharge date | `ONS` | `DSDE` | +| Death date | `ONS` | `DTM` | +| Discharge information | `DIS` | `LAMA`, `DAMA`, `DTH` or `DTM` | +| Case remarks in a query response | `NMI` | `CQD` | +| Reference to a policy or case QuestionnaireResponse | `INF` | `ODN` | + +3. Take codes from the [NRCeS](../../shared/glossary/nrces.md) supporting info code value set, `https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-code.html`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1019](payr-1019.md), [PAYR-1020](payr-1020.md), [PAYR-1095](payr-1095.md), [PAYR-1098](payr-1098.md), [PAYR-1099](payr-1099.md) and [PAYR-1502](payr-1502.md). diff --git a/catalogue/nhcx/errors/payr-1023.md b/catalogue/nhcx/errors/payr-1023.md new file mode 100644 index 000000000..5afa38090 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1023.md @@ -0,0 +1,105 @@ +--- +id: nhcx.error.payr-1023 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1023, a procedure has an invalid category +summary: >- + The payer rejected your preauthorisation or claim because a procedure in it has + a missing or unaccepted category. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + - nhcx.fhir.terminologies + errors: + - nhcx.error.payr-1024 + - nhcx.error.payr-1025 + - nhcx.error.payr-1041 + - nhcx.error.payr-1042 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1023, a procedure has an invalid category + +## In plain words + +Your [FHIR](../../shared/glossary/fhir.md) bundle describes each procedure in a Procedure resource. The payer rejected the request because a procedure's category is missing or not one it accepts. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1023`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1023` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid procedure category received for procedure component. Hence request will not be processed further. + +The payer returns this code when: + +- A Procedure resource in the bundle has no `category`. +- The `category` coding is not one the payer accepts. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1023`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Open each Procedure resource in the bundle. +2. Give it a `category` coding. The sample bundles use code `Stratification` with system `http://hl7.org/fhir/ValueSet/procedure-category`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1024](payr-1024.md), [PAYR-1025](payr-1025.md), [PAYR-1041](payr-1041.md) and [PAYR-1042](payr-1042.md). diff --git a/catalogue/nhcx/errors/payr-1024.md b/catalogue/nhcx/errors/payr-1024.md new file mode 100644 index 000000000..092d2188d --- /dev/null +++ b/catalogue/nhcx/errors/payr-1024.md @@ -0,0 +1,104 @@ +--- +id: nhcx.error.payr-1024 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1024, a procedure has an invalid status +summary: >- + The payer rejected your preauthorisation or claim because a procedure in it has + a missing or unaccepted status. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1023 + - nhcx.error.payr-1025 + - nhcx.error.payr-1210 + - nhcx.error.payr-1345 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1024, a procedure has an invalid status + +## In plain words + +Your [FHIR](../../shared/glossary/fhir.md) bundle describes each procedure in a Procedure resource, with a status. The payer rejected the request because a procedure's status is missing or not valid. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1024`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1024` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid procedure status received for procedure component. Hence request will not be processed further. + +The payer returns this code when: + +- A Procedure resource in the bundle has no `status`. +- The `status` is not a code the payer accepts. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1024`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Open each Procedure resource in the bundle. +2. Set `Procedure.status`. The sample preauthorisation and claim bundles use `preparation`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1023](payr-1023.md), [PAYR-1025](payr-1025.md), [PAYR-1210](payr-1210.md) and [PAYR-1345](payr-1345.md). diff --git a/catalogue/nhcx/errors/payr-1025.md b/catalogue/nhcx/errors/payr-1025.md new file mode 100644 index 000000000..54d42dbcc --- /dev/null +++ b/catalogue/nhcx/errors/payr-1025.md @@ -0,0 +1,103 @@ +--- +id: nhcx.error.payr-1025 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1025, a procedure has an invalid sequence +summary: >- + The payer rejected your preauthorisation or claim because it cannot read a valid + sequence number for one of its procedures. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1026 + - nhcx.error.payr-1028 + - nhcx.error.payr-1072 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1025, a procedure has an invalid sequence + +## In plain words + +A claim in a [FHIR](../../shared/glossary/fhir.md) bundle lists its procedures with sequence numbers. Items point at procedures by that number. The payer rejected the request because a procedure's sequence is missing or not valid. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1025`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1025` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid procedure sequence received for procedure component. Hence request will not be processed further. + +The payer returns this code when: + +- An entry in `Claim.procedure` has no `sequence`. +- The `sequence` is not a positive whole number, or two procedures share one. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1025`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Number the `Claim.procedure` entries from 1 in `sequence`, one number per procedure. +2. Make each item's `procedureSequence` name one of those numbers. The sample preauthorisation bundle sets `procedureSequence` to 1 on its item. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1026](payr-1026.md), [PAYR-1028](payr-1028.md) and [PAYR-1072](payr-1072.md). diff --git a/catalogue/nhcx/errors/payr-1026.md b/catalogue/nhcx/errors/payr-1026.md new file mode 100644 index 000000000..85c901966 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1026.md @@ -0,0 +1,105 @@ +--- +id: nhcx.error.payr-1026 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1026, the claim references a procedure that is not in the bundle +summary: >- + The payer rejected your preauthorisation or claim because the claim points at + a procedure record that the bundle does not contain. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1040 + - nhcx.error.payr-1072 + - nhcx.error.payr-1086 + - nhcx.error.payr-1087 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1026, the claim references a procedure that is not in the bundle + +## In plain words + +The Claim resource in your [FHIR](../../shared/glossary/fhir.md) bundle points at each procedure through a reference. The payer rejected the request because one of those references finds no Procedure resource in the bundle. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1026`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1026` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> No procedure component found for reference in claim component. Hence request will not be processed further. + +The payer returns this code when: + +- A `Claim.procedure` entry has a `procedureReference` whose target is not an entry in the bundle. +- The target exists, but its `fullUrl` does not match the reference. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1026`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. List the `procedureReference` values in `Claim.procedure`. +2. For each one, add the Procedure resource to the bundle, or correct the reference. +3. Make the reference resolve to the Procedure entry's `fullUrl`. The sample bundles pair `procedureReference` `procedure/1` with a Procedure entry whose `fullUrl` ends in `claim/procedure/1`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1040](payr-1040.md), [PAYR-1072](payr-1072.md), [PAYR-1086](payr-1086.md) and [PAYR-1087](payr-1087.md). diff --git a/catalogue/nhcx/errors/payr-1027.md b/catalogue/nhcx/errors/payr-1027.md new file mode 100644 index 000000000..ed20816b7 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1027.md @@ -0,0 +1,102 @@ +--- +id: nhcx.error.payr-1027 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1027, a claim item has an invalid id +summary: >- + The payer rejected your preauthorisation or claim because one of the billed items + has a missing or unreadable id. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1028 + - nhcx.error.payr-1045 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1027, a claim item has an invalid id + +## In plain words + +Each billed item in the Claim resource of your [FHIR](../../shared/glossary/fhir.md) bundle carries an id. The payer rejected the request because an item's id is missing or not valid. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1027`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1027` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid item id found for item in claim component. Hence request will not be processed further. + +The payer returns this code when: + +- A `Claim.item` entry has no `id`. +- The `id` is empty or not in a form the payer reads. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1027`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Open each entry in `Claim.item`. +2. Give it an `id`. The sample preauthorisation bundle gives its first item the id `Item/1`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1028](payr-1028.md) and [PAYR-1045](payr-1045.md). diff --git a/catalogue/nhcx/errors/payr-1028.md b/catalogue/nhcx/errors/payr-1028.md new file mode 100644 index 000000000..9dc73862c --- /dev/null +++ b/catalogue/nhcx/errors/payr-1028.md @@ -0,0 +1,104 @@ +--- +id: nhcx.error.payr-1028 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1028, a claim item has an invalid sequence +summary: >- + The payer rejected your preauthorisation or claim because one of the billed items + has a missing or unreadable sequence number. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1027 + - nhcx.error.payr-1025 + - nhcx.error.payr-1081 + - nhcx.error.payr-1361 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1028, a claim item has an invalid sequence + +## In plain words + +Each billed item in the Claim resource of your [FHIR](../../shared/glossary/fhir.md) bundle carries a sequence number. The payer rejected the request because an item's sequence is missing or not valid. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1028`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1028` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid item sequence received for item in claim component. Hence request will not be processed further. + +The payer returns this code when: + +- A `Claim.item` entry has no `sequence`. +- The `sequence` is not a positive whole number, or two items share one. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1028`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Number the `Claim.item` entries from 1 in `sequence`, one number per item. +2. Keep the item's `careTeamSequence`, `diagnosisSequence` and `procedureSequence` pointing at real entries. The sample preauthorisation bundle gives its only item sequence 1. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1027](payr-1027.md), [PAYR-1025](payr-1025.md), [PAYR-1081](payr-1081.md) and [PAYR-1361](payr-1361.md). diff --git a/catalogue/nhcx/errors/payr-1029.md b/catalogue/nhcx/errors/payr-1029.md new file mode 100644 index 000000000..e2285dfdd --- /dev/null +++ b/catalogue/nhcx/errors/payr-1029.md @@ -0,0 +1,106 @@ +--- +id: nhcx.error.payr-1029 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1029, the bundle id is invalid +summary: >- + The payer rejected your request because the outer bundle that carries it has a + missing or unreadable id. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.collection-bundle + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + errors: + - nhcx.error.payr-1031 + - nhcx.error.payr-1049 + - nhcx.error.payr-1004 + - nhcx.error.payr-1008 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1029, the bundle id is invalid + +## In plain words + +Every request carries one [FHIR](../../shared/glossary/fhir.md) bundle, and the bundle has an id. The payer rejected the request because the bundle's id is missing or not valid. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md) on a use case path, such as `/v1/coverageeligibility/check`, `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired `on_` path, for example `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1029`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1029` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid bundle id received for FHIR bundle. Hence request will not be processed further. + +The payer returns this code when: + +- The bundle has no `id`. +- The `id` is empty or not a valid FHIR id. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on the `on_` path paired with the one you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1029`. The decrypted payload is the response bundle for your use case, such as a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Set `Bundle.id` on the outer bundle. +2. Use a plain identifier. The sample bundles use ids such as `PreAuth` and `CLAIM`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare your bundle with the [collection bundle](../fhir/collection-bundle.md) and the bundle for your use case. If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1031](payr-1031.md), [PAYR-1049](payr-1049.md), [PAYR-1004](payr-1004.md) and [PAYR-1008](payr-1008.md). diff --git a/catalogue/nhcx/errors/payr-1030.md b/catalogue/nhcx/errors/payr-1030.md new file mode 100644 index 000000000..edadd7807 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1030.md @@ -0,0 +1,109 @@ +--- +id: nhcx.error.payr-1030 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1030, a questionnaire id in the bundle is invalid +summary: >- + The payer rejected your preauthorisation or claim because the id of a questionnaire + answer in it is not valid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + - nhcx.fhir.pmjay-insurance-plan + - nhcx.fhir.insurance-plan-bundle + errors: + - nhcx.error.payr-1084 + - nhcx.error.payr-1085 + - nhcx.error.payr-1505 + - nhcx.error.payr-1365 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1030, a questionnaire id in the bundle is invalid + +## In plain words + +Some policies ask the provider to answer questionnaires. The answers travel as QuestionnaireResponse resources in the [FHIR](../../shared/glossary/fhir.md) bundle. The payer rejected the request because a questionnaire id in the bundle is not valid. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1030`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1030` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid questionnaire id received in FHIR bundle for questionnaire component. Hence request will not be processed further. + +The payer returns this code when: + +- A QuestionnaireResponse entry has no `id`, or its `id` is not valid. +- The questionnaire it answers is not one published in the [insurance plan](../glossary/insurance-plan.md) for the policy. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1030`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Fetch the insurance plan for the policy. See [request an insurance plan](../flows/insurance-plan-request.md). +2. Take questionnaire ids from the plan. Do not build them yourself. +3. Give each QuestionnaireResponse a valid `id`. +4. Reference it from `Claim.supportingInfo` with category `INF` and code `ODN`. For a questionnaire tied to a procedure code, use category `STG`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1084](payr-1084.md), [PAYR-1085](payr-1085.md), [PAYR-1505](payr-1505.md) and [PAYR-1365](payr-1365.md). diff --git a/catalogue/nhcx/errors/payr-1031.md b/catalogue/nhcx/errors/payr-1031.md new file mode 100644 index 000000000..7aeefec1d --- /dev/null +++ b/catalogue/nhcx/errors/payr-1031.md @@ -0,0 +1,106 @@ +--- +id: nhcx.error.payr-1031 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1031, a bundle entry has an invalid URL +summary: >- + The payer rejected your request because one of the entries in its bundle has a + missing or unreadable address. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.collection-bundle + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + errors: + - nhcx.error.payr-1040 + - nhcx.error.payr-1029 + - nhcx.error.payr-1026 + - nhcx.error.payr-1048 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1031, a bundle entry has an invalid URL + +## In plain words + +Every resource in a [FHIR](../../shared/glossary/fhir.md) bundle sits in an entry with a full URL. References between resources use that URL. The payer rejected the request because an entry's URL is missing or not valid. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md) on a use case path, such as `/v1/coverageeligibility/check`, `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired `on_` path, for example `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1031`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1031` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid url received for bundle entry in FHIR bundle. Hence request will not be processed further. Please reach out to technical team. + +The payer returns this code when: + +- A `Bundle.entry` has no `fullUrl`. +- The `fullUrl` is not an absolute URL or a `urn:uuid:` value. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on the `on_` path paired with the one you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1031`. The decrypted payload is the response bundle for your use case, such as a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Give every entry a `fullUrl`. The sample bundles use either an `https://` URL or a `urn:uuid:` value. +2. Make every reference in the bundle match the `fullUrl` of the entry it points at. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare your bundle with the [collection bundle](../fhir/collection-bundle.md) and the bundle for your use case. If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1040](payr-1040.md), [PAYR-1029](payr-1029.md), [PAYR-1026](payr-1026.md) and [PAYR-1048](payr-1048.md). diff --git a/catalogue/nhcx/errors/payr-1032.md b/catalogue/nhcx/errors/payr-1032.md new file mode 100644 index 000000000..8f634a796 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1032.md @@ -0,0 +1,97 @@ +--- +id: nhcx.error.payr-1032 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1032, the eligibility check has an invalid purpose +summary: >- + The payer rejected your eligibility check because it does not say, in a form the + payer accepts, what you want to know. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.coverage-eligibility-purposes + flows: + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + decisions: + - nhcx.decision.eligibility-purpose + errors: + - nhcx.error.payr-1033 + - nhcx.error.payr-1101 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1032, the eligibility check has an invalid purpose + +## In plain words + +A coverage eligibility check states what the provider wants to know, in its purpose. The payer rejected the check because the purpose in your [FHIR](../../shared/glossary/fhir.md) bundle is missing or not one it supports. + +## Before you start + +You sent a [coverage eligibility](../glossary/coverage-eligibility.md) check through [NHCX](../../shared/glossary/nhcx.md), on `/v1/coverageeligibility/check`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on `/v1/coverageeligibility/on_check`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1032`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1032` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid purpose received for coverage eligibility request. Hence request will not be processed further. Please try again with valid purpose details. + +The payer returns this code when: + +- `CoverageEligibilityRequest.purpose` is empty or absent. +- It carries a value other than `auth-requirements`, `benefits` or `validation`. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected check with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/coverageeligibility/on_check` with your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1032`. The decrypted payload is a CoverageEligibilityResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Set `CoverageEligibilityRequest.purpose` to `auth-requirements`, `benefits` or `validation`. +2. Choose by what you need to learn. See [which purpose to send](../decisions/eligibility-purpose.md). + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare your request with the [coverage eligibility request bundle](../fhir/coverage-eligibility-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1033](payr-1033.md) and [PAYR-1101](payr-1101.md). diff --git a/catalogue/nhcx/errors/payr-1033.md b/catalogue/nhcx/errors/payr-1033.md new file mode 100644 index 000000000..191219748 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1033.md @@ -0,0 +1,97 @@ +--- +id: nhcx.error.payr-1033 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1033, the eligibility check has no items for its purpose +summary: >- + The payer rejected your eligibility check because it asks about treatment but + lists no treatment items. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.coverage-eligibility-purposes + flows: + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + decisions: + - nhcx.decision.eligibility-purpose + errors: + - nhcx.error.payr-1032 + - nhcx.error.payr-1107 + - nhcx.error.payr-1118 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1033, the eligibility check has no items for its purpose + +## In plain words + +Some eligibility questions are about a specific package or treatment. The [FHIR](../../shared/glossary/fhir.md) bundle names it in an item. The payer rejected the check because the purpose needs items and the check carries none. + +## Before you start + +You sent a [coverage eligibility](../glossary/coverage-eligibility.md) check through [NHCX](../../shared/glossary/nhcx.md), on `/v1/coverageeligibility/check`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on `/v1/coverageeligibility/on_check`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1033`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1033` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> No items received for coverage eligibility purpose. Since items are mandatory for the requested purpose, hence request will not be processed further. Please try again with valid item details. + +The payer returns this code when: + +- The purpose you sent needs items, and `CoverageEligibilityRequest.item` is empty or absent. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected check with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/coverageeligibility/on_check` with your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1033`. The decrypted payload is a CoverageEligibilityResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Add at least one `item` to the CoverageEligibilityRequest. +2. Name the package you are asking about in that item. The sample checks name the package this way. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare your request with the [coverage eligibility request bundle](../fhir/coverage-eligibility-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1032](payr-1032.md), [PAYR-1107](payr-1107.md) and [PAYR-1118](payr-1118.md). diff --git a/catalogue/nhcx/errors/payr-1034.md b/catalogue/nhcx/errors/payr-1034.md new file mode 100644 index 000000000..85a536374 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1034.md @@ -0,0 +1,106 @@ +--- +id: nhcx.error.payr-1034 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1034, a procedure code is invalid +summary: >- + The payer rejected your preauthorisation or claim because a procedure code in + it is not one the payer accepts. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + - nhcx.fhir.pmjay-insurance-plan + errors: + - nhcx.error.payr-1204 + - nhcx.error.payr-1106 + - nhcx.error.payr-1344 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1034, a procedure code is invalid + +## In plain words + +Each procedure and billed item in your [FHIR](../../shared/glossary/fhir.md) bundle names a package by its code. The payer rejected the request because a procedure code is not valid. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1034`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1034` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid procedure code received. Please try again with valid procedure details. + +The payer returns this code when: + +- A procedure code in the bundle is empty. +- The code is not a package code the payer offers under the policy. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1034`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Fetch the insurance plan for the policy. See [request an insurance plan](../flows/insurance-plan-request.md). +2. Take procedure codes from the plan. The procedure code is the code of each benefit's type, under the plan's specific cost. +3. Use the same code in `Procedure.code` and in the item's `productOrService`, as the sample bundles do. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1204](payr-1204.md), [PAYR-1106](payr-1106.md) and [PAYR-1344](payr-1344.md). diff --git a/catalogue/nhcx/errors/payr-1035.md b/catalogue/nhcx/errors/payr-1035.md new file mode 100644 index 000000000..d0d4e6bf0 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1035.md @@ -0,0 +1,108 @@ +--- +id: nhcx.error.payr-1035 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1035, the policy code is invalid +summary: >- + The payer rejected your request because the insurance policy it names is not one + the payer recognises. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.insuranceplan-request + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + - nhcx.callback.insuranceplan-on-request + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.insurance-plan-bundle + errors: + - nhcx.error.payr-1117 + - nhcx.error.payr-1402 + - nhcx.error.payr-1006 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1035, the policy code is invalid + +## In plain words + +Every request names the insurance policy it is made under. The payer rejected the request because the policy code in your [FHIR](../../shared/glossary/fhir.md) bundle is not valid. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md) that names a policy, such as `/v1/coverageeligibility/check`, `/v1/preauth/submit`, `/v1/claim/submit` or `/v1/insuranceplan/request`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired `on_` path, for example `/v1/insuranceplan/on_request`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1035`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1035` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid policy code received. Please try again with valid policy details. + +The payer returns this code when: + +- The policy code in the request is empty. +- The payer holds no policy with that code. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on the `on_` path paired with the one you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1035`. The decrypted payload is the response bundle for your use case, such as a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Check the policy details in the Coverage resource of your bundle. +2. For an insurance plan request, check the `PolicyNumber` input of the Task. +3. Correct the code, then resend. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare your request with the [coverage eligibility request bundle](../fhir/coverage-eligibility-request.md), the [claim request bundle](../fhir/claim-request.md) or the [insurance plan bundles](../fhir/insurance-plan-bundle.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1117](payr-1117.md), [PAYR-1402](payr-1402.md) and [PAYR-1006](payr-1006.md). diff --git a/catalogue/nhcx/errors/payr-1036.md b/catalogue/nhcx/errors/payr-1036.md new file mode 100644 index 000000000..1140ffcc0 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1036.md @@ -0,0 +1,106 @@ +--- +id: nhcx.error.payr-1036 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1036, a supporting info entry lacks a valid attachment +summary: >- + The payer rejected your preauthorisation or claim because a supporting document + entry does not carry a usable document. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1046 + - nhcx.error.payr-1047 + - nhcx.error.payr-1048 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1036, a supporting info entry lacks a valid attachment + +## In plain words + +Some supporting information entries in your [FHIR](../../shared/glossary/fhir.md) bundle carry a document, such as a clinical note or a report. The payer rejected the request because an entry that must carry a document has no valid attachment. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1036`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1036` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid attachment received in supporting info with sequence number `%s`. Please try again with valid attachment details as attachment value is expected. If issue is not resolved, please reach out to technical team. + +The payer puts the `sequence` of the rejected supporting info entry in place of `%s`. + +The payer returns this code when: + +- The entry named in the message has no `valueAttachment`. +- The entry carries a string or a reference where the payer expects a document. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1036`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Find the `Claim.supportingInfo` entry whose `sequence` matches the number in the message. +2. Put the document in `valueAttachment`. Encode it as Base64 in `data`, give it a non-empty `title`, and set `contentType`. +3. Use an accepted content type: `application/pdf`, `application/jpg`, `application/jpeg`, `application/png` or `application/fhir+json`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1046](payr-1046.md), [PAYR-1047](payr-1047.md) and [PAYR-1048](payr-1048.md). diff --git a/catalogue/nhcx/errors/payr-1037.md b/catalogue/nhcx/errors/payr-1037.md new file mode 100644 index 000000000..efeb5ef8b --- /dev/null +++ b/catalogue/nhcx/errors/payr-1037.md @@ -0,0 +1,90 @@ +--- +id: nhcx.error.payr-1037 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1037, the communication has no identifier +summary: >- + The payer rejected your answer to its communication request because the message + in it carries no identifier. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.queries-and-communication + endpoints: + - nhcx.endpoint.communication-on-request + callbacks: + - nhcx.callback.communication-request + fhir: + - nhcx.fhir.collection-bundle + errors: + - nhcx.error.payr-1038 + - nhcx.error.payr-1039 + - nhcx.error.payr-1520 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1037, the communication has no identifier + +## In plain words + +When a payer sends a communication request, you answer with a [FHIR](../../shared/glossary/fhir.md) bundle that carries a Communication resource. The payer rejected your answer because the Communication resource has no identifier. + +## Before you start + +The [payer](../glossary/payer.md) sent you a [communication request](../glossary/communication-request.md) on `/v1/communication/request`. You answered through [NHCX](../../shared/glossary/nhcx.md) on `/v1/communication/on_request`, with an acknowledgement bundle that carries a Communication resource. + +The payer could not read that Communication resource and rejected your acknowledgement. The rejection carries: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1037`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1037` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> No identifier found for communication component. Hence request will not be processed further. + +The payer returns this code when: + +- The Communication resource in your acknowledgement bundle has no `identifier`. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected acknowledgement bundle on `/v1/communication/on_request`. NHCX answers with 202. + +No rejection with `x-hcx-status` set to `response.error` and `PAYR-1037` in `x-hcx-error_details` follows for that `x-hcx-correlation_id`. + +## When it goes wrong + +### Fix the bundle + +1. Add an `identifier` to the Communication resource, with a `type`, a `system` and a `value`. +2. The sample acknowledgement uses identifier type `MR`. + +### Send it again + +1. Send the corrected acknowledgement bundle on `/v1/communication/on_request`. +2. Keep the `x-hcx-correlation_id` of the payer's communication request. The payer links your acknowledgement to its request by that id. + +### If the same code comes back + +Contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1038](payr-1038.md), [PAYR-1039](payr-1039.md) and [PAYR-1520](payr-1520.md). diff --git a/catalogue/nhcx/errors/payr-1038.md b/catalogue/nhcx/errors/payr-1038.md new file mode 100644 index 000000000..4473354c3 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1038.md @@ -0,0 +1,89 @@ +--- +id: nhcx.error.payr-1038 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1038, the communication identifier has no type +summary: >- + The payer rejected your answer to its communication request because the message + identifier in it has no type. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.queries-and-communication + endpoints: + - nhcx.endpoint.communication-on-request + callbacks: + - nhcx.callback.communication-request + fhir: + - nhcx.fhir.collection-bundle + errors: + - nhcx.error.payr-1037 + - nhcx.error.payr-1039 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1038, the communication identifier has no type + +## In plain words + +When a payer sends a communication request, you answer with a [FHIR](../../shared/glossary/fhir.md) bundle that carries a Communication resource. The payer rejected your answer because the Communication resource's identifier has no type. + +## Before you start + +The [payer](../glossary/payer.md) sent you a [communication request](../glossary/communication-request.md) on `/v1/communication/request`. You answered through [NHCX](../../shared/glossary/nhcx.md) on `/v1/communication/on_request`, with an acknowledgement bundle that carries a Communication resource. + +The payer could not read that Communication resource and rejected your acknowledgement. The rejection carries: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1038`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1038` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> No type found for communication component identifier. Hence request will not be processed further. + +The payer returns this code when: + +- An `identifier` on the Communication resource has no `type`. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected acknowledgement bundle on `/v1/communication/on_request`. NHCX answers with 202. + +No rejection with `x-hcx-status` set to `response.error` and `PAYR-1038` in `x-hcx-error_details` follows for that `x-hcx-correlation_id`. + +## When it goes wrong + +### Fix the bundle + +1. Give each Communication `identifier` a `type` coding. +2. The sample acknowledgement uses code `MR`, Medical record number. + +### Send it again + +1. Send the corrected acknowledgement bundle on `/v1/communication/on_request`. +2. Keep the `x-hcx-correlation_id` of the payer's communication request. The payer links your acknowledgement to its request by that id. + +### If the same code comes back + +Contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1037](payr-1037.md) and [PAYR-1039](payr-1039.md). diff --git a/catalogue/nhcx/errors/payr-1039.md b/catalogue/nhcx/errors/payr-1039.md new file mode 100644 index 000000000..9baa290db --- /dev/null +++ b/catalogue/nhcx/errors/payr-1039.md @@ -0,0 +1,90 @@ +--- +id: nhcx.error.payr-1039 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1039, the communication has no payload +summary: >- + The payer rejected your answer to its communication request because the message + in it carries no content. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.queries-and-communication + endpoints: + - nhcx.endpoint.communication-on-request + callbacks: + - nhcx.callback.communication-request + fhir: + - nhcx.fhir.collection-bundle + errors: + - nhcx.error.payr-1037 + - nhcx.error.payr-1038 + - nhcx.error.payr-1520 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1039, the communication has no payload + +## In plain words + +When a payer sends a communication request, you answer with a [FHIR](../../shared/glossary/fhir.md) bundle that carries a Communication resource. The payer rejected your answer because the Communication resource has no payload. + +## Before you start + +The [payer](../glossary/payer.md) sent you a [communication request](../glossary/communication-request.md) on `/v1/communication/request`. You answered through [NHCX](../../shared/glossary/nhcx.md) on `/v1/communication/on_request`, with an acknowledgement bundle that carries a Communication resource. + +The payer could not read that Communication resource and rejected your acknowledgement. The rejection carries: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1039`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1039` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> No payload found for communication component. Hence request will not be processed further. + +The payer returns this code when: + +- The Communication resource has no `payload`. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected acknowledgement bundle on `/v1/communication/on_request`. NHCX answers with 202. + +No rejection with `x-hcx-status` set to `response.error` and `PAYR-1039` in `x-hcx-error_details` follows for that `x-hcx-correlation_id`. + +## When it goes wrong + +### Fix the bundle + +1. Add a `payload` to the Communication resource. +2. Put the content in `payload.contentAttachment`. The acknowledgement must carry it. + +### Send it again + +1. Send the corrected acknowledgement bundle on `/v1/communication/on_request`. +2. Keep the `x-hcx-correlation_id` of the payer's communication request. The payer links your acknowledgement to its request by that id. + +### If the same code comes back + +Contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1037](payr-1037.md), [PAYR-1038](payr-1038.md) and [PAYR-1520](payr-1520.md). diff --git a/catalogue/nhcx/errors/payr-1040.md b/catalogue/nhcx/errors/payr-1040.md new file mode 100644 index 000000000..8f43099a7 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1040.md @@ -0,0 +1,108 @@ +--- +id: nhcx.error.payr-1040 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1040, a reference points at a resource that is not in the bundle +summary: >- + The payer rejected your request because one record in it points at another record + that the bundle does not contain. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.collection-bundle + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + errors: + - nhcx.error.payr-1026 + - nhcx.error.payr-1048 + - nhcx.error.payr-1084 + - nhcx.error.payr-1086 + - nhcx.error.payr-1031 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1040, a reference points at a resource that is not in the bundle + +## In plain words + +Resources in a [FHIR](../../shared/glossary/fhir.md) bundle point at each other through references. The payer rejected the request because a reference points at a resource that is not in the bundle. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md) on a use case path, such as `/v1/coverageeligibility/check`, `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired `on_` path, for example `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1040`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1040` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> No component found for given reference. Hence request will not be processed further. + +The payer returns this code when: + +- A reference in any resource names a target that no `Bundle.entry` carries. +- The target entry exists, but its `fullUrl` does not match the reference. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on the `on_` path paired with the one you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1040`. The decrypted payload is the response bundle for your use case, such as a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Collect every `reference` value in the bundle. +2. Match each one to the `fullUrl` of an entry. +3. Add the missing resource, or correct the reference. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare your bundle with the [collection bundle](../fhir/collection-bundle.md) and the bundle for your use case. If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1026](payr-1026.md), [PAYR-1048](payr-1048.md), [PAYR-1084](payr-1084.md), [PAYR-1086](payr-1086.md) and [PAYR-1031](payr-1031.md). diff --git a/catalogue/nhcx/errors/payr-1041.md b/catalogue/nhcx/errors/payr-1041.md new file mode 100644 index 000000000..af9065baa --- /dev/null +++ b/catalogue/nhcx/errors/payr-1041.md @@ -0,0 +1,102 @@ +--- +id: nhcx.error.payr-1041 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1041, a procedure has no identifier +summary: >- + The payer rejected your preauthorisation or claim because a procedure record in + it carries no identifier. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1042 + - nhcx.error.payr-1023 + - nhcx.error.payr-1024 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1041, a procedure has no identifier + +## In plain words + +Each Procedure resource in your [FHIR](../../shared/glossary/fhir.md) bundle carries an identifier, its serial number. The payer rejected the request because a Procedure resource has no identifier. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1041`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1041` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> No identifier found for procedure component. Hence request will not be processed further. + +The payer returns this code when: + +- A Procedure resource in the bundle has no `identifier`. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1041`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Add an `identifier` to every Procedure resource. +2. The sample bundles use identifier type `SNO`, Serial Number, from the `v2-0203` code system, with system `https://bis.pmjay.gov.in`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1042](payr-1042.md), [PAYR-1023](payr-1023.md) and [PAYR-1024](payr-1024.md). diff --git a/catalogue/nhcx/errors/payr-1042.md b/catalogue/nhcx/errors/payr-1042.md new file mode 100644 index 000000000..da1cde602 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1042.md @@ -0,0 +1,102 @@ +--- +id: nhcx.error.payr-1042 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1042, a procedure identifier has no type +summary: >- + The payer rejected your preauthorisation or claim because a procedure record's + identifier does not say what kind of identifier it is. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1041 + - nhcx.error.payr-1010 + - nhcx.error.payr-1012 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1042, a procedure identifier has no type + +## In plain words + +Each Procedure resource in your [FHIR](../../shared/glossary/fhir.md) bundle carries an identifier with a type. The payer rejected the request because a procedure identifier has no type. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1042`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1042` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> No type found for procedure component identifier. Hence request will not be processed further. + +The payer returns this code when: + +- An `identifier` on a Procedure resource has no `type`. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1042`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Give each Procedure `identifier` a `type` coding. +2. The sample bundles use code `SNO`, Serial Number, from the `v2-0203` code system. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1041](payr-1041.md), [PAYR-1010](payr-1010.md) and [PAYR-1012](payr-1012.md). diff --git a/catalogue/nhcx/errors/payr-1043.md b/catalogue/nhcx/errors/payr-1043.md new file mode 100644 index 000000000..42cb181b6 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1043.md @@ -0,0 +1,108 @@ +--- +id: nhcx.error.payr-1043 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1043, a date is in the wrong format +summary: >- + The payer rejected your request because a date in it is not written in the standard + date format. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.collection-bundle + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + errors: + - nhcx.error.payr-1044 + - nhcx.error.payr-1242 + - nhcx.error.payr-1244 + - nhcx.error.payr-1327 + - nhcx.error.payr-1328 + - nhcx.error.payr-1330 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1043, a date is in the wrong format + +## In plain words + +Dates in a [FHIR](../../shared/glossary/fhir.md) bundle follow the date format of the [NRCeS](../../shared/glossary/nrces.md) profiles. The payer rejected the request because a date does not. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md) on a use case path, such as `/v1/coverageeligibility/check`, `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired `on_` path, for example `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1043`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1043` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Date received in the request does not adhere to the NRCES date datatype format. Hence request will not be processed further. Please refere to the date format in NRCES portal. + +The payer returns this code when: + +- An element of the FHIR `date` type holds a value that is not a valid FHIR date. +- The message does not name the element, so any date in the bundle can be the cause. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on the `on_` path paired with the one you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1043`. The decrypted payload is the response bundle for your use case, such as a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Check every element of the FHIR `date` type in the bundle. +2. Write each as year, month and day, for example `2026-02-27`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare your bundle with the [collection bundle](../fhir/collection-bundle.md) and the bundle for your use case. If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1044](payr-1044.md), [PAYR-1242](payr-1242.md), [PAYR-1244](payr-1244.md), [PAYR-1327](payr-1327.md), [PAYR-1328](payr-1328.md) and [PAYR-1330](payr-1330.md). diff --git a/catalogue/nhcx/errors/payr-1044.md b/catalogue/nhcx/errors/payr-1044.md new file mode 100644 index 000000000..91f401263 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1044.md @@ -0,0 +1,108 @@ +--- +id: nhcx.error.payr-1044 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1044, a date and time is in the wrong format +summary: >- + The payer rejected your request because a date with a time in it is not written + in the standard format. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.collection-bundle + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + errors: + - nhcx.error.payr-1043 + - nhcx.error.payr-1242 + - nhcx.error.payr-1244 + - nhcx.error.payr-1327 + - nhcx.error.payr-1328 + - nhcx.error.payr-1330 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1044, a date and time is in the wrong format + +## In plain words + +Dates with times in a [FHIR](../../shared/glossary/fhir.md) bundle follow the date and time format of the [NRCeS](../../shared/glossary/nrces.md) profiles. The payer rejected the request because one does not. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md) on a use case path, such as `/v1/coverageeligibility/check`, `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired `on_` path, for example `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1044`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1044` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Date and time received in the request does not adhere to the NRCES date datatype format. Hence request will not be processed further. Please refere to the date time format in NRCES portal. + +The payer returns this code when: + +- An element of the FHIR `dateTime` type holds a value that is not a valid FHIR dateTime. +- The message does not name the element, so any date and time in the bundle can be the cause. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on the `on_` path paired with the one you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1044`. The decrypted payload is the response bundle for your use case, such as a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Check every element of the FHIR `dateTime` type in the bundle. +2. Write each with a time zone, for example `2026-02-27T08:40:02+05:30`, as the sample claim does. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare your bundle with the [collection bundle](../fhir/collection-bundle.md) and the bundle for your use case. If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1043](payr-1043.md), [PAYR-1242](payr-1242.md), [PAYR-1244](payr-1244.md), [PAYR-1327](payr-1327.md), [PAYR-1328](payr-1328.md) and [PAYR-1330](payr-1330.md). diff --git a/catalogue/nhcx/errors/payr-1045.md b/catalogue/nhcx/errors/payr-1045.md new file mode 100644 index 000000000..8ce3930c5 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1045.md @@ -0,0 +1,105 @@ +--- +id: nhcx.error.payr-1045 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1045, a claim item has an invalid quantity +summary: >- + The payer rejected your preauthorisation or claim because a billed item does not + state a usable number of units. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1027 + - nhcx.error.payr-1028 + - nhcx.error.payr-1115 + - nhcx.error.payr-1208 + - nhcx.error.payr-1349 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1045, a claim item has an invalid quantity + +## In plain words + +Each billed item in the Claim resource of your [FHIR](../../shared/glossary/fhir.md) bundle states how many units it bills. The payer rejected the request because an item's quantity is missing or not valid. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1045`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1045` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid quantity received for item. Hence request will not be processed further. + +The payer returns this code when: + +- A `Claim.item` entry has no `quantity`. +- The `quantity` carries no numeric `value`. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1045`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Open each entry in `Claim.item`. +2. Give it a `quantity` with a numeric `value`. The sample bundles bill one unit, quantity 1. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1027](payr-1027.md), [PAYR-1028](payr-1028.md), [PAYR-1115](payr-1115.md), [PAYR-1208](payr-1208.md) and [PAYR-1349](payr-1349.md). diff --git a/catalogue/nhcx/errors/payr-1046.md b/catalogue/nhcx/errors/payr-1046.md new file mode 100644 index 000000000..c1d26b050 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1046.md @@ -0,0 +1,108 @@ +--- +id: nhcx.error.payr-1046 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1046, a supporting info entry has no value or date +summary: >- + The payer rejected your preauthorisation or claim because a supporting information + entry carries no content at all. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1036 + - nhcx.error.payr-1047 + - nhcx.error.payr-1048 + - nhcx.error.payr-1098 + - nhcx.error.payr-1099 + - nhcx.error.payr-1502 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1046, a supporting info entry has no value or date + +## In plain words + +Every supporting information entry in your [FHIR](../../shared/glossary/fhir.md) bundle carries its content, either a value or a date. The payer rejected the request because one entry carries neither. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1046`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1046` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> No value or timing details received for supporting info for sequence `%s`. Hence request will not be processed further. Please reach out to technical team. + +The payer puts the `sequence` of the rejected supporting info entry in place of `%s`. + +The payer returns this code when: + +- The entry named in the message has no `value[x]` and no `timing[x]`. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1046`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Find the `Claim.supportingInfo` entry whose `sequence` matches the number in the message. +2. Give it the content its `category` and `code` call for. +3. Send dates in `timingDate`, `timingPeriod` or `valueString`. Send documents in `valueAttachment`. Point at clinical records with `valueReference`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1036](payr-1036.md), [PAYR-1047](payr-1047.md), [PAYR-1048](payr-1048.md), [PAYR-1098](payr-1098.md), [PAYR-1099](payr-1099.md) and [PAYR-1502](payr-1502.md). diff --git a/catalogue/nhcx/errors/payr-1047.md b/catalogue/nhcx/errors/payr-1047.md new file mode 100644 index 000000000..46673244d --- /dev/null +++ b/catalogue/nhcx/errors/payr-1047.md @@ -0,0 +1,107 @@ +--- +id: nhcx.error.payr-1047 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1047, a supporting info entry has an invalid reference +summary: >- + The payer rejected your preauthorisation or claim because a supporting information + entry points at another record in an unusable way. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1048 + - nhcx.error.payr-1040 + - nhcx.error.payr-1085 + - nhcx.error.payr-1505 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1047, a supporting info entry has an invalid reference + +## In plain words + +A supporting information entry can point at another resource in your [FHIR](../../shared/glossary/fhir.md) bundle, such as a clinical record. The payer rejected the request because an entry's reference is not valid. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1047`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1047` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid reference received in supporting info with sequence number `%s`. Please try again with valid resource as reference value. + +The payer puts the `sequence` of the rejected supporting info entry in place of `%s`. + +The payer returns this code when: + +- The `valueReference` of the entry named in the message is empty or malformed. +- The `valueReference` does not point at a resource the entry can carry. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1047`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Find the `Claim.supportingInfo` entry whose `sequence` matches the number in the message. +2. Point `valueReference.reference` at an entry in the bundle, using that entry's `fullUrl`. +3. Reference a Composition for a clinical record, as the sample bundles do. Reference a QuestionnaireResponse for category `INF` with code `ODN`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1048](payr-1048.md), [PAYR-1040](payr-1040.md), [PAYR-1085](payr-1085.md) and [PAYR-1505](payr-1505.md). diff --git a/catalogue/nhcx/errors/payr-1048.md b/catalogue/nhcx/errors/payr-1048.md new file mode 100644 index 000000000..6e88b5afe --- /dev/null +++ b/catalogue/nhcx/errors/payr-1048.md @@ -0,0 +1,107 @@ +--- +id: nhcx.error.payr-1048 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1048, a supporting info entry references a resource that is not in the + bundle +summary: >- + The payer rejected your preauthorisation or claim because a supporting information + entry points at a record the bundle does not contain. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1047 + - nhcx.error.payr-1040 + - nhcx.error.payr-1084 + - nhcx.error.payr-1086 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1048, a supporting info entry references a resource that is not in the bundle + +## In plain words + +A supporting information entry can point at another resource in your [FHIR](../../shared/glossary/fhir.md) bundle. The payer rejected the request because the resource the entry points at is not in the bundle. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1048`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1048` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> No reference resource received for supporting info with sequence number `%s`. Please try again with valid resource for reference value. + +The payer puts the `sequence` of the rejected supporting info entry in place of `%s`. + +The payer returns this code when: + +- The `valueReference` of the entry named in the message names a resource that no `Bundle.entry` carries. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1048`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Find the `Claim.supportingInfo` entry whose `sequence` matches the number in the message. +2. Add the referenced resource to the bundle, or correct the reference. +3. Make the reference match the new entry's `fullUrl`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1047](payr-1047.md), [PAYR-1040](payr-1040.md), [PAYR-1084](payr-1084.md) and [PAYR-1086](payr-1086.md). diff --git a/catalogue/nhcx/errors/payr-1049.md b/catalogue/nhcx/errors/payr-1049.md new file mode 100644 index 000000000..82dab40be --- /dev/null +++ b/catalogue/nhcx/errors/payr-1049.md @@ -0,0 +1,104 @@ +--- +id: nhcx.error.payr-1049 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1049, the payer cannot accept the bundle +summary: >- + The payer rejected your request because it could not accept the bundle as a whole. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.collection-bundle + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + errors: + - nhcx.error.payr-1004 + - nhcx.error.payr-1008 + - nhcx.error.payr-1029 + - nhcx.error.payr-1031 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1049, the payer cannot accept the bundle + +## In plain words + +The payer could not accept your [FHIR](../../shared/glossary/fhir.md) bundle as a whole. The message names no element. + +## Before you start + +You sent a request through [NHCX](../../shared/glossary/nhcx.md) on a use case path, such as `/v1/coverageeligibility/check`, `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired `on_` path, for example `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1049`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1049` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid FHIR bundle received. Hence request will not be processed further. please reach out to technical team. + +The payer returns this code when: + +- The payer cannot read the bundle as a valid FHIR bundle. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on the `on_` path paired with the one you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1049`. The decrypted payload is the response bundle for your use case, such as a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Validate the whole bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles. See [validating a bundle](../fhir/validation.md). +2. Fix every error the validator reports. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare your bundle with the [collection bundle](../fhir/collection-bundle.md) and the bundle for your use case. If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1004](payr-1004.md), [PAYR-1008](payr-1008.md), [PAYR-1029](payr-1029.md) and [PAYR-1031](payr-1031.md). diff --git a/catalogue/nhcx/errors/payr-1050.md b/catalogue/nhcx/errors/payr-1050.md new file mode 100644 index 000000000..262aab05f --- /dev/null +++ b/catalogue/nhcx/errors/payr-1050.md @@ -0,0 +1,102 @@ +--- +id: nhcx.error.payr-1050 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1050, a practitioner identifier has no type +summary: >- + The payer rejected your preauthorisation or claim because a doctor's identifier + in it does not say what kind of identifier it is. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1080 + - nhcx.error.payr-1083 + - nhcx.error.payr-1079 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1050, a practitioner identifier has no type + +## In plain words + +Practitioners in your [FHIR](../../shared/glossary/fhir.md) bundle carry identifiers, such as their [HPR](../../shared/glossary/hpr.md) id. The payer rejected the request because a practitioner's identifier has no type. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1050`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1050` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> No type found for practitioner component identifier. Hence request will not be processed further. + +The payer returns this code when: + +- An `identifier` on a Practitioner resource has no `type`. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1050`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Give every Practitioner `identifier` a `type` coding. +2. For the HPR id, use type code `HPIN`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1080](payr-1080.md), [PAYR-1083](payr-1083.md) and [PAYR-1079](payr-1079.md). diff --git a/catalogue/nhcx/errors/payr-1051.md b/catalogue/nhcx/errors/payr-1051.md new file mode 100644 index 000000000..798826e92 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1051.md @@ -0,0 +1,102 @@ +--- +id: nhcx.error.payr-1051 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1051, a clinical record has no section +summary: >- + The payer rejected your preauthorisation or claim because an attached clinical + record has no sections. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1052 + - nhcx.error.payr-1054 + - nhcx.error.payr-1088 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1051, a clinical record has no section + +## In plain words + +Clinical records attached to a preauthorisation or claim travel as Composition resources in the [FHIR](../../shared/glossary/fhir.md) bundle. A Composition groups its content into sections. The payer rejected the request because a Composition has no section. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1051`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1051` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> No section found for composition component. Hence request will not be processed further. + +The payer returns this code when: + +- A Composition resource in the bundle has no `section`. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1051`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Give every Composition at least one `section`. +2. List the section's resources in `section.entry`. The sample bundles attach diagnostic reports and invoices this way. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1052](payr-1052.md), [PAYR-1054](payr-1054.md) and [PAYR-1088](payr-1088.md). diff --git a/catalogue/nhcx/errors/payr-1052.md b/catalogue/nhcx/errors/payr-1052.md new file mode 100644 index 000000000..173eb3172 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1052.md @@ -0,0 +1,103 @@ +--- +id: nhcx.error.payr-1052 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1052, a clinical record section has no references +summary: >- + The payer rejected your preauthorisation or claim because a section of an attached + clinical record lists no records. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1051 + - nhcx.error.payr-1053 + - nhcx.error.payr-1054 + - nhcx.error.payr-1040 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1052, a clinical record section has no references + +## In plain words + +Clinical records in your [FHIR](../../shared/glossary/fhir.md) bundle are Composition resources. Each section lists its content as references. The payer rejected the request because a section has no references. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1052`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1052` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> No references found in composition section. Hence request will not be processed further. + +The payer returns this code when: + +- A `Composition.section` has no `entry` references. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1052`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. List the section's resources in `section.entry`. +2. Make each reference match the `fullUrl` of an entry in the bundle. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1051](payr-1051.md), [PAYR-1053](payr-1053.md), [PAYR-1054](payr-1054.md) and [PAYR-1040](payr-1040.md). diff --git a/catalogue/nhcx/errors/payr-1053.md b/catalogue/nhcx/errors/payr-1053.md new file mode 100644 index 000000000..6113473b8 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1053.md @@ -0,0 +1,102 @@ +--- +id: nhcx.error.payr-1053 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1053, a nested clinical record section has an invalid reference +summary: >- + The payer rejected your preauthorisation or claim because a section inside an + attached clinical record points at something invalid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1052 + - nhcx.error.payr-1040 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1053, a nested clinical record section has an invalid reference + +## In plain words + +A Composition section in your [FHIR](../../shared/glossary/fhir.md) bundle can hold child sections, each with references. The payer rejected the request because a reference in a child section is not valid. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1053`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1053` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid reference found in child sections of composition section. Hence request will not be processed further. + +The payer returns this code when: + +- An `entry` in a nested `section.section` is empty or malformed. +- The `entry` names a resource that is not in the bundle. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1053`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Check every `entry` in the nested sections of each Composition. +2. Point each one at the `fullUrl` of an entry in the bundle. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1052](payr-1052.md) and [PAYR-1040](payr-1040.md). diff --git a/catalogue/nhcx/errors/payr-1054.md b/catalogue/nhcx/errors/payr-1054.md new file mode 100644 index 000000000..a8669d9d4 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1054.md @@ -0,0 +1,101 @@ +--- +id: nhcx.error.payr-1054 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1054, a clinical record section is empty +summary: >- + The payer rejected your preauthorisation or claim because a section of an attached + clinical record has no content. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1051 + - nhcx.error.payr-1052 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1054, a clinical record section is empty + +## In plain words + +Clinical records in your [FHIR](../../shared/glossary/fhir.md) bundle are Composition resources made of sections. The payer rejected the request because a section carries no content. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1054`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1054` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> No section content found for composition component. Hence request will not be processed further. + +The payer returns this code when: + +- A `Composition.section` is present but holds nothing. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1054`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Find the empty section in each Composition. +2. Fill it with `entry` references to the resources it holds, or remove it. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1051](payr-1051.md) and [PAYR-1052](payr-1052.md). diff --git a/catalogue/nhcx/errors/payr-1055.md b/catalogue/nhcx/errors/payr-1055.md new file mode 100644 index 000000000..d8b916250 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1055.md @@ -0,0 +1,108 @@ +--- +id: nhcx.error.payr-1055 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1055, a clinical record has no subject or its subject is not a patient +summary: >- + The payer rejected your preauthorisation or claim because an attached clinical + record does not name the patient it is about. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1056 + - nhcx.error.payr-1057 + - nhcx.error.payr-1058 + - nhcx.error.payr-1060 + - nhcx.error.payr-1077 + - nhcx.error.payr-1078 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1055, a clinical record has no subject or its subject is not a patient + +## In plain words + +Each clinical record in your [FHIR](../../shared/glossary/fhir.md) bundle is a Composition that names the patient it is about, in its subject. The payer rejected the request because a Composition has no subject, or its subject is not a Patient. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1055`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1055` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. It returns this code for either of two failed checks: + +> No subject found for composition component. Hence request will not be processed further. + +> Invalid subject type found for composition component. This should be of type Patient. Hence request will not be processed further. Please try again with valid subject type for the composition. + +The payer returns this code when: + +- A Composition resource has no `subject`. +- `Composition.subject` points at a resource that is not a Patient. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1055`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Set `Composition.subject` on every Composition. +2. Point it at the Patient resource in the bundle. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1056](payr-1056.md), [PAYR-1057](payr-1057.md), [PAYR-1058](payr-1058.md), [PAYR-1060](payr-1060.md), [PAYR-1077](payr-1077.md) and [PAYR-1078](payr-1078.md). diff --git a/catalogue/nhcx/errors/payr-1056.md b/catalogue/nhcx/errors/payr-1056.md new file mode 100644 index 000000000..2f888b2f8 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1056.md @@ -0,0 +1,102 @@ +--- +id: nhcx.error.payr-1056 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1056, the patient's contact organization is not an Organization +summary: >- + The payer rejected your preauthorisation or claim because the patient in an attached + clinical record has a contact of the wrong kind. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1055 + - nhcx.error.payr-1057 + - nhcx.error.payr-1058 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1056, the patient's contact organization is not an Organization + +## In plain words + +The payer checks the Patient that each clinical record in your [FHIR](../../shared/glossary/fhir.md) bundle is about. It rejected the request because that patient's contact organization is not an Organization. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1056`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1056` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid contact organization found for subject in composition component. This should be of type Organization. Hence request will not be processed further. Please try again with valid data. + +The payer returns this code when: + +- The Patient referenced by `Composition.subject` has a `contact.organization` that does not reference an Organization resource. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1056`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Open the Patient that each Composition names in `subject`. +2. Point `Patient.contact.organization` at an Organization resource in the bundle, or remove it. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1055](payr-1055.md), [PAYR-1057](payr-1057.md) and [PAYR-1058](payr-1058.md). diff --git a/catalogue/nhcx/errors/payr-1057.md b/catalogue/nhcx/errors/payr-1057.md new file mode 100644 index 000000000..28abb2f8f --- /dev/null +++ b/catalogue/nhcx/errors/payr-1057.md @@ -0,0 +1,103 @@ +--- +id: nhcx.error.payr-1057 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1057, the patient's general practitioner has the wrong type +summary: >- + The payer rejected your preauthorisation or claim because the patient in an attached + clinical record names a general practitioner of the wrong kind. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1055 + - nhcx.error.payr-1056 + - nhcx.error.payr-1058 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1057, the patient's general practitioner has the wrong type + +## In plain words + +The payer checks the Patient that each clinical record in your [FHIR](../../shared/glossary/fhir.md) bundle is about. It rejected the request because that patient's general practitioner is the wrong type of resource. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1057`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1057` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid general practioner type found for subject in composition component. This should be of type Organization/Practitioner/PractitionerRole. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html + +The payer returns this code when: + +- The Patient referenced by `Composition.subject` has a `generalPractitioner` that does not reference an Organization, Practitioner or PractitionerRole. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1057`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Open the Patient that each Composition names in `subject`. +2. Point each `Patient.generalPractitioner` at an Organization, Practitioner or PractitionerRole resource in the bundle. +3. Check the Patient against the [NRCeS](../../shared/glossary/nrces.md) Patient profile, `https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1055](payr-1055.md), [PAYR-1056](payr-1056.md) and [PAYR-1058](payr-1058.md). diff --git a/catalogue/nhcx/errors/payr-1058.md b/catalogue/nhcx/errors/payr-1058.md new file mode 100644 index 000000000..4bb0d24fc --- /dev/null +++ b/catalogue/nhcx/errors/payr-1058.md @@ -0,0 +1,103 @@ +--- +id: nhcx.error.payr-1058 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1058, the patient's managing organization is not an Organization +summary: >- + The payer rejected your preauthorisation or claim because the patient in an attached + clinical record names a managing organization of the wrong kind. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1055 + - nhcx.error.payr-1056 + - nhcx.error.payr-1057 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1058, the patient's managing organization is not an Organization + +## In plain words + +The payer checks the Patient that each clinical record in your [FHIR](../../shared/glossary/fhir.md) bundle is about. It rejected the request because that patient's managing organization is not an Organization. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1058`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1058` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid managing organization type found for subject in composition component. This should be of type Organization. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html + +The payer returns this code when: + +- The Patient referenced by `Composition.subject` has a `managingOrganization` that does not reference an Organization resource. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1058`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Open the Patient that each Composition names in `subject`. +2. Point `Patient.managingOrganization` at an Organization resource in the bundle. +3. Check the Patient against the [NRCeS](../../shared/glossary/nrces.md) Patient profile, `https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1055](payr-1055.md), [PAYR-1056](payr-1056.md) and [PAYR-1057](payr-1057.md). diff --git a/catalogue/nhcx/errors/payr-1059.md b/catalogue/nhcx/errors/payr-1059.md new file mode 100644 index 000000000..312ff4e31 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1059.md @@ -0,0 +1,104 @@ +--- +id: nhcx.error.payr-1059 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1059, a clinical record points at something other than an encounter +summary: >- + The payer rejected your preauthorisation or claim because an attached clinical + record or observation points at the wrong kind of record for its visit. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1060 + - nhcx.error.payr-1061 + - nhcx.error.payr-1062 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1059, a clinical record points at something other than an encounter + +## In plain words + +Clinical records and observations in your [FHIR](../../shared/glossary/fhir.md) bundle point at the visit they belong to, an Encounter. The payer rejected the request because a Composition or Observation points at something other than an Encounter. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1059`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1059` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. This check failed: + +> Invalid encounter type found for composition/observation component. This should be of type Encounter. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-DiagnosticReportRecord.html + +The payer returns this code when: + +- `Composition.encounter` references a resource that is not an Encounter. +- `Observation.encounter` references a resource that is not an Encounter. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1059`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Check `encounter` on every Composition and Observation. +2. Point each one at an Encounter resource in the bundle. +3. Check the record against the [NRCeS](../../shared/glossary/nrces.md) DiagnosticReportRecord profile, `https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-DiagnosticReportRecord.html`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1060](payr-1060.md), [PAYR-1061](payr-1061.md) and [PAYR-1062](payr-1062.md). diff --git a/catalogue/nhcx/errors/payr-1060.md b/catalogue/nhcx/errors/payr-1060.md new file mode 100644 index 000000000..7bfc49785 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1060.md @@ -0,0 +1,107 @@ +--- +id: nhcx.error.payr-1060 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PAYR-1060, a clinical record has no encounter or its encounter has no subject +summary: >- + The payer rejected your preauthorisation or claim because an attached clinical + record does not name its visit, or the visit does not name the patient. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.payr-1059 + - nhcx.error.payr-1061 + - nhcx.error.payr-1093 + - nhcx.error.payr-1055 + - nhcx.error.nhcx-1006 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# PAYR-1060, a clinical record has no encounter or its encounter has no subject + +## In plain words + +Clinical records and observations in your [FHIR](../../shared/glossary/fhir.md) bundle point at the visit they belong to, an Encounter. That Encounter names the patient. The payer rejected the request because one of these links is missing. + +## Before you start + +You sent a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) bundle through [NHCX](../../shared/glossary/nhcx.md), on `/v1/preauth/submit` or `/v1/claim/submit`. NHCX answered with 202. + +The [payer](../glossary/payer.md) answered later on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. You decrypted the response with your private key. Its protected headers carry: + +- `x-hcx-status` set to `response.error`. +- `x-hcx-error_details`, with `code` set to `PAYR-1060`, a `message`, and a `trace` when the payer adds one. + +`PAYR-1060` is a reference payer code. The [PMJAY](../glossary/pmjay.md) payer implementation on NHCX sends it. The standard payer codes stop at `PAYR-1020`. Read [error code spaces](../concepts/error-code-spaces.md) before you act on any `PAYR-` code. + +## What happens + +The payer checks the structure of your bundle before it adjudicates anything. It returns this code for either of two failed checks: + +> No encounter found for composition/observation component. Hence request will not be processed further. + +> No subject found for encounter in composition component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + +The payer returns this code when: + +- A Composition or Observation has no `encounter`. +- The Encounter a Composition references has no `subject`. + +The request is not processed further. Nothing in it is adjudicated. + +## How you know it worked + +You send the corrected bundle with a new `x-hcx-correlation_id`. NHCX answers with 202. + +The payer's response arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`, matching the path you called. It carries your new `x-hcx-correlation_id`. `x-hcx-status` is not `response.error`, and `x-hcx-error_details` does not name `PAYR-1060`. The decrypted payload is a ClaimResponse bundle. + +If a different `PAYR-` code arrives, look up that code next. + +## When it goes wrong + +### Fix the bundle + +1. Give every Composition and Observation an `encounter` that references an Encounter resource in the bundle. +2. Give that Encounter a `subject` that references the Patient. +3. Check the Encounter against the [NRCeS](../../shared/glossary/nrces.md) Encounter profile, `https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html`. + +### Send it again + +1. Validate the corrected bundle before you send it. See [validating a bundle](../fhir/validation.md). +2. Send the request with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. The failed correlation id is inactive. Reusing it returns [NHCX-1006](nhcx-1006.md). + +### If the same code comes back + +Compare the rejected element with the [preauthorisation request bundle](../fhir/preauth-request.md) or the [claim request bundle](../fhir/claim-request.md). If your bundle matches and the code persists, contact [NHCX support](../sandbox/support-contacts.md). Give them the `x-hcx-correlation_id` and the `trace` from `x-hcx-error_details`. + +The payer runs related checks under [PAYR-1059](payr-1059.md), [PAYR-1061](payr-1061.md), [PAYR-1093](payr-1093.md) and [PAYR-1055](payr-1055.md). diff --git a/catalogue/nhcx/errors/payr-1061.md b/catalogue/nhcx/errors/payr-1061.md new file mode 100644 index 000000000..91149edfe --- /dev/null +++ b/catalogue/nhcx/errors/payr-1061.md @@ -0,0 +1,100 @@ +--- +id: nhcx.error.payr-1061 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1061: an encounter''s subject has the wrong resource type' +summary: >- + The payer rejected your preauthorisation or claim because an encounter in the + bundle names a subject that is not a patient. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1094 + - nhcx.error.payr-1093 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1061: an encounter's subject has the wrong resource type + +## In plain words + +Your bundle carries clinical records as Composition and Observation resources. Each can point at an Encounter, the visit the record belongs to. One of those Encounters names a subject of a type the payer does not accept, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1061`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid subject type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + +It is produced when: + +- A Composition or an Observation in the bundle points at an Encounter. +- That Encounter's `subject` points at a resource that is not a Patient. + +`PAYR-1094` carries the same message. Fix both the same way. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1061` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find each Encounter that a Composition's `encounter` or an Observation points at. +2. Set its `subject.reference` to the `fullUrl` of the Patient entry in the same bundle. Use the Patient that the Composition's `subject` points at. +3. Check the Encounter against the [NRCES Encounter profile](https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html). +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1062.md b/catalogue/nhcx/errors/payr-1062.md new file mode 100644 index 000000000..c79e26766 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1062.md @@ -0,0 +1,97 @@ +--- +id: nhcx.error.payr-1062 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1062: an encounter has no episode of care the payer can find' +summary: >- + The payer rejected your preauthorisation or claim because it could not find the + episode of care for an encounter in the bundle. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1063 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1062: an encounter has no episode of care the payer can find + +## In plain words + +Your bundle carries clinical records as Composition and Observation resources. Each can point at an Encounter, the visit the record belongs to. The payer could not find an episode of care for one of those Encounters, so it stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1062`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No episode of care found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + +It is produced when: + +- A Composition or an Observation in the bundle points at an Encounter. +- The payer finds no episode of care for that Encounter in the bundle. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1062` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Add an episode of care reference to the Encounter. The [NRCES Encounter profile](https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html) names the element and the target types it allows. +2. Include the resource it points at as an entry in the same bundle. +3. Make the reference match that entry's `fullUrl` exactly. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1063.md b/catalogue/nhcx/errors/payr-1063.md new file mode 100644 index 000000000..9bb793d72 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1063.md @@ -0,0 +1,97 @@ +--- +id: nhcx.error.payr-1063 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1063: an encounter''s episode of care has the wrong resource type' +summary: >- + The payer rejected your preauthorisation or claim because an encounter's episode + of care points at the wrong kind of record. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1062 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1063: an encounter's episode of care has the wrong resource type + +## In plain words + +Your bundle carries clinical records as Composition and Observation resources. Each can point at an Encounter, the visit the record belongs to. One of those Encounters has an episode of care reference that points at the wrong kind of resource, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1063`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid episode of care type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + +It is produced when: + +- A Composition or an Observation in the bundle points at an Encounter. +- That Encounter's episode of care reference points at a resource of a type the payer does not accept. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1063` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the episode of care reference on each Encounter that a Composition or an Observation points at. +2. Open the [NRCES Encounter profile](https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html) and read the target types it allows for that element. +3. Point the reference at an entry of an allowed type, and make it match that entry's `fullUrl` exactly. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1064.md b/catalogue/nhcx/errors/payr-1064.md new file mode 100644 index 000000000..60e4568ab --- /dev/null +++ b/catalogue/nhcx/errors/payr-1064.md @@ -0,0 +1,97 @@ +--- +id: nhcx.error.payr-1064 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1064: an encounter has no based-on reference the payer can find' +summary: >- + The payer rejected your preauthorisation or claim because it could not find what + an encounter in the bundle is based on. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1065 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1064: an encounter has no based-on reference the payer can find + +## In plain words + +Your bundle carries clinical records as Composition and Observation resources. Each can point at an Encounter, the visit the record belongs to. The payer could not find the based-on reference for one of those Encounters, so it stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1064`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No based on found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + +It is produced when: + +- A Composition or an Observation in the bundle points at an Encounter. +- The payer finds no based-on reference for that Encounter in the bundle. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1064` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Add a based-on reference to the Encounter. The [NRCES Encounter profile](https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html) names the element and the target types it allows. +2. Include the resource it points at as an entry in the same bundle. +3. Make the reference match that entry's `fullUrl` exactly. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1065.md b/catalogue/nhcx/errors/payr-1065.md new file mode 100644 index 000000000..b384524a1 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1065.md @@ -0,0 +1,97 @@ +--- +id: nhcx.error.payr-1065 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1065: an encounter''s based-on reference has the wrong resource type' +summary: >- + The payer rejected your preauthorisation or claim because an encounter's based-on + reference points at the wrong kind of record. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1064 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1065: an encounter's based-on reference has the wrong resource type + +## In plain words + +Your bundle carries clinical records as Composition and Observation resources. Each can point at an Encounter, the visit the record belongs to. One of those Encounters has a based-on reference that points at the wrong kind of resource, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1065`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid based on type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + +It is produced when: + +- A Composition or an Observation in the bundle points at an Encounter. +- That Encounter's based-on reference points at a resource of a type the payer does not accept. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1065` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the based-on reference on each Encounter that a Composition or an Observation points at. +2. Open the [NRCES Encounter profile](https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html) and read the target types it allows for that element. +3. Point the reference at an entry of an allowed type, and make it match that entry's `fullUrl` exactly. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1066.md b/catalogue/nhcx/errors/payr-1066.md new file mode 100644 index 000000000..c7f96965c --- /dev/null +++ b/catalogue/nhcx/errors/payr-1066.md @@ -0,0 +1,99 @@ +--- +id: nhcx.error.payr-1066 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1066: an encounter has no appointment the payer can find' +summary: >- + The payer rejected your preauthorisation or claim because it could not find the + appointment for an encounter in the bundle. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1067 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1066: an encounter has no appointment the payer can find + +## In plain words + +Your bundle carries clinical records as Composition and Observation resources. Each can point at an Encounter, the visit the record belongs to. The payer could not find an appointment for one of those Encounters, so it stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1066`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No appointment found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + +It is produced when: + +- A Composition or an Observation in the bundle points at an Encounter. +- The payer finds no appointment for that Encounter in the bundle. + +An Appointment entry that no Encounter points at does not count. The Encounter must reference it. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1066` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Add an appointment reference to the Encounter. The [NRCES Encounter profile](https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html) names the element and the target types it allows. +2. Include the Appointment resource it points at as an entry in the same bundle. +3. Make the reference match that entry's `fullUrl` exactly. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1067.md b/catalogue/nhcx/errors/payr-1067.md new file mode 100644 index 000000000..d44b57a00 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1067.md @@ -0,0 +1,97 @@ +--- +id: nhcx.error.payr-1067 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1067: an encounter''s appointment has the wrong resource type' +summary: >- + The payer rejected your preauthorisation or claim because an encounter's appointment + reference points at something that is not an appointment. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1066 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1067: an encounter's appointment has the wrong resource type + +## In plain words + +Your bundle carries clinical records as Composition and Observation resources. Each can point at an Encounter, the visit the record belongs to. One of those Encounters has an appointment reference that points at the wrong kind of resource, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1067`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid appointment type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + +It is produced when: + +- A Composition or an Observation in the bundle points at an Encounter. +- That Encounter's appointment reference points at a resource that is not an Appointment. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1067` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the appointment reference on each Encounter that a Composition or an Observation points at. +2. Open the [NRCES Encounter profile](https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html) and read the target types it allows for that element. +3. Point the reference at an Appointment entry, and make it match that entry's `fullUrl` exactly. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1068.md b/catalogue/nhcx/errors/payr-1068.md new file mode 100644 index 000000000..16c000f52 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1068.md @@ -0,0 +1,97 @@ +--- +id: nhcx.error.payr-1068 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1068: an encounter has no reason reference the payer can find' +summary: >- + The payer rejected your preauthorisation or claim because it could not find the + reason for an encounter in the bundle. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1069 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1068: an encounter has no reason reference the payer can find + +## In plain words + +Your bundle carries clinical records as Composition and Observation resources. Each can point at an Encounter, the visit the record belongs to. The payer could not find the reason reference for one of those Encounters, so it stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1068`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No reason reference found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + +It is produced when: + +- A Composition or an Observation in the bundle points at an Encounter. +- The payer finds no reason reference for that Encounter in the bundle. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1068` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Add a reason reference to the Encounter. The [NRCES Encounter profile](https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html) names the element and the target types it allows. +2. Include the resource it points at as an entry in the same bundle. +3. Make the reference match that entry's `fullUrl` exactly. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1069.md b/catalogue/nhcx/errors/payr-1069.md new file mode 100644 index 000000000..60aec8169 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1069.md @@ -0,0 +1,97 @@ +--- +id: nhcx.error.payr-1069 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1069: an encounter''s reason reference has the wrong resource type' +summary: >- + The payer rejected your preauthorisation or claim because an encounter's reason + reference points at the wrong kind of record. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1068 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1069: an encounter's reason reference has the wrong resource type + +## In plain words + +Your bundle carries clinical records as Composition and Observation resources. Each can point at an Encounter, the visit the record belongs to. One of those Encounters has a reason reference that points at the wrong kind of resource, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1069`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid reason reference type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + +It is produced when: + +- A Composition or an Observation in the bundle points at an Encounter. +- That Encounter's reason reference points at a resource of a type the payer does not accept. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1069` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the reason reference on each Encounter that a Composition or an Observation points at. +2. Open the [NRCES Encounter profile](https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html) and read the target types it allows for that element. +3. Point the reference at an entry of an allowed type, and make it match that entry's `fullUrl` exactly. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1070.md b/catalogue/nhcx/errors/payr-1070.md new file mode 100644 index 000000000..806c180e6 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1070.md @@ -0,0 +1,97 @@ +--- +id: nhcx.error.payr-1070 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1070: a composition has no author' +summary: >- + The payer rejected your preauthorisation or claim because a clinical document + in the bundle does not say who wrote it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1071 + - nhcx.error.payr-1088 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1070: a composition has no author + +## In plain words + +Your bundle carries clinical documents as Composition resources. One of them does not say who wrote it, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1070`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No author found for composition component. Hence request will not be processed further. + +It is produced when: + +- A Composition in the bundle has no `author`. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1070` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Add `author` to every Composition in the bundle. +2. Point `author[0].reference` at an entry in the bundle, such as the Practitioner who wrote the record. +3. Make the reference match that entry's `fullUrl` exactly. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1071.md b/catalogue/nhcx/errors/payr-1071.md new file mode 100644 index 000000000..d61c4bd96 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1071.md @@ -0,0 +1,98 @@ +--- +id: nhcx.error.payr-1071 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1071: a composition''s author has the wrong resource type' +summary: >- + The payer rejected your preauthorisation or claim because a clinical document + names an author of a kind it does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1070 + - nhcx.error.payr-1088 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1071: a composition's author has the wrong resource type + +## In plain words + +Your bundle carries clinical documents as Composition resources. One of them names an author of a type the payer does not accept, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1071`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid author type found for composition component. This should be of type Practitioner / PractitionerRole / Organization / Patient / Device / RelatedPerson. Hence request will not be processed further. Please try again with valid author type for the composition. + +It is produced when: + +- A Composition's `author` points at a resource of a type the payer does not accept. +- The accepted types are Practitioner, PractitionerRole, Organization, Patient, Device and RelatedPerson. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1071` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the `author` reference on each Composition in the bundle. +2. Point it at an entry of one of the six accepted types, such as the Practitioner who wrote the record. +3. Make the reference match that entry's `fullUrl` exactly. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1072.md b/catalogue/nhcx/errors/payr-1072.md new file mode 100644 index 000000000..d6f05aaa3 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1072.md @@ -0,0 +1,108 @@ +--- +id: nhcx.error.payr-1072 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1072: a claim procedure has no procedure reference' +summary: >- + The payer rejected your preauthorisation or claim because a procedure listed on + the claim does not point at its procedure record. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1026 + - nhcx.error.payr-1086 + - nhcx.error.payr-1087 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1072: a claim procedure has no procedure reference + +## In plain words + +The Claim resource in your bundle lists procedures in `procedure`. One entry does not say which Procedure resource it means, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1072`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No procedure reference received for procedure element in claim resource. Hence request will not be processed further. + +It is produced when: + +- An entry in `Claim.procedure` has no `procedureReference`. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1072` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Give every `Claim.procedure` entry a `procedureReference` that points at a Procedure entry in the bundle: + + ```json + "procedure": [ + { + "sequence": 1, + "procedureReference": { "reference": "" } + } + ] + ``` + + `` is the `fullUrl` of the Procedure entry in your bundle. +2. Include that Procedure resource as an entry, with a `fullUrl` that matches the reference exactly. +3. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +4. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1073.md b/catalogue/nhcx/errors/payr-1073.md new file mode 100644 index 000000000..65042db96 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1073.md @@ -0,0 +1,96 @@ +--- +id: nhcx.error.payr-1073 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1073: an observation has no based-on reference' +summary: >- + The payer rejected your preauthorisation or claim because it could not find what + an observation in the bundle is based on. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1074 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1073: an observation has no based-on reference + +## In plain words + +Your bundle carries test results and other findings as Observation resources. The payer could not find the based-on reference for one of them, so it stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1073`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No based on found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html + +It is produced when: + +- The payer finds no based-on reference for an Observation in the bundle. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1073` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Add a based-on reference to every Observation in the bundle. The [NRCES Observation profile](https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html) names the element and the target types it allows. +2. Include the resource it points at as an entry in the same bundle. +3. Make the reference match that entry's `fullUrl` exactly. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1074.md b/catalogue/nhcx/errors/payr-1074.md new file mode 100644 index 000000000..85ca25c6e --- /dev/null +++ b/catalogue/nhcx/errors/payr-1074.md @@ -0,0 +1,96 @@ +--- +id: nhcx.error.payr-1074 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1074: an observation''s based-on reference has the wrong resource type' +summary: >- + The payer rejected your preauthorisation or claim because an observation's based-on + reference points at the wrong kind of record. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1073 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1074: an observation's based-on reference has the wrong resource type + +## In plain words + +Your bundle carries test results and other findings as Observation resources. One of them has a based-on reference that points at the wrong kind of resource, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1074`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid based on type found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html + +It is produced when: + +- An Observation's based-on reference points at a resource of a type the payer does not accept. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1074` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the based-on reference on each Observation in the bundle. +2. Open the [NRCES Observation profile](https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html) and read the target types it allows for that element. +3. Point the reference at an entry of an allowed type, and make it match that entry's `fullUrl` exactly. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1075.md b/catalogue/nhcx/errors/payr-1075.md new file mode 100644 index 000000000..607d8348e --- /dev/null +++ b/catalogue/nhcx/errors/payr-1075.md @@ -0,0 +1,96 @@ +--- +id: nhcx.error.payr-1075 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1075: an observation has no part-of reference' +summary: >- + The payer rejected your preauthorisation or claim because it could not find what + an observation in the bundle is part of. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1076 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1075: an observation has no part-of reference + +## In plain words + +Your bundle carries test results and other findings as Observation resources. The payer could not find the part-of reference for one of them, so it stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1075`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No part of found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html + +It is produced when: + +- The payer finds no part-of reference for an Observation in the bundle. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1075` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Add a part-of reference to every Observation in the bundle. The [NRCES Observation profile](https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html) names the element and the target types it allows. +2. Include the resource it points at as an entry in the same bundle. +3. Make the reference match that entry's `fullUrl` exactly. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1076.md b/catalogue/nhcx/errors/payr-1076.md new file mode 100644 index 000000000..2ae8f299c --- /dev/null +++ b/catalogue/nhcx/errors/payr-1076.md @@ -0,0 +1,96 @@ +--- +id: nhcx.error.payr-1076 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1076: an observation''s part-of reference has the wrong resource type' +summary: >- + The payer rejected your preauthorisation or claim because an observation's part-of + reference points at the wrong kind of record. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1075 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1076: an observation's part-of reference has the wrong resource type + +## In plain words + +Your bundle carries test results and other findings as Observation resources. One of them has a part-of reference that points at the wrong kind of resource, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1076`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid part of type found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html + +It is produced when: + +- An Observation's part-of reference points at a resource of a type the payer does not accept. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1076` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the part-of reference on each Observation in the bundle. +2. Open the [NRCES Observation profile](https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html) and read the target types it allows for that element. +3. Point the reference at an entry of an allowed type, and make it match that entry's `fullUrl` exactly. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1077.md b/catalogue/nhcx/errors/payr-1077.md new file mode 100644 index 000000000..3dfdb2a07 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1077.md @@ -0,0 +1,95 @@ +--- +id: nhcx.error.payr-1077 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1077: an observation has no subject' +summary: >- + The payer rejected your preauthorisation or claim because an observation in the + bundle does not say which patient it is about. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1078 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1077: an observation has no subject + +## In plain words + +Your bundle carries test results and other findings as Observation resources. One of them does not say which patient it is about, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1077`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No subject found for observation component. Hence request will not be processed further. + +It is produced when: + +- An Observation in the bundle has no `subject`. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1077` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Give every Observation a `subject` whose `reference` is the `fullUrl` of the Patient entry in the bundle. +2. Send the `reference` even when you already send `subject.display`. A display names the patient but does not point at the Patient entry. +3. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +4. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1078.md b/catalogue/nhcx/errors/payr-1078.md new file mode 100644 index 000000000..99ca28970 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1078.md @@ -0,0 +1,95 @@ +--- +id: nhcx.error.payr-1078 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1078: an observation''s subject is not a Patient' +summary: >- + The payer rejected your preauthorisation or claim because an observation's subject + points at something other than the patient. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1077 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1078: an observation's subject is not a Patient + +## In plain words + +Your bundle carries test results and other findings as Observation resources. One of them names a subject that is not a Patient, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1078`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid subject type found for observation component. This should be of type Patient. Hence request will not be processed further. Please try again with valid subject type for the observation. + +It is produced when: + +- An Observation's `subject` points at a resource that is not a Patient. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1078` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the `subject` on each Observation in the bundle. +2. Set `subject.reference` to the `fullUrl` of the Patient entry in the same bundle. +3. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +4. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1079.md b/catalogue/nhcx/errors/payr-1079.md new file mode 100644 index 000000000..1ae3c6c2c --- /dev/null +++ b/catalogue/nhcx/errors/payr-1079.md @@ -0,0 +1,107 @@ +--- +id: nhcx.error.payr-1079 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1079: the claim has no care team' +summary: >- + The payer rejected your preauthorisation or claim because the claim does not name + the care team treating the patient. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1080 + - nhcx.error.payr-1083 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1079: the claim has no care team + +## In plain words + +The Claim resource in your bundle must name the practitioners treating the patient in `careTeam`. It has none, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1079`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No care team details received. Hence request will not be processed further. Please add the care team details and try again. + +It is produced when: + +- The Claim resource has no `careTeam` entry. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1079` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Add a `careTeam` entry to the Claim for the treating practitioner: + + ```json + "careTeam": [ + { + "sequence": 1, + "provider": { "reference": "" } + } + ] + ``` + + `` is the `fullUrl` of the Practitioner entry in your bundle. +2. Point each `Claim.item` at that entry through `careTeamSequence`, using the same `sequence` number. +3. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +4. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1080.md b/catalogue/nhcx/errors/payr-1080.md new file mode 100644 index 000000000..387fd0771 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1080.md @@ -0,0 +1,120 @@ +--- +id: nhcx.error.payr-1080 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1080: a practitioner''s HPR id is not valid' +summary: >- + The payer rejected your preauthorisation or claim because a practitioner in the + bundle carries a professional registry id it does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1083 + - nhcx.error.payr-1050 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.hpr + - shared.glossary.nrces +--- + +# PAYR-1080: a practitioner's HPR id is not valid + +## In plain words + +Each Practitioner in your bundle carries the practitioner's [HPR](../../shared/glossary/hpr.md) id. The payer did not accept the id on one of them, so it stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1080`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid HPR details received for practioner resource with url `%s`. Hence request will not be processed further. Please try again with valid HPR id. + +It is produced when: + +- The Practitioner entry at the url in the message carries HPR details the payer does not accept. + +`%s` is the url of the Practitioner entry, as your references name it. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1080` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the Practitioner entry whose `fullUrl` matches the url in the message. +2. Check its HPR identifier against the practitioner's HPR registration. +3. Send the identifier with type code `HPIN` and system `https://hpr.abdm.gov.in`: + + ```json + "identifier": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "HPIN", + "display": "Health Practitioner ID issued by NDHM" + } + ] + }, + "system": "https://hpr.abdm.gov.in", + "value": "" + } + ] + ``` + + `` is the practitioner's id from their HPR registration. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1081.md b/catalogue/nhcx/errors/payr-1081.md new file mode 100644 index 000000000..5a4145422 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1081.md @@ -0,0 +1,100 @@ +--- +id: nhcx.error.payr-1081 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1081: an item''s service date is not valid' +summary: >- + The payer rejected your preauthorisation or claim because the service date on + one of the billed items is not valid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1043 + - nhcx.error.payr-1044 + - nhcx.error.payr-1028 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1081: an item's service date is not valid + +## In plain words + +Each item in the Claim resource carries the date or period of service. The payer did not accept the date on one item, so it stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1081`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid service date received for item with sequence `%s` in claim resource. Hence request will not be processed further. Please try again with valid item service date. + +It is produced when: + +- The `Claim.item` with the sequence in the message carries a service date the payer does not accept. + +`%s` is the `sequence` of the item. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1081` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the `Claim.item` whose `sequence` matches the message. +2. Correct its service date. In a preauthorisation bundle it sits in `servicedPeriod.start` and `servicedPeriod.end`, for example `2026-02-22`. +3. Use the [NRCES](../../shared/glossary/nrces.md) date format. `PAYR-1043` and `PAYR-1044` cover date format failures. +4. Validate the corrected bundle in the NRCES validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1082.md b/catalogue/nhcx/errors/payr-1082.md new file mode 100644 index 000000000..3186310b9 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1082.md @@ -0,0 +1,101 @@ +--- +id: nhcx.error.payr-1082 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1082: a composition linked from supporting info has an invalid title' +summary: >- + The payer rejected your preauthorisation or claim because a document attached + through supporting information has a title it does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1088 + - nhcx.error.payr-1047 + - nhcx.error.payr-1048 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1082: a composition linked from supporting info has an invalid title + +## In plain words + +Supporting information on the Claim can point at a Composition, such as a lab report. The payer did not accept the title of one of those Compositions, so it stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1082`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid title received for composition for supporting info with sequence `%s` in claim resource. Hence request will not be processed further. Please try again with valid composition title. + +It is produced when: + +- A `Claim.supportingInfo` entry with the sequence in the message points at a Composition through `valueReference`. +- That Composition's `title` is not one the payer accepts. + +`%s` is the `sequence` of the supporting info entry. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1082` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the `Claim.supportingInfo` entry whose `sequence` matches the message. +2. Follow its `valueReference` to the Composition entry in the bundle. +3. Correct that Composition's `title`, and check the Composition against its [NRCES](../../shared/glossary/nrces.md) profile. +4. Validate the corrected bundle in the NRCES validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1083.md b/catalogue/nhcx/errors/payr-1083.md new file mode 100644 index 000000000..aaa830fc8 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1083.md @@ -0,0 +1,119 @@ +--- +id: nhcx.error.payr-1083 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1083: a practitioner has no HPR id' +summary: >- + The payer rejected your preauthorisation or claim because a practitioner in the + bundle carries no professional registry id. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1080 + - nhcx.error.payr-1050 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.hpr + - shared.glossary.nrces +--- + +# PAYR-1083: a practitioner has no HPR id + +## In plain words + +Each Practitioner in your bundle must carry the practitioner's [HPR](../../shared/glossary/hpr.md) id. One of them has none, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1083`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No HPR details found for the practitioner for resource `%s`. Hence request will not be processed further. Please send the details in the identifier for Practitioner resource with category code as HPIN. + +It is produced when: + +- The Practitioner resource named in the message has no identifier with type code `HPIN`. + +`%s` is the Practitioner resource, as your references name it. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1083` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the Practitioner resource named in the message. +2. Add the practitioner's HPR id to its `identifier`, with type code `HPIN` and system `https://hpr.abdm.gov.in`: + + ```json + "identifier": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "HPIN", + "display": "Health Practitioner ID issued by NDHM" + } + ] + }, + "system": "https://hpr.abdm.gov.in", + "value": "" + } + ] + ``` + + `` is the practitioner's id from their HPR registration. +3. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +4. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1084.md b/catalogue/nhcx/errors/payr-1084.md new file mode 100644 index 000000000..cf020a5a1 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1084.md @@ -0,0 +1,101 @@ +--- +id: nhcx.error.payr-1084 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1084: a reference points at a questionnaire response that is not in + the bundle' +summary: >- + The payer rejected your preauthorisation or claim because the bundle refers to + a questionnaire response it does not contain. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1085 + - nhcx.error.payr-1505 + - nhcx.error.payr-1254 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1084: a reference points at a questionnaire response that is not in the bundle + +## In plain words + +Supporting information can point at a QuestionnaireResponse, for example the answers to a policy or treatment questionnaire. One reference points at a url with no QuestionnaireResponse behind it, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1084`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No questionnaire response resource found for url `%s`. Hence request will not be processed further. Please add the resources for all the references given in the FHIR bundle and try again. + +It is produced when: + +- A reference in the bundle points at the url in the message. +- No QuestionnaireResponse entry in the bundle has that url as its `fullUrl`. + +`%s` is the url the reference points at. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1084` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Add the QuestionnaireResponse as an entry whose `fullUrl` is exactly the url in the message. +2. Check every other reference in the bundle the same way. Each must match the `fullUrl` of an entry. +3. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +4. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1085.md b/catalogue/nhcx/errors/payr-1085.md new file mode 100644 index 000000000..28b519a90 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1085.md @@ -0,0 +1,100 @@ +--- +id: nhcx.error.payr-1085 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1085: a questionnaire response reference points at the wrong resource + type' +summary: >- + The payer rejected your preauthorisation or claim because a reference meant for + a questionnaire response points at a different kind of record. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1084 + - nhcx.error.payr-1505 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1085: a questionnaire response reference points at the wrong resource type + +## In plain words + +Supporting information can point at a QuestionnaireResponse. One such reference points at an entry of another resource type, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1085`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid questionnaire response resource type found in the FHIR bundle for url `%s`. Hence request will not be processed further. + +It is produced when: + +- A reference that must point at a QuestionnaireResponse points at the url in the message. +- The entry at that url is not a QuestionnaireResponse. + +`%s` is the url the reference points at. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1085` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the entry whose `fullUrl` is the url in the message. +2. Point the reference at the QuestionnaireResponse entry instead, or correct the entry so it holds the QuestionnaireResponse. +3. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +4. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1086.md b/catalogue/nhcx/errors/payr-1086.md new file mode 100644 index 000000000..ffb93449f --- /dev/null +++ b/catalogue/nhcx/errors/payr-1086.md @@ -0,0 +1,100 @@ +--- +id: nhcx.error.payr-1086 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1086: a reference points at a procedure that is not in the bundle' +summary: >- + The payer rejected your preauthorisation or claim because the bundle refers to + a procedure record it does not contain. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1087 + - nhcx.error.payr-1072 + - nhcx.error.payr-1026 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1086: a reference points at a procedure that is not in the bundle + +## In plain words + +Each `Claim.procedure` entry points at a Procedure resource in the bundle. One reference points at a url with no Procedure behind it, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1086`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No procedure resource found for url `%s`. Hence request will not be processed further. Please add the resources for all the references given in the FHIR bundle and try again. + +It is produced when: + +- A reference in the bundle points at the url in the message. +- No Procedure entry in the bundle has that url as its `fullUrl`. + +`%s` is the url the reference points at. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1086` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Add the Procedure as an entry whose `fullUrl` is exactly the url in the message. +2. Check every other reference in the bundle the same way. Each must match the `fullUrl` of an entry. +3. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +4. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1087.md b/catalogue/nhcx/errors/payr-1087.md new file mode 100644 index 000000000..70caa2167 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1087.md @@ -0,0 +1,99 @@ +--- +id: nhcx.error.payr-1087 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1087: a procedure reference points at the wrong resource type' +summary: >- + The payer rejected your preauthorisation or claim because a reference meant for + a procedure record points at a different kind of record. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1086 + - nhcx.error.payr-1072 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1087: a procedure reference points at the wrong resource type + +## In plain words + +Each `Claim.procedure` entry points at a Procedure resource in the bundle. One reference points at an entry of another resource type, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1087`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid procedure resource type found in the FHIR bundle for url `%s`. Hence request will not be processed further. Procedure resource type is expected. + +It is produced when: + +- A reference that must point at a Procedure points at the url in the message. +- The entry at that url is not a Procedure. + +`%s` is the url the reference points at. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1087` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the entry whose `fullUrl` is the url in the message. +2. Point the reference at the Procedure entry instead, or correct the entry so it holds the Procedure. +3. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +4. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1088.md b/catalogue/nhcx/errors/payr-1088.md new file mode 100644 index 000000000..b2de09838 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1088.md @@ -0,0 +1,104 @@ +--- +id: nhcx.error.payr-1088 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1088: a composition failed the payer''s checks' +summary: >- + The payer rejected your preauthorisation or claim because a clinical document + in the bundle failed its checks. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1051 + - nhcx.error.payr-1052 + - nhcx.error.payr-1053 + - nhcx.error.payr-1054 + - nhcx.error.payr-1055 + - nhcx.error.payr-1070 + - nhcx.error.payr-1071 + - nhcx.error.payr-1082 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1088: a composition failed the payer's checks + +## In plain words + +Your bundle carries clinical documents as Composition resources. One of them failed the payer's checks, and the message does not name the element. The payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1088`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid composition details. + +It is produced when: + +- A Composition in the bundle fails the payer's checks. +- The message names no element, so check each Composition in full. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1088` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Check every Composition for these elements, each pointing at an entry in the bundle: `title`, `author`, `subject`, `encounter` and each `section[].entry[].reference`. +2. Compare each Composition with the [NRCES](../../shared/glossary/nrces.md) profile named in its `meta.profile`. +3. The codes for the single-element failures are `PAYR-1051` to `PAYR-1055`, `PAYR-1070`, `PAYR-1071` and `PAYR-1082`. +4. Validate the corrected bundle in the NRCES validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1089.md b/catalogue/nhcx/errors/payr-1089.md new file mode 100644 index 000000000..0cb91e50a --- /dev/null +++ b/catalogue/nhcx/errors/payr-1089.md @@ -0,0 +1,108 @@ +--- +id: nhcx.error.payr-1089 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1089: the claim has no billing items' +summary: >- + The payer rejected your preauthorisation or claim because the claim lists nothing + to bill. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1027 + - nhcx.error.payr-1028 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1089: the claim has no billing items + +## In plain words + +The Claim resource lists what you are billing for in `item`. It has no items, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1089`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No billing items found. Hence request will not be processed further. Please try again with valid billing items. + +It is produced when: + +- The Claim resource has no `item` entry. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1089` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Add at least one `Claim.item` for the package you are billing: + + ```json + "item": [ + { + "sequence": 1, + "productOrService": { "coding": [ { "code": "" } ] }, + "quantity": { "value": 1 } + } + ] + ``` + + `` is the package or procedure code from the payer's insurance plan for the policy. +2. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +3. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1090.md b/catalogue/nhcx/errors/payr-1090.md new file mode 100644 index 000000000..f51844964 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1090.md @@ -0,0 +1,118 @@ +--- +id: nhcx.error.payr-1090 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1090: the coverage has no identifier' +summary: >- + The payer rejected your request because the policy record in the bundle carries + no identifier. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.policy-linking + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1091 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1090: the coverage has no identifier + +## In plain words + +Every eligibility, preauthorisation and claim bundle carries a Coverage resource for the beneficiary's policy. Yours has no identifier, so the payer could not tell which policy you mean. + +## Before you start + +You sent a sealed request through [NHCX](../../shared/glossary/nhcx.md), for example `POST /v1/coverageeligibility/check`, `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired `on_` path, for example `/v1/coverageeligibility/on_check` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1090`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No identifier found for coverage component. Hence request will not be processed further. + +It is produced when: + +- The Coverage resource in the bundle has no `identifier`. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on the paired `on_` path of the request you sent with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1090` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `CoverageEligibilityResponse` bundle for a coverage check, or a `ClaimResponse` bundle for a preauthorisation or a claim. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Add an `identifier` to the Coverage resource, carrying the policy id: + + ```json + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NH", + "display": "National Health Plan Identifier" + } + ] + }, + "system": "", + "value": "" + } + ] + ``` + + `` is the policy code the payer issued for the beneficiary. `` is the identifier system the payer uses for policies. +2. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +3. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1091.md b/catalogue/nhcx/errors/payr-1091.md new file mode 100644 index 000000000..81e2a24e6 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1091.md @@ -0,0 +1,117 @@ +--- +id: nhcx.error.payr-1091 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1091: the coverage identifier has no type' +summary: >- + The payer rejected your request because the identifier on the policy record in + the bundle does not say what kind of identifier it is. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1090 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1091: the coverage identifier has no type + +## In plain words + +Every eligibility, preauthorisation and claim bundle carries a Coverage resource for the beneficiary's policy. Its identifier has no type, so the payer stopped processing your request. + +## Before you start + +You sent a sealed request through [NHCX](../../shared/glossary/nhcx.md), for example `POST /v1/coverageeligibility/check`, `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired `on_` path, for example `/v1/coverageeligibility/on_check` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1091`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No type found for coverage component identifier. Hence request will not be processed further. + +It is produced when: + +- The Coverage resource's `identifier` has no `type`. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on the paired `on_` path of the request you sent with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1091` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `CoverageEligibilityResponse` bundle for a coverage check, or a `ClaimResponse` bundle for a preauthorisation or a claim. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Give the Coverage identifier a `type` with code `NH` from `http://terminology.hl7.org/CodeSystem/v2-0203`: + + ```json + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NH", + "display": "National Health Plan Identifier" + } + ] + }, + "system": "", + "value": "" + } + ] + ``` + + `` is the policy code the payer issued for the beneficiary. `` is the identifier system the payer uses for policies. +2. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +3. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1092.md b/catalogue/nhcx/errors/payr-1092.md new file mode 100644 index 000000000..ab329c473 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1092.md @@ -0,0 +1,95 @@ +--- +id: nhcx.error.payr-1092 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1092: the payer failed while processing your request' +summary: >- + The payer could not finish processing your request and asks you to start a new + one. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1092: the payer failed while processing your request + +## In plain words + +The payer hit a failure while processing your request. The message names no element in your bundle. It asks you to start a new request. + +## Before you start + +You sent a sealed request through [NHCX](../../shared/glossary/nhcx.md), for example `POST /v1/coverageeligibility/check`, `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer failed while processing your request and answered on the paired `on_` path, for example `/v1/coverageeligibility/on_check` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1092`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Something went wrong while processing request, kindly intiate new request + +It is produced when: + +- The payer failed while processing the request. +- The message names no element, so there is nothing in the bundle to correct first. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on the paired `on_` path of the request you sent with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1092` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `CoverageEligibilityResponse` bundle for a coverage check, or a `ClaimResponse` bundle for a preauthorisation or a claim. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Send the same content as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +2. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1093.md b/catalogue/nhcx/errors/payr-1093.md new file mode 100644 index 000000000..7e62ecaea --- /dev/null +++ b/catalogue/nhcx/errors/payr-1093.md @@ -0,0 +1,101 @@ +--- +id: nhcx.error.payr-1093 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1093: an encounter linked from a composition has no subject' +summary: >- + The payer rejected your preauthorisation or claim because the visit record behind + a clinical document does not say which patient it is about. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1060 + - nhcx.error.payr-1061 + - nhcx.error.payr-1094 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1093: an encounter linked from a composition has no subject + +## In plain words + +Your bundle carries clinical records as Composition and Observation resources. Each can point at an Encounter, the visit the record belongs to. The Encounter behind one Composition does not say which patient it is about, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1093`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No subject found for encounter in composition component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + +It is produced when: + +- A Composition's `encounter` points at an Encounter that has no `subject`. +- The Composition's structure does not follow the [NRCES](../../shared/glossary/nrces.md) guidelines for the Encounter. + +`PAYR-1060` can carry the same message. Fix both the same way. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1093` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the Encounter that each Composition's `encounter` points at. +2. Set the Encounter's `subject.reference` to the `fullUrl` of the Patient entry. Use the Patient that the Composition's `subject` points at. +3. Check the Encounter against the [NRCES Encounter profile](https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html). +4. Validate the corrected bundle in the NRCES validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1094.md b/catalogue/nhcx/errors/payr-1094.md new file mode 100644 index 000000000..dc07048b6 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1094.md @@ -0,0 +1,101 @@ +--- +id: nhcx.error.payr-1094 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1094: an encounter''s subject has the wrong resource type' +summary: >- + The payer rejected your preauthorisation or claim because an encounter in the + bundle names a subject that is not a patient. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1061 + - nhcx.error.payr-1093 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1094: an encounter's subject has the wrong resource type + +## In plain words + +Your bundle carries clinical records as Composition and Observation resources. Each can point at an Encounter, the visit the record belongs to. One of those Encounters names a subject of a type the payer does not accept, so the payer stopped processing your request. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1094`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid subject type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + +It is produced when: + +- A Composition or an Observation in the bundle points at an Encounter. +- That Encounter's `subject` points at a resource that is not a Patient. +- The Composition's structure does not follow the [NRCES](../../shared/glossary/nrces.md) guidelines for the Encounter. + +`PAYR-1061` carries the same message. Fix both the same way. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1094` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find each Encounter that a Composition's `encounter` or an Observation points at. +2. Set its `subject.reference` to the `fullUrl` of the Patient entry in the same bundle. Use the Patient that the Composition's `subject` points at. +3. Check the Encounter against the [NRCES Encounter profile](https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html). +4. Validate the corrected bundle in the NRCES validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1095.md b/catalogue/nhcx/errors/payr-1095.md new file mode 100644 index 000000000..42e30222e --- /dev/null +++ b/catalogue/nhcx/errors/payr-1095.md @@ -0,0 +1,95 @@ +--- +id: nhcx.error.payr-1095 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1095: the claim carries no valid discharge information' +summary: >- + The payer rejected your claim because it carries no valid information about how + the patient was discharged. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1096 + - nhcx.error.payr-1514 + - nhcx.error.payr-1099 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1095: the claim carries no valid discharge information + +## In plain words + +A claim must say how the patient was discharged. Yours carries no valid discharge information, so the payer stopped processing it. + +## Before you start + +You sent a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1095`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid discharge information received for claim request. Hence request will not be processed further. Please send the discharge information in supporting info in claim resource, with category as DIS (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-category.html), and codes in LAMA/DAMA/DTH/DTM (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-code.html). + +It is produced when: + +- The claim bundle carries no discharge information in `Claim.supportingInfo`. +- Or the discharge entry does not use category `DIS` with one of the codes `LAMA`, `DAMA`, `DTH` or `DTM`. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1095` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Add a `Claim.supportingInfo` entry with category `DIS` and one of the codes `LAMA`, `DAMA`, `DTH` or `DTM`. The value sets are [supporting info category](https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-category.html) and [supporting info code](https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-code.html). +2. Send its value as a string naming the discharge stage: `After Surgery`, `Before Surgery` or `During Surgery`. `PAYR-1514` covers a wrong value type. +3. Give the entry a `sequence` no other supporting info entry uses. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1096.md b/catalogue/nhcx/errors/payr-1096.md new file mode 100644 index 000000000..b0cde552f --- /dev/null +++ b/catalogue/nhcx/errors/payr-1096.md @@ -0,0 +1,94 @@ +--- +id: nhcx.error.payr-1096 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1096: a death discharge carries no valid death date' +summary: >- + The payer rejected your claim because the patient's discharge type is death and + the claim carries no valid date of death. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1095 + - nhcx.error.payr-1503 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1096: a death discharge carries no valid death date + +## In plain words + +When the discharge type is death, the claim must carry the date of death. Yours carries no valid death date, so the payer stopped processing it. + +## Before you start + +You sent a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1096`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Invalid death date received for claim request. Hence request will not be processed further. Please send the death date information in supporting info in claim resource, with category as ONS (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-category.html), and code as DTM (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-code.html). + +It is produced when: + +- The claim's discharge type is death. +- No `Claim.supportingInfo` entry with category `ONS` and code `DTM` carries the death date. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1096` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Add a `Claim.supportingInfo` entry with category `ONS` and code `DTM`, carrying the date of death. The value sets are [supporting info category](https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-category.html) and [supporting info code](https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-code.html). +2. Send the date as a timing (a date or a period) or as a string value. `PAYR-1503` covers a wrong value type. +3. Give the entry a `sequence` no other supporting info entry uses. +4. Validate the corrected bundle in the [NRCES](../../shared/glossary/nrces.md) validator before you send it. +5. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +6. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1097.md b/catalogue/nhcx/errors/payr-1097.md new file mode 100644 index 000000000..c9eb44ca1 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1097.md @@ -0,0 +1,107 @@ +--- +id: nhcx.error.payr-1097 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1097: the request arrived with no encrypted payload' +summary: >- + The payer rejected your request because it found no encrypted content inside it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.jwe-envelope + - nhcx.concept.encryption-certificate + errors: + - nhcx.error.nhcx-1006 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces + troubleshooting: + - nhcx.troubleshooting.recipient-cannot-decrypt +--- + +# PAYR-1097: the request arrived with no encrypted payload + +## In plain words + +Every request carries your [FHIR](../../shared/glossary/fhir.md) bundle, encrypted, in the `payload` property of the request body. The payer opened your request and found no encrypted payload. + +## Before you start + +You sent a sealed request through [NHCX](../../shared/glossary/nhcx.md), for example `POST /v1/coverageeligibility/check`, `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer found no encrypted payload when it opened your request and answered on the paired `on_` path, for example `/v1/coverageeligibility/on_check` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1097`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> No payload found in the request. Please ensure that the request that is being sent, contains encrypted payload within the mandatory payload properties. + +It is produced when: + +- The `payload` property of your request body is missing or empty. +- Or the ciphertext part of the JWE compact string carries no encrypted bundle. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on the paired `on_` path of the request you sent with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1097` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `CoverageEligibilityResponse` bundle for a coverage check, or a `ClaimResponse` bundle for a preauthorisation or a claim. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Encrypt the FHIR bundle with the payer's public certificate. +2. Put the resulting compact string in `payload`: + + ```json + { "payload": "" } + ``` + + `` is the output of encrypting your bundle. +3. Check that the ciphertext part of the compact string is not empty before you send it. +4. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1098.md b/catalogue/nhcx/errors/payr-1098.md new file mode 100644 index 000000000..d25b41512 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1098.md @@ -0,0 +1,101 @@ +--- +id: nhcx.error.payr-1098 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1098: the registration date has the wrong value type' +summary: >- + The payer rejected your preauthorisation or claim because the patient's registration + date is sent in a form it does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1099 + - nhcx.error.payr-1502 + - nhcx.error.payr-1020 + - nhcx.error.payr-1021 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1098: the registration date has the wrong value type + +## In plain words + +The Claim resource carries the patient's registration date as a supporting info entry with category `OTH` and code `EDT`. That entry's value has a type the payer does not accept. + +## Before you start + +You sent a preauthorisation or a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/preauth/submit` or `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on the paired path, `/v1/preauth/on_submit` or `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1098`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Value type received as `%s` for category - OTH and code - EDT for item with sequence `%s` in supporting info in claim resource. In supporting info list, item with category - OTH and code - EDT combination is used to get the registration date. So the registration date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - OTH and code - EDT. + +It is produced when: + +- A `Claim.supportingInfo` entry with category `OTH` and code `EDT` carries a value of the type named in the message. +- The payer accepts the registration date only as a timing (a date or a period) or as a string. + +The first `%s` is the value type you sent. The second `%s` is the `sequence` of the supporting info entry. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1098` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the `Claim.supportingInfo` entry whose `sequence` matches the message. +2. Send the registration date as a timing (a date or a period) or as `valueString`, in [NRCES](../../shared/glossary/nrces.md) date format. +3. Validate the corrected bundle in the NRCES validator before you send it. +4. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1099.md b/catalogue/nhcx/errors/payr-1099.md new file mode 100644 index 000000000..9e600e840 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1099.md @@ -0,0 +1,97 @@ +--- +id: nhcx.error.payr-1099 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1099: the discharge date has the wrong value type' +summary: >- + The payer rejected your claim because the patient's discharge date is sent in + a form it does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1098 + - nhcx.error.payr-1095 + - nhcx.error.payr-1501 + - nhcx.error.payr-1502 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.nrces +--- + +# PAYR-1099: the discharge date has the wrong value type + +## In plain words + +The claim carries the discharge date as a supporting info entry with category `ONS` and code `DSDE`. That entry's value has a type the payer does not accept. + +## Before you start + +You sent a claim through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/claim/submit`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer checked the structure of your [FHIR](../../shared/glossary/fhir.md) bundle and answered on `/v1/claim/on_submit`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1099`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +## What happens + +The payer returns this message: + +> Value type received as `%s` for category - ONS and code - DSDE for item with sequence `%s` in supporting info in claim resource. In supporting info list, item with category - ONS and code - DSDE combination is used to get the discharge date. So the discharge date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - DSDE. + +It is produced when: + +- A `Claim.supportingInfo` entry with category `ONS` and code `DSDE` carries a value of the type named in the message. +- The payer accepts the discharge date only as a timing (a date or a period) or as a string. + +The first `%s` is the value type you sent. The second `%s` is the `sequence` of the supporting info entry. + +## How you know it worked + +Send the corrected request as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/claim/on_submit` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1099` does not appear anywhere in it. +- `x-hcx-status` is neither `response.error` nor `response.fail`. +- The decrypted payload is a `ClaimResponse` bundle for your case. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Find the `Claim.supportingInfo` entry whose `sequence` matches the message. +2. Send the discharge date with category `ONS` and code `DSDE`, as a timing (a date or a period) or as `valueString`, in [NRCES](../../shared/glossary/nrces.md) date format. +3. Validate the corrected bundle in the NRCES validator before you send it. +4. Send it as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1101.md b/catalogue/nhcx/errors/payr-1101.md new file mode 100644 index 000000000..cb298ef17 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1101.md @@ -0,0 +1,98 @@ +--- +id: nhcx.error.payr-1101 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1101: the eligibility purpose is not valid' +summary: >- + The payer returned no result because the purpose of your eligibility check is + not one it accepts. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes, Preauth Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + - nhcx.fhir.preauth-request + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.coverage-eligibility-purposes + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1032 + - nhcx.error.payr-1033 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1101: the eligibility purpose is not valid + +## In plain words + +Every eligibility check says what you want to know, in `CoverageEligibilityRequest.purpose`. The payer did not accept the purpose you sent, so it returned no result. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. The same code can answer a preauthorisation, on `/v1/preauth/on_submit`. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1101`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> Invalid purpose received as (`%s`) for beneficiary id (`%s`) from hospital id (`%s`). Hence no result will be returned. Please try again with a valid purpose. + +It is produced when: + +- The `purpose` on your CoverageEligibilityRequest is not one the payer accepts for this beneficiary and hospital. + +The first `%s` is the purpose you sent. The second is the beneficiary id, and the third is your hospital id. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1101` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Set `CoverageEligibilityRequest.purpose` to `discovery`, `validation`, `benefits` or `auth-requirements`. +2. For `auth-requirements`, include the procedures you are asking about in `item`. `PAYR-1033` covers a check with no items. +3. When you do not have the policy code, send `discovery` first. Then send `validation` with the `policy_code` you receive. +4. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1102.md b/catalogue/nhcx/errors/payr-1102.md new file mode 100644 index 000000000..ad9620852 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1102.md @@ -0,0 +1,103 @@ +--- +id: nhcx.error.payr-1102 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1102: the id you searched with is not valid' +summary: >- + The payer could not find a beneficiary because the id your request searched with + is not valid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes, Preauth Error Codes, Claim Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.participant-get-policies + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1104 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.abha + - nhcx.glossary.pmjay +--- + +# PAYR-1102: the id you searched with is not valid + +## In plain words + +The payer looks up the beneficiary from the id in your request. The id you sent is not one it recognises. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. The same code can answer a preauthorisation on `/v1/preauth/on_submit` or a claim on `/v1/claim/on_submit`. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1102`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> Invalid search parameter requested. Please try again with a valid id. + +> Invalid PMJAY ID requested. Please try again with a valid id. + +It is produced when: + +- The id the payer searches with is not valid. + +The first message answers a coverage eligibility check or a claim. The second answers a preauthorisation, where the id is the [PMJAY](../glossary/pmjay.md) id. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1102` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Correct the beneficiary identifiers on the Patient resource. An eligibility check must carry the PMJAY member id, the [ABHA](../../shared/glossary/abha.md) number, or both. +2. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +3. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1103.md b/catalogue/nhcx/errors/payr-1103.md new file mode 100644 index 000000000..527a70b91 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1103.md @@ -0,0 +1,94 @@ +--- +id: nhcx.error.payr-1103 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1103: the care plan id is not valid' +summary: >- + The payer rejected your request because the care plan id in it is not valid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes, Preauth Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + - nhcx.fhir.preauth-request + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1353 + - nhcx.error.payr-1211 + - nhcx.error.payr-1352 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1103: the care plan id is not valid + +## In plain words + +Your request carries a care plan id. The payer does not recognise the id you sent, so it stopped processing the request. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. The same code can answer a preauthorisation, on `/v1/preauth/on_submit`. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1103`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> Invalid careplan id received. Please try again with valid careplan id. + +It is produced when: + +- The care plan id in your request is not one the payer accepts. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1103` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Correct the care plan id in your request. +2. Send the check again with a valid care plan id. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1104.md b/catalogue/nhcx/errors/payr-1104.md new file mode 100644 index 000000000..009f75f75 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1104.md @@ -0,0 +1,94 @@ +--- +id: nhcx.error.payr-1104 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1104: more than one beneficiary record matches' +summary: >- + The payer stopped processing your request because the beneficiary details you + sent match more than one of its records. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes, Preauth Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + - nhcx.fhir.preauth-request + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1102 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.abha + - nhcx.glossary.pmjay +--- + +# PAYR-1104: more than one beneficiary record matches + +## In plain words + +The payer looks up the beneficiary from the identifiers in your request. They match more than one record in its system, so it cannot tell which person you mean. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. The same code can answer a preauthorisation, on `/v1/preauth/on_submit`. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1104`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> Multiple records found for the beneficiary. Hence request will not be processed further. + +It is produced when: + +- The beneficiary identifiers in your request match more than one beneficiary record at the payer. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1104` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Send identifiers that point at one person. Put both the [PMJAY](../glossary/pmjay.md) member id and the [ABHA](../../shared/glossary/abha.md) number on the Patient resource when you have them. +2. If the request already carries both, contact the [support team](../sandbox/support-contacts.md). The payer must resolve the duplicate record. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. diff --git a/catalogue/nhcx/errors/payr-1105.md b/catalogue/nhcx/errors/payr-1105.md new file mode 100644 index 000000000..517b795eb --- /dev/null +++ b/catalogue/nhcx/errors/payr-1105.md @@ -0,0 +1,96 @@ +--- +id: nhcx.error.payr-1105 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1105: the payer has no configuration for your hospital' +summary: >- + The payer stopped processing your check because it holds no configuration for + your hospital. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1239 + - nhcx.error.payr-1334 + - nhcx.error.payr-1405 + - nhcx.error.payr-1116 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.hfr +--- + +# PAYR-1105: the payer has no configuration for your hospital + +## In plain words + +The payer keeps a configuration for each hospital it deals with. It found none for yours, so it could not process your check. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1105`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> Hospital configuration not found. Please contact support team. + +It is produced when: + +- The payer holds no configuration for the hospital that sent the request. + +`PAYR-1239` on a preauthorisation and `PAYR-1334` on a claim carry the same message. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1105` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Check the provider Organization in your bundle. It must carry your [HFR](../../shared/glossary/hfr.md) id as an identifier with type code `NPI`. +2. The HFR id must match the registry id recorded in NHCX for your participant code. +3. Contact the [support team](../sandbox/support-contacts.md) to have the payer set up your hospital's configuration. +4. Once the payer confirms the setup, send the check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. diff --git a/catalogue/nhcx/errors/payr-1106.md b/catalogue/nhcx/errors/payr-1106.md new file mode 100644 index 000000000..553a04c5b --- /dev/null +++ b/catalogue/nhcx/errors/payr-1106.md @@ -0,0 +1,98 @@ +--- +id: nhcx.error.payr-1106 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1106: the payer has no details for a requested procedure' +summary: >- + The payer found no details for a procedure you asked about in your eligibility + check. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.insurance-plan + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1240 + - nhcx.error.payr-1344 + - nhcx.error.payr-1113 + - nhcx.error.payr-1118 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1106: the payer has no details for a requested procedure + +## In plain words + +An `auth-requirements` check lists the procedures you want to know about. The payer holds no details for one of them. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1106`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> No details found for the requested procedures in the system. + +It is produced when: + +- An item in your check carries a procedure code the payer holds no details for. + +`PAYR-1240` on a preauthorisation and `PAYR-1344` on a claim carry the same message. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1106` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. +- For an `auth-requirements` check, the response carries an entry for each item you asked about, with `authorizationRequired` and `excluded`. + +## When it goes wrong + +1. Check each `item[*].productOrService.coding.code` in the request. +2. Use the procedure code from the payer's insurance plan: the code of the type of the benefit component of the specific cost of the plan. +3. Fetch the insurance plan for the policy when you do not have it. +4. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1107.md b/catalogue/nhcx/errors/payr-1107.md new file mode 100644 index 000000000..f2f75c0f2 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1107.md @@ -0,0 +1,94 @@ +--- +id: nhcx.error.payr-1107 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1107: the check carries no billable item' +summary: >- + The payer rejected your eligibility check because it carries no item it can bill + against. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.coverage-eligibility-purposes + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1033 + - nhcx.error.payr-1118 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1107: the check carries no billable item + +## In plain words + +An `auth-requirements` check must list the procedures you want to know about. Yours carries no item the payer can bill against. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1107`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> No billable item received. Please try again with valid item data. + +It is produced when: + +- The check carries no billable item in `item`. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1107` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. +- For an `auth-requirements` check, the response carries an entry for each item you asked about, with `authorizationRequired` and `excluded`. + +## When it goes wrong + +1. Add at least one `item` to the CoverageEligibilityRequest. +2. Give each item a speciality in `category.coding.code`, a package or procedure code in `productOrService.coding.code`, and a `quantity.value`. +3. Take the codes from the payer's insurance plan for the policy. +4. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1108.md b/catalogue/nhcx/errors/payr-1108.md new file mode 100644 index 000000000..29f6db63e --- /dev/null +++ b/catalogue/nhcx/errors/payr-1108.md @@ -0,0 +1,93 @@ +--- +id: nhcx.error.payr-1108 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1108: the payer has no details for the requested stratification' +summary: >- + The payer found no details for the stratification you asked about in your eligibility + check. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.insurance-plan + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1106 + - nhcx.error.payr-1118 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1108: the payer has no details for the requested stratification + +## In plain words + +An item in an eligibility check can carry a stratification, such as a ward or care level. The payer holds no details for the one you sent. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1108`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> No details found for the requested stratification in the system. + +It is produced when: + +- An item in your check carries a stratification code in `item[*].modifier.coding.code` that the payer holds no details for. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1108` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. +- For an `auth-requirements` check, the response carries an entry for each item you asked about, with `authorizationRequired` and `excluded`. + +## When it goes wrong + +1. Check each `item[*].modifier.coding.code` in the request. +2. Use a stratification code the payer holds for that package in its insurance plan. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1109.md b/catalogue/nhcx/errors/payr-1109.md new file mode 100644 index 000000000..b84c1ab7d --- /dev/null +++ b/catalogue/nhcx/errors/payr-1109.md @@ -0,0 +1,95 @@ +--- +id: nhcx.error.payr-1109 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1109: the payer has no details for a requested investigation' +summary: >- + The payer found no details for an investigation you asked about in your eligibility + check. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.insurance-plan + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1320 + - nhcx.error.payr-1118 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1109: the payer has no details for a requested investigation + +## In plain words + +An eligibility check can ask about investigations, such as laboratory tests. The payer holds no details for one you sent. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1109`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> No details found for the requested investigations in the system. + +It is produced when: + +- An item in your check carries an investigation code the payer holds no details for. + +`PAYR-1320` on a claim carries a similar message. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1109` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. +- For an `auth-requirements` check, the response carries an entry for each item you asked about, with `authorizationRequired` and `excluded`. + +## When it goes wrong + +1. Check the investigation codes in `item[*].productOrService.coding.code`. +2. Use an investigation code the payer holds in its insurance plan for the policy. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1110.md b/catalogue/nhcx/errors/payr-1110.md new file mode 100644 index 000000000..508bf104d --- /dev/null +++ b/catalogue/nhcx/errors/payr-1110.md @@ -0,0 +1,95 @@ +--- +id: nhcx.error.payr-1110 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1110: the payer has no details for a requested implant' +summary: >- + The payer found no details for an implant you asked about in your eligibility + check. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.insurance-plan + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1355 + - nhcx.error.payr-1118 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1110: the payer has no details for a requested implant + +## In plain words + +An eligibility check can ask about implants used in a procedure. The payer holds no details for one you sent. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1110`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> No details found for the requested implants in the system. + +It is produced when: + +- An item in your check carries an implant code the payer holds no details for. + +`PAYR-1355` on a claim carries a similar message. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1110` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. +- For an `auth-requirements` check, the response carries an entry for each item you asked about, with `authorizationRequired` and `excluded`. + +## When it goes wrong + +1. Check the implant codes in `item[*].productOrService.coding.code`. +2. Use an implant code the payer holds in its insurance plan for the policy. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1111.md b/catalogue/nhcx/errors/payr-1111.md new file mode 100644 index 000000000..793b43524 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1111.md @@ -0,0 +1,92 @@ +--- +id: nhcx.error.payr-1111 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1111: a payer rule rejected the request' +summary: >- + A business rule at the payer rejected your eligibility check, and the message + does not name the rule. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1245 + - nhcx.error.payr-1354 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1111: a payer rule rejected the request + +## In plain words + +The payer applies business rules to every check. One of them rejected yours. The message does not say which rule failed. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1111`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> Rule failure. + +It is produced when: + +- A business rule in the payer's system rejected the check. +- The message names no rule and no element. + +`PAYR-1245` on a preauthorisation and `PAYR-1354` on a claim carry the same message. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1111` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Contact the [support team](../sandbox/support-contacts.md) with the correlation id of the failed check. The payer can name the rule that failed. +2. Correct the request once you know the rule. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. diff --git a/catalogue/nhcx/errors/payr-1112.md b/catalogue/nhcx/errors/payr-1112.md new file mode 100644 index 000000000..bd4787d81 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1112.md @@ -0,0 +1,92 @@ +--- +id: nhcx.error.payr-1112 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1112: the payer id is not valid' +summary: >- + The payer rejected your eligibility check because the payer id in it is not valid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.participant-get-policies + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-code + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1119 + - nhcx.error.payr-1246 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - nhcx.glossary.participant-code +--- + +# PAYR-1112: the payer id is not valid + +## In plain words + +Your check names the payer it is for. The payer id you sent is not valid, so the payer stopped processing the check. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1112`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> Invalid payer id received. Please try again ith valid payer details + +It is produced when: + +- The payer id in your check is not one the payer accepts. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1112` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Check `x-hcx-recipient_code` in the protected header and the insurer Organization in the bundle. +2. Use the `processingID` from the get policies response as the recipient code, not the `PayerID`. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1113.md b/catalogue/nhcx/errors/payr-1113.md new file mode 100644 index 000000000..4160827c8 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1113.md @@ -0,0 +1,94 @@ +--- +id: nhcx.error.payr-1113 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1113: an item code is not valid' +summary: >- + The payer rejected your eligibility check because an item code in it is not valid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1248 + - nhcx.error.payr-1360 + - nhcx.error.payr-1106 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1113: an item code is not valid + +## In plain words + +Each item in an eligibility check carries a package or procedure code. The payer did not accept the code named in the message. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1113`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> Invalid item code received as `%s`. Please try again with valid data + +It is produced when: + +- An item carries the code named in the message, and the payer does not accept it. + +`%s` is the item code you sent. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1113` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. +- For an `auth-requirements` check, the response carries an entry for each item you asked about, with `authorizationRequired` and `excluded`. + +## When it goes wrong + +1. Find the item whose `productOrService.coding.code` matches the message. +2. Replace it with a package or procedure code from the payer's insurance plan for the policy. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1114.md b/catalogue/nhcx/errors/payr-1114.md new file mode 100644 index 000000000..dd0a79d60 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1114.md @@ -0,0 +1,96 @@ +--- +id: nhcx.error.payr-1114 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1114: an item''s speciality code is not valid' +summary: >- + The payer rejected your eligibility check because the speciality code on one item + is not valid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + - nhcx.fhir.insurance-plan-bundle + - nhcx.fhir.pmjay-insurance-plan + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1202 + - nhcx.error.payr-1351 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1114: an item's speciality code is not valid + +## In plain words + +Each item in an eligibility check carries a speciality code, such as the code for general medicine. The payer did not accept the one on the item named in the message. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1114`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> Invalid speciality code received as `%s` for item `%s`. Please try again with valid data. Speciality code is available as the code of the category for specific cost of plan in isurance plan + +It is produced when: + +- The item named in the message carries a speciality code the payer does not accept. + +The first `%s` is the speciality code you sent. The second is the item. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1114` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. +- For an `auth-requirements` check, the response carries an entry for each item you asked about, with `authorizationRequired` and `excluded`. + +## When it goes wrong + +1. Find the item named in the message and its `category.coding.code`. +2. Replace it with the speciality code from the payer's insurance plan: the code of the category of the specific cost of the plan. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1115.md b/catalogue/nhcx/errors/payr-1115.md new file mode 100644 index 000000000..c598093ed --- /dev/null +++ b/catalogue/nhcx/errors/payr-1115.md @@ -0,0 +1,93 @@ +--- +id: nhcx.error.payr-1115 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1115: an item''s quantity is not valid' +summary: >- + The payer rejected your eligibility check because the quantity on one item is + not valid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1208 + - nhcx.error.payr-1349 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1115: an item's quantity is not valid + +## In plain words + +Each item in an eligibility check carries a quantity. The payer did not accept the quantity on the item named in the message. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1115`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> Invalid procedure quantity received as `%s` for item `%s`. Please try again with valid data. Item quantity should be greater than 1 + +It is produced when: + +- The item named in the message carries a quantity the payer does not accept. + +The first `%s` is the quantity you sent. The second is the item. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1115` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. +- For an `auth-requirements` check, the response carries an entry for each item you asked about, with `authorizationRequired` and `excluded`. + +## When it goes wrong + +1. Find the item named in the message. +2. Correct its `quantity.value` to the number of units you are asking about. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1116.md b/catalogue/nhcx/errors/payr-1116.md new file mode 100644 index 000000000..939fab42e --- /dev/null +++ b/catalogue/nhcx/errors/payr-1116.md @@ -0,0 +1,92 @@ +--- +id: nhcx.error.payr-1116 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1116: your hospital is not authorised under the policy' +summary: >- + The payer stopped processing your check because your hospital is not authorised + to raise cases under the policy. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1004 + - nhcx.error.payr-1401 + - nhcx.error.payr-1105 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1116: your hospital is not authorised under the policy + +## In plain words + +A hospital can raise cases only under the policies it is authorised for. Yours is not authorised under the policy in the message. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1116`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> Hospital is not authorized to raise any case under policy `%s`. Hence request will not be processed further. Please connect with the support team to get the required authorization + +It is produced when: + +- Your hospital has no authorisation from the payer to raise cases under the policy named in the message. + +`%s` is the policy code. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1116` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Contact the [support team](../sandbox/support-contacts.md) to get your hospital authorised under the policy named in the message. +2. Raise no cases under that policy until the authorisation is in place. +3. Once the authorisation is in place, send the check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. diff --git a/catalogue/nhcx/errors/payr-1117.md b/catalogue/nhcx/errors/payr-1117.md new file mode 100644 index 000000000..adf1c3d0d --- /dev/null +++ b/catalogue/nhcx/errors/payr-1117.md @@ -0,0 +1,97 @@ +--- +id: nhcx.error.payr-1117 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1117: the payer has no details for the policy' +summary: >- + The payer stopped processing your check because it holds no details for the policy + you named. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.participant-get-policies + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.coverage-eligibility-purposes + - nhcx.concept.policy-linking + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1006 + - nhcx.error.payr-1402 + - nhcx.error.payr-1121 + - nhcx.error.payr-1122 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1117: the payer has no details for the policy + +## In plain words + +Your check names the beneficiary's policy. The payer holds no details for the policy named in the message. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1117`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> No policy details found for `%s`. Hence request will not be processed further + +It is produced when: + +- The payer holds no policy details for the policy code in your request. + +`%s` is the policy code you sent. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1117` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Check the policy code in the Coverage resource's `identifier.value`. +2. When you do not have the policy code, send a check with purpose `discovery` to fetch the active `policy_code`. Then send `validation` with it. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1118.md b/catalogue/nhcx/errors/payr-1118.md new file mode 100644 index 000000000..d9d18a825 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1118.md @@ -0,0 +1,95 @@ +--- +id: nhcx.error.payr-1118 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1118: the payer has no details for the requested items' +summary: >- + The payer stopped processing your eligibility check because it holds no details + for the items you asked about. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1106 + - nhcx.error.payr-1108 + - nhcx.error.payr-1109 + - nhcx.error.payr-1110 + - nhcx.error.payr-1113 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1118: the payer has no details for the requested items + +## In plain words + +An `auth-requirements` check lists the items you want to know about. The payer holds no details for them. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1118`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> No details found for requested items. Hence request will not be processed further + +It is produced when: + +- The items in your check carry codes the payer holds no details for. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1118` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. +- For an `auth-requirements` check, the response carries an entry for each item you asked about, with `authorizationRequired` and `excluded`. + +## When it goes wrong + +1. Check every item's `productOrService.coding.code`, `category.coding.code` and `modifier.coding.code`. +2. Take each code from the payer's insurance plan for the policy. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1119.md b/catalogue/nhcx/errors/payr-1119.md new file mode 100644 index 000000000..bb904bd65 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1119.md @@ -0,0 +1,96 @@ +--- +id: nhcx.error.payr-1119 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1119: the payer received no details for the payer id from the exchange' +summary: >- + The payer stopped processing your check because the exchange returned no details + for the payer id you sent. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.participant-search + - nhcx.endpoint.participant-get-policies + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.participant-registry + - nhcx.concept.participant-code + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1112 + - nhcx.error.payr-1247 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1119: the payer received no details for the payer id from the exchange + +## In plain words + +The payer looks up the payer id in your request with the exchange. The exchange returned no details for the id in the message. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1119`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> No payer details received for payer id `%s` from HCX. Please try again with valid payer details. + +It is produced when: + +- The payer id in your request is not one the exchange holds participant details for. + +`%s` is the payer id you sent. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1119` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Look up the payer in the participant registry, and use the participant code it returns. +2. Use the `processingID` from the get policies response as the recipient code, not the `PayerID`. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1120.md b/catalogue/nhcx/errors/payr-1120.md new file mode 100644 index 000000000..ad3825add --- /dev/null +++ b/catalogue/nhcx/errors/payr-1120.md @@ -0,0 +1,90 @@ +--- +id: nhcx.error.payr-1120 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1120: the reference id has been used before' +summary: >- + The payer rejected your eligibility check because its reference id repeats one + it has already seen. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1120: the reference id has been used before + +## In plain words + +Each request carries a reference id. The payer has already received one with the id in the message. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1120`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> Duplicate reference id found as `%s`. Please try again with valid reference details. + +It is produced when: + +- The reference id in your request matches one the payer has already received. + +`%s` is the reference id you sent. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1120` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Give every request its own reference id. +2. Send the check again with a reference id you have not used before. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1121.md b/catalogue/nhcx/errors/payr-1121.md new file mode 100644 index 000000000..6265bd512 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1121.md @@ -0,0 +1,97 @@ +--- +id: nhcx.error.payr-1121 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1121: the policy is not found for this beneficiary' +summary: >- + The payer stopped processing your check because it holds no record of the named + policy for this beneficiary. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.policy-link-and-delink + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.participant-get-policies + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.policy-linking + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1117 + - nhcx.error.payr-1122 + - nhcx.error.payr-1123 + - nhcx.error.payr-1005 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1121: the policy is not found for this beneficiary + +## In plain words + +The payer checks that the beneficiary holds the policy in your request. It holds no record of that policy for that beneficiary. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1121`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> No policy details found for `%s` for beneficiary `%s`. Hence request will not be processed further. + +It is produced when: + +- The payer holds no details of the policy in the message for the beneficiary in the message. + +The first `%s` is the policy code. The second is the beneficiary id. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1121` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Fetch the beneficiary's linked policies with the get policies call, and use a policy code from the result. +2. When no policy is linked, send a check with purpose `discovery` to fetch the active `policy_code`. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1122.md b/catalogue/nhcx/errors/payr-1122.md new file mode 100644 index 000000000..78bbddc12 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1122.md @@ -0,0 +1,96 @@ +--- +id: nhcx.error.payr-1122 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1122: the beneficiary has no policy with the payer' +summary: >- + The payer stopped processing your check because it holds no policy for the beneficiary. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.policy-link-and-delink + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.participant-get-policies + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1121 + - nhcx.error.payr-1123 + - nhcx.error.payr-1102 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id + - shared.glossary.abha + - nhcx.glossary.pmjay +--- + +# PAYR-1122: the beneficiary has no policy with the payer + +## In plain words + +The payer looks for the policies held by the beneficiary in your request. It found none. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1122`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> No policy details found for beneficiary `%s`. Hence request will not be processed further. + +It is produced when: + +- The payer holds no policy details for the beneficiary in the message. + +`%s` is the beneficiary id. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1122` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Check the beneficiary identifiers on the Patient resource: the [PMJAY](../glossary/pmjay.md) member id, the [ABHA](../../shared/glossary/abha.md) number, or both. +2. Confirm the beneficiary holds a policy with this payer. Fetch linked policies with the get policies call. +3. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +4. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1123.md b/catalogue/nhcx/errors/payr-1123.md new file mode 100644 index 000000000..4c3640803 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1123.md @@ -0,0 +1,96 @@ +--- +id: nhcx.error.payr-1123 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1123: the beneficiary is not covered by this payer' +summary: >- + The payer stopped processing your check because the beneficiary is not a covered + member of any of its policies. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Coverage Error Codes. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.participant-get-policies + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.policy-linking + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1005 + - nhcx.error.payr-1121 + - nhcx.error.payr-1122 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nhcx + - nhcx.glossary.jwe + - nhcx.glossary.correlation-id +--- + +# PAYR-1123: the beneficiary is not covered by this payer + +## In plain words + +You sent the check to a payer that does not cover the beneficiary. The beneficiary must be enrolled in one of its policies first. + +## Before you start + +You sent a coverage eligibility check through [NHCX](../../shared/glossary/nhcx.md) with `POST /v1/coverageeligibility/check`. NHCX accepted it with a 202 and forwarded it to the payer. + +The payer evaluated the policy, the beneficiary and your hospital's configuration and answered on `/v1/coverageeligibility/on_check`. This code arrives in that answer. + +Read `x-hcx-error_details` from the answer's protocol headers. In a sealed answer they sit in the [JWE](../glossary/jwe.md) protected header. In a `ProtocolResponse` object they sit at the top level. `x-hcx-error_details.code` holds `PAYR-1123`, and `x-hcx-error_details.message` holds the text shown in the next section. + +`x-hcx-status` on the answer reads `response.error` or `response.fail`. Treat either value as a rejected request. + +The payer can also embed business error detail inside the sealed `CoverageEligibilityResponse`. Decrypt the payload with your private key and read it as well. + +## What happens + +The payer returns this message: + +> Beneficiary is not a covered member for requested payer. Please enroll beneficiary for applicable policy of requested payer and try again. + +It is produced when: + +- The beneficiary is not a covered member of any applicable policy of the payer you sent the check to. + +`PAYR-1005` means the same for a single policy. + +## How you know it worked + +Send the corrected check as a new request. NHCX answers with a 202. + +You know the fix worked when the payer's answer arrives on `/v1/coverageeligibility/on_check` with these properties: + +- The answer carries no `x-hcx-error_details`, and `PAYR-1123` does not appear anywhere in it. +- `x-hcx-status` reads `response.complete`. +- The decrypted payload holds a `CoverageEligibilityResponse` with `outcome` set to `complete`. +- `x-hcx-correlation_id` matches the one you sent on the new request. + +## When it goes wrong + +1. Confirm which payer covers the beneficiary. Fetch the beneficiary's policies with the get policies call. +2. Send the check to the `processingID` from that response as the recipient code, not the `PayerID`. +3. If no policy of this payer covers the beneficiary, the beneficiary must be enrolled for an applicable policy first. +4. Send the corrected check as a new request with a new `x-hcx-correlation_id`. After a failure the old correlation id is inactive, and reusing it returns `NHCX-1006`. +5. If the same code comes back after these steps, contact the [NHCX support team](../sandbox/support-contacts.md). Give them the correlation id of the failed request. diff --git a/catalogue/nhcx/errors/payr-1201.md b/catalogue/nhcx/errors/payr-1201.md new file mode 100644 index 000000000..710442d26 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1201.md @@ -0,0 +1,84 @@ +--- +id: nhcx.error.payr-1201 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1201: claimed amount is zero or above the wallet balance' +summary: >- + The payer refused the request because the amount claimed was zero, or larger than + the balance left in the beneficiary's scheme wallet. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes, Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1233 + - nhcx.error.payr-1235 +--- + +# PAYR-1201: claimed amount is zero or above the wallet balance + +## In plain words + +The amount you asked the [payer](../glossary/payer.md) to approve is not allowed. It is zero or less, or more than the balance left in the beneficiary's wallet. A [PMJAY](../glossary/pmjay.md) family shares one wallet across every member's treatment. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1201` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid claimed amount received for case number %s. Please try again with a valid claim amount. Claimed amount should be greater than INR 0 and less than equals to balance wallet amount of the beneficiary. +``` + +The same code and message can arrive on `/v1/claim/on_submit` when you submit a claim. See [Submit a claim](../flows/claim-submit.md). + +`PAYR-1201` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +The payer refuses the request when either condition holds: + +- The claimed amount for the case is not greater than INR 0. +- The claimed amount is greater than the beneficiary's balance wallet amount. + +The claimed amount is the total you request, sent in `Claim.total`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1201`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Check the balance before you submit. Run a [coverage eligibility check](../flows/coverage-eligibility-check.md) with purpose `validation`. It returns the used amount, the available balance and the wallet liability. +2. Set `Claim.total` above `0` and no higher than the available balance. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1202.md b/catalogue/nhcx/errors/payr-1202.md new file mode 100644 index 000000000..185d01dd0 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1202.md @@ -0,0 +1,82 @@ +--- +id: nhcx.error.payr-1202 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1202: speciality code is not in the insurance plan' +summary: >- + The payer refused the request because an item names a speciality code that the + hospital's insurance plan does not carry. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.pmjay-insurance-plan + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1203 + - nhcx.error.payr-1204 +--- + +# PAYR-1202: speciality code is not in the insurance plan + +## In plain words + +An item in your request names a speciality the payer does not recognise for your hospital. Speciality codes must come from the hospital's [insurance plan](../concepts/insurance-plan.md). + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1202` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid speciality code received as %s for item %s for case number %s. Please try again with valid data. Speciality code is available as the code of the category for specific cost of plan in isurance plan. +``` + +`PAYR-1202` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The speciality code on the item named in the message matches no speciality in the insurance plan. +- On the request, the speciality is the item's category, `Claim.item.category`. For example, `MP` is General medicine. +- In the insurance plan, each speciality is the `category` of a `specificCost` entry under `plan`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1202`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Fetch the current insurance plan for your hospital and the beneficiary's policy. See [Fetch the insurance plan](../flows/insurance-plan-request.md). +2. Find the package under `plan.specificCost`. Copy that entry's `category` code into `Claim.item.category` for the named item. +3. Resend the request. + +Refresh your stored insurance plan at least weekly, and whenever the payer renews or amends the policy. Outdated tariff versions cause automatic rejection. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1203.md b/catalogue/nhcx/errors/payr-1203.md new file mode 100644 index 000000000..d06af28f4 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1203.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1203 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1203: speciality description does not match the insurance plan' +summary: >- + The payer refused the request because a speciality description differs from the + one in the hospital's insurance plan. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes, Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.pmjay-insurance-plan + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1202 + - nhcx.error.payr-1205 +--- + +# PAYR-1203: speciality description does not match the insurance plan + +## In plain words + +The speciality description you sent for a procedure does not match the payer's text for that speciality. Descriptions must come from the hospital's [insurance plan](../concepts/insurance-plan.md), word for word. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1203` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid speciality description received as %s for procedure %s for case number %s. Please try again with valid data. Speciality description is available as the display of the category for specific cost of plan in isurance plan. +``` + +The same code and message can arrive on `/v1/claim/on_submit` when you submit a claim. See [Submit a claim](../flows/claim-submit.md). + +`PAYR-1203` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The speciality description in the message, sent for the procedure named in the message, differs from the payer's description. +- In the insurance plan, the description is the `display` of the `category` of a `specificCost` entry under `plan`. +- On the request, the speciality sits in `Claim.item.category`. Its `display` carries the description. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1203`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Fetch the current insurance plan for your hospital and the beneficiary's policy. See [Fetch the insurance plan](../flows/insurance-plan-request.md). +2. Copy the `display` of the matching `category` exactly as the plan carries it. +3. Take the code and the description from the same plan entry. +4. Resend the request. + +Refresh your stored insurance plan at least weekly, and whenever the payer renews or amends the policy. Outdated tariff versions cause automatic rejection. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1204.md b/catalogue/nhcx/errors/payr-1204.md new file mode 100644 index 000000000..398f6d802 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1204.md @@ -0,0 +1,87 @@ +--- +id: nhcx.error.payr-1204 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1204: procedure code is not in the insurance plan' +summary: >- + The payer refused the request because a procedure code is not one the hospital's + insurance plan offers. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes, Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.pmjay-insurance-plan + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1205 + - nhcx.error.payr-1240 + - nhcx.error.payr-1248 +--- + +# PAYR-1204: procedure code is not in the insurance plan + +## In plain words + +You requested a procedure code that the payer does not offer at your hospital. Procedure codes must come from the hospital's [insurance plan](../concepts/insurance-plan.md). + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1204` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid procedure code received as %s for case number %s. Please try again with valid data. Procedure code is available as the code of the type for benefit component, of specific cost, of plan in isurance plan. +``` + +The same code and message can arrive on `/v1/claim/on_submit` when you submit a claim. See [Submit a claim](../flows/claim-submit.md). + +`PAYR-1204` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The procedure code in the message matches no benefit in the insurance plan. +- In the insurance plan, the procedure code is the code of the `type` of a `benefit` inside a `specificCost` entry under `plan`. +- On the request, the package code sits in `Claim.item.productOrService`, for example `MG0111A`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1204`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Fetch the current insurance plan for your hospital and the beneficiary's policy. See [Fetch the insurance plan](../flows/insurance-plan-request.md). +2. Pick the package from the plan. Copy the benefit `type` code into `Claim.item.productOrService`. +3. Do not type package codes by hand. +4. Resend the request. + +Refresh your stored insurance plan at least weekly, and whenever the payer renews or amends the policy. Outdated tariff versions cause automatic rejection. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1205.md b/catalogue/nhcx/errors/payr-1205.md new file mode 100644 index 000000000..dd436f7a5 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1205.md @@ -0,0 +1,83 @@ +--- +id: nhcx.error.payr-1205 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1205: procedure description does not match the insurance plan' +summary: >- + The payer refused the request because a procedure description differs from the + one in the hospital's insurance plan. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.pmjay-insurance-plan + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1204 + - nhcx.error.payr-1203 +--- + +# PAYR-1205: procedure description does not match the insurance plan + +## In plain words + +The description you sent for a procedure does not match the payer's text for that procedure code. Descriptions must come from the hospital's [insurance plan](../concepts/insurance-plan.md), word for word. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1205` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid procedure description received as %s for procedure %s for case number %s. Please try again with valid data. Procedure description is available as the display of the type for benefit component, of specific cost, of plan in isurance plan. +``` + +`PAYR-1205` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The procedure description in the message differs from the payer's description of the procedure named in the message. +- In the insurance plan, the description is the `display` of the `type` of a `benefit` inside a `specificCost` entry under `plan`. +- On the request, the description is the `display` in `Claim.item.productOrService`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1205`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Fetch the current insurance plan for your hospital and the beneficiary's policy. See [Fetch the insurance plan](../flows/insurance-plan-request.md). +2. Copy the benefit `type` `display` exactly as the plan carries it. +3. Take the code and the description from the same plan entry. +4. Resend the request. + +Refresh your stored insurance plan at least weekly, and whenever the payer renews or amends the policy. Outdated tariff versions cause automatic rejection. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1206.md b/catalogue/nhcx/errors/payr-1206.md new file mode 100644 index 000000000..957e33ad4 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1206.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1206 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1206: procedure type is not accepted' +summary: >- + The payer refused the request because the type sent for a procedure is not one + it accepts. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1207 + - nhcx.error.payr-1210 +--- + +# PAYR-1206: procedure type is not accepted + +## In plain words + +The type you gave a requested procedure is not one the payer accepts for it. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1206` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid procedure type received as %s for procedure %s for case number %s. Please try again with valid data. +``` + +`PAYR-1206` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The procedure type in the message is not valid for the procedure named in the message. +- Each `Claim.procedure` entry carries a `type`. For example, a conservative treatment carries code `conservative`, display `Conservative`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1206`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Set every procedure component to the value the insurance plan response gives for the package. Do not derive these values by hand. +2. Correct the `type` on the named `Claim.procedure` entry. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1207.md b/catalogue/nhcx/errors/payr-1207.md new file mode 100644 index 000000000..7eaf43183 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1207.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1207 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1207: procedure factor is not accepted' +summary: >- + The payer refused the request because the factor sent for a procedure is not one + it accepts. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1206 + - nhcx.error.payr-1208 +--- + +# PAYR-1207: procedure factor is not accepted + +## In plain words + +The factor you sent for a requested procedure is not one the payer accepts. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1207` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid procedure factor received as %s for procedure %s for case number %s. Please try again with valid data. +``` + +`PAYR-1207` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The factor in the message is not valid for the procedure named in the message. +- The request carries factors on its items, in `Claim.item.factor`. A factor is a decimal, for example `0.5`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1207`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Set every procedure component to the value the insurance plan response gives for the package. +2. Correct the factor for the named procedure. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1208.md b/catalogue/nhcx/errors/payr-1208.md new file mode 100644 index 000000000..0faffa155 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1208.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1208 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1208: item quantity is not accepted' +summary: >- + The payer refused the request because the quantity sent for an item failed its + check. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1209 + - nhcx.error.payr-1228 +--- + +# PAYR-1208: item quantity is not accepted + +## In plain words + +The quantity you sent for an item is not one the payer accepts. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1208` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid procedure quantity received as %s for item %s for case number %s. Please try again with valid data. Item quantity should be greater than 1. +``` + +`PAYR-1208` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The quantity in the message, sent for the item named in the message, fails the payer's quantity check. +- The quantity sits in `Claim.item.quantity.value`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1208`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Correct `Claim.item.quantity.value` for the named item. +2. Check it against the package in the insurance plan. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1209.md b/catalogue/nhcx/errors/payr-1209.md new file mode 100644 index 000000000..36aa26d2d --- /dev/null +++ b/catalogue/nhcx/errors/payr-1209.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1209 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1209: item net amount is zero or less' +summary: >- + The payer refused the request because an item's net amount was not greater than + zero. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1201 + - nhcx.error.payr-1229 +--- + +# PAYR-1209: item net amount is zero or less + +## In plain words + +An item in your request has a net amount of zero or less. Every item must carry a positive amount. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1209` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid net amount received as INR %s for item %s for case number %s. Please try again with valid data. Item net amount should be greater than INR 0. +``` + +`PAYR-1209` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The net amount in the message, for the item named in the message, is not greater than INR 0. +- The item's net amount sits in `Claim.item.net`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1209`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Give every item a net amount above `0`. +2. Take package prices from the insurance plan. Cost values there are in rupees, with `unit` `INR`. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1210.md b/catalogue/nhcx/errors/payr-1210.md new file mode 100644 index 000000000..6e5e5cb03 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1210.md @@ -0,0 +1,76 @@ +--- +id: nhcx.error.payr-1210 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1210: procedure status is not accepted' +summary: >- + The payer refused the request because the status sent for a procedure is not one + it accepts. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1206 +--- + +# PAYR-1210: procedure status is not accepted + +## In plain words + +The status you sent for a requested procedure is not one the payer accepts. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1210` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid procedure status received as %s for procedure %s for case number %s. Please try again with valid data. +``` + +`PAYR-1210` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The procedure status in the message is not valid for the procedure named in the message. +- The status sits on the `Procedure` resource that the `Claim.procedure` entry references. +- A procedure planned in a preauthorisation request carries status `preparation`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1210`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Use `preparation` in `Procedure.status` for a procedure that has not happened yet. +2. Check that every `Claim.procedure` reference points at a `Procedure` in the bundle. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1211.md b/catalogue/nhcx/errors/payr-1211.md new file mode 100644 index 000000000..a33fecbd7 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1211.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1211 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1211: beneficiary and care plan match no rule at this hospital' +summary: >- + The payer refused the request because the beneficiary and the care plan met none + of its criteria for treatment at your hospital. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.coverage-eligibility-purposes + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1352 +--- + +# PAYR-1211: beneficiary and care plan match no rule at this hospital + +## In plain words + +The payer found no rule that lets this beneficiary receive this care plan at your hospital. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1211` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Requested beneficary details and careplan details does not match any criteria for processing the case at this hospital. Please try again with valid data. +``` + +`PAYR-1211` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The beneficiary details and the care plan details in the request match none of the payer's criteria for your hospital. +- The same message returns [`PAYR-1352`](payr-1352.md) on a claim. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1211`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Run a [coverage eligibility check](../flows/coverage-eligibility-check.md) with purpose `auth-requirements` for the same beneficiary and procedures. It tells you whether the treatment is covered for this member at your hospital. +2. Correct the beneficiary or care plan details to match, or choose a package the check covers. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1212.md b/catalogue/nhcx/errors/payr-1212.md new file mode 100644 index 000000000..4a18da976 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1212.md @@ -0,0 +1,78 @@ +--- +id: nhcx.error.payr-1212 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1212: enhancement has no approved preauthorisation' +summary: >- + The payer refused an enhancement because it holds no approved preauthorisation + for that case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.preauth-enhancement + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1213 + - nhcx.error.payr-1217 +--- + +# PAYR-1212: enhancement has no approved preauthorisation + +## In plain words + +You asked to extend a preauthorisation the payer never approved. An [enhancement](../glossary/enhancement.md) only extends a preauthorisation that is already approved. + +## Before you start + +- You sent an enhancement, workflow `13`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Enhance a preauthorisation](../flows/preauth-enhancement.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1212` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +No previous preauthorization approved record found for the enhancement request for case number %s. Hence request will not be processed further. Please initiate a new preauthorization. +``` + +`PAYR-1212` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- You sent an enhancement, workflow `13`, for the case number in the message. +- The payer holds no approved preauthorisation for that case number. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1212`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `22`. +- Denied: workflow `231`. +- Queried: workflow `241`. + +## When it goes wrong + +1. Check the case number. It must be the one your approved preauthorisation carries in `Claim.identifier`. +2. If the case has no approval, send a new preauthorisation with workflow `12`, as the message instructs. +3. Send the enhancement only after approval arrives on `/v1/preauth/on_submit` with workflow `21`. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1213.md b/catalogue/nhcx/errors/payr-1213.md new file mode 100644 index 000000000..cccb3ba0c --- /dev/null +++ b/catalogue/nhcx/errors/payr-1213.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1213 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1213: enhancement sent while the case is still in progress' +summary: >- + The payer refused an enhancement because it is still deciding an earlier request + on the same case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-enhancement + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.preauth-enhancement + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1212 + - nhcx.error.payr-1215 + - nhcx.error.payr-1216 +--- + +# PAYR-1213: enhancement sent while the case is still in progress + +## In plain words + +The payer is still deciding an earlier request on this case. It accepts no enhancement until that [adjudication](../glossary/adjudication.md) is complete. + +## Before you start + +- You sent an enhancement, workflow `13`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Enhance a preauthorisation](../flows/preauth-enhancement.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1213` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Existing case in progress found for case number %s. Hence enhancement request will not be accepted. Please try after the adjudication is completed for the current case. +``` + +`PAYR-1213` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- You sent an enhancement, workflow `13`, for the case number in the message. +- An earlier request on the same case is still in progress with the payer. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1213`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `22`. +- Denied: workflow `231`. +- Queried: workflow `241`. + +## When it goes wrong + +1. Wait for the payer's decision on the earlier request. It arrives on `/v1/preauth/on_submit`. +2. Send the enhancement again after that decision arrives. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1214.md b/catalogue/nhcx/errors/payr-1214.md new file mode 100644 index 000000000..d72bccbdb --- /dev/null +++ b/catalogue/nhcx/errors/payr-1214.md @@ -0,0 +1,76 @@ +--- +id: nhcx.error.payr-1214 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1214: resubmission has no approved preauthorisation' +summary: >- + The payer refused a resubmission because it holds no approved preauthorisation + for that case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-query-response + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1215 + - nhcx.error.payr-1212 +--- + +# PAYR-1214: resubmission has no approved preauthorisation + +## In plain words + +You resubmitted a preauthorisation that the payer holds no approval for. It processes the request no further. + +## Before you start + +- You sent a resubmission, workflow `121`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1214` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +No previous preauthorization approved record found for the resubmission request for case number %s. Hence request will not be processed further. Please initiate a new preauthorization. +``` + +`PAYR-1214` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- You sent a resubmission, workflow `121`, for the case number in the message. +- The payer holds no approved preauthorisation for that case number. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1214`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Check that the case number matches `Claim.identifier` on the original preauthorisation. +2. If no approved preauthorisation exists, send a new preauthorisation with workflow `12`, as the message instructs. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1215.md b/catalogue/nhcx/errors/payr-1215.md new file mode 100644 index 000000000..5f304ecce --- /dev/null +++ b/catalogue/nhcx/errors/payr-1215.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1215 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1215: resubmission sent while the case is still in progress' +summary: >- + The payer refused a resubmission because it is still deciding an earlier request + on the same case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-query-response + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1214 + - nhcx.error.payr-1213 + - nhcx.error.payr-1216 +--- + +# PAYR-1215: resubmission sent while the case is still in progress + +## In plain words + +The payer is still deciding an earlier request on this case. It accepts no resubmission until that [adjudication](../glossary/adjudication.md) is complete. + +## Before you start + +- You sent a resubmission, workflow `121`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1215` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Existing case in progress found for case number %s. Hence resubmission request will not be accepted. Please try after the adjudication is completed for the current case. +``` + +`PAYR-1215` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- You sent a resubmission, workflow `121`, for the case number in the message. +- An earlier request on the same case is still in progress with the payer. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1215`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Wait for the payer's decision on the earlier request. It arrives on `/v1/preauth/on_submit`. +2. Send the resubmission again after that decision arrives. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1216.md b/catalogue/nhcx/errors/payr-1216.md new file mode 100644 index 000000000..3f4b9ab7d --- /dev/null +++ b/catalogue/nhcx/errors/payr-1216.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1216 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1216: new preauthorisation sent for a case already in progress' +summary: >- + The payer refused a new preauthorisation because a request on the same case is + still in progress. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1213 + - nhcx.error.payr-1215 + - nhcx.error.payr-1217 +--- + +# PAYR-1216: new preauthorisation sent for a case already in progress + +## In plain words + +A request on this case is still in progress with the payer. It accepts no new preauthorisation on the case until that finishes. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1216` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Existing case in progress found for case number %s. Hence new preauthorization request will not be accepted. +``` + +`PAYR-1216` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- You sent a new preauthorisation, workflow `12`, with the case number in the message. +- The payer is still processing an earlier request on that case number. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1216`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Do not open a second preauthorisation on a case that is in progress. +2. Wait for the decision on the first request. It arrives on `/v1/preauth/on_submit`. +3. If the new request is for a different admission, give it its own case number in `Claim.identifier`. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1217.md b/catalogue/nhcx/errors/payr-1217.md new file mode 100644 index 000000000..2cc5490c1 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1217.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1217 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1217: new preauthorisation sent for a case already approved' +summary: >- + The payer refused a new preauthorisation because the case already has an approved + one. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1216 + - nhcx.error.payr-1212 +--- + +# PAYR-1217: new preauthorisation sent for a case already approved + +## In plain words + +This case already has an approved preauthorisation. To change it, extend it or resubmit it. Do not open a new one. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1217` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Previous preauthorization approved record found for the new preauthorization request for case number %s. Hence request will not be processed further. Please initiate enhancement/resubmission. +``` + +`PAYR-1217` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- You sent a new preauthorisation, workflow `12`, with the case number in the message. +- The payer already holds an approved preauthorisation for that case number. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1217`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. To add treatment to the approved case, send an enhancement with workflow `13`. See [Enhance a preauthorisation](../flows/preauth-enhancement.md). +2. To resubmit the case, send workflow `121`. +3. If the request is for a different admission, give it its own case number in `Claim.identifier`. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1218.md b/catalogue/nhcx/errors/payr-1218.md new file mode 100644 index 000000000..efdf99057 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1218.md @@ -0,0 +1,76 @@ +--- +id: nhcx.error.payr-1218 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1218: query response sent for a case that was not queried' +summary: >- + The payer refused a query response because it holds no queried preauthorisation + for that case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.queries-and-communication + flows: + - nhcx.flow.preauth-query-response + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1219 +--- + +# PAYR-1218: query response sent for a case that was not queried + +## In plain words + +You answered a query the payer never raised. It holds no queried preauthorisation for this case. + +## Before you start + +- You sent a query response, workflow `19`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Answer a preauthorisation query](../flows/preauth-query-response.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1218` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +No queried preauthorization record found for the query update request for case number %s. Hence request will not be processed further. +``` + +`PAYR-1218` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- You sent a query response, workflow `19`, for the case number in the message. +- The payer holds no preauthorisation in the queried state for that case number. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1218`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Send a query response only after the payer queries the case. A query arrives on `/v1/preauth/on_submit` with workflow `24` and adjudication reason `queried`. +2. Check that the case number matches the queried case. +3. If the case was not queried, wait for the payer's decision instead. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1219.md b/catalogue/nhcx/errors/payr-1219.md new file mode 100644 index 000000000..1b12be278 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1219.md @@ -0,0 +1,75 @@ +--- +id: nhcx.error.payr-1219 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1219: case is not in the queried state' +summary: >- + The payer refused a query response because the case it names has not been queried. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.queries-and-communication + flows: + - nhcx.flow.preauth-query-response + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1218 +--- + +# PAYR-1219: case is not in the queried state + +## In plain words + +You sent a query response for a case the payer has not queried. It processes the request no further. + +## Before you start + +- You sent a query response, workflow `19`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Answer a preauthorisation query](../flows/preauth-query-response.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1219` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Case number %s is not queried. Hence query updation request will not be processed further. +``` + +`PAYR-1219` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- You sent a query response, workflow `19`, for the case number in the message. +- That case is not in the queried state with the payer. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1219`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Send a query response only after the payer queries the case. A query arrives on `/v1/preauth/on_submit` with workflow `24` and adjudication reason `queried`. +2. Check that the case number matches the queried case. +3. If the case was not queried, wait for the payer's decision instead. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1220.md b/catalogue/nhcx/errors/payr-1220.md new file mode 100644 index 000000000..341b34fd8 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1220.md @@ -0,0 +1,82 @@ +--- +id: nhcx.error.payr-1220 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1220: investigation description does not match its code' +summary: >- + The payer refused the request because an investigation's description does not + match the payer's description for its code. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes, Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1221 + - nhcx.error.payr-1222 + - nhcx.error.payr-1223 +--- + +# PAYR-1220: investigation description does not match its code + +## In plain words + +An investigation in your request carries a description that does not match its code. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1220` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid investigation description received as %s for investigation code %s for case number %s. Please try again with valid data. +``` + +The same code and message can arrive on `/v1/claim/on_submit` when you submit a claim. See [Submit a claim](../flows/claim-submit.md). + +`PAYR-1220` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The description in the message does not match the payer's description for the investigation code in the message. +- Investigations travel as `supportingInfo` entries with category `INV`, Document Type - Investigation. +- Each entry's `code` carries the code and its `display`. For example, code `MAND0409` has display `any investigations done`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1220`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Take investigation codes and descriptions from the coverage eligibility `auth-requirements` response. It lists the documents a preauthorisation needs. +2. Copy the `display` exactly as the payer published it. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1221.md b/catalogue/nhcx/errors/payr-1221.md new file mode 100644 index 000000000..ab6bf81cd --- /dev/null +++ b/catalogue/nhcx/errors/payr-1221.md @@ -0,0 +1,80 @@ +--- +id: nhcx.error.payr-1221 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1221: investigation code is not valid' +summary: >- + The payer refused the request because an investigation code is not one it recognises. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes, Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1220 + - nhcx.error.payr-1232 +--- + +# PAYR-1221: investigation code is not valid + +## In plain words + +An investigation in your request carries a code the payer does not recognise. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1221` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid investigation code received as %s for case number %s. Please try again with valid data. +``` + +The same code and message can arrive on `/v1/claim/on_submit` when you submit a claim. See [Submit a claim](../flows/claim-submit.md). + +`PAYR-1221` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The investigation code in the message is not one the payer accepts for the case. +- Investigations travel as `supportingInfo` entries with category `INV`, Document Type - Investigation. +- Each entry's `code` carries the code and its `display`. For example, code `MAND0409` has display `any investigations done`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1221`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Take investigation codes and descriptions from the coverage eligibility `auth-requirements` response. It lists the documents a preauthorisation needs. +2. Copy the code exactly as the payer published it. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1222.md b/catalogue/nhcx/errors/payr-1222.md new file mode 100644 index 000000000..9027a7859 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1222.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1222 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1222: investigation status is not accepted' +summary: >- + The payer refused the request because the status sent for an investigation is + not one it accepts. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1220 + - nhcx.error.payr-1223 +--- + +# PAYR-1222: investigation status is not accepted + +## In plain words + +The status you sent for an investigation is not one the payer accepts. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1222` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid investigation status received as %s for investigation %s for case number %s. Please try again with valid data. +``` + +`PAYR-1222` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The status in the message is not valid for the investigation named in the message. +- Investigations travel as `supportingInfo` entries with category `INV`, Document Type - Investigation. +- Each entry's `code` carries the code and its `display`. For example, code `MAND0409` has display `any investigations done`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1222`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Correct the status on the named investigation. +2. Resend the request. +3. If the value matches your clinical record, contact the support team with the case number. See [Support contacts](../sandbox/support-contacts.md). + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1223.md b/catalogue/nhcx/errors/payr-1223.md new file mode 100644 index 000000000..4f9322b3c --- /dev/null +++ b/catalogue/nhcx/errors/payr-1223.md @@ -0,0 +1,82 @@ +--- +id: nhcx.error.payr-1223 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1223: investigation attachment is not valid' +summary: >- + The payer refused the request because a document attached to an investigation + failed its checks. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1222 + - nhcx.error.payr-1227 +--- + +# PAYR-1223: investigation attachment is not valid + +## In plain words + +The document attached to an investigation could not be accepted. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1223` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid investigation attachment received for investigation %s for case number %s. Please try again with valid data. +``` + +`PAYR-1223` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The attachment on the investigation named in the message is not valid. +- Every attachment must meet these rules: + +- The value is Base64 encoded. +- The attachment has a name. +- The content type is `application/pdf`, `application/jpg`, `application/jpeg`, `application/png` or `application/fhir+json`. +- Each file is 2 MB or less, and the whole bundle stays within 20 MB. +- Each item carries one document. Merge several documents into one file. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1223`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Re-encode the file as Base64. Check its name and content type against the rules above. +2. Keep each file within 2 MB. Merge several documents into one file when an item needs them. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1224.md b/catalogue/nhcx/errors/payr-1224.md new file mode 100644 index 000000000..84e4e84dd --- /dev/null +++ b/catalogue/nhcx/errors/payr-1224.md @@ -0,0 +1,82 @@ +--- +id: nhcx.error.payr-1224 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1224: implant description does not match its code' +summary: >- + The payer refused the request because an implant's description does not match + the payer's description for its code. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes, Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1225 +--- + +# PAYR-1224: implant description does not match its code + +## In plain words + +An implant in your request carries a description that does not match its code. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1224` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid implant description received as %s for implant code %s for case number %s. Please try again with valid data. +``` + +The same code and message can arrive on `/v1/claim/on_submit` when you submit a claim. See [Submit a claim](../flows/claim-submit.md). + +`PAYR-1224` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The implant description in the message does not match the payer's description for the implant code in the message. +- In the insurance plan, implants appear as `cost` lines of type `Implant` on the benefits under `plan.specificCost`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1224`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Fetch the current insurance plan for your hospital and the beneficiary's policy. See [Fetch the insurance plan](../flows/insurance-plan-request.md). +2. Take the implant code and its description from the same `Implant` cost line. +3. Resend the request. + +Refresh your stored insurance plan at least weekly, and whenever the payer renews or amends the policy. Outdated tariff versions cause automatic rejection. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1225.md b/catalogue/nhcx/errors/payr-1225.md new file mode 100644 index 000000000..349666f7f --- /dev/null +++ b/catalogue/nhcx/errors/payr-1225.md @@ -0,0 +1,81 @@ +--- +id: nhcx.error.payr-1225 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1225: implant code is not valid' +summary: >- + The payer refused the request because an implant code is not one it recognises. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes, Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1224 +--- + +# PAYR-1225: implant code is not valid + +## In plain words + +An implant in your request carries a code the payer does not recognise. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1225` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid implant code received as %s for case number %s. Please try again with valid data. +``` + +The same code and message can arrive on `/v1/claim/on_submit` when you submit a claim. See [Submit a claim](../flows/claim-submit.md). + +`PAYR-1225` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The implant code in the message is not one the payer accepts for the case. +- In the insurance plan, implants appear as `cost` lines of type `Implant` on the benefits under `plan.specificCost`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1225`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Fetch the current insurance plan for your hospital and the beneficiary's policy. See [Fetch the insurance plan](../flows/insurance-plan-request.md). +2. Use only implant codes from the plan's `Implant` cost lines for the package. +3. Resend the request. + +Refresh your stored insurance plan at least weekly, and whenever the payer renews or amends the policy. Outdated tariff versions cause automatic rejection. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1226.md b/catalogue/nhcx/errors/payr-1226.md new file mode 100644 index 000000000..f96edd17f --- /dev/null +++ b/catalogue/nhcx/errors/payr-1226.md @@ -0,0 +1,76 @@ +--- +id: nhcx.error.payr-1226 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1226: implant status is not accepted' +summary: >- + The payer refused the request because the status sent for an implant is not one + it accepts. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1227 + - nhcx.error.payr-1222 +--- + +# PAYR-1226: implant status is not accepted + +## In plain words + +The status you sent for an implant is not one the payer accepts. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1226` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid implant status received as %s for investigation %s for case number %s. Please try again with valid data. +``` + +`PAYR-1226` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The implant status in the message is not one the payer accepts. +- In the insurance plan, implants appear as `cost` lines of type `Implant` on the benefits under `plan.specificCost`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1226`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Correct the status on the named implant. +2. Resend the request. +3. If the value matches your clinical record, contact the support team with the case number. See [Support contacts](../sandbox/support-contacts.md). + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1227.md b/catalogue/nhcx/errors/payr-1227.md new file mode 100644 index 000000000..1bba4909d --- /dev/null +++ b/catalogue/nhcx/errors/payr-1227.md @@ -0,0 +1,82 @@ +--- +id: nhcx.error.payr-1227 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1227: implant attachment is not valid' +summary: >- + The payer refused the request because a document attached to an implant failed + its checks. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1226 + - nhcx.error.payr-1223 +--- + +# PAYR-1227: implant attachment is not valid + +## In plain words + +The document attached to an implant could not be accepted. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1227` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid implant attachment received for investigation %s for case number %s. Please try again with valid data. +``` + +`PAYR-1227` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The implant attachment named in the message is not valid. +- Every attachment must meet these rules: + +- The value is Base64 encoded. +- The attachment has a name. +- The content type is `application/pdf`, `application/jpg`, `application/jpeg`, `application/png` or `application/fhir+json`. +- Each file is 2 MB or less, and the whole bundle stays within 20 MB. +- Each item carries one document. Merge several documents into one file. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1227`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Re-encode the file as Base64. Check its name and content type against the rules above. +2. Keep each file within 2 MB. Merge several documents into one file when an item needs them. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1228.md b/catalogue/nhcx/errors/payr-1228.md new file mode 100644 index 000000000..ef8e74988 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1228.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1228 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1228: implant quantity is not accepted' +summary: >- + The payer refused the request because the quantity sent for an implant failed + its check. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1229 + - nhcx.error.payr-1208 +--- + +# PAYR-1228: implant quantity is not accepted + +## In plain words + +The quantity you sent for an implant is not one the payer accepts. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1228` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid implant quantity received as %s for implant %s for case number %s. Please try again with valid data. +``` + +`PAYR-1228` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The quantity in the message, sent for the implant named in the message, fails the payer's check. +- In the insurance plan, implants appear as `cost` lines of type `Implant` on the benefits under `plan.specificCost`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1228`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Correct the quantity for the named implant. +2. Check it against the implant's cost line in the insurance plan. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1229.md b/catalogue/nhcx/errors/payr-1229.md new file mode 100644 index 000000000..c0e10fb0c --- /dev/null +++ b/catalogue/nhcx/errors/payr-1229.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1229 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1229: implant net amount is not accepted' +summary: >- + The payer refused the request because the net amount sent for an implant failed + its check. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1230 + - nhcx.error.payr-1209 +--- + +# PAYR-1229: implant net amount is not accepted + +## In plain words + +The net amount you sent for an implant is not one the payer accepts. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1229` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid implant net amount received as INR %s for implant %s for case number %s. Please try again with valid data. +``` + +`PAYR-1229` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The net amount in the message, in rupees, is not valid for the implant named in the message. +- In the insurance plan, implants appear as `cost` lines of type `Implant` on the benefits under `plan.specificCost`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1229`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Fetch the current insurance plan for your hospital and the beneficiary's policy. See [Fetch the insurance plan](../flows/insurance-plan-request.md). +2. Work the implant's net amount from the price on its `Implant` cost line. Cost values are in rupees, with `unit` `INR`. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1230.md b/catalogue/nhcx/errors/payr-1230.md new file mode 100644 index 000000000..1669ed64a --- /dev/null +++ b/catalogue/nhcx/errors/payr-1230.md @@ -0,0 +1,78 @@ +--- +id: nhcx.error.payr-1230 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1230: implant unit price is not accepted' +summary: >- + The payer refused the request because the unit price sent for an implant failed + its check. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1229 +--- + +# PAYR-1230: implant unit price is not accepted + +## In plain words + +The unit price you sent for an implant is not one the payer accepts. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1230` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid implant unit price received as INR %s for implant %s for case number %s. Please try again with valid data. +``` + +`PAYR-1230` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The unit price in the message, in rupees, is not valid for the implant named in the message. +- In the insurance plan, implants appear as `cost` lines of type `Implant` on the benefits under `plan.specificCost`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1230`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Fetch the current insurance plan for your hospital and the beneficiary's policy. See [Fetch the insurance plan](../flows/insurance-plan-request.md). +2. Use the price on the implant's `Implant` cost line. Cost values are in rupees, with `unit` `INR`. +3. Resend the request. + +Refresh your stored insurance plan at least weekly, and whenever the payer renews or amends the policy. Outdated tariff versions cause automatic rejection. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1231.md b/catalogue/nhcx/errors/payr-1231.md new file mode 100644 index 000000000..5a3624ca4 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1231.md @@ -0,0 +1,65 @@ +--- +id: nhcx.error.payr-1231 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1231: claim already raised for this case' +summary: >- + The payer refused a preauthorisation request because the final claim for the case + has already been raised. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request +--- + +# PAYR-1231: claim already raised for this case + +## In plain words + +The final claim for this case is already raised. After that, the payer accepts no preauthorisation request on the case. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1231` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Claim has already been raised for case number %s. Hence preauthorization request will not be accepted. +``` + +`PAYR-1231` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- You sent a preauthorisation request for the case number in the message. +- A claim has already been raised for that case number. + +## How you know it worked + +Your system stops sending preauthorisation requests for this case. The case continues on the claim, and the claim's decision arrives on `/v1/claim/on_submit`. + +## When it goes wrong + +1. Do not send further preauthorisation requests for this case number. +2. Continue the case on the claim. See [Submit a claim](../flows/claim-submit.md). diff --git a/catalogue/nhcx/errors/payr-1232.md b/catalogue/nhcx/errors/payr-1232.md new file mode 100644 index 000000000..afc83e28b --- /dev/null +++ b/catalogue/nhcx/errors/payr-1232.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1232 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1232: investigations missing for a private hospital' +summary: >- + The payer refused the request because a private hospital sent no investigation + details for the case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1221 + - nhcx.error.payr-1223 +--- + +# PAYR-1232: investigations missing for a private hospital + +## In plain words + +Your request carries no investigation details. For a private hospital, investigation details are mandatory. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1232` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +No investigation found for case number %s. Investigation details are mandatory for private hospitals. +``` + +`PAYR-1232` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- Your hospital is a private hospital. +- The request for the case number in the message carries no investigation. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1232`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Run a [coverage eligibility check](../flows/coverage-eligibility-check.md) with purpose `auth-requirements`. Its response lists the documents the preauthorisation needs. +2. Attach each investigation as a `supportingInfo` entry with category `INV`, Document Type - Investigation. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1233.md b/catalogue/nhcx/errors/payr-1233.md new file mode 100644 index 000000000..f4087100a --- /dev/null +++ b/catalogue/nhcx/errors/payr-1233.md @@ -0,0 +1,79 @@ +--- +id: nhcx.error.payr-1233 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1233: wallet short and patient liability not allowed' +summary: >- + The payer refused the request because the beneficiary's wallet cannot cover it + and your hospital may not charge the shortfall to the patient. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1201 + - nhcx.error.payr-1235 + - nhcx.error.payr-1356 +--- + +# PAYR-1233: wallet short and patient liability not allowed + +## In plain words + +The request costs more than the beneficiary's wallet holds. Patient liability does not apply at your hospital, so the shortfall cannot move to the patient. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1233` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Patient liability is not aplicable for the hospital and beneficiary do not have enough wallet balance with deficit amount INR %s for the requested preauthorization for case number %s. +``` + +`PAYR-1233` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The requested amount exceeds the wallet balance by the deficit in the message, in rupees. +- Patient liability is not applicable for your hospital. +- The same message returns [`PAYR-1356`](payr-1356.md) on a claim. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1233`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Run a [coverage eligibility check](../flows/coverage-eligibility-check.md) with purpose `validation`. It returns the used amount, the available balance and the wallet liability. +2. Reduce the request so it fits within the available balance. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1234.md b/catalogue/nhcx/errors/payr-1234.md new file mode 100644 index 000000000..50a13f8c3 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1234.md @@ -0,0 +1,76 @@ +--- +id: nhcx.error.payr-1234 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1234: no preauthorisation found for the case number' +summary: >- + The payer refused the request because it holds no preauthorisation for the case + number sent. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1212 + - nhcx.error.payr-1214 +--- + +# PAYR-1234: no preauthorisation found for the case number + +## In plain words + +Your request refers to a case the payer holds no preauthorisation for. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1234` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +No preauthorization record found for case number %s. Hence the request will not be processed. +``` + +`PAYR-1234` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The request names the case number in the message. +- The payer holds no preauthorisation record for that case number. +- The case number travels in `Claim.identifier`, with identifier type `CLN`, Claim number. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1234`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Check the case number against the one on the original preauthorisation. +2. If no preauthorisation exists, send a new one with workflow `12`. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1235.md b/catalogue/nhcx/errors/payr-1235.md new file mode 100644 index 000000000..751fe53df --- /dev/null +++ b/catalogue/nhcx/errors/payr-1235.md @@ -0,0 +1,78 @@ +--- +id: nhcx.error.payr-1235 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1235: wallet balance is insufficient' +summary: >- + The payer refused the request because the beneficiary's wallet balance cannot + cover it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1201 + - nhcx.error.payr-1233 + - nhcx.error.payr-1323 +--- + +# PAYR-1235: wallet balance is insufficient + +## In plain words + +The beneficiary's wallet does not hold enough balance for this request. A [PMJAY](../glossary/pmjay.md) family shares one wallet, so treatment for any member draws it down. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1235` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Insufficient wallet balance. Hence the request will not be processed. +``` + +`PAYR-1235` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The wallet balance for the beneficiary is lower than the amount the request needs. +- The same message returns [`PAYR-1323`](payr-1323.md) on a claim. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1235`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Run a [coverage eligibility check](../flows/coverage-eligibility-check.md) with purpose `validation`. It returns the used amount, the available balance and the wallet liability. +2. Reduce the request so it fits within the available balance. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1236.md b/catalogue/nhcx/errors/payr-1236.md new file mode 100644 index 000000000..957179fbb --- /dev/null +++ b/catalogue/nhcx/errors/payr-1236.md @@ -0,0 +1,74 @@ +--- +id: nhcx.error.payr-1236 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1236: claim type is not in-patient or out-patient' +summary: >- + The payer refused the request because the claim type was missing or not an accepted + in-patient or out-patient value. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1333 +--- + +# PAYR-1236: claim type is not in-patient or out-patient + +## In plain words + +The request does not say, in a form the payer accepts, whether this is in-patient or out-patient care. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1236` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid claim type (in-patient/out-patient) received. Hence the request will not be processed. +``` + +`PAYR-1236` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The claim type in the request is missing or is not a value the payer accepts. +- The claim type sits in `Claim.type`. A preauthorisation for an admission carries code `737481003`, Inpatient care management, from `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-claim-type`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1236`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Set `Claim.type` with the system and code above for an in-patient case. +2. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1237.md b/catalogue/nhcx/errors/payr-1237.md new file mode 100644 index 000000000..80786be41 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1237.md @@ -0,0 +1,76 @@ +--- +id: nhcx.error.payr-1237 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1237: beneficiary has an active preauthorisation at another hospital' +summary: >- + The payer refused the request because the beneficiary already has an active preauthorisation + at another hospital. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-cancel + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1238 + - nhcx.error.payr-1268 +--- + +# PAYR-1237: beneficiary has an active preauthorisation at another hospital + +## In plain words + +The beneficiary already has an active preauthorisation at another hospital. The payer refuses a second one while that stays active. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1237` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Beneficiary is having an active preauthorization request at %s. Hence the request will not be processed. Kindly inform %s to cancel the active preauthorization request or raise a claim to proceed with current preauthorization. +``` + +`PAYR-1237` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The beneficiary in your request has an active preauthorisation at the hospital named in the message. +- That preauthorisation is neither cancelled nor claimed. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1237`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Ask the hospital named in the message to cancel its active preauthorisation, or to raise its claim. +2. Resend your request once that hospital confirms. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1238.md b/catalogue/nhcx/errors/payr-1238.md new file mode 100644 index 000000000..febe33693 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1238.md @@ -0,0 +1,79 @@ +--- +id: nhcx.error.payr-1238 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1238: beneficiary has an active preauthorisation at your hospital' +summary: >- + The payer refused the request because the beneficiary already has an active preauthorisation + at your hospital. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-cancel + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1237 + - nhcx.error.payr-1267 +--- + +# PAYR-1238: beneficiary has an active preauthorisation at your hospital + +## In plain words + +The beneficiary already has an active preauthorisation at your hospital. Close it before you open another. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1238` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Beneficiary is having an active preauthorization request at this hospital with reference number %s. Hence the request will not be processed. Kindly cancel the active preauthorization request or raise a claim to proceed with current preauthorization. +``` + +`PAYR-1238` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The beneficiary in your request has an active preauthorisation at your hospital. +- The message gives its reference number. +- That preauthorisation is neither cancelled nor claimed. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1238`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Find the active preauthorisation by the reference number in the message. +2. Cancel it, or raise its claim. See [Cancel a preauthorisation](../flows/preauth-cancel.md) and [Submit a claim](../flows/claim-submit.md). +3. Resend your request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1239.md b/catalogue/nhcx/errors/payr-1239.md new file mode 100644 index 000000000..142aecfd4 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1239.md @@ -0,0 +1,75 @@ +--- +id: nhcx.error.payr-1239 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1239: hospital configuration not found' +summary: >- + The payer refused the request because it has no configuration set up for your + hospital. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1105 + - nhcx.error.payr-1334 +--- + +# PAYR-1239: hospital configuration not found + +## In plain words + +The payer has no configuration for your hospital, so it cannot process the request. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1239` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Hospital configuration not found. Please contact support team. +``` + +`PAYR-1239` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The payer holds no hospital configuration for the hospital that sent the request. +- The same message returns [`PAYR-1105`](payr-1105.md) on a coverage eligibility check and [`PAYR-1334`](payr-1334.md) on a claim. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1239`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Contact the support team, as the message instructs. See [Support contacts](../sandbox/support-contacts.md). +2. Resend the request once the support team confirms your configuration. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1240.md b/catalogue/nhcx/errors/payr-1240.md new file mode 100644 index 000000000..57e1cdd13 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1240.md @@ -0,0 +1,80 @@ +--- +id: nhcx.error.payr-1240 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1240: requested procedures not found' +summary: >- + The payer refused the request because it holds no details for the procedures requested. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1204 + - nhcx.error.payr-1106 + - nhcx.error.payr-1344 +--- + +# PAYR-1240: requested procedures not found + +## In plain words + +The payer holds no details for one or more procedures in your request. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1240` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +No details found for the requested procedures in the system. +``` + +`PAYR-1240` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- A procedure in the request is not in the payer's system. +- The same message returns [`PAYR-1106`](payr-1106.md) on a coverage eligibility check and [`PAYR-1344`](payr-1344.md) on a claim. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1240`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Fetch the current insurance plan for your hospital and the beneficiary's policy. See [Fetch the insurance plan](../flows/insurance-plan-request.md). +2. Use only package codes from the current plan in `Claim.item.productOrService`. +3. Resend the request. + +Refresh your stored insurance plan at least weekly, and whenever the payer renews or amends the policy. Outdated tariff versions cause automatic rejection. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1241.md b/catalogue/nhcx/errors/payr-1241.md new file mode 100644 index 000000000..33d0d73dc --- /dev/null +++ b/catalogue/nhcx/errors/payr-1241.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1241 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1241: registration date is not valid' +summary: >- + The payer refused the request because the patient's registration date was missing + or not valid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1242 + - nhcx.error.payr-1098 +--- + +# PAYR-1241: registration date is not valid + +## In plain words + +The patient's registration date in your request is missing or not a date the payer accepts. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1241` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid registration date received for case number %s. Hence the request will not be processed. +``` + +`PAYR-1241` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The registration date for the case number in the message is not valid. +- The registration date travels in `Claim.supportingInfo`, with category `OTH` and code `EDT`, EncounterDateTime. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1241`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Send the registration date in a `supportingInfo` entry with category `OTH` and code `EDT`. +2. Send the value as `timing`, a date or a period, or as a string. +3. Use the [NRCeS](../../shared/glossary/nrces.md) date-time format, for example `2026-03-10T21:21:17+05:30`. +4. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1242.md b/catalogue/nhcx/errors/payr-1242.md new file mode 100644 index 000000000..dac4fb051 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1242.md @@ -0,0 +1,76 @@ +--- +id: nhcx.error.payr-1242 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1242: registration date format is not valid' +summary: >- + The payer refused the request because the patient's registration date was not + in an accepted format. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1241 + - nhcx.error.payr-1098 +--- + +# PAYR-1242: registration date format is not valid + +## In plain words + +The patient's registration date is present, but not in a format the payer accepts. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1242` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid registration date format received for case number %s. Hence the request will not be processed. +``` + +`PAYR-1242` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The registration date for the case number in the message is not in the accepted format. +- The registration date travels in `Claim.supportingInfo`, with category `OTH` and code `EDT`, EncounterDateTime. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1242`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Write the registration date in the [NRCeS](../../shared/glossary/nrces.md) date-time format, for example `2026-03-10T21:21:17+05:30`. +2. Send it as `timing`, a date or a period, or as a string, in the entry with category `OTH` and code `EDT`. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1243.md b/catalogue/nhcx/errors/payr-1243.md new file mode 100644 index 000000000..6c9f6d21f --- /dev/null +++ b/catalogue/nhcx/errors/payr-1243.md @@ -0,0 +1,76 @@ +--- +id: nhcx.error.payr-1243 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1243: admission date is not valid' +summary: >- + The payer refused the request because the admission date was missing or not valid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1244 + - nhcx.error.payr-1502 +--- + +# PAYR-1243: admission date is not valid + +## In plain words + +The admission date in your request is missing or not a date the payer accepts. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1243` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid admission date received for case number %s. Hence the request will not be processed. +``` + +`PAYR-1243` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The admission date for the case number in the message is not valid. +- The admission date travels in `Claim.supportingInfo`, with code `ADDD`, Admission date - Discharge date. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1243`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Send the admission date in a `supportingInfo` entry with code `ADDD`. +2. Send the value as `timing`, a date or a period, or as a string. +3. Use the [NRCeS](../../shared/glossary/nrces.md) date-time format, for example `2026-03-10T21:21:17+05:30`. +4. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1244.md b/catalogue/nhcx/errors/payr-1244.md new file mode 100644 index 000000000..89faf4745 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1244.md @@ -0,0 +1,76 @@ +--- +id: nhcx.error.payr-1244 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1244: admission date format is not valid' +summary: >- + The payer refused the request because the admission date was not in an accepted + format. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1243 + - nhcx.error.payr-1502 +--- + +# PAYR-1244: admission date format is not valid + +## In plain words + +The admission date is present, but not in a format the payer accepts. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1244` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid admission date format received for case number %s. Hence the request will not be processed. +``` + +`PAYR-1244` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The admission date for the case number in the message is not in the accepted format. +- The admission date travels in `Claim.supportingInfo`, with code `ADDD`, Admission date - Discharge date. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1244`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Write the admission date in the [NRCeS](../../shared/glossary/nrces.md) date-time format, for example `2026-03-10T21:21:17+05:30`. +2. Send it as `timing`, a date or a period, or as a string, in the entry with code `ADDD`. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1245.md b/catalogue/nhcx/errors/payr-1245.md new file mode 100644 index 000000000..a64d03178 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1245.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1245 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1245: a scheme rule failed' +summary: >- + The payer refused the request because it broke one of the scheme's business rules. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1111 + - nhcx.error.payr-1354 +--- + +# PAYR-1245: a scheme rule failed + +## In plain words + +Your request broke one of the payer's scheme rules. The payer can put the rule's own text in the message in place of `Rule failure.` + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1245` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Rule failure. +``` + +`PAYR-1245` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- A business rule in the payer's system failed for your request. +- The message can name the rule. For example, `Only one conservative procedure can be booked for a case` arrives when an enhancement adds a second Conservative package. +- The same message returns [`PAYR-1111`](payr-1111.md) on a coverage eligibility check and [`PAYR-1354`](payr-1354.md) on a claim. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1245`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Read the message text you received. Correct the request against the rule it names. +2. If the message reads only `Rule failure.`, contact the support team with the case number. See [Support contacts](../sandbox/support-contacts.md). +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1246.md b/catalogue/nhcx/errors/payr-1246.md new file mode 100644 index 000000000..c2aaf9de9 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1246.md @@ -0,0 +1,76 @@ +--- +id: nhcx.error.payr-1246 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1246: payer id is not valid' +summary: >- + The payer refused the request because the payer identifier in it was not valid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.participant-code + - nhcx.concept.protocol-headers + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1247 +--- + +# PAYR-1246: payer id is not valid + +## In plain words + +The request names the payer with an identifier the payer does not accept. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1246` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid payer id received as %s. Please try again with valid payer id. +``` + +`PAYR-1246` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The payer id in the message is not valid. +- The request names the payer in two places. One is the `x-hcx-recipient_code` protected header. The other is the payer `Organization` that `Claim.insurer` references. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1246`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Set `x-hcx-recipient_code` to the payer's [participant code](../glossary/participant-code.md). +2. Give the payer `Organization` its identifier, and point `Claim.insurer` at that `Organization`. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1247.md b/catalogue/nhcx/errors/payr-1247.md new file mode 100644 index 000000000..2755719a0 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1247.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1247 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1247: payer details not received from the exchange' +summary: >- + The payer refused the request because it did not receive the payer details for + the payer identifier sent. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.participant-code + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1246 + - nhcx.error.payr-1119 +--- + +# PAYR-1247: payer details not received from the exchange + +## In plain words + +The payer could not get the details for the payer id in your request from [NHCX](../../shared/glossary/nhcx.md), so it stopped processing. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1247` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Payer details for payer id %s is not received from HCX for the request. Hence the request will not be processed. +``` + +`PAYR-1247` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The payer id in the message did not resolve to payer details for the request. +- A coverage eligibility check fails the same way with [`PAYR-1119`](payr-1119.md). + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1247`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Check the payer id as described for [`PAYR-1246`](payr-1246.md). +2. Resend the request. +3. If it repeats with a correct payer id, contact the support team. See [Support contacts](../sandbox/support-contacts.md). + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1248.md b/catalogue/nhcx/errors/payr-1248.md new file mode 100644 index 000000000..00aa24d61 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1248.md @@ -0,0 +1,78 @@ +--- +id: nhcx.error.payr-1248 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1248: item code is not valid' +summary: >- + The payer refused the request because the code on an item is not valid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1249 + - nhcx.error.payr-1204 +--- + +# PAYR-1248: item code is not valid + +## In plain words + +An item in your request carries a code the payer does not accept. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1248` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid item code received as %s for item sequence %s case number %s. Please try again with valid data. +``` + +`PAYR-1248` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The item code in the message is not valid for the item with the sequence in the message. +- The item code is the package code in `Claim.item.productOrService`, for example `MG0111A`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1248`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Fetch the current insurance plan for your hospital and the beneficiary's policy. See [Fetch the insurance plan](../flows/insurance-plan-request.md). +2. Copy the package code from the plan into `Claim.item.productOrService` for the named item. +3. Resend the request. + +Refresh your stored insurance plan at least weekly, and whenever the payer renews or amends the policy. Outdated tariff versions cause automatic rejection. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1249.md b/catalogue/nhcx/errors/payr-1249.md new file mode 100644 index 000000000..23afc1b1d --- /dev/null +++ b/catalogue/nhcx/errors/payr-1249.md @@ -0,0 +1,75 @@ +--- +id: nhcx.error.payr-1249 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1249: item sequence is not valid' +summary: >- + The payer refused the request because an item's sequence number is not valid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1248 +--- + +# PAYR-1249: item sequence is not valid + +## In plain words + +An item in your request carries a sequence number the payer does not accept. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1249` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid item sequence received as %s for case number %s. Please try again with valid data. +``` + +`PAYR-1249` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The item sequence in the message is not valid. +- Each `Claim.item` carries a `sequence`. The first item's `sequence` is `1`. +- Items point at the care team, diagnoses and procedures through `careTeamSequence`, `diagnosisSequence` and `procedureSequence`. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1249`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Give every item a unique whole-number `sequence`, starting at `1`. +2. Check that each cross-reference points at a sequence that exists in the `Claim`. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1250.md b/catalogue/nhcx/errors/payr-1250.md new file mode 100644 index 000000000..aecb326a7 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1250.md @@ -0,0 +1,75 @@ +--- +id: nhcx.error.payr-1250 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1250: policy is not listed' +summary: >- + The payer refused the request because the policy code sent is not one it lists. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.coverage-eligibility-purposes + - nhcx.concept.policy-linking + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 +--- + +# PAYR-1250: policy is not listed + +## In plain words + +The policy code in your request is not one the payer lists. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1250` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Requested policy %s is not listed. Please try again with valid policy code. +``` + +`PAYR-1250` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The policy code in the message is not listed with the payer. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1250`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Use the policy code the beneficiary holds with this payer. +2. If you do not have it, run a [coverage eligibility check](../flows/coverage-eligibility-check.md) with purpose `discovery`. It finds the active policy code. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1251.md b/catalogue/nhcx/errors/payr-1251.md new file mode 100644 index 000000000..e7c445e02 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1251.md @@ -0,0 +1,76 @@ +--- +id: nhcx.error.payr-1251 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1251: no billable treatment plan' +summary: >- + The payer refused the request because it carried no billable treatment plan for + the case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1359 + - nhcx.error.payr-1204 +--- + +# PAYR-1251: no billable treatment plan + +## In plain words + +Your request carries nothing the payer can bill against for this case. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1251` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +No billable treatment plan received for case number %s. Please try again with valid treatment plan data. +``` + +`PAYR-1251` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The request for the case number in the message carries no billable treatment plan. +- The same message returns [`PAYR-1359`](payr-1359.md) on a claim. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1251`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Add at least one item with a package code from the insurance plan, a quantity, a unit price and a net amount above `0`. +2. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1252.md b/catalogue/nhcx/errors/payr-1252.md new file mode 100644 index 000000000..ba2b12abb --- /dev/null +++ b/catalogue/nhcx/errors/payr-1252.md @@ -0,0 +1,70 @@ +--- +id: nhcx.error.payr-1252 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1252: case is not in a state that can be cancelled' +summary: >- + The payer refused a cancellation because the case is not currently submitted or + approved. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-cancel + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.task-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.task-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.preauth-cancel + errors: + - nhcx.error.payr-1253 + - nhcx.error.payr-1257 + - nhcx.error.payr-1258 +--- + +# PAYR-1252: case is not in a state that can be cancelled + +## In plain words + +You asked to cancel a preauthorisation that is not in a cancellable state. Only a submitted or approved preauthorisation can be cancelled. + +## Before you start + +- You sent a cancellation `Task` on `POST /v1/task/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Cancel a preauthorisation](../flows/preauth-cancel.md). +- The [payer](../glossary/payer.md) answered later on `/v1/task/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1252` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Case number %s is not in active preauthorization state with the current status of the case with the payer system is %s. Hence the preauthorization can not be cancelled. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled. +``` + +`PAYR-1252` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- You sent a cancellation for the case number in the message. +- The case's current status with the payer, given in the message, is neither preauthorisation submitted nor preauthorisation approved. + +## How you know it worked + +There is no cancellation to retry. Your system records the status the message reports, and stops offering cancel for the case. + +## When it goes wrong + +1. Do not resend the cancellation. You cannot cancel this case. +2. Read the current status in the message. Continue the case from that state. diff --git a/catalogue/nhcx/errors/payr-1253.md b/catalogue/nhcx/errors/payr-1253.md new file mode 100644 index 000000000..773b57689 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1253.md @@ -0,0 +1,69 @@ +--- +id: nhcx.error.payr-1253 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1253: case is already cancelled' +summary: >- + The payer refused a cancellation because the case is already cancelled. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-cancel + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.task-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.task-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.preauth-cancel + errors: + - nhcx.error.payr-1252 + - nhcx.error.payr-1255 +--- + +# PAYR-1253: case is already cancelled + +## In plain words + +You asked to cancel a preauthorisation that is already cancelled. + +## Before you start + +- You sent a cancellation `Task` on `POST /v1/task/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Cancel a preauthorisation](../flows/preauth-cancel.md). +- The [payer](../glossary/payer.md) answered later on `/v1/task/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1253` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Case number %s is already cancelled. Hence the preauthorization can not be cancelled again. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled. +``` + +`PAYR-1253` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- You sent a cancellation for the case number in the message. +- That case is already cancelled. + +## How you know it worked + +The case is already cancelled, so your system shows it as cancelled and sends no further cancellation. The earlier cancellation was confirmed on `/v1/task/on_submit`, by a `Task` whose `status` is `completed`. + +## When it goes wrong + +1. Do not resend the cancellation. +2. Mark the case cancelled in your system. +3. For further treatment, raise a new preauthorisation with a new case number. A cancelled case number accepts no preauthorisation. See [`PAYR-1255`](payr-1255.md). diff --git a/catalogue/nhcx/errors/payr-1254.md b/catalogue/nhcx/errors/payr-1254.md new file mode 100644 index 000000000..a42099c61 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1254.md @@ -0,0 +1,80 @@ +--- +id: nhcx.error.payr-1254 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1254: treatment guideline questionnaire response missing' +summary: >- + The payer refused the request because a procedure needs a completed treatment + guideline checklist and none was sent. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1273 + - nhcx.error.payr-1365 +--- + +# PAYR-1254: treatment guideline questionnaire response missing + +## In plain words + +A procedure you requested needs a completed Standard Treatment Guideline (STG) checklist. Your request did not include the response to it. STGs are mandatory in [PMJAY](../glossary/pmjay.md). + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1254` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Response for STG Questionnaire id %s is mandatory for procedure code %s. Hence the preauthorization request will not be processed as the questionnaire response is not received for procedure code. +``` + +`PAYR-1254` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The procedure code in the message has a mandatory STG questionnaire, with the id in the message. +- The request carries no response to that questionnaire for the procedure. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1254`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Take the STG questionnaire from the insurance plan, or from the coverage eligibility `auth-requirements` response. +2. Fill a `QuestionnaireResponse`. Put the questionnaire URL from the insurance plan in `QuestionnaireResponse.questionnaire`. +3. Add a `supportingInfo` entry to the `Claim` with category `STG`. Its value is a reference to that `QuestionnaireResponse`. +4. Include the `QuestionnaireResponse` resource in the bundle at that reference. +5. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1255.md b/catalogue/nhcx/errors/payr-1255.md new file mode 100644 index 000000000..a6ca9a473 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1255.md @@ -0,0 +1,75 @@ +--- +id: nhcx.error.payr-1255 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1255: case number already cancelled' +summary: >- + The payer refused a preauthorisation because its case number belongs to a cancelled + case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-cancel + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1253 +--- + +# PAYR-1255: case number already cancelled + +## In plain words + +The case number in your request belongs to a cancelled preauthorisation. A cancelled case number accepts no further preauthorisation. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1255` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Case number %s is already cancelled. Hence no preauthorization request will be accepted for this case number. New preauthorization request needs to be raised with new case/reference number to proceed further. +``` + +`PAYR-1255` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- You sent a preauthorisation request for the case number in the message. +- The preauthorisation for that case number is already cancelled. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1255`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Raise a new preauthorisation with a new case number in `Claim.identifier`. +2. Send it with workflow `12`. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1256.md b/catalogue/nhcx/errors/payr-1256.md new file mode 100644 index 000000000..2cd8d8221 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1256.md @@ -0,0 +1,84 @@ +--- +id: nhcx.error.payr-1256 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1256: no biometric authentication and no consent questionnaire' +summary: >- + The payer refused a new preauthorisation because it carried neither the patient's + biometric authentication nor the signed consent questionnaire. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.biometric-authentication + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.biometric-face + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1271 + - nhcx.error.payr-1272 + - nhcx.error.payr-1363 +--- + +# PAYR-1256: no biometric authentication and no consent questionnaire + +## In plain words + +A new preauthorisation must prove the patient is present at your hospital. Your request carried neither [biometric authentication](../concepts/biometric-authentication.md) nor the Authentication Consent Questionnaire response. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1256` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Response for Authentication Consent Questionnaire is missing for case number %s. This must be sent if the biometric authentication for patient is not available. For new preauthorization request, either biometric authentication for patient or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. Please adhere to the response of the coverage eligibility for auth-requirements purpose to check the mandatory documents to be attached with the request +``` + +`PAYR-1256` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The request is a new preauthorisation for the case number in the message. +- It carries no biometric authentication for the patient. +- It carries no response to the Authentication Consent Questionnaire. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1256`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +Send one of the two proofs: + +1. Send biometric authentication. Authenticate the patient by fingerprint, iris or face. Pass the user token from the verification as a header on the preauthorisation. The token is valid for 30 minutes. See [Fingerprint or iris authentication](../flows/biometric-fingerprint-iris.md) or [Face authentication](../flows/biometric-face.md). +2. Or send the Authentication Consent Questionnaire response. Take the questionnaire from the insurance plan for the policy. The consent document is signed by the doctor and the patient. Send the response as a `QuestionnaireResponse`, referenced from a `supportingInfo` entry with category `INF`. + +Check the coverage eligibility `auth-requirements` response for the documents the request must attach. Then resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1257.md b/catalogue/nhcx/errors/payr-1257.md new file mode 100644 index 000000000..bc5ceb05d --- /dev/null +++ b/catalogue/nhcx/errors/payr-1257.md @@ -0,0 +1,69 @@ +--- +id: nhcx.error.payr-1257 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1257: payment already initiated for the case' +summary: >- + The payer refused a cancellation because payment for the case has already started. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-cancel + - nhcx.flow.payment-notice + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.task-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.task-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.preauth-cancel + errors: + - nhcx.error.payr-1258 + - nhcx.error.payr-1252 +--- + +# PAYR-1257: payment already initiated for the case + +## In plain words + +Payment for this case has already started. A case at that stage can no longer be cancelled. + +## Before you start + +- You sent a cancellation `Task` on `POST /v1/task/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Cancel a preauthorisation](../flows/preauth-cancel.md). +- The [payer](../glossary/payer.md) answered later on `/v1/task/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1257` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Payment is initiated for case number %s. Hence the preauthorization can not be cancelled again. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled +``` + +`PAYR-1257` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- You sent a cancellation for the case number in the message. +- Payment is initiated for that case, so its status is no longer preauthorisation submitted or approved. + +## How you know it worked + +There is no cancellation to retry. Your system records the case as in payment, and stops offering cancel for it. + +## When it goes wrong + +1. Do not resend the cancellation. You cannot cancel this case. +2. Follow the case through payment. See [Receive a payment notice](../flows/payment-notice.md). diff --git a/catalogue/nhcx/errors/payr-1258.md b/catalogue/nhcx/errors/payr-1258.md new file mode 100644 index 000000000..0db97bf18 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1258.md @@ -0,0 +1,70 @@ +--- +id: nhcx.error.payr-1258 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1258: payment already cleared for the case' +summary: >- + The payer refused a cancellation because payment for the case has already been + made. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-cancel + - nhcx.flow.payment-notice + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.task-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.task-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.preauth-cancel + errors: + - nhcx.error.payr-1257 + - nhcx.error.payr-1252 +--- + +# PAYR-1258: payment already cleared for the case + +## In plain words + +Payment for this case is already complete. A paid case can no longer be cancelled. + +## Before you start + +- You sent a cancellation `Task` on `POST /v1/task/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Cancel a preauthorisation](../flows/preauth-cancel.md). +- The [payer](../glossary/payer.md) answered later on `/v1/task/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1258` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Payment is accomplished/cleared for case number %s. Hence the preauthorization can not be cancelled again. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled +``` + +`PAYR-1258` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- You sent a cancellation for the case number in the message. +- Payment is accomplished or cleared for that case, so its status is no longer preauthorisation submitted or approved. + +## How you know it worked + +There is no cancellation to retry. Your system records the case as paid, and stops offering cancel for it. + +## When it goes wrong + +1. Do not resend the cancellation. You cannot cancel this case. +2. Record the case as paid. See [Receive a payment notice](../flows/payment-notice.md). diff --git a/catalogue/nhcx/errors/payr-1259.md b/catalogue/nhcx/errors/payr-1259.md new file mode 100644 index 000000000..a618d8bce --- /dev/null +++ b/catalogue/nhcx/errors/payr-1259.md @@ -0,0 +1,80 @@ +--- +id: nhcx.error.payr-1259 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1259: newborn date of birth missing' +summary: >- + The payer refused a newborn case because the baby's date of birth was not sent. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1260 + - nhcx.error.payr-1261 + - nhcx.error.payr-1262 + - nhcx.error.payr-1263 + - nhcx.error.payr-1269 + - nhcx.error.payr-1507 +--- + +# PAYR-1259: newborn date of birth missing + +## In plain words + +A newborn case must carry the baby's date of birth. Your request did not. In [PMJAY](../glossary/pmjay.md), a newborn with no Member ID yet is treated on a parent's card, as a child linked to the parent. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1259` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +DOB is missing for new born for the case number (%s) with correlation id as (%s) at (%s) +``` + +`PAYR-1259` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The request is a newborn case. The parent is the primary `Patient`. The parent's `Patient` links the child's `Patient` through `link`, with `type` `refer`. +- The child's `Patient` carries no date of birth. +- The message gives the case number and the correlation id. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1259`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Add the baby's date of birth to the child's `Patient`. +2. Attach the proof of date of birth: category `DOB`, code `BCF` for a birth certificate, or `DCB` for a government hospital discharge card. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1260.md b/catalogue/nhcx/errors/payr-1260.md new file mode 100644 index 000000000..70bea60c7 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1260.md @@ -0,0 +1,79 @@ +--- +id: nhcx.error.payr-1260 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1260: newborn date of birth is in the future' +summary: >- + The payer refused a newborn case because the baby's date of birth was later than + today. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1259 + - nhcx.error.payr-1261 + - nhcx.error.payr-1262 + - nhcx.error.payr-1263 + - nhcx.error.payr-1269 + - nhcx.error.payr-1507 +--- + +# PAYR-1260: newborn date of birth is in the future + +## In plain words + +The baby's date of birth in your request is in the future. In [PMJAY](../glossary/pmjay.md), a newborn with no Member ID yet is treated on a parent's card, as a child linked to the parent. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1260` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +DOB cannot be a future date for the case number (%s) with correlation id as (%s) at (%s) +``` + +`PAYR-1260` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The request is a newborn case. The parent is the primary `Patient`. The parent's `Patient` links the child's `Patient` through `link`, with `type` `refer`. +- The child's date of birth is later than the current date. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1260`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Correct the child's date of birth. Check it against the proof of date of birth you attach. +2. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1261.md b/catalogue/nhcx/errors/payr-1261.md new file mode 100644 index 000000000..b8d106cdc --- /dev/null +++ b/catalogue/nhcx/errors/payr-1261.md @@ -0,0 +1,89 @@ +--- +id: nhcx.error.payr-1261 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1261: newborn details are not valid' +summary: >- + The payer refused a newborn case because the newborn details failed its checks. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. States the message for PAYR-1261 that the error sheet does not. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1259 + - nhcx.error.payr-1260 + - nhcx.error.payr-1262 + - nhcx.error.payr-1263 + - nhcx.error.payr-1269 + - nhcx.error.payr-1508 +--- + +# PAYR-1261: newborn details are not valid + +## In plain words + +The newborn details in your request are not valid. In [PMJAY](../glossary/pmjay.md), a newborn with no Member ID yet is treated on a parent's card, as a child linked to the parent. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1261` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid new born details for the case number (%s) with correlation id as (%s) at (%s) +``` + +`PAYR-1261` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The request is a newborn case. +- The newborn details fail the payer's checks. The message names the case and the correlation id, not the element. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1261`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +Check every newborn element, then resend the request: + +- The parent, mother or father, is the primary `Patient`. +- The parent's `Patient` links the child's `Patient` through `link`, with `type` `refer` and `other` pointing at the child. +- The child's `Patient` carries gender, date of birth and name. +- Proof of date of birth: category `DOB`, code `BCF` for a birth certificate, or `DCB` for a government hospital discharge card. +- The bill is in the parent's name as `Baby of `, with a supporting attachment. +- Twins get two separate preauthorisations, one per child. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1262.md b/catalogue/nhcx/errors/payr-1262.md new file mode 100644 index 000000000..a82e3faad --- /dev/null +++ b/catalogue/nhcx/errors/payr-1262.md @@ -0,0 +1,78 @@ +--- +id: nhcx.error.payr-1262 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1262: newborn gender missing' +summary: >- + The payer refused a newborn case because the baby's gender was not sent. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1259 + - nhcx.error.payr-1260 + - nhcx.error.payr-1261 + - nhcx.error.payr-1263 + - nhcx.error.payr-1269 + - nhcx.error.payr-1506 +--- + +# PAYR-1262: newborn gender missing + +## In plain words + +A newborn case must carry the baby's gender. Your request did not. In [PMJAY](../glossary/pmjay.md), a newborn with no Member ID yet is treated on a parent's card, as a child linked to the parent. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1262` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Gender is mandatory for the new born beneficiary +``` + +`PAYR-1262` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The request is a newborn case. The parent is the primary `Patient`. The parent's `Patient` links the child's `Patient` through `link`, with `type` `refer`. +- The child's `Patient` carries no gender. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1262`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Add the gender to the child's `Patient`. Use a value from the administrative gender value set, `https://hl7.org/fhir/R4/valueset-administrative-gender.html`. +2. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1263.md b/catalogue/nhcx/errors/payr-1263.md new file mode 100644 index 000000000..b1c6b420e --- /dev/null +++ b/catalogue/nhcx/errors/payr-1263.md @@ -0,0 +1,89 @@ +--- +id: nhcx.error.payr-1263 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1263: newborn documents missing' +summary: >- + The payer refused a newborn case because a mandatory document for the baby was + not attached. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. States the message for PAYR-1263 that the error sheet does not. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1264 + - nhcx.error.payr-1265 + - nhcx.error.payr-1266 + - nhcx.error.payr-1259 + - nhcx.error.payr-1509 +--- + +# PAYR-1263: newborn documents missing + +## In plain words + +A newborn case needs supporting documents, and one is missing from your request. In [PMJAY](../glossary/pmjay.md), a newborn with no Member ID yet is treated on a parent's card, as a child linked to the parent. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1263` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Documents are mandatory for the new born beneficiary +``` + +`PAYR-1263` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The request is a newborn case. +- A document the payer requires for the newborn is missing. +- Four codes, `PAYR-1263` to `PAYR-1266`, carry this same message. The message does not say which document is missing. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1263`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +Attach every newborn document, then resend the request: + +- Proof of date of birth: category `DOB`, code `BCF` for a birth certificate, or `DCB` for a government hospital discharge card. +- A supporting attachment that justifies a bill in the parent's name as `Baby of `. +- Every document the coverage eligibility `auth-requirements` response lists for the procedures. + +Each attachment must be Base64 encoded and named, with an accepted content type. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1264.md b/catalogue/nhcx/errors/payr-1264.md new file mode 100644 index 000000000..89b3a3f9e --- /dev/null +++ b/catalogue/nhcx/errors/payr-1264.md @@ -0,0 +1,89 @@ +--- +id: nhcx.error.payr-1264 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1264: newborn documents missing' +summary: >- + The payer refused a newborn case because a mandatory document for the baby was + not attached. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. States the message for PAYR-1264 that the error sheet does not. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1263 + - nhcx.error.payr-1265 + - nhcx.error.payr-1266 + - nhcx.error.payr-1259 + - nhcx.error.payr-1509 +--- + +# PAYR-1264: newborn documents missing + +## In plain words + +A newborn case needs supporting documents, and one is missing from your request. In [PMJAY](../glossary/pmjay.md), a newborn with no Member ID yet is treated on a parent's card, as a child linked to the parent. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1264` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Documents are mandatory for the new born beneficiary +``` + +`PAYR-1264` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The request is a newborn case. +- A document the payer requires for the newborn is missing. +- Four codes, `PAYR-1263` to `PAYR-1266`, carry this same message. The message does not say which document is missing. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1264`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +Attach every newborn document, then resend the request: + +- Proof of date of birth: category `DOB`, code `BCF` for a birth certificate, or `DCB` for a government hospital discharge card. +- A supporting attachment that justifies a bill in the parent's name as `Baby of `. +- Every document the coverage eligibility `auth-requirements` response lists for the procedures. + +Each attachment must be Base64 encoded and named, with an accepted content type. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1265.md b/catalogue/nhcx/errors/payr-1265.md new file mode 100644 index 000000000..732605a66 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1265.md @@ -0,0 +1,89 @@ +--- +id: nhcx.error.payr-1265 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1265: newborn documents missing' +summary: >- + The payer refused a newborn case because a mandatory document for the baby was + not attached. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. States the message for PAYR-1265 that the error sheet does not. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1263 + - nhcx.error.payr-1264 + - nhcx.error.payr-1266 + - nhcx.error.payr-1259 + - nhcx.error.payr-1509 +--- + +# PAYR-1265: newborn documents missing + +## In plain words + +A newborn case needs supporting documents, and one is missing from your request. In [PMJAY](../glossary/pmjay.md), a newborn with no Member ID yet is treated on a parent's card, as a child linked to the parent. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1265` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Documents are mandatory for the new born beneficiary +``` + +`PAYR-1265` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The request is a newborn case. +- A document the payer requires for the newborn is missing. +- Four codes, `PAYR-1263` to `PAYR-1266`, carry this same message. The message does not say which document is missing. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1265`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +Attach every newborn document, then resend the request: + +- Proof of date of birth: category `DOB`, code `BCF` for a birth certificate, or `DCB` for a government hospital discharge card. +- A supporting attachment that justifies a bill in the parent's name as `Baby of `. +- Every document the coverage eligibility `auth-requirements` response lists for the procedures. + +Each attachment must be Base64 encoded and named, with an accepted content type. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1266.md b/catalogue/nhcx/errors/payr-1266.md new file mode 100644 index 000000000..908b74697 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1266.md @@ -0,0 +1,89 @@ +--- +id: nhcx.error.payr-1266 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1266: newborn documents missing' +summary: >- + The payer refused a newborn case because a mandatory document for the baby was + not attached. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. States the message for PAYR-1266 that the error sheet does not. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1263 + - nhcx.error.payr-1264 + - nhcx.error.payr-1265 + - nhcx.error.payr-1259 + - nhcx.error.payr-1509 +--- + +# PAYR-1266: newborn documents missing + +## In plain words + +A newborn case needs supporting documents, and one is missing from your request. In [PMJAY](../glossary/pmjay.md), a newborn with no Member ID yet is treated on a parent's card, as a child linked to the parent. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1266` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Documents are mandatory for the new born beneficiary +``` + +`PAYR-1266` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The request is a newborn case. +- A document the payer requires for the newborn is missing. +- Four codes, `PAYR-1263` to `PAYR-1266`, carry this same message. The message does not say which document is missing. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1266`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +Attach every newborn document, then resend the request: + +- Proof of date of birth: category `DOB`, code `BCF` for a birth certificate, or `DCB` for a government hospital discharge card. +- A supporting attachment that justifies a bill in the parent's name as `Baby of `. +- Every document the coverage eligibility `auth-requirements` response lists for the procedures. + +Each attachment must be Base64 encoded and named, with an accepted content type. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1267.md b/catalogue/nhcx/errors/payr-1267.md new file mode 100644 index 000000000..cf84adfc3 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1267.md @@ -0,0 +1,81 @@ +--- +id: nhcx.error.payr-1267 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1267: active newborn preauthorisation at your hospital' +summary: >- + The payer refused a newborn case because the beneficiary already has an active + newborn preauthorisation at your hospital. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-cancel + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1268 + - nhcx.error.payr-1238 +--- + +# PAYR-1267: active newborn preauthorisation at your hospital + +## In plain words + +The beneficiary already has an active preauthorisation for a newborn case at your hospital. Close it before you open another. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1267` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Beneficiary is having an active preauthorization request for new born case at this hospital with reference number %s. Hence the request will not be processed. Kindly cancel the active preauthorization request or raise a claim to proceed with current preauthorization +``` + +`PAYR-1267` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The beneficiary in your request has an active newborn preauthorisation at your hospital. +- The message gives its reference number. +- That preauthorisation is neither cancelled nor claimed. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1267`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Find the active preauthorisation by the reference number in the message. +2. Cancel it, or raise its claim. See [Cancel a preauthorisation](../flows/preauth-cancel.md) and [Submit a claim](../flows/claim-submit.md). +3. Resend your request. + +Twins are two children with two treatments. Raise one preauthorisation per child, each with its own linked child `Patient`. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1268.md b/catalogue/nhcx/errors/payr-1268.md new file mode 100644 index 000000000..5f0c0b409 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1268.md @@ -0,0 +1,76 @@ +--- +id: nhcx.error.payr-1268 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1268: active newborn preauthorisation at another hospital' +summary: >- + The payer refused a newborn case because the beneficiary already has an active + newborn preauthorisation at another hospital. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-cancel + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1267 + - nhcx.error.payr-1237 +--- + +# PAYR-1268: active newborn preauthorisation at another hospital + +## In plain words + +The beneficiary already has an active preauthorisation for a newborn case at another hospital. The payer refuses a second one while that stays active. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1268` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Beneficiary is having an active preauthorization request for new born case at %s. Hence the request will not be processed. Kindly inform %s to cancel the active preauthorization request or raise a claim to proceed with current preauthorization +``` + +`PAYR-1268` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The beneficiary in your request has an active newborn preauthorisation at the hospital named in the message. +- That preauthorisation is neither cancelled nor claimed. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1268`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Ask the hospital named in the message to cancel its active preauthorisation, or to raise its claim. +2. Resend your request once that hospital confirms. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1269.md b/catalogue/nhcx/errors/payr-1269.md new file mode 100644 index 000000000..cbb80a9af --- /dev/null +++ b/catalogue/nhcx/errors/payr-1269.md @@ -0,0 +1,79 @@ +--- +id: nhcx.error.payr-1269 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1269: newborn is older than 6 years' +summary: >- + The payer refused a newborn case because the child's date of birth is more than + 6 years ago. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1259 + - nhcx.error.payr-1260 + - nhcx.error.payr-1261 + - nhcx.error.payr-1262 + - nhcx.error.payr-1263 +--- + +# PAYR-1269: newborn is older than 6 years + +## In plain words + +A newborn case is only for a child aged 6 years or under. The date of birth you sent is more than 6 years ago. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1269` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Date of birth received for new born beneficiary exceeds 6 years before the current date. New born cases can be raised only for the beneficiary whose date of birth is within 6 years of current date +``` + +`PAYR-1269` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The request is a newborn case. +- The child's date of birth is more than 6 years before the current date. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1269`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Check the date of birth against the proof you attach. Correct it if it is wrong. +2. A newborn case is for a child aged 6 or under who has no Member ID yet. If the child is older than 6 years, do not send the case as a newborn case. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1270.md b/catalogue/nhcx/errors/payr-1270.md new file mode 100644 index 000000000..f0f6abb21 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1270.md @@ -0,0 +1,76 @@ +--- +id: nhcx.error.payr-1270 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1270: item LM100 sent on a preauthorisation' +summary: >- + The payer refused the preauthorisation because it included item LM100, which belongs + only on a claim. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1362 +--- + +# PAYR-1270: item LM100 sent on a preauthorisation + +## In plain words + +Your preauthorisation includes item `LM100`. `LM100` belongs only on a claim, for a patient who leaves against medical advice. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1270` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Item LM100 is not applicable for preauthorization request. This item is expected/mandated only during claim submission if the patient is discharged after/during surgery under LAMA/DAMA category for PMJAY cases. +``` + +`PAYR-1270` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The request carries an item with code `LM100`. +- `LM100` is a claim-only package for [PMJAY](../glossary/pmjay.md) cases discharged under LAMA or DAMA, leaving or discharged against medical advice. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1270`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Remove the `LM100` item from the preauthorisation. +2. Send `LM100` only on the claim, when the discharge qualifies. See [Submit a claim](../flows/claim-submit.md). +3. Resend the preauthorisation. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1271.md b/catalogue/nhcx/errors/payr-1271.md new file mode 100644 index 000000000..0c8bb6d4a --- /dev/null +++ b/catalogue/nhcx/errors/payr-1271.md @@ -0,0 +1,80 @@ +--- +id: nhcx.error.payr-1271 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1271: consent questionnaire answer missing' +summary: >- + The payer refused a new preauthorisation because a question in the consent questionnaire + had no answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.biometric-authentication + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.biometric-face + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1256 + - nhcx.error.payr-1272 + - nhcx.error.payr-1364 +--- + +# PAYR-1271: consent questionnaire answer missing + +## In plain words + +Your request used the Authentication Consent Questionnaire in place of biometrics, but one of its questions has no answer. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1271` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +No value received for link id %s for Authentication Consent Questionnaire for preauthorization request. This must be sent if the biometric authentication for patient is not available. For new preauthorization request, either biometric authentication for patient or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. Please adhere to the response of the coverage eligibility for auth-requirements purpose to check the mandatory documents to be attached with the request. +``` + +`PAYR-1271` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The request carries the Authentication Consent Questionnaire response instead of biometric authentication. +- The question with the link id in the message has no value. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1271`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Answer every question in the questionnaire, as the insurance plan for the policy defines it. +2. Or send biometric authentication. Authenticate the patient by fingerprint, iris or face. Pass the user token from the verification as a header on the preauthorisation. The token is valid for 30 minutes. See [Fingerprint or iris authentication](../flows/biometric-fingerprint-iris.md) or [Face authentication](../flows/biometric-face.md). +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1272.md b/catalogue/nhcx/errors/payr-1272.md new file mode 100644 index 000000000..c76879252 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1272.md @@ -0,0 +1,80 @@ +--- +id: nhcx.error.payr-1272 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1272: biometric user token is not valid' +summary: >- + The payer refused the request because the patient's biometric user token was not + valid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + - nhcx.concept.biometric-authentication + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.biometric-face + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1256 + - nhcx.error.payr-1271 + - nhcx.error.payr-1366 +--- + +# PAYR-1272: biometric user token is not valid + +## In plain words + +The token that proves the patient's [biometric authentication](../concepts/biometric-authentication.md) is not valid. A user token lasts 30 minutes after verification. + +## Before you start + +- You sent a new preauthorisation, workflow `12`, on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1272` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +Invalid biometric user token received. Please try again with valid valid biometric details of the beneficiary. For any issues with biometric, please try with Authentication Consent Questionnaire, details for which has been received in response for coverage eligibliity auth-requirements. +``` + +`PAYR-1272` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- The biometric user token in the request is not valid. +- A user token is valid for 30 minutes after biometric verification. After that, a fresh authentication is mandatory. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1272`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Authenticate the patient again by fingerprint, iris or face. See [Fingerprint or iris authentication](../flows/biometric-fingerprint-iris.md) or [Face authentication](../flows/biometric-face.md). +2. Send the new user token with the preauthorisation. +3. If biometric capture keeps failing, send the Authentication Consent Questionnaire response instead. See [`PAYR-1256`](payr-1256.md). + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1273.md b/catalogue/nhcx/errors/payr-1273.md new file mode 100644 index 000000000..15e1e9608 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1273.md @@ -0,0 +1,77 @@ +--- +id: nhcx.error.payr-1273 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1273: questionnaire not found for the selection' +summary: >- + The payer refused the request because a questionnaire response pointed at a questionnaire + it could not find. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.insurance-plan-request + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1254 + - nhcx.error.payr-1256 +--- + +# PAYR-1273: questionnaire not found for the selection + +## In plain words + +A questionnaire response in your request points at a questionnaire the payer cannot find. + +## Before you start + +- You sent a preauthorisation request on `POST /v1/preauth/submit`, and [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md). +- The [payer](../glossary/payer.md) answered later on `/v1/preauth/on_submit`. You decrypted the sealed [JWE](../glossary/jwe.md) payload. See [The sealed envelope](../concepts/jwe-envelope.md). +- The decrypted response carries `PAYR-1273` with the message below. The payer fills each `%s` placeholder when it sends it. + +```text +No questionnaire found for the received selection. Please validate the questionnaire url from insurance plan/coverage auth-requirements response. +``` + +`PAYR-1273` is a reference payer code. A payer running the [PMJAY](../glossary/pmjay.md) reference implementation sends it. See [Error code spaces](../concepts/error-code-spaces.md). + +## What happens + +- A `QuestionnaireResponse` in the request points at a questionnaire the payer cannot find for the selection. + +## How you know it worked + +Send the corrected request on `/v1/preauth/submit` with a new `x-hcx-correlation_id`. NHCX answers `202 Accepted`. + +The fix worked when the next `/v1/preauth/on_submit` for the case carries no `PAYR-1273`. It carries the payer's decision in a `ClaimResponse` instead: + +- Approved: workflow `21`, `outcome` `complete`, and a `preAuthRef` you cite on the claim. A partial approval carries `outcome` `partial`. +- Queried: workflow `24`, with adjudication reason `queried`. +- Rejected: workflow `23`, with adjudication reason `cancelled` and the reason in `disposition`. + +## When it goes wrong + +1. Put the exact questionnaire URL in `QuestionnaireResponse.questionnaire`. Take it from the insurance plan or the coverage eligibility `auth-requirements` response. +2. Refresh your stored insurance plan if it is out of date. +3. Resend the request. + +Use a new [`x-hcx-correlation_id`](../glossary/correlation-id.md) for every resend. A correlation id is retired once its request fails, and reusing it returns [`NHCX-1006`](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1301.md b/catalogue/nhcx/errors/payr-1301.md new file mode 100644 index 000000000..a0b2c7be1 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1301.md @@ -0,0 +1,91 @@ +--- +id: nhcx.error.payr-1301 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1301: a claim already exists for this case' +summary: >- + The payer refused a new claim because a claim has already been raised for the + same case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + - nhcx.flow.claim-reprocess + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1016 + - nhcx.error.payr-1322 + - nhcx.error.payr-1342 +--- + +# PAYR-1301: a claim already exists for this case + +## In plain words + +The case you named already has a claim, so the payer will not accept a new claim for it. You receive this code when your system sends a second new claim for one case. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1301`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Claim has already been raised for case number `%s`. Hence new claim request will not be accepted. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- A claim has already been raised for the case number in your request. +- Your request asked for a new claim rather than an update to the existing one. +- A claim cannot be cancelled once submitted. After the payer sends `response.complete`, it accepts no further submissions against that claim identifier. + +## How you know it worked + +Do not send the claim again. Follow the first claim for the case to its response. Any later request on the case goes out as a fresh request, with a new `x-hcx-correlation_id`. Reusing an inactive correlation id returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1301`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Do not raise a second claim for the case. Wait for the payer's response to the first claim on `/v1/claim/on_submit`. +2. If the payer queried the first claim, answer the query on the same claim. Follow [answer a payer query on a claim](../flows/claim-query-response.md). +3. If the payer rejected the claim and you dispute the decision, follow [ask the payer to reprocess a claim](../flows/claim-reprocess.md). +4. If your records show no earlier claim, search your submission log for an earlier `202 Accepted` on the same case number. diff --git a/catalogue/nhcx/errors/payr-1302.md b/catalogue/nhcx/errors/payr-1302.md new file mode 100644 index 000000000..54626a1cf --- /dev/null +++ b/catalogue/nhcx/errors/payr-1302.md @@ -0,0 +1,89 @@ +--- +id: nhcx.error.payr-1302 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1302: no approved preauthorisation for this case' +summary: >- + The payer refused a new claim because it found no approved preauthorisation for + the case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.claim-submit + - nhcx.endpoint.participant-get-policies + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1010 + - nhcx.error.payr-1013 +--- + +# PAYR-1302: no approved preauthorisation for this case + +## In plain words + +A claim is paid against an approved preauthorisation. The payer found none for the case your claim names, so it will not accept the claim. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1302`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No preauthorization approved record found for case number `%s`. Hence new claim request will not be accepted. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The payer has approved no preauthorisation for the case number in your claim. +- The preauthorisation exists but is not approved yet. It may still be under review or under query. +- Your claim carries a new identifier instead of the identifier of the approved preauthorisation. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1302`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Put the identifier of the approved preauthorisation in `Claim.identifier`, or reference the `preAuthRef` from its ClaimResponse. +2. Submit the claim only after the preauthorisation is approved and treatment is complete. Follow [submit a preauthorisation](../flows/preauth-submit.md) first. +3. Set `x-hcx-recipient_code` to the `processingID` from the [get policies](../endpoints/participant-get-policies.md) response, not the `PayerID`. diff --git a/catalogue/nhcx/errors/payr-1303.md b/catalogue/nhcx/errors/payr-1303.md new file mode 100644 index 000000000..bde7b304c --- /dev/null +++ b/catalogue/nhcx/errors/payr-1303.md @@ -0,0 +1,91 @@ +--- +id: nhcx.error.payr-1303 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1303: no active claim to update for this case' +summary: >- + The payer refused your query response because the case has no open claim to update. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.queries-and-communication + flows: + - nhcx.flow.claim-query-response + - nhcx.flow.claim-submit + - nhcx.flow.claim-reprocess + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1304 + - nhcx.error.payr-1322 +--- + +# PAYR-1303: no active claim to update for this case + +## In plain words + +A query response updates a claim that is still open. The payer found no active claim for the case you named, so it refused the update. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- The payer queried your claim, and you answered with a query response on [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [answer a payer query on a claim](../flows/claim-query-response.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1303`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No active claim record found for case number `%s`. Hence query updation request will not be accepted. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- No claim has been raised for the case number in your request. +- The claim for the case is closed. After the payer sends `response.complete`, it accepts no further submissions against that claim identifier. +- Your query response carries a different identifier from the claim it answers. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The query response step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries the payer's decision on your answered query: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1303`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Reuse the original `Claim.identifier` in the query response. +2. Check the payer's last response on the claim. If it was `response.complete`, the claim is closed and a query response will not be accepted. +3. To dispute a closed claim that was rejected, follow [ask the payer to reprocess a claim](../flows/claim-reprocess.md). +4. If no claim exists yet, submit one first. Follow [submit a claim after discharge](../flows/claim-submit.md). diff --git a/catalogue/nhcx/errors/payr-1304.md b/catalogue/nhcx/errors/payr-1304.md new file mode 100644 index 000000000..a4ee7743e --- /dev/null +++ b/catalogue/nhcx/errors/payr-1304.md @@ -0,0 +1,91 @@ +--- +id: nhcx.error.payr-1304 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1304: the claim for this case is not under query' +summary: >- + The payer refused your query response because it has not queried the claim for + this case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.queries-and-communication + - nhcx.concept.workflow-codes + flows: + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + - nhcx.fhir.claim-response + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1303 + - nhcx.error.payr-1321 +--- + +# PAYR-1304: the claim for this case is not under query + +## In plain words + +You can answer a query only while the payer is waiting for your answer. The payer holds no queried claim for the case you named. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- The payer queried your claim, and you answered with a query response on [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [answer a payer query on a claim](../flows/claim-query-response.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1304`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No claim queried record found for case number `%s`. Hence query updation request will not be accepted. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The payer never queried the claim for the case number. +- Your system sent a query response without receiving a query. A query arrives on `/v1/claim/on_submit` as a ClaimResponse with `outcome` `partial` and adjudication reason `queried`. +- Your query response names a different case number from the queried claim. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The query response step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries the payer's decision on your answered query: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1304`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Send a query response only after a query arrives. Read `outcome` and the adjudication reason code together: `partial` with `queried` is a query. +2. Reuse the `Claim.identifier` of the queried claim. +3. Set `x-hcx-workflow_id` to the claim query response code from [workflow codes](../concepts/workflow-codes.md), not a preauthorisation code. diff --git a/catalogue/nhcx/errors/payr-1305.md b/catalogue/nhcx/errors/payr-1305.md new file mode 100644 index 000000000..557912d32 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1305.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1305 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1305: the use case is not valid for this case' +summary: >- + The payer refused the request because the use case it declares is not valid for + the case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1321 +--- + +# PAYR-1305: the use case is not valid for this case + +## In plain words + +Every claim request declares what it is: a new claim or a resubmission. The payer did not accept the use case your request declared for this case. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1305`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid usecase requested for case number `%s`. Please try again with valid usecase. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The use case in your request is not a claim use case. The claim use cases are `Claim New` and `Claim Resubmit`. +- `Claim.use` is not `claim`. The value `preauthorization` marks the preauthorisation stage. +- The use case does not match the state of the case. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1305`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Set `Claim.use` to `claim` on every claim bundle. +2. If you send `x-hcx-use_case`, use the claim value for the step: `New` for a first claim, `Resubmit` for a resubmission. +3. Declare a resubmission only for a case that already has a claim. diff --git a/catalogue/nhcx/errors/payr-1306.md b/catalogue/nhcx/errors/payr-1306.md new file mode 100644 index 000000000..4743b6066 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1306.md @@ -0,0 +1,87 @@ +--- +id: nhcx.error.payr-1306 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1306: the procedure is not in the preauthorisation request' +summary: >- + The claim bills a procedure that the preauthorisation for the case never requested. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + - nhcx.flow.preauth-enhancement + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1308 + - nhcx.error.payr-1315 + - nhcx.error.payr-1013 +--- + +# PAYR-1306: the procedure is not in the preauthorisation request + +## In plain words + +A claim is checked item by item against the preauthorisation for the case. Your claim bills a procedure that the preauthorisation request did not contain. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1306`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No item found in preauthorization request for procedure `%s` with item sequence `%s` for case number `%s`. Please try again with valid items. + +The three `%s` values are, in order, the procedure code, the item sequence and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The procedure code at the named item sequence does not appear in the preauthorisation request for the case. +- The payer matches the procedure code and the item sequence together. The right code under a different sequence does not match. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1306`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Claim only the procedures the preauthorisation requested. Reuse its procedure entries instead of rebuilding them. +2. Keep each item's `Claim.item[].sequence` as it was in the preauthorisation. +3. If treatment needed a procedure the preauthorisation did not cover, request an enhancement before discharge. Follow [request a preauthorisation enhancement](../flows/preauth-enhancement.md). diff --git a/catalogue/nhcx/errors/payr-1307.md b/catalogue/nhcx/errors/payr-1307.md new file mode 100644 index 000000000..c33f638b2 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1307.md @@ -0,0 +1,90 @@ +--- +id: nhcx.error.payr-1307 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1307: the procedure quantity is not valid' +summary: >- + The claim carries a quantity for a procedure that the payer does not accept for + the case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1349 + - nhcx.error.payr-1306 + - nhcx.error.payr-1368 + - nhcx.error.payr-1362 +--- + +# PAYR-1307: the procedure quantity is not valid + +## In plain words + +The payer checked the quantity on a claimed procedure and did not accept it for this case. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1307`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid quantity requested for procedure `%s` with item sequence `%s` for case number `%s`. Please try again with valid quantity. + +The three `%s` values are, in order, the procedure code, the item sequence and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The quantity on the procedure at the named item sequence is not valid for the case. +- The payer checks every claim item against the approved preauthorisation for the case. +- For a cyclic procedure, the maximum number of cycles comes from the claim condition in the insurance plan. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1307`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Compare `Claim.item[].quantity` with the item at the same sequence in the approved preauthorisation. +2. Send the quantity of the procedure actually delivered to the patient. +3. On the LM100 item, send the number of days the patient was admitted. See [`PAYR-1362`](./payr-1362.md). +4. For a cyclic procedure, stay within the cycles the insurance plan allows. Payment covers only cycles with a biometric capture. diff --git a/catalogue/nhcx/errors/payr-1308.md b/catalogue/nhcx/errors/payr-1308.md new file mode 100644 index 000000000..f451281c9 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1308.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1308 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1308: the procedure is not in the active claim' +summary: >- + The update names a procedure that the claim now open for the case does not contain. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.queries-and-communication + flows: + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1306 + - nhcx.error.payr-1303 +--- + +# PAYR-1308: the procedure is not in the active claim + +## In plain words + +An update to an open claim, such as a query response, must refer to items already in that claim. Your request names a procedure the active claim does not contain. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- The payer queried your claim, and you answered with a query response on [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [answer a payer query on a claim](../flows/claim-query-response.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1308`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No item found in active claim request for procedure `%s` with item sequence `%s` for case number `%s`. Please try again with valid items. + +The three `%s` values are, in order, the procedure code, the item sequence and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The procedure code at the named item sequence is not in the active claim for the case. +- The payer matches the code and the item sequence together. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The query response step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries the payer's decision on your answered query: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1308`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Keep the items of the submitted claim when you answer a query. Change what the query asked for, such as supporting documents. +2. Reuse the original `Claim.identifier` and each item's `sequence`. diff --git a/catalogue/nhcx/errors/payr-1309.md b/catalogue/nhcx/errors/payr-1309.md new file mode 100644 index 000000000..fd9cd1010 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1309.md @@ -0,0 +1,87 @@ +--- +id: nhcx.error.payr-1309 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1309: the implant is not in the preauthorisation request' +summary: >- + The claim bills an implant that the preauthorisation for the case never requested. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + - nhcx.flow.preauth-enhancement + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1311 + - nhcx.error.payr-1317 + - nhcx.error.payr-1013 +--- + +# PAYR-1309: the implant is not in the preauthorisation request + +## In plain words + +A claim is checked item by item against the preauthorisation for the case. Your claim bills an implant that the preauthorisation request did not contain. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1309`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No item found in preauthorization request for implant `%s` with item sequence `%s` for case number `%s`. Please try again with valid items. + +The three `%s` values are, in order, the implant code, the item sequence and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The implant code at the named item sequence does not appear in the preauthorisation request for the case. +- The payer matches the implant code and the item sequence together. The right code under a different sequence does not match. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1309`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Claim only the implants the preauthorisation requested. Reuse its implant entries instead of rebuilding them. +2. Keep each item's `Claim.item[].sequence` as it was in the preauthorisation. +3. If treatment needed an implant the preauthorisation did not cover, request an enhancement before discharge. Follow [request a preauthorisation enhancement](../flows/preauth-enhancement.md). diff --git a/catalogue/nhcx/errors/payr-1310.md b/catalogue/nhcx/errors/payr-1310.md new file mode 100644 index 000000000..61fb43ce9 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1310.md @@ -0,0 +1,85 @@ +--- +id: nhcx.error.payr-1310 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1310: the implant quantity is not valid' +summary: >- + The claim carries a quantity for an implant that the payer does not accept for + the case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1335 + - nhcx.error.payr-1309 +--- + +# PAYR-1310: the implant quantity is not valid + +## In plain words + +The payer checked the quantity on a claimed implant and did not accept it for this case. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1310`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid quantity requested for implant `%s` with item sequence `%s` for case number `%s`. Please try again with valid quantity. + +The three `%s` values are, in order, the implant code, the item sequence and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The quantity on the implant at the named item sequence is not valid for the case. +- The payer checks every claim item against the approved preauthorisation for the case. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1310`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Compare `Claim.item[].quantity` with the item at the same sequence in the approved preauthorisation. +2. Send the quantity of the implant actually delivered to the patient. diff --git a/catalogue/nhcx/errors/payr-1311.md b/catalogue/nhcx/errors/payr-1311.md new file mode 100644 index 000000000..327934fa9 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1311.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1311 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1311: the implant is not in the active claim' +summary: >- + The update names an implant that the claim now open for the case does not contain. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.queries-and-communication + flows: + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1309 + - nhcx.error.payr-1303 +--- + +# PAYR-1311: the implant is not in the active claim + +## In plain words + +An update to an open claim, such as a query response, must refer to items already in that claim. Your request names an implant the active claim does not contain. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- The payer queried your claim, and you answered with a query response on [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [answer a payer query on a claim](../flows/claim-query-response.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1311`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No item found in active claim request for implant `%s` with item sequence `%s` for case number `%s`. Please try again with valid items. + +The three `%s` values are, in order, the implant code, the item sequence and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The implant code at the named item sequence is not in the active claim for the case. +- The payer matches the code and the item sequence together. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The query response step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries the payer's decision on your answered query: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1311`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Keep the items of the submitted claim when you answer a query. Change what the query asked for, such as supporting documents. +2. Reuse the original `Claim.identifier` and each item's `sequence`. diff --git a/catalogue/nhcx/errors/payr-1312.md b/catalogue/nhcx/errors/payr-1312.md new file mode 100644 index 000000000..b12285a1d --- /dev/null +++ b/catalogue/nhcx/errors/payr-1312.md @@ -0,0 +1,88 @@ +--- +id: nhcx.error.payr-1312 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1312: the investigation is not in the preauthorisation request' +summary: >- + The claim bills an investigation that the preauthorisation for the case never + requested. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + - nhcx.flow.preauth-enhancement + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1314 + - nhcx.error.payr-1316 + - nhcx.error.payr-1013 +--- + +# PAYR-1312: the investigation is not in the preauthorisation request + +## In plain words + +A claim is checked item by item against the preauthorisation for the case. Your claim bills an investigation that the preauthorisation request did not contain. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1312`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No item found in preauthorization request for investigation `%s` with item sequence `%s` for case number `%s`. Please try again with valid items. + +The three `%s` values are, in order, the investigation code, the item sequence and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The investigation code at the named item sequence does not appear in the preauthorisation request for the case. +- The payer matches the investigation code and the item sequence together. The right code under a different sequence does not match. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1312`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Claim only the investigations the preauthorisation requested. Reuse its investigation entries instead of rebuilding them. +2. Keep each item's `Claim.item[].sequence` as it was in the preauthorisation. +3. If treatment needed an investigation the preauthorisation did not cover, request an enhancement before discharge. Follow [request a preauthorisation enhancement](../flows/preauth-enhancement.md). diff --git a/catalogue/nhcx/errors/payr-1313.md b/catalogue/nhcx/errors/payr-1313.md new file mode 100644 index 000000000..c914aaae0 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1313.md @@ -0,0 +1,84 @@ +--- +id: nhcx.error.payr-1313 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1313: the investigation quantity is not valid' +summary: >- + The claim carries a quantity for an investigation that the payer does not accept + for the case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1312 +--- + +# PAYR-1313: the investigation quantity is not valid + +## In plain words + +The payer checked the quantity on a claimed investigation and did not accept it for this case. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1313`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid quantity requested for investigation `%s` with item sequence `%s` for case number `%s`. Please try again with valid quantity. + +The three `%s` values are, in order, the investigation code, the item sequence and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The quantity on the investigation at the named item sequence is not valid for the case. +- The payer checks every claim item against the approved preauthorisation for the case. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1313`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Compare `Claim.item[].quantity` with the item at the same sequence in the approved preauthorisation. +2. Send the quantity of the investigation actually delivered to the patient. diff --git a/catalogue/nhcx/errors/payr-1314.md b/catalogue/nhcx/errors/payr-1314.md new file mode 100644 index 000000000..0ef30d8bd --- /dev/null +++ b/catalogue/nhcx/errors/payr-1314.md @@ -0,0 +1,87 @@ +--- +id: nhcx.error.payr-1314 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1314: the investigation is not in the active claim' +summary: >- + The update names an investigation that the claim now open for the case does not + contain. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.queries-and-communication + flows: + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1312 + - nhcx.error.payr-1303 +--- + +# PAYR-1314: the investigation is not in the active claim + +## In plain words + +An update to an open claim, such as a query response, must refer to items already in that claim. Your request names an investigation the active claim does not contain. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- The payer queried your claim, and you answered with a query response on [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [answer a payer query on a claim](../flows/claim-query-response.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1314`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No item found in active claim request for investigation `%s` with item sequence `%s` for case number `%s`. Please try again with valid items. + +The three `%s` values are, in order, the investigation code, the item sequence and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The investigation code at the named item sequence is not in the active claim for the case. +- The payer matches the code and the item sequence together. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The query response step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries the payer's decision on your answered query: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1314`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Keep the items of the submitted claim when you answer a query. Change what the query asked for, such as supporting documents. +2. Reuse the original `Claim.identifier` and each item's `sequence`. diff --git a/catalogue/nhcx/errors/payr-1315.md b/catalogue/nhcx/errors/payr-1315.md new file mode 100644 index 000000000..3dc1cab12 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1315.md @@ -0,0 +1,85 @@ +--- +id: nhcx.error.payr-1315 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1315: the procedure was rejected at preauthorisation' +summary: >- + The claim bills a procedure that the payer rejected when it decided the preauthorisation. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.preauth-response + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1306 +--- + +# PAYR-1315: the procedure was rejected at preauthorisation + +## In plain words + +When the payer decided the preauthorisation, it rejected one of the procedures. Your claim bills that procedure anyway, so the payer refused the claim. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1315`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Rejected item found for preauthorization for procedure `%s` with item sequence `%s` for case number `%s`. Please try again with valid items. + +The three `%s` values are, in order, the procedure code, the item sequence and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The preauthorisation response rejected the procedure at the named item sequence. +- Your claim includes that item. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1315`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Remove the rejected item from the claim. +2. Read the item adjudication in the preauthorisation's ClaimResponse before you build the claim. The adjudication with category `status` gives each item's decision. +3. Build claim items from the approved items only. diff --git a/catalogue/nhcx/errors/payr-1316.md b/catalogue/nhcx/errors/payr-1316.md new file mode 100644 index 000000000..d7a93953a --- /dev/null +++ b/catalogue/nhcx/errors/payr-1316.md @@ -0,0 +1,85 @@ +--- +id: nhcx.error.payr-1316 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1316: the investigation was rejected at preauthorisation' +summary: >- + The claim bills an investigation that the payer rejected when it decided the preauthorisation. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.preauth-response + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1312 +--- + +# PAYR-1316: the investigation was rejected at preauthorisation + +## In plain words + +When the payer decided the preauthorisation, it rejected one of the investigations. Your claim bills that investigation anyway, so the payer refused the claim. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1316`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Rejected item found for preauthorization for investigation `%s` with item sequence `%s` for case number `%s`. Please try again with valid items. + +The three `%s` values are, in order, the investigation code, the item sequence and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The preauthorisation response rejected the investigation at the named item sequence. +- Your claim includes that item. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1316`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Remove the rejected item from the claim. +2. Read the item adjudication in the preauthorisation's ClaimResponse before you build the claim. The adjudication with category `status` gives each item's decision. +3. Build claim items from the approved items only. diff --git a/catalogue/nhcx/errors/payr-1317.md b/catalogue/nhcx/errors/payr-1317.md new file mode 100644 index 000000000..b16b5cebb --- /dev/null +++ b/catalogue/nhcx/errors/payr-1317.md @@ -0,0 +1,85 @@ +--- +id: nhcx.error.payr-1317 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1317: the implant was rejected at preauthorisation' +summary: >- + The claim bills an implant that the payer rejected when it decided the preauthorisation. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.preauth-response + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1309 +--- + +# PAYR-1317: the implant was rejected at preauthorisation + +## In plain words + +When the payer decided the preauthorisation, it rejected one of the implants. Your claim bills that implant anyway, so the payer refused the claim. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1317`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Rejected item found for preauthorization for implant `%s` with item sequence `%s` for case number `%s`. Please try again with valid items. + +The three `%s` values are, in order, the implant code, the item sequence and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The preauthorisation response rejected the implant at the named item sequence. +- Your claim includes that item. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1317`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Remove the rejected item from the claim. +2. Read the item adjudication in the preauthorisation's ClaimResponse before you build the claim. The adjudication with category `status` gives each item's decision. +3. Build claim items from the approved items only. diff --git a/catalogue/nhcx/errors/payr-1318.md b/catalogue/nhcx/errors/payr-1318.md new file mode 100644 index 000000000..d1cd7ebfa --- /dev/null +++ b/catalogue/nhcx/errors/payr-1318.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1318 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1318: the claim has no requested treatment plan' +summary: >- + The claim carries no requested treatment plan for the case, so the payer cannot + check it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1319 + - nhcx.error.payr-1359 + - nhcx.error.payr-1306 +--- + +# PAYR-1318: the claim has no requested treatment plan + +## In plain words + +The payer looks for the treatment your hospital requested for the case. It found none in the claim. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1318`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No requested treatment plan found for case number `%s`. Please try again with valid items. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The claim carries no treatment item the payer can match for the case. +- The payer checks the claim against the approved preauthorisation. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1318`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Include the treatment items in `Claim.item`, each with its procedure code, category and amounts. +2. Reuse the procedure entries from the approved preauthorisation. diff --git a/catalogue/nhcx/errors/payr-1319.md b/catalogue/nhcx/errors/payr-1319.md new file mode 100644 index 000000000..e6018cb96 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1319.md @@ -0,0 +1,85 @@ +--- +id: nhcx.error.payr-1319 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1319: the claim has no requested investigation plan' +summary: >- + The claim carries no requested investigation plan for the case, so the payer cannot + check it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1318 + - nhcx.error.payr-1312 +--- + +# PAYR-1319: the claim has no requested investigation plan + +## In plain words + +The payer looks for the investigations your hospital requested for the case. It found none in the claim. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1319`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No requested investigation plan found for case number `%s`. Please try again with valid items. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The claim carries no investigation item the payer can match for the case. +- The payer checks the claim against the approved preauthorisation. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1319`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Include the investigation items the preauthorisation requested, each with its investigation code and amounts. +2. Reuse the investigation entries from the approved preauthorisation. diff --git a/catalogue/nhcx/errors/payr-1320.md b/catalogue/nhcx/errors/payr-1320.md new file mode 100644 index 000000000..0aa583efd --- /dev/null +++ b/catalogue/nhcx/errors/payr-1320.md @@ -0,0 +1,87 @@ +--- +id: nhcx.error.payr-1320 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1320: the payer has no details for the requested investigations' +summary: >- + The payer's system holds no details for the investigations the claim requests. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.claim-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1221 +--- + +# PAYR-1320: the payer has no details for the requested investigations + +## In plain words + +The payer looked up the investigations in your claim and found no details for them in its system. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1320`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No details found for the requested investigations in the system. Hence request will not be processed. + +The message has no placeholder. + +The payer returns this code when: + +- A code for one of the investigations is not in the payer's master data for your hospital. +- Your system took the code from an outdated copy of the insurance plan. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1320`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Take codes from the current insurance plan for your hospital. Follow [request the insurance plan](../flows/insurance-plan-request.md). +2. Refresh the insurance plan at least weekly, and at once when the policy is renewed or amended. +3. Outdated tariff versions cause rate mismatches and automatic claim rejection. Record which plan version each claim used. +4. Check each code against the insurance plan. A code the plan does not list also returns [`PAYR-1221`](./payr-1221.md). diff --git a/catalogue/nhcx/errors/payr-1321.md b/catalogue/nhcx/errors/payr-1321.md new file mode 100644 index 000000000..285270a37 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1321.md @@ -0,0 +1,88 @@ +--- +id: nhcx.error.payr-1321 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1321: the workflow id is not valid for this step' +summary: >- + The payer could not process the request because the workflow id it carries is + not valid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1003 + - nhcx.error.payr-1305 +--- + +# PAYR-1321: the workflow id is not valid for this step + +## In plain words + +Every request names its step in the claim cycle with a workflow id. The payer could not process the workflow id your request carried. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1321`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Error occurred while processing the request due to invalid workflow id as (`%s`) + +`%s` is the workflow id you sent in `x-hcx-workflow_id`. + +The payer returns this code when: + +- `x-hcx-workflow_id` carries a code that is not a claim workflow code. +- The code belongs to a different step, for example a preauthorisation or discharge code on a claim. +- The code does not fit the current state of the case. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1321`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Set `x-hcx-workflow_id` to the code for the claim step you are taking. A new claim is `15`, Claim Request Initiated. +2. For a query response and every other step, take the code from [workflow codes](../concepts/workflow-codes.md). +3. In PMJAY there is no separate discharge workflow. Submit the claim with the Claim Submitted workflow id, not a discharge code. diff --git a/catalogue/nhcx/errors/payr-1322.md b/catalogue/nhcx/errors/payr-1322.md new file mode 100644 index 000000000..9b605d6d6 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1322.md @@ -0,0 +1,87 @@ +--- +id: nhcx.error.payr-1322 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1322: the case is not in a state that accepts this request' +summary: >- + The payer refused the request because of the current state of the case it names. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1301 + - nhcx.error.payr-1342 +--- + +# PAYR-1322: the case is not in a state that accepts this request + +## In plain words + +The payer refused your request because of the state of the case. You receive this code in two situations, and the message tells them apart. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1322`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No active case found for the given case number. + +On a case that is busy, the message reads `Active instance found for case number` instead. + +The message has no placeholder. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- Message `No active case found for the given case number.`: the payer holds no open case for that number. +- Message `Active instance found for case number`: you sent a second request on the case while the first was still queued with the payer. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1322`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. For no active case, check that the case number is the identifier of the approved preauthorisation. A closed claim does not reopen. +2. For an active instance, wait for the payer's response to the first request on `/v1/claim/on_submit`. Send the next request on the case after it arrives. +3. Send every request on a case one at a time. Queue the next request in your system until the previous response arrives. diff --git a/catalogue/nhcx/errors/payr-1323.md b/catalogue/nhcx/errors/payr-1323.md new file mode 100644 index 000000000..57f770fc6 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1323.md @@ -0,0 +1,89 @@ +--- +id: nhcx.error.payr-1323 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1323: the beneficiary''s wallet balance is too low' +summary: >- + The payer refused the claim because the beneficiary does not have enough scheme + balance left. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.coverage-eligibility-purposes + flows: + - nhcx.flow.claim-submit + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1356 + - nhcx.error.payr-1201 + - nhcx.error.payr-1008 +--- + +# PAYR-1323: the beneficiary's wallet balance is too low + +## In plain words + +Each beneficiary has a wallet: the amount the scheme will still pay for them. The wallet does not hold enough to pay this claim. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1323`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Insufficient wallet balance. Hence the request will not be processed. + +The message has no placeholder. + +The payer returns this code when: + +- The amount claimed is more than the beneficiary's available wallet balance. +- The claimed amount must be greater than zero and not more than the balance wallet amount. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1323`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Check the balance with a [coverage eligibility check](../flows/coverage-eligibility-check.md) of purpose `validation`. It returns the used amount, the available balance and the wallet liability. +2. Keep the claimed amount at or below the available balance. +3. If the patient must pay the difference, check that patient liability applies at your hospital. See [`PAYR-1356`](./payr-1356.md). diff --git a/catalogue/nhcx/errors/payr-1324.md b/catalogue/nhcx/errors/payr-1324.md new file mode 100644 index 000000000..0397e591f --- /dev/null +++ b/catalogue/nhcx/errors/payr-1324.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1324 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1324: the discharge stage is not valid' +summary: >- + The claim carries a discharge stage that the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1095 + - nhcx.error.payr-1514 + - nhcx.error.payr-1362 +--- + +# PAYR-1324: the discharge stage is not valid + +## In plain words + +Every claim says at what stage the patient was discharged, relative to surgery. The stage in your claim is not a value the payer accepts. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1324`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid discharge stage received for case number `%s`. Hence the request will not be processed. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The discharge entry in `Claim.supportingInfo` carries a stage value the payer does not recognise. +- The accepted stage values are `Before Surgery`, `During Surgery` and `After Surgery`. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1324`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Send one `Claim.supportingInfo` entry with category `DIS` and code `DTH`, `DTM`, `LAMA` or `DAMA`. +2. Put the stage in `valueString`, spelled exactly as one of the accepted values. +3. Send the entry on every claim, surgical or medical. diff --git a/catalogue/nhcx/errors/payr-1325.md b/catalogue/nhcx/errors/payr-1325.md new file mode 100644 index 000000000..e1ab721b1 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1325.md @@ -0,0 +1,88 @@ +--- +id: nhcx.error.payr-1325 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1325: the admission date is not valid' +summary: >- + The payer read the admission date in the claim but does not accept it for the + case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1327 + - nhcx.error.payr-1357 + - nhcx.error.payr-1502 +--- + +# PAYR-1325: the admission date is not valid + +## In plain words + +The payer read the admission date in your claim but does not accept it for this case. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1325`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid admission date received for case number `%s`. Hence the request will not be processed. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The admission date is not a valid date for the case. +- The admission date does not match the patient's record of the admission. +- An admission date later than the discharge date has its own code, [`PAYR-1357`](./payr-1357.md). + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1325`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Carry each date in its own `Claim.supportingInfo` entry, built as the [claim request bundle](../fhir/claim-request.md) shows it. +2. Use the actual admission date and time from the patient's record. +3. Send the date as a string value or as timing, in the [NRCeS](../../shared/glossary/nrces.md) date-time format. Use a full date-time with the offset, in the form `YYYY-MM-DDThh:mm:ss+05:30`. diff --git a/catalogue/nhcx/errors/payr-1326.md b/catalogue/nhcx/errors/payr-1326.md new file mode 100644 index 000000000..67bda6caa --- /dev/null +++ b/catalogue/nhcx/errors/payr-1326.md @@ -0,0 +1,88 @@ +--- +id: nhcx.error.payr-1326 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1326: the discharge date is not valid' +summary: >- + The payer read the discharge date in the claim but does not accept it for the + case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1328 + - nhcx.error.payr-1357 + - nhcx.error.payr-1099 +--- + +# PAYR-1326: the discharge date is not valid + +## In plain words + +The payer read the discharge date in your claim but does not accept it for this case. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1326`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid discharge date received for case number `%s`. Hence the request will not be processed. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The discharge date is not a valid date for the case. +- The discharge date does not match the patient's record of the admission. +- An admission date later than the discharge date has its own code, [`PAYR-1357`](./payr-1357.md). + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1326`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Carry each date in its own `Claim.supportingInfo` entry, built as the [claim request bundle](../fhir/claim-request.md) shows it. +2. Use the actual discharge date and time from the patient's record. +3. Send the date as a string value or as timing, in the [NRCeS](../../shared/glossary/nrces.md) date-time format. Use a full date-time with the offset, in the form `YYYY-MM-DDThh:mm:ss+05:30`. diff --git a/catalogue/nhcx/errors/payr-1327.md b/catalogue/nhcx/errors/payr-1327.md new file mode 100644 index 000000000..29aa01ae3 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1327.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1327 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1327: the admission date is in the wrong format' +summary: >- + The payer could not read the admission date in the claim because of its format. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1325 + - nhcx.error.payr-1357 + - nhcx.error.payr-1502 +--- + +# PAYR-1327: the admission date is in the wrong format + +## In plain words + +The payer could not read the admission date in your claim. The date is not in the format it expects. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1327`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid admission date format received for case number `%s`. Hence the request will not be processed. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The admission date is not a valid [NRCeS](../../shared/glossary/nrces.md) date-time. +- The admission date is sent with a value type the payer does not read for that entry. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1327`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Carry each date in its own `Claim.supportingInfo` entry, built as the [claim request bundle](../fhir/claim-request.md) shows it. +2. Send the date as a string value or as timing, in the NRCeS date-time format. Use a full date-time with the offset, in the form `YYYY-MM-DDThh:mm:ss+05:30`. +3. Use the same offset on every date in the claim. diff --git a/catalogue/nhcx/errors/payr-1328.md b/catalogue/nhcx/errors/payr-1328.md new file mode 100644 index 000000000..509396b4c --- /dev/null +++ b/catalogue/nhcx/errors/payr-1328.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1328 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1328: the discharge date is in the wrong format' +summary: >- + The payer could not read the discharge date in the claim because of its format. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1326 + - nhcx.error.payr-1357 + - nhcx.error.payr-1099 +--- + +# PAYR-1328: the discharge date is in the wrong format + +## In plain words + +The payer could not read the discharge date in your claim. The date is not in the format it expects. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1328`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid discharge date format received for case number `%s`. Hence the request will not be processed. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The discharge date is not a valid [NRCeS](../../shared/glossary/nrces.md) date-time. +- The discharge date is sent with a value type the payer does not read for that entry. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1328`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Carry each date in its own `Claim.supportingInfo` entry, built as the [claim request bundle](../fhir/claim-request.md) shows it. +2. Send the date as a string value or as timing, in the NRCeS date-time format. Use a full date-time with the offset, in the form `YYYY-MM-DDThh:mm:ss+05:30`. +3. Use the same offset on every date in the claim. diff --git a/catalogue/nhcx/errors/payr-1329.md b/catalogue/nhcx/errors/payr-1329.md new file mode 100644 index 000000000..ff14cf292 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1329.md @@ -0,0 +1,88 @@ +--- +id: nhcx.error.payr-1329 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1329: the registration date is not valid' +summary: >- + The payer read the registration date in the claim but does not accept it for the + case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1330 + - nhcx.error.payr-1358 + - nhcx.error.payr-1098 +--- + +# PAYR-1329: the registration date is not valid + +## In plain words + +The payer read the registration date in your claim but does not accept it for this case. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1329`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid registration date received for case number `%s`. Hence the request will not be processed. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The registration date is not a valid date for the case. +- The registration date does not match the patient's record of the admission. +- A registration date too long after admission has its own code, [`PAYR-1358`](./payr-1358.md). + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1329`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Send the registration date in the `Claim.supportingInfo` entry with category `OTH` and code `EDT`. +2. Use the actual registration date and time from the patient's record. +3. Send the date as a string value or as timing, in the [NRCeS](../../shared/glossary/nrces.md) date-time format. Use a full date-time with the offset, in the form `YYYY-MM-DDThh:mm:ss+05:30`. diff --git a/catalogue/nhcx/errors/payr-1330.md b/catalogue/nhcx/errors/payr-1330.md new file mode 100644 index 000000000..976655f7e --- /dev/null +++ b/catalogue/nhcx/errors/payr-1330.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1330 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1330: the registration date is in the wrong format' +summary: >- + The payer could not read the registration date in the claim because of its format. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1329 + - nhcx.error.payr-1358 + - nhcx.error.payr-1098 +--- + +# PAYR-1330: the registration date is in the wrong format + +## In plain words + +The payer could not read the registration date in your claim. The date is not in the format it expects. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1330`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid registration date format received for case number `%s`. Hence the request will not be processed. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The registration date is not a valid [NRCeS](../../shared/glossary/nrces.md) date-time. +- The registration date is sent with a value type the payer does not read for that entry. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1330`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Send the registration date in the `Claim.supportingInfo` entry with category `OTH` and code `EDT`. +2. Send the date as a string value or as timing, in the NRCeS date-time format. Use a full date-time with the offset, in the form `YYYY-MM-DDThh:mm:ss+05:30`. +3. Use the same offset on every date in the claim. diff --git a/catalogue/nhcx/errors/payr-1331.md b/catalogue/nhcx/errors/payr-1331.md new file mode 100644 index 000000000..48d9c0b45 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1331.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1331 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1331: the receiver is not registered in NHCX' +summary: >- + The payer found that the receiver named in the claim is not a registered participant. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.participant-code + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + - nhcx.endpoint.participant-get-policies + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1003 +--- + +# PAYR-1331: the receiver is not registered in NHCX + +## In plain words + +Every request names the participant that should receive it. The receiver in your request is not a registered [NHCX](../../shared/glossary/nhcx.md) participant. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- NHCX answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1331`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Receiver not registered in NHCX. Please try again with valid receiver details. + +The message has no placeholder. + +The payer returns this code when: + +- `x-hcx-recipient_code` carries a code that is not a registered participant code. +- Your system used the payer's `PayerID` instead of its `processingID`. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1331`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Set `x-hcx-recipient_code` to the `processingID` from the [get policies](../endpoints/participant-get-policies.md) response. +2. Check the code is a registered [participant code](../concepts/participant-code.md) before you send. +3. The same condition at the exchange returns [`NHCX-1003`](./nhcx-1003.md). diff --git a/catalogue/nhcx/errors/payr-1332.md b/catalogue/nhcx/errors/payr-1332.md new file mode 100644 index 000000000..3830ecbb7 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1332.md @@ -0,0 +1,84 @@ +--- +id: nhcx.error.payr-1332 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1332: the Claim Review Committee request is not valid' +summary: >- + The payer refused a request meant for review of a claim decision. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.reprocess-and-cancel + flows: + - nhcx.flow.claim-reprocess + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1343 +--- + +# PAYR-1332: the Claim Review Committee request is not valid + +## In plain words + +A rejected claim can be sent for review by the Claim Review Committee ([CRC](../glossary/crc.md)). The payer did not accept your request for that review. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- The payer decided your claim, and you asked for a review of that decision. You followed [ask the payer to reprocess a claim](../flows/claim-reprocess.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1332`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid CRC request. + +The message has no placeholder. + +The payer returns this code when: + +- The payer does not accept the request as a CRC review for the case. The message gives no further detail. +- The CRC decision on a case is final. No further erroneous claim can be raised against it. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The review step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries the payer's decision on your request: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1332`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Check whether the CRC has already decided the case. If it has, the decision stands. +2. Build the request as [ask the payer to reprocess a claim](../flows/claim-reprocess.md) describes. diff --git a/catalogue/nhcx/errors/payr-1333.md b/catalogue/nhcx/errors/payr-1333.md new file mode 100644 index 000000000..cd6e704f6 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1333.md @@ -0,0 +1,82 @@ +--- +id: nhcx.error.payr-1333 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1333: the claim type is not valid' +summary: >- + The claim says in-patient or out-patient in a way the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 +--- + +# PAYR-1333: the claim type is not valid + +## In plain words + +Every claim says whether the care was in-patient or out-patient. The payer did not accept the claim type in your claim. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1333`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid claim type (in-patient/out-patient) received. Hence the request will not be processed. + +The message has no placeholder. + +The payer returns this code when: + +- `Claim.type` carries a code the payer does not accept as in-patient or out-patient. +- The claim type differs from the care the case was approved for. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1333`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Set `Claim.type` to the care type of the case. For in-patient care, use [SNOMED CT](../../shared/glossary/snomed-ct.md) `737481003`, Inpatient care management. +2. Keep the claim type the same as in the approved preauthorisation. diff --git a/catalogue/nhcx/errors/payr-1334.md b/catalogue/nhcx/errors/payr-1334.md new file mode 100644 index 000000000..a7d33e05b --- /dev/null +++ b/catalogue/nhcx/errors/payr-1334.md @@ -0,0 +1,85 @@ +--- +id: nhcx.error.payr-1334 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1334: the payer has no configuration for your hospital' +summary: >- + The payer's system holds no configuration for the hospital that sent the claim. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1105 + - nhcx.error.payr-1239 +--- + +# PAYR-1334: the payer has no configuration for your hospital + +## In plain words + +The payer could not find a configuration for your hospital in its system. The fix is on the payer's side. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1334`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Hospital configuration not found. Please contact support team. + +The message has no placeholder. + +The payer returns this code when: + +- The payer's system holds no configuration for your hospital. +- Your request identifies the hospital in a way the payer cannot match. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1334`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Check that `x-hcx-sender_code` is your own registered participant code. +2. Check the provider Organization carries the hospital's [HFR](../../shared/glossary/hfr.md) id as an identifier with type code `NPI`. It must match the id recorded in NHCX for your participant code. +3. If both are right, contact the support team with the case number and your `x-hcx-correlation_id`. diff --git a/catalogue/nhcx/errors/payr-1335.md b/catalogue/nhcx/errors/payr-1335.md new file mode 100644 index 000000000..0b859d520 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1335.md @@ -0,0 +1,83 @@ +--- +id: nhcx.error.payr-1335 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1335: the implant quantity is not valid' +summary: >- + The claim carries an implant quantity that the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1310 + - nhcx.error.payr-1336 +--- + +# PAYR-1335: the implant quantity is not valid + +## In plain words + +The payer checked the quantity on an implant in your claim and did not accept it. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1335`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid implant quantity received as `%s` for implant `%s` for case number `%s`. Please try again with valid data. + +The three `%s` values are, in order, the quantity you sent, the implant code and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The quantity on the implant is not valid for the case. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1335`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Send the number of implants actually used. +2. Compare the quantity with the implant at the same sequence in the approved preauthorisation. diff --git a/catalogue/nhcx/errors/payr-1336.md b/catalogue/nhcx/errors/payr-1336.md new file mode 100644 index 000000000..9275deb35 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1336.md @@ -0,0 +1,84 @@ +--- +id: nhcx.error.payr-1336 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1336: the implant unit price is not valid' +summary: >- + The claim carries an implant unit price that the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1337 + - nhcx.error.payr-1017 +--- + +# PAYR-1336: the implant unit price is not valid + +## In plain words + +The payer checked the unit price on an implant in your claim and did not accept it. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1336`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid implant unit price received as INR `%s` for implant `%s` for case number `%s`. Please try again with valid data. + +The three `%s` values are, in order, the unit price in rupees you sent, the implant code and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The unit price on the implant is not valid for the case. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1336`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Take the implant price from the current insurance plan for your hospital. +2. Refresh the insurance plan at least weekly, and at once when the policy is renewed or amended. +3. Outdated tariff versions cause rate mismatches and automatic claim rejection. Record which plan version each claim used. diff --git a/catalogue/nhcx/errors/payr-1337.md b/catalogue/nhcx/errors/payr-1337.md new file mode 100644 index 000000000..c8f692183 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1337.md @@ -0,0 +1,84 @@ +--- +id: nhcx.error.payr-1337 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1337: the implant net amount is not valid' +summary: >- + The claim carries an implant net amount that the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1336 + - nhcx.error.payr-1017 +--- + +# PAYR-1337: the implant net amount is not valid + +## In plain words + +The payer checked the net amount on an implant in your claim and did not accept it. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1337`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid implant net amount received as INR `%s` for implant `%s` for case number `%s`. Please try again with valid data. + +The three `%s` values are, in order, the net amount in rupees you sent, the implant code and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The net amount on the implant is not valid for the case. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1337`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Recalculate `net` from the quantity and unit price you send for the implant. +2. Take the implant price from the current insurance plan for your hospital. +3. Amount calculations that do not add up also return [`PAYR-1017`](./payr-1017.md). diff --git a/catalogue/nhcx/errors/payr-1338.md b/catalogue/nhcx/errors/payr-1338.md new file mode 100644 index 000000000..978f8d2cc --- /dev/null +++ b/catalogue/nhcx/errors/payr-1338.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1338 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1338: the implant attachment is not valid' +summary: >- + The claim carries an implant attachment that the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1341 +--- + +# PAYR-1338: the implant attachment is not valid + +## In plain words + +The payer checked the attachment on an implant in your claim and did not accept it. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1338`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid implant attachment received for investigation `%s` for case number `%s`. Please try again with valid data. + +The two `%s` values are the item code and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The attachment linked to the item is not valid. +- The message names the item as an investigation, even on an implant. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1338`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Encode the attachment value as Base64. +2. Give the attachment a name. The name cannot be empty. +3. Use one of the allowed content types: `application/pdf`, `application/jpg`, `application/jpeg`, `application/png` or `application/fhir+json`. +4. Keep each document under 2 MB. The whole bundle can be 20 MB at most. +5. Link one document per item. Merge several documents for one item into one file. diff --git a/catalogue/nhcx/errors/payr-1339.md b/catalogue/nhcx/errors/payr-1339.md new file mode 100644 index 000000000..fd324ba62 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1339.md @@ -0,0 +1,85 @@ +--- +id: nhcx.error.payr-1339 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1339: the implant status is not valid' +summary: >- + The claim carries an implant status that the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1340 + - nhcx.error.payr-1345 +--- + +# PAYR-1339: the implant status is not valid + +## In plain words + +The payer checked the status on an implant in your claim and did not accept it. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1339`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid implant status received as `%s` for investigation `%s` for case number `%s`. Please try again with valid data. + +The three `%s` values are, in order, the status you sent, the item code and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The status on the implant is not a value the payer accepts. +- The message names the item as an investigation, even on an implant. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1339`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Compare the status on the implant with the item at the same sequence in the approved preauthorisation. +2. Send `Requested` as the status on a requested item. The payer requires that value on the LM100 item. +3. The full list of accepted status values is not yet published. diff --git a/catalogue/nhcx/errors/payr-1340.md b/catalogue/nhcx/errors/payr-1340.md new file mode 100644 index 000000000..d70fcaf82 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1340.md @@ -0,0 +1,84 @@ +--- +id: nhcx.error.payr-1340 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1340: the investigation status is not valid' +summary: >- + The claim carries an investigation status that the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1339 + - nhcx.error.payr-1345 +--- + +# PAYR-1340: the investigation status is not valid + +## In plain words + +The payer checked the status on an investigation in your claim and did not accept it. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1340`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid investigation status received as `%s` for investigation `%s` for case number `%s`. Please try again with valid data. + +The three `%s` values are, in order, the status you sent, the investigation code and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The status on the investigation is not a value the payer accepts. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1340`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Compare the status on the investigation with the item at the same sequence in the approved preauthorisation. +2. Send `Requested` as the status on a requested item. The payer requires that value on the LM100 item. +3. The full list of accepted status values is not yet published. diff --git a/catalogue/nhcx/errors/payr-1341.md b/catalogue/nhcx/errors/payr-1341.md new file mode 100644 index 000000000..f3ab17cf5 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1341.md @@ -0,0 +1,85 @@ +--- +id: nhcx.error.payr-1341 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1341: the investigation attachment is not valid' +summary: >- + The claim carries an investigation attachment that the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1338 +--- + +# PAYR-1341: the investigation attachment is not valid + +## In plain words + +The payer checked the attachment on an investigation in your claim and did not accept it. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1341`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid investigation attachment received for investigation `%s` for case number `%s`. Please try again with valid data. + +The two `%s` values are the investigation code and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The attachment linked to the investigation is not valid. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1341`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Encode the attachment value as Base64. +2. Give the attachment a name. The name cannot be empty. +3. Use one of the allowed content types: `application/pdf`, `application/jpg`, `application/jpeg`, `application/png` or `application/fhir+json`. +4. Keep each document under 2 MB. The whole bundle can be 20 MB at most. +5. Link one document per item. Merge several documents for one item into one file. diff --git a/catalogue/nhcx/errors/payr-1342.md b/catalogue/nhcx/errors/payr-1342.md new file mode 100644 index 000000000..e3bae6fd3 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1342.md @@ -0,0 +1,89 @@ +--- +id: nhcx.error.payr-1342 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1342: a case in progress blocks a new reimbursement request' +summary: >- + The payer refused a new reimbursement request because an earlier request on the + same case is still in progress. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1343 + - nhcx.error.payr-1213 + - nhcx.error.payr-1322 +--- + +# PAYR-1342: a case in progress blocks a new reimbursement request + +## In plain words + +A reimbursement claim is paid back to the hospital after treatment. The payer is still processing an earlier request on this case, so it refused the new one. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1342`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Existing case in progress found for case number `%s`. Hence new reimbursement request will not be accepted. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- An earlier request on the case number is still in progress with the payer. +- Your system sent a new reimbursement request before the payer finished the earlier one. +- Reimbursement claims use their own workflow ids, such as `R15` for a submitted reimbursement claim. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1342`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Wait for the payer's response to the earlier request before you send a new one. +2. Check that `x-hcx-workflow_id` is the reimbursement code for the step. Take it from [workflow codes](../concepts/workflow-codes.md). +3. Send the new request with a new `x-hcx-correlation_id` once the earlier request is finished. diff --git a/catalogue/nhcx/errors/payr-1343.md b/catalogue/nhcx/errors/payr-1343.md new file mode 100644 index 000000000..e91f3be99 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1343.md @@ -0,0 +1,88 @@ +--- +id: nhcx.error.payr-1343 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1343: a reimbursement was already approved for this case' +summary: >- + The payer refused a new reimbursement request because it has already approved + one for the same case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + flows: + - nhcx.flow.claim-submit + - nhcx.flow.claim-reprocess + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1342 + - nhcx.error.payr-1301 +--- + +# PAYR-1343: a reimbursement was already approved for this case + +## In plain words + +The payer already approved a reimbursement for this case. It will not process a second reimbursement request for the same case. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1343`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Previous reimbursement approved record found for the new reimbursement request for case number `%s`. Hence request will not be processed further. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- An approved reimbursement already exists for the case number. +- Your request is a new reimbursement request, not a dispute of the approved one. + +## How you know it worked + +Do not resend the reimbursement request. Send any reprocess as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. Reusing an inactive correlation id returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1343`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Do not resend the reimbursement request for the case. +2. To dispute the approved amount, raise a reprocess request instead. A reimbursement reprocess uses its own workflow id, `R122`. +3. Follow [ask the payer to reprocess a claim](../flows/claim-reprocess.md) for the request itself. diff --git a/catalogue/nhcx/errors/payr-1344.md b/catalogue/nhcx/errors/payr-1344.md new file mode 100644 index 000000000..4020c9cc3 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1344.md @@ -0,0 +1,89 @@ +--- +id: nhcx.error.payr-1344 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1344: the payer has no details for the requested procedures' +summary: >- + The payer's system holds no details for the procedures the claim requests. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.claim-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1204 + - nhcx.error.payr-1106 + - nhcx.error.payr-1240 +--- + +# PAYR-1344: the payer has no details for the requested procedures + +## In plain words + +The payer looked up the procedures in your claim and found no details for them in its system. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1344`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No details found for the requested procedures in the system. + +The message has no placeholder. + +The payer returns this code when: + +- A code for one of the procedures is not in the payer's master data for your hospital. +- Your system took the code from an outdated copy of the insurance plan. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1344`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Take codes from the current insurance plan for your hospital. Follow [request the insurance plan](../flows/insurance-plan-request.md). +2. Refresh the insurance plan at least weekly, and at once when the policy is renewed or amended. +3. Outdated tariff versions cause rate mismatches and automatic claim rejection. Record which plan version each claim used. +4. Check each code against the insurance plan. A code the plan does not list also returns [`PAYR-1204`](./payr-1204.md). diff --git a/catalogue/nhcx/errors/payr-1345.md b/catalogue/nhcx/errors/payr-1345.md new file mode 100644 index 000000000..8be64456a --- /dev/null +++ b/catalogue/nhcx/errors/payr-1345.md @@ -0,0 +1,84 @@ +--- +id: nhcx.error.payr-1345 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1345: the procedure status is not valid' +summary: >- + The claim carries a procedure status that the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1362 + - nhcx.error.payr-1340 +--- + +# PAYR-1345: the procedure status is not valid + +## In plain words + +The payer checked the status on a procedure in your claim and did not accept it. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1345`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid procedure status received as `%s` for procedure `%s` for case number `%s`. Please try again with valid data. + +The three `%s` values are, in order, the status you sent, the procedure code and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The status on the procedure is not a value the payer accepts. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1345`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Compare the status on the procedure with the item at the same sequence in the approved preauthorisation. +2. Send `Requested` as the status on a requested item. The payer requires that value on the LM100 item. +3. The full list of accepted status values is not yet published. diff --git a/catalogue/nhcx/errors/payr-1346.md b/catalogue/nhcx/errors/payr-1346.md new file mode 100644 index 000000000..c2a2b1f05 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1346.md @@ -0,0 +1,83 @@ +--- +id: nhcx.error.payr-1346 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1346: the procedure description is not valid' +summary: >- + The claim carries a procedure description that the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1204 + - nhcx.error.payr-1203 +--- + +# PAYR-1346: the procedure description is not valid + +## In plain words + +The payer checked the description on a procedure in your claim and did not accept it. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1346`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid procedure description received as `%s` for procedure `%s` for case number `%s`. Please try again with valid data. + +The three `%s` values are, in order, the description you sent, the procedure code and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The description on the procedure does not match what the payer holds for the procedure code. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1346`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Send the procedure description exactly as the insurance plan gives it for that procedure code. +2. Refresh the insurance plan at least weekly, and at once when the policy is renewed or amended. diff --git a/catalogue/nhcx/errors/payr-1347.md b/catalogue/nhcx/errors/payr-1347.md new file mode 100644 index 000000000..7d1ff0113 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1347.md @@ -0,0 +1,82 @@ +--- +id: nhcx.error.payr-1347 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1347: the procedure type is not valid' +summary: >- + The claim carries a procedure type that the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1346 +--- + +# PAYR-1347: the procedure type is not valid + +## In plain words + +The payer checked the type on a procedure in your claim and did not accept it. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1347`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid procedure type received as `%s` for procedure `%s` for case number `%s`. Please try again with valid data. + +The three `%s` values are, in order, the type you sent, the procedure code and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The type on the procedure does not match what the payer holds for the procedure code. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1347`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Send the procedure type the insurance plan gives for the procedure code. +2. Compare the type with the procedure in the approved preauthorisation. diff --git a/catalogue/nhcx/errors/payr-1348.md b/catalogue/nhcx/errors/payr-1348.md new file mode 100644 index 000000000..e19135348 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1348.md @@ -0,0 +1,82 @@ +--- +id: nhcx.error.payr-1348 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1348: the procedure factor is not valid' +summary: >- + The claim carries a procedure factor that the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1350 +--- + +# PAYR-1348: the procedure factor is not valid + +## In plain words + +The payer checked the factor on a procedure in your claim and did not accept it. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1348`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid procedure factor received as `%s` for procedure `%s` for case number `%s`. Please try again with valid data. + +The three `%s` values are, in order, the factor you sent, the procedure code and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- `Claim.item[].factor` on the procedure is not a value the payer accepts for the case. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1348`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Compare the factor with the procedure at the same sequence in the approved preauthorisation. +2. Do not recompute the factor on your side between preauthorisation and claim. diff --git a/catalogue/nhcx/errors/payr-1349.md b/catalogue/nhcx/errors/payr-1349.md new file mode 100644 index 000000000..e0d36fa3f --- /dev/null +++ b/catalogue/nhcx/errors/payr-1349.md @@ -0,0 +1,84 @@ +--- +id: nhcx.error.payr-1349 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1349: the procedure quantity is not valid' +summary: >- + The claim carries a procedure quantity that the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1307 + - nhcx.error.payr-1368 +--- + +# PAYR-1349: the procedure quantity is not valid + +## In plain words + +The payer checked the quantity on a procedure in your claim and did not accept it. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1349`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid procedure quantity received as `%s` for procedure `%s` for case number `%s`. Please try again with valid data. + +The three `%s` values are, in order, the quantity you sent, the procedure code and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- `Claim.item[].quantity` on the procedure is not valid for the case. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1349`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Send the quantity actually delivered, compared with the approved preauthorisation. +2. On the LM100 item, send the number of days the patient was admitted. +3. For a cyclic procedure, stay within the cycles the insurance plan allows. diff --git a/catalogue/nhcx/errors/payr-1350.md b/catalogue/nhcx/errors/payr-1350.md new file mode 100644 index 000000000..ada0dd0de --- /dev/null +++ b/catalogue/nhcx/errors/payr-1350.md @@ -0,0 +1,85 @@ +--- +id: nhcx.error.payr-1350 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1350: the procedure net amount is not valid' +summary: >- + The claim carries a procedure net amount that the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1017 + - nhcx.error.payr-1348 +--- + +# PAYR-1350: the procedure net amount is not valid + +## In plain words + +The payer checked the net amount on a procedure in your claim and did not accept it. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1350`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid procedure net amount received as INR `%s` for procedure `%s` for case number `%s`. Please try again with valid data. + +The three `%s` values are, in order, the net amount in rupees you sent, the procedure code and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- `Claim.item[].net` on the procedure is not valid for the case. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1350`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Take the package cost from the current insurance plan for your hospital. +2. Recalculate `net` from the `quantity`, `factor` and `unitPrice` you send. +3. Amount calculations that do not add up also return [`PAYR-1017`](./payr-1017.md). +4. Outdated tariff versions cause rate mismatches and automatic claim rejection. Record which plan version each claim used. diff --git a/catalogue/nhcx/errors/payr-1351.md b/catalogue/nhcx/errors/payr-1351.md new file mode 100644 index 000000000..d3f77cc05 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1351.md @@ -0,0 +1,84 @@ +--- +id: nhcx.error.payr-1351 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1351: the procedure speciality code is not valid' +summary: >- + The claim carries a procedure speciality code that the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1203 + - nhcx.error.payr-1202 +--- + +# PAYR-1351: the procedure speciality code is not valid + +## In plain words + +The payer checked the speciality code on a procedure in your claim and did not accept it. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1351`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid speciality code received as `%s` for procedure `%s` for case number `%s`. Please try again with valid data. + +The three `%s` values are, in order, the speciality code you sent, the procedure code and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The speciality code in `Claim.item[].category` does not match the procedure in the insurance plan. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1351`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Send the category code of the specific cost of the plan in the insurance plan, for example `MG` for General Medicine. +2. Take the procedure and its speciality from the same entry in the insurance plan. +3. Refresh the insurance plan at least weekly, and at once when the policy is renewed or amended. diff --git a/catalogue/nhcx/errors/payr-1352.md b/catalogue/nhcx/errors/payr-1352.md new file mode 100644 index 000000000..6f61a94f4 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1352.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1352 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1352: the beneficiary and care plan do not fit this hospital' +summary: >- + The beneficiary and care plan in the claim match no rule for handling the case + at this hospital. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1353 +--- + +# PAYR-1352: the beneficiary and care plan do not fit this hospital + +## In plain words + +The payer checked the beneficiary and the care plan together for your hospital. The combination matches no criteria for handling the case there. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1352`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Requested beneficary details and careplan details does not match any criteria for processing the case at this hospital. Please try again with valid data. + +The message has no placeholder. + +The payer returns this code when: + +- The beneficiary details and care plan details in the claim do not match any criteria for your hospital. +- The insurance plan lists only the specialities relevant to your hospital. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1352`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Use the same beneficiary and care plan details as the approved preauthorisation. +2. Take the treatment from the insurance plan for your hospital. +3. Refresh the insurance plan at least weekly, and at once when the policy is renewed or amended. diff --git a/catalogue/nhcx/errors/payr-1353.md b/catalogue/nhcx/errors/payr-1353.md new file mode 100644 index 000000000..87261f77a --- /dev/null +++ b/catalogue/nhcx/errors/payr-1353.md @@ -0,0 +1,83 @@ +--- +id: nhcx.error.payr-1353 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1353: the care plan id is not valid' +summary: >- + The claim carries a care plan id the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1103 + - nhcx.error.payr-1352 +--- + +# PAYR-1353: the care plan id is not valid + +## In plain words + +The care plan id in your claim is not one the payer accepts. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1353`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid careplan id received. Please try again with valid careplan id. + +The message has no placeholder. + +The payer returns this code when: + +- The care plan id in the claim is not valid for the beneficiary or the case. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1353`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Use the care plan recorded when the beneficiary was registered. +2. Keep the care plan id the same as in the approved preauthorisation. diff --git a/catalogue/nhcx/errors/payr-1354.md b/catalogue/nhcx/errors/payr-1354.md new file mode 100644 index 000000000..ef665311c --- /dev/null +++ b/catalogue/nhcx/errors/payr-1354.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1354 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1354: the claim failed a payer rule' +summary: >- + The claim failed one of the payer's rules, and the message does not name the rule. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1111 + - nhcx.error.payr-1245 +--- + +# PAYR-1354: the claim failed a payer rule + +## In plain words + +The claim broke one of the payer's rules. The message does not say which rule. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1354`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Rule failure. + +The message has no placeholder. + +The payer returns this code when: + +- The claim fails a rule the payer applies to the case. +- Scheme rules for each package sit in the claim conditions of the insurance plan. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1354`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Recheck each package in the claim against the claim conditions in the insurance plan. +2. Compare the claim with the approved preauthorisation, item by item. +3. If you find nothing, contact the support team with the case number and your `x-hcx-correlation_id`. diff --git a/catalogue/nhcx/errors/payr-1355.md b/catalogue/nhcx/errors/payr-1355.md new file mode 100644 index 000000000..b130a28dc --- /dev/null +++ b/catalogue/nhcx/errors/payr-1355.md @@ -0,0 +1,87 @@ +--- +id: nhcx.error.payr-1355 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1355: the payer has no details for the requested implants' +summary: >- + The payer's system holds no details for the implants the claim requests. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.claim-submit + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1225 +--- + +# PAYR-1355: the payer has no details for the requested implants + +## In plain words + +The payer looked up the implants in your claim and found no details for them in its system. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1355`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No details found for the requested implants in the system. Hence request will not be processed. + +The message has no placeholder. + +The payer returns this code when: + +- A code for one of the implants is not in the payer's master data for your hospital. +- Your system took the code from an outdated copy of the insurance plan. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1355`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Take codes from the current insurance plan for your hospital. Follow [request the insurance plan](../flows/insurance-plan-request.md). +2. Refresh the insurance plan at least weekly, and at once when the policy is renewed or amended. +3. Outdated tariff versions cause rate mismatches and automatic claim rejection. Record which plan version each claim used. +4. Check each code against the insurance plan. A code the plan does not list also returns [`PAYR-1225`](./payr-1225.md). diff --git a/catalogue/nhcx/errors/payr-1356.md b/catalogue/nhcx/errors/payr-1356.md new file mode 100644 index 000000000..df5fa5573 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1356.md @@ -0,0 +1,87 @@ +--- +id: nhcx.error.payr-1356 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1356: the wallet is short and the patient cannot pay the difference' +summary: >- + The beneficiary's scheme balance does not cover the amount, and the hospital may + not charge the patient the rest. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.coverage-eligibility-purposes + flows: + - nhcx.flow.claim-submit + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1323 + - nhcx.error.payr-1201 +--- + +# PAYR-1356: the wallet is short and the patient cannot pay the difference + +## In plain words + +The beneficiary's wallet does not cover the amount you claimed. Your hospital is not allowed to charge the patient the difference, so the payer refused the claim. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1356`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Patient liability is not aplicable for the hospital and beneficiary do not have enough wallet balance with deficit amount INR `%s` for the requested preauthorization for case number `%s`. + +The two `%s` values are the deficit in rupees and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The claimed amount is more than the beneficiary's available wallet balance. +- Patient liability is not applicable for your hospital, so the patient cannot cover the deficit. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1356`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Check the balance with a [coverage eligibility check](../flows/coverage-eligibility-check.md) of purpose `validation`. It returns the available balance and the wallet liability. +2. Reduce the claimed amount by the deficit in the message, so it stays within the available balance. diff --git a/catalogue/nhcx/errors/payr-1357.md b/catalogue/nhcx/errors/payr-1357.md new file mode 100644 index 000000000..5cecd7de3 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1357.md @@ -0,0 +1,85 @@ +--- +id: nhcx.error.payr-1357 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1357: the admission date is after the discharge date' +summary: >- + The claim gives an admission date later than its discharge date. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1325 + - nhcx.error.payr-1326 +--- + +# PAYR-1357: the admission date is after the discharge date + +## In plain words + +Your claim says the patient was admitted after they were discharged. The payer refused it. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1357`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Admission date cannot be after the discharge date. Hence request will not be processed. Please correct the data and try again. + +The message has no placeholder. + +The payer returns this code when: + +- The admission date in `Claim.supportingInfo` is later than the discharge date. +- Dates with different offsets can reverse their order once the payer compares them. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1357`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Correct whichever date is wrong, using the patient's record. +2. Use the same offset, `+05:30`, on the admission and discharge dates. +3. Carry each date in its own `Claim.supportingInfo` entry, built as the [claim request bundle](../fhir/claim-request.md) shows it. diff --git a/catalogue/nhcx/errors/payr-1358.md b/catalogue/nhcx/errors/payr-1358.md new file mode 100644 index 000000000..f54c5a3da --- /dev/null +++ b/catalogue/nhcx/errors/payr-1358.md @@ -0,0 +1,84 @@ +--- +id: nhcx.error.payr-1358 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1358: the patient was registered too long after admission' +summary: >- + The registration date in the claim is later after admission than the scheme allows. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1329 + - nhcx.error.payr-1325 +--- + +# PAYR-1358: the patient was registered too long after admission + +## In plain words + +The scheme allows a patient to be registered only within a set number of days after admission. Your claim gives a registration date outside that window. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1358`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Registration of the patient is allowed maximum upto `%s` days after admission. Hence request will not be processed. Please correct the data and try again. + +`%s` is the maximum number of days after admission that applies to your case. + +The payer returns this code when: + +- The registration date, in the entry with category `OTH` and code `EDT`, is more than the allowed days after the admission date. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1358`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Check the registration date against the patient's record and correct it if it is wrong. +2. Check the admission date as well. A wrong admission date moves the window. +3. Use the same offset, `+05:30`, on both dates. diff --git a/catalogue/nhcx/errors/payr-1359.md b/catalogue/nhcx/errors/payr-1359.md new file mode 100644 index 000000000..b913d24bb --- /dev/null +++ b/catalogue/nhcx/errors/payr-1359.md @@ -0,0 +1,84 @@ +--- +id: nhcx.error.payr-1359 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1359: the claim has no billable treatment plan' +summary: >- + The treatment plan in the claim has nothing the payer can bill for the case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1318 + - nhcx.error.payr-1362 +--- + +# PAYR-1359: the claim has no billable treatment plan + +## In plain words + +The payer found no treatment item it can bill in your claim for this case. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1359`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No billable treatment plan received for case number `%s`. Please try again with valid treatment plan data. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The claim carries no treatment item with a billable amount for the case. +- In a discharge against medical advice before or during surgery, LM100 replaces every other preauthorisation item. Without LM100, nothing billable remains. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1359`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Send at least one treatment item with its code, `quantity`, `unitPrice` and `net`. +2. For a discharge against medical advice before or during surgery, add the LM100 item. See [`PAYR-1362`](./payr-1362.md). diff --git a/catalogue/nhcx/errors/payr-1360.md b/catalogue/nhcx/errors/payr-1360.md new file mode 100644 index 000000000..63736f9be --- /dev/null +++ b/catalogue/nhcx/errors/payr-1360.md @@ -0,0 +1,86 @@ +--- +id: nhcx.error.payr-1360 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1360: an item code is not valid' +summary: >- + The claim carries an item code the payer does not accept at the named item sequence. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1204 + - nhcx.error.payr-1361 +--- + +# PAYR-1360: an item code is not valid + +## In plain words + +The payer did not accept the code on one of the items in your claim. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1360`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid item code received as `%s` for item sequence `%s` case number `%s`. Please try again with valid data. + +The three `%s` values are, in order, the item code you sent, the item sequence and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- `Claim.item[].productOrService` at the named sequence carries a code the payer does not accept. +- Procedure codes come from the code of the type of the benefit component, of the specific cost, of the plan in the insurance plan. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1360`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Take each item code from the current insurance plan for your hospital. +2. Compare the code with the item at the same sequence in the approved preauthorisation. +3. Refresh the insurance plan at least weekly, and at once when the policy is renewed or amended. diff --git a/catalogue/nhcx/errors/payr-1361.md b/catalogue/nhcx/errors/payr-1361.md new file mode 100644 index 000000000..75204cd97 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1361.md @@ -0,0 +1,85 @@ +--- +id: nhcx.error.payr-1361 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1361: an item sequence is not valid' +summary: >- + The claim carries an item sequence number the payer does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1360 + - nhcx.error.payr-1306 +--- + +# PAYR-1361: an item sequence is not valid + +## In plain words + +Each item in a claim has a sequence number. The payer did not accept one of yours. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1361`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid item sequence received as `%s` for case number `%s`. Please try again with valid data. + +The two `%s` values are the item sequence you sent and the case number. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- `Claim.item[].sequence` carries a number the payer does not accept for the case. +- The payer matches claim items to the preauthorisation by code and sequence. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1361`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Keep the sequence each item had in the approved preauthorisation. +2. Give every item its own sequence number. +3. Check that `careTeamSequence`, `diagnosisSequence`, `procedureSequence` and `informationSequence` point at entries in the claim. diff --git a/catalogue/nhcx/errors/payr-1362.md b/catalogue/nhcx/errors/payr-1362.md new file mode 100644 index 000000000..126dbd2f1 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1362.md @@ -0,0 +1,93 @@ +--- +id: nhcx.error.payr-1362 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1362: a discharge against medical advice needs the LM100 procedure' +summary: >- + The patient left against medical advice before or during surgery, and the claim + lacks the special procedure for that case. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1270 + - nhcx.error.payr-1324 + - nhcx.error.payr-1095 +--- + +# PAYR-1362: a discharge against medical advice needs the LM100 procedure + +## In plain words + +Sometimes a patient leaves before or during surgery against medical advice. For [PMJAY](../glossary/pmjay.md) claims, the claim must then carry the LM100 procedure, and your claim did not. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A PMJAY payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1362`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No procedure with code LM100 received with 'Requested' status for case number `%s`. Please try again with valid data. For PMJAY claims, if case comes under LAMA/DAMA scenario with beneficiary being discharged before surgery or during surgery, procedure with code LM100 is mandatory. Only this procedure code will be accepted for LAMA/DAMA case, and all other previous preauthorization approved items will get disqualified for the claim submission + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The discharge entry has code `LAMA` (Left Against Medical Advice) or `DAMA` (Discharged Against Medical Advice). +- The discharge stage is before surgery or during surgery. +- The claim has no procedure with code `LM100` and status `Requested`. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1362`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Add an item with procedure code `LM100` and status `Requested`. +2. Set its quantity to the number of days the patient was admitted. +3. Remove the other preauthorisation items. LM100 is the only procedure accepted, and only the actual stay is payable. +4. Keep the discharge entry: category `DIS`, code `LAMA` or `DAMA`, and the stage as its value. +5. If the patient left after surgery, LM100 does not apply. Record the stage as `After Surgery` and claim the surgical package. +6. Whether a procedure qualifies comes from the LAMA-DAMA claim condition in the insurance plan. +7. Do not send LM100 at preauthorisation. That returns [`PAYR-1270`](./payr-1270.md). diff --git a/catalogue/nhcx/errors/payr-1363.md b/catalogue/nhcx/errors/payr-1363.md new file mode 100644 index 000000000..0e4ca82ee --- /dev/null +++ b/catalogue/nhcx/errors/payr-1363.md @@ -0,0 +1,93 @@ +--- +id: nhcx.error.payr-1363 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1363: no biometric authentication and no consent questionnaire at discharge' +summary: >- + The claim carries neither proof that the patient was present at discharge nor + the consent questionnaire that replaces it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.biometric-authentication + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.claim-submit + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.biometric-face + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1364 + - nhcx.error.payr-1366 + - nhcx.error.payr-1256 + - nhcx.error.payr-1271 +--- + +# PAYR-1363: no biometric authentication and no consent questionnaire at discharge + +## In plain words + +A new claim needs proof that the patient was present at discharge. That proof is biometric authentication, or a response to the Authentication Consent Questionnaire. Your claim had neither. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1363`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Response for Authentication Consent Questionnaire is missing for case number `%s`. This must be sent if the biometric authentication for patient is not available during discharge. For new claim request, either biometric authentication for patient during discharge, or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. + +`%s` is the case number you sent. The case number is the reference number in `Claim.identifier`. On a claim, reuse the identifier of the approved preauthorisation. + +The payer returns this code when: + +- The claim carries no biometric authentication of the patient during discharge. +- The claim carries no Authentication Consent Questionnaire response either. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1363`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Authenticate the patient by [fingerprint or iris](../flows/biometric-fingerprint-iris.md) or [face](../flows/biometric-face.md) at discharge. Pass the user token as a header parameter on the claim submission. +2. If biometric authentication is not possible, send the Authentication Consent Questionnaire response. Take the questionnaire for the policy from the insurance plan. +3. Add the response as a QuestionnaireResponse in the bundle. Reference it from `Claim.supportingInfo` with category `INF`, as the [claim request bundle](../fhir/claim-request.md) shows. +4. A cyclic package cannot use the consent form. Biometric authentication is mandatory at its discharge. diff --git a/catalogue/nhcx/errors/payr-1364.md b/catalogue/nhcx/errors/payr-1364.md new file mode 100644 index 000000000..3662fadeb --- /dev/null +++ b/catalogue/nhcx/errors/payr-1364.md @@ -0,0 +1,89 @@ +--- +id: nhcx.error.payr-1364 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1364: a consent questionnaire answer is empty' +summary: >- + The consent questionnaire response in the claim leaves one of its questions unanswered. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.biometric-authentication + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.claim-submit + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.biometric-face + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1363 + - nhcx.error.payr-1271 +--- + +# PAYR-1364: a consent questionnaire answer is empty + +## In plain words + +Your claim carries an Authentication Consent Questionnaire response, but one question in it has no answer. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1364`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No value received for link id `%s` for Authentication Consent Questionnaire for claim request. This must be sent if the biometric authentication for patient is not available during discharge. For new claim request, either biometric authentication for patient during discharge, or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. + +`%s` is the link id of the unanswered question. + +The payer returns this code when: + +- The claim relies on the Authentication Consent Questionnaire instead of biometric authentication at discharge. +- The response gives no value for the question with the named link id. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1364`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Answer every question in the questionnaire. Give the item with the named link id a value. +2. Take the questions from the insurance plan for the policy, and refresh it when the policy changes. +3. Authenticate the patient by [fingerprint or iris](../flows/biometric-fingerprint-iris.md) or [face](../flows/biometric-face.md) at discharge. Pass the user token as a header parameter on the claim submission. diff --git a/catalogue/nhcx/errors/payr-1365.md b/catalogue/nhcx/errors/payr-1365.md new file mode 100644 index 000000000..159552d49 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1365.md @@ -0,0 +1,88 @@ +--- +id: nhcx.error.payr-1365 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1365: the standard treatment guideline response is missing' +summary: >- + A procedure in the claim needs its treatment guideline questionnaire answered, + and the claim does not include the answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.insurance-plan + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1254 + - nhcx.error.payr-1505 +--- + +# PAYR-1365: the standard treatment guideline response is missing + +## In plain words + +Some procedures come with a standard treatment guideline (STG) questionnaire. A procedure in your claim needs one, and the claim did not include the response. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1365`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Response for STG Questionnaire id `%s` is mandatory for procedure code `%s`. Hence the preauthorization request will not be processed as the questionnaire response is not received for procedure code. + +The two `%s` values are the STG questionnaire id and the procedure code. + +The payer returns this code when: + +- The procedure requires a response to the named STG questionnaire. +- The claim carries no response for that questionnaire. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1365`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Take the STG questionnaire for the procedure from the insurance plan. +2. Send the questionnaire URL from the insurance plan back in the questionnaire response. +3. Reference the response from `Claim.supportingInfo` with category `STG` and the value as a reference. diff --git a/catalogue/nhcx/errors/payr-1366.md b/catalogue/nhcx/errors/payr-1366.md new file mode 100644 index 000000000..a50304e70 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1366.md @@ -0,0 +1,90 @@ +--- +id: nhcx.error.payr-1366 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1366: the biometric user token is not valid' +summary: >- + The token from the patient's biometric authentication is not valid for this claim. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.biometric-authentication + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.claim-submit + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.biometric-face + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1272 + - nhcx.error.payr-1363 +--- + +# PAYR-1366: the biometric user token is not valid + +## In plain words + +Biometric authentication gives your system a user token for the patient. The token sent with your claim is not valid. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1366`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Invalid biometric user token received. Please try again with valid biometric details of the beneficiary. For any issues with biometric, please try with Authentication Consent Questionnaire for discharge, details for which has been received in insurance plan. + +The message has no placeholder. + +The payer returns this code when: + +- The user token has expired. It is valid for 30 minutes. +- The token does not belong to the beneficiary of the case. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1366`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Authenticate the patient again at discharge and send the new token with the claim. +2. Refresh the token automatically until the transaction cycle completes. If it expires, start a fresh biometric authentication. +3. For a cyclic procedure's claim, a still-valid refresh token from the last cycle is allowed. A new token is preferred. +4. If biometric authentication keeps failing, use the Authentication Consent Questionnaire for discharge instead. See [`PAYR-1363`](./payr-1363.md). diff --git a/catalogue/nhcx/errors/payr-1367.md b/catalogue/nhcx/errors/payr-1367.md new file mode 100644 index 000000000..fc8775a93 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1367.md @@ -0,0 +1,89 @@ +--- +id: nhcx.error.payr-1367 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1367: no biometric record for a cycle date' +summary: >- + The payer found no biometric authentication of the beneficiary for a date the + claim gives for a treatment cycle. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.biometric-authentication + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1368 + - nhcx.error.payr-1369 + - nhcx.error.payr-1370 +--- + +# PAYR-1367: no biometric record for a cycle date + +## In plain words + +A cyclic procedure, such as dialysis, is given in repeated cycles. Each cycle needs its own biometric authentication, and the payer found none for one of your dates. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1367`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> No biometric records found for the beneficiary for `%s`. Please ensure correctness of biometric authentication date for the day for cyclic procedure `%s`. + +The two `%s` values are the date and the cyclic procedure code. + +The payer returns this code when: + +- No biometric authentication of the beneficiary exists for the named date. +- The cycle date in the claim does not match the date of the biometric capture. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1367`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Capture a live biometric authentication at every cycle, with process type `Discharge`. A refresh token is not allowed for a cycle. +2. Set each cycle's `timingPeriod` start and end to its biometric capture times. +3. Claim only the cycles that have a biometric capture. Payment covers only those. diff --git a/catalogue/nhcx/errors/payr-1368.md b/catalogue/nhcx/errors/payr-1368.md new file mode 100644 index 000000000..ebb4d7060 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1368.md @@ -0,0 +1,89 @@ +--- +id: nhcx.error.payr-1368 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1368: cycle information is missing for some cycles' +summary: >- + The claim for a cyclic procedure does not carry information for every cycle it + requests. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.biometric-authentication + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1367 + - nhcx.error.payr-1349 + - nhcx.error.payr-1370 +--- + +# PAYR-1368: cycle information is missing for some cycles + +## In plain words + +A cyclic procedure is claimed once, after the last cycle. The claim must describe every cycle, and yours describes fewer than it requests. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1368`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> `%s` units of cycle information received for procedure code `%s` with item sequence `%s`. Cycle information should be sent for all the requested/processed cycles. + +The three `%s` values are, in order, the number of cycle entries received, the procedure code and the item sequence. + +The payer returns this code when: + +- The number of cycle entries differs from the cycles requested or processed on the item. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1368`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Send one `Claim.supportingInfo` entry per cycle, with category `CD` and code `TD`. +2. Give each entry a `timingPeriod` start and end that match that cycle's biometric capture. +3. List every cycle entry's sequence in the item's `informationSequence`. +4. Set the item quantity to the cycles actually given. diff --git a/catalogue/nhcx/errors/payr-1369.md b/catalogue/nhcx/errors/payr-1369.md new file mode 100644 index 000000000..49167d816 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1369.md @@ -0,0 +1,88 @@ +--- +id: nhcx.error.payr-1369 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1369: two biometric authentications on one date for a cyclic procedure' +summary: >- + The claim gives more than one biometric authentication on the same date for a + cyclic procedure. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.biometric-authentication + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1367 + - nhcx.error.payr-1368 +--- + +# PAYR-1369: two biometric authentications on one date for a cyclic procedure + +## In plain words + +A cyclic procedure allows one cycle per day. Your claim gives two or more biometric authentications on the same date for one procedure. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1369`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Biometric authentication cannot be performed more than once on the same date. Multiple biometric authentication information has been provided for same date for cyclic procedure `%s`. Hence case will not be processed. Please check and update biometric authentication execution dates and try again. + +`%s` is the cyclic procedure code. + +The payer returns this code when: + +- Two or more cycle entries for the procedure carry biometric authentication on the same date. +- Two cycles of one procedure cannot be taken within 24 hours. The window runs from capture to capture, not by calendar date. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1369`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Correct the biometric authentication dates for each cycle, using your capture records. +2. Space cycles at least 24 hours apart from capture to capture. That also keeps them on different dates. +3. Disable biometric capture for the procedure for 24 hours after each capture in your system. diff --git a/catalogue/nhcx/errors/payr-1370.md b/catalogue/nhcx/errors/payr-1370.md new file mode 100644 index 000000000..85451779b --- /dev/null +++ b/catalogue/nhcx/errors/payr-1370.md @@ -0,0 +1,88 @@ +--- +id: nhcx.error.payr-1370 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1370: a supporting detail has an invalid start date' +summary: >- + An entry in the claim's supporting information carries a start date the payer + does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Claim Error Codes. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.claim-cycle + - nhcx.concept.biometric-authentication + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1367 + - nhcx.error.payr-1368 + - nhcx.error.payr-1369 +--- + +# PAYR-1370: a supporting detail has an invalid start date + +## In plain words + +One entry in your claim's supporting information has a start date the payer does not accept. + +Codes from `PAYR-1301` to `PAYR-1370` are [reference payer codes](../concepts/error-code-spaces.md). A [PMJAY](../glossary/pmjay.md) payer sends them when it checks a claim against the approved preauthorisation. + +## Before you start + +- You submitted a claim with [`POST /v1/claim/submit`](../endpoints/claim-submit.md). You followed [submit a claim after discharge](../flows/claim-submit.md). +- [NHCX](../../shared/glossary/nhcx.md) answered your request with `202 Accepted`. +- The payer's response reached your registered endpoint as [`/v1/claim/on_submit`](../callbacks/claim-on-submit.md). +- You decrypted its [JWE](../glossary/jwe.md) payload with your private key and found `PAYR-1370`. + +The payer sends this code inside its sealed response on `/v1/claim/on_submit`. Clinical, patient and business errors are not shared with NHCX. The payer embeds them in the encrypted ClaimResponse. + +## What happens + +The message you receive reads: + +> Received invalid start date as `%s` for supporting details with item sequence `%s`. Please try again with valid start date. + +The two `%s` values are the start date you sent and the sequence of the supporting information entry. + +The payer returns this code when: + +- `timingPeriod.start` on the named `Claim.supportingInfo` entry is not a valid date-time. +- For a cyclic procedure, the payer checks each cycle's period against the actual biometric capture time. + +## How you know it worked + +Resend the corrected request as a fresh request, with a new `x-hcx-correlation_id` and a new `x-hcx-api_call_id`. After an error the old correlation id is inactive, and reusing it returns [`NHCX-1006`](./nhcx-1006.md). + +The claim step is complete when you observe all four: + +1. NHCX answers your request with `202 Accepted`. +2. The payer's sealed response arrives on `/v1/claim/on_submit` with the `x-hcx-correlation_id` you sent. +3. The decrypted ClaimResponse carries an adjudication decision: an `outcome` and an adjudication reason code such as `approved` or `queried`. +4. The response carries no `PAYR-1370`. + +If `outcome` is `partial`, the claim is still open. Keep listening for further responses on the same correlation id. + +## When it goes wrong + +Work through these fixes in order: + +1. Send `timingPeriod.start` as a full date-time with offset, for example `2026-08-05T13:01:33+05:30`. +2. For each cycle of a cyclic procedure, set the start and end to the biometric capture times for that cycle. +3. Keep the entry's `sequence` and the item's `informationSequence` pointing at each other. diff --git a/catalogue/nhcx/errors/payr-1401.md b/catalogue/nhcx/errors/payr-1401.md new file mode 100644 index 000000000..9563fee30 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1401.md @@ -0,0 +1,80 @@ +--- +id: nhcx.error.payr-1401 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1401: the policy is not allowed for your hospital' +summary: >- + The payer will not give your hospital the plan for this policy, and only the technical + support team can change that. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Insurance Plan Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.insuranceplan-request + callbacks: + - nhcx.callback.insuranceplan-on-request + fhir: + - nhcx.fhir.insurance-plan-bundle + errors: + - nhcx.error.nhcx-1006 +--- + +# PAYR-1401: the policy is not allowed for your hospital + +## In plain words + +You asked a [payer](../glossary/payer.md), through [NHCX](../../shared/glossary/nhcx.md), for the [insurance plan](../glossary/insurance-plan.md) of a policy. The policy is not applicable to your hospital, so the payer returns no plan. + +Your system cannot fix this by changing the request. The technical support team has to act. + +## Before you start + +- Your system sent `POST /v1/insuranceplan/request` through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. See [POST /v1/insuranceplan/request](../endpoints/insuranceplan-request.md). +- Your system receives `/v1/insuranceplan/on_request`. See [Receiving POST /v1/insuranceplan/on_request](../callbacks/insuranceplan-on-request.md). + +The payer's answer arrived on `/v1/insuranceplan/on_request` in place of an insurance plan. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +`PAYR-14xx` codes come from the [PMJAY](../glossary/pmjay.md) payer, not from the exchange. [Error code spaces](../concepts/error-code-spaces.md) explains the difference. + +## What happens + +The payer returns `PAYR-1401` when the policy in your request is not applicable to the hospital that sent it. + +The payer reads the policy from the `policyNumber` input of your `Task`. It knows your hospital from your [participant code](../glossary/participant-code.md) and your [HFR](../../shared/glossary/hfr.md) id. Each hospital receives a plan for the specialities and treatments it is authorised for. + +The message names the policy it refused: + +```text + policy not allowed for the hospital. Please reach out to technical support team. +``` + +`` is replaced by the policy code from your request. + +## How you know it worked + +You send a new `POST /v1/insuranceplan/request` with a new `x-hcx-correlation_id`, and receive `202 Accepted`. + +Then `/v1/insuranceplan/on_request` delivers an encrypted payload, and `PAYR-1401` does not come back. After you decrypt it, the payload is a `Bundle` of type `collection`. It holds an `InsurancePlan`, an `Organization` and `Questionnaire` resources. + +## When it goes wrong + +1. Confirm that `` in the message is the policy you meant to request. +2. Contact the technical support team. Give them the full message, ``, your participant code, your HFR id and the `x-hcx-correlation_id` of the refused request. +3. After support resolves it, send a new request. + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1402.md b/catalogue/nhcx/errors/payr-1402.md new file mode 100644 index 000000000..5452b2252 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1402.md @@ -0,0 +1,92 @@ +--- +id: nhcx.error.payr-1402 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1402: the payer has no policy with the code you requested' +summary: >- + The payer could not find the policy code in your insurance plan request, so it + returned no plan. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Insurance Plan Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.insurance-plan-request + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.insuranceplan-request + callbacks: + - nhcx.callback.insuranceplan-on-request + fhir: + - nhcx.fhir.insurance-plan-bundle + errors: + - nhcx.error.nhcx-1006 +--- + +# PAYR-1402: the payer has no policy with the code you requested + +## In plain words + +You asked a [payer](../glossary/payer.md), through [NHCX](../../shared/glossary/nhcx.md), for the [insurance plan](../glossary/insurance-plan.md) of a policy. The payer found no policy with that code in its system. It stops processing the request. + +Check the policy code first. If it is correct, the technical support team has to act. + +## Before you start + +- Your system sent `POST /v1/insuranceplan/request` through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. See [POST /v1/insuranceplan/request](../endpoints/insuranceplan-request.md). +- Your system receives `/v1/insuranceplan/on_request`. See [Receiving POST /v1/insuranceplan/on_request](../callbacks/insuranceplan-on-request.md). + +The payer's answer arrived on `/v1/insuranceplan/on_request` in place of an insurance plan. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +`PAYR-14xx` codes come from the [PMJAY](../glossary/pmjay.md) payer, not from the exchange. [Error code spaces](../concepts/error-code-spaces.md) explains the difference. + +## What happens + +The payer returns `PAYR-1402` when the policy requested for the insurance plan does not exist in its system. + +The payer reads the policy from the `policyNumber` input of your `Task`: + +```json +"input": [ + { + "type": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code", "code": "policyNumber" } + ] + }, + "valueString": "" + } +] +``` + +The message names the policy it looked for: + +```text +Requested policy found not be associated with any payer for insurance plan request. Hence request will not be processed. +``` + +## How you know it worked + +You send a new `POST /v1/insuranceplan/request` with a new `x-hcx-correlation_id`, and receive `202 Accepted`. + +Then `/v1/insuranceplan/on_request` delivers an encrypted payload, and `PAYR-1402` does not come back. After you decrypt it, the payload is a `Bundle` of type `collection`. It holds an `InsurancePlan`, an `Organization` and `Questionnaire` resources. + +## When it goes wrong + +1. Compare `` in the message with the `policyNumber` value you sent. Look for a typing error, a space or a wrong segment. The sample policy codes are `PMJAY/HP/S/G` and `PMJAY/CH/S/G`. +2. Take the policy code from your coverage eligibility result, not from free text. See [Check coverage eligibility](../flows/coverage-eligibility-check.md). +3. If the code is correct, contact the technical support team. Give them the full message and the `x-hcx-correlation_id` of the refused request. + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1403.md b/catalogue/nhcx/errors/payr-1403.md new file mode 100644 index 000000000..eefdff16a --- /dev/null +++ b/catalogue/nhcx/errors/payr-1403.md @@ -0,0 +1,78 @@ +--- +id: nhcx.error.payr-1403 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1403: the renewal does not belong to the requested policy' +summary: >- + The payer knows the policy you asked about but not the renewal you named under + it, so it returned no plan. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Insurance Plan Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.insuranceplan-request + callbacks: + - nhcx.callback.insuranceplan-on-request + fhir: + - nhcx.fhir.insurance-plan-bundle + errors: + - nhcx.error.payr-1402 + - nhcx.error.nhcx-1006 +--- + +# PAYR-1403: the renewal does not belong to the requested policy + +## In plain words + +You asked a [payer](../glossary/payer.md), through [NHCX](../../shared/glossary/nhcx.md), for the [insurance plan](../glossary/insurance-plan.md) of a policy and a renewal of it. The payer found no such renewal under that policy. It stops processing the request. + +## Before you start + +- Your system sent `POST /v1/insuranceplan/request` through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. See [POST /v1/insuranceplan/request](../endpoints/insuranceplan-request.md). +- Your system receives `/v1/insuranceplan/on_request`. See [Receiving POST /v1/insuranceplan/on_request](../callbacks/insuranceplan-on-request.md). + +The payer's answer arrived on `/v1/insuranceplan/on_request` in place of an insurance plan. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +`PAYR-14xx` codes come from the [PMJAY](../glossary/pmjay.md) payer, not from the exchange. [Error code spaces](../concepts/error-code-spaces.md) explains the difference. + +## What happens + +The payer returns `PAYR-1403` when it cannot find the renewal from your request under the policy from your request. + +The message names both values it read: + +```text +Requested renewal found not be associated with requested policy for insurance plan request. Hence request will not be processed. +``` + +`` and `` are replaced by the values the payer read from your request. + +## How you know it worked + +You send a new `POST /v1/insuranceplan/request` with a new `x-hcx-correlation_id`, and receive `202 Accepted`. + +Then `/v1/insuranceplan/on_request` delivers an encrypted payload, and `PAYR-1403` does not come back. After you decrypt it, the payload is a `Bundle` of type `collection`. It holds an `InsurancePlan`, an `Organization` and `Questionnaire` resources. + +## When it goes wrong + +1. Compare `` and `` in the message with the values your system sent. Correct whichever is wrong. +2. If both are correct, contact the technical support team. Give them the full message and the `x-hcx-correlation_id` of the refused request. + +A policy code that the payer does not hold at all returns [PAYR-1402](payr-1402.md) instead. + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1404.md b/catalogue/nhcx/errors/payr-1404.md new file mode 100644 index 000000000..4d07d6856 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1404.md @@ -0,0 +1,80 @@ +--- +id: nhcx.error.payr-1404 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1404: no treatment is configured for the policy under any speciality' +summary: >- + The payer has the policy you asked about but no speciality or treatment set up + under it, so there is no plan to return. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Insurance Plan Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.insuranceplan-request + callbacks: + - nhcx.callback.insuranceplan-on-request + fhir: + - nhcx.fhir.insurance-plan-bundle + errors: + - nhcx.error.payr-1402 + - nhcx.error.nhcx-1006 +--- + +# PAYR-1404: no treatment is configured for the policy under any speciality + +## In plain words + +You asked a [payer](../glossary/payer.md), through [NHCX](../../shared/glossary/nhcx.md), for the [insurance plan](../glossary/insurance-plan.md) of a policy. The payer has no speciality configured for that policy. With no speciality there is no treatment to list, so it returns no plan. + +The configuration lives on the payer's side. Check your policy code, then contact the technical support team. + +## Before you start + +- Your system sent `POST /v1/insuranceplan/request` through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. See [POST /v1/insuranceplan/request](../endpoints/insuranceplan-request.md). +- Your system receives `/v1/insuranceplan/on_request`. See [Receiving POST /v1/insuranceplan/on_request](../callbacks/insuranceplan-on-request.md). + +The payer's answer arrived on `/v1/insuranceplan/on_request` in place of an insurance plan. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +`PAYR-14xx` codes come from the [PMJAY](../glossary/pmjay.md) payer, not from the exchange. [Error code spaces](../concepts/error-code-spaces.md) explains the difference. + +## What happens + +The payer returns `PAYR-1404` when no speciality is configured for the policy in your request. + +In an insurance plan, each speciality is the category of a specific cost. Each treatment package sits under a speciality as a benefit. + +```text +No treatment provided for policy under any speciality. Please reach out to technical support team. +``` + +`` is replaced by the policy code from your request. + +## How you know it worked + +You send a new `POST /v1/insuranceplan/request` with a new `x-hcx-correlation_id`, and receive `202 Accepted`. + +Then `/v1/insuranceplan/on_request` delivers an encrypted payload, and `PAYR-1404` does not come back. After you decrypt it, the payload is a `Bundle` of type `collection`. It holds an `InsurancePlan`, an `Organization` and `Questionnaire` resources. + +The `InsurancePlan` lists at least one speciality, with treatment packages under it. + +## When it goes wrong + +1. Compare `` in the message with the `policyNumber` value you sent. Correct it if it is not the policy you meant. +2. If the policy code is correct, contact the technical support team. The payer has to configure a speciality for the policy. Give them the full message and the `x-hcx-correlation_id`. + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1405.md b/catalogue/nhcx/errors/payr-1405.md new file mode 100644 index 000000000..e18c74a44 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1405.md @@ -0,0 +1,82 @@ +--- +id: nhcx.error.payr-1405 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1405: the payer has no enrolled hospital for your HFR id or sender + code' +summary: >- + The payer could not find your hospital in its records from the facility registry + id or sender code you sent, so it returned no plan. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Insurance Plan Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.insurance-plan + - nhcx.concept.participant-code + flows: + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.insuranceplan-request + callbacks: + - nhcx.callback.insuranceplan-on-request + fhir: + - nhcx.fhir.insurance-plan-bundle + errors: + - nhcx.error.nhcx-1006 +--- + +# PAYR-1405: the payer has no enrolled hospital for your HFR id or sender code + +## In plain words + +You asked a [payer](../glossary/payer.md), through [NHCX](../../shared/glossary/nhcx.md), for an [insurance plan](../glossary/insurance-plan.md). The payer looked your hospital up and found no enrolled hospital. It checked your [HFR](../../shared/glossary/hfr.md) id and your sender code. With no hospital record, it cannot build a plan for you. + +## Before you start + +- Your system sent `POST /v1/insuranceplan/request` through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. See [POST /v1/insuranceplan/request](../endpoints/insuranceplan-request.md). +- Your system receives `/v1/insuranceplan/on_request`. See [Receiving POST /v1/insuranceplan/on_request](../callbacks/insuranceplan-on-request.md). + +The payer's answer arrived on `/v1/insuranceplan/on_request` in place of an insurance plan. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +`PAYR-14xx` codes come from the [PMJAY](../glossary/pmjay.md) payer, not from the exchange. [Error code spaces](../concepts/error-code-spaces.md) explains the difference. + +## What happens + +The payer returns `PAYR-1405` when it finds no data for your hospital in its system. + +It looks the hospital up by two values: + +| Value in the message | Where it comes from | +|---|---| +| `` | The `providerId` input of your `Task`, which carries your HFR id | +| `` | `x-hcx-sender_code` in your [protected header](../glossary/protected-header.md), which is your [participant code](../glossary/participant-code.md) | + +```text +No enrolled hospital found for HFR id or sender id . Please reach out to technical support team. +``` + +## How you know it worked + +You send a new `POST /v1/insuranceplan/request` with a new `x-hcx-correlation_id`, and receive `202 Accepted`. + +Then `/v1/insuranceplan/on_request` delivers an encrypted payload, and `PAYR-1405` does not come back. After you decrypt it, the payload is a `Bundle` of type `collection`. It holds an `InsurancePlan`, an `Organization` and `Questionnaire` resources. + +## When it goes wrong + +1. Compare `` in the message with your facility's HFR id. Correct the `providerId` value if it differs. +2. Send the HFR id that matches the registry id recorded for your participant in NHCX. +3. Check that `` is your own participant code. +4. If both values are correct, contact the technical support team. Your hospital's enrolment with the payer has to be checked. Give them the full message and the `x-hcx-correlation_id`. + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1406.md b/catalogue/nhcx/errors/payr-1406.md new file mode 100644 index 000000000..c8eb86552 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1406.md @@ -0,0 +1,85 @@ +--- +id: nhcx.error.payr-1406 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1406: an earlier insurance plan request for the same policy is still + running' +summary: >- + The payer is still working on an earlier plan request from your hospital for the + same policy, so wait before asking again. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Insurance Plan Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.insurance-plan + - nhcx.concept.message-identifiers + flows: + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.insuranceplan-request + callbacks: + - nhcx.callback.insuranceplan-on-request + fhir: + - nhcx.fhir.insurance-plan-bundle + errors: + - nhcx.error.nhcx-1006 +--- + +# PAYR-1406: an earlier insurance plan request for the same policy is still running + +## In plain words + +Your hospital asked a [payer](../glossary/payer.md), through [NHCX](../../shared/glossary/nhcx.md), for the [insurance plan](../glossary/insurance-plan.md) of a policy. An earlier request from your hospital for the same policy is still in progress. The payer refuses the new one until the earlier one finishes. + +The fix is to wait, not to change the request. + +## Before you start + +- Your system sent `POST /v1/insuranceplan/request` through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. See [POST /v1/insuranceplan/request](../endpoints/insuranceplan-request.md). +- Your system receives `/v1/insuranceplan/on_request`. See [Receiving POST /v1/insuranceplan/on_request](../callbacks/insuranceplan-on-request.md). + +The payer's answer arrived on `/v1/insuranceplan/on_request` in place of an insurance plan. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +`PAYR-14xx` codes come from the [PMJAY](../glossary/pmjay.md) payer, not from the exchange. [Error code spaces](../concepts/error-code-spaces.md) explains the difference. + +## What happens + +The payer returns `PAYR-1406` when both of these hold: + +- a new insurance plan request arrives from your hospital for a policy; and +- the payer is still executing an earlier request from your hospital for the same policy. + +The message names the earlier request by its [correlation id](../glossary/correlation-id.md): + +```text +Existing request with correlation id %s is in progress with the payer. Hence this request will not be accepted until the execution for previous request is complete. Please wait for 15 - 60 minutes to allow the execution of previous requests. For further assistance, please reach out to technical support team. +``` + +`%s` is replaced by the correlation id of the earlier request. + +## How you know it worked + +The answer to the earlier request arrives on `/v1/insuranceplan/on_request`. Match it to the earlier request by its protected header identifiers, as [Correlation id, API call id and workflow id](../concepts/message-identifiers.md) describes. It holds the insurance plan you need. + +If you send a new request after the wait, `/v1/insuranceplan/on_request` delivers an insurance plan bundle, and `PAYR-1406` does not come back. + +## When it goes wrong + +1. Do not send another request for the same policy. Each one is refused while the earlier one runs. +2. Wait 15 to 60 minutes. Watch `/v1/insuranceplan/on_request` for the answer to the earlier request. +3. If no answer arrives after 60 minutes, contact the technical support team. Give them the correlation id from the message. + +To avoid it, allow one insurance plan request at a time per hospital and policy. Store the plan you receive and reuse it. Refresh it weekly, and at once when a policy is renewed or amended. + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1501.md b/catalogue/nhcx/errors/payr-1501.md new file mode 100644 index 000000000..b249ee968 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1501.md @@ -0,0 +1,100 @@ +--- +id: nhcx.error.payr-1501 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1501: the surgery date entry carries the wrong kind of value' +summary: >- + The scheme payer rejected your preauthorisation or claim because the surgery date + entry holds a value that is not a date, a period or text. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + errors: + - nhcx.error.payr-1043 + - nhcx.error.payr-1044 + - nhcx.error.nhcx-1006 +--- + +# PAYR-1501: the surgery date entry carries the wrong kind of value + +## In plain words + +Your preauthorisation or claim lists the surgery date as a supporting information entry. The [PMJAY](../glossary/pmjay.md) payer found that entry holding the wrong kind of value. It reads the surgery date only from a timing, meaning a date or a period, or from a string. It refused the request. + +## Before you start + +- Your system sent a [preauthorisation](../glossary/preauthorisation.md) or a [claim](../glossary/claim.md) through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md) and [Submit a claim after discharge](../flows/claim-submit.md). +- Both bundles carry a `Claim` resource. `Claim.use` is `preauthorization` for a preauthorisation and `claim` for a claim. + +The [PMJAY](../glossary/pmjay.md) payer checked the `Claim` resource and refused it. Its answer arrived on the callback for your request: `/v1/preauth/on_submit` or `/v1/claim/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +The payer reads the surgery date from the `Claim.supportingInfo` entry with category `ONS` and code `PSP`. It returns `PAYR-1501` when that entry's value is neither a timing nor a string. + +```text +Value type received as %s for category - ONS and code - PSP for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - ONS and code - PSP combination is used to get the surgery date. So the surgery date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - PSP. +``` + +The first `%s` is the value type you sent. The second is the entry's `sequence`. + +## How you know it worked + +You send the corrected bundle as a new request and receive `202 Accepted`. + +The answer on `/v1/preauth/on_submit` or `/v1/claim/on_submit` is an encrypted payload, and `PAYR-1501` does not come back. After you decrypt it, the payload is a `ClaimResponse` bundle carrying the payer's decision on the case. + +## When it goes wrong + +1. Find the `supportingInfo` entry whose `sequence` matches the message. +2. Send the surgery date in that entry as a string in the [NRCeS](../../shared/glossary/nrces.md) date-time format. Keep category `ONS` and code `PSP`. +3. Replace the value. Do not send an attachment or a reference in this entry. + +```json +{ + "sequence": 3, + "category": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", "code": "ONS" } + ] + }, + "code": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code", "code": "PSP" } + ] + }, + "valueString": "" +} +``` + +A date-time in this format looks like `2026-03-10T21:21:17+05:30`. A string in the wrong date format is refused with [PAYR-1043](payr-1043.md) or [PAYR-1044](payr-1044.md). + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1502.md b/catalogue/nhcx/errors/payr-1502.md new file mode 100644 index 000000000..0a7b2e087 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1502.md @@ -0,0 +1,107 @@ +--- +id: nhcx.error.payr-1502 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1502: the admission date entry carries the wrong kind of value' +summary: >- + The scheme payer rejected your preauthorisation or claim because the admission + date entry holds a value that is not a date, a period or text. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + errors: + - nhcx.error.payr-1043 + - nhcx.error.payr-1044 + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1243 + - nhcx.error.payr-1244 + - nhcx.error.payr-1325 + - nhcx.error.payr-1327 + - nhcx.error.payr-1357 +--- + +# PAYR-1502: the admission date entry carries the wrong kind of value + +## In plain words + +Your preauthorisation or claim lists the admission date as a supporting information entry. The [PMJAY](../glossary/pmjay.md) payer found that entry holding the wrong kind of value. It reads the admission date only from a timing, meaning a date or a period, or from a string. It refused the request. + +## Before you start + +- Your system sent a [preauthorisation](../glossary/preauthorisation.md) or a [claim](../glossary/claim.md) through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md) and [Submit a claim after discharge](../flows/claim-submit.md). +- Both bundles carry a `Claim` resource. `Claim.use` is `preauthorization` for a preauthorisation and `claim` for a claim. + +The [PMJAY](../glossary/pmjay.md) payer checked the `Claim` resource and refused it. Its answer arrived on the callback for your request: `/v1/preauth/on_submit` or `/v1/claim/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +The payer reads the admission date from the `Claim.supportingInfo` entry with category `ONS` and code `ADDD`. It returns `PAYR-1502` when that entry's value is neither a timing nor a string. + +```text +Value type received as %s for category - ONS and code - ADDD for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - ONS and code - ADDD combination is used to get the admission date. So the admission date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - ADDD. +``` + +The first `%s` is the value type you sent. The second is the entry's `sequence`. + +## How you know it worked + +You send the corrected bundle as a new request and receive `202 Accepted`. + +The answer on `/v1/preauth/on_submit` or `/v1/claim/on_submit` is an encrypted payload, and `PAYR-1502` does not come back. After you decrypt it, the payload is a `ClaimResponse` bundle carrying the payer's decision on the case. + +## When it goes wrong + +1. Find the `supportingInfo` entry whose `sequence` matches the message. +2. Send the admission date in that entry as a string in the [NRCeS](../../shared/glossary/nrces.md) date-time format. Keep category `ONS` and code `ADDD`. +3. Replace the value. Do not send an attachment or a reference in this entry. + +```json +{ + "sequence": 3, + "category": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", "code": "ONS" } + ] + }, + "code": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code", "code": "ADDD" } + ] + }, + "valueString": "" +} +``` + +A date-time in this format looks like `2026-03-10T21:21:17+05:30`. A string in the wrong date format is refused with [PAYR-1043](payr-1043.md) or [PAYR-1044](payr-1044.md). + +The admission date is mandatory on a preauthorisation and on a claim. A missing or unusable admission date on a preauthorisation returns [PAYR-1243](payr-1243.md) or [PAYR-1244](payr-1244.md). On a claim it returns [PAYR-1325](payr-1325.md) or [PAYR-1327](payr-1327.md). + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1503.md b/catalogue/nhcx/errors/payr-1503.md new file mode 100644 index 000000000..f813b2d43 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1503.md @@ -0,0 +1,103 @@ +--- +id: nhcx.error.payr-1503 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1503: the death date entry carries the wrong kind of value' +summary: >- + The scheme payer rejected your claim because the death date entry holds a value + that is not a date, a period or text. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + errors: + - nhcx.error.payr-1043 + - nhcx.error.payr-1044 + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1095 + - nhcx.error.payr-1096 + - nhcx.error.payr-1514 +--- + +# PAYR-1503: the death date entry carries the wrong kind of value + +## In plain words + +Your claim lists the death date as a supporting information entry. The [PMJAY](../glossary/pmjay.md) payer found that entry holding the wrong kind of value. It reads the death date only from a timing, meaning a date or a period, or from a string. It refused the request. + +## Before you start + +- Your system sent a [claim](../glossary/claim.md) through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. See [Submit a claim after discharge](../flows/claim-submit.md). +- The claim bundle carries a `Claim` resource with `Claim.use` set to `claim`. + +The [PMJAY](../glossary/pmjay.md) payer checked the `Claim` resource and refused it. Its answer arrived on `/v1/claim/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +The payer reads the death date from the `Claim.supportingInfo` entry with category `ONS` and code `DTM`. It returns `PAYR-1503` when that entry's value is neither a timing nor a string. + +```text +Value type received as %s for category - ONS and code - DTM for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - ONS and code - DTM combination is used to get the death date. So the death date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - DTM. +``` + +The first `%s` is the value type you sent. The second is the entry's `sequence`. + +When the discharge type is death, the death date is mandatory on the claim. A claim with no death date for a death discharge returns [PAYR-1096](payr-1096.md) instead. + +## How you know it worked + +You send the corrected bundle as a new request and receive `202 Accepted`. + +The answer on `/v1/claim/on_submit` is an encrypted payload, and `PAYR-1503` does not come back. After you decrypt it, the payload is a `ClaimResponse` bundle carrying the payer's decision on the case. + +## When it goes wrong + +1. Find the `supportingInfo` entry whose `sequence` matches the message. +2. Send the death date in that entry as a string in the [NRCeS](../../shared/glossary/nrces.md) date-time format. Keep category `ONS` and code `DTM`. +3. Replace the value. Do not send an attachment or a reference in this entry. + +```json +{ + "sequence": 3, + "category": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", "code": "ONS" } + ] + }, + "code": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code", "code": "DTM" } + ] + }, + "valueString": "" +} +``` + +A date-time in this format looks like `2026-03-10T21:21:17+05:30`. A string in the wrong date format is refused with [PAYR-1043](payr-1043.md) or [PAYR-1044](payr-1044.md). + +The discharge information itself goes in a separate entry with category `DIS`. See [PAYR-1514](payr-1514.md). + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1504.md b/catalogue/nhcx/errors/payr-1504.md new file mode 100644 index 000000000..2a3059788 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1504.md @@ -0,0 +1,94 @@ +--- +id: nhcx.error.payr-1504 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1504: the case remarks in your query response are not text' +summary: >- + The scheme payer rejected your answer to its query because the overall case remarks + were not sent as text. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.queries-and-communication + flows: + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-query-response + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.query-update + errors: + - nhcx.error.nhcx-1006 +--- + +# PAYR-1504: the case remarks in your query response are not text + +## In plain words + +The payer queried your [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md), and your system answered. Your answer carries overall case remarks as a supporting information entry. The [PMJAY](../glossary/pmjay.md) payer reads those remarks only as a string. Your entry held another kind of value, so it refused the answer. + +## Before you start + +- The payer raised a query on a preauthorisation or a claim. See [Answer a payer query on a preauthorisation](../flows/preauth-query-response.md) and [Answer a payer query on a claim](../flows/claim-query-response.md). +- Your system sent its query response through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. + +The payer's answer to your query response carries this code in `x-hcx-error_details.code`. The full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +The payer reads the case remarks from the `Claim.supportingInfo` entry with category `NMI` and code `CQD`. It returns `PAYR-1504` when that entry's value is not a string. + +```text +Value type received as %s for category - NMI and code - CQD for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - NMI and code - CQD combination is used to get the overall case remarks for query response. So the case remarks for query response should be sent as a string value, adhering to the NRCES standards, with the category - NMI and code - CQD. +``` + +The first `%s` is the value type you sent. The second is the entry's `sequence`. + +## How you know it worked + +You send the corrected query response as a new request and receive `202 Accepted`. + +The payer's answer is an encrypted payload, and `PAYR-1504` does not come back. After you decrypt it, the payload is a `ClaimResponse` bundle carrying the payer's decision on the case. + +## When it goes wrong + +1. Find the `supportingInfo` entry whose `sequence` matches the message. +2. Put the remarks in that entry as a string, with category `NMI` and code `CQD`. +3. Replace any attachment or reference in this entry with the text itself. + +```json +{ + "sequence": 6, + "category": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", "code": "NMI" } + ] + }, + "code": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code", "code": "CQD" } + ] + }, + "valueString": "" +} +``` + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1505.md b/catalogue/nhcx/errors/payr-1505.md new file mode 100644 index 000000000..c11997967 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1505.md @@ -0,0 +1,108 @@ +--- +id: nhcx.error.payr-1505 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1505: a questionnaire response is attached under the wrong category + or code' +summary: >- + The scheme payer rejected your preauthorisation or claim because a questionnaire + answer is attached under a category and code it does not accept. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + errors: + - nhcx.error.payr-1254 + - nhcx.error.payr-1365 + - nhcx.error.payr-1084 + - nhcx.error.nhcx-1006 +--- + +# PAYR-1505: a questionnaire response is attached under the wrong category or code + +## In plain words + +Your [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) attaches a questionnaire response through a supporting information entry. The entry points at a `QuestionnaireResponse` resource in your bundle. The [PMJAY](../glossary/pmjay.md) payer accepts that link only under two category and code pairs. Yours used another pair, so it refused the request. + +## Before you start + +- Your system sent a [preauthorisation](../glossary/preauthorisation.md) or a [claim](../glossary/claim.md) through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md) and [Submit a claim after discharge](../flows/claim-submit.md). +- Both bundles carry a `Claim` resource. `Claim.use` is `preauthorization` for a preauthorisation and `claim` for a claim. + +The [PMJAY](../glossary/pmjay.md) payer checked the `Claim` resource and refused it. Its answer arrived on the callback for your request: `/v1/preauth/on_submit` or `/v1/claim/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +The payer returns `PAYR-1505` when a `Claim.supportingInfo` entry references a `QuestionnaireResponse` under any category and code other than these: + +| You are attaching | Category | Code | Value | +|---|---|---|---| +| A policy or case level questionnaire response | `INF` | `ODN` | A reference to a `QuestionnaireResponse` in the bundle | +| A response to a standard treatment guideline questionnaire | `STG` | Not specified | A reference to a `QuestionnaireResponse` in the bundle | + +```text +Category received as %s and code received as %s for item with sequence %s in supporting info in claim resource, where the reference value redirects to Questionnaire Response resource in the FHIR bundle. To include a policy/case level Questionnaire Response, in supporting info list there should be an entry with category - INF and code - ODN , and the value as reference. This reference value should refer to a resource of Questionnaire Response in the FHIR bundle. To include response for any STG questionnaire, in supporting info list there should be an entry with category - STG, and the value as reference +``` + +The three `%s` values are the category, the code and the entry's `sequence`. The questionnaires come from the insurance plan for the policy. See [The insurance plan](../concepts/insurance-plan.md). + +## How you know it worked + +You send the corrected bundle as a new request and receive `202 Accepted`. + +The answer on `/v1/preauth/on_submit` or `/v1/claim/on_submit` is an encrypted payload, and `PAYR-1505` does not come back. After you decrypt it, the payload is a `ClaimResponse` bundle carrying the payer's decision on the case. + +## When it goes wrong + +1. Find the `supportingInfo` entry whose `sequence` matches the message. +2. Set its category and code to the pair for what it attaches, as in the table. +3. Point its `valueReference` at a `QuestionnaireResponse` resource included in the same bundle. + +```json +{ + "sequence": 8, + "category": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", "code": "INF" } + ] + }, + "code": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code", "code": "ODN" } + ] + }, + "valueReference": { "reference": "" } +} +``` + +A reference with no matching resource in the bundle returns [PAYR-1084](payr-1084.md). A procedure that needs a standard treatment guideline response and has none returns [PAYR-1254](payr-1254.md) on a preauthorisation, or [PAYR-1365](payr-1365.md) on a claim. + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1506.md b/catalogue/nhcx/errors/payr-1506.md new file mode 100644 index 000000000..e9d1b7888 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1506.md @@ -0,0 +1,99 @@ +--- +id: nhcx.error.payr-1506 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1506: the newborn''s gender is not valid' +summary: >- + The scheme payer rejected your newborn case because the child's record has no + valid gender. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + errors: + - nhcx.error.payr-1262 + - nhcx.error.payr-1507 + - nhcx.error.payr-1508 + - nhcx.error.payr-1509 + - nhcx.error.nhcx-1006 +--- + +# PAYR-1506: the newborn's gender is not valid + +## In plain words + +Your [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) is for a newborn under [PMJAY](../glossary/pmjay.md). The newborn has no scheme membership of its own yet. The parent is the main patient, and the child is a separate, linked patient. + +The PMJAY payer requires a valid gender on the child's record. Yours was not a valid value, so it refused the request. + +## Before you start + +- Your system sent a [preauthorisation](../glossary/preauthorisation.md) or a [claim](../glossary/claim.md) through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md) and [Submit a claim after discharge](../flows/claim-submit.md). +- Both bundles carry a `Claim` resource. `Claim.use` is `preauthorization` for a preauthorisation and `claim` for a claim. + +The [PMJAY](../glossary/pmjay.md) payer checked the `Claim` resource and refused it. Its answer arrived on the callback for your request: `/v1/preauth/on_submit` or `/v1/claim/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +Your bundle carries a newborn: the parent's `Patient` resource links to a child `Patient` resource. + +## What happens + +The payer checks the child `Patient` resource that the parent's `link` points to. It returns `PAYR-1506` when that resource has no valid gender. Gender is mandatory for a PMJAY newborn case. + +Valid values are the administrative gender codes at https://hl7.org/fhir/R4/valueset-administrative-gender.html. + +```text +Invalid gender received for new born patient. Please try agian with valid gender data as it is mandatory for PMJAY in new born case. Please refer to the valid gender values at https://hl7.org/fhir/R4/valueset-administrative-gender.html +``` + +The newborn construct applies when the baby has no member id yet and is 6 years old or younger. + +## How you know it worked + +You send the corrected bundle as a new request and receive `202 Accepted`. + +The answer on `/v1/preauth/on_submit` or `/v1/claim/on_submit` is an encrypted payload, and `PAYR-1506` does not come back. After you decrypt it, the payload is a `ClaimResponse` bundle carrying the payer's decision on the case. + +## When it goes wrong + +1. Find the child `Patient` resource that the parent's `link` points to. +2. Set `gender` to a code from the value set above. + +```json +{ + "resourceType": "Patient", + "gender": "", + "birthDate": "" +} +``` + +The child's record also needs a date of birth and a proof of birth document. See [PAYR-1507](payr-1507.md) and [PAYR-1509](payr-1509.md). A preauthorisation with no gender for the newborn returns [PAYR-1262](payr-1262.md). + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1507.md b/catalogue/nhcx/errors/payr-1507.md new file mode 100644 index 000000000..3ee0aaf23 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1507.md @@ -0,0 +1,93 @@ +--- +id: nhcx.error.payr-1507 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1507: the newborn''s date of birth is not valid' +summary: >- + The scheme payer rejected your newborn case because the child's record has no + valid date of birth. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + errors: + - nhcx.error.payr-1259 + - nhcx.error.payr-1260 + - nhcx.error.payr-1269 + - nhcx.error.payr-1506 + - nhcx.error.payr-1509 + - nhcx.error.nhcx-1006 +--- + +# PAYR-1507: the newborn's date of birth is not valid + +## In plain words + +Your [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) is for a newborn under [PMJAY](../glossary/pmjay.md). The newborn has no scheme membership of its own yet. The parent is the main patient, and the child is a separate, linked patient. + +The PMJAY payer requires a valid date of birth on the child's record. Yours was not valid, so it refused the request. + +## Before you start + +- Your system sent a [preauthorisation](../glossary/preauthorisation.md) or a [claim](../glossary/claim.md) through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md) and [Submit a claim after discharge](../flows/claim-submit.md). +- Both bundles carry a `Claim` resource. `Claim.use` is `preauthorization` for a preauthorisation and `claim` for a claim. + +The [PMJAY](../glossary/pmjay.md) payer checked the `Claim` resource and refused it. Its answer arrived on the callback for your request: `/v1/preauth/on_submit` or `/v1/claim/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +Your bundle carries a newborn: the parent's `Patient` resource links to a child `Patient` resource. + +## What happens + +The payer checks the child `Patient` resource that the parent's `link` points to. It returns `PAYR-1507` when that resource has no valid date of birth. The date of birth is mandatory for a PMJAY newborn case. + +```text +Invalid date of birth received for new born patient. Please try agian with valid date of birth as it is mandatory for PMJAY in new born case. +``` + +The newborn construct applies when the baby has no member id yet and is 6 years old or younger. + +## How you know it worked + +You send the corrected bundle as a new request and receive `202 Accepted`. + +The answer on `/v1/preauth/on_submit` or `/v1/claim/on_submit` is an encrypted payload, and `PAYR-1507` does not come back. After you decrypt it, the payload is a `ClaimResponse` bundle carrying the payer's decision on the case. + +## When it goes wrong + +1. Find the child `Patient` resource that the parent's `link` points to. +2. Set `birthDate` to the child's date of birth, in the form `YYYY-MM-DD`. +3. Check the date is not in the future and is within 6 years of the current date. + +A preauthorisation checks the same date in more detail. A missing date returns [PAYR-1259](payr-1259.md). A future date returns [PAYR-1260](payr-1260.md). A date more than 6 years back returns [PAYR-1269](payr-1269.md). + +The date of birth also needs a proof of birth document. See [PAYR-1509](payr-1509.md). + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1508.md b/catalogue/nhcx/errors/payr-1508.md new file mode 100644 index 000000000..35d7dfd5e --- /dev/null +++ b/catalogue/nhcx/errors/payr-1508.md @@ -0,0 +1,103 @@ +--- +id: nhcx.error.payr-1508 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1508: the newborn link does not lead to a Patient resource' +summary: >- + The scheme payer rejected your newborn case because the parent's link to the child + does not lead to a valid patient record. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + errors: + - nhcx.error.payr-1506 + - nhcx.error.payr-1507 + - nhcx.error.payr-1512 + - nhcx.error.nhcx-1006 +--- + +# PAYR-1508: the newborn link does not lead to a Patient resource + +## In plain words + +Your [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) is for a newborn under [PMJAY](../glossary/pmjay.md). The newborn has no scheme membership of its own yet. The parent is the main patient, and the child is a separate, linked patient. + +The PMJAY payer followed the parent's link to the child and did not find a valid `Patient` resource. The linked child record is mandatory for a newborn case, so it refused the request. + +## Before you start + +- Your system sent a [preauthorisation](../glossary/preauthorisation.md) or a [claim](../glossary/claim.md) through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md) and [Submit a claim after discharge](../flows/claim-submit.md). +- Both bundles carry a `Claim` resource. `Claim.use` is `preauthorization` for a preauthorisation and `claim` for a claim. + +The [PMJAY](../glossary/pmjay.md) payer checked the `Claim` resource and refused it. Its answer arrived on the callback for your request: `/v1/preauth/on_submit` or `/v1/claim/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +Your bundle carries a newborn: the parent's `Patient` resource links to a child `Patient` resource. + +## What happens + +The parent's `Patient` resource carries a `link` entry of type `refer`. Its `other.reference` points to the child's `Patient` resource: + +```json +"link": [ + { + "other": { + "reference": "urn:uuid:", + "type": "Patient" + }, + "type": "refer" + } +] +``` + +The payer returns `PAYR-1508` when the resource at that reference is missing or is not a valid `Patient`. The `%s` in the message is the reference it followed. + +```text +Invalid resource received for new born patient for url %s. Please try agian with valid Patient resource for the link reference as linked Patient resource is mandatory for PMJAY in new born case +``` + +The newborn construct applies when the baby has no member id yet and is 6 years old or younger. + +## How you know it worked + +You send the corrected bundle as a new request and receive `202 Accepted`. + +The answer on `/v1/preauth/on_submit` or `/v1/claim/on_submit` is an encrypted payload, and `PAYR-1508` does not come back. After you decrypt it, the payload is a `ClaimResponse` bundle carrying the payer's decision on the case. + +## When it goes wrong + +1. Find the reference from the message in your bundle. +2. Make sure one bundle entry has that reference as its `fullUrl`, and that its resource is a `Patient`. +3. Put the child's details in that resource: gender, date of birth and name. + +A patient reference that fails outside the newborn link returns [PAYR-1512](payr-1512.md). + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1509.md b/catalogue/nhcx/errors/payr-1509.md new file mode 100644 index 000000000..9f6860d3d --- /dev/null +++ b/catalogue/nhcx/errors/payr-1509.md @@ -0,0 +1,112 @@ +--- +id: nhcx.error.payr-1509 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1509: the newborn''s proof of birth attachment is not valid' +summary: >- + The scheme payer rejected your newborn case because the proof of birth document + is missing or unusable. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + errors: + - nhcx.error.payr-1263 + - nhcx.error.payr-1507 + - nhcx.error.nhcx-1006 +--- + +# PAYR-1509: the newborn's proof of birth attachment is not valid + +## In plain words + +Your [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) is for a newborn under [PMJAY](../glossary/pmjay.md). The newborn has no scheme membership of its own yet. The parent is the main patient, and the child is a separate, linked patient. + +A document proving the child's date of birth is mandatory. The PMJAY payer found that attachment missing or invalid, so it refused the request. + +## Before you start + +- Your system sent a [preauthorisation](../glossary/preauthorisation.md) or a [claim](../glossary/claim.md) through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. See [Submit a preauthorisation](../flows/preauth-submit.md) and [Submit a claim after discharge](../flows/claim-submit.md). +- Both bundles carry a `Claim` resource. `Claim.use` is `preauthorization` for a preauthorisation and `claim` for a claim. + +The [PMJAY](../glossary/pmjay.md) payer checked the `Claim` resource and refused it. Its answer arrived on the callback for your request: `/v1/preauth/on_submit` or `/v1/claim/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +Your bundle carries a newborn: the parent's `Patient` resource links to a child `Patient` resource. + +## What happens + +The payer returns `PAYR-1509` when the newborn case carries no valid attachment. + +The document is proof of date of birth. It is a supporting information entry with category `DOB`. Its code is `BCF` for a birth certificate, or `DCB` for a government hospital discharge card or slip. + +An attachment is valid when: + +- its data is a Base64 encoded string, as https://hl7.org/fhir/R4/datatypes.html#Attachment defines; +- it has a name that is not empty; and +- its content type is one of `application/pdf`, `application/jpg`, `application/jpeg`, `application/png` or `application/fhir+json`. + +```text +Invalid attachment received for new born patient. Please try agian with valid attachment as attachment is mandatory for PMJAY in new born case +``` + +The newborn construct applies when the baby has no member id yet and is 6 years old or younger. + +## How you know it worked + +You send the corrected bundle as a new request and receive `202 Accepted`. + +The answer on `/v1/preauth/on_submit` or `/v1/claim/on_submit` is an encrypted payload, and `PAYR-1509` does not come back. After you decrypt it, the payload is a `ClaimResponse` bundle carrying the payer's decision on the case. + +## When it goes wrong + +1. Add or correct the proof of birth entry. Use category `DOB` and code `BCF` or `DCB`. +2. Encode the document as Base64, give it a name and set an accepted content type. + +```json +{ + "sequence": 9, + "category": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", "code": "DOB" } + ] + }, + "code": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code", "code": "BCF" } + ] + }, + "valueAttachment": { "contentType": "application/pdf", "title": "", "data": "" } +} +``` + +A preauthorisation for a newborn with no documents returns [PAYR-1263](payr-1263.md). + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1510.md b/catalogue/nhcx/errors/payr-1510.md new file mode 100644 index 000000000..191666094 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1510.md @@ -0,0 +1,90 @@ +--- +id: nhcx.error.payr-1510 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1510: a parameter code in your request is not valid' +summary: >- + The scheme payer rejected your request because one of its parameter codes is not + a code it accepts. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + flows: + - nhcx.flow.insurance-plan-request + - nhcx.flow.claim-reprocess + - nhcx.flow.preauth-cancel + endpoints: + - nhcx.endpoint.insuranceplan-request + - nhcx.endpoint.task-submit + callbacks: + - nhcx.callback.insuranceplan-on-request + - nhcx.callback.task-on-submit + fhir: + - nhcx.fhir.task + - nhcx.fhir.insurance-plan-bundle + errors: + - nhcx.error.payr-1511 + - nhcx.error.payr-1518 + - nhcx.error.payr-1519 + - nhcx.error.nhcx-1006 +--- + +# PAYR-1510: a parameter code in your request is not valid + +## In plain words + +The [PMJAY](../glossary/pmjay.md) payer checked the parameters in your request and found a code it does not accept. The message does not say which parameter. Your system has to find it before it resends. + +## Before you start + +- Your system sent a request whose bundle holds a `Task` resource. That is an insurance plan request, or a task request such as a reprocess or a cancellation. See [Request a patient's insurance plan](../flows/insurance-plan-request.md) and [Ask the payer to reprocess a claim](../flows/claim-reprocess.md). +- [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. + +The [PMJAY](../glossary/pmjay.md) payer's answer arrived on the callback for that request: `/v1/insuranceplan/on_request` or `/v1/task/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +The payer returns `PAYR-1510` when a parameter code in your request is not a valid code. + +```text +Invalid parameter code received. Please check and try again with a valid parameter code +``` + +In a `Task` resource, the input parameters are the `Task.input` entries. [PAYR-1518](payr-1518.md) and [PAYR-1519](payr-1519.md) use the term the same way. Each entry has a type code and a value. The documented type codes use the system `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code`: + +| Request | Inputs the `Task` carries | +|---|---| +| Insurance plan request | `policyNumber`, `providerId`, or both. At least one is mandatory. | +| Task request on a claim | `claimNumber` | +| Task request on a preauthorisation | `initimationNumber`, spelled as shown | +| Answer to a communication request | An input of type `include`, whose value references the `Communication` resource | + +## How you know it worked + +You send the corrected request as a new request and receive `202 Accepted`. + +The answer on `/v1/insuranceplan/on_request` or `/v1/task/on_submit` is an encrypted payload, and `PAYR-1510` does not come back. For an insurance plan request, the decrypted payload is a `Bundle` of type `collection` holding an `InsurancePlan`. + +## When it goes wrong + +1. Compare every `Task.input` type code and system in your request with the table. +2. Check the other coded values in your bundle against the sample bundles and the [NRCeS](../../shared/glossary/nrces.md) code systems. +3. If you cannot find the parameter, contact the NHCX support team. Give them the full message and the `x-hcx-correlation_id`. + +A wrong value, rather than a wrong code, returns [PAYR-1511](payr-1511.md). + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1511.md b/catalogue/nhcx/errors/payr-1511.md new file mode 100644 index 000000000..234a7556d --- /dev/null +++ b/catalogue/nhcx/errors/payr-1511.md @@ -0,0 +1,91 @@ +--- +id: nhcx.error.payr-1511 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1511: a parameter value in your request is not valid' +summary: >- + The scheme payer rejected your request because one of its parameter values is + not a value it accepts. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + flows: + - nhcx.flow.insurance-plan-request + - nhcx.flow.claim-reprocess + - nhcx.flow.preauth-cancel + endpoints: + - nhcx.endpoint.insuranceplan-request + - nhcx.endpoint.task-submit + callbacks: + - nhcx.callback.insuranceplan-on-request + - nhcx.callback.task-on-submit + fhir: + - nhcx.fhir.task + - nhcx.fhir.insurance-plan-bundle + errors: + - nhcx.error.payr-1510 + - nhcx.error.payr-1518 + - nhcx.error.payr-1402 + - nhcx.error.payr-1405 + - nhcx.error.nhcx-1006 +--- + +# PAYR-1511: a parameter value in your request is not valid + +## In plain words + +The [PMJAY](../glossary/pmjay.md) payer checked the parameters in your request and found a value it does not accept. The message does not say which parameter. Your system has to find it before it resends. + +## Before you start + +- Your system sent a request whose bundle holds a `Task` resource. That is an insurance plan request, or a task request such as a reprocess or a cancellation. See [Request a patient's insurance plan](../flows/insurance-plan-request.md) and [Ask the payer to reprocess a claim](../flows/claim-reprocess.md). +- [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. + +The [PMJAY](../glossary/pmjay.md) payer's answer arrived on the callback for that request: `/v1/insuranceplan/on_request` or `/v1/task/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +The payer returns `PAYR-1511` when a parameter value in your request is not valid. + +```text +Invalid parameter value received. Please check and try again with a valid parameter value +``` + +In a `Task` resource, the input parameters are the `Task.input` entries. Each entry has a type code and a value. The documented inputs carry these values: + +| Input type code | Value it carries | +|---|---| +| `policyNumber` | The policy code, for example `PMJAY/HP/S/G` | +| `providerId` | Your hospital's [HFR](../../shared/glossary/hfr.md) id | +| `claimNumber` | The claim's reference number | +| `initimationNumber` | Your internal reference number, or the preauthorisation reference number from the payer | + +## How you know it worked + +You send the corrected request as a new request and receive `202 Accepted`. + +The answer on `/v1/insuranceplan/on_request` or `/v1/task/on_submit` is an encrypted payload, and `PAYR-1511` does not come back. For an insurance plan request, the decrypted payload is a `Bundle` of type `collection` holding an `InsurancePlan`. + +## When it goes wrong + +1. Check each `Task.input` value in your request against the table. +2. Take reference numbers from the payer's earlier responses, not from free text. +3. If you cannot find the parameter, contact the NHCX support team. Give them the full message and the `x-hcx-correlation_id`. + +A wrong type code, rather than a wrong value, returns [PAYR-1510](payr-1510.md). + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1512.md b/catalogue/nhcx/errors/payr-1512.md new file mode 100644 index 000000000..5b3198b02 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1512.md @@ -0,0 +1,87 @@ +--- +id: nhcx.error.payr-1512 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1512: a patient reference does not lead to a Patient resource' +summary: >- + The scheme payer rejected your request because a reference to the patient does + not lead to a valid patient record. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + errors: + - nhcx.error.payr-1508 + - nhcx.error.payr-1009 + - nhcx.error.nhcx-1006 +--- + +# PAYR-1512: a patient reference does not lead to a Patient resource + +## In plain words + +A resource in your [FHIR](../../shared/glossary/fhir.md) bundle refers to the patient. The [PMJAY](../glossary/pmjay.md) payer followed that reference and did not find a valid `Patient` resource. It refused the request. + +## Before you start + +- Your system sent a request through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. +- The [PMJAY](../glossary/pmjay.md) payer checked the [FHIR](../../shared/glossary/fhir.md) bundle inside it and refused it. + +The payer's answer arrived on the `on_` callback for that request. For a preauthorisation that is `/v1/preauth/on_submit`, and for a claim `/v1/claim/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +The payer returns `PAYR-1512` when the resource at a patient reference is missing or is not a valid `Patient`. The `%s` in the message is the reference it followed. + +```text +Invalid resource received for patient for url %s. Please try agian with valid Patient resource for the reference +``` + +## How you know it worked + +You send the corrected bundle as a new request and receive `202 Accepted`. + +The payer's answer on the `on_` callback is an encrypted payload, and `PAYR-1512` does not come back. After you decrypt it, the payload is the response for your request, for example a `ClaimResponse` bundle for a preauthorisation or a claim. + +## When it goes wrong + +1. Search your bundle for the reference in the message. +2. Make sure one bundle entry has that reference as its `fullUrl`, and that its resource is a `Patient`. +3. Check the reference is spelled the same in both places. +4. Validate the bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles before you send it. See [bundle validation](../fhir/validation.md). + +A newborn's link to the child record fails with [PAYR-1508](payr-1508.md) instead. + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1513.md b/catalogue/nhcx/errors/payr-1513.md new file mode 100644 index 000000000..961d37817 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1513.md @@ -0,0 +1,99 @@ +--- +id: nhcx.error.payr-1513 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1513: a diagnosis is not sent as a coded concept' +summary: >- + The scheme payer rejected your request because a diagnosis was not sent as a code + with its system. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + errors: + - nhcx.error.nhcx-1006 +--- + +# PAYR-1513: a diagnosis is not sent as a coded concept + +## In plain words + +Your [FHIR](../../shared/glossary/fhir.md) bundle lists a diagnosis. The [PMJAY](../glossary/pmjay.md) payer accepts a diagnosis only as a coded concept: a code, its code system and a display text. Yours arrived in another form, so it refused the request. + +## Before you start + +- Your system sent a request through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. +- The [PMJAY](../glossary/pmjay.md) payer checked the [FHIR](../../shared/glossary/fhir.md) bundle inside it and refused it. + +The payer's answer arrived on the `on_` callback for that request. For a preauthorisation that is `/v1/preauth/on_submit`, and for a claim `/v1/claim/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +The payer reads each diagnosis from the diagnosis component. In a preauthorisation or a claim, that is `Claim.diagnosis[].diagnosisCodeableConcept`. Coverage eligibility bundles carry diagnoses in the same shape. The payer returns `PAYR-1513` when a diagnosis is not sent as a `CodeableConcept`. + +```text +Invalid diagnosis received in DiagnosisComponent. In DiagnosisComponent, diagnosis should be sent as CodeableConcept. Please try agian with valid data +``` + +## How you know it worked + +You send the corrected bundle as a new request and receive `202 Accepted`. + +The payer's answer on the `on_` callback is an encrypted payload, and `PAYR-1513` does not come back. After you decrypt it, the payload is the response for your request, for example a `ClaimResponse` bundle for a preauthorisation or a claim. + +## When it goes wrong + +Send every diagnosis as a `diagnosisCodeableConcept` with at least one coding: + +```json +"diagnosis": [ + { + "sequence": 1, + "diagnosisCodeableConcept": { + "coding": [ + { + "system": "", + "code": "", + "display": "" + } + ] + } + } +] +``` + +Check every entry in the list, not only the first. Validate the bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles before you send it. See [bundle validation](../fhir/validation.md). + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1514.md b/catalogue/nhcx/errors/payr-1514.md new file mode 100644 index 000000000..56d1036b5 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1514.md @@ -0,0 +1,106 @@ +--- +id: nhcx.error.payr-1514 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1514: the discharge information entry does not name a discharge stage' +summary: >- + The scheme payer rejected your claim because the discharge information entry was + not text naming the discharge stage. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + errors: + - nhcx.error.payr-1095 + - nhcx.error.payr-1096 + - nhcx.error.payr-1503 + - nhcx.error.payr-1324 + - nhcx.error.payr-1362 + - nhcx.error.nhcx-1006 +--- + +# PAYR-1514: the discharge information entry does not name a discharge stage + +## In plain words + +Your [claim](../glossary/claim.md) carries discharge information as a supporting information entry. The [PMJAY](../glossary/pmjay.md) payer reads it as text naming the discharge stage. Your entry held another kind of value, so it refused the claim. + +## Before you start + +- Your system sent a [claim](../glossary/claim.md) through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. See [Submit a claim after discharge](../flows/claim-submit.md). +- The claim bundle carries a `Claim` resource with `Claim.use` set to `claim`. + +The [PMJAY](../glossary/pmjay.md) payer checked the `Claim` resource and refused it. Its answer arrived on `/v1/claim/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +The payer reads discharge information from the `Claim.supportingInfo` entry with category `DIS`. It returns `PAYR-1514` when that entry's value is not a string. + +The entry carries: + +| Element | Value | +|---|---| +| Category | `DIS` | +| Code | One of `DTH`, `LAMA`, `DAMA` or `DTM` | +| Value | A string naming the discharge stage: `After Surgery`, `Before Surgery` or `During Surgery` | + +```text +Value type received as %s for category - DIS for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - DIS is used to get the discharge related information. So the discharge information should be sent as string value, with value representing discharge stage (After Surgery / Before Surgery / During Surgery), with the category - DIS and code - DTH/LAMA/DAMA/DTM +``` + +The first `%s` is the value type you sent. The second is the entry's `sequence`. + +## How you know it worked + +You send the corrected bundle as a new request and receive `202 Accepted`. + +The answer on `/v1/claim/on_submit` is an encrypted payload, and `PAYR-1514` does not come back. After you decrypt it, the payload is a `ClaimResponse` bundle carrying the payer's decision on the case. + +## When it goes wrong + +1. Find the `supportingInfo` entry whose `sequence` matches the message. +2. Send the discharge stage in that entry as a string, with category `DIS` and the code for the discharge. + +```json +{ + "sequence": 5, + "category": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", "code": "DIS" } + ] + }, + "code": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code", "code": "DTH" } + ] + }, + "valueString": "After Surgery" +} +``` + +A claim with no discharge information returns [PAYR-1095](payr-1095.md). A death discharge also needs the death date entry: see [PAYR-1503](payr-1503.md) and [PAYR-1096](payr-1096.md). A `LAMA` or `DAMA` discharge before or during surgery also needs procedure `LM100`: see [PAYR-1362](payr-1362.md). + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1515.md b/catalogue/nhcx/errors/payr-1515.md new file mode 100644 index 000000000..505f2a403 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1515.md @@ -0,0 +1,85 @@ +--- +id: nhcx.error.payr-1515 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1515: an organisation in your bundle has no name' +summary: >- + The scheme payer rejected your request because an organisation record in it has + no valid name. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.validation + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + errors: + - nhcx.error.payr-1013 + - nhcx.error.payr-1015 + - nhcx.error.nhcx-1006 +--- + +# PAYR-1515: an organisation in your bundle has no name + +## In plain words + +Your [FHIR](../../shared/glossary/fhir.md) bundle includes an `Organization` resource for a hospital or a payer. The [PMJAY](../glossary/pmjay.md) payer requires every organisation to carry a name. The organisation at the reference in the message had no valid name, so it refused the request. + +## Before you start + +- Your system sent a request through [NHCX](../../shared/glossary/nhcx.md), and NHCX answered `202 Accepted`. +- The [PMJAY](../glossary/pmjay.md) payer checked the [FHIR](../../shared/glossary/fhir.md) bundle inside it and refused it. + +The payer's answer arrived on the `on_` callback for that request. For a preauthorisation that is `/v1/preauth/on_submit`, and for a claim `/v1/claim/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +The payer returns `PAYR-1515` when the `Organization` resource at a reference has no valid name. The `%s` in the message is that reference. Name is mandatory under the NRCeS Organization profile at https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html. + +```text +Invalid name received for organization resource with url %s. Name is mandatory for organization resource. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html +``` + +## How you know it worked + +You send the corrected bundle as a new request and receive `202 Accepted`. + +The payer's answer on the `on_` callback is an encrypted payload, and `PAYR-1515` does not come back. After you decrypt it, the payload is the response for your request, for example a `ClaimResponse` bundle for a preauthorisation or a claim. + +## When it goes wrong + +1. Find the `Organization` resource whose `fullUrl` matches the reference in the message. +2. Set its `name` to the organisation's name. Do not send an empty string. +3. Check every other `Organization` resource in the bundle, for the provider and the payer alike. +4. Validate the bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles before you send it. See [bundle validation](../fhir/validation.md). + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1516.md b/catalogue/nhcx/errors/payr-1516.md new file mode 100644 index 000000000..c7950c61a --- /dev/null +++ b/catalogue/nhcx/errors/payr-1516.md @@ -0,0 +1,78 @@ +--- +id: nhcx.error.payr-1516 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1516: the payer cannot match your error response to any message' +summary: >- + The scheme payer refused an error response from your system because its identifiers + match no message the payer knows about. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.message-identifiers + flows: + - nhcx.flow.report-a-processing-error + endpoints: + - nhcx.endpoint.communication-on-request + callbacks: + - nhcx.callback.error + - nhcx.callback.communication-request + errors: + - nhcx.error.payr-1517 +--- + +# PAYR-1516: the payer cannot match your error response to any message + +## In plain words + +Your system sent an error response to the [PMJAY](../glossary/pmjay.md) payer through [NHCX](../../shared/glossary/nhcx.md). The payer finds the message your error response answers by three identifiers. It found no message with that combination, so it refused your error response. + +## Before you start + +- Your system received a message from the payer and could not process it. +- Your system answered with an error response in the `ProtocolResponse` structure. See [Report a processing failure on /v1/error](../flows/report-a-processing-error.md). + +The payer refused that error response with this code. [Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +The payer identifies the message your error response answers by these values: + +| In the message | Header in your error response | +|---|---| +| api-caller-id | `x-hcx-api_call_id` | +| correlation id | `x-hcx-correlation_id` | +| sender code | `x-hcx-sender_code` | + +It returns `PAYR-1516` when it holds no event for that combination. + +```text +No event found for api-caller-id %s and correlation id %s for sender code %s. Hence error response willnot be accepted. +``` + +The three `%s` values are the identifiers your error response carried. + +## How you know it worked + +You send the corrected error response and `PAYR-1516` does not come back. + +Your logs show that its three identifiers relate to the message you answered. The rules are in [Correlation id, API call id and workflow id](../concepts/message-identifiers.md). + +## When it goes wrong + +1. Take the identifiers for your error response from the message you are answering. Do not generate a fresh correlation id for a response. +2. Set `x-hcx-sender_code` to your own participant code. Set `x-hcx-recipient_code` to the sender of the message you answer. +3. Follow the identifier rules for responses in [Correlation id, API call id and workflow id](../concepts/message-identifiers.md). +4. If the identifiers match and the code comes back, contact the NHCX support team. Give them the three values from the message. + +An error response in the wrong structure returns [PAYR-1517](payr-1517.md) instead. diff --git a/catalogue/nhcx/errors/payr-1517.md b/catalogue/nhcx/errors/payr-1517.md new file mode 100644 index 000000000..fd7a7ad23 --- /dev/null +++ b/catalogue/nhcx/errors/payr-1517.md @@ -0,0 +1,103 @@ +--- +id: nhcx.error.payr-1517 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1517: your error was sent encrypted instead of as a protocol response' +summary: >- + The scheme payer refused an error from your system because it arrived in the encrypted + structure instead of the protocol response structure. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.message-identifiers + flows: + - nhcx.flow.report-a-processing-error + endpoints: + - nhcx.endpoint.communication-on-request + callbacks: + - nhcx.callback.error + - nhcx.callback.communication-request + errors: + - nhcx.error.payr-1516 +--- + +# PAYR-1517: your error was sent encrypted instead of as a protocol response + +## In plain words + +Your system sent the [PMJAY](../glossary/pmjay.md) payer an error through [NHCX](../../shared/glossary/nhcx.md). An error travels in the `ProtocolResponse` structure, with its details in clear headers. Yours arrived in the encrypted structure, typed `JWEPayloadResponse`. The payer does not read errors in that form. + +## Before you start + +- Your system received a message from the payer and could not process it. +- Your system answered with an error, but in the encrypted structure. + +The payer refused that error with this code. [Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +A response takes one of two forms, told apart by its `type` field: + +| `type` | When it is used | +|---|---| +| `JWEPayloadResponse` | The request was validated and processed. The payload is encrypted with the recipient's public key. | +| `ProtocolResponse` | The request could not be validated or processed: the payload was invalid, it could not be decrypted, or a protocol error occurred. | + +The payer returns `PAYR-1517` when an error reaches it as `JWEPayloadResponse`. + +```text +Invalid error structure received for NHCX error. Protocol response structure is expected, but received JWEPayloadResponse. +``` + +## How you know it worked + +You send the error again as a `ProtocolResponse`, and `PAYR-1517` does not come back. + +## When it goes wrong + +Send the error as a `ProtocolResponse`. Its headers travel in clear, with the error in `x-hcx-error_details`: + +```json +{ + "type": "ProtocolResponse", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "", + "x-hcx-timestamp": "", + "x-hcx-debug_flag": "Error", + "x-hcx-status": "response.error", + "x-hcx-redirect_to": "", + "x-hcx-error_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-debug_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-domain-header": { + "use_case_name": "", + "amt_processed": "" + }, + "x-hcx-entity-type": "", + "x-hcx-ben-abha-id": "" +} +``` + +`x-hcx-entity-type` is one of `coverageeligibility`, `payment`, `insuranceplan`, `task`, `claim` or `preauth`. `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. Set the identifiers as [Correlation id, API call id and workflow id](../concepts/message-identifiers.md) describes. + +If the identifiers do not match the message you answer, the payer returns [PAYR-1516](payr-1516.md). diff --git a/catalogue/nhcx/errors/payr-1518.md b/catalogue/nhcx/errors/payr-1518.md new file mode 100644 index 000000000..a7793101e --- /dev/null +++ b/catalogue/nhcx/errors/payr-1518.md @@ -0,0 +1,111 @@ +--- +id: nhcx.error.payr-1518 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1518: your Task resource carries no input parameters' +summary: >- + The scheme payer rejected your task request because the task carries none of the + inputs it needs. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + flows: + - nhcx.flow.insurance-plan-request + - nhcx.flow.claim-reprocess + - nhcx.flow.preauth-cancel + endpoints: + - nhcx.endpoint.insuranceplan-request + - nhcx.endpoint.task-submit + - nhcx.endpoint.communication-on-request + callbacks: + - nhcx.callback.insuranceplan-on-request + - nhcx.callback.task-on-submit + fhir: + - nhcx.fhir.task + - nhcx.fhir.insurance-plan-bundle + errors: + - nhcx.error.payr-1519 + - nhcx.error.payr-1510 + - nhcx.error.payr-1511 + - nhcx.error.nhcx-1006 +--- + +# PAYR-1518: your Task resource carries no input parameters + +## In plain words + +Your request carries a `Task` resource. A `Task` tells the payer what you want, and names the policy or case through its inputs. Yours had no inputs, so the [PMJAY](../glossary/pmjay.md) payer refused it. + +## Before you start + +- Your system sent a request whose bundle holds a `Task` resource. That is an insurance plan request, or a task request such as a reprocess or a cancellation. See [Request a patient's insurance plan](../flows/insurance-plan-request.md) and [Ask the payer to reprocess a claim](../flows/claim-reprocess.md). +- [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. + +The [PMJAY](../glossary/pmjay.md) payer's answer arrived on the callback for that request: `/v1/insuranceplan/on_request` or `/v1/task/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +The payer returns `PAYR-1518` when the `Task` resource has no `input` entries. + +```text +No input parameters received for task resource. Input parameters are expected for task resource, but not received. Please try again with valid data. +``` + +Each use of `Task` needs its own inputs. The type codes use the system `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code`, except the communication input, whose type `include` comes from `http://terminology.hl7.org/CodeSystem/financialtaskinputtype`. + +| Request | Inputs the `Task` carries | +|---|---| +| Insurance plan request | `policyNumber`, `providerId`, or both. At least one is mandatory. | +| Task request on a claim | `claimNumber` | +| Task request on a preauthorisation | `initimationNumber`, spelled as shown | +| Answer to a communication request | An input of type `include`, whose value references the `Communication` resource | + +## How you know it worked + +You send the corrected request as a new request and receive `202 Accepted`. + +The answer on `/v1/insuranceplan/on_request` or `/v1/task/on_submit` is an encrypted payload, and `PAYR-1518` does not come back. For an insurance plan request, the decrypted payload is a `Bundle` of type `collection` holding an `InsurancePlan`. + +## When it goes wrong + +1. Add the inputs your request needs, from the table. +2. Give each input a `type` coding, with a system and a code, and a value. An input with no type returns [PAYR-1519](payr-1519.md). + +This example is the input list of an insurance plan request: + +```json +"input": [ + { + "type": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code", "code": "policyNumber" } + ] + }, + "valueString": "" + }, + { + "type": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code", "code": "providerId" } + ] + }, + "valueString": "" + } +] +``` + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1519.md b/catalogue/nhcx/errors/payr-1519.md new file mode 100644 index 000000000..fcd4104ff --- /dev/null +++ b/catalogue/nhcx/errors/payr-1519.md @@ -0,0 +1,111 @@ +--- +id: nhcx.error.payr-1519 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1519: a Task input parameter has no type' +summary: >- + The scheme payer rejected your task request because at least one of the task's + inputs does not say what kind of input it is. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + flows: + - nhcx.flow.insurance-plan-request + - nhcx.flow.claim-reprocess + - nhcx.flow.preauth-cancel + endpoints: + - nhcx.endpoint.insuranceplan-request + - nhcx.endpoint.task-submit + - nhcx.endpoint.communication-on-request + callbacks: + - nhcx.callback.insuranceplan-on-request + - nhcx.callback.task-on-submit + fhir: + - nhcx.fhir.task + - nhcx.fhir.insurance-plan-bundle + errors: + - nhcx.error.payr-1518 + - nhcx.error.payr-1510 + - nhcx.error.nhcx-1006 +--- + +# PAYR-1519: a Task input parameter has no type + +## In plain words + +Your request carries a `Task` resource with inputs. Each input must say what kind of input it is, through a type code. At least one of yours had no type, so the [PMJAY](../glossary/pmjay.md) payer refused the request. + +## Before you start + +- Your system sent a request whose bundle holds a `Task` resource. That is an insurance plan request, or a task request such as a reprocess or a cancellation. See [Request a patient's insurance plan](../flows/insurance-plan-request.md) and [Ask the payer to reprocess a claim](../flows/claim-reprocess.md). +- [NHCX](../../shared/glossary/nhcx.md) answered `202 Accepted`. + +The [PMJAY](../glossary/pmjay.md) payer's answer arrived on the callback for that request: `/v1/insuranceplan/on_request` or `/v1/task/on_submit`. The code is in `x-hcx-error_details.code`, and the full text is in `x-hcx-error_details.message`. + +Your callback tells an error from a decision by the `type` field of what arrives. An encrypted payload comes only when the payer processed your request. A `ProtocolResponse` comes when it could not, and carries the error details in clear headers. + +[Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +The payer returns `PAYR-1519` when a `Task.input` entry has no `type`. The `Task` profile is at https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html. + +```text +No type found for task input parameters. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html +``` + +The documented type codes use the system `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code`: + +| Request | Inputs the `Task` carries | +|---|---| +| Insurance plan request | `policyNumber`, `providerId`, or both. At least one is mandatory. | +| Task request on a claim | `claimNumber` | +| Task request on a preauthorisation | `initimationNumber`, spelled as shown | +| Answer to a communication request | An input of type `include`, whose value references the `Communication` resource | + +## How you know it worked + +You send the corrected request as a new request and receive `202 Accepted`. + +The answer on `/v1/insuranceplan/on_request` or `/v1/task/on_submit` is an encrypted payload, and `PAYR-1519` does not come back. For an insurance plan request, the decrypted payload is a `Bundle` of type `collection` holding an `InsurancePlan`. + +## When it goes wrong + +1. Check every `Task.input` entry, not only the first. +2. Give each one a `type.coding` with a system and a code from the table. +3. Keep the value next to its type, as `valueString` or `valueReference`. + +```json +"input": [ + { + "type": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code", "code": "policyNumber" } + ] + }, + "valueString": "" + }, + { + "type": { + "coding": [ + { "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code", "code": "providerId" } + ] + }, + "valueString": "" + } +] +``` + +A type code the payer does not accept returns [PAYR-1510](payr-1510.md). + +Send every retry as a new request with a new `x-hcx-correlation_id`. A correlation id that ended in an error is inactive. A correlation id that already exists is refused with [NHCX-1006](nhcx-1006.md). diff --git a/catalogue/nhcx/errors/payr-1520.md b/catalogue/nhcx/errors/payr-1520.md new file mode 100644 index 000000000..008ec70bb --- /dev/null +++ b/catalogue/nhcx/errors/payr-1520.md @@ -0,0 +1,79 @@ +--- +id: nhcx.error.payr-1520 +type: error +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'PAYR-1520: the communication reference does not lead to a Communication + resource' +summary: >- + The scheme payer rejected your answer to its request for information because the + reference to your communication does not lead to a communication record. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.queries-and-communication + endpoints: + - nhcx.endpoint.communication-on-request + callbacks: + - nhcx.callback.communication-request + errors: + - nhcx.error.payr-1518 + - nhcx.error.payr-1512 +--- + +# PAYR-1520: the communication reference does not lead to a Communication resource + +## In plain words + +The payer asked your hospital for more information with a [communication request](../glossary/communication-request.md), through [NHCX](../../shared/glossary/nhcx.md). Your system answered with a `Task` that points at a `Communication` resource. The [PMJAY](../glossary/pmjay.md) payer followed that reference and did not find a valid `Communication`, so it refused the answer. + +## Before you start + +- The payer sent `/v1/communication/request` to your system. See [Receiving POST /v1/communication/request](../callbacks/communication-request.md). +- Your system answered with `POST /v1/communication/on_request`. See [POST /v1/communication/on_request](../endpoints/communication-on-request.md). + +The payer refused that answer with this code. [Error code spaces](../concepts/error-code-spaces.md) explains where `PAYR-15xx` codes come from. + +## What happens + +Your answer is a `Task` bundle. The `Task` carries an input of type `include`, whose `valueReference` points to the `Communication` resource in the same bundle. The payer returns `PAYR-1520` when the resource at that reference is missing or is not a valid `Communication`. The `%s` in the message is the reference it followed. + +```text +Invalid resource received for communication for url %s. Please try agian with valid Communication resource for the reference. +``` + +## How you know it worked + +You send the corrected answer and `PAYR-1520` does not come back. + +The `Task` in your answer carries an `include` input whose reference matches the `fullUrl` of a `Communication` entry in the same bundle. + +## When it goes wrong + +1. Search your bundle for the reference in the message. +2. Make sure one bundle entry has that reference as its `fullUrl`, and that its resource is a `Communication`. +3. Point the `include` input at that entry: + +```json +"input": [ + { + "type": { + "coding": [ + { "system": "http://terminology.hl7.org/CodeSystem/financialtaskinputtype", "code": "include" } + ] + }, + "valueReference": { "reference": "" } + } +] +``` + +A `Task` with no inputs at all returns [PAYR-1518](payr-1518.md). diff --git a/catalogue/nhcx/fhir/claim-request.md b/catalogue/nhcx/fhir/claim-request.md new file mode 100644 index 000000000..620d6b646 --- /dev/null +++ b/catalogue/nhcx/fhir/claim-request.md @@ -0,0 +1,633 @@ +--- +id: nhcx.fhir.claim-request +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Claim request bundle +summary: >- + The bundle a hospital sends after discharge to claim payment, with the final amounts, + the discharge details and the documents the policy requires. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 9.4.1-9.4.8 and Appendix A.2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. section 25 LM100 and Discharge Types. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/claim/claim_Request.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Claim.supportingInfo, Claim.type. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Claim Error Codes, discharge and death date rules. +- url: https://hcxsbx.abdm.gov.in/images/064cf2e059987011e53a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Claim.pdf + hash: sha256:66290de20d57d69e681946a0101518092ca43b3775bb38997c43beb17fb38076 + fetched: '2026-09-14' + note: Claim, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. page 1, Claim Submit Request. +verified: + status: unverified +related: + concepts: + - nhcx.concept.claim-cycle + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-response + - nhcx.fhir.collection-bundle + - nhcx.fhir.terminologies + - nhcx.fhir.validation + errors: + - nhcx.error.payr-1095 + - nhcx.error.payr-1096 + - nhcx.error.payr-1099 + - nhcx.error.payr-1502 + - nhcx.error.payr-1362 + - nhcx.error.payr-1043 + - nhcx.error.payr-1044 + tests: + - nhcx.test.provider-uc-09 + - nhcx.test.tc-cl-01 + glossary: + - nhcx.glossary.claim + - nhcx.glossary.pmjay + - shared.glossary.fhir +--- + +# Claim request bundle + +## In plain words + +A [claim](../glossary/claim.md) asks the payer to pay for treatment already given. It uses the same `Claim` resource as a preauthorisation, with `use` set to `claim`, inside a `ClaimBundle`. You send it on `/v1/claim/submit` after discharge. + +Compared with the preauthorisation, the claim carries final amounts, discharge details, and the documents the policy asks for at claim time. + +## Before you start + +- For a package that needs approval, the preauthorisation was approved. See [the preauthorisation response](preauth-response.md). +- The patient is discharged, and you know the discharge type and stage. +- You have the claim-stage documents the InsurancePlan lists for the package. +- You can build a [preauthorisation bundle](preauth-request.md). The claim bundle has the same resources. + +## What happens + +### What changes from the preauthorisation + +- `Claim.use` is `claim`. +- `item` carries the final dates, quantity and amounts. `total` is their sum. +- `supportingInfo` carries the claim-stage documents and the discharge details below. + +### Discharge details in `supportingInfo` + +| Category | Code | Value | Carries | +|---|---|---|---| +| `DIS` | `DTH`, `DTM`, `LAMA` or `DAMA` | `Before Surgery` or `After Surgery` | Discharge type and stage | +| `ONS` | `ADDD` | Date or string | Admission date | +| `ONS` | `DSDE` | Date or string | Discharge date | +| `ONS` | `PSP` | Date or string | Surgery date | +| `ONS` | `DTM` | Date or string | Date of death, required when the discharge type is `DTM` | +| `OTH` | `EDT` | Date or string | Registration date | + +Categories come from `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category`. Codes come from `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code`. + +`DTH` is a discharge to home. `DTM` is a discharge to the mortuary. `LAMA` is leaving against medical advice. `DAMA` is a discharge against medical advice. + +### LAMA and DAMA under PMJAY + +For a LAMA or DAMA discharge before surgery, claim the procedure code `LM100` as the item. Set its quantity to the number of days admitted. `LM100` is claim-only: never send it on a preauthorisation. + +### Minimal bundle + +```json +{ + "resourceType": "Bundle", + "id": "", + "meta": { + "lastUpdated": "" + }, + "identifier": { + "system": "", + "value": "" + }, + "type": "collection", + "timestamp": "", + "entry": [ + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Claim", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "CLN", + "display": "Claim number" + } + ] + }, + "system": "", + "value": "" + } + ], + "status": "active", + "type": { + "coding": [ + { + "system": "http://snomed.info/sct", + "code": "737481003", + "display": "Inpatient care management (procedure)" + } + ] + }, + "use": "claim", + "patient": { + "reference": "urn:uuid:" + }, + "created": "", + "insurer": { + "reference": "urn:uuid:" + }, + "provider": { + "reference": "urn:uuid:" + }, + "priority": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/processpriority", + "code": "normal" + } + ] + }, + "careTeam": [ + { + "sequence": 1, + "provider": { + "reference": "urn:uuid:" + } + } + ], + "supportingInfo": [ + { + "sequence": 1, + "category": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", + "code": "" + } + ] + }, + "code": { + "coding": [ + { + "system": "", + "code": "" + } + ] + }, + "valueAttachment": { + "contentType": "application/pdf", + "title": "", + "data": "" + } + }, + { + "sequence": 2, + "category": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", + "code": "DIS" + } + ] + }, + "code": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code", + "code": "DTH" + } + ] + }, + "valueString": "After Surgery" + }, + { + "sequence": 3, + "category": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", + "code": "ONS" + } + ] + }, + "code": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code", + "code": "ADDD" + } + ] + }, + "valueString": "" + }, + { + "sequence": 4, + "category": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", + "code": "ONS" + } + ] + }, + "code": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code", + "code": "DSDE" + } + ] + }, + "valueString": "" + }, + { + "sequence": 5, + "category": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", + "code": "OTH" + } + ] + }, + "code": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code", + "code": "EDT" + } + ] + }, + "valueString": "" + } + ], + "diagnosis": [ + { + "sequence": 1, + "diagnosisCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/sid/icd-10", + "code": "", + "display": "" + } + ] + } + } + ], + "procedure": [ + { + "sequence": 1, + "procedureReference": { + "reference": "urn:uuid:" + } + } + ], + "insurance": [ + { + "sequence": 1, + "focal": true, + "coverage": { + "reference": "urn:uuid:" + } + } + ], + "item": [ + { + "sequence": 1, + "careTeamSequence": [ + 1 + ], + "diagnosisSequence": [ + 1 + ], + "procedureSequence": [ + 1 + ], + "informationSequence": [ + 1 + ], + "category": { + "coding": [ + { + "system": "", + "code": "" + } + ] + }, + "productOrService": { + "coding": [ + { + "system": "", + "code": "", + "display": "" + } + ] + }, + "servicedPeriod": { + "start": "", + "end": "" + }, + "quantity": { + "value": 1 + }, + "unitPrice": { + "value": "" + }, + "net": { + "value": "" + } + } + ], + "total": { + "value": "" + } + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Patient", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Patient" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "PMJAY" + } + ] + }, + "system": "https://bis.pmjay.gov.in", + "value": "" + }, + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "ABHA" + } + ] + }, + "system": "https://bis.pmjay.gov.in", + "value": "" + } + ], + "name": [ + { + "text": "" + } + ], + "gender": "", + "birthDate": "" + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Organization", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Organization" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NPI", + "display": "National provider identifier" + } + ] + }, + "system": "https://facility.abdm.gov.in", + "value": "" + } + ], + "type": [ + { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/organization-type", + "code": "prov", + "display": "Healthcare Provider" + } + ] + } + ], + "name": "" + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Organization", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Organization" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NIIP", + "display": "National Insurance Payor Identifier (Payor)" + } + ] + }, + "system": "https://facility.abdm.gov.in", + "value": "" + } + ], + "type": [ + { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/organization-type", + "code": "pay", + "display": "Payer" + } + ] + } + ], + "name": "" + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Coverage", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Coverage" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NH", + "display": "National Health Plan Identifier" + } + ] + }, + "system": "", + "value": "" + } + ], + "status": "active", + "beneficiary": { + "reference": "urn:uuid:" + }, + "payor": [ + { + "reference": "urn:uuid:" + } + ] + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Practitioner", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Practitioner" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "HPIN" + } + ] + }, + "system": "https://hpr.abdm.gov.in", + "value": "" + } + ], + "name": [ + { + "text": "" + } + ] + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Procedure", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Procedure" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "SNO", + "display": "Serial Number" + } + ] + }, + "system": "", + "value": "1" + } + ], + "status": "preparation", + "code": { + "coding": [ + { + "system": "", + "code": "", + "display": "" + } + ] + }, + "subject": { + "reference": "urn:uuid:" + } + } + } + ] +} +``` + +## How you know it worked + +Run the validator recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)): + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile https://nrces.in/ndhm/fhir/r4/StructureDefinition/ClaimBundle +``` + +It exits with code 0 and reports no errors. + +After you send the bundle, `/v1/claim/on_submit` arrives with a `ClaimResponse` for your claim number. See [the claim response](claim-response.md). + +## When it goes wrong + +- **[PAYR-1095](../errors/payr-1095.md): invalid discharge information.** Add a `supportingInfo` entry with category `DIS` and a code from `DTH`, `DTM`, `LAMA` or `DAMA`. +- **[PAYR-1096](../errors/payr-1096.md): invalid death date.** A `DTM` discharge needs an `ONS` entry with code `DTM` carrying the date of death. +- **[PAYR-1099](../errors/payr-1099.md) or [PAYR-1502](../errors/payr-1502.md): wrong value type for a date entry.** Send the discharge or admission date as a timing (date or period) or a string. +- **[PAYR-1362](../errors/payr-1362.md): no `LM100` procedure for a LAMA or DAMA case.** Send `LM100` as the only item for a LAMA or DAMA discharge before surgery. +- **[PAYR-1043](../errors/payr-1043.md) or [PAYR-1044](../errors/payr-1044.md).** A date or date-time does not follow the FHIR format. Use `YYYY-MM-DD` or an ISO-8601 date-time with offset. diff --git a/catalogue/nhcx/fhir/claim-response.md b/catalogue/nhcx/fhir/claim-response.md new file mode 100644 index 000000000..113231a87 --- /dev/null +++ b/catalogue/nhcx/fhir/claim-response.md @@ -0,0 +1,278 @@ +--- +id: nhcx.fhir.claim-response +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Claim response bundle +summary: >- + The payer's decision on a claim: approved, partly approved, queried or rejected, + with the approved amount and any deductions. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 9.5.1-9.5.6. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/claim/claim_queryUpdate_response.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. ClaimResponse.item.adjudication, total. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/claim/claimresponse_withQuery.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. ClaimResponse.outcome, adjudication. +verified: + status: unverified +related: + concepts: + - nhcx.concept.claim-cycle + - nhcx.concept.reprocess-and-cancel + flows: + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + - nhcx.flow.claim-reprocess + - nhcx.flow.payer-process-a-request + endpoints: + - nhcx.endpoint.claim-on-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + - nhcx.fhir.task + - nhcx.fhir.payment-notice + - nhcx.fhir.preauth-response + tests: + - nhcx.test.payer-uc-11 + glossary: + - nhcx.glossary.claim + - nhcx.glossary.adjudication + - shared.glossary.fhir +--- + +# Claim response bundle + +## In plain words + +The payer answers a [claim](../glossary/claim.md) with a `ClaimResponseBundle` on `/v1/claim/on_submit`. The focal resource is a `ClaimResponse` with `use` set to `claim`. + +It has the same shape as a preauthorisation response. It adds the claimed amount and any deductions, and an approval leads on to payment. + +## Before you start + +- As a provider, you sent a [claim request](claim-request.md) and stored the claim number and item sequences. +- You can open a sealed callback. See [receive, open and acknowledge a sealed message](../flows/receive-a-sealed-callback.md). +- You know how to read a [preauthorisation response](preauth-response.md). The fields are the same. + +## What happens + +### Reading the decision + +| `outcome` | `adjudication[0].reason.coding.code` | `benefit` total | What to do | +|---|---|---|---| +| `complete` | `approved` | above 0 | Full approval. Wait for the [payment notice](payment-notice.md). | +| `partial` | `approved` | above 0 | Partial approval. Read `processNote` for the reduction. | +| `partial` | `queried` | 0 | Send a [query update](query-update.md). | +| `complete` | `cancelled` | 0 or carried | Rejected. Decide whether to raise a [reprocess task](task.md). | + +`outcome: complete` closes the claim, whether approved or rejected. `outcome: partial` means the claim is still open. + +### Amounts + +| Element | Meaning | +|---|---| +| `item[].adjudication[]` category `eligible` | Amount eligible for the item | +| `item[].adjudication[]` category `deductible` | A deduction, with its reason in `reason`, for example `DEDUCT/01` | +| `total[]` category `benefit` | Amount approved for payment | +| `total[]` category `submitted` | Amount claimed | +| `total[]` with id `PMJAY-T`, category `eligible` | Total eligible amount | + +### Minimal response resource + +A payer's bundle carries this entry plus the `Patient`, `Coverage` and `Organization` entries it references. + +```json +{ + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "ClaimResponse", + "id": "", + "identifier": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "CLN", + "display": "Claim number" + } + ] + }, + "system": "", + "value": "" + } + ], + "status": "active", + "type": { + "coding": [ + { + "system": "http://snomed.info/sct", + "code": "737481003", + "display": "Inpatient care management (procedure)" + } + ] + }, + "use": "claim", + "patient": { + "reference": "" + }, + "created": "", + "insurer": { + "reference": "" + }, + "requestor": { + "reference": "" + }, + "outcome": "complete", + "disposition": "", + "item": [ + { + "itemSequence": 1, + "adjudication": [ + { + "category": { + "coding": [ + { + "system": "https://hl7.org/fhir/R4/valueset-adjudication.html", + "code": "eligible", + "display": "Eligible Amount" + } + ] + }, + "amount": { + "value": "" + } + }, + { + "category": { + "coding": [ + { + "code": "deductible", + "display": "Deductible" + } + ] + }, + "reason": { + "coding": [ + { + "code": "", + "display": "" + } + ] + }, + "amount": { + "value": "" + } + }, + { + "category": { + "coding": [ + { + "system": "https://hl7.org/fhir/R4/valueset-adjudication.html", + "code": "status", + "display": "Item adjudication status" + } + ] + }, + "reason": { + "coding": [ + { + "code": "Approved", + "display": "Approved" + } + ] + } + } + ] + } + ], + "adjudication": [ + { + "category": { + "coding": [ + { + "code": "status", + "display": "Status" + } + ] + }, + "reason": { + "coding": [ + { + "code": "approved", + "display": "Approved" + } + ] + } + } + ], + "total": [ + { + "category": { + "coding": [ + { + "system": "https://hl7.org/fhir/R4/valueset-adjudication.html", + "code": "benefit", + "display": "Benefit Amount" + } + ] + }, + "amount": { + "value": "" + } + }, + { + "category": { + "coding": [ + { + "system": "https://hl7.org/fhir/R4/valueset-adjudication.html", + "code": "submitted", + "display": "Submitted Amount" + } + ] + }, + "amount": { + "value": "" + } + } + ] + } +} +``` + +## How you know it worked + +As a provider: + +- `/v1/claim/on_submit` arrives with a `ClaimResponse` whose `identifier` value equals your claim number. +- `outcome`, the adjudication reason code and the `benefit` total map to one row of the decision table. + +As a payer, run the validator recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)): + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile https://nrces.in/ndhm/fhir/r4/StructureDefinition/ClaimResponseBundle +``` + +It exits with code 0 and reports no errors. + +## When it goes wrong + +- **You recorded a rejection as an approval.** Both are `outcome: complete`. The reason code `cancelled` marks a rejection. +- **You keyed the claim on the identifier system.** The reference payer uses the same identifier system for claims and preauthorisations. Match on the identifier value and your correlation id. +- **The approved amount is lower than you claimed.** Read the `deductible` adjudication and its reason. Raise a [reprocess task](task.md) only if you dispute it. +- **Your parser expects a currency on amounts.** Adjudication amounts carry `value` only. Treat them as INR. diff --git a/catalogue/nhcx/fhir/collection-bundle.md b/catalogue/nhcx/fhir/collection-bundle.md new file mode 100644 index 000000000..c85d31729 --- /dev/null +++ b/catalogue/nhcx/fhir/collection-bundle.md @@ -0,0 +1,229 @@ +--- +id: nhcx.fhir.collection-bundle +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: The NHCX collection bundle and its required elements +summary: >- + Every claims message you send is one bundle of type collection, holding the main + business resource and every resource it points to. +sources: +- url: https://hcxsbx.abdm.gov.in/images/2c3fbb4e6b09f0834f69.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Implementation Guide for Adoption of FHIR in ABDM and NHCX.pdf + hash: sha256:549377c9c26b1bd23decac3a1b9e5ebedfdc8e0fe99e53ef733859b188f51366 + fetched: '2026-09-14' + note: Implementation Guide for Adoption of FHIR in ABDM and NHCX, row 14 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 9-10, 12, 19 and 21. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 1.3 Key Principles. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheets Reprocess, Search, Communication, Insurance Plan. +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications.md + hash: sha256:56234dd8a55fe4eb9dd852779b22b522b04760c9bec5c263d5e9bc3ac2c6f167 + fetched: '2026-09-14' + note: Site page /domain-specifications, text as shown on the site. Domain Data Specifications section. +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications/domain-data-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__domain-data-specifications.md + hash: sha256:d5db7e162b098b4c9555367bd64d60ba7734ceee21eee7144a49cefa4f634fd8 + fetched: '2026-09-14' + note: Site page /domain-specifications/domain-data-specifications, text as shown on the site. Key Design Considerations. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. section 7 reference documents. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.jwe-envelope + - nhcx.concept.error-code-spaces + fhir: + - nhcx.fhir.validation + - nhcx.fhir.terminologies + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.task + - nhcx.fhir.insurance-plan-bundle + - shared.fhir.hl7-validator-recipe + errors: + - nhcx.error.payr-1008 + - nhcx.error.payr-1004 + - nhcx.error.payr-1029 + - nhcx.error.payr-1031 + - nhcx.error.payr-1040 + - nhcx.error.payr-1009 + - nhcx.error.payr-1010 + glossary: + - shared.glossary.fhir + - shared.glossary.nrces + - shared.glossary.nhcx + - nhcx.glossary.jwe + troubleshooting: + - nhcx.troubleshooting.bundle-rejected +--- + +# The NHCX collection bundle and its required elements + +## In plain words + +Every [NHCX](../../shared/glossary/nhcx.md) use case carries its business content as one [FHIR](../../shared/glossary/fhir.md) R4 (4.0.1) `Bundle`. The bundle type is always `collection`. + +A collection bundle groups the resources one workflow step needs. That means the claim or request, the patient, the provider, the payer, the policy and the documents. It is not a clinical document, so it has no `Composition` at its root. + +You build the bundle, seal it inside the [JWE](../glossary/jwe.md) payload of the call, and send it. [NRCeS](../../shared/glossary/nrces.md) publishes the profiles at https://nrces.in/ndhm/fhir/r4/hcx-profile.html. + +## Before you start + +- You know which use case you are building. The table in the next section maps each use case to its bundle profile. +- You can seal a JSON payload. See [the JWE envelope](../concepts/jwe-envelope.md). +- The HL7 validator runs on your machine. See [validating a bundle](validation.md). +- You have read [FHIR in NHCX](../concepts/fhir-in-nhcx.md) for how bundles fit the claim cycle. + +## What happens + +### The six bundle profiles + +| Profile | Canonical URL | Focal resource | Carried on | +|---|---|---|---| +| ClaimBundle | `https://nrces.in/ndhm/fhir/r4/StructureDefinition/ClaimBundle` | `Claim` | `/v1/preauth/submit`, `/v1/predetermination/submit`, `/v1/claim/submit` | +| ClaimResponseBundle | `https://nrces.in/ndhm/fhir/r4/StructureDefinition/ClaimResponseBundle` | `ClaimResponse` | the matching `on_submit` paths | +| CoverageEligibilityRequestBundle | `https://nrces.in/ndhm/fhir/r4/StructureDefinition/CoverageEligibilityRequestBundle` | `CoverageEligibilityRequest` | `/v1/coverageeligibility/check` | +| CoverageEligibilityResponseBundle | `https://nrces.in/ndhm/fhir/r4/StructureDefinition/CoverageEligibilityResponseBundle` | `CoverageEligibilityResponse` | `/v1/coverageeligibility/on_check` | +| TaskBundle | `https://nrces.in/ndhm/fhir/r4/StructureDefinition/TaskBundle` | `Task` | `/v1/insuranceplan/request`, `/v1/communication/*`, `/v1/paymentnotice/*`, `/v1/task/*`, `/v1/search/*` | +| InsurancePlanBundle | `https://nrces.in/ndhm/fhir/r4/StructureDefinition/InsurancePlanBundle` | `InsurancePlan` | `/v1/insuranceplan/on_request` | + +### Bundle-level elements + +| Element | What you put in it | +|---|---| +| `resourceType` | `Bundle` | +| `id` | A logical id you generate for this bundle | +| `meta.lastUpdated` | An ISO-8601 instant with offset, for example `2020-08-15T17:02:53.495+05:30` | +| `identifier` | `system` and `value` of your business number for the case, such as the claim number | +| `type` | `collection` | +| `timestamp` | When you assembled the bundle | +| `entry[]` | One entry per resource, each with `fullUrl` and `resource` | + +### Entry rules + +- Put the focal resource first when you build a request. +- Give every entry a `fullUrl`, either `urn:uuid:` or an absolute URL. +- Every `reference` inside the bundle must equal the `fullUrl` of an entry in the same bundle. +- Declare the NRCeS profile on every resource you build: `meta.profile` = `https://nrces.in/ndhm/fhir/r4/StructureDefinition/`. +- Give every identifier a `type` coding. The payer rejects a Patient, Claim, Organization, Coverage, Procedure or Practitioner identifier without one. +- Attach clinical records as ABDM health-record Compositions inside the same bundle, referenced from `Claim.supportingInfo`. Attach files as base64 in `valueAttachment`. +- Mandatory elements have cardinality `1..1` or `1..*`. A Must Support element is optional to send, and a receiver must be able to process it. + +### Minimal skeleton + +```json +{ + "resourceType": "Bundle", + "id": "", + "meta": { + "lastUpdated": "" + }, + "identifier": { + "system": "", + "value": "" + }, + "type": "collection", + "timestamp": "", + "entry": [ + "", + "" + ] +} +``` + +One entry, showing the `fullUrl` and the profile declaration: + +```json +{ + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Patient", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Patient" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "PMJAY" + } + ] + }, + "system": "https://bis.pmjay.gov.in", + "value": "" + }, + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "ABHA" + } + ] + }, + "system": "https://bis.pmjay.gov.in", + "value": "" + } + ], + "name": [ + { + "text": "" + } + ], + "gender": "", + "birthDate": "" + } +} +``` + +The atom for each use case lists the resources its bundle carries. + +## How you know it worked + +Run the HL7 validator recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)) against the bundle you built, with the bundle profile named on the command line: + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile +``` + +You know the bundle is right when: + +- The validator exits with code 0 and reports no errors. +- Every `reference` in the bundle resolves to an entry `fullUrl`. +- After you send it, the callback for your use case arrives as a sealed FHIR bundle, not as a `ProtocolResponse` carrying a bundle error. + +## When it goes wrong + +- **[PAYR-1008](../errors/payr-1008.md): "Invalid FHIR bundle received."** The receiver could not parse the payload as FHIR. Run the validator and fix what it reports. On the payer error sheet the same code means insufficient coverage, so read the message text as well as the code. See [error code spaces](../concepts/error-code-spaces.md). +- **[PAYR-1004](../errors/payr-1004.md): "Received FHIR bundle is malformed."** The message carries error details. Fix them, then validate again. +- **[PAYR-1040](../errors/payr-1040.md) or [PAYR-1031](../errors/payr-1031.md).** A reference points at a `fullUrl` that is not in the bundle, or an entry URL is invalid. Add the missing entry or correct the reference. +- **[PAYR-1009](../errors/payr-1009.md) or [PAYR-1010](../errors/payr-1010.md).** The Patient has no identifier, or the identifier has no `type`. +- **[PAYR-1029](../errors/payr-1029.md): invalid bundle id.** Set `Bundle.id` to a valid FHIR id. +- **You sent a `document` bundle with a root `Composition`.** Claims messages use `collection`. Move the clinical Composition inside the bundle and reference it from `Claim.supportingInfo`. + +See also [the payer rejects your FHIR bundle](../troubleshooting/bundle-rejected.md). diff --git a/catalogue/nhcx/fhir/coverage-eligibility-request.md b/catalogue/nhcx/fhir/coverage-eligibility-request.md new file mode 100644 index 000000000..f4373564a --- /dev/null +++ b/catalogue/nhcx/fhir/coverage-eligibility-request.md @@ -0,0 +1,422 @@ +--- +id: nhcx.fhir.coverage-eligibility-request +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: CoverageEligibilityRequest bundle +summary: >- + The bundle a hospital sends to ask a payer whether a patient's policy is in force, + what it covers, and whether a treatment needs prior approval. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 7.5. +- url: https://hcxsbx.abdm.gov.in/images/13093b5f9b88fe826123.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Insurance Plan IG.docx + hash: sha256:e9c6c82b6d67fd8476d6d19a5961419beb04e3c0613533453ed1e16e2a569cc1 + fetched: '2026-09-14' + note: Insurance Plan IG, row 25 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Coverage Eligibility request section. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/coverageeligibility/coveragerequest_validation.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. CoverageEligibilityRequest, Patient, Organization, Coverage. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/coverageeligibility/coveragerequest_auth-requirement.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. CoverageEligibilityRequest.item. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.coverage-eligibility-purposes + - nhcx.concept.policy-linking + - nhcx.concept.fhir-in-nhcx + decisions: + - nhcx.decision.eligibility-purpose + flows: + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.coverageeligibility-check + fhir: + - nhcx.fhir.collection-bundle + - nhcx.fhir.coverage-eligibility-response + - nhcx.fhir.insurance-plan-bundle + - nhcx.fhir.validation + errors: + - nhcx.error.payr-1032 + - nhcx.error.payr-1033 + - nhcx.error.payr-1009 + - nhcx.error.payr-1010 + - nhcx.error.payr-1090 + - nhcx.error.payr-1091 + tests: + - nhcx.test.provider-uc-05 + - nhcx.test.tc-ce-01 + glossary: + - nhcx.glossary.coverage-eligibility + - shared.glossary.hfr + - shared.glossary.abha + - nhcx.glossary.pmjay + - shared.glossary.fhir +--- + +# CoverageEligibilityRequest bundle + +## In plain words + +A [coverage eligibility](../glossary/coverage-eligibility.md) request asks a payer about one patient's policy before treatment. It is a [FHIR](../../shared/glossary/fhir.md) collection bundle whose focal resource is `CoverageEligibilityRequest`. + +The `purpose` element says what you are asking: + +- `validation`: is the policy in force? +- `benefits`: what does it cover? +- `auth-requirements`: does this treatment need preauthorisation? +- `discovery`: does a policy exist? + +You send it on `/v1/coverageeligibility/check`. + +## Before you start + +- The patient's policy is linked to their [ABHA](../../shared/glossary/abha.md). See [policy linking](../concepts/policy-linking.md). +- You have fetched the payer's insurance plan, so you hold the package code you are asking about. See [InsurancePlan bundles](insurance-plan-bundle.md). +- You know your facility's [HFR](../../shared/glossary/hfr.md) ID. It must match the registry id recorded for you on NHCX. +- You have chosen a purpose. See [which purpose to send](../decisions/eligibility-purpose.md). +- You have the patient's [PMJAY](../glossary/pmjay.md) beneficiary id and ABHA number. + +## What happens + +### Resources in the bundle + +| Resource | Role | Key elements | +|---|---|---| +| `CoverageEligibilityRequest` | The question | `status` `active`, `purpose`, `patient`, `created`, `provider`, `insurer`, `insurance.coverage`, `item` | +| `Patient` | The beneficiary | Identifiers typed `PMJAY` and `ABHA` from `ndhm-identifier-type-code` | +| `Organization` (provider) | Your facility | Identifier typed `NPI` carrying your HFR ID, system `https://facility.abdm.gov.in`; type `prov` | +| `Organization` (payer) | The insurer | Identifier typed `NIIP`; type `pay` | +| `Coverage` | The policy | Identifier typed `NH` carrying the policy number; `beneficiary`, `payor` | +| `Practitioner` | Who entered the request | Identifier on `https://hpr.abdm.gov.in` | + +Every resource declares `https://nrces.in/ndhm/fhir/r4/StructureDefinition/` in `meta.profile`. + +### Code systems + +- `priority`: `http://terminology.hl7.org/CodeSystem/processpriority`, code `normal`. +- `facility.identifier.system`: `https://nhcx.pmjay.gov.in`, value your HFR ID. +- Identifier types: `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` (`PMJAY`, `ABHA`, `HPIN`) and `http://terminology.hl7.org/CodeSystem/v2-0203` (`NPI`, `NIIP`, `NH`). +- `item.productOrService`: copy the package coding exactly as the payer's InsurancePlan gives it in `coverage.benefit.type`. + +### Minimal bundle + +```json +{ + "resourceType": "Bundle", + "id": "", + "meta": { + "lastUpdated": "" + }, + "identifier": { + "system": "", + "value": "" + }, + "type": "collection", + "timestamp": "", + "entry": [ + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "CoverageEligibilityRequest", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/CoverageEligibilityRequest" + ] + }, + "identifier": [ + { + "system": "", + "value": "" + } + ], + "status": "active", + "priority": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/processpriority", + "code": "normal", + "display": "Normal" + } + ] + }, + "purpose": [ + "validation" + ], + "patient": { + "reference": "urn:uuid:" + }, + "servicedDate": "", + "created": "", + "enterer": { + "reference": "urn:uuid:" + }, + "provider": { + "reference": "urn:uuid:" + }, + "insurer": { + "reference": "urn:uuid:" + }, + "facility": { + "identifier": { + "system": "https://nhcx.pmjay.gov.in", + "value": "" + } + }, + "insurance": [ + { + "focal": true, + "coverage": { + "reference": "urn:uuid:" + } + } + ], + "item": [ + { + "productOrService": { + "coding": [ + { + "system": "", + "code": "", + "display": "" + } + ] + } + } + ] + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Patient", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Patient" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "PMJAY" + } + ] + }, + "system": "https://bis.pmjay.gov.in", + "value": "" + }, + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "ABHA" + } + ] + }, + "system": "https://bis.pmjay.gov.in", + "value": "" + } + ], + "name": [ + { + "text": "" + } + ], + "gender": "", + "birthDate": "" + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Organization", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Organization" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NPI", + "display": "National provider identifier" + } + ] + }, + "system": "https://facility.abdm.gov.in", + "value": "" + } + ], + "type": [ + { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/organization-type", + "code": "prov", + "display": "Healthcare Provider" + } + ] + } + ], + "name": "" + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Organization", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Organization" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NIIP", + "display": "National Insurance Payor Identifier (Payor)" + } + ] + }, + "system": "https://facility.abdm.gov.in", + "value": "" + } + ], + "type": [ + { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/organization-type", + "code": "pay", + "display": "Payer" + } + ] + } + ], + "name": "" + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Coverage", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Coverage" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NH", + "display": "National Health Plan Identifier" + } + ] + }, + "system": "", + "value": "" + } + ], + "status": "active", + "beneficiary": { + "reference": "urn:uuid:" + }, + "payor": [ + { + "reference": "urn:uuid:" + } + ] + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Practitioner", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Practitioner" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "HPIN" + } + ] + }, + "system": "https://hpr.abdm.gov.in", + "value": "" + } + ], + "name": [ + { + "text": "" + } + ] + } + } + ] +} +``` + +Change `purpose` to `benefits`, `auth-requirements` or `discovery` for the other questions. Send at least one `item`. + +## How you know it worked + +Run the HL7 validator recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)) against the bundle you built, with the bundle profile named on the command line: + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile https://nrces.in/ndhm/fhir/r4/StructureDefinition/CoverageEligibilityRequestBundle +``` + +The validator exits with code 0 and reports no errors. + +After you send the bundle, `/v1/coverageeligibility/on_check` arrives at your registered endpoint. It carries a `CoverageEligibilityResponse` whose `request.reference` points at your request. See [the response bundle](coverage-eligibility-response.md). + +## When it goes wrong + +- **[PAYR-1033](../errors/payr-1033.md): no items received.** Items are mandatory for the purpose you sent. Add the package you are asking about. +- **[PAYR-1032](../errors/payr-1032.md): invalid purpose.** Use one of `validation`, `benefits`, `auth-requirements`, `discovery`. +- **[PAYR-1009](../errors/payr-1009.md) or [PAYR-1010](../errors/payr-1010.md).** The Patient identifier or its `type` is missing. +- **"HFR Id in the request does not match with the associated registry id in NHCX."** The `NPI` identifier on your provider Organization must equal the registry id you registered with. +- **[PAYR-1090](../errors/payr-1090.md) or [PAYR-1091](../errors/payr-1091.md).** The Coverage identifier or its `type` is missing. diff --git a/catalogue/nhcx/fhir/coverage-eligibility-response.md b/catalogue/nhcx/fhir/coverage-eligibility-response.md new file mode 100644 index 000000000..e3f88f4f9 --- /dev/null +++ b/catalogue/nhcx/fhir/coverage-eligibility-response.md @@ -0,0 +1,211 @@ +--- +id: nhcx.fhir.coverage-eligibility-response +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: CoverageEligibilityResponse bundle +summary: >- + The payer's answer to an eligibility check: whether the policy is in force, how + much cover is left, and whether the treatment needs prior approval. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 7.6. +- url: https://hcxsbx.abdm.gov.in/images/13093b5f9b88fe826123.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Insurance Plan IG.docx + hash: sha256:e9c6c82b6d67fd8476d6d19a5961419beb04e3c0613533453ed1e16e2a569cc1 + fetched: '2026-09-14' + note: Insurance Plan IG, row 25 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Coverage Eligibility response section. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/coverageeligibility/coverageresponse_validation.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Bundle entries and CoverageEligibilityResponse. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/coverageeligibility/coverageresponse_auth-requirement.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. insurance.item. +verified: + status: unverified +related: + concepts: + - nhcx.concept.coverage-eligibility-purposes + - nhcx.concept.fhir-in-nhcx + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.payer-process-a-request + endpoints: + - nhcx.endpoint.coverageeligibility-on-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.collection-bundle + - nhcx.fhir.preauth-request + - nhcx.fhir.terminologies + errors: + - nhcx.error.nhcx-1015 + - nhcx.error.nhcx-1017 + tests: + - nhcx.test.payer-uc-07 + glossary: + - nhcx.glossary.coverage-eligibility + - nhcx.glossary.preauthorisation + - shared.glossary.fhir +--- + +# CoverageEligibilityResponse bundle + +## In plain words + +The payer answers a [coverage eligibility](../glossary/coverage-eligibility.md) request with a [FHIR](../../shared/glossary/fhir.md) collection bundle on `/v1/coverageeligibility/on_check`. Its focal resource is `CoverageEligibilityResponse`. + +It tells the hospital whether the policy is in force and how much cover is used and left. It also says whether each item needs [preauthorisation](../glossary/preauthorisation.md). It can also list the documents a preauthorisation must carry. + +## Before you start + +- As a provider, you sent a [CoverageEligibilityRequest bundle](coverage-eligibility-request.md) and kept its `fullUrl` and your correlation id. +- You can open a sealed callback. See [receive, open and acknowledge a sealed message](../flows/receive-a-sealed-callback.md). +- As a payer, you have the request bundle in hand. See [receive, adjudicate and answer a request](../flows/payer-process-a-request.md). + +## What happens + +### How the payer builds the bundle + +The bundle echoes the request's resources first. Each echoed resource carries the tag `SUBSETTED` (system `http://terminology.hl7.org/CodeSystem/v3-ObservationValue`). The payer then adds its own `CoverageEligibilityResponse`, `Patient`, `Coverage` and the two `Organization` resources. + +Find the response by `resourceType`, not by position. + +### Elements to read + +| Element | Meaning | +|---|---| +| `request.reference` | The `fullUrl` of the request it answers | +| `outcome` | `complete` when the payer processed the request | +| `disposition` | Free text, for example `Policy is currently in-force` | +| `insurance[].inforce` | `true` when the policy is in force | +| `insurance[].item[].productOrService` | The item the line answers | +| `insurance[].item[].excluded` | `true` when the item is not covered on its own | +| `insurance[].item[].authorizationRequired` | `true` when the item needs preauthorisation | +| `insurance[].item[].authorizationSupporting[]` | Document codes the preauthorisation must carry, such as `MAND0409` | +| `insurance[].item[].benefit[]` | `allowedMoney` (remaining) and `usedMoney` (used) in `INR`, type from `http://terminology.hl7.org/CodeSystem/ex-benefitcategory` | + +The payer's `Coverage` carries the plan in `class` with type `XV` and the policy in an identifier typed `NH`. + +### Minimal response resource + +A payer's bundle carries this entry plus the echoed request entries and the `Patient`, `Coverage` and `Organization` entries it references. + +```json +{ + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "CoverageEligibilityResponse", + "id": "", + "meta": { + "profile": [ + "http://hl7.org/fhir/StructureDefinition/CoverageEligibilityResponse" + ] + }, + "identifier": [ + { + "system": "", + "value": "" + } + ], + "status": "active", + "purpose": [ + "validation" + ], + "patient": { + "reference": "" + }, + "created": "", + "requestor": { + "reference": "" + }, + "request": { + "reference": "" + }, + "outcome": "complete", + "disposition": "Policy is currently in-force", + "insurer": { + "reference": "" + }, + "insurance": [ + { + "coverage": { + "reference": "" + }, + "inforce": true, + "item": [ + { + "productOrService": { + "coding": [ + { + "system": "", + "code": "", + "display": "" + } + ] + }, + "excluded": false, + "benefit": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/ex-benefitcategory", + "code": "30", + "display": "Health Benefit Plan Coverage" + } + ] + }, + "allowedMoney": { + "value": "", + "currency": "INR" + }, + "usedMoney": { + "value": "", + "currency": "INR" + } + } + ], + "authorizationRequired": true + } + ] + } + ] + } +} +``` + +## How you know it worked + +As a provider, you know the check worked when: + +- `/v1/coverageeligibility/on_check` arrives with a `CoverageEligibilityResponse` whose `request.reference` equals your request's `fullUrl`. +- `outcome` is `complete` and `insurance[].inforce` is `true`. +- For an `auth-requirements` check, each item states `authorizationRequired`. + +As a payer, run the validator recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)) on your bundle: + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile https://nrces.in/ndhm/fhir/r4/StructureDefinition/CoverageEligibilityResponseBundle +``` + +It exits with code 0 and reports no errors. + +## When it goes wrong + +- **You cannot match the response to your request.** Match on `request.reference` and the correlation id in the protected header. Do not match on `Bundle.identifier.system`: the reference payer writes it as `https://payer.pmajy.nha.gov.in`. Do not match on the echoed request `id` either: it can differ from the id you sent. +- **A code lookup fails.** The reference payer sends some SNOMED codes under `http://snomed.info/sct0`. Compare the code value and treat the system loosely when you only display the line. +- **An item shows `excluded: true`.** The package is not covered without approval. Read `authorizationRequired` and raise a preauthorisation. +- **[NHCX-1015](../errors/nhcx-1015.md) or [NHCX-1017](../errors/nhcx-1017.md): invalid response received from receiver.** The payer's response failed the exchange's checks. The payer fixes and resends it. diff --git a/catalogue/nhcx/fhir/insurance-plan-bundle.md b/catalogue/nhcx/fhir/insurance-plan-bundle.md new file mode 100644 index 000000000..3c085770c --- /dev/null +++ b/catalogue/nhcx/fhir/insurance-plan-bundle.md @@ -0,0 +1,204 @@ +--- +id: nhcx.fhir.insurance-plan-bundle +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: InsurancePlan request and response bundles +summary: >- + The small task a hospital sends to fetch a payer's digital policy, and the large + bundle of packages, rates and document rules that comes back. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 6.4 and 6.5. +- url: https://hcxsbx.abdm.gov.in/images/13093b5f9b88fe826123.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Insurance Plan IG.docx + hash: sha256:e9c6c82b6d67fd8476d6d19a5961419beb04e3c0613533453ed1e16e2a569cc1 + fetched: '2026-09-14' + note: Insurance Plan IG, row 25 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Request section; Approach 1 and Approach 2. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/insuranceplan/insuranceplan_request.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Task.code, Task.input. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/insuranceplan/insuranceplan_response.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. whole file; InsurancePlan.coverage.benefit. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Insurance Plan. +verified: + status: unverified +related: + concepts: + - nhcx.concept.insurance-plan + - nhcx.concept.fhir-in-nhcx + flows: + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.insuranceplan-request + - nhcx.endpoint.insuranceplan-on-request + callbacks: + - nhcx.callback.insuranceplan-on-request + fhir: + - nhcx.fhir.pmjay-insurance-plan + - nhcx.fhir.collection-bundle + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.validation + sandbox: + - nhcx.sandbox.dummy-payer + errors: + - nhcx.error.payr-1406 + - nhcx.error.payr-1401 + - nhcx.error.payr-1402 + - nhcx.error.payr-1405 + tests: + - nhcx.test.provider-uc-06 + - nhcx.test.payer-uc-08 + - nhcx.test.tc-hbp-01 + glossary: + - nhcx.glossary.insurance-plan + - shared.glossary.hfr + - shared.glossary.fhir +--- + +# InsurancePlan request and response bundles + +## In plain words + +An [insurance plan](../glossary/insurance-plan.md) is a payer's policy published as data. The hospital asks for it with a one-entry `Task` bundle on `/v1/insuranceplan/request`. The payer answers on `/v1/insuranceplan/on_request` with an InsurancePlan bundle. + +The answer lists the covered packages, their rates, the claim conditions, the documents each claim needs and the questionnaires to fill in. Fetch it before you check eligibility or raise a preauthorisation, so your requests use the payer's own codes. + +## Before you start + +- You know the policy number and the provider id the payer knows you by. The provider id is your [HFR](../../shared/glossary/hfr.md) ID in the published guide. With the [dummy payer](../sandbox/dummy-payer.md), use provider id `32722` and policy number `100217`. +- Your callback endpoint accepts large payloads. The sample PMJAY response is about 21 MB. +- You can seal and open payloads. See [send a sealed request](../flows/send-a-sealed-request.md). + +## What happens + +### The request: a Task with code `poll` + +| Element | Value | +|---|---| +| `Task.status` | `requested` | +| `Task.intent` | `order` | +| `Task.code` | `poll` from `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `Task.input[].type` | `policyNumber` or `providerId` from `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code` | +| `Task.input[].valueString` | The policy number or the provider id | + +Send at least one input. + +```json +{ + "resourceType": "Bundle", + "id": "", + "meta": { + "lastUpdated": "" + }, + "identifier": { + "system": "", + "value": "" + }, + "type": "collection", + "timestamp": "", + "entry": [ + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Task", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Task" + ] + }, + "status": "requested", + "intent": "order", + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/financialtaskcode", + "code": "poll", + "display": "Poll" + } + ] + }, + "input": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code", + "code": "policyNumber", + "display": "PolicyNumber" + } + ] + }, + "valueString": "" + }, + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code", + "code": "providerId", + "display": "Provider ID" + } + ] + }, + "valueString": "" + } + ] + } + } + ] +} +``` + +### The response: an InsurancePlan bundle + +The decrypted payload is a `collection` bundle with these entries: + +| Resource | What it carries | +|---|---| +| `InsurancePlan` | The policy: identifiers, period, coverage groups, benefits, rates and claim rules | +| `Organization` | The payer, referenced from `ownedBy` and `administeredBy` | +| `Questionnaire` | Document and treatment-guideline questionnaires, one entry per questionnaire | + +A plan structures its benefits in one of two ways: + +- `plan.specificCost.category.benefit.cost.qualifiers`: specialty, package, package cost, then implant and stratification qualifiers. +- `coverage.benefit.limit`: coverage type, benefit, limit. + +The PMJAY plan uses both, aligned one to one. See [the PMJAY InsurancePlan](pmjay-insurance-plan.md) for every element. + +## How you know it worked + +Run the validator recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)) on your request bundle: + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile https://nrces.in/ndhm/fhir/r4/StructureDefinition/TaskBundle +``` + +It exits with code 0 and reports no errors. + +Then `/v1/insuranceplan/on_request` arrives at your endpoint. The decrypted bundle holds one `InsurancePlan` whose `NH` identifier equals the policy number you asked for. Your package codes appear in `InsurancePlan.coverage[].benefit[].id`. + +## When it goes wrong + +- **[PAYR-1406](../errors/payr-1406.md): an existing request for this hospital and policy is in progress.** Wait 15 to 60 minutes for the first response. Do not resend with a new correlation id. After 60 minutes with no response, contact support. +- **[PAYR-1401](../errors/payr-1401.md): policy not allowed for the hospital.** Your facility is not enrolled for that policy. Contact support. +- **[PAYR-1402](../errors/payr-1402.md): policy not associated with any payer.** Check the policy number you sent. +- **[PAYR-1405](../errors/payr-1405.md): no enrolled hospital found for the HFR id or sender id.** Check the provider id input and your sender code. +- **The callback times out or is cut off.** The response is large. Accept the body, acknowledge with 202 within 30 seconds, and parse after you acknowledge. diff --git a/catalogue/nhcx/fhir/payment-notice.md b/catalogue/nhcx/fhir/payment-notice.md new file mode 100644 index 000000000..9e0a263e8 --- /dev/null +++ b/catalogue/nhcx/fhir/payment-notice.md @@ -0,0 +1,268 @@ +--- +id: nhcx.fhir.payment-notice +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PaymentNotice bundle and its acknowledgement +summary: >- + The bundle a payer sends to tell a hospital a claim has been paid, with the amount + and bank reference, and the short task the hospital sends back to acknowledge + it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 11.2, 11.5, 11.6 and implementation notes. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/paymentNotice/payment_notice.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Task, PaymentNotice, PaymentReconciliation. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/paymentNotice/paymentNotice_ack.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Task.output. +verified: + status: unverified +related: + concepts: + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.payment-notice + endpoints: + - nhcx.endpoint.paymentnotice-request + - nhcx.endpoint.paymentnotice-on-request + callbacks: + - nhcx.callback.paymentnotice-request + fhir: + - nhcx.fhir.claim-response + - nhcx.fhir.task + - nhcx.fhir.collection-bundle + - nhcx.fhir.validation + sandbox: + - nhcx.sandbox.dummy-payer + tests: + - nhcx.test.provider-uc-11 + - nhcx.test.payer-uc-13 + glossary: + - nhcx.glossary.payment-notice + - shared.glossary.fhir +--- + +# PaymentNotice bundle and its acknowledgement + +## In plain words + +A [payment notice](../glossary/payment-notice.md) tells the hospital that the payer has paid an approved claim. The payer sends a `TaskBundle` on `/v1/paymentnotice/request`. It holds a `Task`, a `PaymentNotice` and a `PaymentReconciliation` with the bank reference and deductions. + +The hospital acknowledges with its own small `TaskBundle` on `/v1/paymentnotice/on_request`. The payment cycle closes when the payer receives that acknowledgement. + +## Before you start + +- The claim is approved. See [the claim response](claim-response.md). +- Your callback endpoint accepts `/v1/paymentnotice/request`. +- In the sandbox, you can trigger a notice from the [dummy payer](../sandbox/dummy-payer.md). + +## What happens + +### The notice the payer sends + +| Resource | Key elements | +|---|---| +| `Task` | `status` `requested`; `intent` `order`; `code` `deliver` from `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-codes`; `input[0].type` `status` from `http://terminology.hl7.org/CodeSystem/financialtaskinputtype`, with `valueReference` to the PaymentNotice | +| `PaymentNotice` | `identifier` typed `CLN` carrying the claim number; `status` `active`; `payment` pointing at the PaymentReconciliation; `recipient` pointing at your Organization; `amount` in `INR`; `paymentStatus` `paid` from `http://terminology.hl7.org/CodeSystem/paymentstatus` | +| `PaymentReconciliation` | `paymentDate`; `paymentAmount` in `INR`; `paymentIdentifier` typed `UTR` carrying the bank's Unique Transaction Reference; `detail[]` lines typed `TDS` (tax deducted at source) and `Payment` | +| `Organization` | The payer and your facility | + +The net payment plus the `TDS` line equals the approved claim amount. Store the UTR from `PaymentReconciliation.paymentIdentifier.value` for audit. + +### The acknowledgement you send + +| Element | Value | +|---|---| +| `Task.status` | `completed` | +| `Task.code` | `status` from `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `Task.output[0]` | type `status` from `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-output-type`; value `paymentack` from `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-output-value` | +| `Task.output[1]` | type `claimNumber`, value the claim number | + +```json +{ + "resourceType": "Bundle", + "id": "", + "meta": { + "lastUpdated": "" + }, + "identifier": { + "system": "", + "value": "" + }, + "type": "collection", + "timestamp": "", + "entry": [ + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Task", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Task" + ] + }, + "status": "completed", + "intent": "order", + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/financialtaskcode", + "code": "status" + } + ] + }, + "description": "", + "authoredOn": "", + "requester": { + "reference": "urn:uuid:" + }, + "owner": { + "reference": "urn:uuid:" + }, + "output": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-output-type", + "code": "status" + } + ] + }, + "valueCodeableConcept": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-output-value", + "code": "paymentack", + "display": "Payment is acknowledged" + } + ] + } + }, + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code", + "code": "claimNumber" + } + ] + }, + "valueString": "" + } + ] + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Organization", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Organization" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NPI", + "display": "National provider identifier" + } + ] + }, + "system": "https://facility.abdm.gov.in", + "value": "" + } + ], + "type": [ + { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/organization-type", + "code": "prov", + "display": "Healthcare Provider" + } + ] + } + ], + "name": "" + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Organization", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Organization" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NIIP", + "display": "National Insurance Payor Identifier (Payor)" + } + ] + }, + "system": "https://facility.abdm.gov.in", + "value": "" + } + ], + "type": [ + { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/organization-type", + "code": "pay", + "display": "Payer" + } + ] + } + ], + "name": "" + } + } + ] +} +``` + +## How you know it worked + +Run the validator recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)) on your acknowledgement: + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile https://nrces.in/ndhm/fhir/r4/StructureDefinition/TaskBundle +``` + +It exits with code 0 and reports no errors. + +You know the cycle worked when you have stored the UTR and the net amount from the notice. The exchange also accepted your `/v1/paymentnotice/on_request` call with 202. + +## When it goes wrong + +- **Your parser cannot find the PaymentNotice by id.** The payer's resources can arrive without an `id`. Resolve references by entry `fullUrl`. +- **Detail amounts have no currency.** `detail[].amount` carries `value` only. Treat it as INR. +- **You based logic on `Task.description`.** It is free text and can carry typos. Use `Task.code`, `paymentStatus` and the amounts. +- **The payer never marks the payment closed.** You did not send the acknowledgement, or it failed validation. Send the `paymentack` Task for the claim number. diff --git a/catalogue/nhcx/fhir/pmjay-insurance-plan.md b/catalogue/nhcx/fhir/pmjay-insurance-plan.md new file mode 100644 index 000000000..7d20bfd0d --- /dev/null +++ b/catalogue/nhcx/fhir/pmjay-insurance-plan.md @@ -0,0 +1,220 @@ +--- +id: nhcx.fhir.pmjay-insurance-plan +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: The PMJAY InsurancePlan profile, packages and questionnaires +summary: >- + How the government scheme's policy is laid out as data: specialties, packages, + rates, claim rules, required documents and treatment-guideline questionnaires. +sources: +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/insuranceplan/insuranceplan_response.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. InsurancePlan, coverage.benefit, plan.specificCost, Questionnaire entries. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 6.5.1 and 6.6 Claim conditions. +verified: + status: unverified +related: + concepts: + - nhcx.concept.insurance-plan + - nhcx.concept.pmjay-on-nhcx + flows: + - nhcx.flow.insurance-plan-request + fhir: + - nhcx.fhir.insurance-plan-bundle + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.query-update + - nhcx.fhir.terminologies + errors: + - nhcx.error.payr-1406 + tests: + - nhcx.test.tc-hbp-01 + glossary: + - nhcx.glossary.pmjay + - nhcx.glossary.hbp + - nhcx.glossary.insurance-plan + - shared.glossary.fhir +--- + +# The PMJAY InsurancePlan profile, packages and questionnaires + +## In plain words + +The [PMJAY](../glossary/pmjay.md) policy arrives as one [FHIR](../../shared/glossary/fhir.md) `InsurancePlan` inside an InsurancePlan bundle. It is the scheme's package list, the Health Benefit Package ([HBP](../glossary/hbp.md)), as data. + +For each package it gives the rate, the rules that apply, the documents a claim needs and the treatment-guideline questions to answer. Your system reads it once per policy and uses its codes in every later request. + +## Before you start + +- You requested the plan. See [InsurancePlan request and response bundles](insurance-plan-bundle.md). +- Your parser can stream a large JSON document. The sample plan is about 21 MB, with 2,217 entries. + +## What happens + +### The resources + +| Resource | Count in the sample | Holds | +|---|---|---| +| `InsurancePlan` | 1 | The policy | +| `Organization` | 1 | The payer | +| `Questionnaire` | 2,215 | 15 plan-level questionnaires and the Standard Treatment Guidelines (STG) questionnaires | + +### InsurancePlan header + +| Element | Sample value | +|---|---| +| `name` | `PMJAY - Universal Health Policy` | +| `type` | `07` "Universal Health Policy", system `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-insuranceplan-type` | +| `identifier` typed `NH` | The policy number | +| `identifier` typed `XV` | The plan id | +| `plan.type` | `03` "Group", system `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-plan-type` | +| `plan.generalCost[0].cost` | The family sum insured, `500000` INR | + +### Coverage: specialty, then package + +`InsurancePlan.coverage[]` has one entry per specialty. Its `type` coding comes from `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-benefitcategory`, for example `SN` Neurosurgery or `MG` General Medicine. Each `coverage.benefit[]` is one package or implant: + +- `id` and `type`: the package code, from `https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-productorservice`. +- `limit[]`: the package rate in `INR`, plus one limit per stratification when the package has them. +- A `Claim-Condition` extension with the package rules. +- `Claim-SupportingInfoRequirement` extensions naming the required documents, and an STG questionnaire link in `documentationUrl`. + +One package benefit, cut to three rules and one document: + +```json +{ + "id": "", + "extension": [ + { + "url": "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim-Condition", + "extension": [ + { + "url": "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim-Condition/ProcedureType", + "valueString": "Surgical" + }, + { + "url": "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim-Condition/ApprovalNotRequired", + "valueString": "N" + }, + { + "url": "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim-Condition/EnhancementAllowed", + "valueString": "N" + } + ] + }, + { + "url": "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim-SupportingInfoRequirement", + "extension": [ + { + "url": "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim-SupportingInfoRequirement///", + "extension": [ + { + "url": "category", + "valueCodeableConcept": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", + "code": "DIA", + "display": "Diagnostic report" + } + ] + } + }, + { + "url": "code", + "valueCodeableConcept": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code", + "code": "", + "display": "" + } + ] + } + } + ] + } + ] + } + ], + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-productorservice", + "code": "", + "display": "" + } + ] + }, + "limit": [ + { + "value": { + "value": "", + "unit": "INR" + }, + "code": { + "coding": [ + { + "code": "" + } + ] + } + } + ] +} +``` + +### Claim-Condition rules + +| Rule | Values | Use it to | +|---|---|---| +| `ProcedureType` | `Surgical`, `Medical`, `Conservative` | Classify the package | +| `ApprovalNotRequired` | `Y` or `N` | Decide whether a preauthorisation is needed | +| `EnhancementAllowed` | `Y` or `N` | Decide whether an enhancement can add to it | +| `StratificationAllowed`, `MultipleStratificationAllowed`, `MaximumStratificationAllowed` | `Y`/`N`, count | Offer ward or ICU levels | +| `ImplantApplicable`, `MultipleImplantsAllowed`, `MaximumImplantsAllowed` | `Y`/`N`, count | Offer implants | +| `IsDayCare` | `Y` or `N` | Mark day-care packages | +| `QuantityAllowed` | count | Cap the item quantity | +| `CyclicProcedure`, `MaximumCyclesAllowed` | `Y`/`N`, count | Allow repeated cycles, such as dialysis, under one approval | +| `GovtReserved`, `ScheduledTATApproval` | `Y` or `N` | Apply scheme rules | + +An implant benefit carries only `ParentProcedure`, naming the package it belongs to. + +### Plan costs + +`plan[0].specificCost[]` mirrors the coverage: one category per specialty, the same benefits in the same order, with ids prefixed `PlanBenefit/`. Each `cost[]` line has a `type` of `Procedure`, `Stratification` or `Implant`, an optional `qualifiers` code such as `STRAT006b` (HDU), and a `value` in `INR`. + +### Plan-level requirements and questionnaires + +`InsurancePlan.extension[]` lists documents every case needs. One is proof of identity (`POI`, `ADN`). The others point at 15 plan questionnaires with category `INF` and code `ODN`, such as Discharge Information, Admission Details and Authentication Consent. + +STG questionnaires use `item[].prefix` for the question and offer `Yes` or `No`. Plan questionnaires use `item[].text`. + +## How you know it worked + +You have read the plan correctly when, for one package code, your system can show: + +- The rate from `coverage.benefit.limit` and the matching `specificCost` cost lines. +- Whether it needs preauthorisation (`ApprovalNotRequired`) and allows enhancement (`EnhancementAllowed`). +- The list of required documents with their category and code. +- The STG questionnaire to answer, fetched from the bundle by its URL. + +A preauthorisation built from these codes passes the validator recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)) and is not rejected for an unknown package, stratification or document code. + +## When it goes wrong + +- **Your parser runs out of memory.** Stream the bundle and index `coverage.benefit` by package code. +- **The same questionnaire appears many times.** Questionnaires repeat, once per benefit that links them, with identical content. Deduplicate by `id`. +- **A cost parser finds no currency.** Cost and limit values carry `unit` = `INR`, not `currency`. +- **A display string has trailing spaces or stray quotes.** Match on codes, not displays. +- **A package is shared by two specialties.** Some package codes appear under more than one specialty. Key on the specialty and package pair. +- **[PAYR-1406](../errors/payr-1406.md) when you fetch again.** A previous request for the same hospital and policy is still running. Cache the plan and wait 15 to 60 minutes before asking again. diff --git a/catalogue/nhcx/fhir/preauth-cancel.md b/catalogue/nhcx/fhir/preauth-cancel.md new file mode 100644 index 000000000..3e3c9f67a --- /dev/null +++ b/catalogue/nhcx/fhir/preauth-cancel.md @@ -0,0 +1,275 @@ +--- +id: nhcx.fhir.preauth-cancel +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Preauthorisation cancel request and response bundles +summary: >- + The task a hospital sends to cancel a preauthorisation it no longer needs, and + the payer's confirmation that the case is cancelled. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 8.6 Cancellation Flow. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/preauth/cancel/preauth_cancel_req.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Task. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/preauth/cancel/preauth_cancel_response.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Task and ClaimResponse. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheets Bridge Error and Preauth Error Codes (PAYR-1252). +verified: + status: unverified +related: + concepts: + - nhcx.concept.reprocess-and-cancel + flows: + - nhcx.flow.preauth-cancel + endpoints: + - nhcx.endpoint.task-submit + - nhcx.endpoint.task-on-submit + callbacks: + - nhcx.callback.task-on-submit + fhir: + - nhcx.fhir.task + - nhcx.fhir.preauth-request + - nhcx.fhir.collection-bundle + - nhcx.fhir.validation + errors: + - nhcx.error.payr-1252 + - nhcx.error.payr-1017 + - nhcx.error.payr-1018 + tests: + - nhcx.test.provider-uc-12 + glossary: + - nhcx.glossary.preauthorisation + - shared.glossary.fhir +--- + +# Preauthorisation cancel request and response bundles + +## In plain words + +A hospital cancels a [preauthorisation](../glossary/preauthorisation.md) with a `TaskBundle` on `/v1/task/submit`. The `Task` has code `cancel`, a reason, and the claim number it cancels. + +The payer answers on `/v1/task/on_submit`. Its bundle holds a completed `Task` that points at a `ClaimResponse` marked `cancelled`. + +## Before you start + +- The preauthorisation is in state "preauthorization submitted" or "preauthorization approved". The payer cannot cancel a case in any other state. +- You know the claim number you sent in the original [preauthorisation request](preauth-request.md). +- You know why you are cancelling, so you can pick a reason code. + +## What happens + +### The request + +| Element | Value | +|---|---| +| `Task.status` | `requested` | +| `Task.intent` | `order` | +| `Task.code` | `cancel` from `http://terminology.hl7.org/CodeSystem/financialtaskcode` | +| `Task.reasonCode` | A code from `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code`, such as `treatmentplanchanged` | +| `Task.input` | `claimNumber` and `initimationNumber`, both from `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code`, both carrying the preauthorisation number | +| `Task.requester` | Your provider Organization | +| `Task.owner` | The payer Organization | + +The input code is spelled `initimationNumber`. Send it with that spelling. + +```json +{ + "resourceType": "Bundle", + "id": "", + "meta": { + "lastUpdated": "" + }, + "identifier": { + "system": "", + "value": "" + }, + "type": "collection", + "timestamp": "", + "entry": [ + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Task", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Task" + ] + }, + "status": "requested", + "intent": "order", + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/financialtaskcode", + "code": "cancel" + } + ] + }, + "description": "", + "authoredOn": "", + "requester": { + "reference": "urn:uuid:" + }, + "owner": { + "reference": "urn:uuid:" + }, + "reasonCode": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code", + "code": "treatmentplanchanged", + "display": "Treatment plan changed during hospitalization." + } + ] + }, + "input": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code", + "code": "claimNumber" + } + ] + }, + "valueString": "" + }, + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code", + "code": "initimationNumber" + } + ] + }, + "valueString": "" + } + ] + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Organization", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Organization" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NPI", + "display": "National provider identifier" + } + ] + }, + "system": "https://facility.abdm.gov.in", + "value": "" + } + ], + "type": [ + { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/organization-type", + "code": "prov", + "display": "Healthcare Provider" + } + ] + } + ], + "name": "" + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Organization", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Organization" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NIIP", + "display": "National Insurance Payor Identifier (Payor)" + } + ] + }, + "system": "https://facility.abdm.gov.in", + "value": "" + } + ], + "type": [ + { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/organization-type", + "code": "pay", + "display": "Payer" + } + ] + } + ], + "name": "" + } + } + ] +} +``` + +### The response + +| Resource | Key elements | +|---|---| +| `Task` | `status` `completed`; `code` `approve` from `http://hl7.org/fhir/CodeSystem/task-code`; `output[0].type` `include` from `http://terminology.hl7.org/CodeSystem/financialtaskinputtype`; `output[0].valueReference` pointing at the ClaimResponse | +| `ClaimResponse` | Your claim number; `use` `preauthorization`; `outcome` `complete`; `adjudication[0].reason.coding.code` `cancelled` | + +## How you know it worked + +Run the validator recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)): + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile https://nrces.in/ndhm/fhir/r4/StructureDefinition/TaskBundle +``` + +It exits with code 0 and reports no errors. + +Then `/v1/task/on_submit` arrives. Its `Task` has `status` `completed`, and the referenced `ClaimResponse` carries your claim number with adjudication reason `cancelled`. + +## When it goes wrong + +- **[PAYR-1252](../errors/payr-1252.md): case not in an active preauthorisation state.** Only submitted or approved cases can be cancelled. The case cannot be cancelled from its current state. +- **"Invalid input, code and reason code received."** The combination of task code, reason code and inputs is not one the payer accepts. Use `cancel` with a reason from `ndhm-reason-code` and both inputs. +- **"Invalid case number received."** Send the preauthorisation number in both `claimNumber` and `initimationNumber`. +- **[PAYR-1017](../errors/payr-1017.md) or [PAYR-1018](../errors/payr-1018.md).** The task code or the task reason code is missing. diff --git a/catalogue/nhcx/fhir/preauth-enhancement.md b/catalogue/nhcx/fhir/preauth-enhancement.md new file mode 100644 index 000000000..06ccbf8ae --- /dev/null +++ b/catalogue/nhcx/fhir/preauth-enhancement.md @@ -0,0 +1,225 @@ +--- +id: nhcx.fhir.preauth-enhancement +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Preauthorisation enhancement request and response bundles +summary: >- + How a hospital asks the payer to raise an approved preauthorisation by adding + a package, and how the payer's answer lists each package. +sources: +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/preauth/enhancement/enhancement_req.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Claim.item, Claim.procedure. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/preauth/enhancement/enhancement_resp.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. ClaimResponse.item, total. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 6.6 Claim conditions. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q2 sandbox base URLs. +verified: + status: unverified +related: + concepts: + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.preauth-enhancement + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.preauth-response + - nhcx.fhir.pmjay-insurance-plan + - nhcx.fhir.validation + errors: + - nhcx.error.payr-1025 + - nhcx.error.payr-1026 + - nhcx.error.payr-1027 + - nhcx.error.payr-1028 + glossary: + - nhcx.glossary.enhancement + - nhcx.glossary.preauthorisation + - shared.glossary.fhir +--- + +# Preauthorisation enhancement request and response bundles + +## In plain words + +An [enhancement](../glossary/enhancement.md) asks the payer to extend a [preauthorisation](../glossary/preauthorisation.md) it already decided. You need one when the patient needs a second package or a higher level of care. + +You resend the same `Claim`, with the same claim number, on `/v1/preauth/submit`. Keep every earlier item and add the new one. The payer answers on `/v1/preauth/on_submit` with one adjudicated line per item. + +## Before you start + +- The original preauthorisation has a decision. See [the preauthorisation response](preauth-response.md). +- The new package allows enhancement. In the PMJAY InsurancePlan, its `Claim-Condition` flag `EnhancementAllowed` is `Y`. See [the PMJAY InsurancePlan](pmjay-insurance-plan.md). +- You have the documents the new package requires. + +## What happens + +### The request + +Start from the [preauthorisation bundle](preauth-request.md) and change these elements: + +- Keep `Claim.identifier` and `use: preauthorization`. +- Keep each earlier `item` with its original `sequence`. +- Add the new item with the next `sequence`, its own `Procedure` entry, and a `procedureSequence` pointing at it. +- Add `supportingInfo` entries for the new package's documents. +- Set `total` to the sum of all item `net` values. + +The changed parts of the `Claim`: + +```json +{ + "procedure": [ + { + "sequence": 1, + "procedureReference": { + "reference": "urn:uuid:" + } + }, + { + "sequence": 2, + "procedureReference": { + "reference": "urn:uuid:" + } + } + ], + "item": [ + { + "sequence": 1, + "careTeamSequence": [ + 1 + ], + "diagnosisSequence": [ + 1 + ], + "procedureSequence": [ + 1 + ], + "informationSequence": [ + 1 + ], + "category": { + "coding": [ + { + "system": "", + "code": "" + } + ] + }, + "productOrService": { + "coding": [ + { + "system": "", + "code": "", + "display": "" + } + ] + }, + "servicedPeriod": { + "start": "", + "end": "" + }, + "quantity": { + "value": 1 + }, + "unitPrice": { + "value": "" + }, + "net": { + "value": "" + } + }, + { + "sequence": 2, + "careTeamSequence": [ + 1 + ], + "diagnosisSequence": [ + 1 + ], + "procedureSequence": [ + 2 + ], + "informationSequence": [ + 1 + ], + "category": { + "coding": [ + { + "system": "", + "code": "" + } + ] + }, + "productOrService": { + "coding": [ + { + "system": "", + "code": "", + "display": "" + } + ] + }, + "servicedPeriod": { + "start": "", + "end": "" + }, + "quantity": { + "value": 1 + }, + "unitPrice": { + "value": "" + }, + "net": { + "value": "" + } + } + ], + "total": { + "value": "" + } +} +``` + +Add a second `Procedure` entry with `id` ``, shaped like the first. + +### The response + +A `ClaimResponse` with one `item` per `itemSequence`, each with its own `eligible` amount and `status`. The `benefit` total and the `PMJAY-T` `eligible` total cover all approved items. + +## How you know it worked + +Run the validator recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)): + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile https://nrces.in/ndhm/fhir/r4/StructureDefinition/ClaimBundle +``` + +It exits with code 0 and reports no errors. + +Then `/v1/preauth/on_submit` arrives with a `ClaimResponse` for the same claim number. It has an `item` for the new `itemSequence`, with `status` `Approved` when the payer accepts it. + +## When it goes wrong + +- **[PAYR-1027](../errors/payr-1027.md) or [PAYR-1028](../errors/payr-1028.md).** An item id or sequence is invalid. Keep the original sequences and number the new item after them. +- **[PAYR-1025](../errors/payr-1025.md) or [PAYR-1026](../errors/payr-1026.md).** A procedure sequence is invalid, or `Claim.procedure` points at a Procedure missing from the bundle. +- **The payer rejects the new item.** Check `EnhancementAllowed` for the package in the InsurancePlan before you send. +- **The response lists the new item first.** Match lines on `itemSequence`, not on position. diff --git a/catalogue/nhcx/fhir/preauth-request.md b/catalogue/nhcx/fhir/preauth-request.md new file mode 100644 index 000000000..f5028d13e --- /dev/null +++ b/catalogue/nhcx/fhir/preauth-request.md @@ -0,0 +1,565 @@ +--- +id: nhcx.fhir.preauth-request +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Preauthorisation request bundle, a Claim with use preauthorization +summary: >- + The bundle a hospital sends to ask a payer to approve a planned treatment before + it happens, with the package, the diagnosis and the required documents. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 8.4. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/preauth/preauth_request.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. whole bundle. +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications/domain-data-specifications/domain-data-models/e-objects + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__domain-data-specifications__domain-data-models__e-objects.md + hash: sha256:1d5d7553c709c4d237d623bc77259999f84c1b114ab51b25112cbed075352c5b + fetched: '2026-09-14' + note: Site page /domain-specifications/domain-data-specifications/domain-data-models/e-objects, text as shown on the site. Claim Request. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.claim-cycle + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.insurance-plan + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + fhir: + - nhcx.fhir.collection-bundle + - nhcx.fhir.preauth-response + - nhcx.fhir.preauth-enhancement + - nhcx.fhir.pmjay-insurance-plan + - nhcx.fhir.claim-request + - nhcx.fhir.terminologies + - nhcx.fhir.validation + decisions: + - nhcx.decision.preauth-or-predetermination + errors: + - nhcx.error.payr-1011 + - nhcx.error.payr-1012 + - nhcx.error.payr-1079 + - nhcx.error.payr-1083 + - nhcx.error.payr-1019 + - nhcx.error.payr-1020 + - nhcx.error.payr-1021 + - nhcx.error.payr-1036 + - nhcx.error.payr-1086 + - nhcx.error.payr-1513 + tests: + - nhcx.test.provider-uc-07 + - nhcx.test.tc-pa-01 + glossary: + - nhcx.glossary.preauthorisation + - nhcx.glossary.claim + - shared.glossary.fhir + - shared.glossary.snomed-ct + - shared.glossary.hpr +--- + +# Preauthorisation request bundle, a Claim with use preauthorization + +## In plain words + +A [preauthorisation](../glossary/preauthorisation.md) asks the payer to approve a treatment before the hospital delivers it. It is a [FHIR](../../shared/glossary/fhir.md) `ClaimBundle` whose focal resource is a `Claim` with `use` set to `preauthorization`. + +The same `Claim` shape later carries the final claim with `use` set to `claim`. You send the preauthorisation on `/v1/preauth/submit`. + +## Before you start + +- You have the payer's insurance plan. It gives you the specialty, package and stratification codes, and the documents each package needs. See [the PMJAY InsurancePlan](pmjay-insurance-plan.md). +- An eligibility check with purpose `auth-requirements` told you the package needs approval. See [the eligibility response](coverage-eligibility-response.md). +- You hold the treating doctor's [HPR](../../shared/glossary/hpr.md) id. +- Each required document is ready as a PDF or image to encode in base64, or as an ABDM health record to reference. + +## What happens + +### Resources in the bundle + +| Resource | Role | +|---|---| +| `Claim` (`use` = `preauthorization`) | The request: items, diagnosis, procedure, documents, total | +| `Patient` | Identifiers typed `PMJAY` and `ABHA` | +| `Organization` (provider, payer) | `NPI` carrying your HFR ID; `NIIP` for the payer | +| `Coverage` | The policy, identifier typed `NH` | +| `Practitioner` | The care team member, identifier typed `HPIN` on `https://hpr.abdm.gov.in` | +| `Procedure` | One per item, referenced from `Claim.procedure` | +| ABDM record Compositions and their resources | Clinical documents referenced from `Claim.supportingInfo` | + +### Claim elements + +| Element | What goes in it | +|---|---| +| `identifier` | Your claim number, typed `CLN` from `ndhm-identifier-type-code` | +| `type` | SNOMED CT `737481003` "Inpatient care management (procedure)" | +| `use` | `preauthorization` | +| `priority` | `normal` from `processpriority` | +| `careTeam` | At least one entry, pointing at the Practitioner | +| `diagnosis` | ICD-10 code as a `diagnosisCodeableConcept` | +| `procedure` | One entry per Procedure resource | +| `insurance` | `focal: true`, pointing at the Coverage | +| `item` | Specialty in `category`, package in `productOrService`, dates, quantity, price, and the `procedureSequence` and `informationSequence` it uses | +| `supportingInfo` | One entry per required document, with `sequence`, `category`, `code` and a value | +| `total` | The sum of item `net` values | + +Copy the specialty, package, stratification and document codings exactly as the payer's InsurancePlan gives them. Put a stratification, such as a ward or ICU level, in `item.modifier`. + +A document goes in `supportingInfo` in one of two ways. Send a `valueAttachment` with base64 `data`, a `contentType` such as `application/pdf`, and a `title`. Or send a `valueReference` to a Composition in the bundle. + +### Minimal bundle + +```json +{ + "resourceType": "Bundle", + "id": "", + "meta": { + "lastUpdated": "" + }, + "identifier": { + "system": "", + "value": "" + }, + "type": "collection", + "timestamp": "", + "entry": [ + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Claim", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Claim" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "CLN", + "display": "Claim number" + } + ] + }, + "system": "", + "value": "" + } + ], + "status": "active", + "type": { + "coding": [ + { + "system": "http://snomed.info/sct", + "code": "737481003", + "display": "Inpatient care management (procedure)" + } + ] + }, + "use": "preauthorization", + "patient": { + "reference": "urn:uuid:" + }, + "created": "", + "insurer": { + "reference": "urn:uuid:" + }, + "provider": { + "reference": "urn:uuid:" + }, + "priority": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/processpriority", + "code": "normal" + } + ] + }, + "careTeam": [ + { + "sequence": 1, + "provider": { + "reference": "urn:uuid:" + } + } + ], + "supportingInfo": [ + { + "sequence": 1, + "category": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", + "code": "" + } + ] + }, + "code": { + "coding": [ + { + "system": "", + "code": "" + } + ] + }, + "valueAttachment": { + "contentType": "application/pdf", + "title": "", + "data": "" + } + } + ], + "diagnosis": [ + { + "sequence": 1, + "diagnosisCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/sid/icd-10", + "code": "", + "display": "" + } + ] + } + } + ], + "procedure": [ + { + "sequence": 1, + "procedureReference": { + "reference": "urn:uuid:" + } + } + ], + "insurance": [ + { + "sequence": 1, + "focal": true, + "coverage": { + "reference": "urn:uuid:" + } + } + ], + "item": [ + { + "sequence": 1, + "careTeamSequence": [ + 1 + ], + "diagnosisSequence": [ + 1 + ], + "procedureSequence": [ + 1 + ], + "informationSequence": [ + 1 + ], + "category": { + "coding": [ + { + "system": "", + "code": "" + } + ] + }, + "productOrService": { + "coding": [ + { + "system": "", + "code": "", + "display": "" + } + ] + }, + "servicedPeriod": { + "start": "", + "end": "" + }, + "quantity": { + "value": 1 + }, + "unitPrice": { + "value": "" + }, + "net": { + "value": "" + } + } + ], + "total": { + "value": "" + } + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Patient", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Patient" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "PMJAY" + } + ] + }, + "system": "https://bis.pmjay.gov.in", + "value": "" + }, + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "ABHA" + } + ] + }, + "system": "https://bis.pmjay.gov.in", + "value": "" + } + ], + "name": [ + { + "text": "" + } + ], + "gender": "", + "birthDate": "" + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Organization", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Organization" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NPI", + "display": "National provider identifier" + } + ] + }, + "system": "https://facility.abdm.gov.in", + "value": "" + } + ], + "type": [ + { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/organization-type", + "code": "prov", + "display": "Healthcare Provider" + } + ] + } + ], + "name": "" + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Organization", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Organization" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NIIP", + "display": "National Insurance Payor Identifier (Payor)" + } + ] + }, + "system": "https://facility.abdm.gov.in", + "value": "" + } + ], + "type": [ + { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/organization-type", + "code": "pay", + "display": "Payer" + } + ] + } + ], + "name": "" + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Coverage", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Coverage" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NH", + "display": "National Health Plan Identifier" + } + ] + }, + "system": "", + "value": "" + } + ], + "status": "active", + "beneficiary": { + "reference": "urn:uuid:" + }, + "payor": [ + { + "reference": "urn:uuid:" + } + ] + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Practitioner", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Practitioner" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "HPIN" + } + ] + }, + "system": "https://hpr.abdm.gov.in", + "value": "" + } + ], + "name": [ + { + "text": "" + } + ] + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Procedure", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Procedure" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "SNO", + "display": "Serial Number" + } + ] + }, + "system": "", + "value": "1" + } + ], + "status": "preparation", + "code": { + "coding": [ + { + "system": "", + "code": "", + "display": "" + } + ] + }, + "subject": { + "reference": "urn:uuid:" + } + } + } + ] +} +``` + +## How you know it worked + +Run the validator recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)): + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile https://nrces.in/ndhm/fhir/r4/StructureDefinition/ClaimBundle +``` + +It exits with code 0 and reports no errors. + +After you send the bundle, `/v1/preauth/on_submit` arrives with a `ClaimResponse` whose identifier carries your claim number. See [the preauthorisation response](preauth-response.md). + +## When it goes wrong + +- **[PAYR-1011](../errors/payr-1011.md) or [PAYR-1012](../errors/payr-1012.md).** The Claim identifier or its `type` is missing. Add the `CLN` identifier. +- **[PAYR-1079](../errors/payr-1079.md) or [PAYR-1083](../errors/payr-1083.md).** No care team, or no HPR id on the Practitioner. Add `careTeam` and a Practitioner identifier typed `HPIN`. +- **[PAYR-1019](../errors/payr-1019.md), [PAYR-1020](../errors/payr-1020.md) or [PAYR-1021](../errors/payr-1021.md).** A `supportingInfo` sequence, category or code is invalid. Copy the category and code from the InsurancePlan requirement. +- **[PAYR-1036](../errors/payr-1036.md), or "Invalid Base64 value received in attachment".** The attachment is not base64, or `contentType` or `title` is empty. Allowed content types are `application/pdf`, `application/jpg`, `application/jpeg`, `application/png` and `application/fhir+json`. +- **[PAYR-1086](../errors/payr-1086.md): no procedure resource found for url.** `Claim.procedure` points at a Procedure that is not in the bundle. +- **[PAYR-1513](../errors/payr-1513.md): invalid diagnosis.** Send the diagnosis as `diagnosisCodeableConcept`, not as a reference. diff --git a/catalogue/nhcx/fhir/preauth-response.md b/catalogue/nhcx/fhir/preauth-response.md new file mode 100644 index 000000000..7bde9cd4b --- /dev/null +++ b/catalogue/nhcx/fhir/preauth-response.md @@ -0,0 +1,261 @@ +--- +id: nhcx.fhir.preauth-response +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Preauthorisation response bundle, a ClaimResponse +summary: >- + The payer's decision on a preauthorisation: approved, partly approved, queried + or rejected, with the amounts it will cover. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 8.5-8.5.4. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/preauth/preauthresponse_with_query.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. ClaimResponse. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/preauth/Query/preauth_response_queryUpdate_App.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. ClaimResponse. +verified: + status: unverified +related: + concepts: + - nhcx.concept.claim-cycle + - nhcx.concept.queries-and-communication + - nhcx.concept.fhir-in-nhcx + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-query-response + - nhcx.flow.payer-process-a-request + endpoints: + - nhcx.endpoint.preauth-on-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.query-update + - nhcx.fhir.claim-response + - nhcx.fhir.collection-bundle + errors: + - nhcx.error.nhcx-1015 + - nhcx.error.nhcx-1017 + tests: + - nhcx.test.payer-uc-09 + glossary: + - nhcx.glossary.preauthorisation + - nhcx.glossary.adjudication + - shared.glossary.fhir +--- + +# Preauthorisation response bundle, a ClaimResponse + +## In plain words + +The payer answers a [preauthorisation](../glossary/preauthorisation.md) with a [FHIR](../../shared/glossary/fhir.md) `ClaimResponseBundle` on `/v1/preauth/on_submit`. The focal resource is a `ClaimResponse` with `use` set to `preauthorization`. + +It carries one of four decisions: approved, partially approved, queried or rejected. Read two fields together to know which one you have. + +## Before you start + +- As a provider, you sent a [preauthorisation request](preauth-request.md) and stored your claim number, item sequences and correlation id. +- You can open a sealed callback. See [receive, open and acknowledge a sealed message](../flows/receive-a-sealed-callback.md). +- As a payer, you have adjudicated the request. See [receive, adjudicate and answer a request](../flows/payer-process-a-request.md). + +## What happens + +### Resources in the bundle + +`ClaimResponse`, the payer's `Patient` and `Coverage`, and the payer and provider `Organization` resources. Payer-built resources carry the `SUBSETTED` tag. + +### Reading the decision + +| Decision | `outcome` | `adjudication[0].reason.coding.code` | Next step | +|---|---|---|---| +| Approved | `complete` | `approved` | Treat the patient. Keep `preAuthRef` when present. | +| Partially approved | `partial` | `approved` | Read `processNote` for the reduction. | +| Queried | `partial` | `queried` | Answer with a [query update](query-update.md). | +| Rejected | `complete` | `cancelled` | The request is closed. | + +### Other elements + +| Element | Meaning | +|---|---| +| `identifier` | Your claim number, typed `CLN` | +| `disposition` | The decision in free text | +| `item[].itemSequence` | The `Claim.item.sequence` the line answers | +| `item[].adjudication[]` | Categories `eligible` (amount), `reason` (query history), `eligpercent`, `eligquant`, `status` (`Approved` or `Queried`) | +| `total[]` | `benefit` total, and an `eligible` total with id `PMJAY-T` | +| `processNote[]` | Explanation of a reduction, linked from `item.noteNumber` | + +The `reason` adjudication carries a pipe-separated history. Each part reads `USER~date and time~type~comment~trust`. Parse it as plain text. + +### Minimal response resource + +A payer's bundle carries this entry plus the `Patient`, `Coverage` and `Organization` entries it references. + +```json +{ + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "ClaimResponse", + "id": "", + "identifier": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code", + "code": "CLN", + "display": "Claim number" + } + ] + }, + "system": "", + "value": "" + } + ], + "status": "active", + "type": { + "coding": [ + { + "system": "http://snomed.info/sct", + "code": "737481003", + "display": "Inpatient care management (procedure)" + } + ] + }, + "use": "preauthorization", + "patient": { + "reference": "" + }, + "created": "", + "insurer": { + "reference": "" + }, + "requestor": { + "reference": "" + }, + "outcome": "complete", + "disposition": "", + "payeeType": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/payeetype", + "code": "provider", + "display": "Provider" + } + ] + }, + "item": [ + { + "itemSequence": 1, + "adjudication": [ + { + "category": { + "coding": [ + { + "system": "https://hl7.org/fhir/R4/valueset-adjudication.html", + "code": "eligible", + "display": "Eligible Amount" + } + ] + }, + "amount": { + "value": "" + } + }, + { + "category": { + "coding": [ + { + "system": "https://hl7.org/fhir/R4/valueset-adjudication.html", + "code": "status", + "display": "Item adjudication status" + } + ] + }, + "reason": { + "coding": [ + { + "code": "Approved", + "display": "Approved" + } + ] + } + } + ] + } + ], + "adjudication": [ + { + "category": { + "coding": [ + { + "code": "status", + "display": "Status" + } + ] + }, + "reason": { + "coding": [ + { + "code": "approved", + "display": "Approved" + } + ] + } + } + ], + "total": [ + { + "category": { + "coding": [ + { + "system": "https://hl7.org/fhir/R4/valueset-adjudication.html", + "code": "benefit", + "display": "Benefit Amount" + } + ] + }, + "amount": { + "value": "" + } + } + ] + } +} +``` + +## How you know it worked + +As a provider: + +- `/v1/preauth/on_submit` arrives with a `ClaimResponse` whose `identifier` value equals your claim number. +- `outcome` and `adjudication[0].reason.coding.code` map to one row of the decision table. + +As a payer, run the validator recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)): + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile https://nrces.in/ndhm/fhir/r4/StructureDefinition/ClaimResponseBundle +``` + +It exits with code 0 and reports no errors. + +## When it goes wrong + +- **You treated `outcome: complete` as approval.** A rejection is also `complete`. Always read `adjudication[0].reason.coding.code` as well. +- **Amounts land on the wrong item.** Items can arrive in any order. Match `item.itemSequence` to your `Claim.item.sequence`. +- **The requestor Organization is not yours.** The payer may identify your facility by its own id. Match the response on claim number and correlation id instead. +- **Your parser expects a currency.** Adjudication amounts carry `value` only. Treat them as INR. +- **A payer's validator run fails on `ClaimResponse.type`.** Base FHIR R4 requires `type`. Include it. +- **[NHCX-1015](../errors/nhcx-1015.md): invalid response received from receiver.** The exchange rejected the payer's response. The payer corrects and resends it. diff --git a/catalogue/nhcx/fhir/query-update.md b/catalogue/nhcx/fhir/query-update.md new file mode 100644 index 000000000..63ed4bc51 --- /dev/null +++ b/catalogue/nhcx/fhir/query-update.md @@ -0,0 +1,231 @@ +--- +id: nhcx.fhir.query-update +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Query update bundles for preauthorisation and claim +summary: >- + How to recognise a payer's query on a preauthorisation or claim, and how to resend + the same claim with the documents and answers the payer asked for. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 8.5.3 and 9.5.4. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/preauth/Query/preauth_queryUpdate_req.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Claim.supportingInfo, QuestionnaireResponse. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/claim/claim_queryUpdate_req.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Claim. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheets Preauth and Claim Error Codes (PAYR-1504, PAYR-1505). +verified: + status: unverified +related: + concepts: + - nhcx.concept.queries-and-communication + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-query-response + fhir: + - nhcx.fhir.preauth-response + - nhcx.fhir.claim-response + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.pmjay-insurance-plan + sandbox: + - nhcx.sandbox.dummy-payer + errors: + - nhcx.error.payr-1504 + - nhcx.error.payr-1505 + - nhcx.error.payr-1084 + - nhcx.error.payr-1085 + - nhcx.error.payr-1047 + tests: + - nhcx.test.tc-pa-02 + - nhcx.test.tc-cl-02 + - nhcx.test.provider-uc-08 + glossary: + - nhcx.glossary.preauthorisation + - nhcx.glossary.claim + - shared.glossary.fhir +--- + +# Query update bundles for preauthorisation and claim + +## In plain words + +A payer that cannot decide a [preauthorisation](../glossary/preauthorisation.md) or [claim](../glossary/claim.md) raises a query. It answers with a `ClaimResponse` that is still open and asks for more information. + +You answer by resending the same `Claim`, with the same claim number, carrying the extra documents and answers in `supportingInfo`. The payer then sends a fresh decision. + +## Before you start + +- You received a [preauthorisation response](preauth-response.md) or [claim response](claim-response.md) marked as queried. +- You hold the original request bundle, or can rebuild it with the same claim number and items. +- You have the documents the query asks for. +- For the transport, follow [answer a query on a preauthorisation](../flows/preauth-query-response.md) or [answer a query on a claim](../flows/claim-query-response.md). + +## What happens + +### Recognising a query + +| Element | Value on a queried response | +|---|---| +| `ClaimResponse.outcome` | `partial` | +| `ClaimResponse.adjudication[0].reason.coding.code` | `queried` | +| `item[].adjudication[]` with category `status` | reason `Queried` | +| `item[].adjudication[]` with category `reason` | the query history in `reason.coding[0].display` | +| `total[]` | `0` while the query is open | + +The history is pipe-separated. Each part reads `USER~date and time~type~comment~trust`. The latest part is the payer's current question. + +### Building the update + +Start from your original request bundle and change these parts: + +- Keep `Claim.identifier`, `use` and every `item`. +- Add the requested documents to `supportingInfo`, as attachments or as references to ABDM record Compositions in the bundle. +- Put case-level remarks in a `supportingInfo` entry with category `NMI` and code `CQD`, as a `valueString`. +- Put a policy or case questionnaire answer in an entry with category `INF` and code `ODN`. Its `valueReference` points at a `QuestionnaireResponse` in the bundle. +- Put a Standard Treatment Guidelines answer in an entry with category `STG`, referencing its `QuestionnaireResponse`. + +The added `supportingInfo` entries: + +```json +{ + "supportingInfo": [ + { + "sequence": 1, + "category": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", + "code": "" + } + ] + }, + "code": { + "coding": [ + { + "system": "", + "code": "" + } + ] + }, + "valueAttachment": { + "contentType": "application/pdf", + "title": "", + "data": "" + } + }, + { + "sequence": 2, + "category": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", + "code": "NMI" + } + ] + }, + "code": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code", + "code": "CQD" + } + ] + }, + "valueString": "" + }, + { + "sequence": 3, + "category": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category", + "code": "INF" + } + ] + }, + "code": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/ValueSet/ndhm-supportinginfo-code", + "code": "ODN", + "display": "Other document" + } + ] + }, + "valueReference": { + "reference": "urn:uuid:" + } + } + ] +} +``` + +The `QuestionnaireResponse` entry they reference: + +```json +{ + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "QuestionnaireResponse", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/QuestionnaireResponse" + ] + }, + "questionnaire": "", + "status": "completed", + "item": [ + { + "linkId": "", + "answer": [ + { + "valueString": "" + } + ] + } + ] + } +} +``` + +Take the `questionnaire` URL and each `linkId` from the payer's InsurancePlan. See [the PMJAY InsurancePlan](pmjay-insurance-plan.md). + +## How you know it worked + +Run the validator recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)): + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile https://nrces.in/ndhm/fhir/r4/StructureDefinition/ClaimBundle +``` + +It exits with code 0 and reports no errors. + +The payer's next response for the same claim number no longer has reason `queried`. Its `outcome` and reason code map to approved, partially approved or rejected. + +## When it goes wrong + +- **[PAYR-1504](../errors/payr-1504.md): wrong value type for `NMI` and `CQD`.** Send the remarks as a `valueString`. +- **[PAYR-1505](../errors/payr-1505.md): wrong category or code for a questionnaire response.** Use `INF` with `ODN` for a policy or case questionnaire, and `STG` for a treatment-guideline questionnaire. +- **[PAYR-1084](../errors/payr-1084.md) or [PAYR-1085](../errors/payr-1085.md).** The referenced `QuestionnaireResponse` is missing from the bundle, or the reference points at another resource type. +- **[PAYR-1047](../errors/payr-1047.md): invalid reference in supporting info.** A `valueReference` does not resolve to a resource in the bundle. +- **You sent a new claim number.** The payer treats it as a new case. Reuse the original claim number. diff --git a/catalogue/nhcx/fhir/task.md b/catalogue/nhcx/fhir/task.md new file mode 100644 index 000000000..82ecceb45 --- /dev/null +++ b/catalogue/nhcx/fhir/task.md @@ -0,0 +1,307 @@ +--- +id: nhcx.fhir.task +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Task bundle for reprocess and CRC +summary: >- + The task a hospital sends to dispute a rejected or underpaid claim, which routes + the case to the claim review committee, and the task that carries the payer's + final decision back. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sections 22 Erroneous Claim and 23 Claim Reprocess. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 10.4 and 10.5. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Reprocess; sheet Value sets, Task Codes. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Bridge Error. +verified: + status: unverified +related: + concepts: + - nhcx.concept.reprocess-and-cancel + - nhcx.concept.claim-cycle + flows: + - nhcx.flow.claim-reprocess + endpoints: + - nhcx.endpoint.task-submit + - nhcx.endpoint.task-on-submit + callbacks: + - nhcx.callback.task-on-submit + fhir: + - nhcx.fhir.claim-response + - nhcx.fhir.preauth-cancel + - nhcx.fhir.payment-notice + - nhcx.fhir.collection-bundle + - nhcx.fhir.validation + errors: + - nhcx.error.payr-1017 + - nhcx.error.payr-1018 + - nhcx.error.payr-1332 + tests: + - nhcx.test.tc-cl-03 + - nhcx.test.provider-uc-12 + - nhcx.test.payer-uc-14 + glossary: + - nhcx.glossary.reprocess + - nhcx.glossary.crc + - nhcx.glossary.pmjay + - shared.glossary.fhir +--- + +# Task bundle for reprocess and CRC + +## In plain words + +A hospital that disputes a claim decision asks for [reprocessing](../glossary/reprocess.md) with a `TaskBundle` on `/v1/task/submit`. The `Task` has code `reprocess`, a reason, the claim number and a supporting document. + +Under [PMJAY](../glossary/pmjay.md), a reprocess request goes to the Claim Review Committee ([CRC](../glossary/crc.md)). Its decision is final. The payer returns it on `/v1/task/on_submit` as a completed `Task` pointing at a `ClaimResponse`. + +## Before you start + +- You received a claim decision you dispute. See [the claim response](claim-response.md). +- You know which case you have: + +| | Reprocess | Erroneous claim | +|---|---|---| +| When | The claim was fully rejected | The claim was paid, but less than payable | +| Earliest | As soon as the rejection arrives | After the payment cleared notice | +| `reasonCode` | `claimrejected` | `partialpayment` | +| Amount | None sent; the full claim is implied | The shortfall, never more than claimed minus approved | +| Supporting document | Mandatory | Mandatory | +| Times per claim under PMJAY | Once | Once | + +- You hold a document that justifies the request. +- You have not already received a CRC decision on this claim. No erroneous claim can follow a CRC decision. + +## What happens + +### Task codes on `/v1/task/submit` + +`Task.code` comes from `http://terminology.hl7.org/CodeSystem/financialtaskcode`. Use `reprocess` for a reprocess request. The same path carries `cancel` (see [preauthorisation cancel](preauth-cancel.md)), `release` and `nullify`. + +### The request + +| Element | Value | +|---|---| +| `Task.status` | `requested` | +| `Task.intent` | `order` | +| `Task.code` | `reprocess` | +| `Task.reasonCode` | `claimrejected` or `partialpayment`, from `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | +| `Task.input` | `claimNumber` and `initimationNumber` carrying the original claim number, and a `document` input with the supporting file as `valueAttachment`, all from `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code` | +| `Task.requester`, `Task.owner` | Your Organization and the payer's | + +The request carries the original claim number. It does not create a new case number. + +```json +{ + "resourceType": "Bundle", + "id": "", + "meta": { + "lastUpdated": "" + }, + "identifier": { + "system": "", + "value": "" + }, + "type": "collection", + "timestamp": "", + "entry": [ + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Task", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Task" + ] + }, + "status": "requested", + "intent": "order", + "code": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/financialtaskcode", + "code": "reprocess", + "display": "Reprocess" + } + ] + }, + "description": "", + "authoredOn": "", + "requester": { + "reference": "urn:uuid:" + }, + "owner": { + "reference": "urn:uuid:" + }, + "reasonCode": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code", + "code": "claimrejected" + } + ] + }, + "input": [ + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code", + "code": "claimNumber" + } + ] + }, + "valueString": "" + }, + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code", + "code": "initimationNumber" + } + ] + }, + "valueString": "" + }, + { + "type": { + "coding": [ + { + "system": "https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code", + "code": "document" + } + ] + }, + "valueAttachment": { + "contentType": "application/pdf", + "title": "", + "data": "" + } + } + ] + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Organization", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Organization" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NPI", + "display": "National provider identifier" + } + ] + }, + "system": "https://facility.abdm.gov.in", + "value": "" + } + ], + "type": [ + { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/organization-type", + "code": "prov", + "display": "Healthcare Provider" + } + ] + } + ], + "name": "" + } + }, + { + "fullUrl": "urn:uuid:", + "resource": { + "resourceType": "Organization", + "id": "", + "meta": { + "profile": [ + "https://nrces.in/ndhm/fhir/r4/StructureDefinition/Organization" + ] + }, + "identifier": [ + { + "type": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/v2-0203", + "code": "NIIP", + "display": "National Insurance Payor Identifier (Payor)" + } + ] + }, + "system": "https://facility.abdm.gov.in", + "value": "" + } + ], + "type": [ + { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/organization-type", + "code": "pay", + "display": "Payer" + } + ] + } + ], + "name": "" + } + } + ] +} +``` + +### The response + +The payer's bundle holds a `Task` with `status` `completed`. `Task.output[0].valueReference` points at a `ClaimResponse` in the same bundle. Read that `ClaimResponse` exactly as you read a [claim response](claim-response.md): approved, partially approved, queried or rejected. + +## How you know it worked + +Run the validator recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)): + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile https://nrces.in/ndhm/fhir/r4/StructureDefinition/TaskBundle +``` + +It exits with code 0 and reports no errors. + +Then `/v1/task/on_submit` arrives with a completed `Task`. Its output resolves to a `ClaimResponse` carrying your claim number and the committee's decision. + +## When it goes wrong + +- **"Invalid input, code and reason code received."** The task code, reason code and inputs are not an accepted combination. Pair `reprocess` with `claimrejected` for a rejection, or with `partialpayment` for an erroneous claim. +- **"Invalid case number received."** Send the original claim number in `claimNumber` and `initimationNumber`. +- **[PAYR-1017](../errors/payr-1017.md) or [PAYR-1018](../errors/payr-1018.md).** The task code or the reason code is missing. +- **[PAYR-1332](../errors/payr-1332.md): invalid CRC request.** Check that the claim was rejected or partially paid, and that no request was already raised for it. Each claim allows one request under PMJAY. +- **An erroneous claim is refused.** Raise it only after the payment cleared notice, and keep the amount within the shortfall. diff --git a/catalogue/nhcx/fhir/terminologies.md b/catalogue/nhcx/fhir/terminologies.md new file mode 100644 index 000000000..9e488ce3f --- /dev/null +++ b/catalogue/nhcx/fhir/terminologies.md @@ -0,0 +1,152 @@ +--- +id: nhcx.fhir.terminologies +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Code systems and value sets used in NHCX bundles +summary: >- + The code systems every claims bundle draws on, where each one is used, and how + strictly each binding applies. +sources: +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications/domain-data-specifications/terminologies + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications__domain-data-specifications__terminologies.md + hash: sha256:1cdf48ceb570f19500e672dfb1140271aca01274a1d8c3e83cad336d5a5b082d + fetched: '2026-09-14' + note: Site page /domain-specifications/domain-data-specifications/terminologies, text as shown on the site. Guidlines and proposed binding table. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Appendix A.2, A.3; Sections 10.4, 11.5-11.6; Quick Reference. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/preauth/preauth_request.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. coding systems throughout. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/coverageeligibility/coverageresponse_validation.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. meta.tag, Coverage.class. +verified: + status: unverified +related: + fhir: + - nhcx.fhir.collection-bundle + - nhcx.fhir.validation + - nhcx.fhir.pmjay-insurance-plan + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + concepts: + - nhcx.concept.fhir-in-nhcx + errors: + - nhcx.error.payr-1020 + - nhcx.error.payr-1021 + - nhcx.error.payr-1010 + glossary: + - shared.glossary.snomed-ct + - shared.glossary.fhir + - shared.glossary.nrces + - nhcx.glossary.pmjay +--- + +# Code systems and value sets used in NHCX bundles + +## In plain words + +A code system is a published list of codes, such as diagnoses or document types. Claims bundles use international systems like [SNOMED CT](../../shared/glossary/snomed-ct.md), LOINC and ICD-10, and Indian systems published by [NRCeS](../../shared/glossary/nrces.md). + +Payers match codes by exact system URL and code. A code under the wrong system URL fails, even when the code itself is right. + +## Before you start + +- You know which bundle you are building. See [the collection bundle](collection-bundle.md). +- For PMJAY package, specialty, stratification and document codes, you have the payer's insurance plan. See [the PMJAY InsurancePlan](pmjay-insurance-plan.md). + +## What happens + +### Clinical terminologies + +| Terminology | System URL | Used for | +|---|---|---| +| SNOMED CT | `http://snomed.info/sct` | Procedures, clinical findings, `Claim.type` (`737481003` Inpatient care management) | +| LOINC | `http://loinc.org` | Laboratory and clinical observations | +| ICD-10 | `http://hl7.org/fhir/sid/icd-10` | `Claim.diagnosis` | + +In India, SNOMED CT is free to use. ICD codes classify diseases. Laboratories use LOINC. + +### NRCeS code systems + +| System URL | Carries | Example codes | +|---|---|---| +| `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-identifier-type-code` | Identifier types | `PMJAY`, `ABHA`, `HPID`, `HPIN`, `CLN` (claim number), `UTR` | +| `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-category` | `Claim.supportingInfo.category` | `INV`, `DIA`, `DIS`, `ONS`, `OTH`, `NMI`, `INF`, `POI`, `DOB` | +| `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-supportinginfo-code` | `Claim.supportingInfo.code` | `DTH`, `DTM`, `LAMA`, `DAMA`, `ADDD`, `DSDE`, `PSP`, `EDT`, `CQD`, `BCF`, `DCB` | +| `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-reason-code` | `Task.reasonCode` | `treatmentplanchanged`, `claimrejected`, `partialpayment` | +| `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-input-type-code` | `Task.input.type` | `policyNumber`, `providerId`, `claimNumber`, `initimationNumber` | +| `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-output-type` | `Task.output.type` | `status`, `include` | +| `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-output-value` | `Task.output.value` | `paymentack` | +| `https://nrces.in/ndhm/fhir/r4/CodeSystem/ndhm-task-codes` | `Task.code` for payment notices | `deliver` | + +### HL7 code systems + +| System URL | Used for | +|---|---| +| `http://terminology.hl7.org/CodeSystem/v2-0203` | Identifier types `NPI` (facility HFR ID), `NIIP` (payer), `NH` (policy), `XV` (plan), `JHN`, `SNO`, `MR` | +| `http://terminology.hl7.org/CodeSystem/financialtaskcode` | `Task.code` `poll`, `cancel`, `reprocess`, `status` | +| `http://terminology.hl7.org/CodeSystem/processpriority` | `priority` `normal` | +| `http://terminology.hl7.org/CodeSystem/organization-type` | `prov`, `pay` | +| `http://terminology.hl7.org/CodeSystem/paymentstatus` | `paid` | +| `http://terminology.hl7.org/CodeSystem/v3-ObservationValue` | The `SUBSETTED` tag on payer-built resources | + +### PMJAY master codes + +PMJAY specialty, package, stratification and mandatory-document codes come from the payer's InsurancePlan. Examples are `MG` (General Medicine), `MG004A` (a package), `STRAT006b` (HDU, a high dependency unit) and `MAND0409` (a document). Copy each coding, system and code, exactly as the InsurancePlan gives it. + +### Binding strength + +A binding says how strictly an element must use its value set: + +- `required`: use a code from the value set. +- `preferred` or `extensible`: draw from the value set unless the domain has agreed otherwise. +- `example`: the domain must agree and define the value set. + +Proposed bindings for NHCX elements: + +| Element | Terminology | Binding | +|---|---|---| +| `CoverageEligibilityRequest.insurer` | Insurance company owners | Preferred | +| `Claim.procedure.type` | Procedure type | Example | +| `Claim.procedure.procedureCode` | Procedure code | Example | +| `ClaimResponse.item.adjudication.reason` | Denial codes | Preferred | +| `Claim.item.modifier` | Procedure modifiers | Example | +| `Claim.item.category` | Service categories | Example | +| `Claim.item.productOrService` | Service codes | Preferred | +| `PractitionerRole.speciality` | Medical speciality type | Preferred | +| `Claim.careTeam.role` | Health service provider role | Example | + +## How you know it worked + +Run the validator recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)) online, without `-tx n/a`, so codes are checked: + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile +``` + +It exits with code 0 and reports no binding errors. + +You have understood the codes when you can answer: + +1. Which system carries the facility's HFR ID type code `NPI`? +2. Where do you take a package code from before you put it in `Claim.item.productOrService`? + +## When it goes wrong + +- **A SNOMED code under the wrong URL.** Use `http://snomed.info/sct` exactly. Variants such as `https://snomed.info/sct` or `http://snomed.info/sct0` do not match. +- **An NRCeS URL spelled another way.** Use `https://nrces.in/ndhm/fhir/r4/CodeSystem/`. A `www.` host or a `CodeSystem-` page URL is a web page, not the system. +- **[PAYR-1020](../errors/payr-1020.md) or [PAYR-1021](../errors/payr-1021.md).** A `supportingInfo` category or code is invalid. Take it from the InsurancePlan requirement or the tables above. +- **[PAYR-1010](../errors/payr-1010.md).** An identifier carries no `type`. Add the type coding from `ndhm-identifier-type-code` or `v2-0203`. +- **A PMJAY code typed by hand.** Codes have trailing spaces and case rules. Copy them from the InsurancePlan bundle. diff --git a/catalogue/nhcx/fhir/validation.md b/catalogue/nhcx/fhir/validation.md new file mode 100644 index 000000000..52bc35854 --- /dev/null +++ b/catalogue/nhcx/fhir/validation.md @@ -0,0 +1,139 @@ +--- +id: nhcx.fhir.validation +type: fhir +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Validating an NHCX bundle before you send it +summary: >- + How to check a claims bundle against the national profiles on your own machine, + what the check covers, and the bundle review that precedes sandbox sign-off. +sources: +- url: https://hcxsbx.abdm.gov.in/images/2c3fbb4e6b09f0834f69.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Implementation Guide for Adoption of FHIR in ABDM and NHCX.pdf + hash: sha256:549377c9c26b1bd23decac3a1b9e5ebedfdc8e0fe99e53ef733859b188f51366 + fetched: '2026-09-14' + note: Implementation Guide for Adoption of FHIR in ABDM and NHCX, row 14 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 16-19 Validating FHIR Resources. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. section 7 reference documents. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8. +- url: https://hcxsbx.abdm.gov.in/images/2b7fde4358fd0a4b2086.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Code Snippets references for payload preparation.pdf + hash: sha256:cea0cfbf5897e9642eaf9a515a941b0a1de39474ea39444c9e05abe21cd9ec73 + fetched: '2026-09-14' + note: NHCX Code Snippets references for payload preparation, row 13 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1. +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use cases 5-7 Validations. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Bridge Error. +verified: + status: unverified +related: + fhir: + - shared.fhir.hl7-validator-recipe + - nhcx.fhir.collection-bundle + - nhcx.fhir.terminologies + - nhcx.fhir.preauth-request + - nhcx.fhir.claim-request + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.task + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.support-contacts + errors: + - nhcx.error.payr-1008 + - nhcx.error.payr-1004 + troubleshooting: + - nhcx.troubleshooting.bundle-rejected + glossary: + - shared.glossary.fhir + - shared.glossary.nrces +--- + +# Validating an NHCX bundle before you send it + +## In plain words + +Every bundle on the exchange must conform to the [NRCeS](../../shared/glossary/nrces.md) profiles, and both sides check it. The receiver validates what it gets. You validate what you send, before you seal it. + +Validation runs on your machine with the HL7 [FHIR](../../shared/glossary/fhir.md) validator against the ABDM and NHCX profile package. During sandbox exit, NRCeS also reviews sample bundles you send by email. + +## Before you start + +- Java is installed, and the validator jar is downloaded as the recipe shows ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)). +- Your bundle is saved as a `.json` file, before encryption. +- You know which bundle profile your use case takes. See [the collection bundle](collection-bundle.md). + +## What happens + +### Tools + +| Tool | Use it for | +|---|---| +| HL7 validator jar (`validator_cli.jar`) | Command-line checks on your machine and in CI | +| HAPI FHIR validator (Java library) | Checks inside your application before sealing | +| https://validator.fhir.org | One-off checks in a browser | + +### What the validator checks + +Structure, cardinality, value domains, coding and CodeableConcept bindings, invariants, profile rules and business rules such as reference resolution. + +### The command + +The profile package id is `ndhm.in`, published at https://nrces.in/ndhm/fhir/r4/package.tgz. It carries the ABDM and NHCX profiles. Name the bundle profile with `-profile`: + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile https://nrces.in/ndhm/fhir/r4/StructureDefinition/ClaimBundle +``` + +Swap the profile for `ClaimResponseBundle`, `CoverageEligibilityRequestBundle`, `CoverageEligibilityResponseBundle`, `TaskBundle` or `InsurancePlanBundle` as your use case needs. + +### Inside a Java application + +1. Put `package.tgz` on the classpath. +2. Load it with `NpmPackageValidationSupport`. +3. Chain it with `DefaultProfileValidationSupport`, `InMemoryTerminologyServerValidationSupport`, `CommonCodeSystemsTerminologyService` and `SnapshotGeneratingValidationSupport`, wrapped in `CachingValidationSupport`. +4. Register a `FhirInstanceValidator` on the `FhirValidator` and call `validateWithResult` on the bundle. + +The HAPI FHIR artifacts are `hapi-fhir-structures-r4`, `hapi-fhir-validation` and `hapi-fhir-validation-resources-r4`, version 6.4.3. + +### In the browser + +On https://validator.fhir.org open **Options**, choose the implementation guide `ndhm.in`, choose the version, and select **Add**. Paste the bundle under **Enter Resource** and select **Validate**. + +### Bundle review during sandbox exit + +Email sample bundles to `hcx.integration@nha.gov.in`. The NRCeS team validates them as part of functional testing. See [the sandbox exit process](../sandbox/sandbox-exit.md). For questions on building a bundle, write to `nrc-help@cdac.in`. + +## How you know it worked + +You ran: + +```bash +java -jar validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0 -profile +``` + +The command exits with code 0 and the report lists no errors. Read every warning and decide on each one. + +After you send the bundle, the receiver's callback carries a FHIR bundle, not a `ProtocolResponse` with a bundle error. + +## When it goes wrong + +- **The validator cannot find the profile.** The `-ig` value or the profile URL is wrong. Check `ndhm.in#6.5.0` and the canonical URL. See the recipe ([shared.fhir.hl7-validator-recipe](../../shared/fhir/hl7-validator-recipe.md)). +- **The validator cannot reach a terminology server.** Add `-tx n/a` for an offline run. Codes are then not checked, so run once more online before you rely on the result. +- **The validator passes, and the receiver still rejects the bundle.** The receiver also applies business rules. It checks typed identifiers, resolvable references, supporting-info category and code pairs, and base64 attachments. It also checks that your HFR ID matches your registration. See [the payer rejects your FHIR bundle](../troubleshooting/bundle-rejected.md). +- **[PAYR-1008](../errors/payr-1008.md) or [PAYR-1004](../errors/payr-1004.md) from the receiver.** The bundle did not parse, or failed structure checks. Validate the exact JSON you encrypted, not an earlier copy. +- **You copied a payer response as a template for a request.** Payer-built bundles declare no NRCeS profiles. Start requests from the minimal bundles in the atom for each use case. diff --git a/catalogue/nhcx/flows/biometric-face.md b/catalogue/nhcx/flows/biometric-face.md new file mode 100644 index 000000000..deaeecdf1 --- /dev/null +++ b/catalogue/nhcx/flows/biometric-face.md @@ -0,0 +1,208 @@ +--- +id: nhcx.flow.biometric-face +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Authenticate a beneficiary by face on a mobile device +summary: >- + Prove that a scheme beneficiary is at your hospital with a face scan on a phone, + when fingerprint or iris is not possible, and get the same short-lived user token. +sources: +- url: https://hcxsbx.abdm.gov.in/images/9f1e6b545a693d38a704.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication Implementation Steps.docx + hash: sha256:fac8b14bfe8d518c0e651740537b9441c501d3cf2ab0f0482a07ab9f417e43a9 + fetched: '2026-09-14' + note: Biometric Authentication Implementation Steps, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. NHCX Face-Auth API Curl section. +- url: https://hcxsbx.abdm.gov.in/images/a2f07ff8158e86e9e92a.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/FaceAuth Postman Collection.zip + hash: sha256:f2db63f7fe272178ee57acfcfd32dbc40680d69527dc35c6724f0da2a32fcaab + fetched: '2026-09-14' + note: FaceAuth Postman Collection, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. FaceAuth init request body; verify headers. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. FAQ 26 question 9; FAQ 27 questions 2 and 4. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. pages 18-19, Biometric Authentication Using ABHA APIs. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.abha-biometric-faceauth-init + - nhcx.endpoint.abha-biometric-capture-pid + - nhcx.endpoint.abha-biometric-v2-auth-verify + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + flows: + - nhcx.flow.biometric-fingerprint-iris + concepts: + - nhcx.concept.biometric-authentication + - nhcx.concept.pmjay-on-nhcx + decisions: + - nhcx.decision.biometric-modality + errors: + - nhcx.error.payr-1272 + - nhcx.error.payr-1256 + - nhcx.error.payr-1363 + - nhcx.error.payr-1366 + glossary: + - nhcx.glossary.pmjay + - nhcx.glossary.rd-service + - shared.glossary.abha +--- + +# Authenticate a beneficiary by face on a mobile device + +## In plain words + +Face authentication proves the same thing as a fingerprint or iris scan: the [PMJAY](../glossary/pmjay.md) beneficiary is at your hospital. The capture happens on a phone, in the [ABHA](../../shared/glossary/abha.md) app, rather than on a hospital device. Your system shows a QR code, the phone scans it, and your system polls until the scan is done. + +It ends with the same 30-minute user token. A PMJAY integration must support all three methods, and one case can use different methods at different stages. + +## Before you start + +- The beneficiary's ABHA is linked to their PMJAY card. +- A session token, sent as `Authorization: Bearer `. +- A phone with the sandbox ABHA app, from `https://sandboxcms.abdm.gov.in/uploads/app_sbx_release_5_d4437e4aa1.apk`. It also needs the Aadhaar face [RD service](../glossary/rd-service.md) app from the Play Store or App Store. +- The beneficiary's Aadhaar number and the mobile number linked to that Aadhaar. +- A way to show a QR code on your screen. +- OpenSSL, for encrypting the Aadhaar number. +- The participant code of the scheme payer, for the `payerid` header. + +## What happens + +```mermaid +sequenceDiagram + participant B as Beneficiary with a phone + participant App as ABHA app and Aadhaar face RD service + participant You as Your HMIS + participant PX as ABDM proxy for face authentication + You->>PX: POST /pmjay/sbxhcx/abdmproxy/abha/biometric/faceauth/init + PX-->>You: txnId + You->>B: QR code for phrsbx.abdm.gov.in/face-auth with the txnId + B->>App: scan the QR code, press Continue, scan the face + Note over App: the face capture completes on the phone + loop until status is COMPLETE + You->>PX: POST /pmjay/sbxhcx/abdmproxy/abha/biometric/capture/pid + PX-->>You: PENDING, then COMPLETE + end + Note over You: encrypt the Aadhaar number with the published public key + You->>PX: POST /pmjay/sbxhcx/abdmproxy/abha/biometric/v2/auth/verify + PX-->>You: tokens and ABHAProfile +``` + +The sandbox host is `https://apisbx.abdm.gov.in`. Every call carries `Accept: application/json`, `Content-Type: application/json`, the `Authorization` header, a fresh UUID in `REQUEST-ID`, and the current ISO time in `TIMESTAMP`. + +### 1. Start + +`POST /pmjay/sbxhcx/abdmproxy/abha/biometric/faceauth/init`: + +```json +{ + "scope": ["abha-enrol", "face-auth"] +} +``` + +The answer carries `txnId` and `message` `Transaction Id generated Successfully`. + +### 2. Show the QR code + +Render this address as a QR code on your screen: + +```text +https://phrsbx.abdm.gov.in/face-auth?txnId= +``` + +### 3. The beneficiary scans + +The beneficiary, or a hospital assistant, opens the sandbox ABHA app. They tap the QR code icon at the top left of the welcome screen and scan your screen. They press **Continue** on the FaceAuth screen and complete the face scan with the Aadhaar face RD service app. + +### 4. Poll for the capture + +`POST /pmjay/sbxhcx/abdmproxy/abha/biometric/capture/pid`: + +```json +{ + "txnId": "" +} +``` + +**Wait:** there is no callback. The answer is `{"status": "PENDING", "message": "Awaiting PID capture"}` until the scan completes. Then it is `{"status": "COMPLETE", "message": "PID capture successful"}`. Poll while the QR code is on screen, and move on at `COMPLETE`. + +### 5. Encrypt the Aadhaar number + +Encrypt the 12-digit Aadhaar number with the published public key, using `RSA/ECB/OAEPWithSHA-1AndMGF1Padding`. With OpenSSL: + +```sh +cat > aadhaar_face_auth_public.pem <<'EOF' +-----BEGIN PUBLIC KEY----- +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAstWB95C5pHLXiYW59qyO +4Xb+59KYVm9Hywbo77qETZVAyc6VIsxU+UWhd/k/YtjZibCznB+HaXWX9TVTFs9N +wgv7LRGq5uLczpZQDrU7dnGkl/urRA8p0Jv/f8T0MZdFWQgks91uFffeBmJOb58u +68ZRxSYGMPe4hb9XXKDVsgoSJaRNYviH7RgAI2QhTCwLEiMqIaUX3p1SAc178ZlN +8qHXSSGXvhDR1GKM+y2DIyJqlzfik7lD14mDY/I4lcbftib8cv7llkybtjX1Aayf +Zp4XpmIXKWv8nRM488/jOAF81Bi13paKgpjQUUuwq9tb5Qd/DChytYgBTBTJFe7i +rDFCmTIcqPr8+IMB7tXA3YXPp3z605Z6cGoYxezUm2Nz2o6oUmarDUntDhq/PnkN +ergmSeSvS8gD9DHBuJkJWZweG3xOPXiKQAUBr92mdFhJGm6fitO5jsBxgpmulxpG +0oKDy9lAOLWSqK92JMcbMNHn4wRikdI9HSiXrrI7fLhJYTbyU3I4v5ESdEsayHXu +iwO/1C8y56egzKSw44GAtEpbAkTNEEfK5H5R0QnVBIXOvfeF4tzGvmkfOO6nNXU3 +o/WAdOyV3xSQ9dqLY5MEL4sJCGY1iJBIAQ452s8v0ynJG5Yq+8hNhsCVnklCzAls +IzQpnSVDUVEzv17grVAw078CAwEAAQ== +-----END PUBLIC KEY----- +EOF +printf '%s' '' | openssl pkeyutl -encrypt -pubin -inkey aadhaar_face_auth_public.pem -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha1 -pkeyopt rsa_mgf1_md:sha1 | base64 | tr -d '\n' +``` + +The output is a single base64 line of 684 characters. Never log it or store it. + +### 6. Verify + +`POST /pmjay/sbxhcx/abdmproxy/abha/biometric/v2/auth/verify`, adding `payerid: ` and `process`. Use `Preauth` at admission, and `Discharge` at discharge and at each cycle. + +```json +{ + "authData": { + "authMethods": ["face_auth"], + "face": { + "txnId": "", + "aadhaar": "", + "mobile": "" + } + }, + "authMode": "FACE_AUTH" +} +``` + +The answer carries `txnId`, `message`, a `tokens` object and an `ABHAProfile` object. `tokens` holds `token`, `expiresIn`, `refreshExpiresIn` and `refreshToken`. Here `expiresIn` and `refreshExpiresIn` are strings, `"1800"` and `"1296000"`, so parse them as numbers. `ABHAProfile` carries the verified identity, including `ABHANumber` and `abhaStatus`. + +### 7. Use the user token + +Pass the user `token` as a header parameter on the coverage eligibility check, the pre-authorisation and the claim. [Authenticate a beneficiary by fingerprint or iris](biometric-fingerprint-iris.md) covers the details. It lasts 30 minutes. + +## How you know it worked + +`capture/pid` answered `COMPLETE`. Then `v2/auth/verify` returned `tokens.token` with `tokens.expiresIn` `"1800"`, and `ABHAProfile.ABHANumber` equal to the beneficiary's ABHA number. + +```observation schema=exit-condition +channel: synchronous +call: POST /pmjay/sbxhcx/abdmproxy/abha/biometric/v2/auth/verify +precondition: + capture/pid status: COMPLETE +match: + tokens.expiresIn: "1800" + ABHAProfile.ABHANumber: +``` + +## When it goes wrong + +- **`capture/pid` stays `PENDING`.** The beneficiary has not finished the scan, or the face RD service app is missing from the phone. If they abandon the scan, start again with a new `faceauth/init` and a new QR code. +- **Verify fails straight after the scan.** You called it before `capture/pid` answered `COMPLETE`. Keep polling. +- **Verify rejects the Aadhaar value.** It was sent in the clear, or encrypted with other padding. Use the command in step 5 exactly. +- **Verify rejects the mobile.** It is not the mobile number linked to the beneficiary's Aadhaar. +- **The payer rejects the user token.** It expired after 30 minutes, or belongs to another beneficiary. See [PAYR-1272](../errors/payr-1272.md), and [PAYR-1366](../errors/payr-1366.md) at discharge. +- **The payer says the consent questionnaire is missing.** No biometric token and no Authentication Consent Questionnaire went with the request. See [PAYR-1256](../errors/payr-1256.md) and [PAYR-1363](../errors/payr-1363.md). diff --git a/catalogue/nhcx/flows/biometric-fingerprint-iris.md b/catalogue/nhcx/flows/biometric-fingerprint-iris.md new file mode 100644 index 000000000..751852017 --- /dev/null +++ b/catalogue/nhcx/flows/biometric-fingerprint-iris.md @@ -0,0 +1,196 @@ +--- +id: nhcx.flow.biometric-fingerprint-iris +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Authenticate a beneficiary by fingerprint or iris +summary: >- + Prove that a scheme beneficiary is physically at your hospital with a fingerprint + or iris scan, and get the short-lived user token their pre-authorisation and claim + carry. +sources: +- url: https://hcxsbx.abdm.gov.in/images/9f1e6b545a693d38a704.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication Implementation Steps.docx + hash: sha256:fac8b14bfe8d518c0e651740537b9441c501d3cf2ab0f0482a07ab9f417e43a9 + fetched: '2026-09-14' + note: 'Biometric Authentication Implementation Steps, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. Fingerprint/IRIS Authentication: Auth INIT, Auth Verify, Auth Refresh Token; policy table.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. FAQ 10 (K-547); FAQ 26 questions 2, 6, 9, 11, 12; FAQ 27 question 2. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. pages 18-19, Biometric Authentication Using ABHA APIs. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.abha-biometric-auth-init + - nhcx.endpoint.abha-biometric-auth-verify + - nhcx.endpoint.abha-biometric-auth-refresh-token + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + flows: + - nhcx.flow.biometric-face + - nhcx.flow.send-a-sealed-request + concepts: + - nhcx.concept.biometric-authentication + - nhcx.concept.pmjay-on-nhcx + decisions: + - nhcx.decision.biometric-modality + errors: + - nhcx.error.payr-1272 + - nhcx.error.payr-1256 + - nhcx.error.payr-1363 + - nhcx.error.payr-1366 + glossary: + - nhcx.glossary.pmjay + - nhcx.glossary.rd-service + - nhcx.glossary.pid-block + - shared.glossary.abha +--- + +# Authenticate a beneficiary by fingerprint or iris + +## In plain words + +[PMJAY](../glossary/pmjay.md) pays only for care given to a beneficiary who was physically present. Your hospital proves presence by authenticating the beneficiary against their [ABHA](../../shared/glossary/abha.md), with a fingerprint or iris scan. A success returns a user token that is valid for 30 minutes. + +That token goes with the eligibility check, the pre-authorisation and the claim. These are [ABDM](../../shared/glossary/abdm.md) calls made for the PMJAY payer, not NHCX messages. They are not sealed, and nothing arrives by callback. + +## Before you start + +- The beneficiary's ABHA is linked to their PMJAY card. If it is not, this flow does not apply: follow the PMJAY-approved [KYC](../../shared/glossary/kyc.md) protocols instead. +- A registered fingerprint or iris device, with its [RD service](../glossary/rd-service.md) running on the machine. +- A session token, sent as `Authorization: Bearer `. +- The participant code of the scheme payer the authentication is for, sent in the `payerid` header. +- The beneficiary at the desk, and the stage: `Preauth` at admission, `Discharge` at discharge and at every visit of a cyclic procedure. + +## What happens + +```mermaid +sequenceDiagram + participant B as Beneficiary + participant Dev as Scanner and RD service + participant You as Your HMIS + participant ABHA as ABHA biometric service + participant NHCX as NHCX exchange + You->>ABHA: POST /hcx/abha/biometric/auth/init + ABHA-->>You: txnId + You->>Dev: start a capture + B->>Dev: finger on the scanner, or eyes to the iris camera + Dev-->>You: PID block + You->>ABHA: POST /hcx/abha/biometric/auth/verify with txnId and PID block + ABHA-->>You: authResult success, token, refreshToken and accounts + You->>NHCX: POST /v1/preauth/submit with the user token + opt The user token lapses during the case + You->>ABHA: GET /hcx/abha/biometric/auth/refresh/token + ABHA-->>You: new token and new refreshToken + end +``` + +The sandbox host is `https://apisbx.abdm.gov.in`. Every call answers in its own response. + +### 1. Start the authentication + +`POST /hcx/abha/biometric/auth/init` with these headers: + +| Header | Value | +|---|---| +| `accept` | `*/*` | +| `Content-Type` | `application/json` | +| `Authorization` | `Bearer ` | +| `process` | `Preauth` or `Discharge`, one value | +| `payerid` | `` | + +For a fingerprint, the body is: + +```json +{ + "scope": ["abha-login", "aadhaar-bio-verify"], + "loginHint": "abha-number", + "loginId": "", + "otpSystem": "aadhaar", + "authMode": "FINGERPRINT" +} +``` + +For an iris, `scope` is `["abha-login", "aadhaar-iris-verify"]` and `authMode` is `IRIS`. The answer carries `txnId`. + +### 2. Capture + +Your HMIS asks the RD service for a capture. The beneficiary places a finger on the scanner, or looks into the iris camera. The RD service returns an encrypted [PID block](../glossary/pid-block.md) as a base64 string. + +### 3. Verify + +`POST /hcx/abha/biometric/auth/verify`, with the same five headers: + +```json +{ + "scope": ["abha-login", "aadhaar-bio-verify"], + "authData": { + "authMethods": ["bio"], + "bio": { + "txnId": "", + "fingerPrintAuthPid": "" + } + }, + "authMode": "FINGERPRINT" +} +``` + +For an iris, `authMethods` is `["iris"]`, and an `iris` object carries `txnId` and `irisAuthPid`. Use the iris `scope` and `authMode` from step 1. + +The answer carries `txnId`, `authResult`, `message`, `token`, `refreshToken`, `expiresIn` `1800`, `refreshExpiresIn` `1296000` and an `accounts` array. Each account carries `ABHANumber`, `preferredAbhaAddress`, `name`, `gender`, `dob`, `verifiedStatus`, `verificationType`, `status` and `profilePhoto`. + +### 4. Use the user token + +Pass the user `token` as a header parameter on the PMJAY claim events that follow. These are the coverage eligibility check, the pre-authorisation and, after discharge authentication, the claim. The payer validates it before accepting the request. + +The token lasts 30 minutes. Submit within that time, or refresh it. + +### 5. Refresh + +`GET /hcx/abha/biometric/auth/refresh/token` with `R-token: Bearer `, plus `Authorization`, `payerid` and `process`. The answer carries a new user token and a new refresh token. The new refresh token lasts 15 days from that moment. + +Refresh at least once every 10 days and store the new refresh token. That keeps the chain alive for as long as the case needs. If the refresh token lapses, authenticate again with a live capture. + +A refresh never replaces a live capture on a cyclic procedure. Every visit needs a capture with `process` `Discharge`. A refresh token from the last cycle serves only at the final claim, and a new capture is preferred there too. + +### 6. At discharge + +Authenticate again with `process` `Discharge`, and attach the new token to the claim. The method may differ from admission: a pre-authorisation by fingerprint can end in a claim by iris or face. + +## How you know it worked + +The verify call returns `authResult` `success`, a `token` with `expiresIn` `1800`, and a `refreshToken` with `refreshExpiresIn` `1296000`. `accounts` holds the beneficiary's ABHA number with `status` `ACTIVE`. The payer then accepts the pre-authorisation without [PAYR-1272](../errors/payr-1272.md). + +```observation schema=exit-condition +channel: synchronous +call: POST /hcx/abha/biometric/auth/verify +match: + authResult: success + expiresIn: 1800 + accounts[0].ABHANumber: + accounts[0].status: ACTIVE +``` + +## When it goes wrong + +- **The device fails with `K-547`.** Build the `wadh` value with `lr` set to `'Y'`. Keep `ra` as the device type (`'F'` for fingerprint), `rc` `'Y'`, `de` `'N'` and `pfr` `'N'`: + + ```javascript + text = '2.5' + ra + rc + lr + de + pfr; + wadh = Base64.stringify(sha256(text)); + ``` + +- **The payer rejects the user token.** It expired after 30 minutes, or belongs to another beneficiary. Authenticate again, or refresh. See [PAYR-1272](../errors/payr-1272.md), and [PAYR-1366](../errors/payr-1366.md) at discharge. +- **The payer says the consent questionnaire is missing.** You sent no biometric token and no Authentication Consent Questionnaire. See [PAYR-1256](../errors/payr-1256.md) at pre-authorisation and [PAYR-1363](../errors/payr-1363.md) at the claim. +- **The beneficiary cannot give a biometric.** Obtain the Aadhaar exemption consent document, signed by the patient and a hospital representative. Store it digitally and link it to the beneficiary record. Answer the plan's Authentication Consent Questionnaire. This route is closed for cyclic procedures, which need a live biometric. +- **Verify fails.** The PID block sits under the wrong key for the modality. Fingerprint goes in `bio.fingerPrintAuthPid`, iris in `iris.irisAuthPid`. +- **A cycle goes unpaid.** It was covered by a refresh token instead of a live capture. The payer pays only for captured cycles. diff --git a/catalogue/nhcx/flows/claim-query-response.md b/catalogue/nhcx/flows/claim-query-response.md new file mode 100644 index 000000000..59025a31d --- /dev/null +++ b/catalogue/nhcx/flows/claim-query-response.md @@ -0,0 +1,182 @@ +--- +id: nhcx.flow.claim-query-response +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Answer a payer query on a claim +summary: >- + Send the payer the documents or clarification it asked for on a claim, so that + it can finish adjudicating. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. 9.5 ClaimResponse outcomes; 9.5.4 Queried Response; query trail mapping table. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, Claim Request Queried and Claim Query Response Submitted. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. pages 36-37, claim query updation. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet Scenarios, row 11. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Communication. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Claim steps 2-5; Communication. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.claim-submit + - nhcx.endpoint.claim-on-submit + - nhcx.endpoint.communication-request + - nhcx.endpoint.communication-on-request + callbacks: + - nhcx.callback.claim-on-submit + - nhcx.callback.claim-submit + - nhcx.callback.communication-request + - nhcx.callback.communication-on-request + fhir: + - nhcx.fhir.claim-response + - nhcx.fhir.task + tests: + - nhcx.test.tc-cl-02 + - nhcx.test.provider-uc-08 + - nhcx.test.payer-uc-10 + flows: + - nhcx.flow.claim-submit + - nhcx.flow.preauth-query-response + - nhcx.flow.status-check + concepts: + - nhcx.concept.queries-and-communication + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.payr-1001 + - nhcx.error.payr-1303 + - nhcx.error.payr-1304 + glossary: + - nhcx.glossary.claim + - nhcx.glossary.communication-request + - nhcx.glossary.payer + - nhcx.glossary.pmjay + sandbox: + - nhcx.sandbox.dummy-payer + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback +--- + +# Answer a payer query on a claim + +## In plain words + +A claim query means the [payer](../glossary/payer.md) cannot finish adjudicating your [claim](../glossary/claim.md) yet. It needs more documents or a clarification. The claim stays open, with its totals at zero, until you answer. + +The query reaches you by one of two routes. Where it arrives tells you how to answer. + +| The query arrives on | It looks like | You answer on | +|---|---|---| +| `/v1/claim/on_submit` | Workflow `27`. ClaimResponse `outcome` `partial`, adjudication reason `queried` | `/v1/claim/submit` with workflow `151` | +| `/v1/communication/request` | A Task with `code` `poll` carrying a [communication request](../glossary/communication-request.md) | `/v1/communication/on_request` | + +After your answer, the payer sends its adjudication on `/v1/claim/on_submit`. [Payer queries and the communication cycle](../concepts/queries-and-communication.md) explains both routes. + +## Before you start + +- You [submitted the claim](claim-submit.md), and kept its claim identifier and bundle. +- A query has arrived by one of the two routes above, and you answered its delivery with `202` within 30 seconds. +- You have collected the documents or the clarification the query asks for. +- In the sandbox, the [dummy payer](../sandbox/dummy-payer.md) raises a query when you drive it with the action `Query`, and uses the communication route. + +## What happens + +```mermaid +sequenceDiagram + participant P as Provider (your system) + participant N as NHCX + participant Y as Payer + alt query as a ClaimResponse + Y->>N: POST /v1/claim/on_submit (workflow 27) + N->>P: POST /v1/claim/on_submit + P-->>N: HTTP 202 Accepted, within 30 seconds + P->>N: POST /v1/claim/submit (workflow 151) + Note right of P: same Claim identifier, added documents, new correlation id + N-->>P: HTTP 202 Accepted + N->>Y: POST /v1/claim/submit + Y-->>N: HTTP 202 Accepted + else query as a communication request + Y->>N: POST /v1/communication/request + N-->>Y: HTTP 202 Accepted + N->>P: POST /v1/communication/request + P-->>N: HTTP 202 Accepted, within 30 seconds + P->>N: POST /v1/communication/on_request + Note right of P: Communication with the documents, same correlation id + N-->>P: HTTP 202 Accepted + N->>Y: POST /v1/communication/on_request + Y-->>N: HTTP 202 Accepted + end + Note over Y: payer re-adjudicates + Y->>N: POST /v1/claim/on_submit (decision) + N->>P: POST /v1/claim/on_submit + P-->>N: HTTP 202 Accepted +``` + +### The query arrives as a ClaimResponse + +1. Receive [POST /v1/claim/on_submit](../callbacks/claim-on-submit.md) with workflow `27`. Answer `202` within 30 seconds, then decrypt. +2. Read what the payer asked. For [PMJAY](../glossary/pmjay.md), `ClaimResponse.item[].adjudication[].reason.coding.display` carries a trail of entries in the form `USER~datetime~type~comment~trust`, separated by `|`. Parse it as plain text. The comment is the question. +3. Add the requested documents to `supportingInfo` in the same Claim. Keep `Claim.identifier` and `use` `claim`. +4. Set `x-hcx-workflow_id` to `151`, Claim Query Response Submitted. Set `x-hcx-status` to `request.initiated`. +5. Start a new correlation: set `x-hcx-correlation_id` to the value of this call's `x-hcx-api_call_id`. The claim identifier ties the answer to the case. +6. Call [POST /v1/claim/submit](../endpoints/claim-submit.md). NHCX answers `202 Accepted`. + +### The query arrives as a communication request + +1. Receive [POST /v1/communication/request](../callbacks/communication-request.md). Answer `202` within 30 seconds, then decrypt. +2. Read `Task.reasonCode` and the communication resource. They say what the payer needs. +3. Build the answer as a Task bundle whose Task carries a `Communication`. Put the documents in `Communication.payload` as `contentAttachment`. See [the Task bundle](../fhir/task.md). +4. Set `x-hcx-status` to `response.complete`. Set `x-hcx-correlation_id` to the correlation id of the communication request. Use a fresh `x-hcx-api_call_id`. +5. Address it to the sender of the communication request. Call [POST /v1/communication/on_request](../endpoints/communication-on-request.md). NHCX answers `202 Accepted`. + +### Either route: wait for the adjudication + +The payer re-adjudicates and answers on `/v1/claim/on_submit`. Read it as in [submit a claim](claim-submit.md), using `outcome` and the adjudication reason together. + +## How you know it worked + +The query is resolved when all of these hold: + +- NHCX accepted your answer with `202`: on `/v1/claim/submit` with workflow `151`, or on `/v1/communication/on_request`. +- You then received `POST /v1/claim/on_submit` for this case, and its `payload` decrypts. +- The ClaimResponse has `outcome` `complete` with adjudication reason `approved` or `cancelled`, or `outcome` `partial` with reason `approved`. + +`outcome` `partial` with reason `queried` means the payer asks again. Repeat this flow. + +## When it goes wrong + +The payer finds no queried claim. [PAYR-1304](../errors/payr-1304.md) means no queried claim exists for the case number. [PAYR-1303](../errors/payr-1303.md) means no active claim exists for it. Check that you kept the original claim identifier. + +NHCX rejects your query update as a duplicate. [NHCX-1006](../errors/nhcx-1006.md) means you reused an earlier correlation id on `/v1/claim/submit`. Start a new correlation. + +NHCX rejects your communication answer. [NHCX-1010](../errors/nhcx-1010.md) means no request exists with the correlation id you set. Copy it from the communication request exactly. [NHCX-1011](../errors/nhcx-1011.md) means the `x-hcx-status` value is not valid. + +The payer cannot open your answer. A `ProtocolResponse` with [PAYR-1001](../errors/payr-1001.md) means it could not decrypt. Fetch its certificate again and reseal. + +No adjudication follows your answer. [Check the status](status-check.md) of your answer's correlation id. See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). diff --git a/catalogue/nhcx/flows/claim-reprocess.md b/catalogue/nhcx/flows/claim-reprocess.md new file mode 100644 index 000000000..55559ff72 --- /dev/null +++ b/catalogue/nhcx/flows/claim-reprocess.md @@ -0,0 +1,161 @@ +--- +id: nhcx.flow.claim-reprocess +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Ask the payer to reprocess a claim +summary: >- + Contest a rejected claim, or recover the shortfall on a partly paid one, by sending + the payer a reprocess task with supporting evidence. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. FAQ 22 Erroneous Claim, FAQ 23 Claim Reprocess and field comparison; FAQ 15. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Communication reasons (claimArbitration); reprocess workflow codes; reprocess Task table. +- url: https://hcxsbx.abdm.gov.in/taskhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/taskhcxservice.json + hash: sha256:0418eca6478dece4d72c5a49a6547d50772511f7ffaf32f901f245591ba84656 + fetched: '2026-09-14' + note: 'API specification: taskhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths /v1/task/submit and /v1/task/on_submit.' +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.task-submit + - nhcx.endpoint.task-on-submit + - nhcx.endpoint.communication-request + - nhcx.endpoint.communication-on-request + callbacks: + - nhcx.callback.task-submit + - nhcx.callback.task-on-submit + - nhcx.callback.communication-request + - nhcx.callback.error + fhir: + - nhcx.fhir.claim-response + - nhcx.fhir.task + concepts: + - nhcx.concept.claim-cycle + - nhcx.concept.workflow-codes + tests: + - nhcx.test.provider-uc-12 + - nhcx.test.payer-uc-14 + - nhcx.test.tc-cl-03 + flows: + - nhcx.flow.claim-submit + - nhcx.flow.claim-query-response + - nhcx.flow.payment-notice + - nhcx.flow.send-a-sealed-request + - nhcx.flow.status-check + errors: + - nhcx.error.err-pyr-clm-007 + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1001 + glossary: + - nhcx.glossary.communication-request + - nhcx.glossary.crc + - nhcx.glossary.pmjay + - nhcx.glossary.reprocess +--- + +# Ask the payer to reprocess a claim + +## In plain words + +[Reprocessing](../glossary/reprocess.md) asks the payer to look at an adjudicated claim again. You send it as a FHIR Task on `/v1/task/submit`, with evidence. The payer re-adjudicates and answers on `/v1/task/on_submit`. + +There are two cases. Both use workflow `36` and Task code `reprocess`. + +| | Rejected claim | Partly paid claim, the erroneous claim | +|---|---|---| +| When you may send it | As soon as the rejection arrives | Only after the payment settles, workflow `33`, and you acknowledged it, workflow `17` | +| Reason code | `claimrejected` | `partialpayment` | +| Amount | Not sent. The full claim is implied | The shortfall, never more than the claimed amount minus the approved amount | +| Supporting document | Mandatory | Mandatory | +| How often, under [PMJAY](../glossary/pmjay.md) | Once per claim | Once per claim | + +A reprocess request goes to the [CRC](../glossary/crc.md). Its decision is final. No erroneous claim can follow a CRC decision. + +## Before you start + +- The claim was adjudicated. It was rejected, `outcome` `complete` with reason `cancelled`, or it was paid in part. +- For a partly paid claim, you received the payment notice with workflow `33` and sent your acknowledgement with workflow `17`. See [receive a payment notice](payment-notice.md). +- You have the claim number. It is the preauthorisation number your hospital generated, carried forward unchanged. +- You have the document that justifies the request. +- No reprocess or erroneous claim was raised for this claim before. + +## What happens + +```mermaid +sequenceDiagram + participant P as Provider (your system) + participant N as NHCX + participant Y as Payer + P->>N: POST /v1/task/submit (workflow 36) + Note right of P: Task code reprocess, reason claimrejected or partialpayment + N-->>P: HTTP 202 Accepted + N->>Y: POST /v1/task/submit + Y-->>N: HTTP 202 Accepted + opt payer acknowledges the request + Y->>N: POST /v1/communication/request (reason claimArbitration) + N->>P: POST /v1/communication/request + P-->>N: HTTP 202 Accepted + end + Note over Y: review committee re-adjudicates + Y->>N: POST /v1/task/on_submit + N-->>Y: HTTP 202 Accepted + N->>P: POST /v1/task/on_submit + P-->>N: HTTP 202 Accepted, within 30 seconds + alt workflow 252 + Note left of P: approved, payment notices follow + else workflow 254 + Note left of P: queried + else workflow 253 + Note left of P: rejected, the decision stands + end +``` + +1. Build a Task bundle, as in [the Task bundle](../fhir/task.md). Set `status` to `requested`, `intent` to `order`, and `code` to `reprocess`. +2. Set `reasonCode` to `claimrejected` for a rejected claim, or `partialpayment` for a partly paid one. Add the claim number as an input, and point `basedOn` at the original claim. +3. Attach the supporting document as a `valueAttachment`. For a partly paid claim, send the shortfall amount. +4. Seal and set the headers, as in [send a sealed request](send-a-sealed-request.md). Set `x-hcx-workflow_id` to `36` and `x-hcx-status` to `request.initiated`. +5. Start a new correlation. Set `x-hcx-correlation_id` to the value of this call's `x-hcx-api_call_id`. +6. Call [POST /v1/task/submit](../endpoints/task-submit.md). NHCX answers `202 Accepted`. It is not the decision. +7. The payer may confirm it received the request with a [communication request](../glossary/communication-request.md), reason `claimArbitration`. Answer its delivery with `202`, then acknowledge it on [/v1/communication/on_request](../endpoints/communication-on-request.md). +8. Receive [POST /v1/task/on_submit](../callbacks/task-on-submit.md). Answer `202 Accepted` within 30 seconds, then process. +9. Read `type`. `ProtocolResponse` means the payer could not process the request. Otherwise decrypt `payload` with your private key. +10. Find the Task, with `status` `completed`. Follow `Task.output` to the ClaimResponse in the same bundle. Read it as you read a [claim decision](claim-submit.md). + +| `x-hcx-workflow_id` | Meaning | What to do | +|---|---|---| +| `252` | Reprocess approved | Wait for [payment notices](payment-notice.md), workflows `30`, `31` and `33` | +| `254` | Reprocess queried | Send the information the payer asks for | +| `253` | Reprocess rejected | The original decision stands. The case is closed | + +## How you know it worked + +The reprocess request is decided when all of these hold: + +- You received `POST /v1/task/on_submit` whose `x-hcx-correlation_id` equals the one you sent. +- Its `payload` decrypts, and the Task in it has `status` `completed`. +- `Task.output` resolves to a ClaimResponse inside the same bundle. +- `x-hcx-workflow_id` is `252`, approved, or `253`, rejected. +- You recorded the decision against the claim. After `252`, you watch for the payment notice. + +## When it goes wrong + +The payer cannot find the claim. [ERR-PYR-CLM-007](../errors/err-pyr-clm-007.md) means no preauthorisation or claim record exists for the case number. Send the preauthorisation number your hospital generated as the claim number. + +The request is refused as too early or repeated. An erroneous claim sent before workflow `33` arrives is out of order. A second request on the same claim exceeds the once-per-claim limit under PMJAY. Neither can be fixed by resending. + +NHCX rejects the request as a duplicate. [NHCX-1006](../errors/nhcx-1006.md) means you reused a correlation id. Start a new correlation. + +The callback is a `ProtocolResponse`. [PAYR-1001](../errors/payr-1001.md) means the payer could not decrypt your request. Fetch its certificate again and reseal. + +No decision arrives. Reprocess has no fixed turnaround time. [Check the request's status](status-check.md) to confirm the payer holds it. An undeliverable request comes back on [/v1/error](../callbacks/error.md). diff --git a/catalogue/nhcx/flows/claim-search.md b/catalogue/nhcx/flows/claim-search.md new file mode 100644 index 000000000..3ab1562d3 --- /dev/null +++ b/catalogue/nhcx/flows/claim-search.md @@ -0,0 +1,123 @@ +--- +id: nhcx.flow.claim-search +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Search for claims +summary: >- + Ask a payer for the claim responses that match a claim number, policy, product + or date range. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Search. +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 10, Claim Search. +- url: https://hcxsbx.abdm.gov.in/searchhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/searchhcxservice.json + hash: sha256:21749dd2ba84a19c5523772da359d76293493d44b48651f1af2e6042d78fa296 + fetched: '2026-09-14' + note: 'API specification: searchhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths /v1/search/submit and /v1/search/on_submit.' +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.search-submit + - nhcx.endpoint.search-on-submit + callbacks: + - nhcx.callback.search-submit + - nhcx.callback.search-on-submit + - nhcx.callback.error + fhir: + - nhcx.fhir.claim-response + - nhcx.fhir.task + concepts: + - nhcx.concept.four-message-legs + - nhcx.concept.message-identifiers + - nhcx.concept.session-token + tests: + - nhcx.test.provider-uc-10 + - nhcx.test.payer-uc-12 + flows: + - nhcx.flow.status-check + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.send-a-sealed-request + errors: + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1001 + glossary: + - nhcx.glossary.payer + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback +--- + +# Search for claims + +## In plain words + +A claim search asks a [payer](../glossary/payer.md) for the claim responses that match your criteria. You can search by claim number, policy number, product number and a date range. Providers use it, and so do regulators. + +You send the criteria in a FHIR Task on `/v1/search/submit`. The payer answers on `/v1/search/on_submit` with a Task whose outputs point to the matching ClaimResponse resources. + +Search only reads. It changes nothing about a claim. To find where a request of yours stands in the exchange, use a [status check](status-check.md) instead. + +## Before you start + +- You are a registered participant with a valid [session token](../concepts/session-token.md) and a callback endpoint that answers within 30 seconds. +- You know the payer to search, and hold its encryption certificate. +- You have at least one criterion: a claim number, a policy number, a product number, or a from and to date. + +## What happens + +```mermaid +sequenceDiagram + participant P as Provider or regulator (your system) + participant N as NHCX + participant Y as Payer + P->>N: POST /v1/search/submit + Note right of P: sealed Task bundle with the search inputs + N-->>P: HTTP 202 Accepted + N->>Y: POST /v1/search/submit + Y-->>N: HTTP 202 Accepted + Note over Y: payer finds the matching claim responses + Y->>N: POST /v1/search/on_submit + N-->>Y: HTTP 202 Accepted + N->>P: POST /v1/search/on_submit + P-->>N: HTTP 202 Accepted, within 30 seconds + Note left of P: follow Task.output to each ClaimResponse +``` + +1. Build a Task bundle with `status` `requested`, as in [the Task bundle](../fhir/task.md). It names the search Task code. +2. Add one Task input per criterion. The input types are `ClaimNumber`, `PolicyNumber`, `ProductNumber`, `FromDate` and `ToDate`. +3. Seal and set the headers, as in [send a sealed request](send-a-sealed-request.md). Set `x-hcx-status` to `request.initiated`. Set `x-hcx-correlation_id` to the value of this call's `x-hcx-api_call_id`. +4. Call [POST /v1/search/submit](../endpoints/search-submit.md). NHCX answers `202 Accepted`. The results are not in it. +5. Receive [POST /v1/search/on_submit](../callbacks/search-on-submit.md). Answer `202 Accepted` within 30 seconds, then process. +6. Read `type`. `ProtocolResponse` means the payer could not process the search. Otherwise decrypt `payload` with your private key. +7. Find the Task. Its `status` is `completed`. Follow each `Task.output` reference to a [ClaimResponse](../fhir/claim-response.md) in the same bundle. +8. Read `x-hcx-status`. `response.partial` means more results may follow on the same correlation id. `response.complete` closes the search. + +## How you know it worked + +The search is finished when all of these hold: + +- You received `POST /v1/search/on_submit` whose `x-hcx-correlation_id` equals the one you sent. +- Its `type` is not `ProtocolResponse`, and `payload` decrypts with your private key. +- The Task in it has `status` `completed`, and each `Task.output` resolves to a ClaimResponse in the bundle. +- The last callback for the search carried `x-hcx-status` `response.complete`. + +## When it goes wrong + +The 202 arrives and no results follow. [Check the request's status](status-check.md). An undeliverable request comes back on [/v1/error](../callbacks/error.md). See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). + +NHCX rejects the call. [NHCX-1003](../errors/nhcx-1003.md) means the recipient code is not registered. [NHCX-1006](../errors/nhcx-1006.md) means the correlation id was used before. Start a new correlation for every search. + +The callback is a `ProtocolResponse`. [PAYR-1001](../errors/payr-1001.md) means the payer could not decrypt your request. Fetch its certificate again and reseal. + +The results do not match the claim you meant. Check the input types and values. Values are case-sensitive and must match exactly, with no stray spaces. diff --git a/catalogue/nhcx/flows/claim-submit.md b/catalogue/nhcx/flows/claim-submit.md new file mode 100644 index 000000000..5d8f82098 --- /dev/null +++ b/catalogue/nhcx/flows/claim-submit.md @@ -0,0 +1,177 @@ +--- +id: nhcx.flow.claim-submit +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Submit a claim after discharge +summary: >- + After the patient is discharged, send the final bill and records for the approved + preauthorisation, then read the payer's adjudication. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: 'NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 9 Claim: request tables, 9.5.1 outcome summary; workflow code table.' +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 35, Claim functional points to note. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. FAQ 25 discharge, questions 3 and 7. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet Scenarios, row 10. +- url: https://hcxsbx.abdm.gov.in/claimhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/claimhcxservice.json + hash: sha256:488eea449c6ee45dc324f4f7c095a862c7d50d0e238075846122b51b2bab4878 + fetched: '2026-09-14' + note: 'API specification: claimhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths /v1/claim/submit and /v1/claim/on_submit.' +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.claim-submit + - nhcx.endpoint.claim-on-submit + callbacks: + - nhcx.callback.claim-submit + - nhcx.callback.claim-on-submit + - nhcx.callback.error + fhir: + - nhcx.fhir.collection-bundle + - nhcx.fhir.validation + - nhcx.fhir.claim-request + - nhcx.fhir.claim-response + concepts: + - nhcx.concept.claim-cycle + - nhcx.concept.status-lifecycle + - nhcx.concept.four-message-legs + tests: + - nhcx.test.provider-uc-09 + - nhcx.test.payer-uc-11 + - nhcx.test.tc-cl-01 + flows: + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.payer-process-a-request + - nhcx.flow.biometric-face + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.claim-query-response + - nhcx.flow.claim-reprocess + - nhcx.flow.payment-notice + - nhcx.flow.preauth-submit + - nhcx.flow.send-a-sealed-request + - nhcx.flow.status-check + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1001 + - nhcx.error.payr-1301 + - nhcx.error.payr-1302 + - nhcx.error.payr-1363 + glossary: + - nhcx.glossary.claim + - nhcx.glossary.payer + - nhcx.glossary.pmjay +--- + +# Submit a claim after discharge + +## In plain words + +A [claim](../glossary/claim.md) asks the payer to pay for treatment already delivered. It uses the same Claim structure as the [preauthorisation](preauth-submit.md), with `Claim.use` set to `claim`. It carries final amounts and the full record: discharge summary, operative notes, diagnostics and the itemised bill. + +For [PMJAY](../glossary/pmjay.md) there is no separate discharge submission. Discharge details travel inside the claim, with workflow `15`. + +The [payer](../glossary/payer.md) may answer more than once. `x-hcx-status` `response.partial` means the claim is still open. `response.complete` closes it, and no further submissions are accepted against that claim identifier. + +## Before you start + +- The case holds an approved preauthorisation with a `preAuthRef`. +- No claim has been raised for the case yet. +- The amount you will claim is no more than the preauthorisation's approved amount. +- You authenticated the beneficiary at discharge by [fingerprint or iris](biometric-fingerprint-iris.md) or [face](biometric-face.md). Where that is not possible, you have the Authentication Consent Questionnaire response to attach. +- The discharge documents are ready: discharge summary, operative notes, diagnostic reports and the final itemised bill. +- Your session token, callback endpoint and the payer's certificate are in place, as in [send a sealed request](send-a-sealed-request.md). + +## What happens + +```mermaid +sequenceDiagram + participant P as Provider (your system) + participant N as NHCX + participant Y as Payer + P->>N: POST /v1/claim/submit (workflow 15) + N-->>P: HTTP 202 Accepted + N->>Y: POST /v1/claim/submit + Y-->>N: HTTP 202 Accepted + opt interim updates + Y->>N: POST /v1/claim/on_submit (workflow 25, 28 or 29, response.partial) + N->>P: POST /v1/claim/on_submit + P-->>N: HTTP 202 Accepted + end + Note over Y: payer adjudicates the claim + Y->>N: POST /v1/claim/on_submit (decision) + N-->>Y: HTTP 202 Accepted + N->>P: POST /v1/claim/on_submit + P-->>N: HTTP 202 Accepted, within 30 seconds + alt complete and approved (workflow 26) + Note left of P: approved, wait for the payment notice + else partial and queried (workflow 27) + Note left of P: queried, answer the query + else complete and cancelled + Note left of P: rejected, consider reprocess + end +``` + +1. Start from the preauthorisation bundle. Change `Claim.use` to `claim`. Keep `Claim.identifier`, and reference the approved `preAuthRef`. +2. Replace the estimates with final amounts. Keep the diagnoses and procedures unless the treatment changed. Add the discharge documents to `supportingInfo`. See [the claim request bundle](../fhir/claim-request.md). +3. For PMJAY, record the discharge in `supportingInfo` with category `DIS`. Its code is `DTH`, `DTM`, `LAMA` or `DAMA`, and its value is `Before Surgery` or `After Surgery`. +4. Seal and set the headers, as in [send a sealed request](send-a-sealed-request.md). Set `x-hcx-workflow_id` to `15` and `x-hcx-status` to `request.initiated`. Send `x-hcx-ben-abha-id`. +5. Start a new correlation. Set `x-hcx-correlation_id` to the value of this call's `x-hcx-api_call_id`. Store it against the case. +6. Call [POST /v1/claim/submit](../endpoints/claim-submit.md). NHCX answers `202 Accepted`. It is not the adjudication. +7. Wait. Interim callbacks may arrive on `/v1/claim/on_submit` with `x-hcx-status` `response.partial`: workflow `25` received, `28` in process, `29` forwarded. Answer each with `202` and keep waiting. +8. Receive the decision on [POST /v1/claim/on_submit](../callbacks/claim-on-submit.md). Answer `202 Accepted` within 30 seconds, then process. +9. Read `type`. `ProtocolResponse` means the payer could not process the claim. Otherwise decrypt `payload` and read the [ClaimResponse](../fhir/claim-response.md). +10. Read `ClaimResponse.outcome` and `adjudication[0].reason` together. Both an approval and a rejection carry `outcome` `complete`. + +| `outcome` | Adjudication reason | Meaning | What to do | +|---|---|---|---| +| `complete` | `approved` | Approved, workflow `26` | Wait for the [payment notice](payment-notice.md) | +| `partial` | `approved` | Partly approved at a reduced amount | Read `processNote` for the reduction. Wait for payment | +| `partial` | `queried` | Queried, workflow `27`, totals `0` | [Answer the query](claim-query-response.md) | +| `complete` | `cancelled` | Rejected. The claim is closed | Decide whether to [ask for reprocessing](claim-reprocess.md) | + +## How you know it worked + +The claim is adjudicated when all of these hold: + +- You received `POST /v1/claim/on_submit` whose `x-hcx-correlation_id` equals the one you sent. +- Its `type` is not `ProtocolResponse`, and `payload` decrypts with your private key. +- The ClaimResponse has `use` `claim`, `outcome` `complete`, adjudication reason `approved`, and a `benefit` total above zero. +- `x-hcx-workflow_id` is `26` and `x-hcx-status` is `response.complete`. +- You stored the approved amount against the case, ready to reconcile the payment notice. + +A rejection, `complete` with reason `cancelled`, also ends this flow. A query hands over to the query flow. + +## When it goes wrong + +The payer finds no approved preauthorisation. [PAYR-1302](../errors/payr-1302.md) means no approved record exists for the case number. Check that the claim carries the preauthorisation's claim identifier. + +A claim already exists. [PAYR-1301](../errors/payr-1301.md) means the case number already has a claim. To add documents to a queried claim, [answer the query](claim-query-response.md) instead. + +Authentication is missing at discharge. [PAYR-1363](../errors/payr-1363.md) means you sent neither biometric authentication nor the consent questionnaire response. + +The 202 arrives and no decision follows. Interim `response.partial` callbacks mean the payer is still working. For long waits, [check the request's status](status-check.md). An undeliverable request comes back on [/v1/error](../callbacks/error.md). + +NHCX or the payer rejects the envelope. [NHCX-1006](../errors/nhcx-1006.md) means the correlation id was used before. A `ProtocolResponse` with [PAYR-1001](../errors/payr-1001.md) means the payer could not decrypt your request. diff --git a/catalogue/nhcx/flows/coverage-eligibility-check.md b/catalogue/nhcx/flows/coverage-eligibility-check.md new file mode 100644 index 000000000..a62d78872 --- /dev/null +++ b/catalogue/nhcx/flows/coverage-eligibility-check.md @@ -0,0 +1,181 @@ +--- +id: nhcx.flow.coverage-eligibility-check +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Check coverage eligibility +summary: >- + Ask the patient's payer whether the policy is in force, how much balance is left, + and what a planned treatment needs before it can be approved. +sources: +- url: https://hcxsbx.abdm.gov.in/images/cfcbe62e8378d4f48ee6.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Coverage Eligibility.pdf + hash: sha256:69dd680ddac44231a97276a1d735e45777d8e43b5563b7248fd367a838d9744f + fetched: '2026-09-14' + note: Coverage Eligibility, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. Coverage Eligibility Check request and response. +- url: https://hcxsbx.abdm.gov.in/images/13093b5f9b88fe826123.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Insurance Plan IG.docx + hash: sha256:e9c6c82b6d67fd8476d6d19a5961419beb04e3c0613533453ed1e16e2a569cc1 + fetched: '2026-09-14' + note: Insurance Plan IG, row 25 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. CoverageEligibility purposes; flattened request and response tables. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. 7.3 request guidance; response item elements; discovery note. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet Scenarios, rows 3 to 5. +- url: https://hcxsbx.abdm.gov.in/coverageeligibilityhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/coverageeligibilityhcxservice.json + hash: sha256:1723a4020b1b33d0bc1d7175609f0d05e6a6a78e8b4c52041222396639ceb52c + fetched: '2026-09-14' + note: 'API specification: coverageeligibilityhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths /v1/coverageeligibility/check and /on_check.' +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.coverageeligibility-on-check + callbacks: + - nhcx.callback.coverageeligibility-check + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.error + fhir: + - nhcx.fhir.collection-bundle + - nhcx.fhir.validation + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + concepts: + - nhcx.concept.four-message-legs + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.message-identifiers + - nhcx.concept.protocol-headers + - nhcx.concept.coverage-eligibility-purposes + - nhcx.concept.session-token + tests: + - nhcx.test.provider-uc-05 + - nhcx.test.payer-uc-07 + - nhcx.test.tc-ce-01 + - nhcx.test.tc-abha-01 + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.pmjay-patient-to-cashless + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.payer-process-a-request + - nhcx.flow.insurance-plan-request + - nhcx.flow.sandbox-onboarding + - nhcx.flow.send-a-sealed-request + - nhcx.flow.status-check + decisions: + - nhcx.decision.eligibility-purpose + errors: + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1018 + - nhcx.error.payr-1001 + - nhcx.error.payr-1004 + - nhcx.error.payr-1007 + - nhcx.error.payr-1032 + - nhcx.error.payr-1033 + - nhcx.error.payr-1116 + glossary: + - nhcx.glossary.jwe + - nhcx.glossary.participant-code + - nhcx.glossary.payer + - nhcx.glossary.pmjay + - shared.glossary.abha-number + - shared.glossary.nhcx + sandbox: + - nhcx.sandbox.callback-url-requirements + - nhcx.sandbox.dummy-payer + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.recipient-cannot-decrypt +--- + +# Check coverage eligibility + +## In plain words + +A coverage eligibility check asks a payer about one patient before treatment. Is the policy in force? How much balance is left? Does the planned treatment need approval, and with which documents? + +Your system sends the question to the [NHCX](../../shared/glossary/nhcx.md) exchange, sealed so that only the [payer](../glossary/payer.md) can read it. The exchange forwards it. The payer's answer arrives later, as a callback to the endpoint you registered. + +Every request names a purpose. The purpose decides what the payer returns. + +| Purpose | What the payer returns | +|---|---| +| `validation` | Whether the policy is in force, the amount already used and the balance left | +| `benefits` | The benefits the policy covers | +| `auth-requirements` | For each treatment you name: whether it is covered at your hospital, the covered amount, and the documents and questionnaires preauthorisation needs | +| `discovery` | The active policy code, when the policy lookup finds nothing for the patient | + +[Which coverage eligibility purpose to send](../decisions/eligibility-purpose.md) explains when each one fits. [The three coverage eligibility purposes](../concepts/coverage-eligibility-purposes.md) explains the model. + +## Before you start + +- Your hospital is an active participant with a [participant code](../glossary/participant-code.md). [Sandbox onboarding](sandbox-onboarding.md) gets you there. +- You hold a valid [session token](../concepts/session-token.md). +- Your callback endpoint is registered and meets the [callback URL rules](../sandbox/callback-url-requirements.md). It answers every callback within 30 seconds. +- You know who adjudicates this patient's policy. The [policy lookup](../endpoints/participant-get-policies.md) returns a `payerid` and a `processingid`. Address the request to the `processingid`. +- You hold that participant's encryption certificate, fetched with [/fetch/certs](../endpoints/fetch-certs.md). +- You have the patient's [ABHA number](../../shared/glossary/abha-number.md). For [PMJAY](../glossary/pmjay.md) you also have the member ID. +- For `auth-requirements`, you know the package codes you plan to treat. The [insurance plan](insurance-plan-request.md) lists them. +- In the sandbox, address the request to the [dummy payer](../sandbox/dummy-payer.md). + +## What happens + +```mermaid +sequenceDiagram + participant P as Provider (your system) + participant N as NHCX + participant Y as Payer + P->>N: POST /v1/coverageeligibility/check + Note right of P: sealed CoverageEligibilityRequest bundle, x-hcx-status request.initiated + N-->>P: HTTP 202 Accepted + N->>Y: POST /v1/coverageeligibility/check + Y-->>N: HTTP 202 Accepted + Note over Y: payer checks the policy, the wallet and the named treatments + Y->>N: POST /v1/coverageeligibility/on_check + N-->>Y: HTTP 202 Accepted + N->>P: POST /v1/coverageeligibility/on_check + P-->>N: HTTP 202 Accepted, within 30 seconds + Note left of P: decrypt and read the CoverageEligibilityResponse +``` + +1. Build the [CoverageEligibilityRequest bundle](../fhir/coverage-eligibility-request.md). Include the patient, the active coverage, your hospital and the payer as organisations, and the person running the check as `enterer`. +2. Set `purpose`. For `auth-requirements`, add one `item` per package, with its category code, package code and quantity. +3. Seal the bundle as a [JWE](../glossary/jwe.md) and set the protected headers, as in [send a sealed request](send-a-sealed-request.md). Set `x-hcx-status` to `request.initiated` and send `x-hcx-ben-abha-id`. +4. Start a new correlation. Set `x-hcx-correlation_id` to the value of this call's `x-hcx-api_call_id`. +5. Call [POST /v1/coverageeligibility/check](../endpoints/coverageeligibility-check.md). NHCX answers `202 Accepted`. The envelope passed validation and is on its way to the payer. It is not the answer. +6. Wait for the callback. The payer answers once it has checked the policy. A payer may instead ask NHCX to forward the same request to another payer. +7. Receive [POST /v1/coverageeligibility/on_check](../callbacks/coverageeligibility-on-check.md). Answer `202 Accepted` within 30 seconds, then process. +8. Read the body's `type`. `ProtocolResponse` means the payer could not process the request, and `x-hcx-error_details` says why. Any other type carries the sealed answer in `payload`. Decrypt it with your private key. +9. Read the [CoverageEligibilityResponse](../fhir/coverage-eligibility-response.md). Business problems, such as an expired policy, sit inside this sealed response, never in the headers. + +## How you know it worked + +The check is finished when all of these hold: + +- You received `POST /v1/coverageeligibility/on_check` whose `x-hcx-correlation_id` equals the correlation id you sent. +- Its `type` is not `ProtocolResponse`, and `payload` decrypts with your private key. +- The bundle holds a `CoverageEligibilityResponse` with `outcome` `complete`. +- For `validation`, `insurance[].inforce` is `true` and the benefit carries the balance left in `allowedMoney`. +- For `auth-requirements`, each item carries `excluded`, `authorizationRequired` and the `authorizationSupporting` document codes, such as `MAND0409`. +- You answered the callback with `202` within 30 seconds, so NHCX does not deliver it again. + +## When it goes wrong + +The 202 arrives and the callback never does. Check your endpoint against the [callback URL rules](../sandbox/callback-url-requirements.md), then [check the request's status](status-check.md). A request NHCX cannot deliver comes back to you on [/v1/error](../callbacks/error.md). See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). + +NHCX rejects the call. [NHCX-1006](../errors/nhcx-1006.md) means the correlation id was used before. [NHCX-1003](../errors/nhcx-1003.md) means the recipient code is not registered. [NHCX-1018](../errors/nhcx-1018.md) means the ABHA number in `x-hcx-ben-abha-id` is in the wrong format. + +The callback is a `ProtocolResponse` with [PAYR-1001](../errors/payr-1001.md). The payer could not decrypt your request. Fetch its certificate again and reseal. See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). + +The payer refuses the purpose or the items. [PAYR-1032](../errors/payr-1032.md) is an invalid purpose. [PAYR-1033](../errors/payr-1033.md) means `auth-requirements` arrived without items. + +The policy or the hospital does not qualify. From a payer on the published standard, [PAYR-1004](../errors/payr-1004.md) means your hospital is not registered with it for this policy. [PAYR-1007](../errors/payr-1007.md) means the policy has expired. [PAYR-1116](../errors/payr-1116.md) means your hospital may not raise cases under this policy. diff --git a/catalogue/nhcx/flows/generate-and-register-certificate.md b/catalogue/nhcx/flows/generate-and-register-certificate.md new file mode 100644 index 000000000..240990b8a --- /dev/null +++ b/catalogue/nhcx/flows/generate-and-register-certificate.md @@ -0,0 +1,169 @@ +--- +id: nhcx.flow.generate-and-register-certificate +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Generate an encryption certificate and register it +summary: >- + Make the key pair and self-signed certificate that other participants use to seal + messages to you, and publish the certificate in your participant record. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ec361a6c3e90e766d227.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Steps to generate encryption Certificate.pdf + hash: sha256:94605e935f05ebb49e24dee50787cb4f3f1c401983a9616a5aaabdbc302f664b + fetched: '2026-09-14' + note: Steps to generate encryption Certificate, row 20 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-3, Steps 1 to 4. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths /participant/create, /participant/update, /v2/participant/update, /v2/update/cert, /fetch/certs.' +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Steps 3 and 4, Participant Updation. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. 2.4 Encryption Steps; 3.3 Certificate Fetch. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.participant-create + - nhcx.endpoint.participant-update + - nhcx.endpoint.v2-participant-update + - nhcx.endpoint.update-validate + - nhcx.endpoint.v2-update-cert + - nhcx.endpoint.fetch-certs + flows: + - nhcx.flow.sandbox-onboarding + - nhcx.flow.production-onboarding + - nhcx.flow.rotate-certificate + - nhcx.flow.receive-a-sealed-callback + concepts: + - nhcx.concept.encryption-certificate + - nhcx.concept.jwe-envelope + glossary: + - nhcx.glossary.x509-certificate + - nhcx.glossary.jwe + errors: + - nhcx.error.payr-1001 + - nhcx.error.payr-1002 + troubleshooting: + - nhcx.troubleshooting.recipient-cannot-decrypt +--- + +# Generate an encryption certificate and register it + +## In plain words + +Every message on the [National Health Claims Exchange](../../shared/glossary/nhcx.md) (NHCX) is sealed so that only its recipient can open it. A sender seals with the recipient's public key. The recipient opens the message with the matching private key, which never leaves the recipient's systems. + +This flow makes that key pair and wraps the public key in a self-signed [X.509 certificate](../glossary/x509-certificate.md). It then publishes the certificate in your participant record. From then on, any participant can fetch it and seal a [JWE](../glossary/jwe.md) to you. + +## Before you start + +- OpenSSL on the machine where your private key will live. +- A session token, for the registration call. See [the session token concept](../concepts/session-token.md). +- One of: the sandbox create call you are about to make, or an existing participant code. See [Onboard as a participant in the NHCX sandbox](sandbox-onboarding.md). +- `jq`, for the check in section 4. + +## What happens + +```mermaid +sequenceDiagram + participant You as Your system + participant PS as NHCX participant service + participant Peer as Another participant + Note over You: openssl makes private.key and certificate.crt, then base64 + You->>PS: POST /participant/create or /participant/update with encryption_cert + PS-->>You: participant_code + You->>PS: POST /fetch/certs with your own participant code + PS-->>You: the certificate you registered + Peer->>PS: POST /fetch/certs with your participant code + PS-->>Peer: your encryption_cert + Note over Peer: caches it for 24 hours and seals messages to you with it +``` + +### 1. Make the private key + +```sh +openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048 +``` + +This writes a 2048-bit RSA private key in PKCS#8 form, beginning `-----BEGIN PRIVATE KEY-----`. You decrypt every message sent to you with it. Keep it out of logs, repositories and messages. + +### 2. Make a certificate signing request + +```sh +openssl req -new -key private.key -out request.csr +``` + +OpenSSL prompts for country, state, organisation and similar fields, then writes `request.csr`. + +### 3. Make the self-signed certificate + +```sh +openssl x509 -req -in request.csr -signkey private.key -out certificate.crt -days 365 +``` + +`certificate.crt` is valid for 365 days. Put the expiry date in your calendar now, and rotate before it. + +### 4. Base64-encode the whole certificate + +```sh +base64 < certificate.crt | tr -d '\n' > certificate_base64.txt +``` + +Encode the entire file, including the `-----BEGIN CERTIFICATE-----` and `-----END CERTIFICATE-----` lines. The result is one line, and it decodes back to your PEM file byte for byte. + +### 5. Register it + +| Where you are | Call | Field that takes the base64 | +|---|---|---| +| Sandbox, new participant | `POST /participant/create` | `encryption_cert` | +| Sandbox, existing participant | `POST /participant/update` with `participant_code` | `encryption_cert` | +| Production, first registration | `POST /v2/participant/update`, then `GET /update/validate` with the SMS passcode | `encryptioncert` | +| Production, replacing a certificate | `POST /v2/update/cert` with `participantId` | `certificate` | + +Each call is described in its own endpoint atom: [create](../endpoints/participant-create.md), [update](../endpoints/participant-update.md), [v2 update](../endpoints/v2-participant-update.md) and [v2 update cert](../endpoints/v2-update-cert.md). + +### 6. What senders do with it + +Before sealing a message to you, a sender calls `POST /fetch/certs` with your participant code. It caches the answer for 24 hours rather than fetching on every message. The answer is an X.509 PEM certificate, or a bare public key. + +## How you know it worked + +The public key that `/fetch/certs` returns for your code is the one in your `certificate.crt`. Save the answer body as `response.json`, then run: + +```sh +jq -r .encryption_cert response.json > fetched.pem +openssl x509 -in certificate.crt -pubkey -noout > mine.pub +openssl x509 -in fetched.pem -pubkey -noout > theirs.pub +diff mine.pub theirs.pub && echo "registered key matches" +``` + +If `fetched.pem` holds a bare public key rather than a certificate, compare it with `mine.pub` directly. + +```observation schema=exit-condition +channel: synchronous +call: POST /fetch/certs +request: + participantid: +match: + encryption_cert: diff of mine.pub and theirs.pub is empty +``` + +The first sealed message you receive then opens with `private.key`. + +## When it goes wrong + +- **Registration is refused.** The value is not base64, or you encoded only the lines between `BEGIN` and `END`. Encode the whole file as in step 4. +- **A payer reports it cannot encrypt to you.** Your registered certificate is missing, wrong or expired. Register a valid one. See [PAYR-1002](../errors/payr-1002.md). +- **A recipient cannot open what you send.** You sealed with an old or wrong copy of its certificate. Fetch it again. See [PAYR-1001](../errors/payr-1001.md) and [The recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **You sent `private.key` instead of `certificate.crt`.** Treat the key as exposed. Make a new pair and register the new certificate at once. +- **The certificate expired after 365 days.** Messages to you start failing. Follow [Rotate your encryption certificate](rotate-certificate.md). diff --git a/catalogue/nhcx/flows/insurance-plan-request.md b/catalogue/nhcx/flows/insurance-plan-request.md new file mode 100644 index 000000000..37542feba --- /dev/null +++ b/catalogue/nhcx/flows/insurance-plan-request.md @@ -0,0 +1,173 @@ +--- +id: nhcx.flow.insurance-plan-request +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Request a patient's insurance plan +summary: >- + Ask the payer for the policy's rules as they apply at your hospital: the packages + you may treat, their rates, their conditions and the documents each one needs. +sources: +- url: https://hcxsbx.abdm.gov.in/images/13093b5f9b88fe826123.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Insurance Plan IG.docx + hash: sha256:e9c6c82b6d67fd8476d6d19a5961419beb04e3c0613533453ed1e16e2a569cc1 + fetched: '2026-09-14' + note: Insurance Plan IG, row 25 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Core APIs, InsurancePlan Task tables; plan structure Approach 1. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: 'NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. InsurancePlan section: key characteristics, claim condition table, error scenarios.' +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet Scenarios, row 2. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. PAYR-1406 row. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Insurance Plan. +- url: https://hcxsbx.abdm.gov.in/insuranceplanhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/insuranceplanhcxservice.json + hash: sha256:03665c6e6a5c8d86e3d621ab577dd683cf13c155d5b9529f5be6ca70fef13dee + fetched: '2026-09-14' + note: 'API specification: insuranceplanhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths /v1/insuranceplan/request and /on_request.' +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.insuranceplan-request + - nhcx.endpoint.insuranceplan-on-request + callbacks: + - nhcx.callback.insuranceplan-request + - nhcx.callback.insuranceplan-on-request + - nhcx.callback.error + fhir: + - nhcx.fhir.task + - nhcx.fhir.validation + - nhcx.fhir.insurance-plan-bundle + - nhcx.fhir.pmjay-insurance-plan + concepts: + - nhcx.concept.four-message-legs + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.message-identifiers + - nhcx.concept.insurance-plan + - nhcx.concept.session-token + tests: + - nhcx.test.provider-uc-06 + - nhcx.test.payer-uc-08 + - nhcx.test.tc-hbp-01 + flows: + - nhcx.flow.pmjay-patient-to-cashless + - nhcx.flow.preauth-submit + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.send-a-sealed-request + - nhcx.flow.status-check + errors: + - nhcx.error.payr-1001 + - nhcx.error.payr-1401 + - nhcx.error.payr-1402 + - nhcx.error.payr-1405 + - nhcx.error.payr-1406 + glossary: + - nhcx.glossary.insurance-plan + - nhcx.glossary.payer + - nhcx.glossary.pmjay + - shared.glossary.hfr + - shared.glossary.nhcx + sandbox: + - nhcx.sandbox.callback-url-requirements + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.support-contacts + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback +--- + +# Request a patient's insurance plan + +## In plain words + +The [insurance plan](../glossary/insurance-plan.md) is the patient's policy in machine-readable form, as it applies at your hospital. It lists the specialties and packages your hospital is empanelled for, the package rates, the claim conditions, and the documents each treatment needs. + +You ask the [payer](../glossary/payer.md) for it through the [NHCX](../../shared/glossary/nhcx.md) exchange, with a Task. The plan arrives later, on your callback. Fetch it before any preauthorisation or claim for a payer and policy, then cache it. + +The plan is filtered to your hospital. It shows only what the payer's agreement with your hospital covers. [The insurance plan](../concepts/insurance-plan.md) explains the model. + +## Before you start + +- Your hospital is an active participant, holds a valid [session token](../concepts/session-token.md), and has a registered callback endpoint that answers within 30 seconds. +- You have the policy number and the payer's `processingid` from the [policy lookup](../endpoints/participant-get-policies.md). The `processingid` goes in `x-hcx-recipient_code`. +- You have your hospital's [HFR](../../shared/glossary/hfr.md) ID. +- You hold the recipient's encryption certificate, fetched with [/fetch/certs](../endpoints/fetch-certs.md). +- No other plan request for this hospital and policy is still open. +- In the sandbox, use the [dummy payer](../sandbox/dummy-payer.md) with the test provider id and policy number it names. + +## What happens + +```mermaid +sequenceDiagram + participant P as Provider (your system) + participant N as NHCX + participant Y as Payer + P->>N: POST /v1/insuranceplan/request + Note right of P: sealed Task bundle, Task.code poll, x-hcx-status request.initiated + N-->>P: HTTP 202 Accepted + N->>Y: POST /v1/insuranceplan/request + Y-->>N: HTTP 202 Accepted + Note over Y: payer builds the plan for this policy and hospital + Y->>N: POST /v1/insuranceplan/on_request + N-->>Y: HTTP 202 Accepted + N->>P: POST /v1/insuranceplan/on_request + P-->>N: HTTP 202 Accepted, within 30 seconds + Note left of P: decrypt, then cache the plan +``` + +1. Build a Task bundle, as in [the insurance plan bundles](../fhir/insurance-plan-bundle.md). Set Task `status` to `requested`, `intent` to `order` and `code` to `poll`. +2. Add two Task inputs: the policy number, and your HFR ID as the provider id. Send both, so the payer returns the view contracted for your hospital. +3. Seal the bundle and set the headers, as in [send a sealed request](send-a-sealed-request.md). Set `x-hcx-status` to `request.initiated`. Set `x-hcx-correlation_id` to the value of this call's `x-hcx-api_call_id`. +4. Call [POST /v1/insuranceplan/request](../endpoints/insuranceplan-request.md). NHCX answers `202 Accepted` and forwards the request. +5. Wait. Do not send a second plan request for the same hospital and policy until this one completes. +6. Receive [POST /v1/insuranceplan/on_request](../callbacks/insuranceplan-on-request.md). Answer `202 Accepted` within 30 seconds, then process. +7. Read the body's `type`. `ProtocolResponse` carries `x-hcx-error_details`. Any other type carries the sealed plan in `payload`. Decrypt it with your private key. +8. Find the `InsurancePlan` resource in the decrypted bundle, with its `Organization` and `Questionnaire` resources. +9. Cache the plan with the date you fetched it. Fetch it again once every 15 days, and after a policy update or a change of treatment. + +For [PMJAY](../glossary/pmjay.md), read the plan like this. [The PMJAY InsurancePlan profile](../fhir/pmjay-insurance-plan.md) has the full mapping. + +| Plan element | What it holds | +|---|---| +| `plan.specificCost.category` | A specialty, such as General Medicine | +| `plan.specificCost.benefit` | A package, such as `SE012A`, Corneal Grafting | +| `specificCost.benefit.cost` | The package rate | +| `cost.qualifiers` | Extra cost types: `Implant`, and `Stratification` for the bed category | +| `claimCondition` extension | Package rules, such as `EnhancementAllowed`, `ApprovalNotRequired` and `IsDayCare` | +| `claimSupportingInfoRequirement` extension | Documents the payer requires during claim processing | + +## How you know it worked + +The request is finished when all of these hold: + +- You received `POST /v1/insuranceplan/on_request` whose `x-hcx-correlation_id` equals the one you sent. +- Its `type` is not `ProtocolResponse`, and `payload` decrypts with your private key. +- The bundle holds an `InsurancePlan` resource listing benefits for the specialties your hospital is empanelled for. +- You answered the callback with `202` within 30 seconds. +- The plan sits in your cache with its fetch date, ready for eligibility and preauthorisation. + +## When it goes wrong + +The payer answers [PAYR-1406](../errors/payr-1406.md). An earlier plan request is still in progress with the payer. Wait 15 to 60 minutes, then ask again with a new correlation id. + +The 202 arrives and the callback never does. [Check the request's status](status-check.md) and your [callback URL](../sandbox/callback-url-requirements.md). An undeliverable request comes back on [/v1/error](../callbacks/error.md). See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). + +The payer refuses the policy or your hospital. [PAYR-1401](../errors/payr-1401.md) means the policy is not allowed for your hospital. [PAYR-1402](../errors/payr-1402.md) means no payer holds the policy. [PAYR-1405](../errors/payr-1405.md) means the payer has no enrolled hospital for your HFR ID or sender code. Each message asks you to contact [technical support](../sandbox/support-contacts.md). + +The plan arrives empty. No coverage matches this policy and hospital. Check the policy number and the HFR ID you sent. + +The callback is a `ProtocolResponse` with [PAYR-1001](../errors/payr-1001.md). The payer could not decrypt your request. Fetch its certificate again and reseal. diff --git a/catalogue/nhcx/flows/notification-subscribe.md b/catalogue/nhcx/flows/notification-subscribe.md new file mode 100644 index 000000000..1df319d99 --- /dev/null +++ b/catalogue/nhcx/flows/notification-subscribe.md @@ -0,0 +1,191 @@ +--- +id: nhcx.flow.notification-subscribe +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Subscribe a patient app to notifications +summary: >- + Have a patient's health record app receive plain-language updates on their pre-authorisations, + claims and payments, by subscribing each time the patient logs in. +sources: +- url: https://hcxsbx.abdm.gov.in/images/01db86335b7c226eb745.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Notification Integration.docx + hash: sha256:05908862c103522fac0dbb482f8eb6a0f8536fc12b1ae3bdb0e98615f30812aa + fetched: '2026-09-14' + note: NHCX Notification Integration, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. sections 2 to 7. +- url: https://hcxsbx.abdm.gov.in/subscriptionhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/subscriptionhcxservice.json + hash: sha256:0d0d4781aa96017c06c8c2533e63dd1a6b36bb2342ebb51aeefca3349d892029 + fetched: '2026-09-14' + note: 'API specification: subscriptionhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths /v1/notification/subscribe and /on_subscribe.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. FAQ 7 role codes; Session API table. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.session-token + - nhcx.endpoint.notification-subscribe + callbacks: + - nhcx.callback.notification-delivery + flows: + - nhcx.flow.sandbox-onboarding + - nhcx.flow.production-onboarding + - nhcx.flow.send-a-sealed-request + concepts: + - nhcx.concept.notifications + - nhcx.concept.beneficiary-consent + - nhcx.concept.jwe-envelope + decisions: + - nhcx.decision.session-endpoint + - nhcx.decision.key-encryption-algorithm + sandbox: + - nhcx.sandbox.support-contacts + - nhcx.sandbox.callback-url-requirements + glossary: + - shared.glossary.phr + - shared.glossary.abha-address + - shared.glossary.eua +--- + +# Subscribe a patient app to notifications + +## In plain words + +A patient's [PHR](../../shared/glossary/phr.md) app can show the patient what is happening to their pre-authorisations, claims and payments. The app acts as a Beneficiary Service Provider (BSP). It subscribes the patient's [ABHA address](../../shared/glossary/abha-address.md) to the [National Health Claims Exchange](../../shared/glossary/nhcx.md) (NHCX). NHCX then pushes a short, readable message to the app whenever a matching event occurs. + +Only one app receives a patient's notifications at a time. The most recent subscription for an ABHA address replaces any earlier one, so the app subscribes again at every login. + +## Before you start + +- Your app has completed [ABDM](../../shared/glossary/abdm.md) [Milestone 1](../../shared/glossary/m1.md) integration. +- You are registered as a BSP: sandbox testing on `hcxsbx.abdm.gov.in`, sandbox certification, then production registry onboarding. An [end user application](../../shared/glossary/eua.md) such as a PHR app registers with role `10009`. See [Onboard as a participant in the NHCX sandbox](sandbox-onboarding.md). +- You host an HTTPS endpoint with TLS 1.2 or higher, where notifications will arrive. +- You have the NHCX gateway's participant code and certificate, which you seal the subscription for. See [Where to get help with NHCX](../sandbox/support-contacts.md). +- The patient has given explicit consent to receive claim updates in your app. See [beneficiary consent](../concepts/beneficiary-consent.md). +- You hold a client ID and secret for the session token. + +## What happens + +```mermaid +sequenceDiagram + participant Pt as Patient + participant App as PHR app, the BSP + participant GW as ABDM session gateway + participant NHCX as NHCX + participant HP as Hospital and payer + Pt->>App: log in with ABHA address and give consent + App->>GW: POST /api/hiecm/gateway/v3/sessions, when no valid token is held + GW-->>App: access token + App->>NHCX: POST /v1/notification/subscribe with a sealed payload + NHCX-->>App: subscription state + Note over NHCX: any earlier subscription for this ABHA address is replaced + HP->>NHCX: pre-authorisation, claim or payment messages for this patient + NHCX->>App: POST to your on_notification_url + App->>Pt: shows the message text +``` + +### 1. Log in and ask for consent + +The patient logs in with their ABHA address. Your app reads their ABHA ID and asks for consent before subscribing. + +### 2. Hold a valid token + +If your token has expired, get a new one. [Which session token endpoint to call](../decisions/session-endpoint.md) settles the address. Read the token's lifetime from the answer, and refresh before it lapses. + +### 3. Build the subscription + +The payload: + +```json +{ + "subscription_id": "", + "topic_code": ["workflow_events"], + "recipient_code": "", + "subscriber": { + "id": "" + }, + "on_notification_url": "" +} +``` + +An optional `expiry` sets when the subscription ends. The topics: + +| `topic_code` | Covers | +|---|---| +| `workflow_events` | Claim lifecycle events: pre-authorisation, claim, payment | +| `network_events` | NHCX platform updates and maintenance | +| `participant_events` | Changes to payer and provider registrations | + +Most PHR apps need only `workflow_events`. + +Seal the payload as a JWE. Its protected header carries `alg`, `enc` `A256GCM`, `x-hcx-sender_code` set to your BSP code, and `x-hcx-recipient_code` set to the NHCX gateway code. It also carries `x-hcx-timestamp` in ISO 8601 and a fresh UUID in `x-hcx-correlation_id` for every attempt. For `alg`, see [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md). + +### 4. Subscribe + +`POST https://hcxsbx.abdm.gov.in/v1/notification/subscribe` with `Authorization: Bearer ` and `Content-Type: application/json`. The body is `{"payload": ""}`. + +The answer returns the subscription state, including `subscription_id` and `subscription_status`. Store `subscription_id` in your app. + +### 5. Wait for events + +**Wait:** there is no fixed time. When a hospital sends a pre-authorisation or claim for this patient and the payer responds, NHCX posts a notification to your `on_notification_url`: + +| Field | Meaning | +|---|---| +| `notification_id` | Unique notification identifier | +| `topic_code` | The topic, for example `workflow_events` | +| `timestamp` | Event time, ISO 8601 | +| `subscriber.id` | The patient's ABHA ID | +| `message` | Readable text you can show the patient as it is | +| `domain_values` | Optional. The `x-hcx-*` values behind the event, for audit or custom display | + +The events under `workflow_events`: + +| Event type | Meaning | Status values | +|---|---|---| +| `preauth_request` | The provider submitted a pre-authorisation | `queued`, `processing` | +| `preauth_response` | The payer decided it | `approved`, `rejected` | +| `claim_request` | The provider submitted a claim | `queued`, `processing` | +| `claim_response` | The payer adjudicated it | `approved`, `rejected` | +| `payment_notice` | Payment processed | `paid`, `pending` | +| `communication` | Information requested | `information_required` | + +In `domain_values`, `x-hcx-action` names the event and `x-hcx-status` carries its protocol status. + +On every incoming notification, enforce TLS 1.2 or higher, validate the JWT from NHCX, and check that the sender code is NHCX's. Rate-limit the endpoint. The full delivery is described in [Receiving a notification on a patient app](../callbacks/notification-delivery.md). + +### 6. Show the state + +Display the subscription status in your app's settings. At the next login, subscribe again. + +## How you know it worked + +The subscribe call returns `subscription_status` `active` for your `subscription_id`. Later, after a hospital and payer exchange a message for that patient, your `on_notification_url` receives a notification. Its `subscriber.id` is the patient's ABHA ID, and your app shows its `message`. + +```observation schema=exit-condition +channel: callback +path: +precondition: + subscribe answer: subscription_status active +match: + subscriber.id: + topic_code: workflow_events +``` + +## When it goes wrong + +| Status | Meaning | What to do | +|---|---|---| +| `401 Unauthorized` | Token expired | Get a new token and subscribe again | +| `403 Forbidden` | Not authorised | Check your BSP registration and status in the registry | +| `409 Conflict` | A conflict on the subscription | Subscribe again under a fresh correlation ID | +| `500 Server Error` | Gateway issue | Retry with backoff | + +- **Notifications stop arriving.** Another app subscribed this patient more recently, so yours was replaced. Subscribe again at the next login, and show the status in settings. +- **Nothing ever arrives.** Your endpoint does not offer TLS 1.2 or higher, or NHCX cannot reach it. See [Callback URL rules and the egress addresses to allow](../sandbox/callback-url-requirements.md). +- **Values are refused or never match.** A copied value carries a stray space, such as a trailing space in a URL. Trim every value before sending it. diff --git a/catalogue/nhcx/flows/payer-process-a-request.md b/catalogue/nhcx/flows/payer-process-a-request.md new file mode 100644 index 000000000..8f3ba87e7 --- /dev/null +++ b/catalogue/nhcx/flows/payer-process-a-request.md @@ -0,0 +1,234 @@ +--- +id: nhcx.flow.payer-process-a-request +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receive, adjudicate and answer a request as a payer +summary: >- + As an insurer or claims administrator, take a provider's request from the exchange, + decide it, and send the sealed decision back on the paired answer path. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use cases 7 to 15, API logic rows. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Acceptance scenario and error scenario. +- file: catalogue/openapi/.raw/nhcx-site-2026-09-14/not-on-site/External_NHCX_Payer_Service_API_Workflow_Guide.docx + hash: sha256:1028d480d2fabe3204301f1c1b192a0077ddfa64f7f9084b01f73e004253fdd7 + fetched: '2026-09-05' + note: NHCX Payer Service API Workflow Guide for External Integrators, not listed on hcxsbx.abdm.gov.in and not named in the NHCX document sheet, received separately. get/user-role, process/case and role table. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Communication. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Status Description. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.coverageeligibility-on-check + - nhcx.endpoint.insuranceplan-on-request + - nhcx.endpoint.preauth-on-submit + - nhcx.endpoint.claim-on-submit + - nhcx.endpoint.task-on-submit + - nhcx.endpoint.search-on-submit + - nhcx.endpoint.communication-request + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.session-token + - nhcx.endpoint.status + - nhcx.endpoint.payer-service-get-user-role + - nhcx.endpoint.payer-service-process-case + callbacks: + - nhcx.callback.coverageeligibility-check + - nhcx.callback.insuranceplan-request + - nhcx.callback.preauth-submit + - nhcx.callback.claim-submit + - nhcx.callback.task-submit + - nhcx.callback.search-submit + - nhcx.callback.communication-on-request + - nhcx.callback.error + - nhcx.callback.on-status + flows: + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.report-a-processing-error + - nhcx.flow.send-a-sealed-request + - nhcx.flow.policy-link-and-delink + concepts: + - nhcx.concept.four-message-legs + - nhcx.concept.message-identifiers + - nhcx.concept.workflow-codes + - nhcx.concept.status-lifecycle + - nhcx.concept.queries-and-communication + - nhcx.concept.claim-cycle + decisions: + - nhcx.decision.payer-implementation + tests: + - nhcx.test.payer-uc-07 + - nhcx.test.payer-uc-08 + - nhcx.test.payer-uc-09 + - nhcx.test.payer-uc-10 + - nhcx.test.payer-uc-11 + - nhcx.test.payer-uc-14 + - nhcx.test.payer-uc-15 + errors: + - nhcx.error.payr-1001 + - nhcx.error.nhcx-1010 + glossary: + - nhcx.glossary.payer + - nhcx.glossary.adjudication + - nhcx.glossary.tpa +--- + +# Receive, adjudicate and answer a request as a payer + +## In plain words + +As a [payer](../glossary/payer.md), you receive providers' requests from the [National Health Claims Exchange](../../shared/glossary/nhcx.md) (NHCX): eligibility checks, pre-authorisations, claims and more. Each arrives at your registered address on the request path, for example `/v1/preauth/submit`. You acknowledge it at once, decide it in your own time, and send the decision back on the paired answer path, for example `/v1/preauth/on_submit`. + +The decision is sealed for the provider. If you cannot process the request at all, you send an unsealed `ProtocolResponse` instead. + +## Before you start + +- You are onboarded as a payer or [TPA](../glossary/tpa.md). Your registered address serves the request paths for your use cases, and `/v1/error`. See [Onboard as a participant in production](production-onboarding.md). +- Your private key matches the certificate in your participant record. +- Your policies are linked, so providers can find them. See [Link and de-link an ABHA and a policy](policy-link-and-delink.md). +- You hold a session token. +- You can validate bundles against the [NRCeS](../../shared/glossary/nrces.md) profiles. + +| Request you receive | Answer you send | What the answer carries | +|---|---|---| +| `/v1/coverageeligibility/check` | `/v1/coverageeligibility/on_check` | Eligibility and plan details | +| `/v1/insuranceplan/request` | `/v1/insuranceplan/on_request` | The insurance plan details | +| `/v1/preauth/submit` | `/v1/preauth/on_submit` | The adjudicated pre-authorisation | +| `/v1/claim/submit` | `/v1/claim/on_submit` | The adjudicated claim | +| `/v1/search/submit` | `/v1/search/on_submit` | The claim responses that match the criteria | +| `/v1/task/submit` | `/v1/task/on_submit` | The answer to a reprocess or cancel task | + +## What happens + +```mermaid +sequenceDiagram + participant Prov as Provider + participant NHCX as NHCX exchange + participant You as Your payer endpoint + participant PS as NHCX participant service + participant Rev as Reviewer acting for the payer + participant PSvc as PMJAY payer service + Prov->>NHCX: POST /v1/preauth/submit + NHCX->>You: POST /v1/preauth/submit + You-->>NHCX: 202 with the acceptance body, within 30 seconds + Note over You: decrypt with your private key and validate the bundle + opt More information needed + You->>NHCX: POST /v1/communication/request + NHCX->>Prov: POST /v1/communication/request + Prov->>NHCX: POST /v1/communication/on_request + NHCX->>You: POST /v1/communication/on_request + end + opt A PMJAY case held in the PMJAY payer service + Rev->>PSvc: POST /pmjay/sbxhcx/nhcxpayerservice/v1/get/user-role + PSvc-->>Rev: the role that holds the case + Rev->>PSvc: POST /pmjay/hcx/nhcxpayerservice/wrapper/process/case + end + Note over You: the decision is ready + You->>PS: POST /fetch/certs with the provider code + PS-->>You: the provider's certificate + You->>NHCX: POST /v1/preauth/on_submit with the sealed decision + NHCX-->>You: 202 + NHCX->>Prov: POST /v1/preauth/on_submit + opt Delivery to the provider fails five times + NHCX->>You: POST /v1/error + end +``` + +### 1. Receive and acknowledge + +Acknowledge within 30 seconds, before any processing. Follow [Receive, open and acknowledge a sealed message](receive-a-sealed-callback.md). + +### 2. Open and validate + +Decrypt the payload with your private key. Validate the bundle against the NRCeS profiles. + +If you cannot decrypt it, the payload is invalid, or a protocol error occurs, do not adjudicate. Answer with a `ProtocolResponse` as in [Report a processing failure on /v1/error](report-a-processing-error.md). A payload you cannot decrypt takes [PAYR-1001](../errors/payr-1001.md). + +### 3. Adjudicate + +Decide the request in your own system, with no fixed turnaround. + +**Wait, when you need documents:** send `POST /v1/communication/request` to the provider, with `x-hcx-status` `request.initiated`. The payload is a TaskBundle that carries a CommunicationRequest. The provider's answer arrives on your `/v1/communication/on_request`. See [queries and communication](../concepts/queries-and-communication.md). + +### 4. Seal the answer + +Fetch the provider's certificate with `POST /fetch/certs`, using the request's `x-hcx-sender_code`. Cache it for 24 hours. Then build the protected header: + +| Header | Rule | +|---|---| +| `x-hcx-sender_code` | Your participant code | +| `x-hcx-recipient_code` | The request's `x-hcx-sender_code` | +| `x-hcx-api_call_id` | A new UUID, different from the correlation ID | +| `x-hcx-correlation_id` | As [message identifiers](../concepts/message-identifiers.md) sets out, so the provider can match your answer | +| `x-hcx-status` | `response.complete` for a final decision. A claim answer can be `response.partial` | +| `x-hcx-workflow_id` | The payer-side stage code, for example `21` approved, `23` rejected or `24` queried. See [workflow codes](../concepts/workflow-codes.md) | + +The answer's `type` is `JWEPayloadResponse` for a sealed decision. Only a request you could not process gets `ProtocolResponse`. + +### 5. Send it + +`POST /v1/preauth/on_submit`, or the paired path from the table, with `{"payload": ""}`. NHCX answers `202` and forwards it to the provider. The provider acknowledges it to NHCX. + +**Wait:** if NHCX cannot deliver your answer after five attempts, the report arrives on your `/v1/error`. + +### 6. PMJAY cases in the PMJAY payer service + +A PMJAY case is adjudicated role by role in the PMJAY payer service. `POST /pmjay/sbxhcx/nhcxpayerservice/v1/get/user-role`, with `caseid` and `payerid`, returns the role that holds the case now. `POST /pmjay/hcx/nhcxpayerservice/wrapper/process/case` applies an action as that role. Call the role lookup before every claim action. + +| Stage | Role | Actions | `usecase` | +|---|---|---|---| +| Pre-authorisation | `PPD-Trust` | `Approve`, `Reject`, `Query` | `PREAUTH` | +| Claim step 1 | `CEX-Trust` | `Forward` | `CLAIM` | +| Claim step 2 | `CPD-Trust` | `Pending`, `cpdApprove`, `cpdReject` | `CLAIM` | +| Claim step 3 | `Medical Audit Committee` | `Approve`, `Reject`, `iQuery` | `Medical Audit Committee` | +| Claim step 4 | `ACO-Trust` | `Approve`, `Reject`, `Pending` | `CLAIM` | +| Claim step 5 | `SHA-Trust` | `Approve`, `Reject`, `Pending` | `CLAIM` | +| Claim step 6 | `Claim Review Committee` | `Approve`, `Reject`, `Pending` | `Claim Review Committee` | + +The `process/case` body carries `casenumber`, `action`, `receivercode`, `usecase`, `correlationid`, `sendercode`, `memberid` and `remarks`. Action names are case-sensitive. Give each call a unique correlation ID. See [POST /pmjay/hcx/nhcxpayerservice/wrapper/process/case](../endpoints/payer-service-process-case.md) and [Answer as your own payer system or through the PMJAY payer service](../decisions/payer-implementation.md). + +## How you know it worked + +NHCX answered `202` to your answer on the paired path, and no `/v1/error` arrives for it. To confirm delivery, send `POST /v1/status` about your answer. The reply on `/v1/on_status` carries `x-hcx-status` `request.dispatched`, meaning the provider's system received it. + +```observation schema=exit-condition +channel: callback +path: /v1/on_status +precondition: + your answer on /v1/preauth/on_submit: HTTP 202 from NHCX +match: + x-hcx-status: request.dispatched +absent: + /v1/error report for your answer +``` + +## When it goes wrong + +- **The same request keeps arriving.** You process inside the 30-second window, or your acknowledgement has the wrong code or body. Acknowledge first, then process. +- **You cannot decrypt the request.** The provider sealed it with an old copy of your certificate. Answer with a `ProtocolResponse` carrying [PAYR-1001](../errors/payr-1001.md), and check [Rotate your encryption certificate](rotate-certificate.md). +- **NHCX refuses your answer, saying no data exists for its correlation ID.** Your `x-hcx-correlation_id` does not match the request. See [NHCX-1010](../errors/nhcx-1010.md). +- **The provider never gets your answer.** `x-hcx-recipient_code` is not the request's sender code. Swap sender and recipient. +- **You sent a `ProtocolResponse` for a rejection.** The provider treats it as a protocol failure. Send a sealed decision with the rejected workflow code. +- **A PMJAY action is refused.** The case sits with another role, or the action name is misspelt. Call `get/user-role` first, and use the action names exactly as in the table. diff --git a/catalogue/nhcx/flows/payment-notice.md b/catalogue/nhcx/flows/payment-notice.md new file mode 100644 index 000000000..ede684773 --- /dev/null +++ b/catalogue/nhcx/flows/payment-notice.md @@ -0,0 +1,158 @@ +--- +id: nhcx.flow.payment-notice +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receive a payment notice and acknowledge it +summary: >- + Receive the payer's notice that a claim is being paid or has been paid, record + the bank reference, and send the acknowledgement back. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: 'NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Payment Notice chapter: workflow table, Task deliver, PaymentReconciliation fields.' +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: 'NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Code tables: Payment Type Code and Task output values.' +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, Payment Notice rows. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/paymentNotice/paymentNotice_ack.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Task resource. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet Scenarios, row 13. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Payment Notice; Payment Notice Trigger API. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.paymentnotice-request + - nhcx.endpoint.paymentnotice-on-request + - nhcx.endpoint.dummy-payer-paymentnotice-init + callbacks: + - nhcx.callback.paymentnotice-request + - nhcx.callback.paymentnotice-on-request + fhir: + - nhcx.fhir.payment-notice + - nhcx.fhir.task + concepts: + - nhcx.concept.claim-cycle + - nhcx.concept.message-identifiers + - nhcx.concept.synchronous-acknowledgement + tests: + - nhcx.test.provider-uc-11 + - nhcx.test.payer-uc-13 + flows: + - nhcx.flow.claim-submit + - nhcx.flow.claim-reprocess + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.rotate-certificate + errors: + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.payr-1002 + glossary: + - nhcx.glossary.payer + - nhcx.glossary.payment-notice + sandbox: + - nhcx.sandbox.callback-url-requirements + - nhcx.sandbox.dummy-payer + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected +--- + +# Receive a payment notice and acknowledge it + +## In plain words + +A [payment notice](../glossary/payment-notice.md) tells your hospital that the payer is paying an approved claim. It carries the amount, the tax deducted at source, the payment date and the bank's Unique Transaction Reference. The claim decision says what will be paid. The notice says what was paid. + +This flow runs the other way from the others. The [payer](../glossary/payer.md) starts it, and your system answers. It arrives some time after the claim approval, not straight away. + +| Workflow | Stage | +|---|---| +| `30` | Payment initiated | +| `31` | Payment processed | +| `33` | Payment settled. The Unique Transaction Reference is available | +| `17` | Your acknowledgement of a notice | + +Acknowledge each notice. The claim is financially closed when you have received workflow `33`, stored its Unique Transaction Reference, and acknowledged it. + +## Before you start + +- A claim for the case was approved: `outcome` `complete`, reason `approved`, workflow `26`. See [submit a claim](claim-submit.md). +- Your callback endpoint is registered, answers within 30 seconds, and receives `/v1/paymentnotice/request`. +- Your current encryption certificate is registered, so the payer can seal the notice for you. +- You can match a notice to a claim by its claim number. +- In the sandbox, trigger a notice from the [dummy payer](../sandbox/dummy-payer.md) with [POST /paymentNotice/init](../endpoints/dummy-payer-paymentnotice-init.md), giving your participant code and the claim number. + +## What happens + +```mermaid +sequenceDiagram + participant Y as Payer + participant N as NHCX + participant P as Provider (your system) + loop for each notice, workflow 30, 31 and 33 + Y->>N: POST /v1/paymentnotice/request + Note left of Y: x-hcx-status request.initiated + N-->>Y: HTTP 202 Accepted + N->>P: POST /v1/paymentnotice/request + P-->>N: HTTP 202 Accepted, within 30 seconds + Note right of P: decrypt, record the amount and the bank reference + P->>N: POST /v1/paymentnotice/on_request (workflow 17) + Note right of P: Task output paymentack, same correlation id + N-->>P: HTTP 202 Accepted + N->>Y: POST /v1/paymentnotice/on_request + Y-->>N: HTTP 202 Accepted + end +``` + +1. Receive [POST /v1/paymentnotice/request](../callbacks/paymentnotice-request.md). Answer `202 Accepted` within 30 seconds, then process. +2. Read `x-hcx-workflow_id`: `30`, `31` or `33`. Decrypt `payload` with your private key. +3. Read the [PaymentNotice bundle](../fhir/payment-notice.md). A Task with `code` `deliver` points to the `PaymentNotice`. The notice points to the `PaymentReconciliation`. +4. Take the claim number from `PaymentNotice.identifier` and the net amount from `PaymentNotice.amount`. +5. From `PaymentReconciliation`, take `paymentDate` and the Unique Transaction Reference in `paymentIdentifier.value`. In `detail`, the entry of type `TDS` is the tax deducted, and the entry of type `Payment` is the net amount. +6. Check that the net amount plus the tax deducted equals the approved claim amount. Store the Unique Transaction Reference against the claim. +7. Build the acknowledgement: a Task with `status` `completed` and `code` `status`. Set `output[0]` to `paymentack`, Payment is acknowledged, and `output[1]` to the claim number. +8. Seal it for the payer. Set `x-hcx-workflow_id` to `17` and `x-hcx-status` to `response.complete`. +9. Set `x-hcx-correlation_id` to the notice's correlation id. Use a fresh `x-hcx-api_call_id`. Address it to the payer that sent the notice. +10. Call [POST /v1/paymentnotice/on_request](../endpoints/paymentnotice-on-request.md). NHCX answers `202 Accepted` and delivers it to the payer. + +## How you know it worked + +The payment is closed when all of these hold: + +- You received `POST /v1/paymentnotice/request` with `x-hcx-workflow_id` `33`, and its `payload` decrypted. +- You stored `PaymentReconciliation.paymentIdentifier.value` against the claim. +- The net amount plus the tax deducted equals the approved amount. +- NHCX answered `202` to your `POST /v1/paymentnotice/on_request` for that notice, with workflow `17` and output `paymentack`. +- You acknowledged the earlier notices, `30` and `31`, the same way. + +## When it goes wrong + +No notice arrives. The notice follows the claim approval after a delay, not straight away. If none comes, check your endpoint against the [callback URL rules](../sandbox/callback-url-requirements.md). See [your callback URL is rejected or never called](../troubleshooting/callback-url-rejected.md). + +You cannot decrypt the notice. The payer sealed it with the certificate registered for you. A payer on the published standard reports [PAYR-1002](../errors/payr-1002.md) when it cannot encrypt for you. [Update your certificate](rotate-certificate.md) and ask the payer to resend. + +NHCX rejects your acknowledgement. [NHCX-1010](../errors/nhcx-1010.md) means no request exists with the correlation id you set. Copy it from the notice exactly. [NHCX-1011](../errors/nhcx-1011.md) means the `x-hcx-status` value is not valid. + +The amounts do not reconcile. Keep the notice, acknowledge it, and raise the shortfall with an [erroneous claim](claim-reprocess.md) after workflow `33`. diff --git a/catalogue/nhcx/flows/pmjay-hospital-migration.md b/catalogue/nhcx/flows/pmjay-hospital-migration.md new file mode 100644 index 000000000..c21cb1140 --- /dev/null +++ b/catalogue/nhcx/flows/pmjay-hospital-migration.md @@ -0,0 +1,193 @@ +--- +id: nhcx.flow.pmjay-hospital-migration +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Migrate a PMJAY hospital to HMIS through NHCX +summary: >- + Move a scheme-empanelled hospital from the central claims portal to its own hospital + system, by onboarding it on the exchange and having its hospital ID mapped to + its participant code. +sources: +- url: https://hcxsbx.abdm.gov.in/images/be2e25fede3bf711f783.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/PMJAY Hospital Migration to HMIS via NHCX.docx + hash: sha256:cf5c9bf1c402b214f65bbb7bd0822f3a76d8ccda9b69c7bf77ba131befef3bc6 + fetched: '2026-09-14' + note: PMJAY Hospital Migration to HMIS via NHCX, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. sections 3.1 to 4.1. +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Steps 1 to 4. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.session-token + - nhcx.endpoint.v2-participant-create + - nhcx.endpoint.validate + - nhcx.endpoint.v2-participant-update + - nhcx.endpoint.update-validate + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.preauth-submit + flows: + - nhcx.flow.production-onboarding + - nhcx.flow.generate-and-register-certificate + - nhcx.flow.send-a-sealed-request + - nhcx.flow.biometric-fingerprint-iris + concepts: + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.hmis-integration-architecture + - nhcx.concept.participant-registry + sandbox: + - nhcx.sandbox.going-live + - nhcx.sandbox.support-contacts + - nhcx.sandbox.callback-url-requirements + errors: + - nhcx.error.nhcx-401 + glossary: + - nhcx.glossary.pmjay + - nhcx.glossary.tms + - shared.glossary.hmis + - shared.glossary.hfr +--- + +# Migrate a PMJAY hospital to HMIS through NHCX + +## In plain words + +A [PMJAY](../glossary/pmjay.md)-empanelled hospital submits claims through the [TMS](../glossary/tms.md) Provider portal until it migrates. After migration, its own [HMIS](../../shared/glossary/hmis.md) sends pre-authorisations and claims through the [National Health Claims Exchange](../../shared/glossary/nhcx.md) (NHCX). Cases already in flight finish in TMS. + +Migration has six steps. The first four are production onboarding with PMJAY's rules. The fifth is a manual mapping by NHA's NHCX Operations team, and that mapping is the switch that takes the hospital live. + +## Before you start + +- The hospital is active in PMJAY, and you know its Hospital Empanelment Module (HEM) ID, the hospital ID used in TMS. +- The hospital is registered in the [Health Facility Registry](../../shared/glossary/hfr.md) (HFR). Someone can receive SMS on the mobile number in that record. +- Your HMIS has passed the NHCX sandbox exit. See [The sandbox exit process and sign-off](../sandbox/sandbox-exit.md). +- You hold a production client ID with the provider role, and a production certificate in base64. See [Generate an encryption certificate and register it](generate-and-register-certificate.md). +- Your HMIS endpoint is HTTPS, publicly accessible and reachable from NHCX. See [the callback address rules](../sandbox/callback-url-requirements.md). + +## What happens + +```mermaid +sequenceDiagram + participant H as Hospital staff + participant You as Hospital HMIS + participant PS as NHCX participant service + participant Ops as NHA NHCX Operations team + participant NHCX as NHCX exchange + participant TMS as PMJAY TMS + You->>PS: POST /v2/participant/create with registrytype 10001 and role 10001 + PS-->>You: participantid and transactionid + PS->>H: SMS passcode + You->>PS: GET /validate with transactionId and passcode + PS-->>You: participant confirmed + You->>PS: POST /v2/participant/update with encryptioncert and endpointurl + PS-->>You: status and a new transactionid + PS->>H: SMS passcode + You->>PS: GET /update/validate with transactionId and passcode + PS-->>You: endpoint active and certificate registered + H->>Ops: ticket with HEM ID, participant ID and the other details + Note over Ops: manual mapping of the HEM ID to the participant ID + You->>NHCX: POST /v1/preauth/submit for cases started after mapping + Note over TMS: cases started before mapping finish here +``` + +Every call goes to the production participant service, `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice`, with your session token. The mechanics of steps 1 to 4 are in [Onboard as a participant in production](production-onboarding.md). This flow adds PMJAY's rules. + +### 1. Create the participant + +`POST /v2/participant/create`: + +```json +{ + "registrytype": "10001", + "registryid": "", + "role": ["10001"], + "endpoint_url": "", + "mobilenumber": "", + "email": "" +} +``` + +- `registrytype` must be `10001`, HFR. A PMJAY hospital cannot use the other registry codes. +- `role` must be `10001`, provider. Any other role is rejected. +- `registryid` must exist in HFR. +- `mobilenumber` must exist in NHCX and match the HFR record exactly. This is the check that fails most. +- If a participant already exists for the registry ID, the call may reject or return the existing participant. + +The answer carries `participantid`, `facilityname`, `facilitycontact`, `facilityemail`, `transactionid` and a null `error`. The participant starts in a pending state. + +**Wait:** a passcode arrives by SMS. + +### 2. Confirm it + +`GET /validate?transactionId=&passcode=`. On success the participant becomes active, and you can register the technical details. + +### 3. Register the endpoint and certificate + +`POST /v2/participant/update` with `participantcode`, `encryptioncert` (the base64 certificate) and `endpointurl` (the HMIS base address). The participant must be active. The answer carries `participant_code`, `status` and a new `transactionid`. + +**Wait:** a second passcode arrives by SMS. + +### 4. Confirm the update + +`GET /update/validate?transactionId=&passcode=`. The passcode is valid for 24 hours. On success the endpoint is active and the certificate is registered, so NHCX can send requests to your HMIS and receive its responses. + +### 5. Ask for the mapping + +Raise a ticket with NHA's NHCX Operations team. They map the hospital's HEM ID to its NHCX participant ID by hand. The ticket carries: + +| Detail | Must be | +|---|---| +| PMJAY Hospital ID (HEM ID) | Active in TMS | +| NHCX participant ID | Active and configured | +| Hospital name | The same as in official records | +| Registered mobile | The same as in HFR | +| Endpoint URL | Live | +| Confirmation status | Step 4 completed | + +**Wait:** the mapping is manual. See [Where to get help with NHCX](../sandbox/support-contacts.md) for the channel. + +### 6. Go live + +The mapping is the go-live trigger. After it, processing splits by when each case was submitted: + +| Case | Processed in | +|---|---| +| Pre-authorisations and claims submitted before mapping | The TMS Provider portal | +| Pre-authorisations and claims submitted after mapping | Your HMIS, through NHCX | + +Your HMIS starts sending claim requests and status updates through NHCX. TMS stops taking new claims from the hospital and receives only the statuses of existing cases. + +Before go-live, confirm the checklist: participant created and validated, endpoint accessible, certificate configured, APIs tested, mapping completed, pilot successful. + +## How you know it worked + +`GET /update/validate` succeeded, and `POST /fetch/certs` for the hospital's participant code returns its certificate. After the mapping, a new pre-authorisation sent from the HMIS on `/v1/preauth/submit` receives `202`. The payer's answer then arrives at the HMIS endpoint on `/v1/preauth/on_submit`. + +```observation schema=exit-condition +channel: callback +path: /v1/preauth/on_submit +precondition: + mapping of HEM ID to participant ID: completed by the NHCX Operations team +match: + x-hcx-recipient_code: +``` + +## When it goes wrong + +| Symptom | Cause | Action | +|---|---|---| +| Create rejected for the registry | `registrytype` is not `10001` | Send `10001` | +| Create rejected for the role | `role` is not `10001` | Send `10001` | +| Create rejected for the mobile | It does not match HFR | Update the mobile number, then create again | +| No passcode arrives | A network issue | Retry the call | +| The transaction is lost | A session issue | Start the step again for a fresh transaction ID | + +- **The participant already exists.** The call rejected the create or returned the existing participant. Continue with the existing participant ID. +- **The mapping ticket is sent back.** One detail fails its check. It may be an inactive HEM ID, a participant not yet configured, or a name or mobile mismatch. An endpoint that is not live, or an incomplete step 4, also fails. +- **New cases still go to TMS.** The mapping has not been done yet. Nothing on your side switches routing. +- **`401` on any call.** The token has expired, or it came from a sandbox client ID. See [NHCX-401](../errors/nhcx-401.md). diff --git a/catalogue/nhcx/flows/pmjay-patient-to-cashless.md b/catalogue/nhcx/flows/pmjay-patient-to-cashless.md new file mode 100644 index 000000000..cb36cdebb --- /dev/null +++ b/catalogue/nhcx/flows/pmjay-patient-to-cashless.md @@ -0,0 +1,184 @@ +--- +id: nhcx.flow.pmjay-patient-to-cashless +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Take a PMJAY patient from registration to cashless treatment +summary: >- + Take a PMJAY patient from registration to an approved preauthorisation: find the + payer and policy, fetch the plan, check eligibility, authenticate, then submit. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Chapter I and II; 5.5 payer search; 5.6 identifier cascade; admission layers table. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet Scenarios, rows 1 to 6. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, item 7. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. FAQ 27 question 4. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.get-session + - nhcx.endpoint.fetch-participants-list + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.insuranceplan-request + - nhcx.endpoint.insuranceplan-on-request + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.coverageeligibility-on-check + - nhcx.endpoint.abha-biometric-auth-init + - nhcx.endpoint.abha-biometric-auth-verify + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.preauth-on-submit + callbacks: + - nhcx.callback.insuranceplan-on-request + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + concepts: + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.hmis-integration-architecture + - nhcx.concept.policy-linking + - nhcx.concept.biometric-authentication + - nhcx.concept.claim-cycle + - nhcx.concept.session-token + flows: + - nhcx.flow.pmjay-hospital-migration + - nhcx.flow.claim-submit + - nhcx.flow.biometric-face + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.insurance-plan-request + - nhcx.flow.preauth-query-response + - nhcx.flow.preauth-submit + tests: + - nhcx.test.tc-abha-01 + - nhcx.test.tc-hbp-01 + - nhcx.test.tc-ce-01 + - nhcx.test.tc-pa-01 + errors: + - nhcx.error.nhcx-401 + - nhcx.error.payr-1004 + - nhcx.error.payr-1256 + - nhcx.error.payr-1401 + - nhcx.error.payr-1405 + glossary: + - nhcx.glossary.pmjay + - nhcx.glossary.tpa + - shared.glossary.abha-number + - shared.glossary.hfr + - shared.glossary.hmis + - shared.glossary.nhcx + troubleshooting: + - nhcx.troubleshooting.everything-returns-401 +--- + +# Take a PMJAY patient from registration to cashless treatment + +## In plain words + +A [PMJAY](../glossary/pmjay.md) patient does not become cashless because they hold a card. Your hospital must first find the payer, confirm the linked policy, and learn the plan's rules. Only then can you check eligibility and ask for preauthorisation. + +Two things must both be true. In your [HMIS](../../shared/glossary/hmis.md), the admission is converted from cash to insurance, with the scheme, payer, identifier and policy number attached. For the [NHCX](../../shared/glossary/nhcx.md) exchange, you have resolved the payer's code, the policy and the member ID. + +The order is fixed: find the payer, find the policy, resolve the codes, fetch the plan, check eligibility, authenticate, submit the preauthorisation. [PMJAY on NHCX](../concepts/pmjay-on-nhcx.md) explains how PMJAY differs from the standard exchange. + +## Before you start + +- Your hospital is migrated to HMIS through NHCX and mapped to its PMJAY hospital ID. See [migrate a PMJAY hospital](pmjay-hospital-migration.md). +- You hold your client credentials and can get a [session token](../concepts/session-token.md) from [/get/session](../endpoints/get-session.md). +- Your callback endpoint is registered and answers within 30 seconds. +- The patient is present, with their [ABHA number](../../shared/glossary/abha-number.md), member ID or registered mobile number. +- Your HMIS supports all three biometric methods: fingerprint, iris and face. + +## What happens + +```mermaid +sequenceDiagram + participant Pt as Patient + participant H as HMIS (your system) + participant N as NHCX + participant Y as Payer + Pt->>H: registers, gives ABHA number, member ID or mobile + H->>N: POST /fetch/participants/list (role PAYER) + N-->>H: payer list + H->>N: POST /participant/get/policies + N-->>H: linked policies with payerid and processingid + H->>N: POST /fetch/certs + N-->>H: recipient certificate + H->>N: POST /v1/insuranceplan/request + N-->>H: HTTP 202 Accepted + N->>Y: POST /v1/insuranceplan/request + Y->>N: POST /v1/insuranceplan/on_request + N->>H: POST /v1/insuranceplan/on_request + H->>N: POST /v1/coverageeligibility/check (validation, then auth-requirements) + N-->>H: HTTP 202 Accepted + N->>Y: POST /v1/coverageeligibility/check + Y->>N: POST /v1/coverageeligibility/on_check + N->>H: POST /v1/coverageeligibility/on_check + Pt->>H: biometric capture + H->>N: POST /hcx/abha/biometric/auth/init, then auth/verify + N-->>H: authentication result + H->>N: POST /v1/preauth/submit (workflow 12) + N-->>H: HTTP 202 Accepted + N->>Y: POST /v1/preauth/submit + Y->>N: POST /v1/preauth/on_submit + N->>H: POST /v1/preauth/on_submit (approval, query or rejection) + H-->>Pt: cashless treatment confirmed +``` + +Every exchange call is acknowledged with `202 Accepted`. Its answer arrives later on your callback, which you acknowledge with `202` within 30 seconds. + +1. Register the patient. In your HMIS, convert the admission from cash to insurance, with the scheme, payer, identifier type and value, and policy number. +2. Find the payer. Call [POST /fetch/participants/list](../endpoints/fetch-participants-list.md) with role `PAYER`, and let the user pick one. +3. Find the linked policies. Call [POST /participant/get/policies](../endpoints/participant-get-policies.md). Try the ABHA number first, then the member ID, then the mobile number. +4. If no policy comes back, send a [coverage eligibility check](coverage-eligibility-check.md) with purpose `discovery` to get the active policy code. +5. Resolve three values: the policy number, the member ID and the recipient code. Use the `processingid` from the policy lookup as `x-hcx-recipient_code`, not the `payerid`. +6. If you cannot resolve a recipient code, stop. Do not send eligibility or preauthorisation until the policy lookup succeeds. +7. Fetch the recipient's certificate with [POST /fetch/certs](../endpoints/fetch-certs.md). +8. [Request the insurance plan](insurance-plan-request.md) and cache it. It holds the packages, rates, conditions and document rules. +9. [Check coverage eligibility](coverage-eligibility-check.md). Use `validation` after registration for the wallet balance. Use `benefits` before the preauthorisation, and `auth-requirements` once the packages are chosen. +10. Authenticate the beneficiary by [fingerprint or iris](biometric-fingerprint-iris.md) or [face](biometric-face.md). Where that is not possible, complete the Authentication Consent Questionnaire. +11. [Submit the preauthorisation](preauth-submit.md) with workflow `12`, for no more than the balance left. + +## How you know it worked + +The patient is cashless when all of these hold: + +- The admission in your HMIS is marked insurance, with the scheme, payer, member ID and policy number. +- You stored the recipient code, from the policy lookup's `processingid`, against the admission. +- The insurance plan and the eligibility responses are stored against the admission. +- You received `POST /v1/preauth/on_submit` with `x-hcx-workflow_id` `21`, and stored its `preAuthRef`. + +A preauthorisation query, workflow `24`, hands over to [answer a payer query](preauth-query-response.md). A rejection, workflow `23`, ends the cashless path for this admission. + +## When it goes wrong + +The policy lookup returns nothing. Try the next identifier in the order ABHA number, member ID, mobile number. Then use eligibility with purpose `discovery`. See [linking an ABHA to a policy](../concepts/policy-linking.md). + +The request goes to the wrong participant. The `payerid` names the insurer. The `processingid` names who adjudicates, the [TPA](../glossary/tpa.md) where there is one. Address every request to the `processingid`. + +The payer refuses the policy or your hospital. [PAYR-1401](../errors/payr-1401.md) means the policy is not allowed for your hospital. [PAYR-1405](../errors/payr-1405.md) means the payer has no enrolled hospital for your [HFR](../../shared/glossary/hfr.md) ID. [PAYR-1004](../errors/payr-1004.md) from a payer on the published standard means your hospital is not registered for this policy. + +Authentication is missing. [PAYR-1256](../errors/payr-1256.md) means the preauthorisation carried neither biometric authentication nor the consent questionnaire response. + +Every call returns 401. [NHCX-401](../errors/nhcx-401.md) means your session token is missing or expired. Get a new one and retry. See [every NHCX call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/flows/policy-link-and-delink.md b/catalogue/nhcx/flows/policy-link-and-delink.md new file mode 100644 index 000000000..900c7d401 --- /dev/null +++ b/catalogue/nhcx/flows/policy-link-and-delink.md @@ -0,0 +1,180 @@ +--- +id: nhcx.flow.policy-link-and-delink +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Link and de-link an ABHA and a policy +summary: >- + As an insurer or claims administrator, record which beneficiaries hold which products + so that hospitals can find their cover, and remove the record when it ends. +sources: +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/b885e59891fedc7e725c.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection.zip + hash: sha256:2d082f244ee41d137a62af82380dcd2d5db9ebbab66824fd54a23c506d4d9a7f + fetched: '2026-09-14' + note: AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection, row 16 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Get Policies request body. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, item 10. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.session-token + - nhcx.endpoint.participant-link-abha-policy + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.participant-delink-abha-policy + flows: + - nhcx.flow.production-onboarding + - nhcx.flow.sandbox-onboarding + - nhcx.flow.send-a-sealed-request + concepts: + - nhcx.concept.policy-linking + - nhcx.concept.participant-code + tests: + - nhcx.test.payer-uc-01 + - nhcx.test.payer-uc-02 + - nhcx.test.payer-uc-03 + - nhcx.test.provider-uc-02 + sandbox: + - nhcx.sandbox.environments-and-base-urls + - nhcx.sandbox.support-contacts + errors: + - nhcx.error.nhcx-401 + glossary: + - nhcx.glossary.payer + - nhcx.glossary.tpa + - shared.glossary.abha-number +--- + +# Link and de-link an ABHA and a policy + +## In plain words + +A hospital finds a patient's insurance on the [National Health Claims Exchange](../../shared/glossary/nhcx.md) (NHCX) by looking up the patient's [ABHA number](../../shared/glossary/abha-number.md), member ID or mobile. The lookup finds only policies a [payer](../glossary/payer.md) has linked. A link records which products a member holds, and which participants handle them. + +The payer links a policy when the individual buys it. It de-links the policy when the policy ends, or when the insurer moves to another [TPA](../glossary/tpa.md). + +## Before you start + +- Every insurer has its own participant code, even when a TPA processes its claims. See [Onboard as a participant in production](production-onboarding.md). +- You hold a session token minted with the client ID used when the payer or TPA participant was created. De-linking checks this. +- For each member you have the ABHA number, mobile number and member ID, and each product's ID and name. +- You know the participant service base address: `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` in the sandbox, `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` in production. + +## What happens + +```mermaid +sequenceDiagram + participant Pay as Payer system, insurer or TPA + participant PS as NHCX participant service + participant Prov as Provider system + Pay->>PS: POST /participant/link/abha/policy + PS-->>Pay: response + Prov->>PS: POST /participant/get/policies with the ABHA number + PS-->>Prov: linked policies with payerid and processingid + Note over Prov: sends requests to the processingid + Pay->>PS: POST /participant/delink/abha/policy + Note over PS: the token's client ID must belong to the payerid or processingid participant + PS-->>Pay: de-linked, or refused with an error message +``` + +Every call answers in its own response. Nothing arrives later. + +### 1. Link + +`POST {base}/participant/link/abha/policy`: + +```json +{ + "requestid": "", + "abhanumber": "", + "mobilenumber": "", + "memberid": "", + "payerid": "", + "processingid": "", + "policies": [ + { + "productid": "", + "productname": "" + } + ] +} +``` + +- `payerid` is always the insurer's own participant code. +- `processingid` is the participant code of the TPA under which the insurer is mapped. +- `policies` lists every product the member holds with this insurer. + +Put `/participant/link/abha/policy` directly after the base address. The base already ends in `/participanthcxservice`, so that segment appears once. + +### 2. Check the link + +`POST {base}/participant/get/policies`: + +```json +{ + "identifiertype": "AbhaNumber", + "identifiervalue": "" +} +``` + +`identifiertype` is `AbhaNumber`, `MemberId` or `MobileNo`. This is the same call a hospital makes. The hospital then addresses its requests to the `processingid` in the answer. + +### 3. De-link + +`POST {base}/participant/delink/abha/policy`: + +```json +{ + "requestid": "", + "payerid": "", + "memberid": "", + "processingid": "", + "policies": [ + { + "productid": "", + "productname": "" + } + ] +} +``` + +Include `processingid` when the policy was linked with one. List only the products to remove. + +NHCX reads the client ID from your token. It allows the de-link only when that client ID registered the insurer named in `payerid` or the TPA named in `processingid`. + +### 4. When the insurer changes TPA + +De-link the existing policies. Link them again with the new TPA's participant code as `processingid`. + +## How you know it worked + +After linking, `POST /participant/get/policies` with the member's ABHA number returns the policy with your `payerid` and `processingid`. After de-linking, the same lookup no longer returns the products you removed. + +```observation schema=exit-condition +channel: synchronous +call: POST /participant/get/policies +request: + identifiertype: AbhaNumber + identifiervalue: +match: + after link: the policy appears with your payerid and processingid + after de-link: the removed products are absent +``` + +## When it goes wrong + +- **The de-link is refused.** Your token was minted with a client ID that did not register the `payerid` or `processingid` participant. Mint it with the right client ID. If the IDs still do not match, confirm them with the NHCX team by email. See [Where to get help with NHCX](../sandbox/support-contacts.md). +- **"There is no policies with requested details".** The product you asked to de-link is not in the member's linked list. Check `productid`, `productname` and `memberid` against what you linked. +- **`404` on link or de-link.** The address repeats `/participanthcxservice`. Use it once. +- **Hospitals send requests to the wrong participant.** They addressed the `payerid` instead of the `processingid` from the lookup. +- **`401` on any call.** Get a new session token. See [NHCX-401](../errors/nhcx-401.md). diff --git a/catalogue/nhcx/flows/preauth-cancel.md b/catalogue/nhcx/flows/preauth-cancel.md new file mode 100644 index 000000000..c54038f50 --- /dev/null +++ b/catalogue/nhcx/flows/preauth-cancel.md @@ -0,0 +1,141 @@ +--- +id: nhcx.flow.preauth-cancel +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Cancel a preauthorisation +summary: >- + Withdraw a preauthorisation you no longer need, for example after the treatment + plan changes, before any claim is raised against it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. pages 32-33, 8.4.5 Cancellation. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Preauth cancel Task table; workflow code table. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, Preauthorization Cancellation rows. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet Scenarios, row 9. +- url: https://hcxsbx.abdm.gov.in/images/140dbb309d5825459a7f.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Sample FHIR bundles.zip + member: FHIR_bundles_PMJAY_ext/preauth/cancel/preauth_cancel_response.txt + hash: sha256:8c7b24e3022733aaf7e8f517e12c11c0e8eddd6293844a2c4f3e9700fb720dca + fetched: '2026-09-14' + note: Sample FHIR bundles, row 29 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. ClaimResponse resource. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. PAYR-1237 and PAYR-1238 rows. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.task-submit + - nhcx.endpoint.task-on-submit + callbacks: + - nhcx.callback.task-submit + - nhcx.callback.task-on-submit + - nhcx.callback.error + fhir: + - nhcx.fhir.preauth-cancel + - nhcx.fhir.task + concepts: + - nhcx.concept.reprocess-and-cancel + - nhcx.concept.workflow-codes + tests: + - nhcx.test.provider-uc-12 + - nhcx.test.payer-uc-14 + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + - nhcx.flow.send-a-sealed-request + - nhcx.flow.status-check + errors: + - nhcx.error.err-pyr-clm-007 + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1001 + glossary: + - nhcx.glossary.payer +--- + +# Cancel a preauthorisation + +## In plain words + +Cancelling withdraws a preauthorisation you no longer need. The patient may have changed treatment, or left before the procedure. Until the claim is raised, you can cancel. + +An open preauthorisation blocks a new one for the same beneficiary, at your hospital and at any other. Cancelling releases it. + +You cancel with a FHIR Task, not a Claim, on `/v1/task/submit`. The workflow code is `PC01`. The [payer](../glossary/payer.md) confirms on `/v1/task/on_submit` with a completed Task that points to a ClaimResponse whose adjudication reason is `cancelled`. + +## Before you start + +- The preauthorisation exists and no claim has been raised against it. +- You have its claim identifier, the case number the payer knows it by. +- You know why you are cancelling. `treatmentplanchanged` is the published reason code for a changed treatment plan. +- Your session token, callback endpoint and the payer's certificate are in place, as in [send a sealed request](send-a-sealed-request.md). + +## What happens + +```mermaid +sequenceDiagram + participant P as Provider (your system) + participant N as NHCX + participant Y as Payer + P->>N: POST /v1/task/submit (workflow PC01) + Note right of P: Task code cancel, input claim number + N-->>P: HTTP 202 Accepted + N->>Y: POST /v1/task/submit + Y-->>N: HTTP 202 Accepted + Note over Y: payer cancels the case + Y->>N: POST /v1/task/on_submit (workflow PC02) + N-->>Y: HTTP 202 Accepted + N->>P: POST /v1/task/on_submit + P-->>N: HTTP 202 Accepted, within 30 seconds + Note left of P: Task completed, ClaimResponse reason cancelled +``` + +1. Build a Task bundle, as in [the preauthorisation cancel bundles](../fhir/preauth-cancel.md). Set Task `status` to `requested`, `intent` to `order`, and `code` to `cancel` from the financial task code system. +2. Set `reasonCode`, for example `treatmentplanchanged`. Add the inputs for the claim number and the intimation number. Both carry the preauthorisation's claim identifier. Set `requester` to your organisation and `owner` to the payer. +3. Seal and set the headers, as in [send a sealed request](send-a-sealed-request.md). Set `x-hcx-workflow_id` to `PC01`, Preauthorization Cancellation, and `x-hcx-status` to `request.initiated`. +4. Start a new correlation. Set `x-hcx-correlation_id` to the value of this call's `x-hcx-api_call_id`. +5. Call [POST /v1/task/submit](../endpoints/task-submit.md). NHCX answers `202 Accepted`. It is not the confirmation. +6. Receive [POST /v1/task/on_submit](../callbacks/task-on-submit.md). Answer `202 Accepted` within 30 seconds, then process. +7. Read `type`. `ProtocolResponse` means the payer could not process the request. Otherwise decrypt `payload` with your private key. +8. Find the Task. Its `status` is `completed`. Follow its `output` reference to the ClaimResponse in the same bundle. +9. Confirm the ClaimResponse `outcome` is `complete` and its adjudication reason is `cancelled`. Workflow `PC02`, Preauthorization Cancellation Accomplished, names this answer. + +## How you know it worked + +The preauthorisation is cancelled when all of these hold: + +- You received `POST /v1/task/on_submit` whose `x-hcx-correlation_id` equals the one you sent. +- Its `payload` decrypts, and the Task in it has `status` `completed`. +- The ClaimResponse the Task points to has `outcome` `complete` and adjudication reason `cancelled`. +- You marked the case cancelled, and stopped any claim work on it. + +## When it goes wrong + +The payer cannot find the case. [ERR-PYR-CLM-007](../errors/err-pyr-clm-007.md) means no preauthorisation or claim record exists for the case number. Check the claim number in the Task inputs against the identifier you used on the preauthorisation. + +A claim was already raised. Cancelling is allowed only until the claim is raised. Continue with the [claim](claim-submit.md) instead. + +NHCX rejects the request as a duplicate. [NHCX-1006](../errors/nhcx-1006.md) means you reused a correlation id. Start a new correlation for the cancellation. + +The callback is a `ProtocolResponse`. [PAYR-1001](../errors/payr-1001.md) means the payer could not decrypt your request. Fetch its certificate again and reseal. + +The 202 arrives and no confirmation follows. [Check the request's status](status-check.md). An undeliverable request comes back on [/v1/error](../callbacks/error.md). diff --git a/catalogue/nhcx/flows/preauth-enhancement.md b/catalogue/nhcx/flows/preauth-enhancement.md new file mode 100644 index 000000000..9fb51606b --- /dev/null +++ b/catalogue/nhcx/flows/preauth-enhancement.md @@ -0,0 +1,157 @@ +--- +id: nhcx.flow.preauth-enhancement +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Request a preauthorisation enhancement +summary: >- + Ask the payer to raise an approved preauthorisation when the patient needs more + treatment than was approved, such as a move to intensive care. +sources: +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 32, 8.4.3 Enhancement. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, Enhancement rows. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet Scenarios, rows 4, 5 and 7. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. InsurancePlan claim condition table. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth, x-hcx-use_case row. +- url: https://hcxsbx.abdm.gov.in/preauthhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/preauthhcxservice.json + hash: sha256:2e8c594c51d9640ae4a576be34a5d190614918d1e7697d6718bc91c31fa66948 + fetched: '2026-09-14' + note: 'API specification: preauthhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths /v1/preauth/submit and /v1/preauth/on_submit.' +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.preauth-on-submit + callbacks: + - nhcx.callback.preauth-submit + - nhcx.callback.preauth-on-submit + - nhcx.callback.error + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.preauth-response + - nhcx.fhir.preauth-enhancement + concepts: + - nhcx.concept.claim-cycle + - nhcx.concept.message-identifiers + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.insurance-plan-request + - nhcx.flow.preauth-query-response + - nhcx.flow.send-a-sealed-request + - nhcx.flow.status-check + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1212 + - nhcx.error.payr-1213 + - nhcx.error.payr-1235 + glossary: + - nhcx.glossary.enhancement + - nhcx.glossary.payer +--- + +# Request a preauthorisation enhancement + +## In plain words + +An [enhancement](../glossary/enhancement.md) asks the payer to raise an approved preauthorisation. You send it when the patient needs more than was approved. A transfer from the ward to intensive care is the common case. + +It travels on the same path as the first [preauthorisation](preauth-submit.md), `/v1/preauth/submit`, with workflow `13`. It is a new request: new correlation id, same claim identifier. The Claim lists the approved items plus the new ones. + +The [payer](../glossary/payer.md) answers on `/v1/preauth/on_submit`. Workflow `22` approves the enhancement, `231` denies it and `241` queries it. + +## Before you start + +- The case holds an approved preauthorisation: you received workflow `21` and stored its `preAuthRef`. +- No adjudication is running on the case. A pending query or an earlier enhancement must finish first. +- Each package you plan to add allows enhancement. Check its `EnhancementAllowed` claim condition in the cached [insurance plan](insurance-plan-request.md). +- You ran a [coverage eligibility check](coverage-eligibility-check.md) with `benefits`, and with `auth-requirements` for the new packages, and collected the documents it named. +- You still have the claim identifier and the bundle you sent for the approved preauthorisation. + +## What happens + +```mermaid +sequenceDiagram + participant P as Provider (your system) + participant N as NHCX + participant Y as Payer + P->>N: POST /v1/preauth/submit (workflow 13) + Note right of P: same Claim identifier, new correlation id, added items + N-->>P: HTTP 202 Accepted + N->>Y: POST /v1/preauth/submit + Y-->>N: HTTP 202 Accepted + Note over Y: payer adjudicates the added treatment + Y->>N: POST /v1/preauth/on_submit + N-->>Y: HTTP 202 Accepted + N->>P: POST /v1/preauth/on_submit + P-->>N: HTTP 202 Accepted, within 30 seconds + alt workflow 22 + Note left of P: enhancement approved + else workflow 241 + Note left of P: enhancement queried, answer with workflow 131 + else workflow 231 + Note left of P: enhancement denied + end +``` + +1. Start from the bundle of the approved preauthorisation. Keep `Claim.identifier` and keep `use` `preauthorization`. +2. Add the new items, such as an intensive care stratification, with their procedures and documents in `supportingInfo`. Update `Claim.total`. See [the enhancement bundles](../fhir/preauth-enhancement.md). +3. Seal and set the headers, as in [send a sealed request](send-a-sealed-request.md). Set `x-hcx-workflow_id` to `13` and `x-hcx-status` to `request.initiated`. `x-hcx-use_case` `Enhancement` is optional. +4. Start a new correlation. Set `x-hcx-correlation_id` to the value of this call's `x-hcx-api_call_id`. The claim identifier, not the correlation id, ties the enhancement to the case. +5. Call [POST /v1/preauth/submit](../endpoints/preauth-submit.md). NHCX answers `202 Accepted`. It is not the decision. +6. Receive [POST /v1/preauth/on_submit](../callbacks/preauth-on-submit.md). Answer `202 Accepted` within 30 seconds, then process. +7. Read `type`. `ProtocolResponse` means the payer could not process the request. Otherwise decrypt `payload` with your private key. +8. Read `x-hcx-workflow_id`: + +| `x-hcx-workflow_id` | Meaning | What to do | +|---|---|---| +| `22` | Enhancement approved | Store the new approved `benefit` amount against the case | +| `241` | Enhancement queried | [Answer the query](preauth-query-response.md) with workflow `131` | +| `231` | Enhancement denied | Read `disposition` and the adjudication for the reason | + +## How you know it worked + +The enhancement is approved when all of these hold: + +- You received `POST /v1/preauth/on_submit` whose `x-hcx-correlation_id` equals the correlation id of your enhancement request. +- Its `type` is not `ProtocolResponse`, and `payload` decrypts with your private key. +- `x-hcx-workflow_id` is `22`, and the ClaimResponse carries the approved `benefit` for the added items. +- You updated the approved amount stored against the case. + +A callback with workflow `231` also ends this flow, as a denial. + +## When it goes wrong + +The payer finds no approved preauthorisation. [PAYR-1212](../errors/payr-1212.md) means no approved record exists for the case number. Check that you kept the original claim identifier. If the case was never approved, submit a new [preauthorisation](preauth-submit.md). + +The payer finds work in progress. [PAYR-1213](../errors/payr-1213.md) means adjudication is still running on the case. Wait for the current decision, then send the enhancement. + +NHCX rejects the request as a duplicate. [NHCX-1006](../errors/nhcx-1006.md) means you reused the correlation id of the original preauthorisation. Start a new correlation for every enhancement. + +The wallet cannot cover the increase. [PAYR-1235](../errors/payr-1235.md) means the balance is too low. Run a `validation` eligibility check to see the balance. + +The 202 arrives and no decision follows. [Check the request's status](status-check.md). An undeliverable request comes back on [/v1/error](../callbacks/error.md). diff --git a/catalogue/nhcx/flows/preauth-query-response.md b/catalogue/nhcx/flows/preauth-query-response.md new file mode 100644 index 000000000..9dd742bdc --- /dev/null +++ b/catalogue/nhcx/flows/preauth-query-response.md @@ -0,0 +1,182 @@ +--- +id: nhcx.flow.preauth-query-response +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Answer a payer query on a preauthorisation +summary: >- + Send the payer the documents or clarification it asked for on a preauthorisation, + so that it can reach a decision. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. 8.5 preauth response outcomes; query trail mapping table. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. pages 32-33, 8.4.4 Query updation. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet Scenarios, row 8. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Communication. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Preauth steps 2 to 5. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.preauth-on-submit + - nhcx.endpoint.communication-request + - nhcx.endpoint.communication-on-request + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.preauth-submit + - nhcx.callback.communication-request + - nhcx.callback.communication-on-request + fhir: + - nhcx.fhir.preauth-response + - nhcx.fhir.task + tests: + - nhcx.test.tc-pa-02 + - nhcx.test.provider-uc-08 + - nhcx.test.payer-uc-10 + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.preauth-enhancement + - nhcx.flow.claim-query-response + - nhcx.flow.status-check + concepts: + - nhcx.concept.queries-and-communication + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.payr-1001 + - nhcx.error.payr-1218 + - nhcx.error.payr-1219 + glossary: + - nhcx.glossary.communication-request + - nhcx.glossary.payer + - nhcx.glossary.pmjay + sandbox: + - nhcx.sandbox.dummy-payer + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback +--- + +# Answer a payer query on a preauthorisation + +## In plain words + +A payer query means the [payer](../glossary/payer.md) cannot decide your preauthorisation yet. It needs more documents or a clarification. The case stays open until you answer. + +A query reaches you by one of two routes. Where it arrives tells you how to answer. + +| The query arrives on | It looks like | You answer on | +|---|---|---| +| `/v1/preauth/on_submit` | Workflow `24`, or `241` for an enhancement. ClaimResponse `outcome` `partial`, adjudication reason `queried` | `/v1/preauth/submit`, workflow `19`, or `131` for an enhancement | +| `/v1/communication/request` | A Task with `code` `poll` carrying a [communication request](../glossary/communication-request.md) | `/v1/communication/on_request` | + +After your answer, the payer sends its decision on `/v1/preauth/on_submit`. [Payer queries and the communication cycle](../concepts/queries-and-communication.md) explains both routes. + +## Before you start + +- You submitted a [preauthorisation](preauth-submit.md) or an [enhancement](preauth-enhancement.md), and kept its claim identifier and bundle. +- A query has arrived by one of the two routes above, and you answered its delivery with `202` within 30 seconds. +- You have collected the documents or the clarification the query asks for. +- In the sandbox, the [dummy payer](../sandbox/dummy-payer.md) raises a query when you drive it with the action `Query`, and uses the communication route. + +## What happens + +```mermaid +sequenceDiagram + participant P as Provider (your system) + participant N as NHCX + participant Y as Payer + alt query as a ClaimResponse + Y->>N: POST /v1/preauth/on_submit (workflow 24) + N->>P: POST /v1/preauth/on_submit + P-->>N: HTTP 202 Accepted, within 30 seconds + P->>N: POST /v1/preauth/submit (workflow 19) + Note right of P: same Claim identifier, added documents, new correlation id + N-->>P: HTTP 202 Accepted + N->>Y: POST /v1/preauth/submit + Y-->>N: HTTP 202 Accepted + else query as a communication request + Y->>N: POST /v1/communication/request + N-->>Y: HTTP 202 Accepted + N->>P: POST /v1/communication/request + P-->>N: HTTP 202 Accepted, within 30 seconds + P->>N: POST /v1/communication/on_request + Note right of P: Communication with the documents, same correlation id + N-->>P: HTTP 202 Accepted + N->>Y: POST /v1/communication/on_request + Y-->>N: HTTP 202 Accepted + end + Note over Y: payer decides + Y->>N: POST /v1/preauth/on_submit (workflow 21, 23 or 24) + N->>P: POST /v1/preauth/on_submit + P-->>N: HTTP 202 Accepted +``` + +### The query arrives as a ClaimResponse + +1. Receive [POST /v1/preauth/on_submit](../callbacks/preauth-on-submit.md) with workflow `24`. Answer `202` within 30 seconds, then decrypt. +2. Read what the payer asked. For [PMJAY](../glossary/pmjay.md), `ClaimResponse.item[].adjudication[].reason.coding.display` carries a trail of entries in the form `USER~datetime~type~comment~trust`, separated by `|`. Parse it as plain text. The comment is the question. +3. Add the requested documents to `supportingInfo` in the same Claim. Keep `Claim.identifier` and `use` `preauthorization`. +4. Set `x-hcx-workflow_id` to `19`, or `131` when the query was on an enhancement. Set `x-hcx-status` to `request.initiated`. +5. Start a new correlation: set `x-hcx-correlation_id` to the value of this call's `x-hcx-api_call_id`. The claim identifier ties the answer to the case. +6. Call [POST /v1/preauth/submit](../endpoints/preauth-submit.md). NHCX answers `202 Accepted`. + +### The query arrives as a communication request + +1. Receive [POST /v1/communication/request](../callbacks/communication-request.md). Answer `202` within 30 seconds, then decrypt. +2. Read `Task.reasonCode` and the communication resource. They say what the payer needs. +3. Build the answer as a Task bundle whose Task carries a `Communication`. Put the documents in `Communication.payload` as `contentAttachment`. See [the Task bundle](../fhir/task.md). +4. Set `x-hcx-status` to `response.complete`. Set `x-hcx-correlation_id` to the correlation id of the communication request. Use a fresh `x-hcx-api_call_id`. +5. Address it to the sender of the communication request. Call [POST /v1/communication/on_request](../endpoints/communication-on-request.md). NHCX answers `202 Accepted`. + +### Either route: wait for the decision + +The payer re-adjudicates and sends its decision on `/v1/preauth/on_submit`. Read it as in [submit a preauthorisation](preauth-submit.md): `21` approved, `23` rejected, `24` queried again. + +## How you know it worked + +The query is resolved when all of these hold: + +- NHCX accepted your answer with `202`: on `/v1/preauth/submit` with workflow `19` or `131`, or on `/v1/communication/on_request`. +- You then received `POST /v1/preauth/on_submit` for this case, and its `payload` decrypts. +- Its `x-hcx-workflow_id` is `21` or `22` with a `preAuthRef`, or `23`, a rejection. + +A further `24` or `241` means the payer asks again. Repeat this flow. + +## When it goes wrong + +The payer says the case is not queried. [PAYR-1219](../errors/payr-1219.md) means the case number is not in a queried state. [PAYR-1218](../errors/payr-1218.md) means the payer has no queried preauthorisation for it. Check that you kept the original claim identifier, and that you answered the query rather than the first submission. + +NHCX rejects your query update as a duplicate. [NHCX-1006](../errors/nhcx-1006.md) means you reused an earlier correlation id on `/v1/preauth/submit`. Start a new correlation. + +NHCX rejects your communication answer. [NHCX-1010](../errors/nhcx-1010.md) means no request exists with the correlation id you set. Copy the correlation id from the communication request exactly. [NHCX-1011](../errors/nhcx-1011.md) means the `x-hcx-status` value is not valid. + +The payer cannot open your answer. A `ProtocolResponse` with [PAYR-1001](../errors/payr-1001.md) means it could not decrypt. Fetch its certificate again and reseal. + +No decision follows your answer. [Check the status](status-check.md) of your answer's correlation id. See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). diff --git a/catalogue/nhcx/flows/preauth-submit.md b/catalogue/nhcx/flows/preauth-submit.md new file mode 100644 index 000000000..d6464dfa4 --- /dev/null +++ b/catalogue/nhcx/flows/preauth-submit.md @@ -0,0 +1,201 @@ +--- +id: nhcx.flow.preauth-submit +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Submit a preauthorisation +summary: >- + Ask the payer to approve a planned treatment before it starts, then read the decision + when it arrives. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: 'NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 8 PreAuth: Claim tables, 8.5 response outcomes, workflow codes.' +- url: https://hcxsbx.abdm.gov.in/images/3799f26f2a0b2c9a80c5.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Preauthorization.pdf + hash: sha256:75d5628e7dd8a8e1a55c4ab3836c0591088ba378a8cd498e8277d83911129439 + fetched: '2026-09-14' + note: Preauthorization, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. Preauthorization Submission request and response. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet Scenarios, row 6. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. PAYR-1237 and PAYR-1238 rows. +- url: https://hcxsbx.abdm.gov.in/preauthhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/preauthhcxservice.json + hash: sha256:2e8c594c51d9640ae4a576be34a5d190614918d1e7697d6718bc91c31fa66948 + fetched: '2026-09-14' + note: 'API specification: preauthhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths /v1/preauth/submit and /v1/preauth/on_submit.' +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.preauth-on-submit + callbacks: + - nhcx.callback.preauth-submit + - nhcx.callback.preauth-on-submit + - nhcx.callback.error + fhir: + - nhcx.fhir.collection-bundle + - nhcx.fhir.terminologies + - nhcx.fhir.validation + - nhcx.fhir.preauth-request + - nhcx.fhir.preauth-response + concepts: + - nhcx.concept.claim-cycle + - nhcx.concept.four-message-legs + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.status-lifecycle + - nhcx.concept.workflow-codes + tests: + - nhcx.test.provider-uc-07 + - nhcx.test.payer-uc-09 + - nhcx.test.tc-pa-01 + flows: + - nhcx.flow.pmjay-patient-to-cashless + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.payer-process-a-request + - nhcx.flow.biometric-face + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.claim-submit + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.insurance-plan-request + - nhcx.flow.preauth-cancel + - nhcx.flow.preauth-enhancement + - nhcx.flow.preauth-query-response + - nhcx.flow.send-a-sealed-request + - nhcx.flow.status-check + decisions: + - nhcx.decision.preauth-or-predetermination + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1001 + - nhcx.error.payr-1201 + - nhcx.error.payr-1216 + - nhcx.error.payr-1217 + - nhcx.error.payr-1231 + - nhcx.error.payr-1235 + - nhcx.error.payr-1237 + - nhcx.error.payr-1238 + - nhcx.error.payr-1256 + glossary: + - nhcx.glossary.payer + - nhcx.glossary.pmjay + - nhcx.glossary.preauthorisation + - shared.glossary.abha-number + - shared.glossary.hpr + - shared.glossary.nhcx + - shared.glossary.snomed-ct + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.bundle-rejected +--- + +# Submit a preauthorisation + +## In plain words + +[Preauthorisation](../glossary/preauthorisation.md) asks the payer to approve a treatment before you deliver it. You send a Claim bundle whose `Claim.use` is `preauthorization`. The [payer](../glossary/payer.md) answers later with one of four decisions: approved, partially approved, queried or rejected. + +An approval carries a preauthorisation reference, `ClaimResponse.preAuthRef`. It is the payer's commitment to pay the approved amount. You need it to submit the [claim](claim-submit.md) after discharge. + +The request travels through the [NHCX](../../shared/glossary/nhcx.md) exchange, sealed for the payer. The decision comes back as a callback to your registered endpoint. + +## Before you start + +- You have run a [coverage eligibility check](coverage-eligibility-check.md) with `auth-requirements` for the packages, and collected the documents it named. +- You hold the patient's [insurance plan](insurance-plan-request.md), so package codes, rates and document rules are known. +- The amount you will request is no more than the balance the eligibility check returned. +- The Patient resource carries the patient's [ABHA number](../../shared/glossary/abha-number.md). For [PMJAY](../glossary/pmjay.md) it also carries the member ID. +- You authenticated the beneficiary by [fingerprint or iris](biometric-fingerprint-iris.md) or [face](biometric-face.md). Where that is not possible, you have the completed Authentication Consent Questionnaire response to attach. +- You have the treating practitioner's [HPR](../../shared/glossary/hpr.md) ID. +- The beneficiary has no other active preauthorisation, here or at another hospital. +- Your session token, callback endpoint and the payer's certificate are in place, as in [send a sealed request](send-a-sealed-request.md). + +## What happens + +```mermaid +sequenceDiagram + participant P as Provider (your system) + participant N as NHCX + participant Y as Payer + P->>N: POST /v1/preauth/submit (workflow 12) + N-->>P: HTTP 202 Accepted + N->>Y: POST /v1/preauth/submit + Y-->>N: HTTP 202 Accepted + opt payer acknowledges receipt + Y->>N: POST /v1/preauth/on_submit (workflow 20, response.partial) + N->>P: POST /v1/preauth/on_submit + P-->>N: HTTP 202 Accepted + end + Note over Y: payer adjudicates the request + Y->>N: POST /v1/preauth/on_submit (decision) + N-->>Y: HTTP 202 Accepted + N->>P: POST /v1/preauth/on_submit + P-->>N: HTTP 202 Accepted, within 30 seconds + alt workflow 21 + Note left of P: approved, store preAuthRef + else workflow 24 + Note left of P: queried, answer the query + else workflow 23 + Note left of P: rejected, the preauthorisation is closed + end +``` + +1. Build the [preauthorisation request bundle](../fhir/preauth-request.md). It is a Claim with `use` `preauthorization` and `type` [SNOMED CT](../../shared/glossary/snomed-ct.md) `737481003`, Inpatient care management. +2. Add the diagnoses, coded in ICD-10, and the care team. Add one `item` per package, with its category and package code. +3. Add a `supportingInfo` entry for every document the eligibility check or the plan named. Set `total` to the amount you request. +4. Give the Claim an identifier and keep it for the whole case. The claim after discharge carries the same identifier. +5. Seal the bundle and set the headers, as in [send a sealed request](send-a-sealed-request.md). Set `x-hcx-workflow_id` to `12` and `x-hcx-status` to `request.initiated`. Send `x-hcx-ben-abha-id`. +6. Start a new correlation. Set `x-hcx-correlation_id` to the value of this call's `x-hcx-api_call_id`. Store it against the case. +7. Call [POST /v1/preauth/submit](../endpoints/preauth-submit.md). NHCX answers `202 Accepted`. The request is on its way to the payer. It is not the decision. +8. Wait. The payer may first acknowledge receipt on `/v1/preauth/on_submit` with workflow `20` and `x-hcx-status` `response.partial`. Answer `202` and keep waiting. +9. Receive the decision on [POST /v1/preauth/on_submit](../callbacks/preauth-on-submit.md). Answer `202 Accepted` within 30 seconds, then process. +10. Read the body's `type`. `ProtocolResponse` means the payer could not process the request. Any other type carries the sealed [ClaimResponse](../fhir/preauth-response.md). Decrypt it with your private key. +11. Read `x-hcx-workflow_id` first. It names the decision. Do not decide on `ClaimResponse.outcome` alone. + +| `x-hcx-workflow_id` | What the ClaimResponse shows | What to do | +|---|---|---| +| `21` | Approved. `preAuthRef` is present. If the approved `benefit` is lower than submitted, `processNote` explains the reduction | Store `preAuthRef` and the approved amount. Treat within that amount | +| `24` | Queried. `outcome` `partial`, adjudication reason `queried`, totals `0` | [Answer the query](preauth-query-response.md) | +| `23` | Rejected. `outcome` `complete`, adjudication reason `cancelled`, a `disposition` giving the reason | The preauthorisation is closed | + +Some payers ask for documents with a communication request on `/v1/communication/request` instead of workflow `24`. [Answer a payer query on a preauthorisation](preauth-query-response.md) covers both routes. The codes are listed in [workflow codes](../concepts/workflow-codes.md). + +## How you know it worked + +The preauthorisation is approved when all of these hold: + +- You received `POST /v1/preauth/on_submit` whose `x-hcx-correlation_id` equals the one you sent. +- Its `type` is not `ProtocolResponse`, and `payload` decrypts with your private key. +- `x-hcx-workflow_id` is `21`, and the ClaimResponse has `use` `preauthorization` and a `preAuthRef`. +- You stored `preAuthRef` and the approved `benefit` amount against the case. +- You answered every callback with `202` within 30 seconds. + +A callback with workflow `23` also ends this flow, as a rejection. Workflow `24` hands over to the query flow. + +## When it goes wrong + +The 202 arrives and no decision follows. Answer any workflow `20` acknowledgement and keep waiting. For long waits, [check the request's status](status-check.md). An undeliverable request comes back on [/v1/error](../callbacks/error.md). See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). + +The payer finds an open case for the beneficiary. [PAYR-1238](../errors/payr-1238.md) means an active preauthorisation exists at your hospital. [PAYR-1237](../errors/payr-1237.md) means one exists at another hospital. [PAYR-1216](../errors/payr-1216.md) means a case is still being adjudicated. [Cancel](preauth-cancel.md) the stale preauthorisation, or claim against it. + +The case already moved on. [PAYR-1217](../errors/payr-1217.md) means an approved preauthorisation exists: send an [enhancement](preauth-enhancement.md) instead. [PAYR-1231](../errors/payr-1231.md) means a claim was already raised. + +The amount or authentication is refused. [PAYR-1201](../errors/payr-1201.md) means the amount is zero or above the wallet balance. [PAYR-1235](../errors/payr-1235.md) means the wallet balance is too low. [PAYR-1256](../errors/payr-1256.md) means you sent neither biometric authentication nor the consent questionnaire response. + +NHCX or the payer rejects the envelope. [NHCX-1006](../errors/nhcx-1006.md) means the correlation id was used before. A `ProtocolResponse` with [PAYR-1001](../errors/payr-1001.md) means the payer could not decrypt your request. See [the payer rejects your FHIR bundle](../troubleshooting/bundle-rejected.md) for bundle problems. diff --git a/catalogue/nhcx/flows/predetermination.md b/catalogue/nhcx/flows/predetermination.md new file mode 100644 index 000000000..c45c0724f --- /dev/null +++ b/catalogue/nhcx/flows/predetermination.md @@ -0,0 +1,131 @@ +--- +id: nhcx.flow.predetermination +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Request a predetermination +summary: >- + Before a planned admission, ask the payer what it would approve for a proposed + treatment, as an estimate that commits nobody. +sources: +- url: https://hcxsbx.abdm.gov.in/images/af8d243edcc2139a515d.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Usecases.pdf + hash: sha256:8709b2907a0d5a0dbb36f5e63ed8deae269e0c75372b05d71ce7380c8a0929e7 + fetched: '2026-09-14' + note: NHCX Usecases, row 1 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, Predetermination Request Submission. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. API list table. +- url: https://hcxsbx.abdm.gov.in/images/2c3fbb4e6b09f0834f69.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Implementation Guide for Adoption of FHIR in ABDM and NHCX.pdf + hash: sha256:549377c9c26b1bd23decac3a1b9e5ebedfdc8e0fe99e53ef733859b188f51366 + fetched: '2026-09-14' + note: Implementation Guide for Adoption of FHIR in ABDM and NHCX, row 14 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. API list table, rows 5 and 6. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, dummy payer use case list. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.predetermination-submit + - nhcx.endpoint.predetermination-on-submit + callbacks: + - nhcx.callback.predetermination-submit + - nhcx.callback.predetermination-on-submit + - nhcx.callback.error + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.claim-response + - nhcx.fhir.collection-bundle + concepts: + - nhcx.concept.claim-cycle + - nhcx.concept.four-message-legs + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.send-a-sealed-request + - nhcx.flow.status-check + decisions: + - nhcx.decision.preauth-or-predetermination + errors: + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1001 + glossary: + - nhcx.glossary.predetermination + sandbox: + - nhcx.sandbox.dummy-payer + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback +--- + +# Request a predetermination + +## In plain words + +A [predetermination](../glossary/predetermination.md) asks the payer what it would approve for a treatment you are planning. You send it before the patient is admitted. The payer answers with an estimate, judged against the policy and the beneficiary's history. + +The estimate commits nobody. Nothing is reserved against the policy. When the patient is admitted, you still send a [preauthorisation](preauth-submit.md). + +The request is a Claim bundle with `Claim.use` set to `predetermination`, on `/v1/predetermination/submit`. The answer is a ClaimResponse on `/v1/predetermination/on_submit`. [Preauthorisation or predetermination](../decisions/preauth-or-predetermination.md) compares the two. + +## Before you start + +- The payer answers predetermination requests. Confirm this with the payer before you build the exchange. +- You have the planned treatment: diagnosis, packages and the estimated amounts. +- Your session token, callback endpoint and the payer's certificate are in place, as in [send a sealed request](send-a-sealed-request.md). +- The sandbox [dummy payer](../sandbox/dummy-payer.md) does not answer predetermination. Test against a payer that does. + +## What happens + +```mermaid +sequenceDiagram + participant P as Provider (your system) + participant N as NHCX + participant Y as Payer + P->>N: POST /v1/predetermination/submit + Note right of P: Claim.use predetermination, x-hcx-status request.initiated + N-->>P: HTTP 202 Accepted + N->>Y: POST /v1/predetermination/submit + Y-->>N: HTTP 202 Accepted + Note over Y: payer estimates against the policy and past history + Y->>N: POST /v1/predetermination/on_submit + N-->>Y: HTTP 202 Accepted + N->>P: POST /v1/predetermination/on_submit + P-->>N: HTTP 202 Accepted, within 30 seconds + Note left of P: store the estimate, not an approval +``` + +1. Build a Claim bundle shaped like the preauthorisation bundle, as in [the claim request bundle](../fhir/claim-request.md). Set `Claim.use` to `predetermination`. +2. Give the Claim your own predetermination reference as its identifier. Add the planned items, diagnoses and amounts. +3. Seal and set the headers, as in [send a sealed request](send-a-sealed-request.md). Set `x-hcx-status` to `request.initiated`. No workflow code is published for predetermination. +4. Start a new correlation. Set `x-hcx-correlation_id` to the value of this call's `x-hcx-api_call_id`. +5. Call [POST /v1/predetermination/submit](../endpoints/predetermination-submit.md). NHCX answers `202 Accepted`. It is not the estimate. +6. Receive [POST /v1/predetermination/on_submit](../callbacks/predetermination-on-submit.md). Answer `202 Accepted` within 30 seconds, then process. +7. Read `type`. `ProtocolResponse` means the payer could not process the request. Otherwise decrypt `payload` with your private key. +8. Read the [ClaimResponse](../fhir/claim-response.md). Its `use` is `predetermination`. The estimated benefit is in `ClaimResponse.total`, category `benefit`. + +## How you know it worked + +The estimate is in when all of these hold: + +- You received `POST /v1/predetermination/on_submit` whose `x-hcx-correlation_id` equals the one you sent. +- Its `type` is not `ProtocolResponse`, and `payload` decrypts with your private key. +- The ClaimResponse has `use` `predetermination` and a `total` with category `benefit`. +- You stored the amount against the planned case, labelled as an estimate. + +## When it goes wrong + +The 202 arrives and no estimate follows. The payer may not answer predetermination. Confirm support with the payer, then [check the request's status](status-check.md). See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). + +NHCX rejects the call. [NHCX-1003](../errors/nhcx-1003.md) means the recipient code is not registered. [NHCX-1006](../errors/nhcx-1006.md) means the correlation id was used before. + +The callback is a `ProtocolResponse`. [PAYR-1001](../errors/payr-1001.md) means the payer could not decrypt your request. Fetch its certificate again and reseal. + +The estimate treated as an approval. A predetermination reserves nothing. Send a preauthorisation at admission, with workflow `12`. diff --git a/catalogue/nhcx/flows/production-onboarding.md b/catalogue/nhcx/flows/production-onboarding.md new file mode 100644 index 000000000..506ff4d83 --- /dev/null +++ b/catalogue/nhcx/flows/production-onboarding.md @@ -0,0 +1,212 @@ +--- +id: nhcx.flow.production-onboarding +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Onboard as a participant in production +summary: >- + Create and confirm your live claims exchange participant record, then register + your certificate and callback address, each step confirmed by a passcode sent + to your registered mobile. +sources: +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Steps 1 to 4; role and registry enums. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, item 5. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. Functional Testing and production steps. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. path /v2/update/cert.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Session API table. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.session-token + - nhcx.endpoint.v2-participant-create + - nhcx.endpoint.validate + - nhcx.endpoint.v2-participant-update + - nhcx.endpoint.update-validate + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.v2-update-cert + flows: + - nhcx.flow.sandbox-onboarding + - nhcx.flow.generate-and-register-certificate + - nhcx.flow.rotate-certificate + - nhcx.flow.pmjay-hospital-migration + - nhcx.flow.policy-link-and-delink + concepts: + - nhcx.concept.participant-registry + - nhcx.concept.participant-code + - nhcx.concept.participant-roles + - nhcx.concept.session-token + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.going-live + - nhcx.sandbox.environments-and-base-urls + - nhcx.sandbox.callback-url-requirements + - nhcx.sandbox.support-contacts + decisions: + - nhcx.decision.session-endpoint + errors: + - nhcx.error.nhcx-401 + troubleshooting: + - nhcx.troubleshooting.everything-returns-401 + glossary: + - nhcx.glossary.participant-code + - nhcx.glossary.sandbox-exit + - shared.glossary.hfr +--- + +# Onboard as a participant in production + +## In plain words + +Production on the [National Health Claims Exchange](../../shared/glossary/nhcx.md) (NHCX) has its own participant registry. You create a separate production record in four calls. Two of them confirm a passcode sent by SMS, so the person holding your registered mobile takes part. + +The first pair creates the participant and returns a [participant code](../glossary/participant-code.md) ending in `@hcx`. The second pair registers your encryption certificate and callback address. Only after the second pair can NHCX send requests to you and receive your responses. + +## Before you start + +- **Sandbox sign-off.** You passed the [sandbox exit](../glossary/sandbox-exit.md): bundle validation by [NRCeS](../../shared/glossary/nrces.md), an internal demo, a Health Tech Committee demo, and NHA's confirmation email. See [The sandbox exit process and sign-off](../sandbox/sandbox-exit.md). +- **Production credentials.** NHA has assigned your role to your [Milestone 1](../../shared/glossary/m1.md) production client ID. You use that client ID for every production call. +- **The registered mobile.** For a [provider](../glossary/provider.md), the number recorded against the facility in the [Health Facility Registry](../../shared/glossary/hfr.md) (HFR). For a [payer](../glossary/payer.md), the number in the NHCX payer details. A person with that phone is available during the calls. +- **Your registry ID.** The HFR ID for a provider. The [IRDAI](../glossary/irdai.md) registry ID for a payer, without leading zeros: `0123` is sent as `123`. +- **A production certificate** in base64, from [Generate an encryption certificate and register it](generate-and-register-certificate.md). +- **A live callback address** that meets the [callback address rules](../sandbox/callback-url-requirements.md). + +## What happens + +Every call goes to the production participant service, `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice`, with your session token. + +```mermaid +sequenceDiagram + participant P as Person holding the registered mobile + participant You as Your system + participant GW as ABDM session gateway + participant PS as NHCX participant service, production + You->>GW: POST /api/hiecm/gateway/v3/sessions with the production client ID + GW-->>You: accessToken + You->>PS: POST /v2/participant/create + PS-->>You: participantid ending @hcx, and transactionid + PS->>P: SMS passcode for this transactionid + P->>You: reads out the passcode + You->>PS: GET /validate with transactionId and passcode + PS-->>You: creation confirmed + You->>PS: POST /v2/participant/update + PS-->>You: participant_code, status and a new transactionid + PS->>P: SMS passcode for the update + P->>You: reads out the passcode + You->>PS: GET /update/validate with transactionId and passcode + PS-->>You: certificate and endpoint registered + You->>PS: POST /fetch/certs with your participant code + PS-->>You: your encryption_cert +``` + +### 1. Get a session token + +Use your production client ID. [Which session token endpoint to call](../decisions/session-endpoint.md) settles the address, and [NHCX environments, hosts and base URLs](../sandbox/environments-and-base-urls.md) lists the production hosts. + +### 2. Create the participant + +`POST /v2/participant/create`: + +```json +{ + "registrytype": "10001", + "registryid": "", + "role": ["10001"], + "endpoint_url": "", + "mobilenumber": "", + "email": "" +} +``` + +`registrytype` takes a registry code: `10001` HFR, `10002` NIN, `10003` ROHINI or `10004` PAYER. `role` takes role codes: `10001` provider, `10002` payer, `10003` TPA or `10009` end user application. The full enum list is in [POST /v2/participant/create](../endpoints/v2-participant-create.md). You can leave `endpoint_url` empty here, because step 4 sets it. + +The answer carries `participantid`, `facilityname`, `facilitycontact`, `facilityemail`, `transactionid` and an `error` object with `code`, `message` and `trace`. On success the three error fields are null. + +**Wait:** the passcode arrives by SMS on the registered mobile. + +### 3. Confirm the creation + +```text +GET /validate?transactionId=&passcode= +``` + +The transaction ID and passcode stay valid for 24 hours. Each create call issues a new pair, and a passcode works only with its own transaction ID. + +### 4. Register the certificate and callback address + +`POST /v2/participant/update`, after step 3 has succeeded: + +```json +{ + "participantcode": "", + "encryptioncert": "", + "endpointurl": "" +} +``` + +The answer carries `participant_code`, `status` and a new `transactionid`. + +**Wait:** a second passcode arrives by SMS. + +### 5. Confirm the update + +```text +GET /update/validate?transactionId=&passcode= +``` + +The same 24-hour rule applies. When this succeeds, your callback address is active and your certificate is registered. + +### 6. Read your record back + +`POST /fetch/certs` with your `@hcx` code returns the certificate stored against it. Later certificate changes can skip the passcode through `POST /v2/update/cert`. See [Rotate your encryption certificate](rotate-certificate.md). + +## How you know it worked + +`GET /update/validate` succeeds for the transaction ID from step 4. `POST /fetch/certs` on the production participant service returns, for your `@hcx` code, a certificate whose public key matches your production `certificate.crt`. + +```observation schema=exit-condition +channel: synchronous +call: POST /fetch/certs +host: https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice +request: + participantid: +match: + encryption_cert: public key equals the one in your production certificate.crt +``` + +Your production code now goes in `x-hcx-sender_code` on everything you send. Next steps: + +- A PMJAY hospital continues with [Migrate a PMJAY hospital to HMIS through NHCX](pmjay-hospital-migration.md). +- A payer links its policies with [Link and de-link an ABHA and a policy](policy-link-and-delink.md). +- Plan staff training and a pilot with a few clients before full go-live. See [Going live on NHCX production](../sandbox/going-live.md). + +## When it goes wrong + +- **Create fails on the mobile number.** It must match the HFR record for a provider, or the NHCX payer details for a payer, exactly. Correct the number at its source, then create again. +- **Create fails on the registry ID for a payer.** Strip leading zeros from the IRDAI ID. +- **Create is refused on `registrytype` or `role`.** Use only codes from the lists in step 2. +- **The passcode is refused.** It is older than 24 hours, or it belongs to another transaction ID. Run the create or update call again for a fresh pair. +- **You lost the transaction ID.** Run the create or update call again. There is no way to look it up. +- **The update is refused.** Step 3 has not succeeded yet. The update needs a participant whose creation is confirmed. +- **Every call returns `401`.** The token has expired, or it was minted with a sandbox client ID. See [NHCX-401](../errors/nhcx-401.md). diff --git a/catalogue/nhcx/flows/receive-a-sealed-callback.md b/catalogue/nhcx/flows/receive-a-sealed-callback.md new file mode 100644 index 000000000..4183d18c8 --- /dev/null +++ b/catalogue/nhcx/flows/receive-a-sealed-callback.md @@ -0,0 +1,197 @@ +--- +id: nhcx.flow.receive-a-sealed-callback +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Receive, open and acknowledge a sealed message +summary: >- + Accept a message the exchange delivers to your callback address, acknowledge it + within thirty seconds, then open it with your private key and match it to its + conversation. +sources: +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Acceptance scenario and error scenario. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. FAQ 14 callback requirements; callback URL FAQ. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Inbound decryption steps. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/data-security-and-privacy/api-security + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__api-security.md + hash: sha256:9fe2d5a643356558131e5de801b5f325b76f80aa48e931ee6b77e088dd90a65c + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/data-security-and-privacy/api-security, text as shown on the site. API security, NHCX to participant tokens. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Status Description. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.preauth-on-submit + - nhcx.endpoint.claim-on-submit + - nhcx.endpoint.coverageeligibility-on-check + - nhcx.endpoint.insuranceplan-on-request + - nhcx.endpoint.status + callbacks: + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.insuranceplan-on-request + - nhcx.callback.communication-request + - nhcx.callback.paymentnotice-request + - nhcx.callback.preauth-submit + - nhcx.callback.claim-submit + - nhcx.callback.error + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.report-a-processing-error + - nhcx.flow.payer-process-a-request + - nhcx.flow.generate-and-register-certificate + - nhcx.flow.rotate-certificate + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.retries-and-expiry + - nhcx.concept.status-lifecycle + sandbox: + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.recipient-cannot-decrypt + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + glossary: + - nhcx.glossary.jwe + - nhcx.glossary.protected-header + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id +--- + +# Receive, open and acknowledge a sealed message + +## In plain words + +The [National Health Claims Exchange](../../shared/glossary/nhcx.md) (NHCX) delivers messages to you as HTTP calls to your registered callback address. Answers to your requests arrive this way, and so do requests addressed to you. Each delivery needs an immediate acknowledgement: HTTP `202` with a fixed JSON body, within 30 seconds. + +Acknowledge first, open later. The acknowledgement only says you received the message. Decrypting it and acting on it happen after you have answered. + +## Before you start + +- Your `endpoint_url` is registered and meets the [callback address rules](../sandbox/callback-url-requirements.md). +- Your private key matches the certificate in your participant record. See [Generate an encryption certificate and register it](generate-and-register-certificate.md). +- You have a store that keeps each raw message before any processing. +- You host the paths that can reach you. Everyone hosts `/v1/error`. A sender hosts the answer paths, such as `/v1/preauth/on_submit`. A payer hosts the request paths, such as `/v1/preauth/submit`. A provider also hosts `/v1/communication/request` and `/v1/paymentnotice/request`. + +## What happens + +```mermaid +sequenceDiagram + participant S as Sender, a payer or provider + participant NHCX as NHCX exchange + participant EP as Your callback endpoint + participant W as Your worker + S->>NHCX: POST /v1/preauth/on_submit with a sealed payload + NHCX->>EP: POST /v1/preauth/on_submit + Note over EP: store the raw body, read the protected header + EP-->>NHCX: 202 with the acceptance body, within 30 seconds + EP->>W: hand over the stored message + Note over W: decrypt with your private key, match the conversation, update the case + opt No valid 202 within 30 seconds + NHCX->>EP: the same message again, up to five attempts + end +``` + +### 1. Receive + +NHCX posts to your `endpoint_url` plus the path, for example `/v1/preauth/on_submit`. The body takes one of two forms: + +- A sealed message: `{"payload": ""}`. +- A plain JSON object with `"type": "ProtocolResponse"`, sent when the other side could not process your request. It is not sealed. + +NHCX signs its calls to you with its own JWT, using `RS256`. Validate that signature with the public key of the NHCX instance. + +### 2. Store, then acknowledge within 30 seconds + +Store the raw body. Read the identifiers from the protected header: it is the first of the five parts, base64url-encoded but not encrypted. Then answer HTTP `202` with this body: + +```json +{ + "timestamp": "DD/MM/YYYY hh:mm:ss:sss", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "coverageeligibility/preauth/claim/task/payment/insuranceplan", + "protocol_status": "request.queued/request.dispatched/request.error" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +`timestamp` uses the pattern shown. `entity_type` takes one of the listed values, and `protocol_status` one of its three. The error `code` and `message` stay empty when you accept. [Synchronous acknowledgement](../concepts/synchronous-acknowledgement.md) covers the body in detail. + +### 3. Open it + +Check that the payload has five dot-separated parts. Decrypt it with your PKCS#8 private key. If the authentication tag fails, reject the message without using any of its content. + +From the protected header, read `x-hcx-sender_code`, `x-hcx-recipient_code`, `x-hcx-api_call_id`, `x-hcx-correlation_id`, `x-hcx-workflow_id` and `x-hcx-status`. `x-hcx-recipient_code` must be your own code. + +### 4. Match it + +Keep the `x-hcx-api_call_id` and the `x-hcx-correlation_id` of every request you send. Match an incoming answer on its `x-hcx-correlation_id` against both. Its `x-hcx-sender_code` must be the participant you addressed. The rule for each identifier is in [message identifiers](../concepts/message-identifiers.md). + +### 5. Recognise repeats + +NHCX resends a message when your acknowledgement was late, not `202`, or not in the format above. A repeat carries the same `x-hcx-api_call_id`. Acknowledge it again, and do not process it twice. + +### 6. Act + +Deserialise the plaintext into its FHIR bundle and update the case. `x-hcx-status` tells you what kind of answer it is: + +| `x-hcx-status` | Meaning | +|---|---| +| `response.complete` | The final answer, closing the request cycle | +| `response.partial` | A partial or intermediate answer | +| `response.error` | The request was rejected, or an error occurred | + +`x-hcx-workflow_id` names the stage. See [workflow codes](../concepts/workflow-codes.md). If the message is a request to you, answer it later on its paired path. A payer follows [Receive, adjudicate and answer a request as a payer](payer-process-a-request.md). + +If the body is a `ProtocolResponse`, read `x-hcx-error_details`. Its `code` names the failure. See [Report a processing failure on /v1/error](report-a-processing-error.md). + +## How you know it worked + +Your endpoint answered `202` with the acceptance body within 30 seconds, and NHCX does not deliver the same `x-hcx-api_call_id` again. The decrypted bundle is stored against the case its identifiers name. + +```observation schema=exit-condition +channel: callback +path: / +acknowledge: HTTP 202 with the acceptance body within 30 seconds +match: + redelivery of the same x-hcx-api_call_id: none +``` + +## When it goes wrong + +- **Nothing arrives.** The address uses an IP address or a port, or the server is outside India. A firewall or router may also block the NHCX addresses. See [Your callback URL is rejected or never called](../troubleshooting/callback-url-rejected.md) and [The request was accepted with 202 and no callback arrives](../troubleshooting/accepted-then-no-callback.md). +- **The same message keeps arriving.** Your acknowledgement is late, uses a code other than `202`, or has the wrong body. After five failed attempts NHCX deletes the request, and the sender hears on `/v1/error`. +- **Processing runs past 30 seconds.** Move decryption and business logic after the acknowledgement. +- **Decryption fails.** The sender used a copy of your certificate from before a rotation. Try your previous key, as in [Rotate your encryption certificate](rotate-certificate.md). Otherwise see [The recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **An answer matches no request.** See [Responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). diff --git a/catalogue/nhcx/flows/report-a-processing-error.md b/catalogue/nhcx/flows/report-a-processing-error.md new file mode 100644 index 000000000..ce78103ed --- /dev/null +++ b/catalogue/nhcx/flows/report-a-processing-error.md @@ -0,0 +1,184 @@ +--- +id: nhcx.flow.report-a-processing-error +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Report a processing failure on /v1/error +summary: >- + Tell the sender when you cannot process its message, and handle the report the + exchange sends you when your own message cannot be delivered. +sources: +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Error scenario and ProtocolResponse body. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use cases 7 to 15, API logic rows. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 2 and 8. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Status Description. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.preauth-on-submit + - nhcx.endpoint.claim-on-submit + - nhcx.endpoint.coverageeligibility-on-check + - nhcx.endpoint.status + callbacks: + - nhcx.callback.error + - nhcx.callback.on-status + - nhcx.callback.preauth-on-submit + flows: + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.payer-process-a-request + concepts: + - nhcx.concept.error-code-spaces + - nhcx.concept.retries-and-expiry + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.status-lifecycle + - nhcx.concept.message-identifiers + decisions: + - nhcx.decision.status-poll-or-wait + errors: + - nhcx.error.payr-1001 + - nhcx.error.nhcx-1010 + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.duplicate-or-mismatched-correlation +--- + +# Report a processing failure on /v1/error + +## In plain words + +A failed message must be reported back, or its sender waits for a decision that will never come. On the [National Health Claims Exchange](../../shared/glossary/nhcx.md) (NHCX) there are two reports, and every participant handles both. + +When you receive a message you cannot process, you answer with a `ProtocolResponse`: a plain, unsealed JSON error on the paired answer path. When NHCX cannot deliver your own message, it gives up after five attempts. It then posts the rejection details to your `/v1/error` endpoint, which every participant must host. + +## Before you start + +- You acknowledge deliveries as in [Receive, open and acknowledge a sealed message](receive-a-sealed-callback.md). +- Your registered address serves `/v1/error`. +- You record the `x-hcx-api_call_id` and `x-hcx-correlation_id` of every message you send and receive. +- You know which error codes your side uses. See [error code spaces](../concepts/error-code-spaces.md). + +## What happens + +```mermaid +sequenceDiagram + participant S as Sender + participant NHCX as NHCX exchange + participant R as Recipient + S->>NHCX: POST /v1/preauth/submit + NHCX-->>S: 202 + alt The recipient receives the message but cannot process it + NHCX->>R: POST /v1/preauth/submit + R-->>NHCX: 202 with the acceptance body + Note over R: cannot decrypt, invalid bundle or a protocol error + R->>NHCX: POST /v1/preauth/on_submit with a ProtocolResponse + NHCX-->>R: 202 + NHCX->>S: POST /v1/preauth/on_submit with the ProtocolResponse + S-->>NHCX: 202 + else NHCX cannot deliver the message + loop up to five attempts + NHCX->>R: POST /v1/preauth/submit + R--xNHCX: rejected, no answer, or a malformed acknowledgement + end + Note over NHCX: request deleted, correlation ID made inactive + NHCX->>S: POST /v1/error with the rejection details + S-->>NHCX: 202 with the acceptance body + end +``` + +### Part 1: report a message you cannot process + +Send a `ProtocolResponse` only when you could not validate or process the request. The three cases are an invalid payload, a payload you cannot decrypt, and a protocol error. A business decision, even a rejection, is sealed and sent as a normal answer instead. + +Send it on the paired answer path, the call you would have used for a decision. Its shape: + +```json +{ + "type": "ProtocolResponse", + "x-hcx-sender_code": "", + "x-hcx-recipient_code": "", + "x-hcx-api_call_id": "", + "x-hcx-correlation_id": "", + "x-hcx-workflow_id": "", + "x-hcx-timestamp": "", + "x-hcx-debug_flag": "Error", + "x-hcx-status": "response.error", + "x-hcx-redirect_to": "", + "x-hcx-error_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-debug_details": { + "code": "", + "message": "", + "trace": "" + }, + "x-hcx-domain-header": { + "use_case_name": "", + "amt_processed": "" + }, + "x-hcx-entity-type": "coverageeligibility | payment | insuranceplan | task | claim | preauth", + "x-hcx-ben-abha-id": "" +} +``` + +- `x-hcx-recipient_code` is the sender of the message you are answering. +- `x-hcx-api_call_id` is new, and differs from the correlation ID. +- `x-hcx-correlation_id` follows [message identifiers](../concepts/message-identifiers.md), so the sender can match it. +- `x-hcx-error_details.code` is a code from your error space, such as [PAYR-1001](../errors/payr-1001.md) for a payload you could not decrypt. + +NHCX acknowledges your `ProtocolResponse` with `202` and forwards it to the sender. + +### Part 2: handle `/v1/error` for a message you sent + +NHCX treats a delivery as failed when the recipient rejects the payload, does not answer, or answers outside the acceptance format. It resends the same request, up to five attempts in all. Then it ends the request, deletes it from NHCX, and makes its correlation ID inactive. + +**Wait:** the report arrives on your `/v1/error` after the fifth failed attempt. What it carries is the rejection details for the request NHCX gave up on. + +When it arrives: + +1. Store the report whole, as received. Accept a body shape you do not recognise rather than refusing it. +2. Answer `202` with the acceptance body, as for any delivery. +3. Mark the case it names as undelivered, so nobody waits for a decision. +4. When the recipient is reachable again, send a fresh request with a new correlation ID. + +If a case goes quiet and no `/v1/error` has arrived, ask with `POST /v1/status`. The answer on `/v1/on_status` carries `x-hcx-status`. `request.stopped` means NHCX stopped trying to reach the recipient. See [Poll with /v1/status or wait for the callback](../decisions/status-poll-or-wait.md). + +## How you know it worked + +As the recipient reporting a failure, NHCX answered `202` to your `ProtocolResponse`. As the sender, your `/v1/error` handler answered `202`, stored the report and marked the case undelivered. A fresh request under a new correlation ID then receives `202`. + +```observation schema=exit-condition +channel: callback +path: /v1/error +acknowledge: HTTP 202 with the acceptance body within 30 seconds +state: + case named in the report: marked undelivered +``` + +## When it goes wrong + +- **You never learn that a request died.** You do not host `/v1/error`. Host it before anything else asynchronous. +- **Your `/v1/error` handler answers `4xx`.** It validates the body against a fixed schema. Accept any body and store it. +- **A retry fails.** It reuses the correlation ID of the failed request, which NHCX made inactive. Start again with a new one. See [Responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). +- **NHCX refuses your answer, saying no data exists for its correlation ID.** Your `x-hcx-correlation_id` does not match the request. See [NHCX-1010](../errors/nhcx-1010.md). +- **You sent a `ProtocolResponse` for a business rejection.** The sender handles it as a protocol failure. Send a sealed decision instead. diff --git a/catalogue/nhcx/flows/rotate-certificate.md b/catalogue/nhcx/flows/rotate-certificate.md new file mode 100644 index 000000000..71664eb3e --- /dev/null +++ b/catalogue/nhcx/flows/rotate-certificate.md @@ -0,0 +1,155 @@ +--- +id: nhcx.flow.rotate-certificate +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Rotate your encryption certificate +summary: >- + Replace the certificate other participants use to seal messages to you, without + losing messages already sealed with the old one. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__message-security-and-integrity.md + hash: sha256:3768fd89932e4081c9e03a8695619bcaf70c641e28bb55a77eec090bb926eeb3 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity, text as shown on the site. Message security and integrity, key rotation note. +- url: https://hcxsbx.abdm.gov.in/images/ec361a6c3e90e766d227.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Steps to generate encryption Certificate.pdf + hash: sha256:94605e935f05ebb49e24dee50787cb4f3f1c401983a9616a5aaabdbc302f664b + fetched: '2026-09-14' + note: Steps to generate encryption Certificate, row 20 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Step 3. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths /v2/update/cert and /participant/update.' +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. 3.3 Certificate Fetch. +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Steps 3 and 4. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.session-token + - nhcx.endpoint.v2-update-cert + - nhcx.endpoint.v2-participant-update + - nhcx.endpoint.update-validate + - nhcx.endpoint.participant-update + - nhcx.endpoint.fetch-certs + flows: + - nhcx.flow.generate-and-register-certificate + - nhcx.flow.production-onboarding + - nhcx.flow.sandbox-onboarding + - nhcx.flow.receive-a-sealed-callback + concepts: + - nhcx.concept.encryption-certificate + sandbox: + - nhcx.sandbox.support-contacts + errors: + - nhcx.error.payr-1001 + - nhcx.error.payr-1002 + troubleshooting: + - nhcx.troubleshooting.recipient-cannot-decrypt + glossary: + - nhcx.glossary.x509-certificate +--- + +# Rotate your encryption certificate + +## In plain words + +Your encryption certificate lasts as long as you set when you made it: 365 days with the standard command. Rotate your encryption keys once a year, and at once if a private key may have leaked. + +Rotation has one catch. Senders cache your certificate for 24 hours. For a day after the switch, some messages still arrive sealed with your old key. Keep the old key working until that window closes. + +## Before you start + +- A new key pair and base64 certificate, made as in [Generate an encryption certificate and register it](generate-and-register-certificate.md). Give the files new names, such as `private-2027.key`, so the old ones survive. +- The old private key, still available to your decryption code. +- A session token and your [participant code](../glossary/participant-code.md). +- For the production passcode route only: the person holding your registered mobile. + +## What happens + +```mermaid +sequenceDiagram + participant You as Your system + participant PS as NHCX participant service + participant Peer as Sender with a cached copy + Note over You: make a new key pair and certificate + alt Production, no passcode + You->>PS: POST /v2/update/cert with participantId and certificate + PS-->>You: accepted + else Production, with passcode + You->>PS: POST /v2/participant/update with encryptioncert + PS-->>You: transactionid, and an SMS passcode is sent + You->>PS: GET /update/validate with transactionId and passcode + PS-->>You: certificate registered + else Sandbox + You->>PS: POST /participant/update with participant_code and encryption_cert + PS-->>You: participant_code + end + You->>PS: POST /fetch/certs with your participant code + PS-->>You: the new certificate + Peer->>You: messages sealed with the old key, for up to 24 hours + Note over You: try the new key first, then the old one +``` + +### 1. Make the new pair + +Follow steps 1 to 4 of [the certificate flow](generate-and-register-certificate.md) with new file names. + +### 2. Register the new certificate + +In production, the direct route needs no passcode: + +```json +{ + "participantId": "", + "certificate": "" +} +``` + +Post it to `POST /v2/update/cert` on `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice`. Both fields are mandatory, and the certificate is base64-encoded. See [POST /v2/update/cert](../endpoints/v2-update-cert.md). + +The passcode route, `POST /v2/participant/update` followed by `GET /update/validate`, also works. It is described in [Onboard as a participant in production](production-onboarding.md). + +In the sandbox, send `POST /participant/update` with your `participant_code` and the new `encryption_cert`. See [POST /participant/update](../endpoints/participant-update.md). + +### 3. Run both keys for 24 hours + +From the moment of registration, decrypt with the new key first. If that fails, try the old key. Senders that fetched your certificate before the switch keep using it until their 24-hour cache expires. + +### 4. Retire the old key + +After 24 hours, remove the old key from your decryption path and destroy it. + +If you rotated because a key may have leaked, report the compromise to the NHCX operators at once. See [Where to get help with NHCX](../sandbox/support-contacts.md). + +## How you know it worked + +`POST /fetch/certs` for your participant code returns the new public key. Compare it with the commands in [the certificate flow](generate-and-register-certificate.md). Messages sealed after the 24-hour window open with the new key, and none needs the old one. + +```observation schema=exit-condition +channel: synchronous +call: POST /fetch/certs +request: + participantid: +match: + encryption_cert: public key equals the one in the new certificate +``` + +## When it goes wrong + +- **A message will not open with the new key.** The sender used a cached copy of the old certificate. Open it with the old key. If both keys fail, answer as in [Report a processing failure on /v1/error](report-a-processing-error.md). A payer uses [PAYR-1001](../errors/payr-1001.md) for this. +- **A payer reports it cannot encrypt to you.** The certificate you registered is wrong or expired. Register a valid one. See [PAYR-1002](../errors/payr-1002.md). +- **The production passcode expired.** It lasts 24 hours. Start the update again, or use `POST /v2/update/cert`. +- **You destroyed the old key too early.** Messages sealed with it inside the 24-hour window cannot be opened. Ask each sender to resend under a fresh request. See [The recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). diff --git a/catalogue/nhcx/flows/sandbox-onboarding.md b/catalogue/nhcx/flows/sandbox-onboarding.md new file mode 100644 index 000000000..7b5a2b3dc --- /dev/null +++ b/catalogue/nhcx/flows/sandbox-onboarding.md @@ -0,0 +1,191 @@ +--- +id: nhcx.flow.sandbox-onboarding +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Onboard as a participant in the NHCX sandbox +summary: >- + Register your system in the claims exchange test environment so it holds a participant + code, a registered certificate and a callback address. +sources: +- url: https://hcxsbx.abdm.gov.in/images/e683dda0a8cf953abbc7.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)NHCX-OnBoarding APIs Postman Collection.zip + hash: sha256:ca4348e8a373c54bdcabd07eff8e49a55d93cdfae65fa5008ae0d56526a769f2 + fetched: '2026-09-14' + note: AWS(Sandbox)NHCX-OnBoarding APIs Postman Collection, row 6 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Participant Create and Update request bodies. +- url: https://hcxsbx.abdm.gov.in/images/bc2efb078b98548f8e6b.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Sandbox.pdf + hash: sha256:cbd03baf428655f0305e2f60ca331f8b76700496b070c522cafcc95001710b3a + fetched: '2026-09-14' + note: Onboarding providers and payers in Sandbox, row 4 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Create and Update Participant API definitions. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. Sandbox registration steps. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. FAQ 6, 11, callback URL FAQ, Session API table. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.session-token + - nhcx.endpoint.participant-create + - nhcx.endpoint.validate + - nhcx.endpoint.participant-update + - nhcx.endpoint.fetch-certs + flows: + - nhcx.flow.generate-and-register-certificate + - nhcx.flow.production-onboarding + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.report-a-processing-error + concepts: + - nhcx.concept.participant-registry + - nhcx.concept.participant-code + - nhcx.concept.participant-roles + - nhcx.concept.session-token + - nhcx.concept.encryption-certificate + sandbox: + - nhcx.sandbox.prerequisites + - nhcx.sandbox.environments-and-base-urls + - nhcx.sandbox.callback-url-requirements + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.support-contacts + decisions: + - nhcx.decision.session-endpoint + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1002 + tests: + - nhcx.test.provider-uc-03 + - nhcx.test.provider-uc-04 + - nhcx.test.payer-uc-05 + - nhcx.test.payer-uc-06 + troubleshooting: + - nhcx.troubleshooting.everything-returns-401 + - nhcx.troubleshooting.callback-url-rejected + glossary: + - nhcx.glossary.participant-code + - shared.glossary.hfr + - shared.glossary.nhcx +--- + +# Onboard as a participant in the NHCX sandbox + +## In plain words + +Every system that sends or receives claims messages on the [National Health Claims Exchange](../../shared/glossary/nhcx.md) (NHCX) must first exist in its participant registry. Onboarding creates that record. + +The record gives you a [participant code](../glossary/participant-code.md), such as `100001@sbx`. It holds your public encryption certificate and the address where NHCX delivers your messages. Nothing else on NHCX works for you until the record exists. + +## Before you start + +Each item is something you can check before the first call. + +- **Registry identity.** A [provider](../glossary/provider.md) has its facility in the [Health Facility Registry](../../shared/glossary/hfr.md) (HFR) and knows its HFR ID. A [payer](../glossary/payer.md) or [TPA](../glossary/tpa.md) knows the ID its [IRDAI](../glossary/irdai.md) or equivalent authority issued. An end user application, such as a [PHR](../../shared/glossary/phr.md) app, uses its client ID. +- **Sandbox credentials.** You hold an [ABDM](../../shared/glossary/abdm.md) sandbox client ID and secret. Apply at `https://sandbox.abdm.gov.in/sandbox/v3/` with the intent "Providers and Payer" and [Milestone 1](../../shared/glossary/m1.md). See [What you need before you register on the NHCX sandbox](../sandbox/prerequisites.md). +- **Milestone 1 working, for a provider.** Your software creates and verifies [ABHA](../../shared/glossary/abha.md) numbers. +- **NHCX sandbox access.** You registered at `https://sandbox.abdm.gov.in/sandbox/v3/sandbox-registration` with that client ID and secret, and roles were assigned to you. +- **A certificate.** You have `certificate_base64.txt` from [Generate an encryption certificate and register it](generate-and-register-certificate.md). +- **A callback address.** Your HTTPS endpoint meets the [callback address rules](../sandbox/callback-url-requirements.md). It uses a domain name with no IP address or port. The server is in India, and its firewall is open to `3.109.99.210`, `13.126.152.0` and `13.200.129.223`. + +## What happens + +```mermaid +sequenceDiagram + participant You as Your system + participant GW as ABDM session gateway + participant PS as NHCX participant service + You->>GW: POST /api/hiecm/gateway/v3/sessions + GW-->>You: accessToken and expiresIn + You->>PS: POST /participant/create + PS-->>You: participant_code, for example 100001@sbx + opt Create answers with a transactionid instead + Note over You: a passcode arrives by SMS on the registered mobile + You->>PS: GET /validate with transactionId and passcode + PS-->>You: creation confirmed + end + You->>PS: POST /fetch/certs with your participant code + PS-->>You: the encryption_cert you registered + opt Change the endpoint or certificate later + You->>PS: POST /participant/update + PS-->>You: participant_code + end +``` + +Every call in this flow answers in its own response. Two waits sit outside the calls. The manual review of your sandbox registration comes before step 1. The SMS passcode arrives in step 3, when that step applies. + +### 1. Get a session token + +Call the session endpoint with your client ID and secret. [Which session token endpoint to call](../decisions/session-endpoint.md) settles the address. Read the token's lifetime from `expiresIn` in the answer. Get a new token before it lapses, and after any `401`. + +Every participant service call below carries this token. The [session token endpoint](../endpoints/session-token.md) shows the header. + +### 2. Create the participant + +Call `POST /participant/create` on the sandbox participant service, `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice`. The body carries your profile: + +| Field | What to put | +|---|---| +| `linked_registry_codes` | Your registry code, from the table below | +| `registryid` | Your ID in that registry, as listed under Before you start | +| `participant_name` | Your legal or facility name | +| `scheme_code`, `state`, `district` | Your scheme, for example `PMJAY`, and your location | +| `roles` | Your role code, from the table below | +| `primaryEmail`, `phone`, `primaryMobile` | Your contacts | +| `signing_cert_path` | Path to your signing certificate, if you have one | +| `encryption_cert` | The contents of `certificate_base64.txt` | +| `endpoint_url` | Your callback base address | + +| You are | `roles` | `linked_registry_codes` | +|---|---|---| +| Provider | `10001` | `10001` (HFR) | +| Payer | `10002` | `10004` (PAYER) | +| TPA | `10003` | `10004` (PAYER) | +| End user application | `10009` | `10001` | + +The answer carries your `participant_code`. The full request is in [POST /participant/create](../endpoints/participant-create.md). + +An entity with several facilities creates one participant code per HFR ID. It uses the same client credentials for all of them. + +### 3. Confirm, when the answer asks for it + +If the create answer carries a `transactionid` instead of a participant code, a passcode arrives by SMS on the registered mobile. Confirm with `GET /validate`, passing `transactionId` and `passcode`. The rules for that pair are in [Onboard as a participant in production](production-onboarding.md). + +### 4. Read your record back + +Call `POST /fetch/certs` with `{"participantid": ""}`. The answer carries the `encryption_cert` stored against your code. Compare it with your certificate as shown in [Generate an encryption certificate and register it](generate-and-register-certificate.md). + +### 5. Change it later + +`POST /participant/update` changes the endpoint address, the certificate or any other attribute. `participant_code` is mandatory in its body. + +On success every call here answers HTTP `200`. Failures answer `400` for a client error, `404` for a resource not found, or `500` when downstream systems are down. + +## How you know it worked + +You hold a `participant_code` from `POST /participant/create`, or from `GET /validate` when a passcode was asked for. `POST /fetch/certs` with that code returns an `encryption_cert` whose public key matches your `certificate.crt`. + +```observation schema=exit-condition +channel: synchronous +call: POST /fetch/certs +request: + participantid: +match: + encryption_cert: public key equals the one in certificate.crt +``` + +Next, build your message handling with [Receive, open and acknowledge a sealed message](receive-a-sealed-callback.md) and [Report a processing failure on /v1/error](report-a-processing-error.md). Then work through [the sandbox exit process](../sandbox/sandbox-exit.md). + +## When it goes wrong + +- **Every call returns `401`.** The token is missing, lacks the `Bearer ` prefix, or has expired. Get a new token and retry once. See [NHCX-401](../errors/nhcx-401.md) and [Every NHCX call returns 401](../troubleshooting/everything-returns-401.md). +- **Create is refused with `400`.** Check `roles` and `linked_registry_codes` against the table in step 2. A wrong pairing causes rejection or misrouted traffic later. +- **Use-case calls say the sender is not registered.** You are calling before the record exists, or with a different code. See [NHCX-1002](../errors/nhcx-1002.md). +- **Nothing ever reaches your endpoint.** The address uses an IP address or a port, or the server is outside India. A firewall may also block the NHCX addresses. See [Your callback URL is rejected or never called](../troubleshooting/callback-url-rejected.md). +- **`/fetch/certs` returns a different key.** You registered a certificate from another key pair. Replace it with `POST /participant/update`. +- **You are still waiting for sandbox access.** Registration approval is a manual review with no published turnaround. You cannot call anything until roles are assigned. See [Where to get help with NHCX](../sandbox/support-contacts.md). diff --git a/catalogue/nhcx/flows/send-a-sealed-request.md b/catalogue/nhcx/flows/send-a-sealed-request.md new file mode 100644 index 000000000..62f3da7bc --- /dev/null +++ b/catalogue/nhcx/flows/send-a-sealed-request.md @@ -0,0 +1,263 @@ +--- +id: nhcx.flow.send-a-sealed-request +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Send a sealed request through NHCX +summary: >- + Seal a claims message for one recipient, post it to the exchange, and wait for + the recipient's answer to arrive at your callback address. +sources: +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 2 JWE header and compact format; 2.4 Encryption Steps; 3.3 Certificate Fetch. +- url: https://hcxsbx.abdm.gov.in/images/b885e59891fedc7e725c.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection.zip + hash: sha256:2d082f244ee41d137a62af82380dcd2d5db9ebbab66824fd54a23c506d4d9a7f + fetched: '2026-09-14' + note: AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection, row 16 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Get Policies and Fetch Participants List bodies. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. items 4, 6, 7 and 8. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Error scenario. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Test Usecase Action API. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. PAYR-1005 row (timestamp). +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.session-token + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.fetch-participants-list + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.status + - nhcx.endpoint.dummy-payer-process-request + callbacks: + - nhcx.callback.coverageeligibility-on-check + - nhcx.callback.preauth-on-submit + - nhcx.callback.claim-on-submit + - nhcx.callback.communication-request + - nhcx.callback.error + - nhcx.callback.on-status + flows: + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.report-a-processing-error + - nhcx.flow.payer-process-a-request + - nhcx.flow.generate-and-register-certificate + - nhcx.flow.sandbox-onboarding + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + - nhcx.concept.four-message-legs + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.workflow-codes + - nhcx.concept.status-lifecycle + - nhcx.concept.retries-and-expiry + - nhcx.concept.fhir-in-nhcx + decisions: + - nhcx.decision.session-endpoint + - nhcx.decision.key-encryption-algorithm + - nhcx.decision.jwe-serialisation + - nhcx.decision.status-poll-or-wait + sandbox: + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.environments-and-base-urls + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1002 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1005 + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1001 + - nhcx.error.payr-1005 + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.recipient-cannot-decrypt + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + tests: + - nhcx.test.provider-uc-05 + - nhcx.test.provider-uc-07 + - nhcx.test.provider-uc-09 + glossary: + - nhcx.glossary.jwe + - nhcx.glossary.protected-header + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id + - nhcx.glossary.workflow-id +--- + +# Send a sealed request through NHCX + +## In plain words + +The [National Health Claims Exchange](../../shared/glossary/nhcx.md) (NHCX) carries claims messages between providers and payers, but it cannot read them. You seal the business content, a [FHIR](../../shared/glossary/fhir.md) bundle, with the recipient's public key. The routing details ride in the sealed envelope's [protected header](../glossary/protected-header.md). + +NHCX answers your call at once, but only to say it accepted the message. The recipient's decision arrives later, as a separate call from NHCX to your callback address. No NHCX use-case call returns a decision in its own response. + +## Before you start + +- You are onboarded, with a participant code and a registered callback address. See [Onboard as a participant in the NHCX sandbox](sandbox-onboarding.md). +- Your callback endpoint acknowledges within 30 seconds. See [Receive, open and acknowledge a sealed message](receive-a-sealed-callback.md). +- Your `/v1/error` endpoint is live, so you hear when delivery fails. See [Report a processing failure on /v1/error](report-a-processing-error.md). +- You hold a session token. +- You have a FHIR bundle for the use case that passes validation against the [NRCeS](../../shared/glossary/nrces.md) profiles. See [FHIR in NHCX](../concepts/fhir-in-nhcx.md). + +## What happens + +The example is a pre-authorisation from a provider to a payer. Every use case follows the same four legs. + +```mermaid +sequenceDiagram + participant You as Your system, the sender + participant PS as NHCX participant service + participant NHCX as NHCX exchange + participant R as Recipient, the payer + You->>PS: POST /participant/get/policies + PS-->>You: policies with payerid and processingid + You->>PS: POST /fetch/certs with the recipient code + PS-->>You: recipient encryption_cert, cache it for 24 hours + Note over You: build the protected header and seal a compact JWE + You->>NHCX: POST /v1/preauth/submit with the payload + NHCX-->>You: 202 accepted + NHCX->>R: POST /v1/preauth/submit + R-->>NHCX: 202 within 30 seconds + Note over R: adjudicates, with no fixed turnaround + R->>NHCX: POST /v1/preauth/on_submit + NHCX->>You: POST /v1/preauth/on_submit + You-->>NHCX: 202 within 30 seconds + opt Delivery to the recipient fails five times + NHCX->>You: POST /v1/error + end + opt Sandbox, with the dummy payer as recipient + You->>R: POST /process/request with action, method and correlationId + end +``` + +### 1. Find the recipient + +A provider looks up the patient's policies with `POST /participant/get/policies`. Send `identifiertype` as `AbhaNumber`, `MemberId` or `MobileNo`, with the value in `identifiervalue`. Address the request to the `processingid` in the answer, not the `payerid`. + +To browse payers instead, call `POST /fetch/participants/list` with `role`, `fromdate` and `todate`. Dates are `dd/MM/yyyy`. + +### 2. Fetch the recipient's certificate + +Call `POST /fetch/certs` with `{"participantid": ""}`. Cache the answer for 24 hours. Import it as an X.509 certificate. If that fails, import it as a bare public key. + +### 3. Build the protected header + +| Header | Value | +|---|---| +| `alg` | The key algorithm from [RSA-OAEP or RSA-OAEP-256](../decisions/key-encryption-algorithm.md) | +| `enc` | `A256GCM` | +| `x-hcx-sender_code` | Your participant code | +| `x-hcx-recipient_code` | The recipient's participant code | +| `x-hcx-api_call_id` | A new random UUID for this call | +| `x-hcx-request_id` | A new random UUID for this request | +| `x-hcx-correlation_id` | The conversation's UUID, as [message identifiers](../concepts/message-identifiers.md) sets out | +| `x-hcx-workflow_id` | The stage code, for example `12` for a new pre-authorisation. See [workflow codes](../concepts/workflow-codes.md) | +| `x-hcx-timestamp` | The current time, in the format [protocol headers](../concepts/protocol-headers.md) gives | +| `x-hcx-status` | `request.initiated` | +| `x-hcx-ben-abha-id` | The beneficiary's ABHA number, where the use case carries it | + +The `x-hcx-*` values travel only inside the protected header, never as plain HTTP headers. + +### 4. Seal it + +Encrypt the bundle into a [JWE](../glossary/jwe.md) in compact serialisation: five base64url parts joined by dots. See [Compact or flattened JWE serialisation](../decisions/jwe-serialisation.md). The request body is: + +```json +{ + "payload": "" +} +``` + +### 5. Post it + +Post to the use-case path on the use-case base address in [NHCX environments, hosts and base URLs](../sandbox/environments-and-base-urls.md). Send `Accept: application/json` and `Content-Type: application/json`. Send the session token in both `bearer_auth` and `Authorization`, each as `Bearer `. + +NHCX answers `202` at once. A gateway error, an `NHCX-` code, comes back in this response instead. + +### 6. Wait for the answer + +NHCX forwards your message and the recipient acknowledges it. The recipient then decides, with no fixed turnaround. Its answer arrives at your registered address on the paired path: + +| You posted | The answer arrives on | +|---|---| +| `/v1/coverageeligibility/check` | `/v1/coverageeligibility/on_check` | +| `/v1/insuranceplan/request` | `/v1/insuranceplan/on_request` | +| `/v1/preauth/submit` | `/v1/preauth/on_submit` | +| `/v1/claim/submit` | `/v1/claim/on_submit` | +| `/v1/task/submit` | `/v1/task/on_submit` | +| `/v1/search/submit` | `/v1/search/on_submit` | + +The answer is a sealed decision, or a plain `ProtocolResponse` when the recipient could not process your request. Handle it with [Receive, open and acknowledge a sealed message](receive-a-sealed-callback.md). A payer that needs more documents first sends you `/v1/communication/request`. + +### 7. When it goes quiet + +Check your `/v1/error` records first. Then ask with `POST /v1/status`, whose answer arrives on `/v1/on_status`. See [Poll with /v1/status or wait for the callback](../decisions/status-poll-or-wait.md). + +If you resend a message, give it a new `x-hcx-api_call_id`. After a failure, NHCX makes the correlation ID inactive, so start a fresh request with a new correlation ID. + +### 8. In the sandbox + +The dummy payer is `1000003538@hcx`. After a pre-authorisation or claim, trigger its answer with `POST /process/request` on `https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer`: + +```json +{ + "action": "Approve", + "method": "Preauth", + "correlationId": "" +} +``` + +`action` is `Approve`, `Reject` or `Query`, and `method` is `Preauth` or `Claim`. A `Query` makes the dummy payer send `/v1/communication/request` first. You answer it on `/v1/communication/on_request`, and the final answer follows on the `on_submit` path. See [The dummy payer and what it answers](../sandbox/dummy-payer.md). + +## How you know it worked + +NHCX answered `202` to your post. Later, NHCX delivered the paired answer to your registered address, and you answered it `202` within 30 seconds. In that answer's protected header: + +- `x-hcx-sender_code` is the recipient you addressed. +- `x-hcx-recipient_code` is your participant code. +- The identifiers match your request as [message identifiers](../concepts/message-identifiers.md) sets out. +- `x-hcx-status` is `response.complete`, `response.partial` or `response.error`. + +```observation schema=exit-condition +channel: callback +path: /v1/preauth/on_submit +match: + x-hcx-sender_code: + x-hcx-recipient_code: + x-hcx-status: one of response.complete, response.partial, response.error +acknowledge: HTTP 202 within 30 seconds +``` + +## When it goes wrong + +- **`401` on any call.** Get a new session token and retry once. See [NHCX-401](../errors/nhcx-401.md). +- **The sender or receiver is not registered.** One of the codes in your header is wrong or not onboarded. For a payer, use the `processingid` from the policy lookup. See [NHCX-1002](../errors/nhcx-1002.md) and [NHCX-1003](../errors/nhcx-1003.md). +- **Invalid request header.** A mandatory protected header is missing, or its prefix is not `x-hcx-`. See [NHCX-1005](../errors/nhcx-1005.md). +- **Duplicate request.** The correlation ID already belongs to another request. See [NHCX-1006](../errors/nhcx-1006.md) and [Responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). +- **The recipient cannot decrypt.** You sealed with a stale certificate, or a key algorithm it does not accept. Fetch the certificate again. See [PAYR-1001](../errors/payr-1001.md) and [The recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **The timestamp is refused.** The PMJAY reference payer refuses a timestamp more than 24 hours away from its clock. Keep your clock synchronised. See [PAYR-1005](../errors/payr-1005.md). +- **Accepted, and no answer arrives.** See [The request was accepted with 202 and no callback arrives](../troubleshooting/accepted-then-no-callback.md). diff --git a/catalogue/nhcx/flows/status-check.md b/catalogue/nhcx/flows/status-check.md new file mode 100644 index 000000000..b3ba3833c --- /dev/null +++ b/catalogue/nhcx/flows/status-check.md @@ -0,0 +1,140 @@ +--- +id: nhcx.flow.status-check +type: flow +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Check the status of a request +summary: >- + Ask the exchange where a request you sent now stands: still queued, delivered + to the recipient, or stopped. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Status. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Status Description. +- url: https://hcxsbx.abdm.gov.in/statushcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/statushcxservice.json + hash: sha256:93b6355a234ef56607427fcdfa32da4921124180c9df08ecd73c8af8955c2adf + fetched: '2026-09-14' + note: 'API specification: statushcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. path /v1/status; StatusSuccessResponse.' +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 13, Get status. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Error scenario. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, item 8. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.status + callbacks: + - nhcx.callback.on-status + - nhcx.callback.error + concepts: + - nhcx.concept.status-lifecycle + - nhcx.concept.message-identifiers + - nhcx.concept.retries-and-expiry + tests: + - nhcx.test.provider-uc-13 + - nhcx.test.payer-uc-15 + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + - nhcx.flow.send-a-sealed-request + decisions: + - nhcx.decision.status-poll-or-wait + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1012 + - nhcx.error.nhcx-401 + troubleshooting: + - nhcx.troubleshooting.everything-returns-401 + glossary: + - shared.glossary.nhcx +--- + +# Check the status of a request + +## In plain words + +A status check asks the [NHCX](../../shared/glossary/nhcx.md) exchange where a request you sent now stands. It answers with the request's protocol status: still queued at the exchange, delivered to the recipient's system, or stopped. + +It does not return the payer's decision. The decision arrives on the request's own callback, such as `/v1/preauth/on_submit`. + +Providers and payers both use it, for requests they sent. Use it when a callback is late, before you think of resubmitting. [Poll or wait](../decisions/status-poll-or-wait.md) helps you decide when. + +## Before you start + +- You sent the request you want to check, and you stored its `x-hcx-api_call_id` and recipient code. +- Your session token and callback endpoint are in place. The status answer arrives on `/v1/on_status`. + +## What happens + +```mermaid +sequenceDiagram + participant P as Provider (your system) + participant N as NHCX + participant Y as Payer + P->>N: POST /v1/preauth/submit (earlier request) + N-->>P: HTTP 202 Accepted + N->>Y: forwards when the payer's system is reachable + Note over P: the callback is late + P->>N: POST /v1/status + Note right of P: x-hcx-correlation_id is the earlier call's x-hcx-api_call_id + N-->>P: HTTP 202 Accepted, result.protocol_status + N->>P: POST /v1/on_status + P-->>N: HTTP 202 Accepted + Note left of P: read the status, then wait, or send a fresh request +``` + +1. Find the `x-hcx-api_call_id` of the request you are checking. +2. Build the protected header. Set `x-hcx-correlation_id` to that earlier `x-hcx-api_call_id`. Use a fresh `x-hcx-api_call_id` for the status call itself. +3. Set `x-hcx-status` to `request.initiated`. Use the same sender and recipient codes as the earlier request, and send `x-hcx-ben-abha-id`. +4. Seal the body as `{"payload": ""}`, as for every call. See [send a sealed request](send-a-sealed-request.md). +5. Call [POST /v1/status](../endpoints/status.md). NHCX answers `202 Accepted`. The body's `result.protocol_status` names where the request stands. +6. Receive [POST /v1/on_status](../callbacks/on-status.md). Its protected header carries the request's attributes, including `x-hcx-status`. Answer `202 Accepted`. +7. Act on the status: + +| Status | Meaning | What to do | +|---|---|---| +| `request.queued` | Queued at the exchange, ready to be picked up | Wait. Do not resend | +| `request.dispatched` | Reached the recipient's system | The recipient holds it. Wait for its callback | +| `request.stopped` | Stopped after failed attempts to reach the recipient | It will not be delivered. Check `/v1/error`, then send a fresh request | + +A fresh request always gets a new correlation id. After a failure, the old one is inactive. + +## How you know it worked + +The check is finished when all of these hold: + +- NHCX answered `POST /v1/status` with `202` and a `result.protocol_status`. +- You received `POST /v1/on_status` with the correlation id you asked about, and answered `202`. +- You hold one protocol status for the request: `request.queued`, `request.dispatched` or `request.stopped`. +- You acted on it: waited, or sent a fresh request with a new correlation id. + +## When it goes wrong + +NHCX finds no request. [NHCX-1012](../errors/nhcx-1012.md) means no record matches the api call id you gave. You probably put a new id in `x-hcx-correlation_id`. Use the earlier request's `x-hcx-api_call_id`. + +The request was deleted. After five failed delivery attempts, the exchange deletes a request. Its details come back to you on [/v1/error](../callbacks/error.md). Send a fresh request. + +You resent instead of checking. [NHCX-1006](../errors/nhcx-1006.md) means a request with that correlation id already exists. A queued request is still being worked on. Check its status rather than resending. + +Every call returns 401. [NHCX-401](../errors/nhcx-401.md) means your session token is missing or expired. See [every NHCX call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/glossary/adjudication.md b/catalogue/nhcx/glossary/adjudication.md new file mode 100644 index 000000000..d4298537b --- /dev/null +++ b/catalogue/nhcx/glossary/adjudication.md @@ -0,0 +1,56 @@ +--- +id: nhcx.glossary.adjudication +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Adjudication +summary: >- + The payer's decision on whether a request is payable and how much. +sources: +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 9-10, section 3 PMJAY Overview and 4.1 Claims Adjudication Process. +- url: https://hcxsbx.abdm.gov.in/images/af8d243edcc2139a515d.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Usecases.pdf + hash: sha256:8709b2907a0d5a0dbb36f5e63ed8deae269e0c75372b05d71ce7380c8a0929e7 + fetched: '2026-09-14' + note: NHCX Usecases, row 1 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, HCX Key Use cases table. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Acceptance scenario. +verified: + status: unverified +related: + glossary: + - nhcx.glossary.payer + - nhcx.glossary.tms + decisions: + - nhcx.decision.payer-implementation +--- + +# Adjudication + +## In plain words + +Adjudication is the payer's decision on a request: whether it is admissible under the policy and, if so, how much is payable. The payer adjudicates your preauthorisation or claim and returns the result in a ClaimResponse on the `on_submit` callback. [NHCX](../../shared/glossary/nhcx.md) carries the request and the result; the decision is the payer's. Under [PMJAY](../glossary/pmjay.md), named roles in [TMS](../glossary/tms.md) adjudicate. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say where an adjudication result reaches your system. + +## When it goes wrong + +Waiting on the `202` for a decision. It only means the exchange accepted the request. diff --git a/catalogue/nhcx/glossary/api-call-id.md b/catalogue/nhcx/glossary/api-call-id.md new file mode 100644 index 000000000..29bbc5885 --- /dev/null +++ b/catalogue/nhcx/glossary/api-call-id.md @@ -0,0 +1,55 @@ +--- +id: nhcx.glossary.api-call-id +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: API call id +summary: >- + The identifier your system generates afresh for every single call. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 3, FAQ 4. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, NHCX Protocol Headers table. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Status, x-hcx-correlation_id row. +verified: + status: unverified +related: + concepts: + - nhcx.concept.message-identifiers + glossary: + - nhcx.glossary.correlation-id +--- + +# API call id + +## In plain words + +The api call id, sent in `x-hcx-api_call_id`, is a random 36-character identifier that your system generates for every single call to [NHCX](../../shared/glossary/nhcx.md). It is new on every attempt, including retries. On an answer it differs from the correlation id. A status check uses the api call id of the request being checked. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say which of the api call id and the correlation id changes on a retry. + +## When it goes wrong + +Copying an api call id from an example instead of generating a fresh one for every call. diff --git a/catalogue/nhcx/glossary/bis.md b/catalogue/nhcx/glossary/bis.md new file mode 100644 index 000000000..334346401 --- /dev/null +++ b/catalogue/nhcx/glossary/bis.md @@ -0,0 +1,44 @@ +--- +id: nhcx.glossary.bis +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: BIS, Beneficiary Identification System +summary: >- + One of the government scheme systems whose workflows decide a claim. +sources: +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 9, section 3 PMJAY Overview. +verified: + status: unverified +related: + glossary: + - nhcx.glossary.pmjay + - nhcx.glossary.tms +--- + +# BIS, Beneficiary Identification System + +## In plain words + +BIS stands for Beneficiary Identification System. It is one of three [PMJAY](../glossary/pmjay.md) systems whose workflows decide a claim, with the Transaction Management System and the Hospital Empanelment Module. You meet the name where PMJAY claim adjudication is described; the decisions themselves are taken in [TMS](../glossary/tms.md). + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can name the three PMJAY systems behind a claim decision. + +## When it goes wrong + +Confusing BIS with TMS. Preauthorisation and claim decisions are taken in TMS. diff --git a/catalogue/nhcx/glossary/claim.md b/catalogue/nhcx/glossary/claim.md new file mode 100644 index 000000000..95bd0a3f8 --- /dev/null +++ b/catalogue/nhcx/glossary/claim.md @@ -0,0 +1,57 @@ +--- +id: nhcx.glossary.claim +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Claim +summary: >- + A request asking the payer to pay for treatment already given. +sources: +- url: https://hcxsbx.abdm.gov.in/images/af8d243edcc2139a515d.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Usecases.pdf + hash: sha256:8709b2907a0d5a0dbb36f5e63ed8deae269e0c75372b05d71ce7380c8a0929e7 + fetched: '2026-09-14' + note: NHCX Usecases, row 1 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Claim Request Submission. +- url: https://hcxsbx.abdm.gov.in/images/064cf2e059987011e53a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Claim.pdf + hash: sha256:66290de20d57d69e681946a0101518092ca43b3775bb38997c43beb17fb38076 + fetched: '2026-09-14' + note: Claim, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. Claim Submit request and response. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 35, Claim functional points to note. +verified: + status: unverified +related: + flows: + - nhcx.flow.claim-submit + endpoints: + - nhcx.endpoint.claim-submit + concepts: + - nhcx.concept.claim-cycle +--- + +# Claim + +## In plain words + +A claim asks the payer to pay for treatment already given. After discharge your system sends a Claim bundle through [NHCX](../../shared/glossary/nhcx.md) on `/v1/claim/submit`. The payer answers with a ClaimResponse on `/v1/claim/on_submit`. Under [PMJAY](../glossary/pmjay.md), discharge details travel inside the claim, and a claim cannot be cancelled. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say how a claim differs from a preauthorisation. + +## When it goes wrong + +Expecting a decision in the `202`. It means the exchange accepted the request; the decision arrives on `/v1/claim/on_submit`. diff --git a/catalogue/nhcx/glossary/communication-request.md b/catalogue/nhcx/glossary/communication-request.md new file mode 100644 index 000000000..65c4309a3 --- /dev/null +++ b/catalogue/nhcx/glossary/communication-request.md @@ -0,0 +1,51 @@ +--- +id: nhcx.glossary.communication-request +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Communication request +summary: >- + The payer asking the hospital for more information while a request is under review. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 10, Raise communication request. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 6, Query flow row; page 32-33, 8.4.4 Query updation. +verified: + status: unverified +related: + concepts: + - nhcx.concept.queries-and-communication + endpoints: + - nhcx.endpoint.communication-request + - nhcx.endpoint.communication-on-request +--- + +# Communication request + +## In plain words + +A communication request is the payer asking the provider for more information, such as additional documents, while a preauthorisation or claim is with the payer. The payer sends it through [NHCX](../../shared/glossary/nhcx.md) on `/v1/communication/request`, and your system replies with the documents on `/v1/communication/on_request`. Under [PMJAY](../glossary/pmjay.md), queries arrive in the preauthorisation or claim response instead, and you answer with the query response workflow id. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say which path carries your reply. + +## When it goes wrong + +Waiting for a communication request on a PMJAY case. PMJAY queries arrive in the response itself. diff --git a/catalogue/nhcx/glossary/correlation-id.md b/catalogue/nhcx/glossary/correlation-id.md new file mode 100644 index 000000000..48b2c9938 --- /dev/null +++ b/catalogue/nhcx/glossary/correlation-id.md @@ -0,0 +1,64 @@ +--- +id: nhcx.glossary.correlation-id +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Correlation id +summary: >- + The identifier that ties every message of one request and its answers together. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, x-hcx-correlation_id row. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 3, FAQ 4. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, item 8. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet Preauth, x-hcx-correlation_id row. +verified: + status: unverified +related: + concepts: + - nhcx.concept.message-identifiers + glossary: + - nhcx.glossary.api-call-id + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + errors: + - nhcx.error.nhcx-1006 +--- + +# Correlation id + +## In plain words + +The correlation id, sent in `x-hcx-correlation_id`, is a random 36-character identifier that ties every message of one request cycle on [NHCX](../../shared/glossary/nhcx.md) together. The request that opens the cycle sets it, equal to that request's api call id. Every answer and callback in the cycle carries it unchanged. After an error it becomes inactive, and a fresh request needs a new one. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say what value a payer puts in the correlation id of its answer. + +## When it goes wrong + +Retrying a failed request with its old correlation id. It is refused as a duplicate, [NHCX-1006](../errors/nhcx-1006.md). See [responses arrive against the wrong request](../troubleshooting/duplicate-or-mismatched-correlation.md). diff --git a/catalogue/nhcx/glossary/coverage-eligibility.md b/catalogue/nhcx/glossary/coverage-eligibility.md new file mode 100644 index 000000000..13ce2180c --- /dev/null +++ b/catalogue/nhcx/glossary/coverage-eligibility.md @@ -0,0 +1,59 @@ +--- +id: nhcx.glossary.coverage-eligibility +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Coverage eligibility +summary: >- + The check a hospital runs to confirm a patient's policy and what it covers. +sources: +- url: https://hcxsbx.abdm.gov.in/images/cfcbe62e8378d4f48ee6.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Coverage Eligibility.pdf + hash: sha256:69dd680ddac44231a97276a1d735e45777d8e43b5563b7248fd367a838d9744f + fetched: '2026-09-14' + note: Coverage Eligibility, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. Coverage Eligibility Check request and response. +- url: https://hcxsbx.abdm.gov.in/images/13093b5f9b88fe826123.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Insurance Plan IG.docx + hash: sha256:e9c6c82b6d67fd8476d6d19a5961419beb04e3c0613533453ed1e16e2a569cc1 + fetched: '2026-09-14' + note: Insurance Plan IG, row 25 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Core APIs, CoverageEligibility purposes list. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet Scenarios, rows 3 to 5. +verified: + status: unverified +related: + flows: + - nhcx.flow.coverage-eligibility-check + endpoints: + - nhcx.endpoint.coverageeligibility-check + concepts: + - nhcx.concept.coverage-eligibility-purposes + decisions: + - nhcx.decision.eligibility-purpose +--- + +# Coverage eligibility + +## In plain words + +Coverage eligibility is the check a provider runs to confirm a patient's policy and what it covers. Your system sends a `CoverageEligibilityRequest` through [NHCX](../../shared/glossary/nhcx.md) on `/v1/coverageeligibility/check`, with a `purpose` of `discovery`, `validation`, `benefits` or `auth-requirements`. The payer answers on `/v1/coverageeligibility/on_check`. You run it at registration and again before each preauthorisation. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say which purpose to send before a preauthorisation. + +## When it goes wrong + +Skipping the `auth-requirements` check and learning the required documents from a query instead. See [which coverage eligibility purpose to send](../decisions/eligibility-purpose.md). diff --git a/catalogue/nhcx/glossary/crc.md b/catalogue/nhcx/glossary/crc.md new file mode 100644 index 000000000..50d358344 --- /dev/null +++ b/catalogue/nhcx/glossary/crc.md @@ -0,0 +1,51 @@ +--- +id: nhcx.glossary.crc +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: CRC +summary: >- + The committee that decides appeals against rejected claims in the government health + scheme. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Erroneous claim FAQ 15. +- file: catalogue/openapi/.raw/nhcx-site-2026-09-14/not-on-site/External_NHCX_Payer_Service_API_Workflow_Guide.docx + hash: sha256:1028d480d2fabe3204301f1c1b192a0077ddfa64f7f9084b01f73e004253fdd7 + fetched: '2026-09-05' + note: NHCX Payer Service API Workflow Guide for External Integrators, not listed on hcxsbx.abdm.gov.in and not named in the NHCX document sheet, received separately. CLAIM Step 6 and role table. +verified: + status: unverified +related: + glossary: + - nhcx.glossary.reprocess + - nhcx.glossary.pmjay + endpoints: + - nhcx.endpoint.payer-service-process-case +--- + +# CRC + +## In plain words + +CRC stands for Claim Review Committee, the body that decides [PMJAY](../glossary/pmjay.md) reprocess appeals. Its decision is final: no erroneous claim can be raised against it. In the PMJAY payer service it is the last role in the claim chain, acting with `Approve`, `Reject` or `Pending`. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say what can follow a CRC decision. + +## When it goes wrong + +Raising an erroneous claim for the balance after a CRC partial approval. It is not accepted. diff --git a/catalogue/nhcx/glossary/enhancement.md b/catalogue/nhcx/glossary/enhancement.md new file mode 100644 index 000000000..c2497bd20 --- /dev/null +++ b/catalogue/nhcx/glossary/enhancement.md @@ -0,0 +1,57 @@ +--- +id: nhcx.glossary.enhancement +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Enhancement +summary: >- + A request to extend an approved preauthorisation or add procedures to it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 32, 8.4.3 Enhancement. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, Enhancement Request Initiated. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet Scenarios, row 7. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-enhancement + concepts: + - nhcx.concept.workflow-codes + glossary: + - nhcx.glossary.preauthorisation +--- + +# Enhancement + +## In plain words + +An enhancement asks the payer to extend an already approved preauthorisation or add procedures to it. It travels through [NHCX](../../shared/glossary/nhcx.md) on `/v1/preauth/submit` with workflow id `13`, carrying the approved treatments and the new ones. You can raise several until discharge, within the limit, but only after the previous request has closed. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say what must be true before you send an enhancement. + +## When it goes wrong + +Sending an enhancement while the previous preauthorisation or resubmission is still open. Wait for it to close. diff --git a/catalogue/nhcx/glossary/hbp.md b/catalogue/nhcx/glossary/hbp.md new file mode 100644 index 000000000..7e84f8f23 --- /dev/null +++ b/catalogue/nhcx/glossary/hbp.md @@ -0,0 +1,50 @@ +--- +id: nhcx.glossary.hbp +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: HBP, Health Benefit Package +summary: >- + The list of treatment packages a government scheme beneficiary can be treated + under. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. FAQ 24 Unspecified Procedure, questions 1 and 7. +- url: https://hcxsbx.abdm.gov.in/images/4d333fa6ce5ef99920de.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Test Cases.xlsx + hash: sha256:0d95021974cfe81ab2e3bf66f983228a70b8fed8d7d251eb6d7eeab7354ecad2 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Test Cases, row 31 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Test case TC-HBP-01. +verified: + status: unverified +related: + glossary: + - nhcx.glossary.pmjay + - nhcx.glossary.insurance-plan +--- + +# HBP, Health Benefit Package + +## In plain words + +HBP is the package list of a [PMJAY](../glossary/pmjay.md) policy: the packages a beneficiary can be treated under. Each package has a code, a rate and claim conditions, delivered in the [insurance plan](../glossary/insurance-plan.md). A procedure outside the package list is an unspecified procedure, coded with its specialty prefix and `215`, such as `SG215`. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say where your system reads a patient's HBP packages from. + +## When it goes wrong + +Booking a procedure outside the package list as a normal package. Use the unspecified procedure code for its specialty. diff --git a/catalogue/nhcx/glossary/insurance-plan.md b/catalogue/nhcx/glossary/insurance-plan.md new file mode 100644 index 000000000..ee4ba7b70 --- /dev/null +++ b/catalogue/nhcx/glossary/insurance-plan.md @@ -0,0 +1,59 @@ +--- +id: nhcx.glossary.insurance-plan +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Insurance plan +summary: >- + The payer's policy in machine-readable form, with its packages, rates and rules. +sources: +- url: https://hcxsbx.abdm.gov.in/images/13093b5f9b88fe826123.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Insurance Plan IG.docx + hash: sha256:e9c6c82b6d67fd8476d6d19a5961419beb04e3c0613533453ed1e16e2a569cc1 + fetched: '2026-09-14' + note: Insurance Plan IG, row 25 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Core APIs, InsurancePlan Task table. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. InsurancePlan Response, Key Characteristics. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 13, 6.1 High-Level NHCX Process Flow. +verified: + status: unverified +related: + flows: + - nhcx.flow.insurance-plan-request + endpoints: + - nhcx.endpoint.insuranceplan-request + concepts: + - nhcx.concept.insurance-plan + errors: + - nhcx.error.payr-1406 +--- + +# Insurance plan + +## In plain words + +An insurance plan is the payer's policy in machine-readable form: covered specialties, packages, package rates, conditions and document rules. Your system asks for it with a `Task` on `/v1/insuranceplan/request` and receives an InsurancePlan bundle on `/v1/insuranceplan/on_request`. For [PMJAY](../glossary/pmjay.md) the plan is specific to your hospital and drives what your preauthorisations and claims must carry. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say what your system reads from the plan before a preauthorisation. + +## When it goes wrong + +Fetching the plan on every transaction. Cache it and refresh it on a schedule. A second request for the same hospital and policy while one is running is refused with [PAYR-1406](../errors/payr-1406.md). diff --git a/catalogue/nhcx/glossary/irdai.md b/catalogue/nhcx/glossary/irdai.md new file mode 100644 index 000000000..aba0167c8 --- /dev/null +++ b/catalogue/nhcx/glossary/irdai.md @@ -0,0 +1,55 @@ +--- +id: nhcx.glossary.irdai +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: IRDAI +summary: >- + The regulator of insurance in India, which helps set who may join the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Registries section. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, item 5. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. Functional Testing, HTC demo. +verified: + status: unverified +related: + glossary: + - nhcx.glossary.payer + - nhcx.glossary.tpa + - shared.glossary.nha +--- + +# IRDAI + +## In plain words + +IRDAI is the Insurance Regulatory and Development Authority of India. With [NHA](../../shared/glossary/nha.md), it sets the procedure for enrolling participants on [NHCX](../../shared/glossary/nhcx.md). A payer or [TPA](../glossary/tpa.md) registers with its IRDAI registry ID, without leading zeros: `0123` is sent as `123`. IRDAI also takes part in the demo that ends functional testing. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say which registry ID a payer registers with. + +## When it goes wrong + +Sending the IRDAI registry ID with its leading zeros. diff --git a/catalogue/nhcx/glossary/jwe.md b/catalogue/nhcx/glossary/jwe.md new file mode 100644 index 000000000..fd55af2ff --- /dev/null +++ b/catalogue/nhcx/glossary/jwe.md @@ -0,0 +1,59 @@ +--- +id: nhcx.glossary.jwe +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: JWE, JSON Web Encryption +summary: >- + The encryption standard that seals every exchange payload so only the recipient + can read it. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Protected Header and Signatures. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. FAQ 13. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Request rows of each use case sheet. +verified: + status: unverified +related: + concepts: + - nhcx.concept.jwe-envelope + decisions: + - nhcx.decision.jwe-serialisation + - nhcx.decision.key-encryption-algorithm + glossary: + - nhcx.glossary.protected-header +--- + +# JWE, JSON Web Encryption + +## In plain words + +JWE stands for JSON Web Encryption, the standard (RFC 7516) that seals every [NHCX](../../shared/glossary/nhcx.md) payload so only the recipient can read it. The [protected header](../glossary/protected-header.md) stays readable, so NHCX can route the message, and is integrity protected with the ciphertext. Every use case request carries one JWE in compact form inside the `payload` field. See [the JWE envelope that seals every payload](../concepts/jwe-envelope.md). + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say which part of a JWE the exchange reads and which part it cannot. + +## When it goes wrong + +Sending the flattened JSON form. Send the compact string in `payload`. See [compact or flattened JWE serialisation](../decisions/jwe-serialisation.md). diff --git a/catalogue/nhcx/glossary/participant-code.md b/catalogue/nhcx/glossary/participant-code.md new file mode 100644 index 000000000..45b3df45f --- /dev/null +++ b/catalogue/nhcx/glossary/participant-code.md @@ -0,0 +1,54 @@ +--- +id: nhcx.glossary.participant-code +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Participant code +summary: >- + The address the exchange gives your organisation when you register. +sources: +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Participant creation response. +- url: https://hcxsbx.abdm.gov.in/images/bc2efb078b98548f8e6b.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Sandbox.pdf + hash: sha256:cbd03baf428655f0305e2f60ca331f8b76700496b070c522cafcc95001710b3a + fetched: '2026-09-14' + note: Onboarding providers and payers in Sandbox, row 4 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Participant APIs, response structure. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, NHCX Protocol Headers table. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-code + - nhcx.concept.participant-registry +--- + +# Participant code + +## In plain words + +A participant code is the address [NHCX](../../shared/glossary/nhcx.md) assigns to your organisation when you register. It carries a suffix after the `@` naming the instance, as in `100001@sbx` or `1000003538@hcx`. Every message names its sender and recipient by participant code, in `x-hcx-sender_code` and `x-hcx-recipient_code`. See [participant codes and how every message is addressed](../concepts/participant-code.md). + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can name the two protocol headers that carry participant codes. + +## When it goes wrong + +Typing a code from an example instead of using the one returned when you registered. diff --git a/catalogue/nhcx/glossary/payer.md b/catalogue/nhcx/glossary/payer.md new file mode 100644 index 000000000..9c51ec639 --- /dev/null +++ b/catalogue/nhcx/glossary/payer.md @@ -0,0 +1,57 @@ +--- +id: nhcx.glossary.payer +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Payer +summary: >- + The insurance company or scheme that pays for a patient's treatment. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. FAQ 7, role codes. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Policy Linking Process. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, item 7. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-roles + glossary: + - nhcx.glossary.provider + - nhcx.glossary.tpa + - nhcx.glossary.participant-code +--- + +# Payer + +## In plain words + +A payer is the insurance company or scheme that pays for a patient's treatment. On [NHCX](../../shared/glossary/nhcx.md) it registers with the role `PAYER` (`10002`) and holds its own participant code, whether or not a [TPA](../glossary/tpa.md) processes its claims. You meet payers as the recipients of eligibility checks, preauthorisations and claims, and as the senders of payment notices. See [participant roles](../concepts/participant-roles.md). + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say which participant code a payer's requests go to when a TPA processes them. + +## When it goes wrong + +Addressing requests to the insurer's code when a TPA processes its policies. Send them to the processing ID. diff --git a/catalogue/nhcx/glossary/payment-notice.md b/catalogue/nhcx/glossary/payment-notice.md new file mode 100644 index 000000000..5017d2203 --- /dev/null +++ b/catalogue/nhcx/glossary/payment-notice.md @@ -0,0 +1,60 @@ +--- +id: nhcx.glossary.payment-notice +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Payment notice +summary: >- + The payer's message that it is paying or has paid a claim. +sources: +- url: https://hcxsbx.abdm.gov.in/images/af8d243edcc2139a515d.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Usecases.pdf + hash: sha256:8709b2907a0d5a0dbb36f5e63ed8deae269e0c75372b05d71ce7380c8a0929e7 + fetched: '2026-09-14' + note: NHCX Usecases, row 1 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Payment Notice. +- url: https://hcxsbx.abdm.gov.in/images/b7260763ce8270b6baac.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Payment.pdf + hash: sha256:6d372cdeec0abaea66b4d267c5ee6137a01830c577360dba7699e0244e49615f + fetched: '2026-09-14' + note: Payment, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. Payment Notice request and response. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Erroneous claim FAQ 4 and 6. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, Payment Notice Recived. +verified: + status: unverified +related: + flows: + - nhcx.flow.payment-notice + endpoints: + - nhcx.endpoint.paymentnotice-request +--- + +# Payment notice + +## In plain words + +A payment notice is the payer's message about paying a claim, with bank reference numbers. The payer sends it through [NHCX](../../shared/glossary/nhcx.md) on `/v1/paymentnotice/request`, and your system acknowledges it. Workflow `30` marks payment initiated, `33` marks payment cleared, and your acknowledgement carries `17`. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say which workflow id means the money has cleared. + +## When it goes wrong + +Raising an erroneous claim before workflow `33` arrives. Wait for payment to clear, and acknowledge it first. diff --git a/catalogue/nhcx/glossary/pid-block.md b/catalogue/nhcx/glossary/pid-block.md new file mode 100644 index 000000000..f2fec5e9c --- /dev/null +++ b/catalogue/nhcx/glossary/pid-block.md @@ -0,0 +1,48 @@ +--- +id: nhcx.glossary.pid-block +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PID block +summary: >- + The captured biometric data passed to the verify call. +sources: +- url: https://hcxsbx.abdm.gov.in/images/9f1e6b545a693d38a704.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication Implementation Steps.docx + hash: sha256:fac8b14bfe8d518c0e651740537b9441c501d3cf2ab0f0482a07ab9f417e43a9 + fetched: '2026-09-14' + note: Biometric Authentication Implementation Steps, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. Fingerprint/IRIS Auth Verify; Face Auth Capture PID and Aadhar Verify. +verified: + status: unverified +related: + concepts: + - nhcx.concept.biometric-authentication + endpoints: + - nhcx.endpoint.abha-biometric-auth-verify + - nhcx.endpoint.abha-biometric-capture-pid + glossary: + - nhcx.glossary.rd-service +--- + +# PID block + +## In plain words + +A PID block is the captured biometric data that your system passes to the verify call in [PMJAY](../glossary/pmjay.md) beneficiary authentication. Fingerprint and iris verification carry it in `fingerPrintAuthPid` or `irisAuthPid`, with the `txnId` from `auth/init`. For face authentication your system never holds it: you poll `capture/pid` until it reports `COMPLETE`, then call `v2/auth/verify`. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say which call tells you a face capture has finished. + +## When it goes wrong + +Calling `v2/auth/verify` while `capture/pid` still reports `PENDING`. Poll until it reports `COMPLETE`. diff --git a/catalogue/nhcx/glossary/pmjay.md b/catalogue/nhcx/glossary/pmjay.md new file mode 100644 index 000000000..be7257729 --- /dev/null +++ b/catalogue/nhcx/glossary/pmjay.md @@ -0,0 +1,50 @@ +--- +id: nhcx.glossary.pmjay +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: PMJAY +summary: >- + The government health assurance scheme that runs on the claims exchange with extra + scheme rules. +sources: +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 9, section 3 PMJAY Overview; page 5-6 requirements table. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. InsurancePlan Response, Key Characteristics. +verified: + status: unverified +related: + concepts: + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.hmis-integration-architecture +--- + +# PMJAY + +## In plain words + +PMJAY is the Pradhan Mantri Jan Arogya Yojana, the government health assurance scheme. It covers up to Rs 5 lakh per family per year for secondary and tertiary hospitalisation. It runs on the same [NHCX](../../shared/glossary/nhcx.md) framework as private insurance, with extra onboarding and scheme rules. You meet it when your hospital treats scheme beneficiaries: biometric authentication, hospital-specific insurance plans and structured clinical documents become mandatory. See [PMJAY on NHCX](../concepts/pmjay-on-nhcx.md). + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can name two things PMJAY integration adds to plain NHCX. + +## When it goes wrong + +Treating PMJAY as a separate network. The calls are the same; the scheme rules differ. diff --git a/catalogue/nhcx/glossary/preauthorisation.md b/catalogue/nhcx/glossary/preauthorisation.md new file mode 100644 index 000000000..4f2ab264e --- /dev/null +++ b/catalogue/nhcx/glossary/preauthorisation.md @@ -0,0 +1,55 @@ +--- +id: nhcx.glossary.preauthorisation +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Preauthorisation +summary: >- + A request asking the payer to approve planned treatment before it happens. +sources: +- url: https://hcxsbx.abdm.gov.in/images/3799f26f2a0b2c9a80c5.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Preauthorization.pdf + hash: sha256:75d5628e7dd8a8e1a55c4ab3836c0591088ba378a8cd498e8277d83911129439 + fetched: '2026-09-14' + note: Preauthorization, listed on https://hcxsbx.abdm.gov.in/#/documents, not named in the NHCX document sheet. Preauthorization Submission request and response. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. pages 31-33, 8.4.2 to 8.4.4. +verified: + status: unverified +related: + flows: + - nhcx.flow.preauth-submit + endpoints: + - nhcx.endpoint.preauth-submit + decisions: + - nhcx.decision.preauth-or-predetermination + glossary: + - nhcx.glossary.enhancement + - nhcx.glossary.predetermination +--- + +# Preauthorisation + +## In plain words + +A preauthorisation asks the payer to approve planned treatment before it happens. Your system sends a Claim bundle through [NHCX](../../shared/glossary/nhcx.md) on `/v1/preauth/submit`. The payer answers with a ClaimResponse on `/v1/preauth/on_submit`: approved, rejected or queried. Enhancements and resubmissions travel on the same path. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can name the path a preauthorisation's answer arrives on. + +## When it goes wrong + +Resubmitting to answer a query. A query gets a query response, not a resubmission. diff --git a/catalogue/nhcx/glossary/predetermination.md b/catalogue/nhcx/glossary/predetermination.md new file mode 100644 index 000000000..d7c1a7342 --- /dev/null +++ b/catalogue/nhcx/glossary/predetermination.md @@ -0,0 +1,54 @@ +--- +id: nhcx.glossary.predetermination +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Predetermination +summary: >- + A request asking the payer to judge a planned claim in advance against the policy. +sources: +- url: https://hcxsbx.abdm.gov.in/images/af8d243edcc2139a515d.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Usecases.pdf + hash: sha256:8709b2907a0d5a0dbb36f5e63ed8deae269e0c75372b05d71ce7380c8a0929e7 + fetched: '2026-09-14' + note: NHCX Usecases, row 1 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, Predetermination Request Submission. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. API list table. +verified: + status: unverified +related: + flows: + - nhcx.flow.predetermination + endpoints: + - nhcx.endpoint.predetermination-submit + decisions: + - nhcx.decision.preauth-or-predetermination + glossary: + - nhcx.glossary.preauthorisation +--- + +# Predetermination + +## In plain words + +A predetermination asks the payer to adjudicate a planned claim in advance, against the policy and the beneficiary's past history. Your system sends a Claim bundle through [NHCX](../../shared/glossary/nhcx.md) on `/v1/predetermination/submit`, and the payer answers on `/v1/predetermination/on_submit`. The Claim's `use` marks it as a predetermination rather than a preauthorisation or a claim. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say how a predetermination differs from a preauthorisation. + +## When it goes wrong + +Sending a predetermination where a preauthorisation is required. See [preauthorisation or predetermination](../decisions/preauth-or-predetermination.md). diff --git a/catalogue/nhcx/glossary/protected-header.md b/catalogue/nhcx/glossary/protected-header.md new file mode 100644 index 000000000..1f06a1d22 --- /dev/null +++ b/catalogue/nhcx/glossary/protected-header.md @@ -0,0 +1,56 @@ +--- +id: nhcx.glossary.protected-header +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Protected header +summary: >- + The readable first part of a sealed message, holding the routing information. +sources: +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, Protected Header and Signatures. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications__open-protocol__data-security-and-privacy__message-security-and-integrity.md + hash: sha256:3768fd89932e4081c9e03a8695619bcaf70c641e28bb55a77eec090bb926eeb3 + fetched: '2026-09-14' + note: Site page /technical-specifications/open-protocol/data-security-and-privacy/message-security-and-integrity, text as shown on the site. Message security, JWE encryption steps. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. FAQ 13. +verified: + status: unverified +related: + concepts: + - nhcx.concept.protocol-headers + - nhcx.concept.jwe-envelope + glossary: + - nhcx.glossary.jwe +--- + +# Protected header + +## In plain words + +The protected header is the first part of a [JWE](../glossary/jwe.md): a JSON object holding `alg`, `enc` and the `x-hcx-` protocol headers, Base64url encoded. [NHCX](../../shared/glossary/nhcx.md) reads it to route and audit the message without opening the payload. It is integrity protected together with the ciphertext, so any change to it makes decryption fail. See [the x-hcx protocol headers](../concepts/protocol-headers.md). + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can list three `x-hcx-` headers every message carries. + +## When it goes wrong + +Putting the protocol headers in the HTTP headers. They belong inside the protected header. diff --git a/catalogue/nhcx/glossary/provider.md b/catalogue/nhcx/glossary/provider.md new file mode 100644 index 000000000..c09341901 --- /dev/null +++ b/catalogue/nhcx/glossary/provider.md @@ -0,0 +1,50 @@ +--- +id: nhcx.glossary.provider +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Provider +summary: >- + The hospital, clinic or other facility that treats the patient and is paid for + it. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. FAQ 6, 7 and 11. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-roles + flows: + - nhcx.flow.sandbox-onboarding + glossary: + - nhcx.glossary.payer + - nhcx.glossary.participant-code + - shared.glossary.hfr +--- + +# Provider + +## In plain words + +A provider is the hospital, clinic or other facility that treats the patient and is paid for it. On [NHCX](../../shared/glossary/nhcx.md) it registers with the role `PROVIDER` (`10001`), using its [HFR](../../shared/glossary/hfr.md) ID as the registry ID. One entity can hold several participant codes, one per HFR ID. You are the provider when your system sends eligibility checks, preauthorisations and claims. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say which registry ID a provider registers with. + +## When it goes wrong + +Registering several facilities under one participant code. Each HFR ID gets its own. diff --git a/catalogue/nhcx/glossary/rd-service.md b/catalogue/nhcx/glossary/rd-service.md new file mode 100644 index 000000000..08a72aa9d --- /dev/null +++ b/catalogue/nhcx/glossary/rd-service.md @@ -0,0 +1,53 @@ +--- +id: nhcx.glossary.rd-service +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: RD service, registered device service +summary: >- + The Aadhaar software that runs a biometric capture. +sources: +- url: https://hcxsbx.abdm.gov.in/images/9f1e6b545a693d38a704.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/Biometric Authentication Implementation Steps.docx + hash: sha256:fac8b14bfe8d518c0e651740537b9441c501d3cf2ab0f0482a07ab9f417e43a9 + fetched: '2026-09-14' + note: Biometric Authentication Implementation Steps, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. Fingerprint/IRIS Auth Verify. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. FAQ 10 (K-547). +verified: + status: unverified +related: + concepts: + - nhcx.concept.biometric-authentication + flows: + - nhcx.flow.biometric-face + - nhcx.flow.biometric-fingerprint-iris + glossary: + - nhcx.glossary.pid-block +--- + +# RD service, registered device service + +## In plain words + +An RD service is the Aadhaar software that runs a biometric capture. For face authentication, the patient's phone scans the face with the Aadhaar RD Service app from the Play Store or App Store. For fingerprint and iris, your desk captures from a scanner and places the result in `fingerPrintAuthPid` or `irisAuthPid`. You meet it when you build [PMJAY](../glossary/pmjay.md) beneficiary authentication. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say which modality uses the RD Service app on a phone. + +## When it goes wrong + +Fingerprint capture failing with `K-547`. Build the `wadh` value with `lr` set to `Y`. diff --git a/catalogue/nhcx/glossary/reprocess.md b/catalogue/nhcx/glossary/reprocess.md new file mode 100644 index 000000000..e5f4bf5fd --- /dev/null +++ b/catalogue/nhcx/glossary/reprocess.md @@ -0,0 +1,59 @@ +--- +id: nhcx.glossary.reprocess +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Reprocess +summary: >- + A request asking the payer to reconsider a claim it rejected or paid only in part. +sources: +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet Scenarios, rows 12 and 14. +- url: https://hcxsbx.abdm.gov.in/images/af8d243edcc2139a515d.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Usecases.pdf + hash: sha256:8709b2907a0d5a0dbb36f5e63ed8deae269e0c75372b05d71ce7380c8a0929e7 + fetched: '2026-09-14' + note: NHCX Usecases, row 1 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Reprocess Request. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Erroneous claim FAQs, comparison table, 11 and 15. +verified: + status: unverified +related: + flows: + - nhcx.flow.claim-reprocess + endpoints: + - nhcx.endpoint.task-submit + concepts: + - nhcx.concept.reprocess-and-cancel + glossary: + - nhcx.glossary.crc +--- + +# Reprocess + +## In plain words + +A reprocess asks the payer to reconsider a claim it rejected or paid only in part. Your system sends a `Task` bundle with `Task.code` `reprocess` through [NHCX](../../shared/glossary/nhcx.md) on `/v1/task/submit`, with a supporting document, and the answer arrives on `/v1/task/on_submit`. Under [PMJAY](../glossary/pmjay.md), a reprocess can be raised once per claim and goes to the [CRC](../glossary/crc.md). + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say which path carries a reprocess and its answer. + +## When it goes wrong + +Raising a reprocess without a supporting document. The document is mandatory. diff --git a/catalogue/nhcx/glossary/sandbox-exit.md b/catalogue/nhcx/glossary/sandbox-exit.md new file mode 100644 index 000000000..7ca0a9a93 --- /dev/null +++ b/catalogue/nhcx/glossary/sandbox-exit.md @@ -0,0 +1,56 @@ +--- +id: nhcx.glossary.sandbox-exit +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Sandbox exit +summary: >- + The set of checks that moves you from the sandbox towards production access. +sources: +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use cases 1 to 13. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use cases 1 to 15. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. Functional Testing, steps 2 and 3. +verified: + status: unverified +related: + sandbox: + - nhcx.sandbox.sandbox-exit + tests: + - nhcx.test.provider-uc-01 + - nhcx.test.payer-uc-01 +--- + +# Sandbox exit + +## In plain words + +Sandbox exit is the set of checks that moves you from the [NHCX](../../shared/glossary/nhcx.md) sandbox towards production access. Providers demonstrate 13 use cases and payers 15, from fetching the participant list to checking status, each with its own pass condition. After [FHIR](../../shared/glossary/fhir.md) bundle validation and two demos, you receive confirmation of successful sandbox integration, and production access follows. See [sandbox exit](../sandbox/sandbox-exit.md). + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say what must be done before production access is granted. + +## When it goes wrong + +Treating one working sandbox call as sandbox exit. Exit needs every use case demonstrated and the bundles validated. diff --git a/catalogue/nhcx/glossary/sha.md b/catalogue/nhcx/glossary/sha.md new file mode 100644 index 000000000..64b52e559 --- /dev/null +++ b/catalogue/nhcx/glossary/sha.md @@ -0,0 +1,50 @@ +--- +id: nhcx.glossary.sha +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: SHA, State Health Agency +summary: >- + The state body that runs the government health scheme and reviews its claims. +sources: +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 10, 4.2 Claims Payment Process. +- file: catalogue/openapi/.raw/nhcx-site-2026-09-14/not-on-site/External_NHCX_Payer_Service_API_Workflow_Guide.docx + hash: sha256:1028d480d2fabe3204301f1c1b192a0077ddfa64f7f9084b01f73e004253fdd7 + fetched: '2026-09-05' + note: NHCX Payer Service API Workflow Guide for External Integrators, not listed on hcxsbx.abdm.gov.in and not named in the NHCX document sheet, received separately. CLAIM Step 5 and role table; get/user-role. +verified: + status: unverified +related: + glossary: + - nhcx.glossary.pmjay + - nhcx.glossary.tms + endpoints: + - nhcx.endpoint.payer-service-get-user-role +--- + +# SHA, State Health Agency + +## In plain words + +SHA stands for State Health Agency, the state body that runs [PMJAY](../glossary/pmjay.md) in its state. It is also called the State Health Authority. It reviews claims before the bank pays the hospital. In the PMJAY payer service, `SHA-Trust` is the fifth role in the claim chain. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say where the SHA sits in the order of PMJAY claim roles. + +## When it goes wrong + +Expecting the SHA to act on a claim before the earlier roles have. Read the current role with `get/user-role`. diff --git a/catalogue/nhcx/glossary/tms.md b/catalogue/nhcx/glossary/tms.md new file mode 100644 index 000000000..793a84752 --- /dev/null +++ b/catalogue/nhcx/glossary/tms.md @@ -0,0 +1,56 @@ +--- +id: nhcx.glossary.tms +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: TMS, Transaction Management System +summary: >- + The government scheme system in which preauthorisations and claims are decided. +sources: +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 9 section 3; page 11 section 5 TMS for Providers. +- url: https://hcxsbx.abdm.gov.in/images/be2e25fede3bf711f783.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/PMJAY Hospital Migration to HMIS via NHCX.docx + hash: sha256:cf5c9bf1c402b214f65bbb7bd0822f3a76d8ccda9b69c7bf77ba131befef3bc6 + fetched: '2026-09-14' + note: PMJAY Hospital Migration to HMIS via NHCX, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments, not named in the NHCX document sheet. sections 2.1, 3.5 and 3.6. +- url: https://hcxsbx.abdm.gov.in/images/b6bd99dab49a5e928ea3.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Overview.pdf + hash: sha256:c95469758a25cb8aca8c47757d8b18b4dedb8b4d42669663cff7343205f77fda + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Overview, row 27 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 2, Current Challenges. +verified: + status: unverified +related: + flows: + - nhcx.flow.pmjay-hospital-migration + glossary: + - nhcx.glossary.pmjay + - shared.glossary.hmis +--- + +# TMS, Transaction Management System + +## In plain words + +TMS stands for Transaction Management System, the [PMJAY](../glossary/pmjay.md) system in which preauthorisations and claims are decided. Hospitals without an integrated [HMIS](../../shared/glossary/hmis.md) enter cases by hand in the TMS 2.0 Provider portal. After a hospital is mapped to its [NHCX](../../shared/glossary/nhcx.md) participant code, new cases go from its HMIS through NHCX. TMS keeps only the cases already open there. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say what happens to cases opened in TMS before your hospital is mapped. + +## When it goes wrong + +Sending new cases through NHCX before the mapping is done. Until the mapping, the hospital works in TMS. diff --git a/catalogue/nhcx/glossary/tpa.md b/catalogue/nhcx/glossary/tpa.md new file mode 100644 index 000000000..1304e401b --- /dev/null +++ b/catalogue/nhcx/glossary/tpa.md @@ -0,0 +1,63 @@ +--- +id: nhcx.glossary.tpa +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: TPA, third party administrator +summary: >- + A company that processes and decides claims on behalf of an insurer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. FAQ 7, role codes. +- url: https://hcxsbx.abdm.gov.in/images/bc2efb078b98548f8e6b.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Sandbox.pdf + hash: sha256:cbd03baf428655f0305e2f60ca331f8b76700496b070c522cafcc95001710b3a + fetched: '2026-09-14' + note: Onboarding providers and payers in Sandbox, row 4 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, registration validation. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Policy Linking Process. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, item 7. +verified: + status: unverified +related: + concepts: + - nhcx.concept.policy-linking + - nhcx.concept.participant-roles + endpoints: + - nhcx.endpoint.participant-get-policies + glossary: + - nhcx.glossary.payer +--- + +# TPA, third party administrator + +## In plain words + +A third party administrator processes and adjudicates claims on behalf of an insurance company. On [NHCX](../../shared/glossary/nhcx.md) it registers with the role `AGENCY_TPA` (`10003`) and is validated against a trusted TPA registry. When an insurer works through a TPA, a policy names the insurer's code as `payerid` and the TPA's code as `processingid`. You meet it in the `processingid` returned by `/participant/get/policies`, which is where your requests go. + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say whose participant code goes in `x-hcx-recipient_code` for a policy under a TPA. + +## When it goes wrong + +Using the payer ID from `/participant/get/policies` as the receiver code. Use the processing ID. diff --git a/catalogue/nhcx/glossary/workflow-id.md b/catalogue/nhcx/glossary/workflow-id.md new file mode 100644 index 000000000..2190675fb --- /dev/null +++ b/catalogue/nhcx/glossary/workflow-id.md @@ -0,0 +1,54 @@ +--- +id: nhcx.glossary.workflow-id +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Workflow id +summary: >- + The code that names which business stage a message belongs to. +sources: +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Message Structure, x-hcx-workflow_id row. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 2.1 JWE Protected Header table. +verified: + status: unverified +related: + concepts: + - nhcx.concept.workflow-codes + - nhcx.concept.protocol-headers +--- + +# Workflow id + +## In plain words + +The workflow id, sent in `x-hcx-workflow_id`, names the business stage a message belongs to. For example, `12` is a new preauthorisation and `15` is a claim. Some ids cover several stages, told apart by `x-hcx-status`. Send it on every message to [NHCX](../../shared/glossary/nhcx.md): [PMJAY](../glossary/pmjay.md) requires it. See [workflow codes and the stage each one names](../concepts/workflow-codes.md). + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say what tells apart two messages that share a workflow id. + +## When it goes wrong + +Leaving it out because the header is optional for some payers. PMJAY submissions need it on every message. diff --git a/catalogue/nhcx/glossary/x509-certificate.md b/catalogue/nhcx/glossary/x509-certificate.md new file mode 100644 index 000000000..7b3527e28 --- /dev/null +++ b/catalogue/nhcx/glossary/x509-certificate.md @@ -0,0 +1,53 @@ +--- +id: nhcx.glossary.x509-certificate +type: glossary +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: X.509 certificate +summary: >- + The standard file that carries your public encryption key. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ec361a6c3e90e766d227.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Steps to generate encryption Certificate.pdf + hash: sha256:94605e935f05ebb49e24dee50787cb4f3f1c401983a9616a5aaabdbc302f664b + fetched: '2026-09-14' + note: Steps to generate encryption Certificate, row 20 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-3, Steps 1 to 4. +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use case 3, Get public Key. +verified: + status: unverified +related: + concepts: + - nhcx.concept.encryption-certificate + flows: + - nhcx.flow.generate-and-register-certificate + - nhcx.flow.rotate-certificate + endpoints: + - nhcx.endpoint.fetch-certs +--- + +# X.509 certificate + +## In plain words + +An X.509 certificate is the standard file that carries a public key and the identity it belongs to. On [NHCX](../../shared/glossary/nhcx.md) your encryption certificate is an X.509 certificate over a 2048-bit RSA key, registered Base64 encoded. Senders fetch it with `/fetch/certs` and seal payloads to you with the key inside. See [your encryption certificate and the recipient's](../concepts/encryption-certificate.md). + +## Before you start + +Nothing. A glossary entry assumes no prior reading. + +## What happens + +Nothing happens here. This entry defines a term, it does not describe a call. + +## How you know it worked + +You have understood this when you can say which key a sender uses to seal a message to you. + +## When it goes wrong + +Letting the registered certificate expire. One made with the published OpenSSL steps is valid for 365 days. See [rotate your encryption certificate](../flows/rotate-certificate.md). diff --git a/catalogue/nhcx/sandbox/callback-url-requirements.md b/catalogue/nhcx/sandbox/callback-url-requirements.md new file mode 100644 index 000000000..3da4fd596 --- /dev/null +++ b/catalogue/nhcx/sandbox/callback-url-requirements.md @@ -0,0 +1,143 @@ +--- +id: nhcx.sandbox.callback-url-requirements +type: sandbox +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Callback URL rules and the egress addresses to allow +summary: >- + What the web address that receives exchange messages must look like, the three + addresses the exchange sends from, and how fast your server must answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q14 and Q21 (Not getting call back). +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1. +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use cases 5, 7 and 9. +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Steps 1 and 3 payloads. +verified: + status: unverified +related: + callbacks: + - nhcx.callback.error + sandbox: + - nhcx.sandbox.prerequisites + - nhcx.sandbox.environments-and-base-urls + - shared.sandbox.callback-url + concepts: + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.four-message-legs + - nhcx.concept.participant-registry + flows: + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.report-a-processing-error + - nhcx.flow.sandbox-onboarding + endpoints: + - nhcx.endpoint.participant-update + - nhcx.endpoint.v2-participant-update + decisions: + - nhcx.decision.status-poll-or-wait + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.accepted-then-no-callback + glossary: + - shared.glossary.nhcx +--- + +# Callback URL rules and the egress addresses to allow + +## In plain words + +[NHCX](../../shared/glossary/nhcx.md) delivers every answer, query and notice to a web address you register, your callback URL. Nothing comes back in the response to your own call. + +The address must follow a few rules, your firewall must accept the exchange's addresses, and your server must answer each delivery quickly. + +## Before you start + +- You have a server you control, hosted in India, with a domain name and a valid HTTPS certificate. +- You know which callback paths your role receives. A provider receives paths such as `/v1/coverageeligibility/on_check`, `/v1/preauth/on_submit` and `/v1/claim/on_submit`. +- You can change firewall rules on that server. + +## What happens + +### The address rules + +- Use a domain name. An IP address is not accepted. +- Do not put a port number in the URL. +- Host the server in India. +- Register the base address as `endpoint_url` when you create or update your participant. Serve each callback path under it. + +### Allow the exchange's addresses + +Deliveries come from these three NAT addresses. Allow all three in your firewall, load balancer and any gateway in front of your service: + +- `3.109.99.210` +- `13.126.152.0` +- `13.200.129.223` + +### Answer every delivery + +Reply to each delivery with HTTP `202 Accepted` within 30 seconds. The body echoes the ids from the message: + +```json +{ + "timestamp": "", + "api_call_id": "", + "correlation_id": "", + "result": { + "sender_code": "", + "recipient_code": "", + "entity_type": "", + "protocol_status": "request.queued" + }, + "error": { + "code": "", + "message": "" + } +} +``` + +If the exchange gets no `202` in time, it treats the delivery as failed and retries. It resends a rejected or malformed exchange up to five times, then ends the request. After the fifth failure, it deletes the request for that correlation id. + +Process the message after you reply. If the message cannot be processed, report it on `/v1/error`. See [report a processing failure](../flows/report-a-processing-error.md). + +### Changing the address + +Update `endpoint_url` with the participant update call. See [onboard as a participant in the sandbox](../flows/sandbox-onboarding.md). + +## How you know it worked + +Send a coverage eligibility check to the [dummy payer](dummy-payer.md). Your server logs a `POST /v1/coverageeligibility/on_check` from one of the three NAT addresses. Your server answered it with `202`. + +A registered URL that has never received a delivery is not yet proven. + +## When it goes wrong + +**It never arrives.** Check in this order: + +1. The registered URL uses a domain name, with no IP address and no port. +2. The server is hosted in India. +3. All three NAT addresses are allowed in every firewall and gateway in front of the server. +4. The URL path, load balancer rules and service routing send the path to the right handler, on the right version. +5. Your server answers with `202` within 30 seconds. + +If all five hold, ask the exchange for the status of the request. See [poll with /v1/status or wait](../decisions/status-poll-or-wait.md) and [accepted with 202 and no callback](../troubleshooting/accepted-then-no-callback.md). + +**The same message arrives again.** Your earlier reply was late or not `202`, so the exchange retried. Make your handler safe to run twice for the same `x-hcx-api_call_id`. + +**The registration update rejects your URL.** See [your callback URL is rejected or never called](../troubleshooting/callback-url-rejected.md). diff --git a/catalogue/nhcx/sandbox/dummy-payer.md b/catalogue/nhcx/sandbox/dummy-payer.md new file mode 100644 index 000000000..c3e2df193 --- /dev/null +++ b/catalogue/nhcx/sandbox/dummy-payer.md @@ -0,0 +1,126 @@ +--- +id: nhcx.sandbox.dummy-payer +type: sandbox +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: The dummy payer and what it answers +summary: >- + The built-in test insurer in the sandbox, which use cases it answers, and the + two test calls that make it approve, reject, query or send a payment notice. +sources: +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-3. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q3 and Q16. +verified: + status: unverified +related: + sandbox: + - nhcx.sandbox.test-participants + - nhcx.sandbox.callback-url-requirements + - nhcx.sandbox.sandbox-exit + endpoints: + - nhcx.endpoint.dummy-payer-process-request + - nhcx.endpoint.dummy-payer-paymentnotice-init + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.claim-submit + - nhcx.endpoint.communication-on-request + - nhcx.endpoint.paymentnotice-on-request + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.claim-submit + - nhcx.flow.payment-notice + - nhcx.flow.insurance-plan-request + fhir: + - nhcx.fhir.insurance-plan-bundle + - nhcx.fhir.query-update + - nhcx.fhir.payment-notice + concepts: + - nhcx.concept.message-identifiers + glossary: + - nhcx.glossary.payer + - nhcx.glossary.correlation-id +--- + +# The dummy payer and what it answers + +## In plain words + +The dummy payer is a test insurer in the NHCX sandbox, participant code `1000003538@hcx`. Send your requests to it as you would to a real payer. + +For eligibility and insurance plan requests it answers on its own. For preauthorisations, claims and payment notices, you tell it what to do through two test calls. + +## Before you start + +- You have a sandbox session token. See [environments and base URLs](environments-and-base-urls.md). +- You fetched the dummy payer's certificate with `/fetch/certs` for `1000003538@hcx`. +- Your callback URL receives deliveries. See [callback URL rules](callback-url-requirements.md). + +## What happens + +### Use cases + +| Use case | What you do | +|---|---| +| Insurance plan | Send `/v1/insuranceplan/request`. Use provider id `32722` and policy number `100217` in the FHIR bundle. | +| Coverage eligibility | Send `/v1/coverageeligibility/check`. | +| Preauthorisation | Send `/v1/preauth/submit`, then call the action API. | +| Claim | Send `/v1/claim/submit`, then call the action API. | +| Communication | Submit, then call the action API with `Query`. | +| Payment notice | Call the payment notice trigger. | + +### The action API + +After a preauthorisation or claim submit, choose the payer's answer. Pass the correlation id of your submit: + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer/process/request' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "action": "", + "method": "", + "correlationId": "" + }' +``` + +- `Approve` or `Reject`: the final answer arrives on `/v1/preauth/on_submit` or `/v1/claim/on_submit`. +- `Query`: the dummy payer sends `/v1/communication/request` while the case stays with it. Answer with the supporting documents on `/v1/communication/on_request`. The final answer then arrives on the `on_submit` path. + +### The payment notice trigger + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer/paymentNotice/init' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{ + "providerId": "", + "claimNumber": "" + }' +``` + +`/v1/paymentnotice/request` then arrives at your endpoint. Acknowledge it on `/v1/paymentnotice/on_request`. See [the payment notice bundle](../fhir/payment-notice.md). + +These two test APIs take the token in the `bearer_auth` header, prefixed with `Bearer`. + +## How you know it worked + +- After `Approve`, `/v1/preauth/on_submit` or `/v1/claim/on_submit` arrives with a `ClaimResponse` for your claim number, reason code `approved`. +- After `Query`, `/v1/communication/request` arrives first, and the final `on_submit` arrives after your `/v1/communication/on_request`. +- After the payment notice trigger, `/v1/paymentnotice/request` arrives for the claim number you passed. + +## When it goes wrong + +- **Nothing arrives after your submit.** For preauthorisations and claims, the dummy payer waits for the action API. Call it with the correlation id of the submit. +- **The action API cannot find your case.** The `correlationId` is not the one you sent in the submit's protected header. Copy it from your request log. +- **The action API returns `401`.** The token expired or is missing its `Bearer ` prefix. Get a fresh token. +- **The trigger works, and still nothing reaches your server.** The problem is your callback path. See [callback URL rules](callback-url-requirements.md). diff --git a/catalogue/nhcx/sandbox/environments-and-base-urls.md b/catalogue/nhcx/sandbox/environments-and-base-urls.md new file mode 100644 index 000000000..270eea2fd --- /dev/null +++ b/catalogue/nhcx/sandbox/environments-and-base-urls.md @@ -0,0 +1,119 @@ +--- +id: nhcx.sandbox.environments-and-base-urls +type: sandbox +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: NHCX environments, hosts and base URLs +summary: >- + The two environments, the web portals, and the two base addresses every call is + built on, for testing and for live claims. +sources: +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 13 Important Links and URLs. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q2, Q17 and Q19. +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Step 1. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 2-3 curl examples. +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications.md + hash: sha256:56234dd8a55fe4eb9dd852779b22b522b04760c9bec5c263d5e9bc3ac2c6f167 + fetched: '2026-09-14' + note: Site page /domain-specifications, text as shown on the site. Guidelines for Participant Onboarding. +verified: + status: unverified +related: + sandbox: + - nhcx.sandbox.prerequisites + - nhcx.sandbox.going-live + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.callback-url-requirements + concepts: + - nhcx.concept.session-token + - nhcx.concept.participant-code + decisions: + - nhcx.decision.session-endpoint + endpoints: + - nhcx.endpoint.fetch-participants-list + - nhcx.endpoint.coverageeligibility-check + errors: + - nhcx.error.nhcx-401 + troubleshooting: + - nhcx.troubleshooting.everything-returns-401 + glossary: + - shared.glossary.nhcx + - shared.glossary.sandbox + - shared.glossary.abdm +--- + +# NHCX environments, hosts and base URLs + +## In plain words + +[NHCX](../../shared/glossary/nhcx.md) runs in two environments. The [sandbox](../../shared/glossary/sandbox.md) is for building and testing. Production carries live claims. + +Each environment has two API base addresses. Participant APIs manage your registration, certificates and policies. Use-case APIs carry eligibility checks, preauthorisations, claims and the other claim messages. + +## Before you start + +- You have credentials for the environment you are calling. See [what you need before you register](prerequisites.md). +- You know how to get a session token. See [the session token](../concepts/session-token.md) and [which session endpoint to call](../decisions/session-endpoint.md). + +## What happens + +### Addresses by environment + +| | Sandbox | Production | +|---|---|---| +| Portal | https://hcxsbx.abdm.gov.in/ | https://nhcx.abdm.gov.in/ | +| Integration documents | https://hcxsbx.abdm.gov.in/#/documents | https://nhcx.abdm.gov.in/#/documents | +| PMJAY hospital system documents | https://hcxsbx.abdm.gov.in/#/hmisdocuments | | +| Participant APIs (`participantBaseUrl`) | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` | `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice` | +| Use-case APIs (`useCaseBaseUrl`) | `https://apisbx.abdm.gov.in/hcx` | `https://apisprod.nha.gov.in/hcx` | +| Dummy payer test APIs | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer` | | +| [ABDM](../../shared/glossary/abdm.md) sandbox, for client credentials | https://sandbox.abdm.gov.in/sandbox/v3/ | | + +### Building a full URL + +Append the operation path to the base, with one slash between them: + +| Call | Full sandbox URL | +|---|---| +| Fetch participant list | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/fetch/participants/list` | +| Fetch certificates | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/fetch/certs` | +| Get policies | `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/get/policies` | +| Coverage eligibility check | `https://apisbx.abdm.gov.in/hcx/v1/coverageeligibility/check` | +| Payment notice acknowledgement | `https://apisbx.abdm.gov.in/hcx/v1/paymentnotice/on_request` | + +Every use-case path starts with `/v1/`. + +### Participant codes + +Treat a participant code as an opaque string, including the part after `@`. Sandbox examples carry `@sbx` or `@hcx`, and the sandbox dummy payer is `1000003538@hcx`. + +## How you know it worked + +You know you are on the right host when a call to `{participantBaseUrl}/fetch/participants/list` with a valid session token returns the participant list, not `401`. + +A use-case call to `{useCaseBaseUrl}/v1/...` with a valid sealed payload returns `202`. + +## When it goes wrong + +- **Every call returns `401`.** The token expired, or you sent a sandbox token to production. Get a fresh token for the same environment. See [every NHCX call returns 401](../troubleshooting/everything-returns-401.md) and [NHCX-401](../errors/nhcx-401.md). +- **The host does not resolve.** Check for a missing slash between `apisbx.abdm.gov.in` and `hcx`. +- **A use-case call returns not found.** The path is missing `/v1/`, or it is on the participant base instead of the use-case base. +- **Production calls fail after sandbox sign-off.** Production access starts when the provider role is assigned to your production client. Until then, wait for the sign-off communication. See [going live](going-live.md). diff --git a/catalogue/nhcx/sandbox/going-live.md b/catalogue/nhcx/sandbox/going-live.md new file mode 100644 index 000000000..08a1f3c50 --- /dev/null +++ b/catalogue/nhcx/sandbox/going-live.md @@ -0,0 +1,120 @@ +--- +id: nhcx.sandbox.going-live +type: sandbox +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Going live on NHCX production +summary: >- + What happens after sandbox sign-off: the production role, registering and confirming + your participant with a passcode, adding your certificate and callback address, + and the first live claims. +sources: +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Steps 1-4 and certificate update. +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications.md + hash: sha256:56234dd8a55fe4eb9dd852779b22b522b04760c9bec5c263d5e9bc3ac2c6f167 + fetched: '2026-09-14' + note: Site page /domain-specifications, text as shown on the site. Go Live Process. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item 5. +- url: https://hcxsbx.abdm.gov.in/images/b6bd99dab49a5e928ea3.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Overview.pdf + hash: sha256:c95469758a25cb8aca8c47757d8b18b4dedb8b4d42669663cff7343205f77fda + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Overview, row 27 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. integration roadmap. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths /v2/participant/create, /validate, /v2/participant/update, /update/validate, /v2/update/cert.' +verified: + status: unverified +related: + flows: + - nhcx.flow.production-onboarding + - nhcx.flow.rotate-certificate + endpoints: + - nhcx.endpoint.v2-participant-create + - nhcx.endpoint.validate + - nhcx.endpoint.v2-participant-update + - nhcx.endpoint.update-validate + - nhcx.endpoint.v2-update-cert + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.environments-and-base-urls + - nhcx.sandbox.support-contacts + - shared.sandbox.wasa + concepts: + - nhcx.concept.participant-roles + - nhcx.concept.encryption-certificate + glossary: + - shared.glossary.m1 + - shared.glossary.hfr + - shared.glossary.otp + - shared.glossary.nha +--- + +# Going live on NHCX production + +## In plain words + +Going live moves your system from the sandbox to production, where claims are real. After sign-off, [NHA](../../shared/glossary/nha.md) enables your production client for NHCX. You then register your participant in production and confirm each step with a passcode sent to your registered mobile number. + +## Before you start + +- You hold the sandbox sign-off email. See [the sandbox exit process](sandbox-exit.md). +- You hold production credentials for [Milestone 1](../../shared/glossary/m1.md). These follow Milestone 1 functional testing, the security audit ([WASA](../../shared/sandbox/wasa.md)) and the Health Tech Committee demo. +- The mobile number on your [HFR](../../shared/glossary/hfr.md) record, or your payer record, is one you can receive messages on. +- You have a production certificate and a production callback URL. + +## What happens + +### 1. Role assignment + +NHA assigns the provider role to your Milestone 1 production client ID. The same client ID gives you NHCX production access. Production participant APIs are under `https://apisprod.nha.gov.in/pmjay/hcx/participanthcxservice`. + +### 2. Create and confirm your participant + +| Step | Call | What you send | What happens | +|---|---|---|---| +| 1 | `POST /v2/participant/create` | `registrytype`, `registryid`, `role`, `endpoint_url`, `mobilenumber`, `email` | Returns `participantid` and `transactionid`; a passcode goes to the registered mobile | +| 2 | `GET /validate?transactionId=&passcode=` | | Confirms the participant | +| 3 | `POST /v2/participant/update` | `participantcode`, `encryptioncert` (base64 certificate), `endpointurl` | Returns a new `transactionid`; a new passcode goes to the mobile | +| 4 | `GET /update/validate?transactionId=&passcode=` | | Activates your certificate and callback URL | + +Each transaction id and passcode is valid for 24 hours. Each passcode belongs to one transaction id. + +A provider's registry id is its HFR ID. A payer passes its IRDAI registry id without leading zeros: pass `123`, not `0123`. + +See [onboard as a participant in production](../flows/production-onboarding.md) for each call. + +### 3. Rotate certificates later + +`POST /v2/update/cert` with `participantId` and a base64 `certificate` replaces your certificate without a passcode. See [rotate your encryption certificate](../flows/rotate-certificate.md). + +### 4. Go live + +- Keep production secrets safe. Report any compromise to the NHCX operators at once. +- Train your staff and plan the change before go-live. +- Start with a pilot on a small set of cases. + +## How you know it worked + +- Step 2 and step 4 both return success for their transaction ids. +- `/fetch/certs` on the production participant base returns your new certificate for your participant code. +- A first production request is accepted with `202`, and its callback arrives at your production `endpoint_url`. + +## When it goes wrong + +- **You are waiting for the production role.** Role assignment follows the sign-off email and has no fixed turnaround time. Until it is done, production calls fail. Ask about it through [where to get help](support-contacts.md), quoting your sign-off email. +- **The passcode expired, or you lost the transaction id.** Start that step again. Creating or updating again issues a new transaction id and passcode. +- **Creation fails the mobile number check.** The number must match the HFR record for providers, or the payer record for payers. +- **Production rejects your registry id.** Providers send the HFR ID. Payers drop leading zeros from the IRDAI id. diff --git a/catalogue/nhcx/sandbox/prerequisites.md b/catalogue/nhcx/sandbox/prerequisites.md new file mode 100644 index 000000000..660debcb2 --- /dev/null +++ b/catalogue/nhcx/sandbox/prerequisites.md @@ -0,0 +1,130 @@ +--- +id: nhcx.sandbox.prerequisites +type: sandbox +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: What you need before you register on the NHCX sandbox +summary: >- + The checklist to complete before your system can register on the claims exchange + sandbox: a facility registration, sandbox credentials, basic health ID features, + a role, a certificate and a callback address. +sources: +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications.md + hash: sha256:56234dd8a55fe4eb9dd852779b22b522b04760c9bec5c263d5e9bc3ac2c6f167 + fetched: '2026-09-14' + note: Site page /domain-specifications, text as shown on the site. Guidelines for Participant Onboarding; NHCX Sandbox Process. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. pages 3 and 5. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q6 to Q9. +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Step 1 validations. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Bridge Error. +verified: + status: unverified +related: + flows: + - nhcx.flow.sandbox-onboarding + - nhcx.flow.generate-and-register-certificate + sandbox: + - nhcx.sandbox.environments-and-base-urls + - nhcx.sandbox.callback-url-requirements + - nhcx.sandbox.support-contacts + - shared.sandbox.registration-and-credentials + concepts: + - nhcx.concept.participant-roles + - nhcx.concept.participant-registry + - nhcx.concept.encryption-certificate + glossary: + - shared.glossary.hfr + - shared.glossary.m1 + - shared.glossary.abha + - nhcx.glossary.irdai + - nhcx.glossary.tpa + - nhcx.glossary.payer + - nhcx.glossary.provider +--- + +# What you need before you register on the NHCX sandbox + +## In plain words + +Before your system can join the NHCX sandbox, your organisation and your software must exist in the right registries. Your software must also support basic [ABHA](../../shared/glossary/abha.md) features. + +Some steps need approval, and the reviews have no fixed turnaround time. Start them first. + +## Before you start + +Nothing. This page is the starting point. + +## What happens + +### 1. Register the organisation + +- A [provider](../glossary/provider.md) registers each facility in the Health Facility Registry ([HFR](../../shared/glossary/hfr.md)) at https://facility.abdm.gov.in/. The HFR ID becomes your registry id. Questions go to `facility@nha.gov.in`. +- A [payer](../glossary/payer.md) or [TPA](../glossary/tpa.md) uses the id issued by [IRDAI](../glossary/irdai.md) or the relevant authority. +- The mobile number on the HFR record must be current. Participant creation checks it and sends a passcode to it. + +### 2. Apply for ABDM sandbox credentials + +1. Apply at https://sandbox.abdm.gov.in/sandbox/v3/. +2. Select "Providers and Payer" and Milestone 1 as your intent. +3. Wait for review. On approval you receive a client ID and a client secret. + +The review is semi-manual. It filters out repeat requests from the same organisation, organisations missing from any registry, technology providers without a valid website, and spam. + +### 3. Build Milestone 1 + +Your software must support [Milestone 1](../../shared/glossary/m1.md). It creates an ABHA number through Aadhaar or a driving licence. It verifies an ABHA number or ABHA address at patient registration. + +### 4. Register on the NHCX sandbox + +Register at https://sandbox.abdm.gov.in/sandbox/v3/sandbox-registration with your ABDM sandbox client ID and secret. After you submit the form, NHCX sandbox roles are assigned to your client. + +### 5. Decide your role + +| Role | Code | Registry | Registry code | +|---|---|---|---| +| Provider | `10001` | HFR | `10001` | +| Payer | `10002` | Payer | `10004` | +| TPA | `10003` | Payer | `10004` | + +A wrong role and registry pair leads to access errors, rejected requests or misrouted messages. + +### 6. Prepare the technical pieces + +- An RSA key pair and an X.509 certificate. See [generate an encryption certificate](../flows/generate-and-register-certificate.md). +- A public HTTPS callback address. See [callback URL rules](callback-url-requirements.md). + +Then create your participant code. See [onboard as a participant in the sandbox](../flows/sandbox-onboarding.md). + +## How you know it worked + +You are ready to register when all of these hold: + +- Your facility has an HFR ID, or your payer holds its registry id. +- You hold an ABDM sandbox client ID and secret, and a session token call with them returns an access token. +- The NHCX sandbox registration form is submitted and roles are assigned to your client. +- You have a certificate and a reachable callback URL. + +## When it goes wrong + +- **You are waiting for sandbox approval.** The review has no fixed turnaround time, and nothing on your side speeds it up. Do not submit a second application: repeat requests are filtered out. Ask about a stalled request through the channels in [where to get help](support-contacts.md). +- **Participant creation fails the mobile number check.** The number must match the one on the HFR record for providers, or the payer record for payers. Update the registry record first. +- **"No user role found/associated for sender code."** Your client has no NHCX role yet. Confirm the sandbox registration form went through, then contact support. +- **Requests are rejected or misrouted after registration.** Check the role and registry codes you registered with. diff --git a/catalogue/nhcx/sandbox/sandbox-exit.md b/catalogue/nhcx/sandbox/sandbox-exit.md new file mode 100644 index 000000000..627eea7bc --- /dev/null +++ b/catalogue/nhcx/sandbox/sandbox-exit.md @@ -0,0 +1,134 @@ +--- +id: nhcx.sandbox.sandbox-exit +type: sandbox +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: The sandbox exit process and sign-off +summary: >- + The use cases you must show working, the bundle review, the two demonstrations + and the sign-off that let you move from testing to live claims. +sources: +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use cases 1-13. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use cases 1-15 and response validations. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8. +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications.md + hash: sha256:56234dd8a55fe4eb9dd852779b22b522b04760c9bec5c263d5e9bc3ac2c6f167 + fetched: '2026-09-14' + note: Site page /domain-specifications, text as shown on the site. NHCX Sandbox Process, Step 3. +- url: https://hcxsbx.abdm.gov.in/#/introduction-NHCX/guidlines-for-participant-onboarding + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/introduction-NHCX__guidlines-for-participant-onboarding.md + hash: sha256:58aaa762f2a04565e2060658b0eda95e3cac4cbb0819b6d865f04cf53066680d + fetched: '2026-09-14' + note: Site page /introduction-NHCX/guidlines-for-participant-onboarding, text as shown on the site. Step 3 Sandbox certification. +verified: + status: unverified +related: + sandbox: + - nhcx.sandbox.going-live + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.support-contacts + - nhcx.sandbox.test-participants + fhir: + - nhcx.fhir.validation + concepts: + - nhcx.concept.message-identifiers + - nhcx.concept.four-message-legs + tests: + - nhcx.test.provider-uc-01 + - nhcx.test.provider-uc-05 + - nhcx.test.provider-uc-07 + - nhcx.test.provider-uc-09 + - nhcx.test.provider-uc-13 + - nhcx.test.payer-uc-01 + - nhcx.test.payer-uc-07 + - nhcx.test.payer-uc-15 + glossary: + - nhcx.glossary.sandbox-exit + - shared.glossary.nrces + - nhcx.glossary.irdai + - shared.glossary.nha +--- + +# The sandbox exit process and sign-off + +## In plain words + +[Sandbox exit](../glossary/sandbox-exit.md) is how you prove your system works before it handles live claims. You run a fixed set of use cases for your role, send sample bundles for review, and show your system in two demonstrations. + +When all of that passes, [NHA](../../shared/glossary/nha.md) confirms your sandbox integration by email. That confirmation opens the way to production. + +## Before you start + +- You are a registered sandbox participant. See [what you need before you register](prerequisites.md). +- Your callback URL receives deliveries. See [callback URL rules](callback-url-requirements.md). +- You can run the provider use cases against the [dummy payer](dummy-payer.md). + +## What happens + +### 1. Run every use case for your role + +| # | Provider use case | You call | You receive | +|---|---|---|---| +| 1 | Get participant list | `/fetch/participants/list` | | +| 2 | Get policy | `/participant/get/policies` | | +| 3 | Get public key | `/fetch/certs` | | +| 4 | Get the auth token | `/get/session` | | +| 5 | Coverage eligibility | `/v1/coverageeligibility/check` | `/v1/coverageeligibility/on_check` | +| 6 | Insurance plan | `/v1/insuranceplan/request` | `/v1/insuranceplan/on_request` | +| 7 | Preauthorisation | `/v1/preauth/submit` | `/v1/preauth/on_submit` | +| 8 | Answer a communication request | `/v1/communication/on_request` | `/v1/communication/request` | +| 9 | Claim | `/v1/claim/submit` | `/v1/claim/on_submit` | +| 10 | Claim search | `/v1/search/submit` | `/v1/search/on_submit` | +| 11 | Acknowledge a payment notice | `/v1/paymentnotice/on_request` | `/v1/paymentnotice/request` | +| 12 | Reprocess or cancel | `/v1/task/submit` | `/v1/task/on_submit` | +| 13 | Status | `/v1/status` | `/v1/on_status` | + +A payer runs 15 use cases. Six are registry and utility calls: link, fetch and de-link ABHA policies, the participant list, the public key and the auth token. Six answer requests: eligibility, insurance plan, preauthorisation, claim, search and task. The last three raise a communication request, send a payment notice and check status. + +### 2. Meet the checks on every response + +- Validate each payload against the NRCeS profiles. +- Use different values for `x-hcx-api_call_id` and `x-hcx-correlation_id`. +- Set the response's correlation id to the API call id of the request you answer. +- Address the response to the sender of the request. +- Send an encrypted payload when you processed the request. Send a `ProtocolResponse` when you could not, for example when the payload was invalid or would not decrypt. + +### 3. Send bundles for review + +Email sample FHIR bundles to `hcx.integration@nha.gov.in`. The NRCeS team validates them. + +### 4. Demonstrate + +1. **Internal demo.** The NHA team checks your use cases. +2. **HTC demo.** A demonstration to the Health Tech Committee, run by the NRCeS, IRDAI, TCS and NHA teams. + +Request each demo by email to `hcx.integration@nha.gov.in`. Additional security testing, such as STQC or CERT-IN review, can be required. + +### 5. Receive sign-off + +After the demos and the bundle review pass, NHA sends a communication confirming your successful integration on the NHCX sandbox. + +## How you know it worked + +You hold the email from NHA confirming successful integration on the NHCX sandbox. Keep it: production access is set up after it. + +## When it goes wrong + +- **You are waiting for a demo date or for bundle review results.** Demos are scheduled after your email request, and the reviews have no fixed turnaround time. Keep testing the remaining use cases meanwhile. Follow up on the same email thread, not with a new request. +- **The bundle review sends back findings.** Fix each one, run the validator again, and resend. See [validating a bundle](../fhir/validation.md). +- **A use case fails in the demo.** Rerun it against the [dummy payer](dummy-payer.md) until the callback arrives and passes the response checks, then ask for a new slot. +- **A response is rejected for its ids.** The response's correlation id must equal the request's API call id, and its API call id must be new. diff --git a/catalogue/nhcx/sandbox/support-contacts.md b/catalogue/nhcx/sandbox/support-contacts.md new file mode 100644 index 000000000..3bb24289c --- /dev/null +++ b/catalogue/nhcx/sandbox/support-contacts.md @@ -0,0 +1,103 @@ +--- +id: nhcx.sandbox.support-contacts +type: sandbox +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Where to get help with NHCX +summary: >- + Which address to write to for each kind of question, what to put in the message, + and what to do while you wait for an answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8. +- url: https://hcxsbx.abdm.gov.in/#/domain-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/domain-specifications.md + hash: sha256:56234dd8a55fe4eb9dd852779b22b522b04760c9bec5c263d5e9bc3ac2c6f167 + fetched: '2026-09-14' + note: Site page /domain-specifications, text as shown on the site. Guidelines for Participant Onboarding. +- url: https://hcxsbx.abdm.gov.in/images/2b7fde4358fd0a4b2086.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Code Snippets references for payload preparation.pdf + hash: sha256:cea0cfbf5897e9642eaf9a515a941b0a1de39474ea39444c9e05abe21cd9ec73 + fetched: '2026-09-14' + note: NHCX Code Snippets references for payload preparation, row 13 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q17 and Q19. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. item 8. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Bridge Error, resolution steps. +verified: + status: unverified +related: + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.prerequisites + - nhcx.sandbox.environments-and-base-urls + fhir: + - nhcx.fhir.validation + concepts: + - nhcx.concept.message-identifiers + - nhcx.concept.error-code-spaces + glossary: + - shared.glossary.nha + - shared.glossary.nrces + - shared.glossary.hfr +--- + +# Where to get help with NHCX + +## In plain words + +Different teams handle different parts of NHCX integration. Writing to the right one, with the ids needed to trace your request, gets you an answer faster. + +## Before you start + +- Check the error atom for your code first. Most error codes name their fix. See [error code spaces](../concepts/error-code-spaces.md). +- Collect your participant code, the environment, the use case, and the correlation id and API call id of the failing request. + +## What happens + +### Who to write to + +| Topic | Address | +|---|---| +| FHIR bundle validation during sandbox exit, and requests for the internal and HTC demos | `hcx.integration@nha.gov.in` | +| How to build a FHIR bundle for a use case, and the [NRCeS](../../shared/glossary/nrces.md) specifications | `nrc-help@cdac.in` | +| ABDM Milestone 1 integration | `integration.support@nha.gov.in` | +| Facility registration in [HFR](../../shared/glossary/hfr.md) | `facility@nha.gov.in` | + +### Documents + +- Integration documents: https://hcxsbx.abdm.gov.in/#/documents +- PMJAY hospital system documents: https://hcxsbx.abdm.gov.in/#/hmisdocuments + +### What to put in the message + +- Your participant code and the environment, sandbox or production. +- The use case and the path you called. +- The `x-hcx-correlation_id`, `x-hcx-api_call_id` and `x-hcx-timestamp` of the request. +- The error code and message you received, exactly as returned. +- For a bundle question, the unencrypted bundle, with personal data replaced by test values. + +## How you know it worked + +You sent the question to the address for its topic, with the ids above, and the reply refers to your request by those ids. + +## When it goes wrong + +- **You are waiting on a reply.** Replies have no fixed turnaround time. Keep testing other use cases. Do not resend the failing request in a loop: after a failure the correlation id is inactive, so each retry needs a new one. +- **The reply asks for details you did not send.** Answer on the same thread with the ids and the exact error text. +- **An error's debugging steps end with "connect with NHCX support team".** Write to the address for the use case's topic, quoting the error code. diff --git a/catalogue/nhcx/sandbox/test-participants.md b/catalogue/nhcx/sandbox/test-participants.md new file mode 100644 index 000000000..8d8841ff0 --- /dev/null +++ b/catalogue/nhcx/sandbox/test-participants.md @@ -0,0 +1,104 @@ +--- +id: nhcx.sandbox.test-participants +type: sandbox +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Test participants available in the sandbox +summary: >- + Who your system can exchange messages with in the sandbox, starting with the built-in + test payer, and how to look up any other participant. +sources: +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Q16. +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Use cases 1 and 3. +- url: https://hcxsbx.abdm.gov.in/images/bc2efb078b98548f8e6b.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Sandbox.pdf + hash: sha256:cbd03baf428655f0305e2f60ca331f8b76700496b070c522cafcc95001710b3a + fetched: '2026-09-14' + note: Onboarding providers and payers in Sandbox, row 4 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. participant create and delete examples. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Quick Reference Card. +verified: + status: unverified +related: + sandbox: + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.environments-and-base-urls + - nhcx.sandbox.sandbox-exit + endpoints: + - nhcx.endpoint.fetch-participants-list + - nhcx.endpoint.fetch-certs + concepts: + - nhcx.concept.participant-code + - nhcx.concept.encryption-certificate + tests: + - nhcx.test.provider-uc-01 + - nhcx.test.provider-uc-03 + glossary: + - nhcx.glossary.participant-code + - nhcx.glossary.payer +--- + +# Test participants available in the sandbox + +## In plain words + +In the sandbox, a provider needs a [payer](../glossary/payer.md) to send requests to. NHCX provides one: the dummy payer, participant code `1000003538@hcx`. It answers the main use cases so you can test end to end. + +Every other sandbox participant can be looked up by role with the participant list API. + +## Before you start + +- You have your own [participant code](../glossary/participant-code.md). See [onboard as a participant in the sandbox](../flows/sandbox-onboarding.md). +- You can get a session token and call the participant APIs. See [environments and base URLs](environments-and-base-urls.md). + +## What happens + +### The dummy payer + +| Item | Value | +|---|---| +| Participant code | `1000003538@hcx` | +| Use cases it answers | Insurance plan, coverage eligibility, preauthorisation, claim, payment notice, communication | +| Provider id to put in an insurance plan request | `32722` | +| Policy number to put in an insurance plan request | `100217` | + +The provider id and policy number apply only to the dummy payer. See [the dummy payer](dummy-payer.md) for how to drive its answers. + +### Looking up other participants + +1. Call `/fetch/participants/list` on the participant base to list participants by role. See [fetch participants list](../endpoints/fetch-participants-list.md). +2. Call `/fetch/certs` with the participant's code to get the certificate you encrypt for. See [fetch certificates](../endpoints/fetch-certs.md). +3. Store the certificate locally instead of fetching it for every message. + +### Codes in the documentation + +Participant codes such as `100001@sbx`, `10001@sbx` and `1000002090@hcx` appear in examples. They show the format. Use the participant list to find a live counterpart. + +## How you know it worked + +- `/fetch/certs` for `1000003538@hcx` returns an `encryption_cert` value holding a PEM certificate. +- A coverage eligibility check sent to `1000003538@hcx` produces a `/v1/coverageeligibility/on_check` callback at your endpoint. + +## When it goes wrong + +- **You sent a request to a code copied from an example.** It may not be a live participant. Look the code up with the participant list first. +- **The dummy payer does not answer a preauthorisation or claim.** It waits for a trigger from you. See [the dummy payer](dummy-payer.md). +- **The dummy payer cannot decrypt your message.** You encrypted with the wrong certificate. Fetch its certificate again with `/fetch/certs` and resend with a new correlation id. +- **A payer you expect is missing from the list.** It has not registered in the sandbox yet. Test against the dummy payer meanwhile. diff --git a/catalogue/nhcx/tests/payer-uc-01.md b/catalogue/nhcx/tests/payer-uc-01.md new file mode 100644 index 000000000..799f1f889 --- /dev/null +++ b/catalogue/nhcx/tests/payer-uc-01.md @@ -0,0 +1,126 @@ +--- +id: nhcx.test.payer-uc-01 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Payer sandbox exit use case 1: Link ABHA with policy' +summary: >- + Prove that your insurance system can link a member's health account number to + the policies they bought, so hospitals can find them. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Table 1.1, Use case 1. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, Policy Linking Process. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, item 10. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./participant/link/abha/policy.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.participant-link-abha-policy + - nhcx.endpoint.participant-get-policies + flows: + - nhcx.flow.policy-link-and-delink + concepts: + - nhcx.concept.policy-linking + - nhcx.concept.participant-code + sandbox: + - nhcx.sandbox.sandbox-exit + tests: + - nhcx.test.payer-uc-02 + - nhcx.test.payer-uc-03 + - nhcx.test.payer-uc-06 + - nhcx.test.provider-uc-02 + errors: + - nhcx.error.nhcx-401 + glossary: + - nhcx.glossary.tpa + - nhcx.glossary.sandbox-exit +--- + +# Payer sandbox exit use case 1: Link ABHA with policy + +## In plain words + +Hospitals find a patient's policies by looking up the patient's [ABHA](../../shared/glossary/abha.md) number in the [NHCX](../../shared/glossary/nhcx.md) registry. The registry holds only the links payers write. This case proves your system writes the link when a member buys a policy. + +It is one of the fifteen payer use cases for [sandbox exit](../glossary/sandbox-exit.md). The exchange answers this call itself. + +## Before you start + +- Your payer participant exists in the sandbox registry with the payer role, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 6](payer-uc-06.md). +- The token comes from the client id used when your participant was created. Linking is refused under any other. +- You know your `payerid`. If a [TPA](../glossary/tpa.md) processes your claims, you also know the TPA's participant code, the `processingid`. +- You have a member's ABHA number, mobile number, member id and the products they hold. + +## What happens + +### Run the call + +1. Call [`POST /participant/link/abha/policy`](../endpoints/participant-link-abha-policy.md). + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/link/abha/policy' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{"requestid": "", "abhanumber": "", "mobilenumber": "", "memberid": "", "payerid": "", "processingid": "", "policies": [{"productid": "", "productname": ""}]}' +``` + +2. For an individual payer, `payerid` is your participant code. Under a TPA, `payerid` is the insurance company's code and `processingid` is the TPA's. +3. Confirm the link: run [use case 2](payer-uc-02.md) for the same ABHA number. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +``` + +## How you know it worked + +The pass criterion for this case: + +> Link ABHA Number to the Policy purchased by the individual at the time of policy creation at payer systems. + +What you observe: + +- You receive HTTP 200 for the link call. +- A `/participant/get/policies` lookup for the same ABHA number returns your payer. + +## When it goes wrong + +- **The link is refused although the token is valid.** The token came from another client id. Generate it with the client id used at participant creation, and confirm any mismatch by email. +- **Your insurance company moves to another TPA.** De-link the policies with [use case 3](payer-uc-03.md). Link them again with the new TPA's code as `processingid`. +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/payer-uc-02.md b/catalogue/nhcx/tests/payer-uc-02.md new file mode 100644 index 000000000..f77ccd98c --- /dev/null +++ b/catalogue/nhcx/tests/payer-uc-02.md @@ -0,0 +1,106 @@ +--- +id: nhcx.test.payer-uc-02 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Payer sandbox exit use case 2: Get policy' +summary: >- + Prove that your insurance system can read back the policies linked to a member, + exactly as hospitals will see them. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Table 1.2, Use case 2. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./participant/get/policies; schema identifiertype.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.participant-get-policies + flows: + - nhcx.flow.policy-link-and-delink + concepts: + - nhcx.concept.policy-linking + sandbox: + - nhcx.sandbox.sandbox-exit + tests: + - nhcx.test.payer-uc-01 + - nhcx.test.payer-uc-03 + - nhcx.test.provider-uc-02 + errors: + - nhcx.error.nhcx-401 +--- + +# Payer sandbox exit use case 2: Get policy + +## In plain words + +This case proves your system can look up the policies linked to a member's [ABHA](../../shared/glossary/abha.md) number or mobile number. It is the lookup hospitals run before they send you anything, so it shows your links as [NHCX](../../shared/glossary/nhcx.md) holds them. + +It is one of the fifteen payer use cases for [sandbox exit](../glossary/sandbox-exit.md). + +## Before you start + +- Your payer participant exists in the sandbox registry with the payer role, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 6](payer-uc-06.md). +- You linked a member's ABHA number to a policy in [use case 1](payer-uc-01.md). + +## What happens + +### Run the call + +1. Call [`POST /participant/get/policies`](../endpoints/participant-get-policies.md). + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/get/policies' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{"identifiertype": "AbhaNumber", "identifiervalue": ""}' +``` + +2. Compare the result with what you linked in [use case 1](payer-uc-01.md). + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +``` + +## How you know it worked + +The pass criterion for this case: + +> Get the list of policies for the beneficiary based on the mobile number or ABHA + +What you observe: + +- You receive HTTP 200. +- The result lists your payer for that ABHA number, matching the link you wrote. + +## When it goes wrong + +- **Nothing comes back.** The link in [use case 1](payer-uc-01.md) did not succeed, or used a different ABHA number. +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/payer-uc-03.md b/catalogue/nhcx/tests/payer-uc-03.md new file mode 100644 index 000000000..b4ea0d7f6 --- /dev/null +++ b/catalogue/nhcx/tests/payer-uc-03.md @@ -0,0 +1,113 @@ +--- +id: nhcx.test.payer-uc-03 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Payer sandbox exit use case 3: De-link ABHA from policy' +summary: >- + Prove that your insurance system can remove a policy from a member's health account + link when the policy ends or moves. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Table 1.3, Use case 3. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Validation for De-Linking. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./participant/delink/abha/policy.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.participant-delink-abha-policy + - nhcx.endpoint.participant-get-policies + flows: + - nhcx.flow.policy-link-and-delink + concepts: + - nhcx.concept.policy-linking + sandbox: + - nhcx.sandbox.sandbox-exit + tests: + - nhcx.test.payer-uc-01 + - nhcx.test.payer-uc-02 + errors: + - nhcx.error.nhcx-401 +--- + +# Payer sandbox exit use case 3: De-link ABHA from policy + +## In plain words + +Policies lapse and members change products. This case proves your system can remove a policy from a member's [ABHA](../../shared/glossary/abha.md) link in the [NHCX](../../shared/glossary/nhcx.md) registry. Once removed, hospitals no longer see it. + +It is one of the fifteen payer use cases for [sandbox exit](../glossary/sandbox-exit.md). + +## Before you start + +- Your payer participant exists in the sandbox registry with the payer role, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 6](payer-uc-06.md). +- You linked the policy in [use case 1](payer-uc-01.md), and you are the participant named in its `payerid` or `processingid`. +- Your token comes from that participant's client id. The exchange compares the two before it de-links. + +## What happens + +### Run the call + +1. Call [`POST /participant/delink/abha/policy`](../endpoints/participant-delink-abha-policy.md) with the products to remove. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/delink/abha/policy' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{"requestid": "", "payerid": "", "memberid": "", "policies": [{"productid": "", "productname": ""}]}' +``` + +2. Confirm the removal: run [use case 2](payer-uc-02.md) for the member's ABHA number. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +``` + +## How you know it worked + +The pass criterion for this case: + +> De-Link Policy Number from ABHA profile + +What you observe: + +- You receive HTTP 200 for the de-link call. +- A `/participant/get/policies` lookup no longer returns the removed product for that member. + +## When it goes wrong + +- **The de-link is refused with an error message.** The token's client id is not the one behind the `payerid` or `processingid` of the link. Use that participant's credentials. +- **`There is no policies with requested details`.** The product is not in the member's linked policies. Check `productid`, `productname` and `memberid` against the link. +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/payer-uc-04.md b/catalogue/nhcx/tests/payer-uc-04.md new file mode 100644 index 000000000..fbb37254a --- /dev/null +++ b/catalogue/nhcx/tests/payer-uc-04.md @@ -0,0 +1,111 @@ +--- +id: nhcx.test.payer-uc-04 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Payer sandbox exit use case 4: Get participant list' +summary: >- + Prove that your insurance system can fetch the registered participants of one + role from the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Table 1.4, Use case 4. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. components.schemas.ParticipantListResponse.' +- url: https://hcxsbx.abdm.gov.in/images/b885e59891fedc7e725c.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection.zip + hash: sha256:2d082f244ee41d137a62af82380dcd2d5db9ebbab66824fd54a23c506d4d9a7f + fetched: '2026-09-14' + note: AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection, row 16 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Participant List request. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Q2 and Q3; page 6, best practices. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.fetch-participants-list + concepts: + - nhcx.concept.participant-registry + - nhcx.concept.participant-code + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.environments-and-base-urls + tests: + - nhcx.test.payer-uc-06 + - nhcx.test.provider-uc-01 + errors: + - nhcx.error.nhcx-401 +--- + +# Payer sandbox exit use case 4: Get participant list + +## In plain words + +This case proves your system can ask [NHCX](../../shared/glossary/nhcx.md) for every participant registered under one role, such as the hospitals or other payers in the registry. + +It is one of the fifteen payer use cases for [sandbox exit](../glossary/sandbox-exit.md). The exchange answers this call itself. + +## Before you start + +- Your payer participant exists in the sandbox registry with the payer role, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 6](payer-uc-06.md). +- Your system can reach `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` over HTTPS. + +## What happens + +### Run the call + +1. Call [`POST /fetch/participants/list`](../endpoints/fetch-participants-list.md) with a role name and a registration date window. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/fetch/participants/list' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{"role": "", "fromdate": "", "todate": ""}' +``` + +2. Read the `participantdetails` array in the response. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +``` + +## How you know it worked + +The pass criterion for this case: + +> Retrieve the list of participants in the registry based on the role + +What you observe: + +- You receive HTTP 200 with a `participantdetails` array. +- Each entry carries `participantcode`, `participantname`, `address` and `state`. +- For `role` `PAYER` with a wide date window, the list includes your own participant. + +## When it goes wrong + +- **An empty array.** Widen the date window, and send values exactly as documented: trim spaces and match case. +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/payer-uc-05.md b/catalogue/nhcx/tests/payer-uc-05.md new file mode 100644 index 000000000..289d99fa1 --- /dev/null +++ b/catalogue/nhcx/tests/payer-uc-05.md @@ -0,0 +1,118 @@ +--- +id: nhcx.test.payer-uc-05 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Payer sandbox exit use case 5: Get public key' +summary: >- + Prove that your insurance system can fetch a hospital's public certificate, so + it can seal its answers for that hospital. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Table 1.5, Use case 5. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 3.3 Certificate Fetch; Section 2.4. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./fetch/certs.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.fetch-certs + concepts: + - nhcx.concept.encryption-certificate + - nhcx.concept.jwe-envelope + sandbox: + - nhcx.sandbox.sandbox-exit + tests: + - nhcx.test.payer-uc-06 + - nhcx.test.payer-uc-07 + - nhcx.test.provider-uc-03 + troubleshooting: + - nhcx.troubleshooting.recipient-cannot-decrypt + errors: + - nhcx.error.nhcx-401 + glossary: + - nhcx.glossary.jwe + - nhcx.glossary.x509-certificate +--- + +# Payer sandbox exit use case 5: Get public key + +## In plain words + +Every answer you send through [NHCX](../../shared/glossary/nhcx.md) is sealed for one hospital, as a [JWE](../glossary/jwe.md). You seal it with that hospital's public key. This case proves your system can fetch the key from the registry, given the hospital's [participant code](../glossary/participant-code.md). + +It is one of the fifteen payer use cases for [sandbox exit](../glossary/sandbox-exit.md). + +## Before you start + +- Your payer participant exists in the sandbox registry with the payer role, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 6](payer-uc-06.md). +- You know the participant code of a provider in the sandbox, from [use case 4](payer-uc-04.md) or a request it sent you. + +## What happens + +### Run the call + +1. Call [`POST /fetch/certs`](../endpoints/fetch-certs.md). `participantid` is mandatory. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/fetch/certs' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{"participantid": ""}' +``` + +2. Load the returned string as a public key. Try it as an [X.509 certificate](../glossary/x509-certificate.md) first, then as a SubjectPublicKeyInfo (SPKI) key. +3. Cache the key for 24 hours, keyed by participant code. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +``` + +## How you know it worked + +The pass criterion for this case: + +> Retrieve the public key of the receiver, that is to be used to encrypt the payload for the receiver. participant id must be mandatorily provided in the request. + +What you observe: + +- You receive HTTP 200 with a string holding a PEM X.509 certificate or an SPKI public key. +- Your system loads it as an RSA public key without error. +- An answer you seal with it is opened by the provider in [use case 7](payer-uc-07.md). + +## When it goes wrong + +- **The call is refused or the body is empty.** `participantid` is missing or misspelt. +- **The provider cannot open your answer.** The provider rotated its certificate. Fetch it again. See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/payer-uc-06.md b/catalogue/nhcx/tests/payer-uc-06.md new file mode 100644 index 000000000..a89bbd120 --- /dev/null +++ b/catalogue/nhcx/tests/payer-uc-06.md @@ -0,0 +1,114 @@ +--- +id: nhcx.test.payer-uc-06 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Payer sandbox exit use case 6: Get the auth token' +summary: >- + Prove that your insurance system can obtain, and keep fresh, the access token + every call to the claims exchange must carry. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, Tables 1.6 and 2.1, Use case 6. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 3.1 Token Request. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, items 6, 9 and 10. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Q3; page 5, Q20. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.get-session + - nhcx.endpoint.session-token + decisions: + - nhcx.decision.session-endpoint + concepts: + - nhcx.concept.session-token + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.prerequisites + tests: + - nhcx.test.payer-uc-04 + - nhcx.test.provider-uc-04 + troubleshooting: + - nhcx.troubleshooting.everything-returns-401 + errors: + - nhcx.error.nhcx-401 +--- + +# Payer sandbox exit use case 6: Get the auth token + +## In plain words + +Every call to [NHCX](../../shared/glossary/nhcx.md) carries an access token. This case proves your system can obtain one with its client credentials and replace it before it expires. + +It is one of the fifteen payer use cases for [sandbox exit](../glossary/sandbox-exit.md). + +## Before you start + +- You hold your sandbox client id and client secret. See [sandbox prerequisites](../sandbox/prerequisites.md). +- Use the client id your participant was created with. Policy linking accepts only that one. +- You know which token endpoint to call. See [which session token endpoint to call](../decisions/session-endpoint.md). + +## What happens + +### Run the call + +1. Call [`POST /get/session`](../endpoints/get-session.md) with a form-encoded body: + +```text +client_id=&client_secret=&grant_type=client_credentials +``` + +2. Read `access_token` and `expires_in` from the response. +3. Send the token on every later call as the header `bearer_auth: Bearer `. +4. Schedule a refresh before `expires_in` runs out. +5. Prove the token works: run [use case 4](payer-uc-04.md) with it. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +``` + +## How you know it worked + +The pass criterion for this case: + +> To generate the token to authenticate the API calls + +What you observe: + +- You receive HTTP 200 with `access_token`, `expires_in` and `token_type` `Bearer`. +- A call to `/fetch/participants/list` with the token returns HTTP 200, not 401. +- Your system replaces the token before it expires, with no manual step. + +## When it goes wrong + +- **The token call itself fails.** The client id or secret is wrong, or belongs to another environment. +- **Later calls return 401.** The token expired, lacks the `Bearer ` prefix, or went in the wrong header. See [NHCX-401](../errors/nhcx-401.md) and [every NHCX call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/tests/payer-uc-07.md b/catalogue/nhcx/tests/payer-uc-07.md new file mode 100644 index 000000000..1c26275ad --- /dev/null +++ b/catalogue/nhcx/tests/payer-uc-07.md @@ -0,0 +1,160 @@ +--- +id: nhcx.test.payer-uc-07 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Payer sandbox exit use case 7: Respond to the coverage eligibility request' +summary: >- + Prove that your insurance system can answer a hospital's cover check through the + claims exchange, correctly addressed and sealed. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Table 2.2, Use case 7. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet CoverageEligibility. +- url: https://hcxsbx.abdm.gov.in/coverageeligibilityhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/coverageeligibilityhcxservice.json + hash: sha256:1723a4020b1b33d0bc1d7175609f0d05e6a6a78e8b4c52041222396639ceb52c + fetched: '2026-09-14' + note: 'API specification: coverageeligibilityhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/coverageeligibility/on_check.' +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, Error scenario and Protocol Response. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14; page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + flows: + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + concepts: + - nhcx.concept.message-identifiers + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + errors: + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-401 + endpoints: + - nhcx.endpoint.coverageeligibility-on-check + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.coverageeligibility-check + - nhcx.callback.error + fhir: + - nhcx.fhir.coverage-eligibility-response + - nhcx.fhir.validation + tests: + - nhcx.test.payer-uc-05 + - nhcx.test.provider-uc-05 +--- + +# Payer sandbox exit use case 7: Respond to the coverage eligibility request + +## In plain words + +A hospital asks, through [NHCX](../../shared/glossary/nhcx.md), whether a member's cover is in force. This case proves your system answers with the member's eligibility and plan details. The answer must be sealed for that hospital and addressed back to its request. + +It is one of the fifteen payer use cases for [sandbox exit](../glossary/sandbox-exit.md). + +## Before you start + +- Your payer participant exists in the sandbox registry with the payer role, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 6](payer-uc-06.md). +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- You can decrypt with your own private key, and you hold the provider's public certificate from [use case 5](payer-uc-05.md). +- A sandbox provider participant sends your payer a `POST /v1/coverageeligibility/check` request. You need a provider partner, or a provider participant of your own, to send it. + +## What happens + +### Receive the request + +1. Wait for `POST /v1/coverageeligibility/check` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body from [receive a sealed callback](../flows/receive-a-sealed-callback.md). +3. Decrypt the payload with your private key. Validate the CoverageEligibilityRequest bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles. + +### Send your answer + +1. If you processed the request, build a CoverageEligibilityResponse bundle with the member's eligibility and plan details. See [the coverage eligibility response bundle](../fhir/coverage-eligibility-response.md). Validate it against the NRCeS profiles ([validating a bundle](../fhir/validation.md)). Seal it as a [JWE](../glossary/jwe.md) with the provider's public key. +2. If you could not decrypt or validate the request, prepare a `ProtocolResponse` instead. It carries the protocol headers in clear, `x-hcx-status` `response.error`, and `x-hcx-error_details` naming the fault. +3. Set the protected headers. Use a new `x-hcx-api_call_id`, different from the correlation id. Set `x-hcx-correlation_id` to the `x-hcx-api_call_id` of the request you answer. Set `x-hcx-recipient_code` to that request's `x-hcx-sender_code`, and `x-hcx-sender_code` to your participant code. Set `x-hcx-status` to `response.complete`. +4. Send the answer to `/v1/coverageeligibility/on_check`. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/coverageeligibility/on_check' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"type": "JWEPayload", "payload": ""}' +``` + +5. NHCX answers with HTTP 202. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> Payer to respond with API payload which should contain the eligibility and plan details of the beneficiary for whom the details are requested for. +> +> 1. Payload should be validated against the profiles published by NRCES. +> 2. Api caller ID and Correlation ID should be different. +> 3. Correlation ID should be the API caller ID of the request that you are responding to. +> 4. Receiver code should be the same as Sender ID of the request that Payer system is responding to. + +What you observe: + +- NHCX answers your `POST /v1/coverageeligibility/on_check` with HTTP 202. +- Your `x-hcx-api_call_id` differs from your `x-hcx-correlation_id`. +- Your `x-hcx-correlation_id` equals the `x-hcx-api_call_id` of the provider's request. +- Your `x-hcx-recipient_code` equals the `x-hcx-sender_code` of the provider's request. +- The sealed payload is a CoverageEligibilityResponse bundle, and it validates against the NRCeS profiles. +- No `/v1/error` report arrives at your endpoint for your answer. + +## When it goes wrong + +- **No request reaches your endpoint.** Check it against the [callback URL requirements](../sandbox/callback-url-requirements.md). Confirm the provider addresses your participant code, or your [TPA](../glossary/tpa.md)'s processing ID. +- **The provider cannot open your answer.** You sealed it with a stale or wrong certificate. Fetch the provider's certificate again with [use case 5](payer-uc-05.md). See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **[NHCX-1010](../errors/nhcx-1010.md), no data for the correlation id.** Your message's `x-hcx-correlation_id` is not the `x-hcx-api_call_id` of the request you answer. +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is wrong. Copy it from the `x-hcx-sender_code` of the request you answer. +- **[NHCX-1011](../errors/nhcx-1011.md), invalid status.** `x-hcx-status` holds a value the exchange does not accept for this message. Use `response.complete` on an answer and `request.initiated` on a request. +- **A `/v1/error` report arrives at your endpoint.** The recipient refused your message after the exchange accepted it. Read the details as [receiving /v1/error](../callbacks/error.md) describes. +- **The exchange keeps redelivering the same message.** Your endpoint did not return HTTP 202 with the acceptance body within 30 seconds. The exchange retries five times, then deletes the request. See [retries and expiry](../concepts/retries-and-expiry.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/payer-uc-08.md b/catalogue/nhcx/tests/payer-uc-08.md new file mode 100644 index 000000000..91528cd20 --- /dev/null +++ b/catalogue/nhcx/tests/payer-uc-08.md @@ -0,0 +1,161 @@ +--- +id: nhcx.test.payer-uc-08 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Payer sandbox exit use case 8: Respond to the insurance plan request' +summary: >- + Prove that your insurance system can answer a hospital's request for a policy's + plan through the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 2-3, Tables 2.3 and 3.1, Use case 8. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Insurance Plan. +- url: https://hcxsbx.abdm.gov.in/insuranceplanhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/insuranceplanhcxservice.json + hash: sha256:03665c6e6a5c8d86e3d621ab577dd683cf13c155d5b9529f5be6ca70fef13dee + fetched: '2026-09-14' + note: 'API specification: insuranceplanhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/insuranceplan/on_request.' +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, Error scenario and Protocol Response. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14; page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + flows: + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + concepts: + - nhcx.concept.message-identifiers + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + - nhcx.concept.insurance-plan + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + errors: + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-401 + endpoints: + - nhcx.endpoint.insuranceplan-on-request + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.insuranceplan-request + - nhcx.callback.error + fhir: + - nhcx.fhir.insurance-plan-bundle + - nhcx.fhir.validation + tests: + - nhcx.test.payer-uc-05 + - nhcx.test.provider-uc-06 +--- + +# Payer sandbox exit use case 8: Respond to the insurance plan request + +## In plain words + +A hospital asks, through [NHCX](../../shared/glossary/nhcx.md), for the plan behind a policy: what it covers, on what conditions, with which documents. This case proves your system answers with the plan, sealed for that hospital and addressed back to its request. + +It is one of the fifteen payer use cases for [sandbox exit](../glossary/sandbox-exit.md). + +## Before you start + +- Your payer participant exists in the sandbox registry with the payer role, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 6](payer-uc-06.md). +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- You can decrypt with your own private key, and you hold the provider's public certificate from [use case 5](payer-uc-05.md). +- A sandbox provider participant sends your payer a `POST /v1/insuranceplan/request` request. You need a provider partner, or a provider participant of your own, to send it. + +## What happens + +### Receive the request + +1. Wait for `POST /v1/insuranceplan/request` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body from [receive a sealed callback](../flows/receive-a-sealed-callback.md). +3. Decrypt the payload with your private key. Validate the Task bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles. + +### Send your answer + +1. If you processed the request, build a bundle holding the InsurancePlan resources for the policy. See [insurance plan bundles](../fhir/insurance-plan-bundle.md). Validate it against the NRCeS profiles ([validating a bundle](../fhir/validation.md)). Seal it as a [JWE](../glossary/jwe.md) with the provider's public key. +2. If you could not decrypt or validate the request, prepare a `ProtocolResponse` instead. It carries the protocol headers in clear, `x-hcx-status` `response.error`, and `x-hcx-error_details` naming the fault. +3. Set the protected headers. Use a new `x-hcx-api_call_id`, different from the correlation id. Set `x-hcx-correlation_id` to the `x-hcx-api_call_id` of the request you answer. Set `x-hcx-recipient_code` to that request's `x-hcx-sender_code`, and `x-hcx-sender_code` to your participant code. Set `x-hcx-status` to `response.complete`. +4. Send the answer to `/v1/insuranceplan/on_request`. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/insuranceplan/on_request' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"type": "JWEPayload", "payload": ""}' +``` + +5. NHCX answers with HTTP 202. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> Respond with the insurance plan details request via NHCX +> +> 1. Payload should be validated against the profiles published by NRCES. +> 2. Api caller ID and Correlation ID should be different. +> 3. Correlation ID should be the API caller ID of the request that you are responding to. +> 4. Receiver code should be the same as Sender ID of the request that Payer system is responding to. + +What you observe: + +- NHCX answers your `POST /v1/insuranceplan/on_request` with HTTP 202. +- Your `x-hcx-api_call_id` differs from your `x-hcx-correlation_id`. +- Your `x-hcx-correlation_id` equals the `x-hcx-api_call_id` of the provider's request. +- Your `x-hcx-recipient_code` equals the `x-hcx-sender_code` of the provider's request. +- The sealed payload is a bundle holding InsurancePlan resources, and it validates against the NRCeS profiles. +- No `/v1/error` report arrives at your endpoint for your answer. + +## When it goes wrong + +- **No request reaches your endpoint.** Check it against the [callback URL requirements](../sandbox/callback-url-requirements.md). Confirm the provider addresses your participant code, or your [TPA](../glossary/tpa.md)'s processing ID. +- **The provider cannot open your answer.** You sealed it with a stale or wrong certificate. Fetch the provider's certificate again with [use case 5](payer-uc-05.md). See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **[NHCX-1010](../errors/nhcx-1010.md), no data for the correlation id.** Your message's `x-hcx-correlation_id` is not the `x-hcx-api_call_id` of the request you answer. +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is wrong. Copy it from the `x-hcx-sender_code` of the request you answer. +- **[NHCX-1011](../errors/nhcx-1011.md), invalid status.** `x-hcx-status` holds a value the exchange does not accept for this message. Use `response.complete` on an answer and `request.initiated` on a request. +- **A `/v1/error` report arrives at your endpoint.** The recipient refused your message after the exchange accepted it. Read the details as [receiving /v1/error](../callbacks/error.md) describes. +- **The exchange keeps redelivering the same message.** Your endpoint did not return HTTP 202 with the acceptance body within 30 seconds. The exchange retries five times, then deletes the request. See [retries and expiry](../concepts/retries-and-expiry.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/payer-uc-09.md b/catalogue/nhcx/tests/payer-uc-09.md new file mode 100644 index 000000000..f7ee39458 --- /dev/null +++ b/catalogue/nhcx/tests/payer-uc-09.md @@ -0,0 +1,162 @@ +--- +id: nhcx.test.payer-uc-09 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Payer sandbox exit use case 9: Respond to the preauthorization submitted' +summary: >- + Prove that your insurance system can send its preauthorisation decision back to + the hospital through the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 3-4, Tables 3.2 and 4.1, Use case 9. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Preauth. +- url: https://hcxsbx.abdm.gov.in/preauthhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/preauthhcxservice.json + hash: sha256:2e8c594c51d9640ae4a576be34a5d190614918d1e7697d6718bc91c31fa66948 + fetched: '2026-09-14' + note: 'API specification: preauthhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/preauth/on_submit.' +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, Error scenario and Protocol Response. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14; page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + flows: + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + concepts: + - nhcx.concept.message-identifiers + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + errors: + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-401 + endpoints: + - nhcx.endpoint.preauth-on-submit + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.preauth-submit + - nhcx.callback.error + fhir: + - nhcx.fhir.preauth-response + - nhcx.fhir.validation + tests: + - nhcx.test.payer-uc-05 + - nhcx.test.provider-uc-07 + glossary: + - nhcx.glossary.adjudication +--- + +# Payer sandbox exit use case 9: Respond to the preauthorization submitted + +## In plain words + +A hospital submits a [preauthorisation](../glossary/preauthorisation.md) through [NHCX](../../shared/glossary/nhcx.md). This case proves your system sends back the adjudicated decision, sealed for that hospital and addressed back to its request. + +It is one of the fifteen payer use cases for [sandbox exit](../glossary/sandbox-exit.md). + +## Before you start + +- Your payer participant exists in the sandbox registry with the payer role, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 6](payer-uc-06.md). +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- You can decrypt with your own private key, and you hold the provider's public certificate from [use case 5](payer-uc-05.md). +- A sandbox provider participant sends your payer a `POST /v1/preauth/submit` request. You need a provider partner, or a provider participant of your own, to send it. + +## What happens + +### Receive the request + +1. Wait for `POST /v1/preauth/submit` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body from [receive a sealed callback](../flows/receive-a-sealed-callback.md). +3. Decrypt the payload with your private key. Validate the Claim bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles. + +### Send your answer + +1. If you processed the request, build a ClaimResponse bundle with the adjudicated preauthorisation. See [the preauthorisation response bundle](../fhir/preauth-response.md). Validate it against the NRCeS profiles ([validating a bundle](../fhir/validation.md)). Seal it as a [JWE](../glossary/jwe.md) with the provider's public key. +2. If you could not decrypt or validate the request, prepare a `ProtocolResponse` instead. It carries the protocol headers in clear, `x-hcx-status` `response.error`, and `x-hcx-error_details` naming the fault. +3. Set the protected headers. Use a new `x-hcx-api_call_id`, different from the correlation id. Set `x-hcx-correlation_id` to the `x-hcx-api_call_id` of the request you answer. Set `x-hcx-recipient_code` to that request's `x-hcx-sender_code`, and `x-hcx-sender_code` to your participant code. Set `x-hcx-status` to `response.complete`. +4. Send the answer to `/v1/preauth/on_submit`. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/preauth/on_submit' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"type": "JWEPayload", "payload": ""}' +``` + +5. NHCX answers with HTTP 202. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> Payer to respond with API payload which should contain the adjudicated Preauthorization details. +> +> 1. The payload should be validated against the profiles published by NRCES. +> 2. Api caller ID and Correlation ID should be different. +> 3. Correlation ID should be the API caller ID of the request that you are responding to. +> 4. Receiver code should be the same as Sender ID of the request that Payer system is responding to. + +What you observe: + +- NHCX answers your `POST /v1/preauth/on_submit` with HTTP 202. +- Your `x-hcx-api_call_id` differs from your `x-hcx-correlation_id`. +- Your `x-hcx-correlation_id` equals the `x-hcx-api_call_id` of the provider's request. +- Your `x-hcx-recipient_code` equals the `x-hcx-sender_code` of the provider's request. +- The sealed payload is a ClaimResponse bundle, and it validates against the NRCeS profiles. +- No `/v1/error` report arrives at your endpoint for your answer. + +## When it goes wrong + +- **No request reaches your endpoint.** Check it against the [callback URL requirements](../sandbox/callback-url-requirements.md). Confirm the provider addresses your participant code, or your [TPA](../glossary/tpa.md)'s processing ID. +- **The provider cannot open your answer.** You sealed it with a stale or wrong certificate. Fetch the provider's certificate again with [use case 5](payer-uc-05.md). See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **[NHCX-1010](../errors/nhcx-1010.md), no data for the correlation id.** Your message's `x-hcx-correlation_id` is not the `x-hcx-api_call_id` of the request you answer. +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is wrong. Copy it from the `x-hcx-sender_code` of the request you answer. +- **[NHCX-1011](../errors/nhcx-1011.md), invalid status.** `x-hcx-status` holds a value the exchange does not accept for this message. Use `response.complete` on an answer and `request.initiated` on a request. +- **A `/v1/error` report arrives at your endpoint.** The recipient refused your message after the exchange accepted it. Read the details as [receiving /v1/error](../callbacks/error.md) describes. +- **The exchange keeps redelivering the same message.** Your endpoint did not return HTTP 202 with the acceptance body within 30 seconds. The exchange retries five times, then deletes the request. See [retries and expiry](../concepts/retries-and-expiry.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/payer-uc-10.md b/catalogue/nhcx/tests/payer-uc-10.md new file mode 100644 index 000000000..a6c8bb199 --- /dev/null +++ b/catalogue/nhcx/tests/payer-uc-10.md @@ -0,0 +1,160 @@ +--- +id: nhcx.test.payer-uc-10 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Payer sandbox exit use case 10: Raise communication request' +summary: >- + Prove that your insurance system can ask a hospital for more documents during + a claim cycle, and receive the documents back. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Table 4.2, Use case 10. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Communication (additional docs). +- url: https://hcxsbx.abdm.gov.in/communicationhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/communicationhcxservice.json + hash: sha256:0ad58a98851158057d38d42a8327349548644c1b2f1a33b4f94acb4c1840a8a4 + fetched: '2026-09-14' + note: 'API specification: communicationhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/communication/request.' +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Error scenario. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14; page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + flows: + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.send-a-sealed-request + - nhcx.flow.preauth-query-response + - nhcx.flow.claim-query-response + concepts: + - nhcx.concept.message-identifiers + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + - nhcx.concept.queries-and-communication + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + errors: + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-401 + endpoints: + - nhcx.endpoint.communication-request + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.communication-on-request + - nhcx.callback.error + fhir: + - nhcx.fhir.task + - nhcx.fhir.validation + tests: + - nhcx.test.payer-uc-05 + - nhcx.test.payer-uc-15 + - nhcx.test.provider-uc-08 + glossary: + - nhcx.glossary.communication-request +--- + +# Payer sandbox exit use case 10: Raise communication request + +## In plain words + +During a claim cycle your system may need more documents from the hospital before it decides. This case proves your system sends a [communication request](../glossary/communication-request.md) through [NHCX](../../shared/glossary/nhcx.md). The hospital's documents come back later on your endpoint. + +Here your system starts the exchange. It is one of the fifteen payer use cases for [sandbox exit](../glossary/sandbox-exit.md). + +## Before you start + +- Your payer participant exists in the sandbox registry with the payer role, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 6](payer-uc-06.md). +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- You can decrypt with your own private key, and you hold the provider's public certificate from [use case 5](payer-uc-05.md). +- A preauthorisation or claim from a sandbox provider is with you for adjudication. You need a provider partner, or a provider participant of your own, to send it. + +## What happens + +### Send the communication request + +1. Build a Task bundle with a CommunicationRequest as a bundle component. Name the documents you need. Validate it against the [NRCeS](../../shared/glossary/nrces.md) profiles ([validating a bundle](../fhir/validation.md)). +2. Seal it as a [JWE](../glossary/jwe.md) with the provider's public key. +3. Set the protected headers. `x-hcx-sender_code` is your participant code and `x-hcx-recipient_code` is the provider's. `x-hcx-status` is `request.initiated`. Use a new `x-hcx-api_call_id`. +4. Send it. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/communication/request' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +5. NHCX answers with HTTP 202. + +### Receive the documents + +1. Wait for `POST /v1/communication/on_request` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body. +3. Decrypt it. The Task bundle carries a Communication with the documents attached. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> Raise a communication request to Provider via HCX in a claim cycle for any additional documents required from provider. +> +> API should be called by payer systems to get the additional documents from the privider. Payload will be prepared as TaskBundle having CommunicationRequest as bundle component. +> +> Payload should be validated against the profiles published by NRCES. + +What you observe: + +- NHCX answers your `POST /v1/communication/request` with HTTP 202. +- You receive `POST /v1/communication/on_request`, whose `x-hcx-correlation_id` equals your `x-hcx-api_call_id`. +- The decrypted Task bundle carries a Communication with the documents you asked for. + +## When it goes wrong + +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is not a registered provider code. +- **The provider cannot open your answer.** You sealed it with a stale or wrong certificate. Fetch the provider's certificate again with [use case 5](payer-uc-05.md). See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **The provider's answer never arrives.** Check your registered endpoint against the [callback URL requirements](../sandbox/callback-url-requirements.md). Then ask where your request stands with [use case 15](payer-uc-15.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. +- **The exchange keeps redelivering the same message.** Your endpoint did not return HTTP 202 with the acceptance body within 30 seconds. The exchange retries five times, then deletes the request. See [retries and expiry](../concepts/retries-and-expiry.md). diff --git a/catalogue/nhcx/tests/payer-uc-11.md b/catalogue/nhcx/tests/payer-uc-11.md new file mode 100644 index 000000000..393d86400 --- /dev/null +++ b/catalogue/nhcx/tests/payer-uc-11.md @@ -0,0 +1,169 @@ +--- +id: nhcx.test.payer-uc-11 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Payer sandbox exit use case 11: Respond to the claim submitted' +summary: >- + Prove that your insurance system can send its claim decision back to the hospital + through the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-5, Tables 4.3 and 5.1, Use case 11. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Status Description (Protected Header). +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Claim. +- url: https://hcxsbx.abdm.gov.in/claimhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/claimhcxservice.json + hash: sha256:488eea449c6ee45dc324f4f7c095a862c7d50d0e238075846122b51b2bab4878 + fetched: '2026-09-14' + note: 'API specification: claimhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/claim/on_submit.' +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, Error scenario and Protocol Response. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14; page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + flows: + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + concepts: + - nhcx.concept.message-identifiers + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + - nhcx.concept.status-lifecycle + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + errors: + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-401 + endpoints: + - nhcx.endpoint.claim-on-submit + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.claim-submit + - nhcx.callback.error + fhir: + - nhcx.fhir.claim-response + - nhcx.fhir.validation + tests: + - nhcx.test.payer-uc-05 + - nhcx.test.provider-uc-09 + glossary: + - nhcx.glossary.adjudication +--- + +# Payer sandbox exit use case 11: Respond to the claim submitted + +## In plain words + +A hospital submits a [claim](../glossary/claim.md) through [NHCX](../../shared/glossary/nhcx.md). This case proves your system sends back the adjudicated claim, sealed for that hospital and addressed back to its request. + +It is one of the fifteen payer use cases for [sandbox exit](../glossary/sandbox-exit.md). + +## Before you start + +- Your payer participant exists in the sandbox registry with the payer role, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 6](payer-uc-06.md). +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- You can decrypt with your own private key, and you hold the provider's public certificate from [use case 5](payer-uc-05.md). +- A sandbox provider participant sends your payer a `POST /v1/claim/submit` request. You need a provider partner, or a provider participant of your own, to send it. + +## What happens + +### Receive the request + +1. Wait for `POST /v1/claim/submit` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body from [receive a sealed callback](../flows/receive-a-sealed-callback.md). +3. Decrypt the payload with your private key. Validate the Claim bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles. + +### Send your answer + +1. If you processed the request, build a ClaimResponse bundle with the adjudicated claim. See [the claim response bundle](../fhir/claim-response.md). Validate it against the NRCeS profiles ([validating a bundle](../fhir/validation.md)). Seal it as a [JWE](../glossary/jwe.md) with the provider's public key. +2. If you could not decrypt or validate the request, prepare a `ProtocolResponse` instead. It carries the protocol headers in clear, `x-hcx-status` `response.error`, and `x-hcx-error_details` naming the fault. +3. Set the protected headers. Use a new `x-hcx-api_call_id`, different from the correlation id. Set `x-hcx-correlation_id` to the `x-hcx-api_call_id` of the request you answer. Set `x-hcx-recipient_code` to that request's `x-hcx-sender_code`, and `x-hcx-sender_code` to your participant code. Set `x-hcx-status` to `response.partial` while you acknowledge or answer in part, and `response.complete` for the final decision. +4. Send the answer to `/v1/claim/on_submit`. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/claim/on_submit' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"type": "JWEPayload", "payload": ""}' +``` + +5. NHCX answers with HTTP 202. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> Payer to respond with API payload which should contain the adjudicated Claim details. +> +> 1. The payload should be validated against the profiles published by NRCES. +> 2. Api caller ID and Correlation ID should be different. +> 3. Correlation ID should be the API caller ID of the request that you are responding to. +> 4. Receiver code should be the same as Sender ID of the request that Payer system is responding to. + +What you observe: + +- NHCX answers your `POST /v1/claim/on_submit` with HTTP 202. +- Your `x-hcx-api_call_id` differs from your `x-hcx-correlation_id`. +- Your `x-hcx-correlation_id` equals the `x-hcx-api_call_id` of the provider's request. +- Your `x-hcx-recipient_code` equals the `x-hcx-sender_code` of the provider's request. +- The sealed payload is a ClaimResponse bundle, and it validates against the NRCeS profiles. +- No `/v1/error` report arrives at your endpoint for your answer. +- `x-hcx-status` is `response.partial` on an interim answer and `response.complete` on the final one. + +## When it goes wrong + +- **No request reaches your endpoint.** Check it against the [callback URL requirements](../sandbox/callback-url-requirements.md). Confirm the provider addresses your participant code, or your [TPA](../glossary/tpa.md)'s processing ID. +- **The provider cannot open your answer.** You sealed it with a stale or wrong certificate. Fetch the provider's certificate again with [use case 5](payer-uc-05.md). See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **[NHCX-1010](../errors/nhcx-1010.md), no data for the correlation id.** Your message's `x-hcx-correlation_id` is not the `x-hcx-api_call_id` of the request you answer. +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is wrong. Copy it from the `x-hcx-sender_code` of the request you answer. +- **[NHCX-1011](../errors/nhcx-1011.md), invalid status.** `x-hcx-status` holds a value the exchange does not accept for this message. Use `response.complete` on an answer and `request.initiated` on a request. +- **A `/v1/error` report arrives at your endpoint.** The recipient refused your message after the exchange accepted it. Read the details as [receiving /v1/error](../callbacks/error.md) describes. +- **The exchange keeps redelivering the same message.** Your endpoint did not return HTTP 202 with the acceptance body within 30 seconds. The exchange retries five times, then deletes the request. See [retries and expiry](../concepts/retries-and-expiry.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/payer-uc-12.md b/catalogue/nhcx/tests/payer-uc-12.md new file mode 100644 index 000000000..7997e0c92 --- /dev/null +++ b/catalogue/nhcx/tests/payer-uc-12.md @@ -0,0 +1,162 @@ +--- +id: nhcx.test.payer-uc-12 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Payer sandbox exit use case 12: Respond to search request' +summary: >- + Prove that your insurance system can answer a hospital's claim search with the + matching claim responses. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 5, Table 5.2, Use case 12. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Search. +- url: https://hcxsbx.abdm.gov.in/searchhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/searchhcxservice.json + hash: sha256:21749dd2ba84a19c5523772da359d76293493d44b48651f1af2e6042d78fa296 + fetched: '2026-09-14' + note: 'API specification: searchhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/search/on_submit.' +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, Error scenario and Protocol Response. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14; page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + flows: + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + concepts: + - nhcx.concept.message-identifiers + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + errors: + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-401 + endpoints: + - nhcx.endpoint.search-on-submit + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.search-submit + - nhcx.callback.error + fhir: + - nhcx.fhir.task + - nhcx.fhir.claim-response + - nhcx.fhir.validation + tests: + - nhcx.test.payer-uc-05 + - nhcx.test.provider-uc-10 +--- + +# Payer sandbox exit use case 12: Respond to search request + +## In plain words + +A hospital searches its claims with you through [NHCX](../../shared/glossary/nhcx.md), by claim number, date range, policy or product. This case proves your system answers with the matching claim responses, sealed and addressed back to the search. + +It is one of the fifteen payer use cases for [sandbox exit](../glossary/sandbox-exit.md). + +## Before you start + +- Your payer participant exists in the sandbox registry with the payer role, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 6](payer-uc-06.md). +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- You can decrypt with your own private key, and you hold the provider's public certificate from [use case 5](payer-uc-05.md). +- A sandbox provider participant sends your payer a `POST /v1/search/submit` request. You need a provider partner, or a provider participant of your own, to send it. + +## What happens + +### Receive the request + +1. Wait for `POST /v1/search/submit` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body from [receive a sealed callback](../flows/receive-a-sealed-callback.md). +3. Decrypt the payload with your private key. Validate the Task bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles. + +### Send your answer + +1. If you processed the request, build a Task bundle whose output carries the ClaimResponse resources that match the search inputs. See [the task bundle](../fhir/task.md). Validate it against the NRCeS profiles ([validating a bundle](../fhir/validation.md)). Seal it as a [JWE](../glossary/jwe.md) with the provider's public key. +2. If you could not decrypt or validate the request, prepare a `ProtocolResponse` instead. It carries the protocol headers in clear, `x-hcx-status` `response.error`, and `x-hcx-error_details` naming the fault. +3. Set the protected headers. Use a new `x-hcx-api_call_id`, different from the correlation id. Set `x-hcx-correlation_id` to the `x-hcx-api_call_id` of the request you answer. Set `x-hcx-recipient_code` to that request's `x-hcx-sender_code`, and `x-hcx-sender_code` to your participant code. Set `x-hcx-status` to `response.complete`, or `response.partial` when you answer in part. +4. Send the answer to `/v1/search/on_submit`. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/search/on_submit' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"type": "JWEPayload", "payload": ""}' +``` + +5. NHCX answers with HTTP 202. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> To respond for search requests based on the task request. It provides the ClaimResponse(s) to the given input criteria. +> +> 1. The payload should be validated against the profiles published by NRCES. +> 2. Api caller ID and Correlation ID should be different. +> 3. Correlation ID should be the API caller ID of the request that you are responding to. +> 4. Receiver code should be the same as Sender ID of the request that Payer system is responding to. + +What you observe: + +- NHCX answers your `POST /v1/search/on_submit` with HTTP 202. +- Your `x-hcx-api_call_id` differs from your `x-hcx-correlation_id`. +- Your `x-hcx-correlation_id` equals the `x-hcx-api_call_id` of the provider's request. +- Your `x-hcx-recipient_code` equals the `x-hcx-sender_code` of the provider's request. +- The sealed payload is a Task bundle carrying the matching ClaimResponse resources, and it validates against the NRCeS profiles. +- No `/v1/error` report arrives at your endpoint for your answer. +- The ClaimResponse resources match the search inputs, for example the claim number asked for. + +## When it goes wrong + +- **No request reaches your endpoint.** Check it against the [callback URL requirements](../sandbox/callback-url-requirements.md). Confirm the provider addresses your participant code, or your [TPA](../glossary/tpa.md)'s processing ID. +- **The provider cannot open your answer.** You sealed it with a stale or wrong certificate. Fetch the provider's certificate again with [use case 5](payer-uc-05.md). See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **[NHCX-1010](../errors/nhcx-1010.md), no data for the correlation id.** Your message's `x-hcx-correlation_id` is not the `x-hcx-api_call_id` of the request you answer. +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is wrong. Copy it from the `x-hcx-sender_code` of the request you answer. +- **[NHCX-1011](../errors/nhcx-1011.md), invalid status.** `x-hcx-status` holds a value the exchange does not accept for this message. Use `response.complete` on an answer and `request.initiated` on a request. +- **A `/v1/error` report arrives at your endpoint.** The recipient refused your message after the exchange accepted it. Read the details as [receiving /v1/error](../callbacks/error.md) describes. +- **The exchange keeps redelivering the same message.** Your endpoint did not return HTTP 202 with the acceptance body within 30 seconds. The exchange retries five times, then deletes the request. See [retries and expiry](../concepts/retries-and-expiry.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/payer-uc-13.md b/catalogue/nhcx/tests/payer-uc-13.md new file mode 100644 index 000000000..255025df3 --- /dev/null +++ b/catalogue/nhcx/tests/payer-uc-13.md @@ -0,0 +1,166 @@ +--- +id: nhcx.test.payer-uc-13 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Payer sandbox exit use case 13: Send payment notice' +summary: >- + Prove that your insurance system can tell a hospital a claim was paid, through + the claims exchange, and receive its acknowledgement. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 6, Table 6.2, Use case 13. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet PaymentNotice. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, rows 17, 30, 31, 33. +- url: https://hcxsbx.abdm.gov.in/servicehcxpayment/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/servicehcxpayment.json + hash: sha256:f5c9e3728efbbeaa5e0e8083334b0ae60a05930e5a1e096ca06d40abb235d658 + fetched: '2026-09-14' + note: 'API specification: servicehcxpayment, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/paymentnotice/request.' +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Error scenario. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14; page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + flows: + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.payment-notice + - nhcx.flow.send-a-sealed-request + concepts: + - nhcx.concept.message-identifiers + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + - nhcx.concept.workflow-codes + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + errors: + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-401 + endpoints: + - nhcx.endpoint.paymentnotice-request + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.paymentnotice-on-request + - nhcx.callback.error + fhir: + - nhcx.fhir.payment-notice + - nhcx.fhir.task + - nhcx.fhir.validation + tests: + - nhcx.test.payer-uc-05 + - nhcx.test.payer-uc-11 + - nhcx.test.provider-uc-11 + glossary: + - nhcx.glossary.payment-notice +--- + +# Payer sandbox exit use case 13: Send payment notice + +## In plain words + +When your system pays a claim, it tells the hospital with a [payment notice](../glossary/payment-notice.md) through [NHCX](../../shared/glossary/nhcx.md). The notice carries the payment date, the amount and the bank transaction reference. The hospital acknowledges it on your endpoint. + +Here your system starts the exchange. It is one of the fifteen payer use cases for [sandbox exit](../glossary/sandbox-exit.md). + +## Before you start + +- Your payer participant exists in the sandbox registry with the payer role, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 6](payer-uc-06.md). +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- You can decrypt with your own private key, and you hold the provider's public certificate from [use case 5](payer-uc-05.md). +- You approved a claim from a sandbox provider in [use case 11](payer-uc-11.md). + +## What happens + +### Send the payment notice + +1. Build a Task bundle whose Task has `code` `deliver` and a PaymentNotice as input. The PaymentReconciliation carries `status`, `paymentDate`, `paymentAmount` and `paymentIdentifier`, the bank transaction reference. See [the payment notice bundle](../fhir/payment-notice.md). +2. Validate it against the [NRCeS](../../shared/glossary/nrces.md) profiles, then seal it with the provider's public key. +3. Set the protected headers. `x-hcx-recipient_code` is the provider's code and `x-hcx-status` is `request.initiated`. Use a new `x-hcx-api_call_id`. `x-hcx-workflow_id` names the payment stage: `30` initiated, `31` processed, `33` settled. +4. Send it. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/paymentnotice/request' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +5. NHCX answers with HTTP 202. + +### Receive the acknowledgement + +1. Wait for `POST /v1/paymentnotice/on_request` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body. +3. Decrypt it. It carries `x-hcx-workflow_id` `17`, the provider's acknowledgement. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> Send Payment notification/reconciliation objects to Providers via the HCX gateway +> +> API should be called by payer systems. Request will be prepared as per the specifications. +> +> Payload should be validated against the profiles published by NRCES. + +What you observe: + +- NHCX answers your `POST /v1/paymentnotice/request` with HTTP 202. +- You receive `POST /v1/paymentnotice/on_request` with `x-hcx-workflow_id` `17` and `x-hcx-status` `response.complete`. +- Its `x-hcx-correlation_id` equals your `x-hcx-api_call_id`. + +## When it goes wrong + +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is not the provider's registered code. +- **The provider cannot open your answer.** You sealed it with a stale or wrong certificate. Fetch the provider's certificate again with [use case 5](payer-uc-05.md). See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **The provider's answer never arrives.** Check your registered endpoint against the [callback URL requirements](../sandbox/callback-url-requirements.md). Then ask where your request stands with [use case 15](payer-uc-15.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. +- **[NHCX-1011](../errors/nhcx-1011.md), invalid status.** `x-hcx-status` holds a value the exchange does not accept for this message. Use `response.complete` on an answer and `request.initiated` on a request. +- **The exchange keeps redelivering the same message.** Your endpoint did not return HTTP 202 with the acceptance body within 30 seconds. The exchange retries five times, then deletes the request. See [retries and expiry](../concepts/retries-and-expiry.md). diff --git a/catalogue/nhcx/tests/payer-uc-14.md b/catalogue/nhcx/tests/payer-uc-14.md new file mode 100644 index 000000000..d84d7c346 --- /dev/null +++ b/catalogue/nhcx/tests/payer-uc-14.md @@ -0,0 +1,167 @@ +--- +id: nhcx.test.payer-uc-14 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Payer sandbox exit use case 14: Respond to the task request submitted' +summary: >- + Prove that your insurance system can answer a hospital's reprocess or cancel request + through the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 6-7, Tables 6.3 and 7.1, Use case 14. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Reprocess. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 10.5 Response. +- url: https://hcxsbx.abdm.gov.in/taskhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/taskhcxservice.json + hash: sha256:0418eca6478dece4d72c5a49a6547d50772511f7ffaf32f901f245591ba84656 + fetched: '2026-09-14' + note: 'API specification: taskhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/task/on_submit.' +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, Error scenario and Protocol Response. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14; page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + flows: + - nhcx.flow.payer-process-a-request + - nhcx.flow.receive-a-sealed-callback + concepts: + - nhcx.concept.message-identifiers + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + - nhcx.concept.reprocess-and-cancel + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.duplicate-or-mismatched-correlation + - nhcx.troubleshooting.recipient-cannot-decrypt + errors: + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-401 + endpoints: + - nhcx.endpoint.task-on-submit + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.task-submit + - nhcx.callback.error + fhir: + - nhcx.fhir.task + - nhcx.fhir.claim-response + - nhcx.fhir.validation + tests: + - nhcx.test.payer-uc-05 + - nhcx.test.provider-uc-12 +--- + +# Payer sandbox exit use case 14: Respond to the task request submitted + +## In plain words + +A hospital asks you, through [NHCX](../../shared/glossary/nhcx.md), to [reprocess](../glossary/reprocess.md) or cancel a claim or preauthorisation. This case proves your system answers the task, sealed for that hospital and addressed back to its request. + +It is one of the fifteen payer use cases for [sandbox exit](../glossary/sandbox-exit.md). + +## Before you start + +- Your payer participant exists in the sandbox registry with the payer role, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 6](payer-uc-06.md). +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- You can decrypt with your own private key, and you hold the provider's public certificate from [use case 5](payer-uc-05.md). +- A sandbox provider participant sends your payer a `POST /v1/task/submit` request. You need a provider partner, or a provider participant of your own, to send it. + +## What happens + +### Receive the request + +1. Wait for `POST /v1/task/submit` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body from [receive a sealed callback](../flows/receive-a-sealed-callback.md). +3. Decrypt the payload with your private key. Validate the Task bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles. + +### Send your answer + +1. If you processed the request, build a Task bundle with `status` `completed` whose output references the resulting ClaimResponse. See [the task bundle](../fhir/task.md). Validate it against the NRCeS profiles ([validating a bundle](../fhir/validation.md)). Seal it as a [JWE](../glossary/jwe.md) with the provider's public key. +2. If you could not decrypt or validate the request, prepare a `ProtocolResponse` instead. It carries the protocol headers in clear, `x-hcx-status` `response.error`, and `x-hcx-error_details` naming the fault. +3. Set the protected headers. Use a new `x-hcx-api_call_id`, different from the correlation id. Set `x-hcx-correlation_id` to the `x-hcx-api_call_id` of the request you answer. Set `x-hcx-recipient_code` to that request's `x-hcx-sender_code`, and `x-hcx-sender_code` to your participant code. Set `x-hcx-status` to `response.complete`. +4. Send the answer to `/v1/task/on_submit`. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/task/on_submit' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"type": "JWEPayload", "payload": ""}' +``` + +5. NHCX answers with HTTP 202. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> To return the response for task requests such as reprocess/cancel. +> +> 1. The payload should be validated against the profiles published by NRCES. +> 2. Api caller ID and Correlation ID should be different. +> 3. Correlation ID should be the API caller ID of the request that you are responding to. +> 4. Receiver code should be the same as Sender ID of the request that Payer system is responding to. + +What you observe: + +- NHCX answers your `POST /v1/task/on_submit` with HTTP 202. +- Your `x-hcx-api_call_id` differs from your `x-hcx-correlation_id`. +- Your `x-hcx-correlation_id` equals the `x-hcx-api_call_id` of the provider's request. +- Your `x-hcx-recipient_code` equals the `x-hcx-sender_code` of the provider's request. +- The sealed payload is a Task bundle whose output references a ClaimResponse, and it validates against the NRCeS profiles. +- No `/v1/error` report arrives at your endpoint for your answer. + +## When it goes wrong + +- **No request reaches your endpoint.** Check it against the [callback URL requirements](../sandbox/callback-url-requirements.md). Confirm the provider addresses your participant code, or your [TPA](../glossary/tpa.md)'s processing ID. +- **The provider cannot open your answer.** You sealed it with a stale or wrong certificate. Fetch the provider's certificate again with [use case 5](payer-uc-05.md). See [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **[NHCX-1010](../errors/nhcx-1010.md), no data for the correlation id.** Your message's `x-hcx-correlation_id` is not the `x-hcx-api_call_id` of the request you answer. +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is wrong. Copy it from the `x-hcx-sender_code` of the request you answer. +- **[NHCX-1011](../errors/nhcx-1011.md), invalid status.** `x-hcx-status` holds a value the exchange does not accept for this message. Use `response.complete` on an answer and `request.initiated` on a request. +- **A `/v1/error` report arrives at your endpoint.** The recipient refused your message after the exchange accepted it. Read the details as [receiving /v1/error](../callbacks/error.md) describes. +- **The exchange keeps redelivering the same message.** Your endpoint did not return HTTP 202 with the acceptance body within 30 seconds. The exchange retries five times, then deletes the request. See [retries and expiry](../concepts/retries-and-expiry.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/payer-uc-15.md b/catalogue/nhcx/tests/payer-uc-15.md new file mode 100644 index 000000000..8981883a5 --- /dev/null +++ b/catalogue/nhcx/tests/payer-uc-15.md @@ -0,0 +1,138 @@ +--- +id: nhcx.test.payer-uc-15 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Payer sandbox exit use case 15: Get status' +summary: >- + Prove that your insurance system can ask the claims exchange where one of its + earlier messages stands, and read the answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 7, Table 7.2, Use case 15. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Status. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Status Description (Protected Header). +- url: https://hcxsbx.abdm.gov.in/statushcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/statushcxservice.json + hash: sha256:93b6355a234ef56607427fcdfa32da4921124180c9df08ecd73c8af8955c2adf + fetched: '2026-09-14' + note: 'API specification: statushcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/status.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14; page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + flows: + - nhcx.flow.status-check + endpoints: + - nhcx.endpoint.status + callbacks: + - nhcx.callback.on-status + concepts: + - nhcx.concept.status-lifecycle + - nhcx.concept.message-identifiers + decisions: + - nhcx.decision.status-poll-or-wait + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.callback-url-requirements + tests: + - nhcx.test.payer-uc-10 + - nhcx.test.payer-uc-13 + - nhcx.test.provider-uc-13 + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1012 +--- + +# Payer sandbox exit use case 15: Get status + +## In plain words + +Messages through [NHCX](../../shared/glossary/nhcx.md) are answered later, so one can seem to vanish. This case proves your system can ask the exchange where one of its own messages stands, such as a payment notice. The answer arrives on your endpoint as the protocol headers of that message. + +It is one of the fifteen payer use cases for [sandbox exit](../glossary/sandbox-exit.md). The exchange answers this call itself. + +## Before you start + +- Your payer participant exists in the sandbox registry with the payer role, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 6](payer-uc-06.md). +- You sent a message earlier, for example in [use case 13](payer-uc-13.md), and stored its `x-hcx-api_call_id`. +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). + +## What happens + +### Send the status request + +1. Build the status request as a [JWE](../glossary/jwe.md), as [`/v1/status`](../endpoints/status.md) describes. +2. Set the protected headers. Use a new `x-hcx-api_call_id`. Set `x-hcx-correlation_id` to the `x-hcx-api_call_id` of the message you ask about. Set `x-hcx-recipient_code` to that message's recipient, and `x-hcx-status` to `request.initiated`. +3. Send it. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/status' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +4. NHCX answers with HTTP 202. + +### Receive the status + +1. Wait for `POST /v1/on_status` on your registered endpoint. Answer it with HTTP 202 within 30 seconds. +2. Read the protocol headers it carries. `request.queued` means the message waits at the exchange. `request.dispatched` means it reached the recipient's system. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +``` + +## How you know it worked + +The pass criterion for this case: + +> Retrieve the status of any request that has been triggered to NHCX +> +> Callback API should be implemented by provider systems. It should accept the payload as ProtocolHeader contains all the attributes. +> +> Payload should be validated against the profiles published by NRCES. + +What you observe: + +- NHCX answers your `POST /v1/status` with HTTP 202. +- You receive `POST /v1/on_status` carrying the protocol headers of the message you asked about. +- Your system shows the message's stage from `x-hcx-status`. + +## When it goes wrong + +- **[NHCX-1012](../errors/nhcx-1012.md), no records for the API call id.** `x-hcx-correlation_id` must be the `x-hcx-api_call_id` of a message your participant sent. +- **The status never arrives.** Check your registered endpoint against the [callback URL requirements](../sandbox/callback-url-requirements.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/provider-uc-01.md b/catalogue/nhcx/tests/provider-uc-01.md new file mode 100644 index 000000000..612721828 --- /dev/null +++ b/catalogue/nhcx/tests/provider-uc-01.md @@ -0,0 +1,119 @@ +--- +id: nhcx.test.provider-uc-01 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Provider sandbox exit use case 1: Get participant list' +summary: >- + Prove that your hospital system can fetch the registered participants of one role, + such as every payer, from the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Table 1.1, Use case 1. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. components.schemas.ParticipantListResponse.' +- url: https://hcxsbx.abdm.gov.in/images/b885e59891fedc7e725c.zip + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection.zip + hash: sha256:2d082f244ee41d137a62af82380dcd2d5db9ebbab66824fd54a23c506d4d9a7f + fetched: '2026-09-14' + note: AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection, row 16 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Participant List request. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Q2 and Q3; page 6, best practices. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.fetch-participants-list + - nhcx.endpoint.get-session + concepts: + - nhcx.concept.participant-registry + - nhcx.concept.participant-code + flows: + - nhcx.flow.sandbox-onboarding + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.environments-and-base-urls + tests: + - nhcx.test.provider-uc-04 + - nhcx.test.payer-uc-04 + errors: + - nhcx.error.nhcx-401 + glossary: + - nhcx.glossary.sandbox-exit + - nhcx.glossary.participant-code +--- + +# Provider sandbox exit use case 1: Get participant list + +## In plain words + +This case proves your system can ask [NHCX](../../shared/glossary/nhcx.md) for every participant registered under one role. A provider usually asks for payers, then offers them in its payer picker. + +It is one of the thirteen provider use cases for [sandbox exit](../glossary/sandbox-exit.md). The exchange answers this call itself, so no payer takes part. + +## Before you start + +- Your provider participant exists in the sandbox registry, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 4](provider-uc-04.md). +- Your system can reach `https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice` over HTTPS. + +## What happens + +### Run the call + +1. Call [`POST /fetch/participants/list`](../endpoints/fetch-participants-list.md) with a role and a registration date window. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/fetch/participants/list' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{"role": "PAYER", "fromdate": "", "todate": ""}' +``` + +2. Read the `participantdetails` array in the response. +3. Show the returned participants in your system, for example as a payer picker. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +``` + +## How you know it worked + +The pass criterion for this case: + +> Retrieve the list of participants in the registry based on the role + +What you observe: + +- You receive HTTP 200 with a `participantdetails` array. +- Each entry carries `participantcode`, `participantname`, `address` and `state`. +- For `role` `PAYER` with a wide date window, the array is not empty. + +## When it goes wrong + +- **An empty array.** Widen the date window so it covers the registrations you expect. Send values exactly as documented: trim spaces and match case. +- **Every call fails, even with a new token.** You are on the wrong base URL. The participant APIs live under `participanthcxservice`. See [environments and base URLs](../sandbox/environments-and-base-urls.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/provider-uc-02.md b/catalogue/nhcx/tests/provider-uc-02.md new file mode 100644 index 000000000..da43d1182 --- /dev/null +++ b/catalogue/nhcx/tests/provider-uc-02.md @@ -0,0 +1,123 @@ +--- +id: nhcx.test.provider-uc-02 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Provider sandbox exit use case 2: Get policy' +summary: >- + Prove that your hospital system can look up the insurance policies a payer has + linked to a patient, before any claim work starts. +sources: +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Table 1.2, Use case 2. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, item 7. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. sheet Scenarios, row 1. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./participant/get/policies; schema identifiertype.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.participant-link-abha-policy + flows: + - nhcx.flow.policy-link-and-delink + concepts: + - nhcx.concept.policy-linking + - nhcx.concept.participant-code + sandbox: + - nhcx.sandbox.sandbox-exit + tests: + - nhcx.test.provider-uc-04 + - nhcx.test.provider-uc-05 + - nhcx.test.payer-uc-01 + - nhcx.test.payer-uc-02 + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 +--- + +# Provider sandbox exit use case 2: Get policy + +## In plain words + +This case proves your system can find a patient's insurance policies. You look them up by the patient's [ABHA](../../shared/glossary/abha.md) number or mobile number, and [NHCX](../../shared/glossary/nhcx.md) answers from its registry. Payers write those links with [payer use case 1](payer-uc-01.md). + +It is one of the thirteen provider use cases for [sandbox exit](../glossary/sandbox-exit.md). Call it right after you register the patient. + +## Before you start + +- Your provider participant exists in the sandbox registry, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 4](provider-uc-04.md). +- You have the ABHA number of a beneficiary whose payer linked it to a policy through [`/participant/link/abha/policy`](../endpoints/participant-link-abha-policy.md). + +## What happens + +### Run the call + +1. Call [`POST /participant/get/policies`](../endpoints/participant-get-policies.md) with the beneficiary's identifier. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/participant/get/policies' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{"identifiertype": "AbhaNumber", "identifiervalue": ""}' +``` + +2. Read the policies in the response. +3. Store the processing ID the response gives for the policy. It is the `x-hcx-recipient_code` for eligibility, preauthorisation and claim requests. Do not use the payer ID for this. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +``` + +## How you know it worked + +The pass criterion for this case: + +> Get the list of policies for the beneficiary based on the mobile number or ABHA + +What you observe: + +- You receive HTTP 200 listing the policies linked to that beneficiary. +- The payer that made the link appears in the result. +- Your system stores the processing ID, ready for [use case 5](provider-uc-05.md). + +## When it goes wrong + +- **No policies come back.** No payer has linked a policy to that ABHA number. Confirm the number matches the one the payer linked. +- **Later requests fail with [NHCX-1003](../errors/nhcx-1003.md).** Your system addressed the payer ID. Address the processing ID from this response instead. +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/provider-uc-03.md b/catalogue/nhcx/tests/provider-uc-03.md new file mode 100644 index 000000000..58a5f86cf --- /dev/null +++ b/catalogue/nhcx/tests/provider-uc-03.md @@ -0,0 +1,127 @@ +--- +id: nhcx.test.provider-uc-03 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Provider sandbox exit use case 3: Get public key' +summary: >- + Prove that your hospital system can fetch the public certificate of the organisation + it is about to send a sealed message to. +sources: +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Table 1.3, Use case 3. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 3.3 Certificate Fetch; Section 2.4. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1. +- url: https://hcxsbx.abdm.gov.in/participanthcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/participanthcxservice.json + hash: sha256:6d0a2192da8160fe4b292bbdd81e937ba254bf6d27915d23907e70b82faebf63 + fetched: '2026-09-14' + note: 'API specification: participanthcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./fetch/certs.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.fetch-certs + concepts: + - nhcx.concept.encryption-certificate + - nhcx.concept.jwe-envelope + flows: + - nhcx.flow.send-a-sealed-request + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.dummy-payer + tests: + - nhcx.test.provider-uc-04 + - nhcx.test.provider-uc-05 + - nhcx.test.payer-uc-05 + troubleshooting: + - nhcx.troubleshooting.recipient-cannot-decrypt + errors: + - nhcx.error.nhcx-401 + - nhcx.error.payr-1001 + glossary: + - nhcx.glossary.jwe + - nhcx.glossary.x509-certificate +--- + +# Provider sandbox exit use case 3: Get public key + +## In plain words + +Every payload you send through [NHCX](../../shared/glossary/nhcx.md) is sealed for one recipient, as a [JWE](../glossary/jwe.md). You seal it with that recipient's public key. This case proves your system can fetch the key from the registry, given the recipient's [participant code](../glossary/participant-code.md). + +It is one of the thirteen provider use cases for [sandbox exit](../glossary/sandbox-exit.md). + +## Before you start + +- Your provider participant exists in the sandbox registry, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 4](provider-uc-04.md). +- You know the recipient's participant code. With no payer partner, use the sandbox dummy payer, `1000003538@hcx`. See [the dummy payer](../sandbox/dummy-payer.md). + +## What happens + +### Run the call + +1. Call [`POST /fetch/certs`](../endpoints/fetch-certs.md). `participantid` is mandatory. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/participanthcxservice/fetch/certs' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -d '{"participantid": "1000003538@hcx"}' +``` + +2. Load the returned string as a public key. Try it as an [X.509 certificate](../glossary/x509-certificate.md) first. If that fails, parse it as a SubjectPublicKeyInfo (SPKI) key. +3. Cache the key for 24 hours, keyed by participant code. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +``` + +## How you know it worked + +The pass criterion for this case: + +> Retrieve the public key of the receiver, that is to be used to encrypt the payload for the receiver. participant id must be mandatorily provided in the request. + +What you observe: + +- You receive HTTP 200 with a string holding a PEM X.509 certificate or an SPKI public key. +- Your system loads it as an RSA public key without error. +- A request you seal with it is opened by the recipient. [Use case 5](provider-uc-05.md) proves this: no decryption `ProtocolResponse` comes back. + +## When it goes wrong + +- **The call is refused or the body is empty.** `participantid` is missing or misspelt. Send the exact participant code, including its suffix. +- **The recipient cannot decrypt your message.** You sealed with a stale or wrong key. See [PAYR-1001](../errors/payr-1001.md) and [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). Fetch the key again when the recipient rotates its certificate. +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/provider-uc-04.md b/catalogue/nhcx/tests/provider-uc-04.md new file mode 100644 index 000000000..9eb7decc3 --- /dev/null +++ b/catalogue/nhcx/tests/provider-uc-04.md @@ -0,0 +1,115 @@ +--- +id: nhcx.test.provider-uc-04 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Provider sandbox exit use case 4: Get the auth token' +summary: >- + Prove that your hospital system can obtain, and keep fresh, the access token every + call to the claims exchange must carry. +sources: +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Table 1.4, Use case 4. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 3.1 Token Request; Section 2.3. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Q3; page 5, Q20. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, items 6 and 9. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + endpoints: + - nhcx.endpoint.get-session + - nhcx.endpoint.session-token + - nhcx.endpoint.fetch-participants-list + decisions: + - nhcx.decision.session-endpoint + concepts: + - nhcx.concept.session-token + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.prerequisites + tests: + - nhcx.test.provider-uc-01 + - nhcx.test.payer-uc-06 + troubleshooting: + - nhcx.troubleshooting.everything-returns-401 + errors: + - nhcx.error.nhcx-401 +--- + +# Provider sandbox exit use case 4: Get the auth token + +## In plain words + +Every call to [NHCX](../../shared/glossary/nhcx.md) carries an access token. This case proves your system can obtain one with its client credentials and replace it before it expires. + +It is one of the thirteen provider use cases for [sandbox exit](../glossary/sandbox-exit.md). The exchange issues the token; no payer takes part. + +## Before you start + +- You hold your sandbox client id and client secret. [Sandbox prerequisites](../sandbox/prerequisites.md) covers how you get them. +- You know which token endpoint to call. See [which session token endpoint to call](../decisions/session-endpoint.md). + +## What happens + +### Run the call + +1. Call [`POST /get/session`](../endpoints/get-session.md) with a form-encoded body: + +```text +client_id=&client_secret=&grant_type=client_credentials +``` + +2. Read `access_token` and `expires_in` from the response. +3. Send the token on every later call. Participant service calls take it as `bearer_auth: Bearer `. Exchange calls take the same value on both `bearer_auth` and `Authorization`. +4. Schedule a refresh before `expires_in` runs out. Do not wait for a 401. +5. Prove the token works: run [use case 1](provider-uc-01.md) with it. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +``` + +## How you know it worked + +The pass criterion for this case: + +> To generate the token to authenticate NHCX API calls + +What you observe: + +- You receive HTTP 200 with `access_token`, `expires_in` and `token_type` `Bearer`. +- A call to `/fetch/participants/list` with the token returns HTTP 200, not 401. +- Your system replaces the token before it expires, with no manual step. + +## When it goes wrong + +- **The token call itself fails.** The client id or secret is wrong, or belongs to another environment. Use your sandbox credentials. +- **Later calls return 401 after a while.** The token expired. The message `Sender is not authorized to execute the operation` means the same. See [NHCX-401](../errors/nhcx-401.md). +- **Later calls return 401 at once.** The token went in without the `Bearer ` prefix, or in the wrong header. See [every NHCX call returns 401](../troubleshooting/everything-returns-401.md). diff --git a/catalogue/nhcx/tests/provider-uc-05.md b/catalogue/nhcx/tests/provider-uc-05.md new file mode 100644 index 000000000..9a816d78f --- /dev/null +++ b/catalogue/nhcx/tests/provider-uc-05.md @@ -0,0 +1,175 @@ +--- +id: nhcx.test.provider-uc-05 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Provider sandbox exit use case 5: Check the coverage eligibility' +summary: >- + Prove that your hospital system can ask a payer through the claims exchange whether + a patient's cover is in force, and handle both kinds of answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, Tables 1.5 and 2.1, Use case 5. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, items 7 and 8. +- url: https://hcxsbx.abdm.gov.in/coverageeligibilityhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/coverageeligibilityhcxservice.json + hash: sha256:1723a4020b1b33d0bc1d7175609f0d05e6a6a78e8b4c52041222396639ceb52c + fetched: '2026-09-14' + note: 'API specification: coverageeligibilityhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/coverageeligibility/check.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-6, Q14 and Q21. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Error scenario. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + - nhcx.concept.coverage-eligibility-purposes + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.recipient-cannot-decrypt + - nhcx.troubleshooting.bundle-rejected + flows: + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.get-session + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + - nhcx.fhir.validation + tests: + - nhcx.test.provider-uc-02 + - nhcx.test.provider-uc-03 + - nhcx.test.provider-uc-13 + - nhcx.test.payer-uc-07 + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1005 + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1001 + - nhcx.error.payr-1049 +--- + +# Provider sandbox exit use case 5: Check the coverage eligibility + +## In plain words + +This case proves your system can ask a [payer](../glossary/payer.md) whether a patient's cover is in force, through [NHCX](../../shared/glossary/nhcx.md). The answer comes back later, on a callback your system hosts. + +Your callback must handle two forms of answer. A sealed result arrives when the payer processed the request. A `ProtocolResponse` arrives when it could not. + +## Before you start + +- Your provider participant exists in the sandbox registry, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 4](provider-uc-04.md). +- You hold the recipient's public certificate from [use case 3](provider-uc-03.md), and your own private key. +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- The recipient is the sandbox dummy payer, participant code `1000003538@hcx`, unless a payer partner answers for you. See [the dummy payer](../sandbox/dummy-payer.md). +- You have the patient's policy and the payer's processing ID from [use case 2](provider-uc-02.md). + +## What happens + +### Send the request + +1. Build a coverage eligibility request bundle for the patient, as a [FHIR](../../shared/glossary/fhir.md) collection. See [the coverage eligibility request bundle](../fhir/coverage-eligibility-request.md). Validate it against the [NRCeS](../../shared/glossary/nrces.md) profiles, as [validating a bundle](../fhir/validation.md) describes. +2. Seal it as a [JWE](../glossary/jwe.md) with the recipient's public key. [Send a sealed request](../flows/send-a-sealed-request.md) walks through the envelope. +3. Set the protected headers. `x-hcx-sender_code` is your participant code. `x-hcx-recipient_code` is the payer's processing ID, or `1000003538@hcx` for the dummy payer. `x-hcx-status` is `request.initiated`. Use a new `x-hcx-api_call_id` and a `x-hcx-correlation_id` unique to this request cycle. `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. +4. Send the sealed payload. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/coverageeligibility/check' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +5. NHCX answers with HTTP 202. Store your `x-hcx-api_call_id` against the case. + +### Receive the answer + +1. Wait for `POST /v1/coverageeligibility/on_check` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body from [receive a sealed callback](../flows/receive-a-sealed-callback.md). +3. Read `type` in the body. `ProtocolResponse` means the payer could not process your request. Read `x-hcx-error_details` and do not decrypt. +4. Any other `type` carries a sealed `payload`. Decrypt it with your private key and parse the CoverageEligibilityResponse bundle. +5. Validate the decrypted bundle against the NRCeS profiles. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> To check the eligibility of a beneficiary with the payers via NHCX. +> +> Callback API should be implemented by provider systems. It should accept the payload in two forms and it will be derived based on “type” param of the response. +> +> Payload should be validated against the profiles published by NRCES. + +What you observe: + +- NHCX answers your `POST /v1/coverageeligibility/check` with HTTP 202. +- You receive `POST /v1/coverageeligibility/on_check` on your registered endpoint. +- Its `x-hcx-correlation_id` equals the `x-hcx-api_call_id` of your request. Its `x-hcx-recipient_code` is your participant code. +- Your endpoint answers it with HTTP 202 within 30 seconds. +- For a sealed answer, the decrypted payload is a CoverageEligibilityResponse bundle that validates against the NRCeS profiles. +- For a `ProtocolResponse`, your system shows the code and message from `x-hcx-error_details` and does not try to decrypt. + +## When it goes wrong + +- **The callback never arrives.** Your callback URL must use a domain name, not an IP address or port. It must run on an India-hosted server that allows the exchange's outbound addresses. See [callback URL requirements](../sandbox/callback-url-requirements.md) and [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). Then ask where the request stands with [use case 13](provider-uc-13.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is wrong. Address the processing ID from [use case 2](provider-uc-02.md), not the payer ID. +- **[NHCX-1006](../errors/nhcx-1006.md), duplicate request.** You reused a correlation id. A failed request makes its correlation id inactive, so start the next cycle with a new one. +- **A `ProtocolResponse` says the payer cannot decrypt.** You sealed with a stale or wrong certificate. See [PAYR-1001](../errors/payr-1001.md) and [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **A `ProtocolResponse` rejects the bundle.** See [PAYR-1049](../errors/payr-1049.md) and [the payer rejects your bundle](../troubleshooting/bundle-rejected.md). Validate against the NRCeS profiles before you send. +- **The exchange keeps redelivering the same message.** Your endpoint did not return HTTP 202 with the acceptance body within 30 seconds. The exchange retries five times, then deletes the request. See [retries and expiry](../concepts/retries-and-expiry.md). diff --git a/catalogue/nhcx/tests/provider-uc-06.md b/catalogue/nhcx/tests/provider-uc-06.md new file mode 100644 index 000000000..4ce232981 --- /dev/null +++ b/catalogue/nhcx/tests/provider-uc-06.md @@ -0,0 +1,176 @@ +--- +id: nhcx.test.provider-uc-06 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Provider sandbox exit use case 6: Request insurance plan details' +summary: >- + Prove that your hospital system can request a payer's plan for a policy through + the claims exchange, and handle both kinds of answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 2-3, Tables 2.2 and 3.1, Use case 6. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Insurance Plan. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Insurance Plan. +- url: https://hcxsbx.abdm.gov.in/insuranceplanhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/insuranceplanhcxservice.json + hash: sha256:03665c6e6a5c8d86e3d621ab577dd683cf13c155d5b9529f5be6ca70fef13dee + fetched: '2026-09-14' + note: 'API specification: insuranceplanhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/insuranceplan/request.' +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, item 7. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-6, Q14 and Q21. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + - nhcx.concept.insurance-plan + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.recipient-cannot-decrypt + - nhcx.troubleshooting.bundle-rejected + flows: + - nhcx.flow.insurance-plan-request + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + endpoints: + - nhcx.endpoint.insuranceplan-request + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.insuranceplan-on-request + fhir: + - nhcx.fhir.insurance-plan-bundle + - nhcx.fhir.task + - nhcx.fhir.validation + tests: + - nhcx.test.provider-uc-03 + - nhcx.test.provider-uc-13 + - nhcx.test.payer-uc-08 + - nhcx.test.tc-hbp-01 + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1001 + - nhcx.error.payr-1049 + - nhcx.error.payr-1402 + - nhcx.error.payr-1405 + - nhcx.error.payr-1406 +--- + +# Provider sandbox exit use case 6: Request insurance plan details + +## In plain words + +The insurance plan tells your hospital what a policy covers, under which conditions, and with which documents. This case proves your system can request it from a payer through [NHCX](../../shared/glossary/nhcx.md). + +The plan arrives later on your callback, sealed. A `ProtocolResponse` arrives instead when the payer could not process the request. + +## Before you start + +- Your provider participant exists in the sandbox registry, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 4](provider-uc-04.md). +- You hold the recipient's public certificate from [use case 3](provider-uc-03.md), and your own private key. +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- The recipient is the sandbox dummy payer, participant code `1000003538@hcx`, unless a payer partner answers for you. See [the dummy payer](../sandbox/dummy-payer.md). +- With the dummy payer, put provider id `32722` inside the bundle and use policy number `100217`. These values work only with the dummy payer. + +## What happens + +### Send the request + +1. Build a Task bundle whose Task has `code` `poll` and a policy number input, with your provider id as an optional input. See [insurance plan bundles](../fhir/insurance-plan-bundle.md). Validate it against the [NRCeS](../../shared/glossary/nrces.md) profiles, as [validating a bundle](../fhir/validation.md) describes. +2. Seal it as a [JWE](../glossary/jwe.md) with the recipient's public key. [Send a sealed request](../flows/send-a-sealed-request.md) walks through the envelope. +3. Set the protected headers. `x-hcx-sender_code` is your participant code. `x-hcx-recipient_code` is the payer's processing ID, or `1000003538@hcx` for the dummy payer. `x-hcx-status` is `request.initiated`. Use a new `x-hcx-api_call_id` and a `x-hcx-correlation_id` unique to this request cycle. `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. +4. Send the sealed payload. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/insuranceplan/request' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +5. NHCX answers with HTTP 202. Store your `x-hcx-api_call_id` against the case. + +### Receive the answer + +1. Wait for `POST /v1/insuranceplan/on_request` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body from [receive a sealed callback](../flows/receive-a-sealed-callback.md). +3. Read `type` in the body. `ProtocolResponse` means the payer could not process your request. Read `x-hcx-error_details` and do not decrypt. +4. Any other `type` carries a sealed `payload`. Decrypt it with your private key and parse the InsurancePlan bundle. +5. Validate the decrypted bundle against the NRCeS profiles. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> Request insurance plan details from the Payer via HCX +> +> Callback API should be implemented by provider systems. It should accept the payload in two forms, and it will be derived based on “type” param of the response. +> +> Payload should be validated against the profiles published by NRCES. + +What you observe: + +- NHCX answers your `POST /v1/insuranceplan/request` with HTTP 202. +- You receive `POST /v1/insuranceplan/on_request` on your registered endpoint. +- Its `x-hcx-correlation_id` equals the `x-hcx-api_call_id` of your request. Its `x-hcx-recipient_code` is your participant code. +- Your endpoint answers it with HTTP 202 within 30 seconds. +- For a sealed answer, the decrypted payload is a bundle holding InsurancePlan resources that validates against the NRCeS profiles. +- For a `ProtocolResponse`, your system shows the code and message from `x-hcx-error_details` and does not try to decrypt. + +## When it goes wrong + +- **The payer says the policy or hospital is unknown.** See [PAYR-1402](../errors/payr-1402.md) and [PAYR-1405](../errors/payr-1405.md). With the dummy payer, use provider id `32722` and policy number `100217`. +- **[PAYR-1406](../errors/payr-1406.md), a request is already in progress.** Wait for the first answer before you ask again. +- **The callback never arrives.** Your callback URL must use a domain name, not an IP address or port. It must run on an India-hosted server that allows the exchange's outbound addresses. See [callback URL requirements](../sandbox/callback-url-requirements.md) and [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). Then ask where the request stands with [use case 13](provider-uc-13.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is wrong. Address the processing ID from [use case 2](provider-uc-02.md), not the payer ID. +- **A `ProtocolResponse` says the payer cannot decrypt.** You sealed with a stale or wrong certificate. See [PAYR-1001](../errors/payr-1001.md) and [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **A `ProtocolResponse` rejects the bundle.** See [PAYR-1049](../errors/payr-1049.md) and [the payer rejects your bundle](../troubleshooting/bundle-rejected.md). Validate against the NRCeS profiles before you send. diff --git a/catalogue/nhcx/tests/provider-uc-07.md b/catalogue/nhcx/tests/provider-uc-07.md new file mode 100644 index 000000000..6aec7487f --- /dev/null +++ b/catalogue/nhcx/tests/provider-uc-07.md @@ -0,0 +1,197 @@ +--- +id: nhcx.test.provider-uc-07 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Provider sandbox exit use case 7: Preauthorization submission' +summary: >- + Prove that your hospital system can send a preauthorisation to a payer through + the claims exchange, and handle both kinds of answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 3-4, Tables 3.2 and 4.1, Use case 7. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-3, Preauth and Test Usecase Action API. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Preauth. +- url: https://hcxsbx.abdm.gov.in/preauthhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/preauthhcxservice.json + hash: sha256:2e8c594c51d9640ae4a576be34a5d190614918d1e7697d6718bc91c31fa66948 + fetched: '2026-09-14' + note: 'API specification: preauthhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/preauth/submit.' +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, items 7 and 8. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-6, Q14 and Q21. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Error scenario. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + - nhcx.concept.claim-cycle + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.recipient-cannot-decrypt + - nhcx.troubleshooting.bundle-rejected + flows: + - nhcx.flow.preauth-submit + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.dummy-payer-process-request + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.preauth-response + - nhcx.fhir.validation + tests: + - nhcx.test.provider-uc-05 + - nhcx.test.provider-uc-08 + - nhcx.test.provider-uc-13 + - nhcx.test.payer-uc-09 + - nhcx.test.tc-pa-01 + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1001 + - nhcx.error.payr-1049 + glossary: + - nhcx.glossary.preauthorisation +--- + +# Provider sandbox exit use case 7: Preauthorization submission + +## In plain words + +A [preauthorisation](../glossary/preauthorisation.md) asks the payer to approve treatment before it happens. This case proves your system can submit one through [NHCX](../../shared/glossary/nhcx.md) and read the payer's decision. + +The decision arrives later on your callback, sealed. A `ProtocolResponse` arrives instead when the payer could not process the request. + +## Before you start + +- Your provider participant exists in the sandbox registry, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 4](provider-uc-04.md). +- You hold the recipient's public certificate from [use case 3](provider-uc-03.md), and your own private key. +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- The recipient is the sandbox dummy payer, participant code `1000003538@hcx`, unless a payer partner answers for you. See [the dummy payer](../sandbox/dummy-payer.md). +- The patient's coverage eligibility check passed in [use case 5](provider-uc-05.md). + +## What happens + +### Send the request + +1. Build a Claim bundle with `use` `preauthorization`. See [the preauthorisation request bundle](../fhir/preauth-request.md). Validate it against the [NRCeS](../../shared/glossary/nrces.md) profiles, as [validating a bundle](../fhir/validation.md) describes. +2. Seal it as a [JWE](../glossary/jwe.md) with the recipient's public key. [Send a sealed request](../flows/send-a-sealed-request.md) walks through the envelope. +3. Set the protected headers. `x-hcx-sender_code` is your participant code. `x-hcx-recipient_code` is the payer's processing ID, or `1000003538@hcx` for the dummy payer. `x-hcx-status` is `request.initiated`. Use a new `x-hcx-api_call_id` and a `x-hcx-correlation_id` unique to this request cycle. `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. +4. Send the sealed payload. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/preauth/submit' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +5. NHCX answers with HTTP 202. Store your `x-hcx-api_call_id` against the case. + +### Make the dummy payer answer + +The dummy payer answers a preauth only when you tell it how. Call its test action API with the correlation id of your request. `action` is `Approve`, `Reject` or `Query`. See [dummy payer, act on a request](../endpoints/dummy-payer-process-request.md). + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer/process/request' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"action": "Approve", "method": "Preauth", "correlationId": ""}' +``` + +### Receive the answer + +1. Wait for `POST /v1/preauth/on_submit` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body from [receive a sealed callback](../flows/receive-a-sealed-callback.md). +3. Read `type` in the body. `ProtocolResponse` means the payer could not process your request. Read `x-hcx-error_details` and do not decrypt. +4. Any other `type` carries a sealed `payload`. Decrypt it with your private key and parse the ClaimResponse bundle. +5. Validate the decrypted bundle against the NRCeS profiles. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> Submit the Preauthorization request from the Provider end. +> +> Callback API should be implemented by provider systems. It should accept the payload in two forms, and it will be derived based on “type” param of the response. +> +> Payload should be validated against the profiles published by NRCES. + +What you observe: + +- NHCX answers your `POST /v1/preauth/submit` with HTTP 202. +- You receive `POST /v1/preauth/on_submit` on your registered endpoint. +- Its `x-hcx-correlation_id` equals the `x-hcx-api_call_id` of your request. Its `x-hcx-recipient_code` is your participant code. +- Your endpoint answers it with HTTP 202 within 30 seconds. +- For a sealed answer, the decrypted payload is a ClaimResponse bundle that validates against the NRCeS profiles. +- For a `ProtocolResponse`, your system shows the code and message from `x-hcx-error_details` and does not try to decrypt. +- With the dummy payer, the decision matches the `action` you sent to `/process/request`. + +## When it goes wrong + +- **Nothing arrives from the dummy payer.** It waits for your `/process/request` call. Send it with the correlation id of your preauthorisation. +- **The callback never arrives.** Your callback URL must use a domain name, not an IP address or port. It must run on an India-hosted server that allows the exchange's outbound addresses. See [callback URL requirements](../sandbox/callback-url-requirements.md) and [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). Then ask where the request stands with [use case 13](provider-uc-13.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is wrong. Address the processing ID from [use case 2](provider-uc-02.md), not the payer ID. +- **[NHCX-1006](../errors/nhcx-1006.md), duplicate request.** You reused a correlation id. A failed request makes its correlation id inactive, so start the next cycle with a new one. +- **A `ProtocolResponse` says the payer cannot decrypt.** You sealed with a stale or wrong certificate. See [PAYR-1001](../errors/payr-1001.md) and [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **A `ProtocolResponse` rejects the bundle.** See [PAYR-1049](../errors/payr-1049.md) and [the payer rejects your bundle](../troubleshooting/bundle-rejected.md). Validate against the NRCeS profiles before you send. +- **The exchange keeps redelivering the same message.** Your endpoint did not return HTTP 202 with the acceptance body within 30 seconds. The exchange retries five times, then deletes the request. See [retries and expiry](../concepts/retries-and-expiry.md). diff --git a/catalogue/nhcx/tests/provider-uc-08.md b/catalogue/nhcx/tests/provider-uc-08.md new file mode 100644 index 000000000..533ab8fa1 --- /dev/null +++ b/catalogue/nhcx/tests/provider-uc-08.md @@ -0,0 +1,185 @@ +--- +id: nhcx.test.provider-uc-08 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Provider sandbox exit use case 8: Respond to communication request received + from payer for additional documents' +summary: >- + Prove that your hospital system can receive a payer's request for more documents + and send the documents back through the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Table 4.2, Use case 8. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, Preauth steps 2-5 and Communication. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Communication (additional docs). +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 6, Query flow and Table 6.2. +- url: https://hcxsbx.abdm.gov.in/communicationhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/communicationhcxservice.json + hash: sha256:0ad58a98851158057d38d42a8327349548644c1b2f1a33b4f94acb4c1840a8a4 + fetched: '2026-09-14' + note: 'API specification: communicationhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/communication/on_request.' +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, Error scenario and Protocol Response. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + - nhcx.concept.queries-and-communication + - nhcx.concept.message-identifiers + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.recipient-cannot-decrypt + - nhcx.troubleshooting.bundle-rejected + flows: + - nhcx.flow.preauth-query-response + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.send-a-sealed-request + endpoints: + - nhcx.endpoint.communication-on-request + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.dummy-payer-process-request + callbacks: + - nhcx.callback.communication-request + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.task + - nhcx.fhir.validation + tests: + - nhcx.test.provider-uc-07 + - nhcx.test.payer-uc-10 + errors: + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1003 + - nhcx.error.payr-1039 + - nhcx.error.payr-1520 + glossary: + - nhcx.glossary.communication-request +--- + +# Provider sandbox exit use case 8: Respond to communication request received from payer for additional documents + +## In plain words + +A payer can pause a preauthorisation or a claim and ask your hospital for more documents. The request arrives on your endpoint as a [communication request](../glossary/communication-request.md), through [NHCX](../../shared/glossary/nhcx.md). This case proves your system receives it and sends the documents back. + +Here the payer starts the exchange. Your system answers it. + +## Before you start + +- Your provider participant exists in the sandbox registry, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 4](provider-uc-04.md). +- You hold the recipient's public certificate from [use case 3](provider-uc-03.md), and your own private key. +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- The recipient is the sandbox dummy payer, participant code `1000003538@hcx`, unless a payer partner answers for you. See [the dummy payer](../sandbox/dummy-payer.md). +- You can submit a preauthorisation, as in [use case 7](provider-uc-07.md). +- You have the documents to send, ready to attach. + +## What happens + +### Get a query from the dummy payer + +1. Submit a preauthorisation to `1000003538@hcx`, as in [use case 7](provider-uc-07.md). +2. Call the dummy payer's `/process/request` with `action` `Query`, `method` `Preauth` and your correlation id. See [dummy payer, act on a request](../endpoints/dummy-payer-process-request.md). + +### Receive the communication request + +1. Wait for `POST /v1/communication/request` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body from [receive a sealed callback](../flows/receive-a-sealed-callback.md). +3. Decrypt the payload. The Task bundle carries a CommunicationRequest naming what the payer wants. + +### Send the documents + +1. Build a Task bundle with a Communication as its input. Put each document in the Communication's `payload.contentAttachment`. Validate it against the [NRCeS](../../shared/glossary/nrces.md) profiles. +2. Seal it with the payer's public key. +3. Set the protected headers. Use a new `x-hcx-api_call_id`. Set `x-hcx-correlation_id` to the `x-hcx-api_call_id` of the communication request. Set `x-hcx-recipient_code` to its `x-hcx-sender_code`, and `x-hcx-status` to `response.complete`. +4. Send it to [`/v1/communication/on_request`](../endpoints/communication-on-request.md). + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/communication/on_request' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"type": "JWEPayload", "payload": ""}' +``` + +5. NHCX answers with HTTP 202. +6. Wait for the final decision on `POST /v1/preauth/on_submit`, and answer it with HTTP 202 within 30 seconds. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> Respond to the communication Request via NHCX. This API will be called by payers to seek more details of the case submitted by providers for Preauthorization or for Claims. +> +> Encrypted payload of TaskBundle should have Comunication as input. +> +> Payload should be validated against the profiles published by NRCES. + +What you observe: + +- You receive `POST /v1/communication/request` and answer it with HTTP 202 within 30 seconds. +- NHCX answers your `POST /v1/communication/on_request` with HTTP 202. +- No `/v1/error` report arrives for your answer. +- The final decision arrives on `POST /v1/preauth/on_submit` for the same case. + +## When it goes wrong + +- **The communication request never arrives.** Check your registered endpoint against the [callback URL requirements](../sandbox/callback-url-requirements.md). With the dummy payer, confirm you sent `action` `Query`. +- **The payer refuses the documents.** A Communication needs its payload and identifier. See [PAYR-1039](../errors/payr-1039.md) and [PAYR-1520](../errors/payr-1520.md). +- **A [PMJAY](../glossary/pmjay.md) payer never sends one.** PMJAY payers raise queries on the preauthorisation or claim callback, with a workflow id. See [TC-PA-02](tc-pa-02.md). +- **[NHCX-1010](../errors/nhcx-1010.md), no data for the correlation id.** Your message's `x-hcx-correlation_id` is not the `x-hcx-api_call_id` of the request you answer. +- **[NHCX-1011](../errors/nhcx-1011.md), invalid status.** `x-hcx-status` holds a value the exchange does not accept for this message. Use `response.complete` on an answer and `request.initiated` on a request. +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is wrong. Copy it from the `x-hcx-sender_code` of the request you answer. +- **A `/v1/error` report arrives at your endpoint.** The recipient refused your message after the exchange accepted it. Read the details as [receiving /v1/error](../callbacks/error.md) describes. +- **The exchange keeps redelivering the same message.** Your endpoint did not return HTTP 202 with the acceptance body within 30 seconds. The exchange retries five times, then deletes the request. See [retries and expiry](../concepts/retries-and-expiry.md). diff --git a/catalogue/nhcx/tests/provider-uc-09.md b/catalogue/nhcx/tests/provider-uc-09.md new file mode 100644 index 000000000..3e85f3e14 --- /dev/null +++ b/catalogue/nhcx/tests/provider-uc-09.md @@ -0,0 +1,197 @@ +--- +id: nhcx.test.provider-uc-09 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Provider sandbox exit use case 9: Claim submission' +summary: >- + Prove that your hospital system can send a claim to a payer through the claims + exchange, and handle both kinds of answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-5, Tables 4.3 and 5.1, Use case 9. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-3, Claim and Test Usecase Action API. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Claim. +- url: https://hcxsbx.abdm.gov.in/claimhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/claimhcxservice.json + hash: sha256:488eea449c6ee45dc324f4f7c095a862c7d50d0e238075846122b51b2bab4878 + fetched: '2026-09-14' + note: 'API specification: claimhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/claim/submit.' +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, items 7 and 8. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-6, Q14 and Q21. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Error scenario. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + - nhcx.concept.claim-cycle + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.recipient-cannot-decrypt + - nhcx.troubleshooting.bundle-rejected + flows: + - nhcx.flow.claim-submit + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + endpoints: + - nhcx.endpoint.claim-submit + - nhcx.endpoint.dummy-payer-process-request + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.claim-response + - nhcx.fhir.validation + tests: + - nhcx.test.provider-uc-07 + - nhcx.test.provider-uc-11 + - nhcx.test.provider-uc-13 + - nhcx.test.payer-uc-11 + - nhcx.test.tc-cl-01 + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1001 + - nhcx.error.payr-1049 + glossary: + - nhcx.glossary.claim +--- + +# Provider sandbox exit use case 9: Claim submission + +## In plain words + +A [claim](../glossary/claim.md) asks the payer to settle the bill after treatment. This case proves your system can submit one through [NHCX](../../shared/glossary/nhcx.md) and read the payer's decision. + +The decision arrives later on your callback, sealed. A `ProtocolResponse` arrives instead when the payer could not process the claim. + +## Before you start + +- Your provider participant exists in the sandbox registry, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 4](provider-uc-04.md). +- You hold the recipient's public certificate from [use case 3](provider-uc-03.md), and your own private key. +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- The recipient is the sandbox dummy payer, participant code `1000003538@hcx`, unless a payer partner answers for you. See [the dummy payer](../sandbox/dummy-payer.md). +- You know the preauthorisation the claim settles, from [use case 7](provider-uc-07.md). + +## What happens + +### Send the request + +1. Build a Claim bundle with `use` `claim`. See [the claim request bundle](../fhir/claim-request.md). Validate it against the [NRCeS](../../shared/glossary/nrces.md) profiles, as [validating a bundle](../fhir/validation.md) describes. +2. Seal it as a [JWE](../glossary/jwe.md) with the recipient's public key. [Send a sealed request](../flows/send-a-sealed-request.md) walks through the envelope. +3. Set the protected headers. `x-hcx-sender_code` is your participant code. `x-hcx-recipient_code` is the payer's processing ID, or `1000003538@hcx` for the dummy payer. `x-hcx-status` is `request.initiated`. Use a new `x-hcx-api_call_id` and a `x-hcx-correlation_id` unique to this request cycle. `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. +4. Send the sealed payload. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/claim/submit' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +5. NHCX answers with HTTP 202. Store your `x-hcx-api_call_id` against the case. + +### Make the dummy payer answer + +The dummy payer answers a claim only when you tell it how. Call its test action API with the correlation id of your request. `action` is `Approve`, `Reject` or `Query`. See [dummy payer, act on a request](../endpoints/dummy-payer-process-request.md). + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer/process/request' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"action": "Approve", "method": "Claim", "correlationId": ""}' +``` + +### Receive the answer + +1. Wait for `POST /v1/claim/on_submit` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body from [receive a sealed callback](../flows/receive-a-sealed-callback.md). +3. Read `type` in the body. `ProtocolResponse` means the payer could not process your request. Read `x-hcx-error_details` and do not decrypt. +4. Any other `type` carries a sealed `payload`. Decrypt it with your private key and parse the ClaimResponse bundle. +5. Validate the decrypted bundle against the NRCeS profiles. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> Submit the Claim from the Provider end to the NHCX. +> +> Callback API should be implemented by provider systems. It should accept the payload in two forms, and it will be derived based on “type” param of the response. +> +> Payload should be validated against the profiles published by NRCES. + +What you observe: + +- NHCX answers your `POST /v1/claim/submit` with HTTP 202. +- You receive `POST /v1/claim/on_submit` on your registered endpoint. +- Its `x-hcx-correlation_id` equals the `x-hcx-api_call_id` of your request. Its `x-hcx-recipient_code` is your participant code. +- Your endpoint answers it with HTTP 202 within 30 seconds. +- For a sealed answer, the decrypted payload is a ClaimResponse bundle that validates against the NRCeS profiles. +- For a `ProtocolResponse`, your system shows the code and message from `x-hcx-error_details` and does not try to decrypt. +- With the dummy payer, the decision matches the `action` you sent to `/process/request`. + +## When it goes wrong + +- **Nothing arrives from the dummy payer.** It waits for your `/process/request` call, with `method` `Claim` and the correlation id of your claim. +- **The callback never arrives.** Your callback URL must use a domain name, not an IP address or port. It must run on an India-hosted server that allows the exchange's outbound addresses. See [callback URL requirements](../sandbox/callback-url-requirements.md) and [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). Then ask where the request stands with [use case 13](provider-uc-13.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is wrong. Address the processing ID from [use case 2](provider-uc-02.md), not the payer ID. +- **[NHCX-1006](../errors/nhcx-1006.md), duplicate request.** You reused a correlation id. A failed request makes its correlation id inactive, so start the next cycle with a new one. +- **A `ProtocolResponse` says the payer cannot decrypt.** You sealed with a stale or wrong certificate. See [PAYR-1001](../errors/payr-1001.md) and [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **A `ProtocolResponse` rejects the bundle.** See [PAYR-1049](../errors/payr-1049.md) and [the payer rejects your bundle](../troubleshooting/bundle-rejected.md). Validate against the NRCeS profiles before you send. +- **The exchange keeps redelivering the same message.** Your endpoint did not return HTTP 202 with the acceptance body within 30 seconds. The exchange retries five times, then deletes the request. See [retries and expiry](../concepts/retries-and-expiry.md). diff --git a/catalogue/nhcx/tests/provider-uc-10.md b/catalogue/nhcx/tests/provider-uc-10.md new file mode 100644 index 000000000..7762b4e1e --- /dev/null +++ b/catalogue/nhcx/tests/provider-uc-10.md @@ -0,0 +1,177 @@ +--- +id: nhcx.test.provider-uc-10 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Provider sandbox exit use case 10: Claim search' +summary: >- + Prove that your hospital system can search a payer's claim records through the + claims exchange, and handle both kinds of answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 5, Tables 5.2, Use case 10. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Search. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1. +- url: https://hcxsbx.abdm.gov.in/searchhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/searchhcxservice.json + hash: sha256:21749dd2ba84a19c5523772da359d76293493d44b48651f1af2e6042d78fa296 + fetched: '2026-09-14' + note: 'API specification: searchhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/search/submit.' +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, items 7 and 8. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-6, Q14 and Q21. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Error scenario. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.recipient-cannot-decrypt + - nhcx.troubleshooting.bundle-rejected + flows: + - nhcx.flow.claim-search + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + endpoints: + - nhcx.endpoint.search-submit + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.search-on-submit + fhir: + - nhcx.fhir.task + - nhcx.fhir.claim-response + - nhcx.fhir.validation + tests: + - nhcx.test.provider-uc-09 + - nhcx.test.provider-uc-13 + - nhcx.test.payer-uc-12 + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1001 + - nhcx.error.payr-1049 +--- + +# Provider sandbox exit use case 10: Claim search + +## In plain words + +This case proves your system can search a payer's claim records through [NHCX](../../shared/glossary/nhcx.md). You send search criteria, such as a claim number or a date range. The matching claim responses arrive later on your callback. + +A `ProtocolResponse` arrives instead when the payer could not process the search. + +## Before you start + +- Your provider participant exists in the sandbox registry, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 4](provider-uc-04.md). +- You hold the recipient's public certificate from [use case 3](provider-uc-03.md), and your own private key. +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- A payer partner answers search requests. The dummy payer answers insurance plan, coverage eligibility, preauthorisation, claim, payment notice and communication only. See [the dummy payer](../sandbox/dummy-payer.md). +- You have at least one claim with that payer, from [use case 9](provider-uc-09.md). + +## What happens + +### Send the request + +1. Build a Task bundle for the search, with your criteria as Task inputs: claim number, from date, to date, policy number or product number. See [the task bundle](../fhir/task.md). Validate it against the [NRCeS](../../shared/glossary/nrces.md) profiles, as [validating a bundle](../fhir/validation.md) describes. +2. Seal it as a [JWE](../glossary/jwe.md) with the recipient's public key. [Send a sealed request](../flows/send-a-sealed-request.md) walks through the envelope. +3. Set the protected headers. `x-hcx-sender_code` is your participant code. `x-hcx-recipient_code` is the payer's processing ID. `x-hcx-status` is `request.initiated`. Use a new `x-hcx-api_call_id` and a `x-hcx-correlation_id` unique to this request cycle. `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. +4. Send the sealed payload. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/search/submit' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +5. NHCX answers with HTTP 202. Store your `x-hcx-api_call_id` against the case. + +### Receive the answer + +1. Wait for `POST /v1/search/on_submit` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body from [receive a sealed callback](../flows/receive-a-sealed-callback.md). +3. Read `type` in the body. `ProtocolResponse` means the payer could not process your request. Read `x-hcx-error_details` and do not decrypt. +4. Any other `type` carries a sealed `payload`. Decrypt it with your private key and parse the Task bundle, whose Task output carries the matching ClaimResponse resources. +5. Validate the decrypted bundle against the NRCeS profiles. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> To search the claim related information by the providers/regulatory bodies +> +> Callback API should be implemented by provider systems. It should accept the payload in two forms, and it will be derived based on “type” param of the response. +> +> Payload should be validated against the profiles published by NRCES. + +What you observe: + +- NHCX answers your `POST /v1/search/submit` with HTTP 202. +- You receive `POST /v1/search/on_submit` on your registered endpoint. +- Its `x-hcx-correlation_id` equals the `x-hcx-api_call_id` of your request. Its `x-hcx-recipient_code` is your participant code. +- Your endpoint answers it with HTTP 202 within 30 seconds. +- For a sealed answer, the decrypted payload is a Task bundle that validates against the NRCeS profiles. +- For a `ProtocolResponse`, your system shows the code and message from `x-hcx-error_details` and does not try to decrypt. +- The ClaimResponse resources in the answer match your criteria, for example your claim number. + +## When it goes wrong + +- **The callback never arrives.** Your callback URL must use a domain name, not an IP address or port. It must run on an India-hosted server that allows the exchange's outbound addresses. See [callback URL requirements](../sandbox/callback-url-requirements.md) and [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). Then ask where the request stands with [use case 13](provider-uc-13.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is wrong. Address the processing ID from [use case 2](provider-uc-02.md), not the payer ID. +- **[NHCX-1006](../errors/nhcx-1006.md), duplicate request.** You reused a correlation id. A failed request makes its correlation id inactive, so start the next cycle with a new one. +- **A `ProtocolResponse` says the payer cannot decrypt.** You sealed with a stale or wrong certificate. See [PAYR-1001](../errors/payr-1001.md) and [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **A `ProtocolResponse` rejects the bundle.** See [PAYR-1049](../errors/payr-1049.md) and [the payer rejects your bundle](../troubleshooting/bundle-rejected.md). Validate against the NRCeS profiles before you send. +- **The exchange keeps redelivering the same message.** Your endpoint did not return HTTP 202 with the acceptance body within 30 seconds. The exchange retries five times, then deletes the request. See [retries and expiry](../concepts/retries-and-expiry.md). diff --git a/catalogue/nhcx/tests/provider-uc-11.md b/catalogue/nhcx/tests/provider-uc-11.md new file mode 100644 index 000000000..437c34cfe --- /dev/null +++ b/catalogue/nhcx/tests/provider-uc-11.md @@ -0,0 +1,184 @@ +--- +id: nhcx.test.provider-uc-11 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Provider sandbox exit use case 11: Acknowledge payment notice' +summary: >- + Prove that your hospital system can receive a payer's payment notice and acknowledge + it through the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 5-6, Tables 5.3 and 6.1, Use case 11. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 2-3, Payment Notice and trigger API. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet PaymentNotice. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, row Payment Notice Recived. +- url: https://hcxsbx.abdm.gov.in/servicehcxpayment/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/servicehcxpayment.json + hash: sha256:f5c9e3728efbbeaa5e0e8083334b0ae60a05930e5a1e096ca06d40abb235d658 + fetched: '2026-09-14' + note: 'API specification: servicehcxpayment, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/paymentnotice/on_request.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Q2; page 4, Q14. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, Error scenario and Protocol Response. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + - nhcx.concept.workflow-codes + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.recipient-cannot-decrypt + - nhcx.troubleshooting.bundle-rejected + flows: + - nhcx.flow.payment-notice + - nhcx.flow.receive-a-sealed-callback + endpoints: + - nhcx.endpoint.paymentnotice-on-request + - nhcx.endpoint.dummy-payer-paymentnotice-init + callbacks: + - nhcx.callback.paymentnotice-request + fhir: + - nhcx.fhir.payment-notice + - nhcx.fhir.task + - nhcx.fhir.validation + tests: + - nhcx.test.provider-uc-09 + - nhcx.test.payer-uc-13 + errors: + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1011 + - nhcx.error.nhcx-1003 + glossary: + - nhcx.glossary.payment-notice +--- + +# Provider sandbox exit use case 11: Acknowledge payment notice + +## In plain words + +When a payer pays a claim, it sends your hospital a [payment notice](../glossary/payment-notice.md) through [NHCX](../../shared/glossary/nhcx.md). The notice carries the payment date, the amount and the bank transaction reference. This case proves your system receives it and sends an acknowledgement back. + +Here the payer starts the exchange. Your system answers it. + +## Before you start + +- Your provider participant exists in the sandbox registry, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 4](provider-uc-04.md). +- You hold the recipient's public certificate from [use case 3](provider-uc-03.md), and your own private key. +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- The recipient is the sandbox dummy payer, participant code `1000003538@hcx`, unless a payer partner answers for you. See [the dummy payer](../sandbox/dummy-payer.md). +- You have the claim number of a claim you submitted in [use case 9](provider-uc-09.md). + +## What happens + +### Get a payment notice from the dummy payer + +1. Call the dummy payer's payment notice trigger with your participant code and the claim number. See [dummy payer, send a payment notice](../endpoints/dummy-payer-paymentnotice-init.md). + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/pmjay/sbxhcx/dummyhcxpayer/paymentNotice/init' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"providerId": "", "claimNumber": ""}' +``` + +### Receive the notice + +1. Wait for `POST /v1/paymentnotice/request` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body. +3. Decrypt the payload. Store the payment date, amount and `paymentIdentifier` from the PaymentReconciliation. + +### Send the acknowledgement + +1. Build a Task bundle whose Task acknowledges the notice. See [the payment notice bundle](../fhir/payment-notice.md). Validate it against the [NRCeS](../../shared/glossary/nrces.md) profiles. +2. Seal it with the payer's public key. +3. Set the protected headers. Use a new `x-hcx-api_call_id`. Set `x-hcx-correlation_id` to the `x-hcx-api_call_id` of the notice. Set `x-hcx-recipient_code` to its `x-hcx-sender_code`. Set `x-hcx-workflow_id` to `17` and `x-hcx-status` to `response.complete`. +4. Send it to [`/v1/paymentnotice/on_request`](../endpoints/paymentnotice-on-request.md). + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/paymentnotice/on_request' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"type": "JWEPayload", "payload": ""}' +``` + +5. NHCX answers with HTTP 202. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> Acknowledge the payment notification sent by the Payer. +> +> Encrypted payload of TaskBundle with Task Resource +> +> Payload should be validated against the profiles published by NRCES. + +What you observe: + +- You receive `POST /v1/paymentnotice/request` and answer it with HTTP 202 within 30 seconds. +- Your system shows the payment date, amount and bank transaction reference for the claim. +- NHCX answers your `POST /v1/paymentnotice/on_request` with HTTP 202. +- No `/v1/error` report arrives for your acknowledgement. + +## When it goes wrong + +- **The notice never arrives.** Check your registered endpoint against the [callback URL requirements](../sandbox/callback-url-requirements.md). With the dummy payer, send a claim number you submitted. +- **Your acknowledgement goes nowhere.** Build the URL as `https://apisbx.abdm.gov.in/hcx/v1/paymentnotice/on_request`, with a slash after `.in`. +- **[NHCX-1010](../errors/nhcx-1010.md), no data for the correlation id.** Your message's `x-hcx-correlation_id` is not the `x-hcx-api_call_id` of the request you answer. +- **[NHCX-1011](../errors/nhcx-1011.md), invalid status.** `x-hcx-status` holds a value the exchange does not accept for this message. Use `response.complete` on an answer and `request.initiated` on a request. +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is wrong. Copy it from the `x-hcx-sender_code` of the request you answer. +- **A `/v1/error` report arrives at your endpoint.** The recipient refused your message after the exchange accepted it. Read the details as [receiving /v1/error](../callbacks/error.md) describes. +- **The exchange keeps redelivering the same message.** Your endpoint did not return HTTP 202 with the acceptance body within 30 seconds. The exchange retries five times, then deletes the request. See [retries and expiry](../concepts/retries-and-expiry.md). diff --git a/catalogue/nhcx/tests/provider-uc-12.md b/catalogue/nhcx/tests/provider-uc-12.md new file mode 100644 index 000000000..72c7d3424 --- /dev/null +++ b/catalogue/nhcx/tests/provider-uc-12.md @@ -0,0 +1,185 @@ +--- +id: nhcx.test.provider-uc-12 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Provider sandbox exit use case 12: Request for reprocess or cancel' +summary: >- + Prove that your hospital system can ask a payer to reprocess or cancel a claim + or preauthorisation through the claims exchange. +sources: +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 6, Table 6.2, Use case 12. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Reprocess. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. sheet Scenarios, rows 9 and 12. +- url: https://hcxsbx.abdm.gov.in/images/819467ec15aff13cc2a8.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf + hash: sha256:97335ebc4cd32c86e0c34328b2f4c526420b32a7a009208364043d6334e9e757 + fetched: '2026-09-14' + note: NHCX Dummy Payer Implementation, row 19 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1. +- url: https://hcxsbx.abdm.gov.in/taskhcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/taskhcxservice.json + hash: sha256:0418eca6478dece4d72c5a49a6547d50772511f7ffaf32f901f245591ba84656 + fetched: '2026-09-14' + note: 'API specification: taskhcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/task/submit.' +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, items 7 and 8. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-6, Q14 and Q21. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + concepts: + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + - nhcx.concept.four-message-legs + - nhcx.concept.reprocess-and-cancel + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.dummy-payer + - nhcx.sandbox.callback-url-requirements + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + - nhcx.troubleshooting.recipient-cannot-decrypt + - nhcx.troubleshooting.bundle-rejected + flows: + - nhcx.flow.claim-reprocess + - nhcx.flow.preauth-cancel + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + endpoints: + - nhcx.endpoint.task-submit + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.task-on-submit + fhir: + - nhcx.fhir.task + - nhcx.fhir.validation + tests: + - nhcx.test.provider-uc-07 + - nhcx.test.provider-uc-09 + - nhcx.test.payer-uc-14 + - nhcx.test.tc-cl-03 + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1003 + - nhcx.error.nhcx-1006 + - nhcx.error.payr-1001 + - nhcx.error.payr-1049 + - nhcx.error.payr-1518 + - nhcx.error.payr-1519 + - nhcx.error.payr-1253 + - nhcx.error.payr-1257 + glossary: + - nhcx.glossary.reprocess +--- + +# Provider sandbox exit use case 12: Request for reprocess or cancel + +## In plain words + +After a rejection or a partial approval, your hospital can ask the payer to [reprocess](../glossary/reprocess.md) the case. You can also cancel a preauthorisation until the claim is raised. Both go to the payer as a Task, through [NHCX](../../shared/glossary/nhcx.md). This case proves your system sends one and reads the answer. + +A `ProtocolResponse` arrives instead when the payer could not process the task. + +## Before you start + +- Your provider participant exists in the sandbox registry, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 4](provider-uc-04.md). +- You hold the recipient's public certificate from [use case 3](provider-uc-03.md), and your own private key. +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). +- A payer partner answers task requests. The dummy payer answers insurance plan, coverage eligibility, preauthorisation, claim, payment notice and communication only. See [the dummy payer](../sandbox/dummy-payer.md). +- A case in the right state. To reprocess, a claim that was rejected or partly approved. To cancel, a preauthorisation with no claim raised yet. + +## What happens + +### Send the request + +1. Build a Task bundle. The Task `code` is `reprocess`, `cancel`, `release` or `nullify`, as the case needs. Its `status` is `requested`, and its input carries the claim number. See [the task bundle](../fhir/task.md). Validate it against the [NRCeS](../../shared/glossary/nrces.md) profiles, as [validating a bundle](../fhir/validation.md) describes. +2. Seal it as a [JWE](../glossary/jwe.md) with the recipient's public key. [Send a sealed request](../flows/send-a-sealed-request.md) walks through the envelope. +3. Set the protected headers. `x-hcx-sender_code` is your participant code. `x-hcx-recipient_code` is the payer's processing ID. `x-hcx-status` is `request.initiated`. Use a new `x-hcx-api_call_id` and a `x-hcx-correlation_id` unique to this request cycle. `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. +4. Send the sealed payload. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/task/submit' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +5. NHCX answers with HTTP 202. Store your `x-hcx-api_call_id` against the case. + +### Receive the answer + +1. Wait for `POST /v1/task/on_submit` on your registered endpoint. +2. Answer it with HTTP 202 within 30 seconds, with the acceptance body from [receive a sealed callback](../flows/receive-a-sealed-callback.md). +3. Read `type` in the body. `ProtocolResponse` means the payer could not process your request. Read `x-hcx-error_details` and do not decrypt. +4. Any other `type` carries a sealed `payload`. Decrypt it with your private key and parse the Task bundle. +5. Validate the decrypted bundle against the NRCeS profiles. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +also: Send the FHIR bundles you used to hcx.integration@nha.gov.in for validation by the NRCeS team. +``` + +## How you know it worked + +The pass criterion for this case: + +> To reprocess/cancel the claims or preauthorisations, in case of rejection or partial approval provider can raise reprocess. +> +> Callback API should be implemented by provider systems. It should accept the payload in two forms, and it will be derived based on “type” param of the response. +> +> Payload should be validated against the profiles published by NRCES. + +What you observe: + +- NHCX answers your `POST /v1/task/submit` with HTTP 202. +- You receive `POST /v1/task/on_submit` on your registered endpoint. +- Its `x-hcx-correlation_id` equals the `x-hcx-api_call_id` of your request. Its `x-hcx-recipient_code` is your participant code. +- Your endpoint answers it with HTTP 202 within 30 seconds. +- For a sealed answer, the decrypted payload is a Task bundle that validates against the NRCeS profiles. +- For a `ProtocolResponse`, your system shows the code and message from `x-hcx-error_details` and does not try to decrypt. + +## When it goes wrong + +- **The payer finds no task input.** See [PAYR-1518](../errors/payr-1518.md) and [PAYR-1519](../errors/payr-1519.md). Every input needs a type and a value. +- **A cancel is refused.** The case is already cancelled, or payment has started. See [PAYR-1253](../errors/payr-1253.md) and [PAYR-1257](../errors/payr-1257.md). +- **The callback never arrives.** Your callback URL must use a domain name, not an IP address or port. It must run on an India-hosted server that allows the exchange's outbound addresses. See [callback URL requirements](../sandbox/callback-url-requirements.md) and [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). Then ask where the request stands with [use case 13](provider-uc-13.md). +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. +- **[NHCX-1003](../errors/nhcx-1003.md), receiver not registered.** `x-hcx-recipient_code` is wrong. Address the processing ID from [use case 2](provider-uc-02.md), not the payer ID. +- **[NHCX-1006](../errors/nhcx-1006.md), duplicate request.** You reused a correlation id. A failed request makes its correlation id inactive, so start the next cycle with a new one. +- **A `ProtocolResponse` says the payer cannot decrypt.** You sealed with a stale or wrong certificate. See [PAYR-1001](../errors/payr-1001.md) and [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md). +- **A `ProtocolResponse` rejects the bundle.** See [PAYR-1049](../errors/payr-1049.md) and [the payer rejects your bundle](../troubleshooting/bundle-rejected.md). Validate against the NRCeS profiles before you send. diff --git a/catalogue/nhcx/tests/provider-uc-13.md b/catalogue/nhcx/tests/provider-uc-13.md new file mode 100644 index 000000000..7804f7a61 --- /dev/null +++ b/catalogue/nhcx/tests/provider-uc-13.md @@ -0,0 +1,144 @@ +--- +id: nhcx.test.provider-uc-13 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'Provider sandbox exit use case 13: Get status' +summary: >- + Prove that your hospital system can ask the claims exchange where one of its earlier + requests stands, and read the answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/30714ca3bc1fa2ca3ec4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Provider Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:1098cd595c986dca11bd09f2baad78f32b85ed68cec83524b5ec189643bade6a + fetched: '2026-09-14' + note: NHCX Provider Side Use Cases- Sandbox Exit Process, row 9 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 6-7, Tables 6.3 and 7.1, Use case 13. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Status. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Status Description (Protected Header). +- url: https://hcxsbx.abdm.gov.in/statushcxservice/api-docs + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/swagger/statushcxservice.json + hash: sha256:93b6355a234ef56607427fcdfa32da4921124180c9df08ecd73c8af8955c2adf + fetched: '2026-09-14' + note: 'API specification: statushcxservice, row 23 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/technical-specifications/api-specifications. paths./v1/status.' +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 4, Q14; page 2, Q3. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, Integrator's Journey. +verified: + status: unverified +related: + flows: + - nhcx.flow.status-check + - nhcx.flow.send-a-sealed-request + endpoints: + - nhcx.endpoint.status + - nhcx.endpoint.fetch-certs + callbacks: + - nhcx.callback.on-status + concepts: + - nhcx.concept.status-lifecycle + - nhcx.concept.protocol-headers + - nhcx.concept.message-identifiers + decisions: + - nhcx.decision.status-poll-or-wait + sandbox: + - nhcx.sandbox.sandbox-exit + - nhcx.sandbox.callback-url-requirements + tests: + - nhcx.test.provider-uc-07 + - nhcx.test.payer-uc-15 + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback + errors: + - nhcx.error.nhcx-401 + - nhcx.error.nhcx-1012 +--- + +# Provider sandbox exit use case 13: Get status + +## In plain words + +Every request through [NHCX](../../shared/glossary/nhcx.md) is answered later, so a request can seem to vanish. This case proves your system can ask the exchange where one of its own requests stands. The answer arrives on your callback as the protocol headers of that request. + +It is one of the thirteen provider use cases for [sandbox exit](../glossary/sandbox-exit.md). The exchange answers this call itself. + +## Before you start + +- Your provider participant exists in the sandbox registry, and you know its [participant code](../glossary/participant-code.md). [Onboard in the sandbox](../flows/sandbox-onboarding.md) gets you there. +- You hold a current session token from [use case 4](provider-uc-04.md). +- You sent a request earlier, for example in [use case 7](provider-uc-07.md), and stored its `x-hcx-api_call_id`. +- Your registered endpoint URL takes HTTPS calls from the exchange. See [callback URL requirements](../sandbox/callback-url-requirements.md). + +## What happens + +### Send the status request + +1. Build the status request as a [JWE](../glossary/jwe.md), as [`/v1/status`](../endpoints/status.md) describes. +2. Set the protected headers. Use a new `x-hcx-api_call_id`. Set `x-hcx-correlation_id` to the `x-hcx-api_call_id` of the request you ask about. Set `x-hcx-recipient_code` to that request's recipient, and `x-hcx-status` to `request.initiated`. `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. +3. Send it. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/status' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +4. NHCX answers with HTTP 202. + +### Receive the status + +1. Wait for `POST /v1/on_status` on your registered endpoint. Answer it with HTTP 202 within 30 seconds. +2. Read the protocol headers it carries. `x-hcx-status` names the stage. `request.queued` means the request waits at the exchange. `request.dispatched` means it reached the recipient's system. + +### Demonstrate it + +Sign-off needs people. Book the demos once the steps above pass in your own runs. See [the sandbox exit process](../sandbox/sandbox-exit.md). + +```precondition +human: true +who: your team, with the NHA team +action: Demonstrate this use case in the internal demo, then in the Health Tech Committee (HTC) demo. +how: Email hcx.integration@nha.gov.in to request both demos. +``` + +## How you know it worked + +The pass criterion for this case: + +> Retrieve the status of any request that has been triggered to NHCX +> +> Callback API should be implemented by provider systems. It should accept the payload as ProtocolHeader contains all the attributes. +> +> Payload should be validated against the profiles published by NRCES. + +What you observe: + +- NHCX answers your `POST /v1/status` with HTTP 202. +- You receive `POST /v1/on_status` carrying the protocol headers of the request you asked about. +- Your endpoint answers it with HTTP 202 within 30 seconds. +- Your system shows the request's stage from `x-hcx-status`. + +## When it goes wrong + +- **[NHCX-1012](../errors/nhcx-1012.md), no records for the API call id.** `x-hcx-correlation_id` must be the `x-hcx-api_call_id` of a request your participant sent. +- **The status never arrives.** Check your registered endpoint against the [callback URL requirements](../sandbox/callback-url-requirements.md). +- **The status stays at `request.queued`.** The recipient has not taken the request. See [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md) before you resend anything. +- **HTTP 401 on the call.** The token has expired, or went in without the `Bearer ` prefix. See [NHCX-401](../errors/nhcx-401.md) and fetch a new token. diff --git a/catalogue/nhcx/tests/tc-abha-01.md b/catalogue/nhcx/tests/tc-abha-01.md new file mode 100644 index 000000000..7d961e24b --- /dev/null +++ b/catalogue/nhcx/tests/tc-abha-01.md @@ -0,0 +1,161 @@ +--- +id: nhcx.test.tc-abha-01 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'TC-ABHA-01: Validate PMJAY policy using ABHA' +summary: >- + Check that your hospital system can confirm a government scheme patient's policy + is active, using their health account number. +sources: +- url: https://hcxsbx.abdm.gov.in/images/4d333fa6ce5ef99920de.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Test Cases.xlsx + hash: sha256:0d95021974cfe81ab2e3bf66f983228a70b8fed8d7d251eb6d7eeab7354ecad2 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Test Cases, row 31 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet1, row TC-ABHA-01. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 7.3, 7.4 and 7.6. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 19, Biometric Authentication; page 26, 8.3.1 Validation. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. sheet Scenarios, row 3. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-6, Q14 and Q21. +verified: + status: unverified +related: + flows: + - nhcx.flow.pmjay-patient-to-cashless + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.biometric-face + concepts: + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.hmis-integration-architecture + - nhcx.concept.workflow-codes + - nhcx.concept.coverage-eligibility-purposes + - nhcx.concept.biometric-authentication + sandbox: + - nhcx.sandbox.test-participants + glossary: + - nhcx.glossary.pmjay + endpoints: + - nhcx.endpoint.coverageeligibility-check + - nhcx.endpoint.participant-get-policies + - nhcx.endpoint.abha-biometric-auth-init + - nhcx.endpoint.abha-biometric-auth-verify + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + - nhcx.fhir.validation + decisions: + - nhcx.decision.eligibility-purpose + - nhcx.decision.biometric-modality + tests: + - nhcx.test.provider-uc-02 + - nhcx.test.provider-uc-05 + - nhcx.test.tc-hbp-01 + - nhcx.test.tc-ce-01 + errors: + - nhcx.error.nhcx-1018 + - nhcx.error.payr-1005 + - nhcx.error.payr-1123 + - nhcx.error.payr-1006 + - nhcx.error.payr-1007 + - nhcx.error.payr-1101 + - nhcx.error.payr-1272 +--- + +# TC-ABHA-01: Validate PMJAY policy using ABHA + +## In plain words + +This test case checks the first exchange of a [PMJAY](../glossary/pmjay.md) admission. Your [HMIS](../../shared/glossary/hmis.md) sends a coverage eligibility request with purpose `validation` for the patient's [ABHA](../../shared/glossary/abha.md) number. The payer answers on your callback with the patient's cover and wallet position. + +It is the happy path: a linked ABHA number and an active policy. + +## Before you start + +- The test case pre-condition holds: valid ABHA, consent available. +- The beneficiary's ABHA number is linked to their PMJAY policy. [Use case 2](provider-uc-02.md) returns the policy. +- The beneficiary is authenticated, or has a signed exemption consent on record. See [fingerprint or iris authentication](../flows/biometric-fingerprint-iris.md) and [face authentication](../flows/biometric-face.md). + +```precondition +human: true +who: the beneficiary, present at the hospital, and your front desk operator +action: Authenticate the beneficiary by fingerprint, iris or face. Keep the user token it returns. +valid_for: 30 minutes. Refresh it automatically until the transaction cycle ends. +fallback: Where biometric authentication is not feasible, record an Aadhaar exemption consent signed by the beneficiary and a hospital representative. +``` + +- Your provider sandbox basics pass. You hold a session token ([use case 4](provider-uc-04.md)) and the payer's certificate ([use case 3](provider-uc-03.md)). Your callback endpoint works ([use case 5](provider-uc-05.md)). +- You address the PMJAY payer by the processing ID from [use case 2](provider-uc-02.md). + +## What happens + +| Test case field | Value | +|---|---| +| API / FHIR Resource | CoverageEligibilityRequest (validation) | +| Input Parameters | ABHA: `91-XXXX-XXXX-XXXX`, Purpose: `validation` | + +1. Build a CoverageEligibilityRequest bundle with `purpose` `validation`. Include the PMJAY member ID or ABHA number, the active Coverage, the provider and insurer Organizations, and a PractitionerRole as enterer. See [the request bundle](../fhir/coverage-eligibility-request.md). +2. Validate the bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles, as [validating a bundle](../fhir/validation.md) describes. +3. Seal it as a [JWE](../glossary/jwe.md) with the PMJAY payer's public key. +4. Set the protected headers. `x-hcx-status` is `request.initiated`. Pass the biometric user token as a header parameter on the request. `x-hcx-recipient_code` is the payer's processing ID, and `x-hcx-ben-abha-id` carries the beneficiary's ABHA number. +5. Send it. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/coverageeligibility/check' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +6. [NHCX](../../shared/glossary/nhcx.md) answers with HTTP 202. +7. Wait for `POST /v1/coverageeligibility/on_check` on your registered endpoint. Answer it with HTTP 202 within 30 seconds. +8. Decrypt the payload with your private key and read the CoverageEligibilityResponse. + +## How you know it worked + +The pass criterion for TC-ABHA-01: + +| Field | Value | +|---|---| +| Processing / validation rules | Check ABHA linkage and active policy | +| Expected output | CoverageEligibilityResponse with active coverage | +| Remarks | Happy path | + +What you observe: + +- NHCX answers your request with HTTP 202, and `/v1/coverageeligibility/on_check` arrives with a sealed payload. +- The decrypted CoverageEligibilityResponse carries `outcome` `complete`. +- `insurance[*].inforce` is `true`, and `disposition` reads as in force, for example `Policy is currently in-force`. +- The response gives the wallet position: used amount, available balance and wallet liability. + +## When it goes wrong + +- **[NHCX-1018](../errors/nhcx-1018.md), invalid ABHA number.** The exchange rejects the number's format in the header. +- **The beneficiary is not covered.** See [PAYR-1005](../errors/payr-1005.md) and [PAYR-1123](../errors/payr-1123.md). Check the ABHA number against the linked policy. +- **The policy does not exist or has expired.** See [PAYR-1006](../errors/payr-1006.md) and [PAYR-1007](../errors/payr-1007.md). +- **[PAYR-1101](../errors/payr-1101.md), invalid purpose.** Send `validation` exactly, in lower case. +- **[PAYR-1272](../errors/payr-1272.md), invalid biometric user token.** The token expired or failed. Authenticate the beneficiary again, or use the Authentication Consent questionnaire. +- **The callback never arrives.** Your callback URL must use a domain name, not an IP address or port. It must run on an India-hosted server that allows the exchange's outbound addresses. See [callback URL requirements](../sandbox/callback-url-requirements.md) and [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). Then ask where the request stands with [use case 13](provider-uc-13.md). diff --git a/catalogue/nhcx/tests/tc-ce-01.md b/catalogue/nhcx/tests/tc-ce-01.md new file mode 100644 index 000000000..55278e807 --- /dev/null +++ b/catalogue/nhcx/tests/tc-ce-01.md @@ -0,0 +1,154 @@ +--- +id: nhcx.test.tc-ce-01 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'TC-CE-01: Coverage eligibility with auth requirements' +summary: >- + Check that your hospital system can confirm a chosen package is covered and affordable, + before it asks for preauthorisation. +sources: +- url: https://hcxsbx.abdm.gov.in/images/4d333fa6ce5ef99920de.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Test Cases.xlsx + hash: sha256:0d95021974cfe81ab2e3bf66f983228a70b8fed8d7d251eb6d7eeab7354ecad2 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Test Cases, row 31 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet1, row TC-CE-01. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 7.3, 7.4 and 7.6. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. sheet Scenarios, row 5. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 19, Biometric Authentication. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-6, Q14 and Q21. +verified: + status: unverified +related: + flows: + - nhcx.flow.pmjay-patient-to-cashless + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.coverage-eligibility-check + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.biometric-face + concepts: + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.hmis-integration-architecture + - nhcx.concept.workflow-codes + - nhcx.concept.coverage-eligibility-purposes + - nhcx.concept.biometric-authentication + sandbox: + - nhcx.sandbox.test-participants + glossary: + - nhcx.glossary.pmjay + - nhcx.glossary.coverage-eligibility + endpoints: + - nhcx.endpoint.coverageeligibility-check + callbacks: + - nhcx.callback.coverageeligibility-on-check + fhir: + - nhcx.fhir.coverage-eligibility-request + - nhcx.fhir.coverage-eligibility-response + - nhcx.fhir.validation + decisions: + - nhcx.decision.eligibility-purpose + tests: + - nhcx.test.tc-abha-01 + - nhcx.test.tc-hbp-01 + - nhcx.test.tc-pa-01 + errors: + - nhcx.error.payr-1032 + - nhcx.error.payr-1033 + - nhcx.error.payr-1008 + - nhcx.error.payr-1111 + - nhcx.error.payr-1114 + - nhcx.error.payr-1272 +--- + +# TC-CE-01: Coverage eligibility with auth requirements + +## In plain words + +Before a [PMJAY](../glossary/pmjay.md) preauthorisation, your [HMIS](../../shared/glossary/hmis.md) asks the payer about the exact package it plans to treat. The coverage eligibility purpose `auth-requirements` returns whether the package is covered at your hospital. It also lists the questionnaires and documents the preauthorisation needs. + +This test case checks a package the wallet can afford. + +## Before you start + +- The test case pre-condition holds: wallet available. [TC-ABHA-01](tc-abha-01.md) returned an available balance. +- You chose the package from the plan in [TC-HBP-01](tc-hbp-01.md). +- You hold a valid biometric user token for the beneficiary. + +```precondition +human: true +who: the beneficiary, present at the hospital, and your front desk operator +action: If the user token has expired, authenticate the beneficiary again by fingerprint, iris or face. +``` + +- Your provider sandbox basics pass. You hold a session token ([use case 4](provider-uc-04.md)) and the payer's certificate ([use case 3](provider-uc-03.md)). Your callback endpoint works ([use case 5](provider-uc-05.md)). +- You address the PMJAY payer by the processing ID from [use case 2](provider-uc-02.md). + +## What happens + +| Test case field | Value | +|---|---| +| API / FHIR Resource | CoverageEligibilityRequest (auth-requirements) | +| Input Parameters | Amount: `25000`, Package: `HBP-123` | + +1. Build a CoverageEligibilityRequest bundle with `purpose` `auth-requirements`. Add the package as an item: this purpose requires items. See [the request bundle](../fhir/coverage-eligibility-request.md). +2. Validate the bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles, as [validating a bundle](../fhir/validation.md) describes. +3. Seal it as a [JWE](../glossary/jwe.md) with the PMJAY payer's public key. +4. Set the protected headers. `x-hcx-status` is `request.initiated`. Pass the biometric user token as a header parameter on the request. `x-hcx-recipient_code` is the payer's processing ID, and `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. +5. Send it. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/coverageeligibility/check' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +6. [NHCX](../../shared/glossary/nhcx.md) answers with HTTP 202. +7. Wait for `POST /v1/coverageeligibility/on_check` on your registered endpoint. Answer it with HTTP 202 within 30 seconds. +8. Decrypt the payload with your private key and read the CoverageEligibilityResponse. + +## How you know it worked + +The pass criterion for TC-CE-01: + +| Field | Value | +|---|---| +| Processing / validation rules | Check wallet balance and speciality rules | +| Expected output | Eligible, balance sufficient | +| Remarks | Preauth allowed | + +What you observe: + +- The decrypted CoverageEligibilityResponse carries `outcome` `complete`, and `insurance[*].inforce` is `true`. +- The item for `HBP-123` is not marked `excluded`. +- `authorizationRequired` and `authorizationSupporting` list what the preauthorisation needs. +- The available balance from [TC-ABHA-01](tc-abha-01.md) is at least `25000`, and no insufficient coverage error comes back. + +## When it goes wrong + +- **[PAYR-1033](../errors/payr-1033.md), no items for the purpose.** `auth-requirements` needs the package as an item. +- **[PAYR-1032](../errors/payr-1032.md), invalid purpose.** Send `auth-requirements` exactly. +- **[PAYR-1008](../errors/payr-1008.md), coverage amount insufficient.** The wallet cannot pay the amount. The case fails the test. +- **A rule or speciality failure.** See [PAYR-1111](../errors/payr-1111.md) and [PAYR-1114](../errors/payr-1114.md). Use the speciality code the plan gives for the package. +- **[PAYR-1272](../errors/payr-1272.md), invalid biometric user token.** Authenticate the beneficiary again. +- **The callback never arrives.** Your callback URL must use a domain name, not an IP address or port. It must run on an India-hosted server that allows the exchange's outbound addresses. See [callback URL requirements](../sandbox/callback-url-requirements.md) and [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). Then ask where the request stands with [use case 13](provider-uc-13.md). diff --git a/catalogue/nhcx/tests/tc-cl-01.md b/catalogue/nhcx/tests/tc-cl-01.md new file mode 100644 index 000000000..d6ebf15dc --- /dev/null +++ b/catalogue/nhcx/tests/tc-cl-01.md @@ -0,0 +1,164 @@ +--- +id: nhcx.test.tc-cl-01 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'TC-CL-01: Submit the claim after discharge' +summary: >- + Check that your hospital system can submit the final claim after a government + scheme patient leaves, and see the payer accept it for adjudication. +sources: +- url: https://hcxsbx.abdm.gov.in/images/4d333fa6ce5ef99920de.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Test Cases.xlsx + hash: sha256:0d95021974cfe81ab2e3bf66f983228a70b8fed8d7d251eb6d7eeab7354ecad2 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Test Cases, row 31 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet1, row TC-CL-01. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, rows 15, 21, 25, 26, 28, 29. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 9 claims workflow, PMJAY exception and Stage 2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 11-12, section 25 Q3 and Q7; pages 4-6, Q14 and Q21. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. sheet Scenarios, row 10. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 19, Biometric Authentication; page 35, Claim. +verified: + status: unverified +related: + flows: + - nhcx.flow.pmjay-patient-to-cashless + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.claim-submit + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.biometric-face + concepts: + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.hmis-integration-architecture + - nhcx.concept.workflow-codes + - nhcx.concept.claim-cycle + - nhcx.concept.biometric-authentication + sandbox: + - nhcx.sandbox.test-participants + glossary: + - nhcx.glossary.pmjay + - nhcx.glossary.claim + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.claim-request + - nhcx.fhir.claim-response + - nhcx.fhir.validation + decisions: + - nhcx.decision.biometric-modality + tests: + - nhcx.test.tc-pa-01 + - nhcx.test.tc-cl-02 + - nhcx.test.provider-uc-09 + errors: + - nhcx.error.payr-1302 + - nhcx.error.payr-1301 + - nhcx.error.payr-1012 + - nhcx.error.payr-1357 + - nhcx.error.payr-1363 + - nhcx.error.payr-1366 + - nhcx.error.payr-1095 +--- + +# TC-CL-01: Submit the claim after discharge + +## In plain words + +Under [PMJAY](../glossary/pmjay.md), discharge and claim are one submission. After the patient leaves, your [HMIS](../../shared/glossary/hmis.md) submits a Claim bundle with `use` `claim` through [NHCX](../../shared/glossary/nhcx.md). It carries the final amount, within the approved amount, and the discharge documents. + +This test case checks the payer accepts the claim for adjudication. + +## Before you start + +- The test case pre-condition holds: preauth approved. You received `/v1/preauth/on_submit` with `x-hcx-workflow_id` `21`, and you hold its `preAuthRef`. +- No claim has been raised for this case yet. +- You have the documents the plan requires at claim, from [TC-HBP-01](tc-hbp-01.md). +- The beneficiary authenticated at discharge. + +```precondition +human: true +who: the beneficiary, present at discharge, and your front desk operator +action: Authenticate the beneficiary by fingerprint, iris or face at discharge. Keep the user token it returns. +fallback: Send the Authentication Consent questionnaire response in the claim instead, when biometric authentication fails. +``` + +- Your provider sandbox basics pass. You hold a session token ([use case 4](provider-uc-04.md)) and the payer's certificate ([use case 3](provider-uc-03.md)). Your callback endpoint works ([use case 5](provider-uc-05.md)). +- You address the PMJAY payer by the processing ID from [use case 2](provider-uc-02.md). + +## What happens + +| Test case field | Value | +|---|---| +| API / FHIR Resource | /claim/submit (Claim) | +| Input Parameters | ApprovedAmount: `23000`, Docs attached | + +1. Build a Claim bundle with `use` `claim`. See [the claim request bundle](../fhir/claim-request.md). Reuse the preauthorisation's claim identifier, or reference its `preAuthRef`. Keep the claimed amount within the approved `23000`. Put the discharge details in `supportingInfo` with category `DIS`, and attach the documents. +2. Validate the bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles, as [validating a bundle](../fhir/validation.md) describes. +3. Seal it as a [JWE](../glossary/jwe.md) with the PMJAY payer's public key. +4. Set the protected headers. `x-hcx-workflow_id` is `15` and `x-hcx-status` is `request.initiated`. Pass the discharge user token as a header parameter on the request. `x-hcx-recipient_code` is the payer's processing ID, and `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. +5. Send it. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/claim/submit' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +6. NHCX answers with HTTP 202. +7. Wait for `POST /v1/claim/on_submit` on your registered endpoint. Answer it with HTTP 202 within 30 seconds. +8. Decrypt the payload with your private key and read the payer's answer. + +The path is described in full in [submit a claim after discharge](../flows/claim-submit.md). + +## How you know it worked + +The pass criterion for TC-CL-01: + +| Field | Value | +|---|---| +| Processing / validation rules | Match preauth & treatment details | +| Expected output | Claim accepted for adjudication | +| Remarks | Sent to workflow | + +What you observe: + +- NHCX answers your request with HTTP 202. +- You receive `/v1/claim/on_submit` with `x-hcx-workflow_id` `25` and `x-hcx-status` `response.partial`. Workflow `25` means the payer received the claim. +- Further `response.partial` updates may follow, such as `28` in process and `29` forwarded. +- The decision arrives with `response.complete`, for example `26` approved. + +## When it goes wrong + +- **[PAYR-1302](../errors/payr-1302.md), no approved preauthorisation.** Wait for workflow `21` before you claim. +- **[PAYR-1301](../errors/payr-1301.md), claim already raised.** A case takes one claim. +- **[PAYR-1012](../errors/payr-1012.md), claim above the approved amount.** Keep the claim within `23000`. +- **Discharge data is wrong.** See [PAYR-1357](../errors/payr-1357.md) and [PAYR-1095](../errors/payr-1095.md). Admission must not fall after discharge. +- **The discharge authentication is missing or invalid.** See [PAYR-1363](../errors/payr-1363.md) and [PAYR-1366](../errors/payr-1366.md). Authenticate again, or send the Authentication Consent questionnaire response. +- **The callback never arrives.** Your callback URL must use a domain name, not an IP address or port. It must run on an India-hosted server that allows the exchange's outbound addresses. See [callback URL requirements](../sandbox/callback-url-requirements.md) and [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). Then ask where the request stands with [use case 13](provider-uc-13.md). diff --git a/catalogue/nhcx/tests/tc-cl-02.md b/catalogue/nhcx/tests/tc-cl-02.md new file mode 100644 index 000000000..ff89f19d2 --- /dev/null +++ b/catalogue/nhcx/tests/tc-cl-02.md @@ -0,0 +1,146 @@ +--- +id: nhcx.test.tc-cl-02 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'TC-CL-02: Submit a claim query update' +summary: >- + Check that your hospital system can answer a payer's query on a claim with more + documents, and see the payer accept the answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/4d333fa6ce5ef99920de.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Test Cases.xlsx + hash: sha256:0d95021974cfe81ab2e3bf66f983228a70b8fed8d7d251eb6d7eeab7354ecad2 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Test Cases, row 31 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet1, row TC-CL-02. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. sheet Scenarios, row 11. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, rows 27, 28, 151. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 36, 8.5.2 Query updation. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-6, Q14 and Q21. +verified: + status: unverified +related: + flows: + - nhcx.flow.pmjay-patient-to-cashless + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.claim-query-response + concepts: + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.hmis-integration-architecture + - nhcx.concept.workflow-codes + - nhcx.concept.queries-and-communication + - nhcx.concept.status-lifecycle + sandbox: + - nhcx.sandbox.test-participants + glossary: + - nhcx.glossary.pmjay + endpoints: + - nhcx.endpoint.claim-submit + callbacks: + - nhcx.callback.claim-on-submit + fhir: + - nhcx.fhir.query-update + - nhcx.fhir.claim-request + - nhcx.fhir.validation + tests: + - nhcx.test.tc-cl-01 + - nhcx.test.tc-pa-02 + errors: + - nhcx.error.payr-1303 + - nhcx.error.payr-1304 + - nhcx.error.nhcx-1006 +--- + +# TC-CL-02: Submit a claim query update + +## In plain words + +A [PMJAY](../glossary/pmjay.md) payer can send a claim back with a query. You answer by submitting the claim again with the documents asked for. It is a new claim request that keeps the old reference and uses a new correlation id. + +This test case checks the payer accepts your answer for adjudication. + +## Before you start + +- The test case pre-condition holds: claim should be submitted. [TC-CL-01](tc-cl-01.md) passed. +- The payer queried it: you received `/v1/claim/on_submit` with `x-hcx-workflow_id` `27`. You read the query remarks. +- You have the documents that answer the query. +- You hold a valid user token for the beneficiary. + +```precondition +human: true +who: the beneficiary, present at the hospital, and your front desk operator +action: If the user token has expired, authenticate the beneficiary again by fingerprint, iris or face. +``` + +- Your provider sandbox basics pass. You hold a session token ([use case 4](provider-uc-04.md)) and the payer's certificate ([use case 3](provider-uc-03.md)). Your callback endpoint works ([use case 5](provider-uc-05.md)). +- You address the PMJAY payer by the processing ID from [use case 2](provider-uc-02.md). + +## What happens + +| Test case field | Value | +|---|---| +| API / FHIR Resource | /claim/submit (Claim) | +| Input Parameters | Documents | + +1. Build the Claim bundle with `use` `claim` again. Keep the claim identifier of the original claim. Add the documents. See [query update bundles](../fhir/query-update.md). +2. Validate the bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles, as [validating a bundle](../fhir/validation.md) describes. +3. Seal it as a [JWE](../glossary/jwe.md) with the PMJAY payer's public key. +4. Set the protected headers. Use a new `x-hcx-correlation_id`. `x-hcx-workflow_id` is `151` and `x-hcx-status` is `response.complete`, the pair for the claim query response stage. See [workflow codes](../concepts/workflow-codes.md). `x-hcx-recipient_code` is the payer's processing ID, and `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. +5. Send it. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/claim/submit' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +6. [NHCX](../../shared/glossary/nhcx.md) answers with HTTP 202. +7. Wait for `POST /v1/claim/on_submit` on your registered endpoint. Answer it with HTTP 202 within 30 seconds. +8. Decrypt the payload with your private key and read the payer's answer. + +The path is described in full in [answer a payer query on a claim](../flows/claim-query-response.md). + +## How you know it worked + +The pass criterion for TC-CL-02: + +| Field | Value | +|---|---| +| Processing / validation rules | Match claim & treatment details | +| Expected output | Claim Query details accepted for adjudication | +| Remarks | Sent to workflow | + +What you observe: + +- NHCX answers your request with HTTP 202. +- You receive `/v1/claim/on_submit` for the case with `x-hcx-status` `response.partial` while the payer adjudicates again. It is not a `ProtocolResponse`. +- The decision follows later with `response.complete`. + +## When it goes wrong + +- **[PAYR-1303](../errors/payr-1303.md), no active claim.** The claim identifier differs from the original. +- **[PAYR-1304](../errors/payr-1304.md), no queried claim.** Wait for workflow `27` before you answer. +- **[NHCX-1006](../errors/nhcx-1006.md), duplicate request.** You reused the original correlation id. Use a new one. +- **The payer treats it as a preauthorisation answer.** You sent workflow `19`. A claim query answer carries `151`. +- **The callback never arrives.** Your callback URL must use a domain name, not an IP address or port. It must run on an India-hosted server that allows the exchange's outbound addresses. See [callback URL requirements](../sandbox/callback-url-requirements.md) and [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). Then ask where the request stands with [use case 13](provider-uc-13.md). diff --git a/catalogue/nhcx/tests/tc-cl-03.md b/catalogue/nhcx/tests/tc-cl-03.md new file mode 100644 index 000000000..a0be01f26 --- /dev/null +++ b/catalogue/nhcx/tests/tc-cl-03.md @@ -0,0 +1,150 @@ +--- +id: nhcx.test.tc-cl-03 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'TC-CL-03: Submit a CRC task after rejection or partial payment' +summary: >- + Check that your hospital system can raise a review request after a government + scheme claim is rejected or only partly paid. +sources: +- url: https://hcxsbx.abdm.gov.in/images/4d333fa6ce5ef99920de.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Test Cases.xlsx + hash: sha256:0d95021974cfe81ab2e3bf66f983228a70b8fed8d7d251eb6d7eeab7354ecad2 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Test Cases, row 31 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet1, row TC-CL-03. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 6-9, sections 22 and 23; pages 4-6, Q14 and Q21. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. sheet Scenarios, rows 12 and 14. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 10.4 and 10.5. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, rows 36, 252, 253, 254. +verified: + status: unverified +related: + flows: + - nhcx.flow.pmjay-patient-to-cashless + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.claim-reprocess + concepts: + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.hmis-integration-architecture + - nhcx.concept.workflow-codes + - nhcx.concept.reprocess-and-cancel + sandbox: + - nhcx.sandbox.test-participants + glossary: + - nhcx.glossary.pmjay + - nhcx.glossary.crc + - nhcx.glossary.reprocess + endpoints: + - nhcx.endpoint.task-submit + callbacks: + - nhcx.callback.task-on-submit + fhir: + - nhcx.fhir.task + - nhcx.fhir.claim-response + - nhcx.fhir.validation + tests: + - nhcx.test.tc-cl-01 + - nhcx.test.provider-uc-12 + errors: + - nhcx.error.payr-1332 + - nhcx.error.payr-1518 + - nhcx.error.payr-1519 +--- + +# TC-CL-03: Submit a CRC task after rejection or partial payment + +## In plain words + +When a [PMJAY](../glossary/pmjay.md) claim is rejected, your hospital can ask for it to be reprocessed. The Claim Review Committee ([CRC](../glossary/crc.md)) decides, and its decision is final. When a claim is paid in part, your hospital can raise an erroneous claim for the shortfall instead. + +Both go as a Task bundle on `/v1/task/submit`. This test case checks your system raises one. + +## Before you start + +- The test case pre-condition holds: claim should be rejected or partially paid. +- For a rejection: the claim decision arrived on `/v1/claim/on_submit` as rejected. +- For a partial payment: the payment notice with workflow `33`, payment cleared, arrived. You verified it and acknowledged it with workflow `17`. +- No reprocess or erroneous claim was raised for this claim before. PMJAY allows one of each, and none after a CRC decision. +- You have a supporting document that justifies the request. +- Your provider sandbox basics pass. You hold a session token ([use case 4](provider-uc-04.md)) and the payer's certificate ([use case 3](provider-uc-03.md)). Your callback endpoint works ([use case 5](provider-uc-05.md)). +- You address the PMJAY payer by the processing ID from [use case 2](provider-uc-02.md). + +## What happens + +| Test case field | Value | +|---|---| +| API / FHIR Resource | /task/submit (Task) | +| Input Parameters | Not published for TC-CL-03 | + +Use these values for the request: + +| Case | `Task.code` | `reasonCode` | Amount | +|---|---|---|---| +| Claim rejected | `reprocess` | `claimrejected` | Not sent | +| Claim partially paid | `reprocess` | `partialpayment` | The shortfall, no more | + +1. Build a Task bundle. The Task `code` is `reprocess`, system `http://terminology.hl7.org/CodeSystem/financialtaskcode`. Its `status` is `requested` and its `intent` is `order`. Set `reasonCode` from the table. Add the claim number as an input: the preauthorisation number your system generated. Attach the supporting document as `valueAttachment`. See [the task bundle](../fhir/task.md). +2. Validate the bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles, as [validating a bundle](../fhir/validation.md) describes. +3. Seal it as a [JWE](../glossary/jwe.md) with the PMJAY payer's public key. +4. Set the protected headers. `x-hcx-workflow_id` is `36` and `x-hcx-status` is `request.initiated`. `x-hcx-recipient_code` is the payer's processing ID, and `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. +5. Send it. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/task/submit' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +6. [NHCX](../../shared/glossary/nhcx.md) answers with HTTP 202. +7. Wait for `POST /v1/task/on_submit` on your registered endpoint. Answer it with HTTP 202 within 30 seconds. +8. Decrypt the payload with your private key and read the Task bundle. +9. Resolve the ClaimResponse that `Task.output[0].valueReference` points to, and read it as any adjudication. + +The path is described in full in [ask the payer to reprocess a claim](../flows/claim-reprocess.md). + +## How you know it worked + +No expected output or remarks are published for TC-CL-03. Its one published rule: + +| Field | Value | +|---|---| +| Processing / validation rules | Match claim and Treatment details | +| Expected output | Not published | +| Remarks | Not published | + +What you observe: + +- NHCX answers your `POST /v1/task/submit` with HTTP 202. +- You receive `POST /v1/task/on_submit` with a sealed Task bundle. The Task `status` is `completed`. +- The Task output references a ClaimResponse for the original claim number. +- For a reprocess, `x-hcx-workflow_id` `252` means approved, `253` rejected and `254` queried. + +## When it goes wrong + +- **[PAYR-1332](../errors/payr-1332.md), invalid CRC request.** Check the claim number, reason code and that the claim is in the right state. +- **The payer finds no task input.** See [PAYR-1518](../errors/payr-1518.md) and [PAYR-1519](../errors/payr-1519.md). Every input needs a type and a value. +- **An erroneous claim is refused before payment clears.** Wait for workflow `33`, acknowledge it, then raise the request. +- **A second request for the same claim is refused.** PMJAY allows one reprocess and one erroneous claim per claim. +- **The callback never arrives.** Your callback URL must use a domain name, not an IP address or port. It must run on an India-hosted server that allows the exchange's outbound addresses. See [callback URL requirements](../sandbox/callback-url-requirements.md) and [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). Then ask where the request stands with [use case 13](provider-uc-13.md). diff --git a/catalogue/nhcx/tests/tc-hbp-01.md b/catalogue/nhcx/tests/tc-hbp-01.md new file mode 100644 index 000000000..9b9b7aa23 --- /dev/null +++ b/catalogue/nhcx/tests/tc-hbp-01.md @@ -0,0 +1,137 @@ +--- +id: nhcx.test.tc-hbp-01 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'TC-HBP-01: Fetch admissible HBP package' +summary: >- + Check that your hospital system can fetch the benefit packages the state scheme + allows at your hospital, with their rules and document needs. +sources: +- url: https://hcxsbx.abdm.gov.in/images/4d333fa6ce5ef99920de.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Test Cases.xlsx + hash: sha256:0d95021974cfe81ab2e3bf66f983228a70b8fed8d7d251eb6d7eeab7354ecad2 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Test Cases, row 31 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet1, row TC-HBP-01. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 6.4 and 6.5. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. sheet Scenarios, row 2. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-6, Q14 and Q21. +verified: + status: unverified +related: + flows: + - nhcx.flow.pmjay-patient-to-cashless + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.insurance-plan-request + concepts: + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.hmis-integration-architecture + - nhcx.concept.workflow-codes + - nhcx.concept.insurance-plan + sandbox: + - nhcx.sandbox.test-participants + glossary: + - nhcx.glossary.pmjay + - nhcx.glossary.hbp + - nhcx.glossary.sha + endpoints: + - nhcx.endpoint.insuranceplan-request + callbacks: + - nhcx.callback.insuranceplan-on-request + fhir: + - nhcx.fhir.insurance-plan-bundle + - nhcx.fhir.pmjay-insurance-plan + - nhcx.fhir.task + - nhcx.fhir.validation + tests: + - nhcx.test.tc-abha-01 + - nhcx.test.tc-ce-01 + - nhcx.test.provider-uc-06 + errors: + - nhcx.error.payr-1401 + - nhcx.error.payr-1402 + - nhcx.error.payr-1404 + - nhcx.error.payr-1405 + - nhcx.error.payr-1406 +--- + +# TC-HBP-01: Fetch admissible HBP package + +## In plain words + +[HBP](../glossary/hbp.md) packages are the treatments a [PMJAY](../glossary/pmjay.md) policy pays for, and each state sets its own. This test case fetches the insurance plan for your hospital through [NHCX](../../shared/glossary/nhcx.md). It checks that the state's packages come back, with their conditions and document requirements. + +## Before you start + +- The test case pre-condition holds: policy validated. [TC-ABHA-01](tc-abha-01.md) passed. +- Your hospital is on the payer's network for that state. The payer checks this before it answers. +- You have the policy code and your hospital's [HFR](../../shared/glossary/hfr.md) ID. The request needs both. +- Your provider sandbox basics pass. You hold a session token ([use case 4](provider-uc-04.md)) and the payer's certificate ([use case 3](provider-uc-03.md)). Your callback endpoint works ([use case 5](provider-uc-05.md)). +- You address the PMJAY payer by the processing ID from [use case 2](provider-uc-02.md). + +## What happens + +| Test case field | Value | +|---|---| +| API / FHIR Resource | InsurancePlan | +| Input Parameters | PlanId: `PMJAY-TS-001`, Provider Id: `HOSP123`, PayerID: `SHA-HARYANA` | + +1. Build a Task bundle whose Task has `code` `poll`, `status` `requested` and `intent` `order`. Add the inputs `policyNumber` and `providerId`, where `providerId` is your HFR ID. See [insurance plan bundles](../fhir/insurance-plan-bundle.md). +2. Validate the bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles, as [validating a bundle](../fhir/validation.md) describes. +3. Seal it as a [JWE](../glossary/jwe.md) with the PMJAY payer's public key. +4. Set the protected headers. `x-hcx-status` is `request.initiated`. `x-hcx-recipient_code` is the payer's processing ID, and `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. +5. Send it. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/insuranceplan/request' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +6. NHCX answers with HTTP 202. +7. Wait for `POST /v1/insuranceplan/on_request` on your registered endpoint. Answer it with HTTP 202 within 30 seconds. +8. Decrypt the payload with your private key and read the insurance plan bundle. +9. Cache the plan. Fetch it again after 15 days, or when the policy changes. + +## How you know it worked + +The pass criterion for TC-HBP-01: + +| Field | Value | +|---|---| +| Processing / validation rules | Validate provide against state network hospitals | +| Expected output | InsurancePlan with all HBP packages along with inclusions and exclusions,claim conditions, document requirements | +| Remarks | State-specific HBP applied | + +What you observe: + +- The decrypted payload is a Bundle of type `collection` with InsurancePlan, Organization and Questionnaire entries. +- Packages appear under `specificCost`: `category` is the speciality and `benefit` is the package, with its cost. +- The plan carries the `claim-exclusion`, `claimCondition` and `claimSupportingInfoRequirement` extensions. +- The packages are those of the payer's state. See [the PMJAY insurance plan](../fhir/pmjay-insurance-plan.md). + +## When it goes wrong + +- **[PAYR-1401](../errors/payr-1401.md), policy not allowed for the hospital.** The hospital is not on the state network for that policy. +- **[PAYR-1402](../errors/payr-1402.md), policy not associated with a payer.** Check the policy code. +- **[PAYR-1404](../errors/payr-1404.md), no treatment under any speciality.** No packages are configured for your hospital on that policy. +- **[PAYR-1405](../errors/payr-1405.md), no enrolled hospital.** The HFR ID or sender code is not enrolled with the payer. +- **[PAYR-1406](../errors/payr-1406.md), a request is already in progress.** Wait for the first answer before you ask again. +- **The callback never arrives.** Your callback URL must use a domain name, not an IP address or port. It must run on an India-hosted server that allows the exchange's outbound addresses. See [callback URL requirements](../sandbox/callback-url-requirements.md) and [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). Then ask where the request stands with [use case 13](provider-uc-13.md). diff --git a/catalogue/nhcx/tests/tc-pa-01.md b/catalogue/nhcx/tests/tc-pa-01.md new file mode 100644 index 000000000..96a3ced16 --- /dev/null +++ b/catalogue/nhcx/tests/tc-pa-01.md @@ -0,0 +1,161 @@ +--- +id: nhcx.test.tc-pa-01 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'TC-PA-01: Submit a preauthorisation' +summary: >- + Check that your hospital system can submit a preauthorisation for a government + scheme patient and see the payer take it into its workflow. +sources: +- url: https://hcxsbx.abdm.gov.in/images/4d333fa6ce5ef99920de.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Test Cases.xlsx + hash: sha256:0d95021974cfe81ab2e3bf66f983228a70b8fed8d7d251eb6d7eeab7354ecad2 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Test Cases, row 31 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet1, row TC-PA-01. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. sheet Scenarios, row 6. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, rows 12, 20, 21, 23, 24. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 6, Table 6.2; page 19, Biometric Authentication. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-6, Q14 and Q21. +verified: + status: unverified +related: + flows: + - nhcx.flow.pmjay-patient-to-cashless + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.preauth-submit + - nhcx.flow.biometric-fingerprint-iris + - nhcx.flow.biometric-face + concepts: + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.hmis-integration-architecture + - nhcx.concept.workflow-codes + - nhcx.concept.claim-cycle + - nhcx.concept.biometric-authentication + sandbox: + - nhcx.sandbox.test-participants + glossary: + - nhcx.glossary.pmjay + - nhcx.glossary.preauthorisation + endpoints: + - nhcx.endpoint.preauth-submit + - nhcx.endpoint.abha-biometric-auth-verify + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.preauth-request + - nhcx.fhir.preauth-response + - nhcx.fhir.validation + decisions: + - nhcx.decision.biometric-modality + tests: + - nhcx.test.tc-ce-01 + - nhcx.test.tc-pa-02 + - nhcx.test.tc-cl-01 + - nhcx.test.provider-uc-07 + errors: + - nhcx.error.payr-1201 + - nhcx.error.payr-1235 + - nhcx.error.payr-1254 + - nhcx.error.payr-1256 + - nhcx.error.payr-1272 + - nhcx.error.payr-1216 +--- + +# TC-PA-01: Submit a preauthorisation + +## In plain words + +A [preauthorisation](../glossary/preauthorisation.md) asks the payer to approve treatment before it happens. Under [PMJAY](../glossary/pmjay.md) it is a Claim bundle with `use` `preauthorization`, sent through [NHCX](../../shared/glossary/nhcx.md). This test case submits one with a diagnosis, treatment plan, supporting documents and doctor details. + +It passes when the payer acknowledges the case into its workflow. + +## Before you start + +- The test case pre-condition holds: eligibility successful. [TC-CE-01](tc-ce-01.md) passed for the package. +- The preauthorisation amount is no more than the balance remaining on the wallet. +- You have the treating doctor's [HPR](../../shared/glossary/hpr.md) ID. +- The beneficiary authenticated biometrically for this preauthorisation. It is mandatory before a PMJAY preauthorisation. + +```precondition +human: true +who: the beneficiary, present at the hospital, and your front desk operator +action: Authenticate the beneficiary by fingerprint, iris or face. Keep the user token it returns. +valid_for: 30 minutes. Refresh it automatically until the transaction cycle ends. +fallback: Where biometric authentication is not feasible, record an Aadhaar exemption consent signed by the beneficiary and a hospital representative. +``` + +- Your provider sandbox basics pass. You hold a session token ([use case 4](provider-uc-04.md)) and the payer's certificate ([use case 3](provider-uc-03.md)). Your callback endpoint works ([use case 5](provider-uc-05.md)). +- You address the PMJAY payer by the processing ID from [use case 2](provider-uc-02.md). + +## What happens + +| Test case field | Value | +|---|---| +| API / FHIR Resource | /preauth/submit (Claim) | +| Input Parameters | Diagnosis: `I10`, Treatment Plan, Support Documents. Doctor Details | + +1. Build a Claim bundle with `use` `preauthorization`. See [the preauthorisation request bundle](../fhir/preauth-request.md). Set the diagnosis to `I10`. Add every billable item of the treatment plan and a claim identifier. Add the supporting documents as diagnostic report (`DIA`) and clinical document (`CD`). Name the practitioner by HPR ID. +2. Validate the bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles, as [validating a bundle](../fhir/validation.md) describes. +3. Seal it as a [JWE](../glossary/jwe.md) with the PMJAY payer's public key. +4. Set the protected headers. `x-hcx-workflow_id` is `12` and `x-hcx-status` is `request.initiated`. Use a new `x-hcx-correlation_id`. Pass the biometric user token as a header parameter on the request. `x-hcx-recipient_code` is the payer's processing ID, and `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. +5. Send it. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/preauth/submit' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +6. NHCX answers with HTTP 202. +7. Wait for `POST /v1/preauth/on_submit` on your registered endpoint. Answer it with HTTP 202 within 30 seconds. +8. Decrypt the payload with your private key and read the payer's answer. + +The path is described in full in [submit a preauthorisation](../flows/preauth-submit.md). + +## How you know it worked + +The pass criterion for TC-PA-01: + +| Field | Value | +|---|---| +| Processing / validation rules | Validate clinical & financial rules | +| Expected output | Preauth ID generated, status=PENDING | +| Remarks | Sent to workflow | + +What you observe: + +- NHCX answers your request with HTTP 202. +- You receive `/v1/preauth/on_submit` with `x-hcx-workflow_id` `20` and `x-hcx-status` `response.partial`. Workflow `20` means the payer received and acknowledged the preauthorisation. +- Your system shows the case as pending until the decision arrives. +- The decision arrives later on the same path: `21` approved, `23` rejected or `24` queried. + +## When it goes wrong + +- **[PAYR-1201](../errors/payr-1201.md), invalid claimed amount.** The amount exceeds what the wallet allows. Keep it within the balance from [TC-ABHA-01](tc-abha-01.md). +- **[PAYR-1235](../errors/payr-1235.md), insufficient wallet balance.** The wallet cannot pay the preauthorisation. +- **A required questionnaire response is missing.** See [PAYR-1254](../errors/payr-1254.md) and [PAYR-1256](../errors/payr-1256.md). Answer what [TC-CE-01](tc-ce-01.md) listed. +- **[PAYR-1272](../errors/payr-1272.md), invalid biometric user token.** Authenticate the beneficiary again. +- **[PAYR-1216](../errors/payr-1216.md), a case is already in progress.** The beneficiary has an open preauthorisation. +- **The callback never arrives.** Your callback URL must use a domain name, not an IP address or port. It must run on an India-hosted server that allows the exchange's outbound addresses. See [callback URL requirements](../sandbox/callback-url-requirements.md) and [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). Then ask where the request stands with [use case 13](provider-uc-13.md). diff --git a/catalogue/nhcx/tests/tc-pa-02.md b/catalogue/nhcx/tests/tc-pa-02.md new file mode 100644 index 000000000..830d2eda8 --- /dev/null +++ b/catalogue/nhcx/tests/tc-pa-02.md @@ -0,0 +1,148 @@ +--- +id: nhcx.test.tc-pa-02 +type: test +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: 'TC-PA-02: Submit a preauthorisation query update' +summary: >- + Check that your hospital system can answer a payer's query on a preauthorisation + with more documents, and see the payer accept the answer. +sources: +- url: https://hcxsbx.abdm.gov.in/images/4d333fa6ce5ef99920de.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Test Cases.xlsx + hash: sha256:0d95021974cfe81ab2e3bf66f983228a70b8fed8d7d251eb6d7eeab7354ecad2 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Test Cases, row 31 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sheet1, row TC-PA-02. +- url: https://hcxsbx.abdm.gov.in/images/53347f5988b0ce5396f1.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX_APIs to be called based on scenario.xlsx + hash: sha256:f92a30673d65dd2cc3cf09e2087c624f23f781dc4ca6b5cd8ec1825e224ac108 + fetched: '2026-09-14' + note: NHCX_APIs to be called based on scenario, row 26 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. sheet Scenarios, row 8. +- url: https://hcxsbx.abdm.gov.in/images/c42ad170f37c987ed173.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Workflow Status Sheets(with Codes).xlsx + hash: sha256:f56dd156c232192296082f23b1561d0ff11fd40992e6675de41c5c991d579e6d + fetched: '2026-09-14' + note: Workflow Status Sheets(with Codes), row 12 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. Sheet1, rows 18, 19, 24. +- url: https://hcxsbx.abdm.gov.in/images/dffb62a375449b37ad73.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX-PMJAY-HMIS Integration Guide.pdf + hash: sha256:d9cdc0997294a788f33d2e00638c787dd790ebd2a2e52be97ad024d864c2b164 + fetched: '2026-09-14' + note: NHCX-PMJAY-HMIS Integration Guide, row 28 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. page 32, 8.4.4 Query updation. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-6, Q14 and Q21. +verified: + status: unverified +related: + flows: + - nhcx.flow.pmjay-patient-to-cashless + - nhcx.flow.send-a-sealed-request + - nhcx.flow.receive-a-sealed-callback + - nhcx.flow.preauth-query-response + concepts: + - nhcx.concept.pmjay-on-nhcx + - nhcx.concept.hmis-integration-architecture + - nhcx.concept.workflow-codes + - nhcx.concept.queries-and-communication + - nhcx.concept.biometric-authentication + sandbox: + - nhcx.sandbox.test-participants + glossary: + - nhcx.glossary.pmjay + endpoints: + - nhcx.endpoint.preauth-submit + callbacks: + - nhcx.callback.preauth-on-submit + fhir: + - nhcx.fhir.query-update + - nhcx.fhir.preauth-request + - nhcx.fhir.validation + tests: + - nhcx.test.tc-pa-01 + - nhcx.test.provider-uc-08 + errors: + - nhcx.error.payr-1218 + - nhcx.error.payr-1219 + - nhcx.error.payr-1234 + - nhcx.error.nhcx-1006 +--- + +# TC-PA-02: Submit a preauthorisation query update + +## In plain words + +A [PMJAY](../glossary/pmjay.md) payer can send a preauthorisation back with a query. You answer by submitting the preauthorisation again with the documents asked for. It is a new preauthorisation request that keeps the old reference and uses a new correlation id. + +This test case checks the payer accepts your answer for adjudication. + +## Before you start + +- The test case pre-condition holds: preauth should be submitted. [TC-PA-01](tc-pa-01.md) passed. +- The payer queried it: you received `/v1/preauth/on_submit` with `x-hcx-workflow_id` `24`. You read the query remarks. +- You have the documents that answer the query. +- You hold a valid biometric user token for the beneficiary. + +```precondition +human: true +who: the beneficiary, present at the hospital, and your front desk operator +action: If the user token has expired, authenticate the beneficiary again by fingerprint, iris or face. +``` + +- Your provider sandbox basics pass. You hold a session token ([use case 4](provider-uc-04.md)) and the payer's certificate ([use case 3](provider-uc-03.md)). Your callback endpoint works ([use case 5](provider-uc-05.md)). +- You address the PMJAY payer by the processing ID from [use case 2](provider-uc-02.md). + +## What happens + +| Test case field | Value | +|---|---| +| API / FHIR Resource | /preauth/submit (Claim) | +| Input Parameters | Additional Documents | + +1. Build the Claim bundle with `use` `preauthorization` again. Keep the claim identifier of the original preauthorisation. Add the additional documents. See [query update bundles](../fhir/query-update.md). +2. Validate the bundle against the [NRCeS](../../shared/glossary/nrces.md) profiles, as [validating a bundle](../fhir/validation.md) describes. +3. Seal it as a [JWE](../glossary/jwe.md) with the PMJAY payer's public key. +4. Set the protected headers. Use a new `x-hcx-correlation_id`. `x-hcx-workflow_id` is `19` and `x-hcx-status` is `response.complete`, the pair for the preauth query response stage. See [workflow codes](../concepts/workflow-codes.md). `x-hcx-recipient_code` is the payer's processing ID, and `x-hcx-ben-abha-id` carries the beneficiary's [ABHA](../../shared/glossary/abha.md) number. +5. Send it. + +```bash +curl -X POST 'https://apisbx.abdm.gov.in/hcx/v1/preauth/submit' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'bearer_auth: Bearer ' \ + -H 'Authorization: Bearer ' \ + -d '{"payload": ""}' +``` + +6. [NHCX](../../shared/glossary/nhcx.md) answers with HTTP 202. +7. Wait for `POST /v1/preauth/on_submit` on your registered endpoint. Answer it with HTTP 202 within 30 seconds. +8. Decrypt the payload with your private key and read the payer's answer. + +The path is described in full in [answer a payer query on a preauthorisation](../flows/preauth-query-response.md). + +## How you know it worked + +The pass criterion for TC-PA-02: + +| Field | Value | +|---|---| +| Processing / validation rules | Match Preauth & treatment details | +| Expected output | Preauth Query details accepted for adjudication | +| Remarks | Sent to workflow | + +What you observe: + +- NHCX answers your request with HTTP 202. +- You receive `/v1/preauth/on_submit` with `x-hcx-workflow_id` `18` and `x-hcx-status` `response.partial`. The payer acknowledged your query response. +- The decision follows later on the same path. + +## When it goes wrong + +- **[PAYR-1218](../errors/payr-1218.md), no queried preauthorisation.** The case was not queried, or the claim identifier differs from the original. +- **[PAYR-1219](../errors/payr-1219.md), case not queried.** Wait for workflow `24` before you answer. +- **[PAYR-1234](../errors/payr-1234.md), no preauthorisation record.** Reuse the original claim identifier. +- **[NHCX-1006](../errors/nhcx-1006.md), duplicate request.** You reused the original correlation id. Use a new one. +- **The acknowledgement carries `x-hcx-status` `response.error`.** The payer could not accept the answer. Read `x-hcx-error_details` and correct the bundle. +- **The callback never arrives.** Your callback URL must use a domain name, not an IP address or port. It must run on an India-hosted server that allows the exchange's outbound addresses. See [callback URL requirements](../sandbox/callback-url-requirements.md) and [accepted, then no callback](../troubleshooting/accepted-then-no-callback.md). Then ask where the request stands with [use case 13](provider-uc-13.md). diff --git a/catalogue/nhcx/troubleshooting/accepted-then-no-callback.md b/catalogue/nhcx/troubleshooting/accepted-then-no-callback.md new file mode 100644 index 000000000..ff428e3e6 --- /dev/null +++ b/catalogue/nhcx/troubleshooting/accepted-then-no-callback.md @@ -0,0 +1,110 @@ +--- +id: nhcx.troubleshooting.accepted-then-no-callback +type: troubleshooting +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: The request was accepted with 202 and no callback arrives +summary: >- + Your request was accepted and the answer never came back. The checks that find + where it stopped, in order. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-6, Q12, Q14 and Q21. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, items 7 and 8. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. Status Description (Protected Header). +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Status. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet NHCX Error Codes, NHCX-1006. +verified: + status: unverified +related: + concepts: + - nhcx.concept.four-message-legs + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + - nhcx.concept.message-identifiers + endpoints: + - nhcx.endpoint.status + - nhcx.endpoint.participant-get-policies + callbacks: + - nhcx.callback.error + - nhcx.callback.on-status + decisions: + - nhcx.decision.status-poll-or-wait + errors: + - nhcx.error.nhcx-1001 + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1012 + troubleshooting: + - nhcx.troubleshooting.callback-url-rejected + - nhcx.troubleshooting.recipient-cannot-decrypt + - nhcx.troubleshooting.bundle-rejected + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - nhcx.glossary.tpa +--- + +# The request was accepted with 202 and no callback arrives + +## In plain words + +Your call returned `202` and no `on_` callback has come. The `202` only means [NHCX](../../shared/glossary/nhcx.md) accepted the request. The answer travels three more legs, and any of them can stop it, so you have to find which one. + +## Before you start + +- You have the request's api call id, correlation id and timestamp. See [correlation id, API call id and workflow id](../concepts/message-identifiers.md). +- You know which leg is which. See [the four legs of every exchange](../concepts/four-message-legs.md). + +## What happens + +Work through these in order. + +1. **Did `/v1/error` receive anything?** When NHCX cannot deliver your request, the failure comes back to your `/v1/error` endpoint. Check its log before anything else. See [receiving POST /v1/error](../callbacks/error.md). +2. **Can NHCX reach your callback endpoint at all?** Domain name, India hosting, whitelisted addresses and routing all matter. See [your callback URL is rejected or never called](../troubleshooting/callback-url-rejected.md). +3. **Does your endpoint answer `202` within 30 seconds, with the acceptance body?** A slow or malformed acknowledgement counts as a failed delivery. NHCX retries five times, then deletes the request. See [the 202 acknowledgement and the 30 second rule](../concepts/synchronous-acknowledgement.md) and [gateway retries and the 24 hour expiry window](../concepts/retries-and-expiry.md). +4. **Did you address the right recipient?** When a [TPA](../glossary/tpa.md) processes the policy, `x-hcx-recipient_code` must be the `processingid` from [`/participant/get/policies`](../endpoints/participant-get-policies.md), not the payer's code. +5. **Where does the request stand?** Send one [status check](../endpoints/status.md) with the request's api call id as its correlation id. `request.queued` means it is still inside NHCX. `request.dispatched` means the recipient holds it, and a [`/v1/on_status`](../callbacks/on-status.md) callback follows. See [poll with /v1/status or wait for the callback](../decisions/status-poll-or-wait.md). +6. **Did the recipient reject it?** A recipient that cannot process your request answers with a clear-text `ProtocolResponse`, `x-hcx-status` `response.error`, instead of a sealed payload. If your handler only accepts sealed bodies, you drop it. Read `x-hcx-error_details`, then see [the recipient cannot decrypt your message](../troubleshooting/recipient-cannot-decrypt.md) or [the payer rejects your FHIR bundle](../troubleshooting/bundle-rejected.md). + +## How you know it worked + +The `on_` callback reaches your endpoint carrying the correlation id you sent. Your endpoint answers it `202` within 30 seconds, with the acceptance body, and the next request of the same kind completes the same way. + +## When it goes wrong + +Do not resubmit with the same correlation id: it is refused as a duplicate. Once you know the old cycle failed, start a new one with a new correlation id. + +If every check above passes and nothing arrives, contact NHCX support. Give the api call id, the correlation id, the timestamp and the `202` body. See [support contacts](../sandbox/support-contacts.md). + +The errors this symptom can surface: + +- [NHCX-1001](../errors/nhcx-1001.md): the receiver system is not reachable. +- [NHCX-1006](../errors/nhcx-1006.md): a request with the same correlation id already exists. +- [NHCX-1010](../errors/nhcx-1010.md): no data for the correlation id of a callback. +- [NHCX-1012](../errors/nhcx-1012.md): no records for the api call id of a status check. diff --git a/catalogue/nhcx/troubleshooting/bundle-rejected.md b/catalogue/nhcx/troubleshooting/bundle-rejected.md new file mode 100644 index 000000000..37b7cfb17 --- /dev/null +++ b/catalogue/nhcx/troubleshooting/bundle-rejected.md @@ -0,0 +1,96 @@ +--- +id: nhcx.troubleshooting.bundle-rejected +type: troubleshooting +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: The payer rejects your FHIR bundle +summary: >- + The payer opened your message and refused its content as malformed or incomplete. + The checks that find the fault in the bundle, in order. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheets Bridge Error (PAYR-1004, 1008, 1009, 1012, 1013, HFR, attachment rows) and Payer Error Codes (PAYR-1004). +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 1.3 Key Principles. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 6, best practices. +- url: https://hcxsbx.abdm.gov.in/images/db83dc5cbbc464d8fa15.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/media/Guide For Providers.pdf + hash: sha256:d5c8e55232cc854aa273e0bf4813db17999d7cd5f212eb84d92544b6b9f97e2b + fetched: '2026-09-14' + note: Guide For Providers, listed on https://hcxsbx.abdm.gov.in/#/media-center, not named in the NHCX document sheet. page 8, FHIR Bundle Validation. +verified: + status: unverified +related: + concepts: + - nhcx.concept.fhir-in-nhcx + - nhcx.concept.error-code-spaces + fhir: + - nhcx.fhir.validation + - nhcx.fhir.collection-bundle + errors: + - nhcx.error.payr-1004 + - nhcx.error.payr-1008 + - nhcx.error.payr-1009 + - nhcx.error.payr-1013 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - shared.glossary.fhir + - shared.glossary.nrces + - shared.glossary.hfr +--- + +# The payer rejects your FHIR bundle + +## In plain words + +The payer decrypted your message and could not accept the [FHIR](../../shared/glossary/fhir.md) bundle inside it. The answer names the fault with a code: + +- `PAYR-1004`: the bundle is malformed, followed by error details. +- `PAYR-1008`: the bundle is invalid or cannot be parsed. +- A structural code such as `PAYR-1009`: no identifier for the patient. + +## Before you start + +- You have the full answer, including the error message and any details after the code. +- You have read [FHIR collection bundles and the NHCX claim profiles](../concepts/fhir-in-nhcx.md). +- You can run the [NRCeS](../../shared/glossary/nrces.md) validator. See [validating a bundle](../fhir/validation.md). + +## What happens + +Read the message with the code. `PAYR-1004` also means "Provider is not registered with the payer for requested policy" in the standard payer codes. The message text tells you which one you have. See [error code spaces](../concepts/error-code-spaces.md). + +Then work through these in order. + +1. **Does the bundle pass the NRCeS validator?** Run it on the exact bundle you sealed and fix what it reports first. +2. **Is the bundle shaped right?** It is a `Bundle` of type `collection`. Every resource declares its NRCeS profile in `meta.profile`. Resources reference each other as `urn:uuid:`, not by relative paths. See [the collection bundle](../fhir/collection-bundle.md). +3. **Does every resource carry its identifier and type?** The patient, the provider organisation, the payer organisation and the claim each need an identifier with a type. +4. **Is your hospital identified correctly?** Send the [HFR](../../shared/glossary/hfr.md) ID as an identifier with type code `NPI` in the provider `Organization`. It must match the registry ID recorded for you as sender. +5. **Are the attachments valid?** Each has Base64 data, a name that is not empty, and one of these content types: `application/pdf`, `application/jpg`, `application/jpeg`, `application/png`, `application/fhir+json`. +6. **Are the values clean?** Trim leading and trailing spaces. Codes are case sensitive and must match the expected values exactly. + +## How you know it worked + +The validator passes the bundle, and the payer's answer is an adjudication: a ClaimResponse or eligibility response with an outcome, not a bundle error. + +## When it goes wrong + +If the validator passes and the payer still refuses the bundle, send the bundle to `hcx.integration@nha.gov.in` for validation by the NRCeS team. Include the payer's full error message. See [support contacts](../sandbox/support-contacts.md). + +The errors this symptom can surface: + +- [PAYR-1004](../errors/payr-1004.md): the bundle is malformed. +- [PAYR-1008](../errors/payr-1008.md): the bundle is invalid or cannot be parsed. +- [PAYR-1009](../errors/payr-1009.md): no identifier for the patient. +- [PAYR-1013](../errors/payr-1013.md): no identifier for the provider organisation. diff --git a/catalogue/nhcx/troubleshooting/callback-url-rejected.md b/catalogue/nhcx/troubleshooting/callback-url-rejected.md new file mode 100644 index 000000000..485e0bf24 --- /dev/null +++ b/catalogue/nhcx/troubleshooting/callback-url-rejected.md @@ -0,0 +1,90 @@ +--- +id: nhcx.troubleshooting.callback-url-rejected +type: troubleshooting +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Your callback URL is rejected or never called +summary: >- + Your registered endpoint is refused, or saved and never called. The checks that + make it reachable, in order. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 4-6, Q14 and Q21. +- url: https://hcxsbx.abdm.gov.in/images/260d0dec19a681e80262.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf + hash: sha256:c38476fb90101f13fdfea447861292718d561e1dc088ae20950b193606500d2e + fetched: '2026-09-14' + note: Onboarding providers and payers in Production, row 5 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 3, Steps 3 and 4. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. NHCX Participant Registry; Transport Security. +- url: https://hcxsbx.abdm.gov.in/images/7e71b563b562509cca5a.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf + hash: sha256:b65cf1ec6dc1e33c7a9e77106ff7f1892e66d943598b64809f3a677752f6efbe + fetched: '2026-09-14' + note: API Response Handling to avoid Failures, row 15 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, Error scenario. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet NHCX Error Codes, NHCX-1001. +verified: + status: unverified +related: + concepts: + - nhcx.concept.participant-registry + - nhcx.concept.synchronous-acknowledgement + - nhcx.concept.retries-and-expiry + endpoints: + - nhcx.endpoint.participant-update + - nhcx.endpoint.v2-participant-update + - nhcx.endpoint.update-validate + sandbox: + - nhcx.sandbox.callback-url-requirements + - nhcx.sandbox.support-contacts + errors: + - nhcx.error.nhcx-1001 + troubleshooting: + - nhcx.troubleshooting.accepted-then-no-callback +--- + +# Your callback URL is rejected or never called + +## In plain words + +[NHCX](../../shared/glossary/nhcx.md) delivers requests and answers to the endpoint URL in your participant record. Either the update that sets it is refused, or it saves and nothing ever arrives. Senders see `NHCX-1001`, receiver system not reachable, when your endpoint cannot be reached. + +## Before you start + +- Your participant is active and you can call the participant update. See [the participant registry and what a participant record holds](../concepts/participant-registry.md). +- You have read [callback URL requirements](../sandbox/callback-url-requirements.md). + +## What happens + +Work through these in order. + +1. **Is the URL HTTPS and publicly reachable?** The endpoint must be HTTPS, publicly accessible and reachable from NHCX. +2. **Does it use a domain name?** Use a fully qualified domain name. An IP address or an explicit port number is not accepted. +3. **Is the server in India?** Callback servers must be hosted in India. +4. **Are the NHCX addresses allowed in?** Whitelist the NAT IPs `3.109.99.210`, `13.126.152.0` and `13.200.129.223` in your server configuration and firewall. Confirm no firewall rule blocks incoming requests from them. +5. **Did you confirm the update?** An update to your endpoint sends a passcode. The new endpoint activates only after you confirm it with [`/update/validate`](../endpoints/update-validate.md), within 24 hours. See [`POST /participant/update`](../endpoints/participant-update.md) and [`POST /v2/participant/update`](../endpoints/v2-participant-update.md). +6. **Does your application route the paths NHCX calls?** Requests arrive on the use case paths, such as `/v1/claim/on_submit`. Check that load balancers, API gateways and reverse proxies send each path to the right service and version. +7. **Does your endpoint answer fast enough?** Answer `202` within 30 seconds with the acceptance body. Otherwise NHCX retries five times, then deletes the request. See [the 202 acknowledgement and the 30 second rule](../concepts/synchronous-acknowledgement.md). + +## How you know it worked + +Your participant record shows the new endpoint as active. The next request or callback addressed to you arrives on the right path, and your endpoint answers it `202` within 30 seconds. + +## When it goes wrong + +If every check passes and nothing arrives, look at whether the request was ever sent to you. See [the request was accepted with 202 and no callback arrives](../troubleshooting/accepted-then-no-callback.md). + +If the update itself keeps failing, contact NHCX support with your participant code, the endpoint URL and the full response. See [support contacts](../sandbox/support-contacts.md). + +The error this symptom can surface: [NHCX-1001](../errors/nhcx-1001.md), the receiver system is not reachable. diff --git a/catalogue/nhcx/troubleshooting/duplicate-or-mismatched-correlation.md b/catalogue/nhcx/troubleshooting/duplicate-or-mismatched-correlation.md new file mode 100644 index 000000000..e50680397 --- /dev/null +++ b/catalogue/nhcx/troubleshooting/duplicate-or-mismatched-correlation.md @@ -0,0 +1,95 @@ +--- +id: nhcx.troubleshooting.duplicate-or-mismatched-correlation +type: troubleshooting +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Responses arrive against the wrong request +summary: >- + Answers land on the wrong case, or the exchange refuses a request as a duplicate. + The checks on your message identifiers, in order. +sources: +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, item 8. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. NHCX Protocol Headers table. +- url: https://hcxsbx.abdm.gov.in/images/bd0c2ad1d5f672c40562.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Payer Side Use Cases- Sandbox Exit Process.pdf + hash: sha256:50be7b035a2bed658b7cbbe2e8b02444aea2cda3e3af5ed04832565c825a603d + fetched: '2026-09-14' + note: NHCX Payer Side Use Cases- Sandbox Exit Process, row 10 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Table 2.2 Validations. +- url: https://hcxsbx.abdm.gov.in/images/c8a5a74cc38bcd46586d.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Requests and Responses for UseCases.xlsx + hash: sha256:25d9426cab5661180103996888855e3cef20b701862d6800ec7659855303a913 + fetched: '2026-09-14' + note: NHCX Requests and Responses for UseCases, row 11 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheets CoverageEligibility and Preauth, correlation rows. +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 3, Q4. +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet NHCX Error Codes, NHCX-1006. +verified: + status: unverified +related: + concepts: + - nhcx.concept.message-identifiers + - nhcx.concept.protocol-headers + decisions: + - nhcx.decision.status-poll-or-wait + errors: + - nhcx.error.nhcx-1006 + - nhcx.error.nhcx-1010 + - nhcx.error.nhcx-1012 + - nhcx.error.payr-1516 + glossary: + - nhcx.glossary.correlation-id + - nhcx.glossary.api-call-id +--- + +# Responses arrive against the wrong request + +## In plain words + +An answer from [NHCX](../../shared/glossary/nhcx.md) is attached to the wrong case in your system. Or the exchange refuses a request as a duplicate, or refuses a callback it cannot match. All three come from how your system sets and reads the correlation id and the api call id. + +## Before you start + +- You log the `x-hcx-correlation_id` and `x-hcx-api_call_id` of every message you send and receive. +- You have read [correlation id, API call id and workflow id](../concepts/message-identifiers.md). + +## What happens + +Work through these in order. + +1. **Does each request cycle get its own correlation id?** Generate a new random 36-character identifier for every request that opens a cycle. Set it equal to that request's api call id. Never copy one from an example. See [correlation id](../glossary/correlation-id.md). +2. **Does every message in the cycle carry it unchanged?** The answer, any query and every callback in the cycle echo the correlation id of the request. The answer's own api call id is different. +3. **Is the api call id new on every call?** Generate a fresh one for every call, including retries. See [API call id](../glossary/api-call-id.md). +4. **Did you reuse a failed cycle's correlation id?** After an error, the correlation id becomes inactive. A new request with it is refused with `NHCX-1006`. Start a fresh cycle with a new id. +5. **Do you match answers by correlation id?** Store the correlation id against the case before you send. Match every incoming message on it, never on arrival order or time. +6. **If you are the payer, is the receiver right?** The receiver code of your answer is the sender code of the request you answer. + +## How you know it worked + +Every callback lands on the case whose request carried its correlation id. New requests are accepted with `202`, and your logs show no `NHCX-1006` or `NHCX-1010`. + +## When it goes wrong + +If one case's answers keep landing elsewhere after these checks, compare the correlation id in the misplaced callback with the one stored on each case. Two cases holding the same value point at a generator that repeats. A status check can confirm which request NHCX holds for an id. See [poll with /v1/status or wait for the callback](../decisions/status-poll-or-wait.md). + +The errors this symptom can surface: + +- [NHCX-1006](../errors/nhcx-1006.md): a request with the same correlation id already exists. +- [NHCX-1010](../errors/nhcx-1010.md): no data for the correlation id of a callback. +- [NHCX-1012](../errors/nhcx-1012.md): no records for an api call id. +- [PAYR-1516](../errors/payr-1516.md): no event found for the api call id and correlation id of an error response. diff --git a/catalogue/nhcx/troubleshooting/everything-returns-401.md b/catalogue/nhcx/troubleshooting/everything-returns-401.md new file mode 100644 index 000000000..85d9dcb91 --- /dev/null +++ b/catalogue/nhcx/troubleshooting/everything-returns-401.md @@ -0,0 +1,87 @@ +--- +id: nhcx.troubleshooting.everything-returns-401 +type: troubleshooting +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: Every NHCX call returns 401 +summary: >- + Every call you make is rejected as unauthorised, not only one. The checks that + rule out the token and headers, in order. +sources: +- url: https://hcxsbx.abdm.gov.in/images/ff9eae6e99c1aee8a9fd.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/FAQs.pdf + hash: sha256:5275f391537c7a97c0d11321951eb0420bd97ed42d1b3bce241c013c4b677dd8 + fetched: '2026-09-14' + note: FAQs, row 21 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Q3; page 5, Q20. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. pages 1-2, items 6, 9 and 10. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Section 3.1 Token Request. +- url: https://hcxsbx.abdm.gov.in/images/54d18468412741b759f3.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Authenticating with NHCX.pdf + hash: sha256:0ea90b635634844aaf8981e917cbf8b765ddd83a340f3c934883912599a62d8b + fetched: '2026-09-14' + note: Authenticating with NHCX, row 3 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1. +- url: https://hcxsbx.abdm.gov.in/images/539853c50347b32b9a5e.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf + hash: sha256:420115b9a54e15fa625312a56362164d92d23dd0d6ebf9195135bb00055d1911 + fetched: '2026-09-14' + note: Policy Linking and De-Linking Process, row 8 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 2, Validation for De-Linking. +verified: + status: unverified +related: + concepts: + - nhcx.concept.session-token + - nhcx.concept.policy-linking + decisions: + - nhcx.decision.session-endpoint + endpoints: + - nhcx.endpoint.session-token + - nhcx.endpoint.get-session + errors: + - nhcx.error.nhcx-401 + sandbox: + - nhcx.sandbox.environments-and-base-urls + - nhcx.sandbox.support-contacts +--- + +# Every NHCX call returns 401 + +## In plain words + +Every call to [NHCX](../../shared/glossary/nhcx.md) fails with `401`, often with the message `Sender is not authorized to execute the operation`. When every endpoint fails the same way, the fault is your token or the header carrying it, not any one operation. + +## Before you start + +- More than one endpoint is failing. If one call fails while others succeed, read that call's own error instead. +- You have the full response body, not only the status code. +- You know where your system gets its token. See [which session token endpoint to call](../decisions/session-endpoint.md). + +## What happens + +Work through these in order. + +1. **Has the token expired?** This message appears when the session token has expired. Read the lifetime from the token response, `expiresIn` or `expires_in`, instead of assuming one. Fetch a new token and retry the failing call once. Retrying with the old token fails the same way. See [the session token every NHCX call carries](../concepts/session-token.md). +2. **Does the value start with `Bearer `?** The header value is the word `Bearer`, a space, then the token. A bare token gives `401`. +3. **Is the token in the header the call reads?** Send the same value in both `bearer_auth` and `Authorization`: `Bearer `. +4. **Are the token and the host from the same environment?** A sandbox token does not work against a production host, or the reverse. Compare the host you minted the token on with the host of the failing call. See [environments and base URLs](../sandbox/environments-and-base-urls.md). +5. **Is the token call itself healthy?** If minting a token fails, check the credentials and the body format for the address you call. See [`POST /api/hiecm/gateway/v3/sessions`](../endpoints/session-token.md) and [`POST /get/session`](../endpoints/get-session.md). + +## How you know it worked + +A call that was returning `401` now returns its normal response, and keeps doing so across several calls over more than one token lifetime. One success after several failures can be a token that happened to be fresh; confirm again after the next refresh. + +## When it goes wrong + +A `401` on linking or de-linking a policy, while other calls work, is a different fault. The token must come from the client ID used when the payer or TPA named in the link was created. See [linking an ABHA to an insurance policy](../concepts/policy-linking.md). + +If all five checks pass and calls still return `401`, the credentials may have been revoked or reissued. Contact NHCX support with the API you called, the time of the call and the full response body. Never send the token or the client secret. See [support contacts](../sandbox/support-contacts.md). + +The error this symptom surfaces: [NHCX-401](../errors/nhcx-401.md), user unauthorized. diff --git a/catalogue/nhcx/troubleshooting/recipient-cannot-decrypt.md b/catalogue/nhcx/troubleshooting/recipient-cannot-decrypt.md new file mode 100644 index 000000000..3408d4e57 --- /dev/null +++ b/catalogue/nhcx/troubleshooting/recipient-cannot-decrypt.md @@ -0,0 +1,93 @@ +--- +id: nhcx.troubleshooting.recipient-cannot-decrypt +type: troubleshooting +gateway: nhcx +milestone: n/a +version: nhcx-v1 +title: The recipient cannot decrypt your message +summary: >- + The payer answers that it could not open your sealed payload. The checks that + find the wrong key, form or header, in order. +sources: +- url: https://hcxsbx.abdm.gov.in/images/5a6cd3fe4604321fd732.xlsx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Standard Error Codes.xlsx + hash: sha256:3ab37546fe8a60adb66c37fab8ed707db6af8e1f1acd69350f8e267bb30acd76 + fetched: '2026-09-14' + note: Standard Error Codes, row 18 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. sheet Bridge Error, PAYR-1001 and PAYR-1002; sheet Payer Error Codes. +- url: https://hcxsbx.abdm.gov.in/images/28df441a1ebeb1b0db15.docx + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/hmisdocuments/NHCX PMJAY Integration Handbook.docx + hash: sha256:beef72eb0c33bf23952d9260c30bfe6cc28796c731f5fbd2c4168e336f2859c1 + fetched: '2026-09-14' + note: NHCX PMJAY Integration Handbook, row 24 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/hmisdocuments. Sections 2.1-2.4 and 3.3. +- url: https://hcxsbx.abdm.gov.in/#/technical-specifications + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/pages/technical-specifications.md + hash: sha256:b2d4834fa71f26721319a8222ad44feb35467592d62a00e6c3127ac3636e96cc + fetched: '2026-09-14' + note: Site page /technical-specifications, text as shown on the site. NHCX Protocol Headers table. +- url: https://hcxsbx.abdm.gov.in/images/038d85cffc7df66ed1a4.pdf + file: catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf + hash: sha256:b4af12a432a29886e1ae4956340ff07782bba7df792380de3a408f4e5a55673f + fetched: '2026-09-14' + note: Common Mistakes while implementing through NHCX, row 22 of the NHCX document sheet, listed on https://hcxsbx.abdm.gov.in/#/documents. page 1, item 4; page 2, item 7. +verified: + status: unverified +related: + concepts: + - nhcx.concept.encryption-certificate + - nhcx.concept.jwe-envelope + - nhcx.concept.protocol-headers + decisions: + - nhcx.decision.key-encryption-algorithm + - nhcx.decision.jwe-serialisation + flows: + - nhcx.flow.rotate-certificate + - nhcx.flow.generate-and-register-certificate + endpoints: + - nhcx.endpoint.fetch-certs + - nhcx.endpoint.v2-update-cert + - nhcx.endpoint.participant-update + errors: + - nhcx.error.payr-1001 + - nhcx.error.payr-1002 + sandbox: + - nhcx.sandbox.support-contacts + glossary: + - nhcx.glossary.jwe + - nhcx.glossary.x509-certificate + - nhcx.glossary.protected-header + - nhcx.glossary.tpa +--- + +# The recipient cannot decrypt your message + +## In plain words + +The payer's answer is a clear-text `ProtocolResponse` carrying `PAYR-1001`: an error occurred while decrypting the payload for the receiver code. The recipient could not open your [JWE](../glossary/jwe.md) with its private key. The fault is almost always on the sending side: the wrong certificate, the wrong algorithm or the wrong form. + +## Before you start + +- You have the `ProtocolResponse`, including `x-hcx-error_details` and the correlation id. +- You have read [your encryption certificate and the recipient's](../concepts/encryption-certificate.md). + +## What happens + +Work through these in order. + +1. **Did you seal to the recipient you addressed?** The certificate must belong to the participant in `x-hcx-recipient_code`. Fetch it with [`POST /fetch/certs`](../endpoints/fetch-certs.md), passing that code as `participantid`. When a [TPA](../glossary/tpa.md) processes the policy, that is the `processingid`. +2. **Is your cached copy stale?** Cache a fetched certificate for 24 hours at most. On `PAYR-1001`, fetch it again and resend. A recipient that rotated its key has a new certificate. +3. **Did the key import correctly?** `/fetch/certs` can return a PEM-encoded [X.509 certificate](../glossary/x509-certificate.md) or a bare SubjectPublicKeyInfo public key. Try X.509 import first, then fall back to the bare key. +4. **Are the algorithms right?** The protected header must carry `alg` `RSA-OAEP-256` and `enc` `A256GCM`. See [RSA-OAEP or RSA-OAEP-256 for the content key](../decisions/key-encryption-algorithm.md). +5. **Is the form right?** The body must be `{"payload": ""}`, a compact string with four dots. See [compact or flattened JWE serialisation](../decisions/jwe-serialisation.md). +6. **Is the [protected header](../glossary/protected-header.md) complete?** It must carry `x-hcx-sender_code`, `x-hcx-recipient_code`, `x-hcx-api_call_id`, `x-hcx-correlation_id`, `x-hcx-workflow_id`, `x-hcx-timestamp` and `x-hcx-status`, as participant codes from NHCX and fresh identifiers. + +The reverse fault has its own code. `PAYR-1002` means the payer could not seal its answer to you with the certificate registered for you. Update your registered certificate with [`POST /v2/update/cert`](../endpoints/v2-update-cert.md) or [`POST /participant/update`](../endpoints/participant-update.md). The payer fetches the new one and sends its answer. See [rotate your encryption certificate](../flows/rotate-certificate.md). + +## How you know it worked + +You resend the same content with a fresh correlation id and a fresh api call id. NHCX refuses a correlation id it already holds with [`NHCX-1006`](../errors/nhcx-1006.md), and a request that failed is retired. The answer arrives as a sealed payload on your callback, not a `ProtocolResponse`. Your own decrypter opens it with your private key. + +## When it goes wrong + +If every check passes and `PAYR-1001` persists, confirm with the recipient that its registered certificate matches the private key it decrypts with. Then contact NHCX support with the receiver code and correlation id. See [support contacts](../sandbox/support-contacts.md). + +The errors this symptom can surface: [PAYR-1001](../errors/payr-1001.md), the recipient could not decrypt your payload; and [PAYR-1002](../errors/payr-1002.md), the payer could not encrypt its answer to you. diff --git a/catalogue/openapi/.raw/nhcx-package-2026-09-15/nhcx-error.yaml b/catalogue/openapi/.raw/nhcx-package-2026-09-15/nhcx-error.yaml new file mode 100644 index 000000000..9b5e2e32e --- /dev/null +++ b/catalogue/openapi/.raw/nhcx-package-2026-09-15/nhcx-error.yaml @@ -0,0 +1,1128 @@ +# NHCX error codes: the gateway codes, the standard payer codes and the reference payer codes. +# build-docs renders the tables in docs/06-Reference/01-Error Codes.md from this file. +# kind is the published sheet's classification, Transport or Business, on the codes the sheet classifies. +# collisions lists the codes from PAYR-1001 to PAYR-1020 that the standard sheet (Payer Error Codes) and the +# reference payer's Bridge Error sheet read differently: eighteen of the twenty. PAYR-1001 and PAYR-1002 are +# a decryption and an encryption failure on both sheets. +# note, on a code, records what the SHA HP sandbox payer sent that the sheet does not say. The observed space +# holds the one code the sandbox run met that is on none of the seven sheets. +spaces: + - id: gateway + name: Gateway + prefix: NHCX- + sent_by: The exchange + arrives: Synchronously on your own call, or on /v1/error + - id: standard-payer + name: Standard payer + prefix: PAYR-1001 to PAYR-1020 + sent_by: A payer implementing the published standard + arrives: Inside the sealed response + - id: reference-payer + name: Reference payer + prefix: PAYR-1001 to PAYR-1520 + sent_by: The PMJAY reference implementation + arrives: Inside the sealed response + - id: observed + name: Observed live + prefix: ERR-PYR- + sent_by: The PMJAY reference implementation, on none of its published sheets + arrives: Inside the sealed response +collisions: + - code: PAYR-1003 + standard_payer: Error while connecting to NHCX; the system will resend later + reference_payer: Invalid workflow requested (marked deprecated on the Bridge Error sheet) + - code: PAYR-1004 + standard_payer: Provider is not registered with the payer for the requested policy + reference_payer: Received FHIR bundle is malformed + - code: PAYR-1005 + standard_payer: Beneficiary is not a covered member for the requested policy + reference_payer: Maximum time limit exceeded in receiving the request + - code: PAYR-1006 + standard_payer: Policy does not exist + reference_payer: Invalid name in request (marked deprecated on the Bridge Error sheet) + - code: PAYR-1007 + standard_payer: Requested policy is expired + reference_payer: Invalid gender in request (marked deprecated on the Bridge Error sheet) + - code: PAYR-1008 + standard_payer: Eligible coverage amount is insufficient + reference_payer: Invalid FHIR bundle received + - code: PAYR-1009 + standard_payer: Requested items are not valid or not covered + reference_payer: No identifier found for patient component + - code: PAYR-1010 + standard_payer: Preauthorisation is required but was not obtained + reference_payer: No type found for patient component identifier + - code: PAYR-1011 + standard_payer: The prior approved package does not support enhancement + reference_payer: No identifier found for claim component + - code: PAYR-1012 + standard_payer: Claim amount is more than the preauthorisation approved amount + reference_payer: No type found for claim component identifier + - code: PAYR-1013 + standard_payer: No prior approval for the requested procedures or packages + reference_payer: No identifier found for organization component for provider + - code: PAYR-1014 + standard_payer: Date of birth is after the date of service + reference_payer: No type found for organization component identifier for provider + - code: PAYR-1015 + standard_payer: Date of service is after the date of death + reference_payer: No identifier found for organization component for payer + - code: PAYR-1016 + standard_payer: Duplicate claim submitted based on service codes and dates + reference_payer: No type found for organization component identifier for payer + - code: PAYR-1017 + standard_payer: Amount calculations are not correct + reference_payer: No task code received + - code: PAYR-1018 + standard_payer: Time limit for submission expired + reference_payer: No task reason code received + - code: PAYR-1019 + standard_payer: Requested additional information was not received in time + reference_payer: Invalid sequence received in supporting info element + - code: PAYR-1020 + standard_payer: No valid bank details found for the provider + reference_payer: Invalid category received in supporting info element +bands: + - band: NHCX-1xxx + rejected_by: The exchange, on the envelope + means: The message never reached the payer + - band: PAYR-10xx + rejected_by: Transport and bundle structure + means: An element, id, sequence or type is missing. Not a value problem + - band: PAYR-11xx + rejected_by: Coverage eligibility + means: The policy, the beneficiary or the hospital configuration + - band: PAYR-12xx + rejected_by: Preauthorisation + means: Codes, amounts, dates, sequencing and scheme rules + - band: PAYR-13xx + rejected_by: Claim + means: The same, against the approved preauthorisation + - band: PAYR-14xx + rejected_by: Insurance plan, and the scheme's outer rules + means: Empanelment, policy association, plan configuration +codes: + - code: NHCX-401 + space: gateway + kind: Business + message: User Unauthorized + - code: NHCX-1001 + space: gateway + kind: Transport + message: Receiver system is not reachable. + - code: NHCX-1002 + space: gateway + kind: Business + message: Sender not registered in NHCX. Please register in NHCX portal and try again. + - code: NHCX-1003 + space: gateway + kind: Business + message: Receiver not registered in NHCX. Please try again with valid receiver details. + - code: NHCX-1004 + space: gateway + kind: Business + message: No receiver registered in NHCX for the requested scheme. Please try again with valid receiver details for the scheme. + - code: NHCX-1005 + space: gateway + kind: Business + message: Invalid request header. Please try again with valid headers. + - code: NHCX-1006 + space: gateway + kind: Business + message: Duplicate request. Request with same correlation id already exist in the system. + - code: NHCX-1007 + space: gateway + kind: Business + message: Something went wrong while processing the request. Please check the request structure and values and try again. + - code: NHCX-1008 + space: gateway + kind: Business + message: Something went wrong while processing the request. Please try again after sometime. + - code: NHCX-1009 + space: gateway + kind: Business + message: Something went wrong while processing the request. Please check log for more details. + - code: NHCX-1010 + space: gateway + kind: Business + message: No Data with given Correlation id for call back request, please check status for more details + - code: NHCX-1011 + space: gateway + kind: Business + message: Invalid Status, please check x-hcx-status value from the protected header + - code: NHCX-1012 + space: gateway + kind: Business + message: No records found with the requested api caller id. Please try again with a valid api caller id. + - code: NHCX-1013 + space: gateway + kind: Business + message: Invalid or blank request found. + - code: NHCX-1014 + space: gateway + kind: Business + message: Unable to send protocol response to sender. + - code: NHCX-1015 + space: gateway + kind: Business + message: Invalid response received from receiver. + - code: NHCX-1016 + space: gateway + kind: Business + message: Invalid Api Action, please check the request action for this correlationId before trying again + - code: NHCX-1017 + space: gateway + kind: Business + message: Invalid response received from receiver + - code: NHCX-1018 + space: gateway + kind: Business + message: Invalid ABHA number received. ABHA number should be sent in the format XX-XXXX-XXXX-XXXX + - code: PAYR-1001 + space: standard-payer + message: Error while decrypting request. Please reprocess the request encrypting with valid certificate of the payer. + - code: PAYR-1002 + space: standard-payer + message: Error while encrypting request. Please update encryption certificate in NHCX. + - code: PAYR-1003 + space: standard-payer + message: Error while connecting to NHCX. System will try to resend the message to NHCX after some time. + - code: PAYR-1004 + space: standard-payer + message: Provider is not registered with the payer for requested policy. + - code: PAYR-1005 + space: standard-payer + message: Beneficiary is not a covered member for requested policy. Please enroll beneficiary for the policy and try again. + - code: PAYR-1006 + space: standard-payer + message: Policy does not exist. Please try with a valid policy. + - code: PAYR-1007 + space: standard-payer + message: Requested policy is expired. Please try with a valid policy. + - code: PAYR-1008 + space: standard-payer + message: Eligible coverage amount of the beneficiary for the requested policy is insufficient to process the request. + - code: PAYR-1009 + space: standard-payer + kind: Business + message: Requested items are not valid or not covered. Please try again with valid or covered items. + - code: PAYR-1010 + space: standard-payer + kind: Business + message: Preauthorization is required to process the request but was not obtained. + - code: PAYR-1011 + space: standard-payer + kind: Business + message: Enhancement request can not be processed as the prior approved package/procedure does not support enhancement. + - code: PAYR-1012 + space: standard-payer + kind: Business + message: Claim amount requested is more than the preauthorization approved amount. + - code: PAYR-1013 + space: standard-payer + kind: Business + message: No prior approval for the requested procedures/packages obtained. + - code: PAYR-1014 + space: standard-payer + kind: Business + message: Date of birth of the beneficiary can not be after date of service. + - code: PAYR-1015 + space: standard-payer + kind: Business + message: Date of service cannot be after date of death. + - code: PAYR-1016 + space: standard-payer + kind: Business + message: Duplicate claim submitted based on service codes and dates. + - code: PAYR-1017 + space: standard-payer + kind: Business + message: Amount calculations are not correct. Please verify calculated amount. + - code: PAYR-1018 + space: standard-payer + kind: Business + message: Time limit for submission expired. + - code: PAYR-1019 + space: standard-payer + kind: Business + message: Requested additional information was not received or was not received within time limit + - code: PAYR-1020 + space: standard-payer + kind: Business + message: Unable to process payment as no valid bank details found for the provider. + - code: PAYR-1001 + space: reference-payer + message: Error occurred while decrypting payload for receiver code with correlation id . + - code: PAYR-1002 + space: reference-payer + message: Error occurred while encrypting payload for receiver code with correlation id . + - code: PAYR-1003 + space: reference-payer + message: Invalid workflow requested. Hence request will not be processed further. + - code: PAYR-1004 + space: reference-payer + message: Received FHIR bundle is malformed. Please correct the bundle and try again. + - code: PAYR-1005 + space: reference-payer + message: Maximum time limit exceeded in receiving the request. Please try again. + - code: PAYR-1006 + space: reference-payer + message: Invalid name in request. Hence request will not be processed further. + - code: PAYR-1007 + space: reference-payer + message: Invalid gender in request. Hence request will not be processed further. + - code: PAYR-1008 + space: reference-payer + message: Invalid FHIR bundle received. Hence request will not be processed further. + - code: PAYR-1009 + space: reference-payer + message: No identifier found for patient component. Hence request will not be processed further. https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html + - code: PAYR-1010 + space: reference-payer + message: No type found for patient component identifier. Hence request will not be processed further. https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html + - code: PAYR-1011 + space: reference-payer + message: No identifier found for claim component. Hence request will not be processed further. + - code: PAYR-1012 + space: reference-payer + message: No type found for claim component identifier. Hence request will not be processed further. + - code: PAYR-1013 + space: reference-payer + message: No identifier found for organization component for provider. Hence request will not be processed further. + - code: PAYR-1014 + space: reference-payer + message: No type found for organization component identifier for provider. Hence request will not be processed further. + - code: PAYR-1015 + space: reference-payer + message: No identifier found for organization component for payer. Hence request will not be processed further. + - code: PAYR-1016 + space: reference-payer + message: No type found for organization component identifier for payer. Hence request will not be processed further. + - code: PAYR-1017 + space: reference-payer + message: No task code received. Hence request will not be processed further. + - code: PAYR-1018 + space: reference-payer + message: No task reason code received. Hence request will not be processed further. + - code: PAYR-1019 + space: reference-payer + message: Invalid sequence received in supporting info element. Hence request will not be processed further. + - code: PAYR-1020 + space: reference-payer + message: Invalid category received in supporting info element for sequence %s. Hence request will not be processed further. + - code: PAYR-1021 + space: reference-payer + message: Invalid code received in supporting info element for sequence %s. Hence request will not be processed further. + - code: PAYR-1023 + space: reference-payer + message: Invalid procedure category received for procedure component. Hence request will not be processed further. + - code: PAYR-1024 + space: reference-payer + message: Invalid procedure status received for procedure component. Hence request will not be processed further. + - code: PAYR-1025 + space: reference-payer + message: Invalid procedure sequence received for procedure component. Hence request will not be processed further. + - code: PAYR-1026 + space: reference-payer + message: No procedure component found for reference in claim component. Hence request will not be processed further. + - code: PAYR-1027 + space: reference-payer + message: Invalid item id found for item in claim component. Hence request will not be processed further. + - code: PAYR-1028 + space: reference-payer + message: Invalid item sequence received for item in claim component. Hence request will not be processed further. + - code: PAYR-1029 + space: reference-payer + message: Invalid bundle id received for FHIR bundle. Hence request will not be processed further. + - code: PAYR-1030 + space: reference-payer + message: Invalid questionnaire id received in FHIR bundle for questionnaire component. Hence request will not be processed further. + - code: PAYR-1031 + space: reference-payer + message: Invalid url received for bundle entry in FHIR bundle. Hence request will not be processed further. Please reach out to technical team. + - code: PAYR-1032 + space: reference-payer + message: Invalid purpose received for coverage eligibility request. Hence request will not be processed further. Please try again with valid purpose details. + - code: PAYR-1033 + space: reference-payer + message: No items received for coverage eligibility purpose. Since items are mandatory for the requested purpose, hence request will not be processed further. Please try again with valid item details. + - code: PAYR-1034 + space: reference-payer + message: Invalid procedure code received. Please try again with valid procedure details. + - code: PAYR-1035 + space: reference-payer + message: Invalid policy code received. Please try again with valid policy details. + - code: PAYR-1036 + space: reference-payer + message: Invalid attachment received in supporting info with sequence number %s. Please try again with valid attachment details as attachment value is expected. If issue is not resolved, please reach out to technical team. + - code: PAYR-1037 + space: reference-payer + message: No identifier found for communication component. Hence request will not be processed further. + - code: PAYR-1038 + space: reference-payer + message: No type found for communication component identifier. Hence request will not be processed further. + - code: PAYR-1039 + space: reference-payer + message: No payload found for communication component. Hence request will not be processed further. + - code: PAYR-1040 + space: reference-payer + message: No component found for given reference. Hence request will not be processed further. + - code: PAYR-1041 + space: reference-payer + message: No identifier found for procedure component. Hence request will not be processed further. + - code: PAYR-1042 + space: reference-payer + message: No type found for procedure component identifier. Hence request will not be processed further. + - code: PAYR-1043 + space: reference-payer + message: Date received in the request does not adhere to the NRCES date datatype format. Hence request will not be processed further. Please refere to the date format in NRCES portal. + - code: PAYR-1044 + space: reference-payer + message: Date and time received in the request does not adhere to the NRCES date datatype format. Hence request will not be processed further. Please refere to the date time format in NRCES portal. + - code: PAYR-1045 + space: reference-payer + message: Invalid quantity received for item. Hence request will not be processed further. + - code: PAYR-1046 + space: reference-payer + message: No value or timing details received for supporting info for sequence %s. Hence request will not be processed further. Please reach out to technical team. + - code: PAYR-1047 + space: reference-payer + message: Invalid reference received in supporting info with sequence number %s. Please try again with valid resource as reference value. + - code: PAYR-1048 + space: reference-payer + message: No reference resource received for supporting info with sequence number %s. Please try again with valid resource for reference value. + - code: PAYR-1049 + space: reference-payer + message: Invalid FHIR bundle received. Hence request will not be processed further. please reach out to technical team. + - code: PAYR-1050 + space: reference-payer + message: No type found for practitioner component identifier. Hence request will not be processed further. + - code: PAYR-1051 + space: reference-payer + message: No section found for composition component. Hence request will not be processed further. + - code: PAYR-1052 + space: reference-payer + message: No references found in composition section. Hence request will not be processed further. + - code: PAYR-1053 + space: reference-payer + message: Invalid reference found in child sections of composition section. Hence request will not be processed further. + - code: PAYR-1054 + space: reference-payer + message: No section content found for composition component. Hence request will not be processed further. + - code: PAYR-1055 + space: reference-payer + message: Invalid subject type found for composition component. This should be of type Patient. Hence request will not be processed further. Please try again with valid subject type for the composition. + - code: PAYR-1056 + space: reference-payer + message: Invalid contact organization found for subject in composition component. This should be of type Organization. Hence request will not be processed further. Please try again with valid data. + - code: PAYR-1057 + space: reference-payer + message: Invalid general practioner type found for subject in composition component. This should be of type Organization/Practitioner/PractitionerRole. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html + - code: PAYR-1058 + space: reference-payer + message: Invalid managing organization type found for subject in composition component. This should be of type Organization. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Patient.html + - code: PAYR-1059 + space: reference-payer + message: Invalid encounter type found for composition/observation component. This should be of type Encounter. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-DiagnosticReportRecord.html + - code: PAYR-1060 + space: reference-payer + message: No subject found for encounter in composition component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + - code: PAYR-1061 + space: reference-payer + message: Invalid subject type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + - code: PAYR-1062 + space: reference-payer + message: No episode of care found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + - code: PAYR-1063 + space: reference-payer + message: Invalid episode of care type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + - code: PAYR-1064 + space: reference-payer + message: No based on found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + - code: PAYR-1065 + space: reference-payer + message: Invalid based on type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + - code: PAYR-1066 + space: reference-payer + message: No appointment found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + - code: PAYR-1067 + space: reference-payer + message: Invalid appointment type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + - code: PAYR-1068 + space: reference-payer + message: No reason reference found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + - code: PAYR-1069 + space: reference-payer + message: Invalid reason reference type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + - code: PAYR-1070 + space: reference-payer + message: No author found for composition component. Hence request will not be processed further. + - code: PAYR-1071 + space: reference-payer + message: Invalid author type found for composition component. This should be of type Practitioner / PractitionerRole / Organization / Patient / Device / RelatedPerson. Hence request will not be processed further. Please try again with valid author type for the composition. + - code: PAYR-1072 + space: reference-payer + message: No procedure reference received for procedure element in claim resource. Hence request will not be processed further. + - code: PAYR-1073 + space: reference-payer + message: No based on found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html + - code: PAYR-1074 + space: reference-payer + message: Invalid based on type found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html + - code: PAYR-1075 + space: reference-payer + message: No part of found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html + - code: PAYR-1076 + space: reference-payer + message: Invalid part of type found for observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Observation.html + - code: PAYR-1077 + space: reference-payer + message: No subject found for observation component. Hence request will not be processed further. + - code: PAYR-1078 + space: reference-payer + message: Invalid subject type found for observation component. This should be of type Patient. Hence request will not be processed further. Please try again with valid subject type for the observation. + - code: PAYR-1079 + space: reference-payer + message: No care team details received. Hence request will not be processed further. Please add the care team details and try again. + - code: PAYR-1080 + space: reference-payer + message: Invalid HPR details received for practioner resource with url %s. Hence request will not be processed further. Please try again with valid HPR id. + - code: PAYR-1081 + space: reference-payer + message: Invalid service date received for item with sequence %s in claim resource. Hence request will not be processed further. Please try again with valid item service date. + - code: PAYR-1082 + space: reference-payer + message: Invalid title received for composition for supporting info with sequence %s in claim resource. Hence request will not be processed further. Please try again with valid composition title. + - code: PAYR-1083 + space: reference-payer + message: No HPR details found for the practitioner for resource %s. Hence request will not be processed further. Please send the details in the identifier for Practitioner resource with category code as HPIN. + - code: PAYR-1084 + space: reference-payer + message: No questionnaire response resource found for url %s. Hence request will not be processed further. Please add the resources for all the references given in the FHIR bundle and try again. + - code: PAYR-1085 + space: reference-payer + message: Invalid questionnaire response resource type found in the FHIR bundle for url %s. Hence request will not be processed further. + - code: PAYR-1086 + space: reference-payer + message: No procedure resource found for url %s. Hence request will not be processed further. Please add the resources for all the references given in the FHIR bundle and try again. + - code: PAYR-1087 + space: reference-payer + message: Invalid procedure resource type found in the FHIR bundle for url %s. Hence request will not be processed further. Procedure resource type is expected. + - code: PAYR-1088 + space: reference-payer + message: Invalid composition details. + - code: PAYR-1089 + space: reference-payer + message: No billing items found. Hence request will not be processed further. Please try again with valid billing items. + - code: PAYR-1090 + space: reference-payer + message: No identifier found for coverage component. Hence request will not be processed further. + - code: PAYR-1091 + space: reference-payer + message: No type found for coverage component identifier. Hence request will not be processed further. + - code: PAYR-1092 + space: reference-payer + message: Something went wrong while processing request, kindly intiate new request + - code: PAYR-1093 + space: reference-payer + message: No subject found for encounter in composition component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + - code: PAYR-1094 + space: reference-payer + message: Invalid subject type found for encounter in composition/observation component. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Encounter.html + - code: PAYR-1095 + space: reference-payer + message: Invalid discharge information received for claim request. Hence request will not be processed further. Please send the discharge information in supporting info in claim resource, with category as DIS (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-category.html), and codes in LAMA/DAMA/DTH/DTM (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-code.html). + - code: PAYR-1096 + space: reference-payer + message: Invalid death date received for claim request. Hence request will not be processed further. Please send the death date information in supporting info in claim resource, with category as ONS (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-category.html), and code as DTM (refer - https://www.nrces.in/ndhm/fhir/r4/ValueSet-ndhm-supportinginfo-code.html). + - code: PAYR-1097 + space: reference-payer + message: No payload found in the request. Please ensure that the request that is being sent, contains encrypted payload within the mandatory payload properties. + - code: PAYR-1098 + space: reference-payer + message: Value type received as %s for category - OTH and code - EDT for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - OTH and code - EDT combination is used to get the registration date. So the registration date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - OTH and code - EDT. + - code: PAYR-1099 + space: reference-payer + message: Value type received as %s for category - ONS and code - DSDE for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - ONS and code - DSDE combination is used to get the discharge date. So the discharge date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - DSDE. + - code: PAYR-1101 + space: reference-payer + message: Invalid purpose received as (%s) for beneficiary id (%s) from hospital id (%s). Hence no result will be returned. Please try again with a valid purpose. + - code: PAYR-1102 + space: reference-payer + message: Invalid search parameter requested. Please try again with a valid id. + - code: PAYR-1103 + space: reference-payer + message: Invalid careplan id received. Please try again with valid careplan id. + - code: PAYR-1104 + space: reference-payer + message: Multiple records found for the beneficiary. Hence request will not be processed further. + - code: PAYR-1105 + space: reference-payer + message: Hospital configuration not found. Please contact support team. + - code: PAYR-1106 + space: reference-payer + message: No details found for the requested procedures in the system. + - code: PAYR-1107 + space: reference-payer + message: No billable item received. Please try again with valid item data. + - code: PAYR-1108 + space: reference-payer + message: No details found for the requested stratification in the system. + - code: PAYR-1109 + space: reference-payer + message: No details found for the requested investigations in the system. + - code: PAYR-1110 + space: reference-payer + message: No details found for the requested implants in the system. + - code: PAYR-1111 + space: reference-payer + message: Rule failure. + - code: PAYR-1112 + space: reference-payer + message: Invalid payer id received. Please try again ith valid payer details + - code: PAYR-1113 + space: reference-payer + message: Invalid item code received as %s. Please try again with valid data + - code: PAYR-1114 + space: reference-payer + message: Invalid speciality code received as %s for item %s. Please try again with valid data. Speciality code is available as the code of the category for specific cost of plan in isurance plan + - code: PAYR-1115 + space: reference-payer + message: Invalid procedure quantity received as %s for item %s. Please try again with valid data. Item quantity should be greater than 1 + - code: PAYR-1116 + space: reference-payer + message: Hospital is not authorized to raise any case under policy %s. Hence request will not be processed further. Please connect with the support team to get the required authorization + - code: PAYR-1117 + space: reference-payer + message: No policy details found for %s. Hence request will not be processed further + - code: PAYR-1118 + space: reference-payer + message: No details found for requested items. Hence request will not be processed further + - code: PAYR-1119 + space: reference-payer + message: No payer details received for payer id %s from HCX. Please try again with valid payer details. + - code: PAYR-1120 + space: reference-payer + message: Duplicate reference id found as %s. Please try again with valid reference details. + - code: PAYR-1121 + space: reference-payer + message: No policy details found for %s for beneficiary %s. Hence request will not be processed further. + - code: PAYR-1122 + space: reference-payer + message: No policy details found for beneficiary %s. Hence request will not be processed further. + - code: PAYR-1123 + space: reference-payer + message: Beneficiary is not a covered member for requested payer. Please enroll beneficiary for applicable policy of requested payer and try again. + - code: PAYR-1201 + space: reference-payer + message: Invalid claimed amount received for case number %s. Please try again with a valid claim amount. Claimed amount should be greater than INR 0 and less than equals to balance wallet amount of the beneficiary. + - code: PAYR-1202 + space: reference-payer + message: Invalid speciality code received as %s for item %s for case number %s. Please try again with valid data. Speciality code is available as the code of the category for specific cost of plan in isurance plan. + - code: PAYR-1203 + space: reference-payer + message: Invalid speciality description received as %s for procedure %s for case number %s. Please try again with valid data. Speciality description is available as the display of the category for specific cost of plan in isurance plan. + - code: PAYR-1204 + space: reference-payer + message: Invalid procedure code received as %s for case number %s. Please try again with valid data. Procedure code is available as the code of the type for benefit component, of specific cost, of plan in isurance plan. + - code: PAYR-1205 + space: reference-payer + message: Invalid procedure description received as %s for procedure %s for case number %s. Please try again with valid data. Procedure description is available as the display of the type for benefit component, of specific cost, of plan in isurance plan. + - code: PAYR-1206 + space: reference-payer + message: Invalid procedure type received as %s for procedure %s for case number %s. Please try again with valid data. + - code: PAYR-1207 + space: reference-payer + message: Invalid procedure factor received as %s for procedure %s for case number %s. Please try again with valid data. + - code: PAYR-1208 + space: reference-payer + message: Invalid procedure quantity received as %s for item %s for case number %s. Please try again with valid data. Item quantity should be greater than 1. + - code: PAYR-1209 + space: reference-payer + message: Invalid net amount received as INR %s for item %s for case number %s. Please try again with valid data. Item net amount should be greater than INR 0. + - code: PAYR-1210 + space: reference-payer + message: Invalid procedure status received as %s for procedure %s for case number %s. Please try again with valid data. + - code: PAYR-1211 + space: reference-payer + message: Requested beneficary details and careplan details does not match any criteria for processing the case at this hospital. Please try again with valid data. + - code: PAYR-1212 + space: reference-payer + message: No previous preauthorization approved record found for the enhancement request for case number %s. Hence request will not be processed further. Please initiate a new preauthorization. + - code: PAYR-1213 + space: reference-payer + message: Existing case in progress found for case number %s. Hence enhancement request will not be accepted. Please try after the adjudication is completed for the current case. + - code: PAYR-1214 + space: reference-payer + message: No previous preauthorization approved record found for the resubmission request for case number %s. Hence request will not be processed further. Please initiate a new preauthorization. + - code: PAYR-1215 + space: reference-payer + message: Existing case in progress found for case number %s. Hence resubmission request will not be accepted. Please try after the adjudication is completed for the current case. + - code: PAYR-1216 + space: reference-payer + message: Existing case in progress found for case number %s. Hence new preauthorization request will not be accepted. + - code: PAYR-1217 + space: reference-payer + message: Previous preauthorization approved record found for the new preauthorization request for case number %s. Hence request will not be processed further. Please initiate enhancement/resubmission. + - code: PAYR-1218 + space: reference-payer + message: No queried preauthorization record found for the query update request for case number %s. Hence request will not be processed further. + - code: PAYR-1219 + space: reference-payer + message: Case number %s is not queried. Hence query updation request will not be processed further. + - code: PAYR-1220 + space: reference-payer + message: Invalid investigation description received as %s for investigation code %s for case number %s. Please try again with valid data. + - code: PAYR-1221 + space: reference-payer + message: Invalid investigation code received as %s for case number %s. Please try again with valid data. + - code: PAYR-1222 + space: reference-payer + message: Invalid investigation status received as %s for investigation %s for case number %s. Please try again with valid data. + - code: PAYR-1223 + space: reference-payer + message: Invalid investigation attachment received for investigation %s for case number %s. Please try again with valid data. + - code: PAYR-1224 + space: reference-payer + message: Invalid implant description received as %s for implant code %s for case number %s. Please try again with valid data. + - code: PAYR-1225 + space: reference-payer + message: Invalid implant code received as %s for case number %s. Please try again with valid data. + - code: PAYR-1226 + space: reference-payer + message: Invalid implant status received as %s for investigation %s for case number %s. Please try again with valid data. + - code: PAYR-1227 + space: reference-payer + message: Invalid implant attachment received for investigation %s for case number %s. Please try again with valid data. + - code: PAYR-1228 + space: reference-payer + message: Invalid implant quantity received as %s for implant %s for case number %s. Please try again with valid data. + - code: PAYR-1229 + space: reference-payer + message: Invalid implant net amount received as INR %s for implant %s for case number %s. Please try again with valid data. + - code: PAYR-1230 + space: reference-payer + message: Invalid implant unit price received as INR %s for implant %s for case number %s. Please try again with valid data. + - code: PAYR-1231 + space: reference-payer + message: Claim has already been raised for case number %s. Hence preauthorization request will not be accepted. + - code: PAYR-1232 + space: reference-payer + message: No investigation found for case number %s. Investigation details are mandatory for private hospitals. + - code: PAYR-1233 + space: reference-payer + message: Patient liability is not aplicable for the hospital and beneficiary do not have enough wallet balance with deficit amount INR %s for the requested preauthorization for case number %s. + - code: PAYR-1234 + space: reference-payer + message: No preauthorization record found for case number %s. Hence the request will not be processed. + - code: PAYR-1235 + space: reference-payer + message: Insufficient wallet balance. Hence the request will not be processed. + - code: PAYR-1236 + space: reference-payer + message: Invalid claim type (in-patient/out-patient) received. Hence the request will not be processed. + - code: PAYR-1237 + space: reference-payer + message: Beneficiary is having an active preauthorization request at %s. Hence the request will not be processed. Kindly inform %s to cancel the active preauthorization request or raise a claim to proceed with current preauthorization. + - code: PAYR-1238 + space: reference-payer + message: Beneficiary is having an active preauthorization request at this hospital with reference number %s. Hence the request will not be processed. Kindly cancel the active preauthorization request or raise a claim to proceed with current preauthorization. + - code: PAYR-1239 + space: reference-payer + message: Hospital configuration not found. Please contact support team. + - code: PAYR-1240 + space: reference-payer + message: No details found for the requested procedures in the system. + - code: PAYR-1241 + space: reference-payer + message: Invalid registration date received for case number %s. Hence the request will not be processed. + - code: PAYR-1242 + space: reference-payer + message: Invalid registration date format received for case number %s. Hence the request will not be processed. + - code: PAYR-1243 + space: reference-payer + message: Invalid admission date received for case number %s. Hence the request will not be processed. + - code: PAYR-1244 + space: reference-payer + message: Invalid admission date format received for case number %s. Hence the request will not be processed. + - code: PAYR-1245 + space: reference-payer + message: Rule failure. + note: The SHA HP sandbox sent this code as "Only one conservative procedure can be booked for a case", on an enhancement that added a second Conservative package. + - code: PAYR-1246 + space: reference-payer + message: Invalid payer id received as %s. Please try again with valid payer id. + - code: PAYR-1247 + space: reference-payer + message: Payer details for payer id %s is not received from HCX for the request. Hence the request will not be processed. + - code: PAYR-1248 + space: reference-payer + message: Invalid item code received as %s for item sequence %s case number %s. Please try again with valid data. + - code: PAYR-1249 + space: reference-payer + message: Invalid item sequence received as %s for case number %s. Please try again with valid data. + - code: PAYR-1250 + space: reference-payer + message: Requested policy %s is not listed. Please try again with valid policy code. + - code: PAYR-1251 + space: reference-payer + message: No billable treatment plan received for case number %s. Please try again with valid treatment plan data. + - code: PAYR-1252 + space: reference-payer + message: Case number %s is not in active preauthorization state with the current status of the case with the payer system is %s. Hence the preauthorization can not be cancelled. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled. + - code: PAYR-1253 + space: reference-payer + message: Case number %s is already cancelled. Hence the preauthorization can not be cancelled again. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled. + - code: PAYR-1254 + space: reference-payer + message: Response for STG Questionnaire id %s is mandatory for procedure code %s. Hence the preauthorization request will not be processed as the questionnaire response is not received for procedure code. + - code: PAYR-1255 + space: reference-payer + message: Case number %s is already cancelled. Hence no preauthorization request will be accepted for this case number. New preauthorization request needs to be raised with new case/reference number to proceed further. + - code: PAYR-1256 + space: reference-payer + message: Response for Authentication Consent Questionnaire is missing for case number %s. This must be sent if the biometric authentication for patient is not available. For new preauthorization request, either biometric authentication for patient or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. Please adhere to the response of the coverage eligibility for auth-requirements purpose to check the mandatory documents to be attached with the request + - code: PAYR-1257 + space: reference-payer + message: Payment is initiated for case number %s. Hence the preauthorization can not be cancelled again. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled + - code: PAYR-1258 + space: reference-payer + message: Payment is accomplished/cleared for case number %s. Hence the preauthorization can not be cancelled again. Only the cases with current status as preauthorization submitted or preauthorization approved can be cancelled + - code: PAYR-1259 + space: reference-payer + message: DOB is missing for new born for the case number (%s) with correlation id as (%s) at (%s) + - code: PAYR-1260 + space: reference-payer + message: DOB cannot be a future date for the case number (%s) with correlation id as (%s) at (%s) + - code: PAYR-1261 + space: reference-payer + message: Invalid new born details for the case number (%s) with correlation id as (%s) at (%s) + - code: PAYR-1262 + space: reference-payer + message: Gender is mandatory for the new born beneficiary + - code: PAYR-1263 + space: reference-payer + message: Documents are mandatory for the new born beneficiary + - code: PAYR-1264 + space: reference-payer + message: Documents are mandatory for the new born beneficiary + - code: PAYR-1265 + space: reference-payer + message: Documents are mandatory for the new born beneficiary + - code: PAYR-1266 + space: reference-payer + message: Documents are mandatory for the new born beneficiary + - code: PAYR-1267 + space: reference-payer + message: Beneficiary is having an active preauthorization request for new born case at this hospital with reference number %s. Hence the request will not be processed. Kindly cancel the active preauthorization request or raise a claim to proceed with current preauthorization + - code: PAYR-1268 + space: reference-payer + message: Beneficiary is having an active preauthorization request for new born case at %s. Hence the request will not be processed. Kindly inform %s to cancel the active preauthorization request or raise a claim to proceed with current preauthorization + - code: PAYR-1269 + space: reference-payer + message: Date of birth received for new born beneficiary exceeds 6 years before the current date. New born cases can be raised only for the beneficiary whose date of birth is within 6 years of current date + - code: PAYR-1270 + space: reference-payer + message: Item LM100 is not applicable for preauthorization request. This item is expected/mandated only during claim submission if the patient is discharged after/during surgery under LAMA/DAMA category for PMJAY cases. + - code: PAYR-1271 + space: reference-payer + message: No value received for link id %s for Authentication Consent Questionnaire for preauthorization request. This must be sent if the biometric authentication for patient is not available. For new preauthorization request, either biometric authentication for patient or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. Please adhere to the response of the coverage eligibility for auth-requirements purpose to check the mandatory documents to be attached with the request. + - code: PAYR-1272 + space: reference-payer + message: Invalid biometric user token received. Please try again with valid valid biometric details of the beneficiary. For any issues with biometric, please try with Authentication Consent Questionnaire, details for which has been received in response for coverage eligibliity auth-requirements. + - code: PAYR-1273 + space: reference-payer + message: No questionnaire found for the received selection. Please validate the questionnaire url from insurance plan/coverage auth-requirements response. + - code: PAYR-1301 + space: reference-payer + message: Claim has already been raised for case number %s. Hence new claim request will not be accepted. + - code: PAYR-1302 + space: reference-payer + message: No preauthorization approved record found for case number %s. Hence new claim request will not be accepted. + - code: PAYR-1303 + space: reference-payer + message: No active claim record found for case number %s. Hence query updation request will not be accepted. + - code: PAYR-1304 + space: reference-payer + message: No claim queried record found for case number %s. Hence query updation request will not be accepted. + - code: PAYR-1305 + space: reference-payer + message: Invalid usecase requested for case number %s. Please try again with valid usecase. + - code: PAYR-1306 + space: reference-payer + message: No item found in preauthorization request for procedure %s with item sequence %s for case number %s. Please try again with valid items. + - code: PAYR-1307 + space: reference-payer + message: Invalid quantity requested for procedure %s with item sequence %s for case number %s. Please try again with valid quantity. + - code: PAYR-1308 + space: reference-payer + message: No item found in active claim request for procedure %s with item sequence %s for case number %s. Please try again with valid items. + - code: PAYR-1309 + space: reference-payer + message: No item found in preauthorization request for implant %s with item sequence %s for case number %s. Please try again with valid items. + - code: PAYR-1310 + space: reference-payer + message: Invalid quantity requested for implant %s with item sequence %s for case number %s. Please try again with valid quantity. + - code: PAYR-1311 + space: reference-payer + message: No item found in active claim request for implant %s with item sequence %s for case number %s. Please try again with valid items. + - code: PAYR-1312 + space: reference-payer + message: No item found in preauthorization request for investigation %s with item sequence %s for case number %s. Please try again with valid items. + - code: PAYR-1313 + space: reference-payer + message: Invalid quantity requested for investigation %s with item sequence %s for case number %s. Please try again with valid quantity. + - code: PAYR-1314 + space: reference-payer + message: No item found in active claim request for investigation %s with item sequence %s for case number %s. Please try again with valid items. + - code: PAYR-1315 + space: reference-payer + message: Rejected item found for preauthorization for procedure %s with item sequence %s for case number %s. Please try again with valid items. + - code: PAYR-1316 + space: reference-payer + message: Rejected item found for preauthorization for investigation %s with item sequence %s for case number %s. Please try again with valid items. + - code: PAYR-1317 + space: reference-payer + message: Rejected item found for preauthorization for implant %s with item sequence %s for case number %s. Please try again with valid items. + - code: PAYR-1318 + space: reference-payer + message: No requested treatment plan found for case number %s. Please try again with valid items. + - code: PAYR-1319 + space: reference-payer + message: No requested investigation plan found for case number %s. Please try again with valid items. + - code: PAYR-1320 + space: reference-payer + message: No details found for the requested investigations in the system. Hence request will not be processed. + - code: PAYR-1321 + space: reference-payer + message: Error occurred while processing the request due to invalid workflow id as (%s) + - code: PAYR-1322 + space: reference-payer + message: No active case found for the given case number. + note: The SHA HP sandbox sent this code as "Active instance found for case number", for a second request on a case while the first was still queued. The sheet's message reads the opposite way. + - code: PAYR-1323 + space: reference-payer + message: Insufficient wallet balance. Hence the request will not be processed. + - code: PAYR-1324 + space: reference-payer + message: Invalid discharge stage received for case number %s. Hence the request will not be processed. + - code: PAYR-1325 + space: reference-payer + message: Invalid admission date received for case number %s. Hence the request will not be processed. + - code: PAYR-1326 + space: reference-payer + message: Invalid discharge date received for case number %s. Hence the request will not be processed. + - code: PAYR-1327 + space: reference-payer + message: Invalid admission date format received for case number %s. Hence the request will not be processed. + - code: PAYR-1328 + space: reference-payer + message: Invalid discharge date format received for case number %s. Hence the request will not be processed. + - code: PAYR-1329 + space: reference-payer + message: Invalid registration date received for case number %s. Hence the request will not be processed. + - code: PAYR-1330 + space: reference-payer + message: Invalid registration date format received for case number %s. Hence the request will not be processed. + - code: PAYR-1331 + space: reference-payer + message: Receiver not registered in NHCX. Please try again with valid receiver details. + - code: PAYR-1332 + space: reference-payer + message: Invalid CRC request. + - code: PAYR-1333 + space: reference-payer + message: Invalid claim type (in-patient/out-patient) received. Hence the request will not be processed. + - code: PAYR-1334 + space: reference-payer + message: Hospital configuration not found. Please contact support team. + - code: PAYR-1335 + space: reference-payer + message: Invalid implant quantity received as %s for implant %s for case number %s. Please try again with valid data. + - code: PAYR-1336 + space: reference-payer + message: Invalid implant unit price received as INR %s for implant %s for case number %s. Please try again with valid data. + - code: PAYR-1337 + space: reference-payer + message: Invalid implant net amount received as INR %s for implant %s for case number %s. Please try again with valid data. + - code: PAYR-1338 + space: reference-payer + message: Invalid implant attachment received for investigation %s for case number %s. Please try again with valid data. + - code: PAYR-1339 + space: reference-payer + message: Invalid implant status received as %s for investigation %s for case number %s. Please try again with valid data. + - code: PAYR-1340 + space: reference-payer + message: Invalid investigation status received as %s for investigation %s for case number %s. Please try again with valid data. + - code: PAYR-1341 + space: reference-payer + message: Invalid investigation attachment received for investigation %s for case number %s. Please try again with valid data. + - code: PAYR-1342 + space: reference-payer + message: Existing case in progress found for case number %s. Hence new reimbursement request will not be accepted. + - code: PAYR-1343 + space: reference-payer + message: Previous reimbursement approved record found for the new reimbursement request for case number %s. Hence request will not be processed further. + - code: PAYR-1344 + space: reference-payer + message: No details found for the requested procedures in the system. + - code: PAYR-1345 + space: reference-payer + message: Invalid procedure status received as %s for procedure %s for case number %s. Please try again with valid data. + - code: PAYR-1346 + space: reference-payer + message: Invalid procedure description received as %s for procedure %s for case number %s. Please try again with valid data. + - code: PAYR-1347 + space: reference-payer + message: Invalid procedure type received as %s for procedure %s for case number %s. Please try again with valid data. + - code: PAYR-1348 + space: reference-payer + message: Invalid procedure factor received as %s for procedure %s for case number %s. Please try again with valid data. + - code: PAYR-1349 + space: reference-payer + message: Invalid procedure quantity received as %s for procedure %s for case number %s. Please try again with valid data. + - code: PAYR-1350 + space: reference-payer + message: Invalid procedure net amount received as INR %s for procedure %s for case number %s. Please try again with valid data. + - code: PAYR-1351 + space: reference-payer + message: Invalid speciality code received as %s for procedure %s for case number %s. Please try again with valid data. + - code: PAYR-1352 + space: reference-payer + message: Requested beneficary details and careplan details does not match any criteria for processing the case at this hospital. Please try again with valid data. + - code: PAYR-1353 + space: reference-payer + message: Invalid careplan id received. Please try again with valid careplan id. + - code: PAYR-1354 + space: reference-payer + message: Rule failure. + - code: PAYR-1355 + space: reference-payer + message: No details found for the requested implants in the system. Hence request will not be processed. + - code: PAYR-1356 + space: reference-payer + message: Patient liability is not aplicable for the hospital and beneficiary do not have enough wallet balance with deficit amount INR %s for the requested preauthorization for case number %s. + - code: PAYR-1357 + space: reference-payer + message: Admission date cannot be after the discharge date. Hence request will not be processed. Please correct the data and try again. + - code: PAYR-1358 + space: reference-payer + message: Registration of the patient is allowed maximum upto %s days after admission. Hence request will not be processed. Please correct the data and try again. + - code: PAYR-1359 + space: reference-payer + message: No billable treatment plan received for case number %s. Please try again with valid treatment plan data. + - code: PAYR-1360 + space: reference-payer + message: Invalid item code received as %s for item sequence %s case number %s. Please try again with valid data. + - code: PAYR-1361 + space: reference-payer + message: Invalid item sequence received as %s for case number %s. Please try again with valid data. + - code: PAYR-1362 + space: reference-payer + message: No procedure with code LM100 received with 'Requested' status for case number %s. Please try again with valid data. For PMJAY claims, if case comes under LAMA/DAMA scenario with beneficiary being discharged before surgery or during surgery, procedure with code LM100 is mandatory. Only this procedure code will be accepted for LAMA/DAMA case, and all other previous preauthorization approved items will get disqualified for the claim submission + - code: PAYR-1363 + space: reference-payer + message: Response for Authentication Consent Questionnaire is missing for case number %s. This must be sent if the biometric authentication for patient is not available during discharge. For new claim request, either biometric authentication for patient during discharge, or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. + - code: PAYR-1364 + space: reference-payer + message: No value received for link id %s for Authentication Consent Questionnaire for claim request. This must be sent if the biometric authentication for patient is not available during discharge. For new claim request, either biometric authentication for patient during discharge, or response for Authentication Consent questionnaire must be sent. Please check/update the insurance plan for the policy for the details of the questionnaire. + - code: PAYR-1365 + space: reference-payer + message: Response for STG Questionnaire id %s is mandatory for procedure code %s. Hence the preauthorization request will not be processed as the questionnaire response is not received for procedure code. + - code: PAYR-1366 + space: reference-payer + message: Invalid biometric user token received. Please try again with valid biometric details of the beneficiary. For any issues with biometric, please try with Authentication Consent Questionnaire for discharge, details for which has been received in insurance plan. + - code: PAYR-1367 + space: reference-payer + message: No biometric records found for the beneficiary for %s. Please ensure correctness of biometric authentication date for the day for cyclic procedure %s. + - code: PAYR-1368 + space: reference-payer + message: "%s units of cycle information received for procedure code %s with item sequence %s. Cycle information should be sent for all the requested/processed cycles." + - code: PAYR-1369 + space: reference-payer + message: Biometric authentication cannot be performed more than once on the same date. Multiple biometric authentication information has been provided for same date for cyclic procedure %s. Hence case will not be processed. Please check and update biometric authentication execution dates and try again. + - code: PAYR-1370 + space: reference-payer + message: Received invalid start date as %s for supporting details with item sequence %s. Please try again with valid start date. + - code: PAYR-1401 + space: reference-payer + message: policy not allowed for the hospital. Please reach out to technical support team. + - code: PAYR-1402 + space: reference-payer + message: Requested policy found not be associated with any payer for insurance plan request. Hence request will not be processed. + - code: PAYR-1403 + space: reference-payer + message: Requested renewal found not be associated with requested policy for insurance plan request. Hence request will not be processed. + - code: PAYR-1404 + space: reference-payer + message: No treatment provided for policy under any speciality. Please reach out to technical support team. + - code: PAYR-1405 + space: reference-payer + message: No enrolled hospital found for HFR id or sender id . Please reach out to technical support team. + - code: PAYR-1406 + space: reference-payer + message: Existing request with correlation id %s is in progress with the payer. Hence this request will not be accepted until the execution for previous request is complete. Please wait for 15 - 60 minutes to allow the execution of previous requests. For further assistance, please reach out to technical support team. + - code: PAYR-1501 + space: reference-payer + message: Value type received as %s for category - ONS and code - PSP for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - ONS and code - PSP combination is used to get the surgery date. So the surgery date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - PSP. + - code: PAYR-1502 + space: reference-payer + message: Value type received as %s for category - ONS and code - ADDD for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - ONS and code - ADDD combination is used to get the admission date. So the admission date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - ADDD. + - code: PAYR-1503 + space: reference-payer + message: Value type received as %s for category - ONS and code - DTM for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - ONS and code - DTM combination is used to get the death date. So the death date should be sent as timing (date or period) or as a string value, adhering to the NRCES standards, with the category - ONS and code - DTM. + - code: PAYR-1504 + space: reference-payer + message: Value type received as %s for category - NMI and code - CQD for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - NMI and code - CQD combination is used to get the overall case remarks for query response. So the case remarks for query response should be sent as a string value, adhering to the NRCES standards, with the category - NMI and code - CQD. + - code: PAYR-1505 + space: reference-payer + message: Category received as %s and code received as %s for item with sequence %s in supporting info in claim resource, where the reference value redirects to Questionnaire Response resource in the FHIR bundle. To include a policy/case level Questionnaire Response, in supporting info list there should be an entry with category - INF and code - ODN , and the value as reference. This reference value should refer to a resource of Questionnaire Response in the FHIR bundle. To include response for any STG questionnaire, in supporting info list there should be an entry with category - STG, and the value as reference + - code: PAYR-1506 + space: reference-payer + message: Invalid gender received for new born patient. Please try agian with valid gender data as it is mandatory for PMJAY in new born case. Please refer to the valid gender values at https://hl7.org/fhir/R4/valueset-administrative-gender.html + - code: PAYR-1507 + space: reference-payer + message: Invalid date of birth received for new born patient. Please try agian with valid date of birth as it is mandatory for PMJAY in new born case. + - code: PAYR-1508 + space: reference-payer + message: Invalid resource received for new born patient for url %s. Please try agian with valid Patient resource for the link reference as linked Patient resource is mandatory for PMJAY in new born case + - code: PAYR-1509 + space: reference-payer + message: Invalid attachment received for new born patient. Please try agian with valid attachment as attachment is mandatory for PMJAY in new born case + - code: PAYR-1510 + space: reference-payer + message: Invalid parameter code received. Please check and try again with a valid parameter code + - code: PAYR-1511 + space: reference-payer + message: Invalid parameter value received. Please check and try again with a valid parameter value + - code: PAYR-1512 + space: reference-payer + message: Invalid resource received for patient for url %s. Please try agian with valid Patient resource for the reference + - code: PAYR-1513 + space: reference-payer + message: Invalid diagnosis received in DiagnosisComponent. In DiagnosisComponent, diagnosis should be sent as CodeableConcept. Please try agian with valid data + - code: PAYR-1514 + space: reference-payer + message: Value type received as %s for category - DIS for item with sequence %s in supporting info in claim resource. In supporting info list, item with category - DIS is used to get the discharge related information. So the discharge information should be sent as string value, with value representing discharge stage (After Surgery / Before Surgery / During Surgery), with the category - DIS and code - DTH/LAMA/DAMA/DTM + - code: PAYR-1515 + space: reference-payer + message: Invalid name received for organization resource with url %s. Name is mandatory for organization resource. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Organization.html + - code: PAYR-1516 + space: reference-payer + message: No event found for api-caller-id %s and correlation id %s for sender code %s. Hence error response willnot be accepted. + - code: PAYR-1517 + space: reference-payer + message: Invalid error structure received for NHCX error. Protocol response structure is expected, but received JWEPayloadResponse. + - code: PAYR-1518 + space: reference-payer + message: No input parameters received for task resource. Input parameters are expected for task resource, but not received. Please try again with valid data. + - code: PAYR-1519 + space: reference-payer + message: No type found for task input parameters. Hence request will not be processed further. Please refer to https://www.nrces.in/ndhm/fhir/r4/StructureDefinition-Task.html + - code: PAYR-1520 + space: reference-payer + message: Invalid resource received for communication for url %s. Please try agian with valid Communication resource for the reference. + - code: ERR-PYR-CLM-007 + space: observed + message: No prior preauthorization or claim record found for case number + note: On none of the seven sheets. The SHA HP sandbox sent it for a claim raised under a number of its own rather than the preauthorisation's. diff --git a/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf b/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/API Response Handling to avoid Failures.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e82fbe44320b7daf6dc508e4ad99739557526959 GIT binary patch literal 55346 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 literal 0 HcmV?d00001 diff --git a/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(PROD)_NHCX-OnBoarding APIs Postman Collection.zip b/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(PROD)_NHCX-OnBoarding APIs Postman Collection.zip new file mode 100644 index 0000000000000000000000000000000000000000..e0668c5358e873c9aceff41b092015871570923d GIT binary patch literal 1323 zcmWIWW@Zs#U|`^2;GN7DnHu$JaV!f1!zKX+1~Z_jV|cJeK#;$SX1t$=bA+yco>P8e zQA%cBx`JbXXR%&EesM`|VqSc5eojtma!F=>o?cdQe%{mY-26vw0{?vKj-HZV6~>fv zphZCQ)x;LI`Be>bOwMwvZ`o$PL8hYiHLFw5zv}esucxa#d8f5?`7+l-8#ZtLe8$Fj zGf#iDYI9rp84H*G>ZOwm`yzD2EMzV-xU{8S-S~EE^whMqVj*w-maV;Hx8ZMBdo=s+ zxYdcjeQ#@=ZdQyFs7!jn=XdP@n5Fyz(qA0ujC$jLlF9q%N`b(dj9Hya ztQ4J`!)v!0q#JVk&OiJ7h`7kUb+4{QUDfhf6{Nh;Qti9oYY;jK1Tg_Qw6Z{alOe>|Wil5zE>1qme;ug|f{0VCz@b9dhn9 zB1#p#JxmMjWF!uLJF()bbXoEK(hGSv-Y@(2_k_l5*Jl$io$;A);rVP2qsPK}LfqGT zzkhzMU0zpQ^he;&z4>=zzRKqvI(_4Ht(DgqUE2r3jM^Ua7L`wmY0BuZk(pe(JHxI+ zg7@g8^TM}Zf8C{}aDCG!H#VcQAmJ-kZEJ;~%dXnMshbf)v zT_#hL_HNdlwDxlrgF|EX+3Z^?7K;jxL| z6*4nK2=m<1bUsk?|JS2{JjD9X!Ronn4O`q0_##O056ESF`sT>gUJ zku-=^^Dm zD_2jmn#1B`!5Ofq>lcsc1@Reb8-y;c+B@6Bk?HS~4M8F7+dnDZUskCZExc1e?o|`F zp_R*rCdo~=lk`1=EP}tURvHQJTKYvFn^(#yvN7x zijsGeXYft*NjIFc@3Q}OEvfPg#lQGG0>rwyEJ7zSrd<7T?b+8yt-)2Z_shr6z7CD! znzz&LF)w{PKfs%jNrVA+kp(QZ7#JB8Kok&=SAYe0v$BD7GXh}>klqL^5*Zi(WZF_f literal 0 HcmV?d00001 diff --git a/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip b/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-NHCX USECASE Postman Collection.zip new file mode 100644 index 0000000000000000000000000000000000000000..bc1821981436a97b0a5605e5d5f8240986bbc004 GIT binary patch literal 527797 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 z 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 It>^B40m;ZxQ2+n{ literal 0 HcmV?d00001 diff --git a/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection.zip b/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)-PARTICIPANT SERVICE_APIs Postman Collection.zip new file mode 100644 index 0000000000000000000000000000000000000000..86800224a97154bcd064311a7b0213b7e2981699 GIT binary patch literal 1386 zcmbu9`#aMM0LH&t8{<$6&)a_x<60p7)3MdEQ?>c+5VCG5`QDpekj*>z1yr zF$)3!T516B%U)}HnQ)ZgP4)AkMd=yhZJme?b`E%391%%CJN@clhxW3?JJ5};(dgkJ z-c&DN8inHT8y-ZX8U@p7)OD9>dajiMBVt!po>$j7UW_YziT%)JF4}AqV5$6z_DIE7 zVE&n6q1Em?+BT>+5|=q+L3c2=21r#ApPSaI8#xg%`}=)Aw4p2WJ$WtqQ95RMUZ&u~ z($cZwOyr?$UtX7_PBSUqI%R%08I{P|vF82I^Rn7KXFlzPie~ANTN^l@nC>o%r~@zY zgHIMZvnx~JZ128om?M$qahV`BMpPSQCI@^dOIf0JkKVOU=v+;=QQL2wYL@X6X;G!! zFiI~lh_b`H!dQbU1(Y?-+}nf<-n;>7gZl)m)DVkKTjE9Xvsppy`o{_oYa;)j$8s)g)Vo=5>n69CHvpEg0!o! zbgLtqFgCL-MJ>yPeL9zlwTqh}xA~;QZp1c1L*PGb?$;Q}CHchX%{VummC&F()v$Vs zhTNe=l%bw5+nyC8Jre9_6b2dNdP5W%a)zBAx;$Ouo> zD&huuJ^E|WY23fx%Snc<#$(MVJ|kFuAwsLR3{TEUvid07o97UE!(*NdwT+$};Djtc z@5gzRBEp#UeGvCr{Wgu+3_m9MhWV8iH^0Ko5oj=c`Y}4&(S!qlQ_Hc}wf>m$(Jr#Z zIEHm@=X7jk)!8-`|=gZVy3k&ibYsccB=w;n7G@gf+# zhRaXpl;j(4+^*qv;6b2R;FNe(Z;iJ1UF8w~L4|Y|Jzn(qY4sca6M0#L+O$t1*iI?e|W0c*aP}(njoiu_F%5 zrk0aqI;Q-(m9j!xJ;a(8RJ)#1@znHjwF#rGn literal 0 HcmV?d00001 diff --git a/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)NHCX-OnBoarding APIs Postman Collection.zip b/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/AWS(Sandbox)NHCX-OnBoarding APIs Postman Collection.zip new file mode 100644 index 0000000000000000000000000000000000000000..ecc3718a600e26af536f574029e90466b0a76c02 GIT binary patch literal 4293 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 literal 0 HcmV?d00001 diff --git a/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Authenticating with NHCX.pdf b/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Authenticating with NHCX.pdf new file mode 100644 index 0000000000000000000000000000000000000000..17ba3932bc5023dc1a36409761772f6294a9c32d GIT binary patch literal 87043 zcmdSAWmFv7x-N_pG`LG6jk~+M2bbX5!5eo-@Sp*LySuvw4+M7$!QCAKmt^g=_gZJ~ zbI&)%J%2t%F?!aVug`Zp)%8?0P(?zDk(G%X1rb>P@`r-R3Sa@)o4i9o6cAum_i!+0 z7B_Y_wz0QlRx!3TcLK1zEUPjr7~5IWnA_0;nAM!YE~d`vU~_X-dwXX98_Vx?MPsnF zteu7Zi;Z7Hb2Gq;n7NP;v!c1PvDu4305A7%K~0dkn>knoY;Iu=Hn%f~|o)T>dSh-;pqj+q>8~16Y~mL1s>R0QO&6`hdUc{hInWy_Ymz9K8hkOP*QP z+{xYr{NnZ{P$_#m=U*SJ0M6fQQfvU$KcuAC0jwOq=3Wwzba$3kb2fH1e-V{dV`Txn z9KS5Rj9CFM#~)HEV0%+Fb7wu~m+CUBo4Y$R%i6w_PwbBm@jpIfe}(%}5i^jnn7zB+ ziz*9%lb4f;oejXl!OFzTrVn^Y($4uMTqnS9|IE^0dl!cn&%Zb3_X)EavpU$=&dK3d zTBaV%;%dwi=B^-9b5&`v7whWACQdIRf9%p9sXGB!{#vD9hX1UR6v)Qe9Ly|b^OB#0 zxv9OGIkSSfou#uCfSs3{=a-g~GuYhN76s8gt&eEfj&~@F2PCRS+h#xmQq(OIDE*V5?~Z2NTdbSzhMimKC;*V~f9 z;A4U;b2@YB@?qlg@ux?MZdA>e2|sUd3hBOH%Iq3ReMtEkvp}F2+%$EsGgNN@bXi63 z3v~QGW+WWdtomP#?z8_VhStxC#h-sLXmVx46kVhR& z`}R=WQC9n94y6}JidG8WZTk6^Y`t5)^85>7AYSkq#VzLMd^CiP&^j}k<&S*ckp$7` zA~wfqq>6)(E>nF*P{t!Bp?`JYD}E26DJvq_dpDN5(mC|g)Na8q5}h`IGKLtN6yl%K zu3{y7A2S@oT?U{>yT9{jcEZ?7^}RNY8l``lsGCQ~ZvzdM{;;qbcS&RXIy<$Bf$Sy3 zhI@K$HSy|vQ+S<^g?urwit9_ziSw0)F0#md-zXJ;s4&&DK}q3iy0R!kVhv}DK#qnp z@SDa%2>H7=B9eg6kDjC4*VZ@)6I(;?yeO4wy=$i3PBIKH`1@&n->X6%Rm zFzqYDz&-QyYCtHLgO=ReY$Hi%H7mtCh&+mzoLE3KkHWd0D+0Tj-6`jwvtZ9Gz3YTk zwoO&?A`V$HXeRs9AwxXH4*@WV3v5wxaR~i61OhttYupCY*U6Jn=o9G02OJBfR?CK) zDg}s*(iP$Tus`1zEUjpKHApI^D~c@)%d~X8B)O_O}>Z>AiC3={rvsuN!#@zGF7 zBohja#Og(c?d&7DbW>y?J5sJdHB?b({Qc;QG~_PSQB8uIDcy0s^XP4y>M>rbqP!-2 z9bXCG;9flxho*=7=Be%_UtJW?$azi9EuLL}6R)f3jw=0#MyK>OSE<``#5qd}D;=t- zcG0p|q*&_Ima70f&=LXTmXO}d$@&#DrETp*v6szOB0&TwM5iR6EH|& zKSK+)M^Sc{XZ6QDvWQ?*=h|fm64qczC#U?}hELGi%a>Q;Yh{Mqlcx(q(Rg!;F1tr* z(@;AUg*5s@i}*@ zZB>$l$f<2{YkC{Dq=fHybqd@M3bS@xFb%^{imVN>9WDL8$m8{yYB z76HYTbE&W)aBG0N-HypuK}iJ%u53YS1PL1?9~xW|BnX!;4>tq`>Na@y6Tqi0M=&K;b@WldA2f69#u^HtVmeMw6nAy|@%UCcgLYE}F>qhIkSwn6j1Ob9 z`H85De!yAxM=a`)+}jM%gI88owHxA|{b3Qb6f_ ztXNQU#-m4a-_~E zpow~NO{9d3b=X1Cm@mdeNK?Cn3KGTy?Dl~jz{aqwwOL1q#~9`In_^$lp#??vIL@hu zR`;&ha<@85+1#$!k}ezE=dS?wbYgGo5?3@yXjaMEACU?(Ayf99&ku>De)m3}$Y+G_ zp)!eBv6a@!Kfwx@(<|T~<4WtIIHF3zqN9>4b7zkR-d-fy%c;zh%7slTs@%@y;FHt! z(6h70G+RVg7-<>Tba^PkDB$#>%E5i%j27nB$=r|&tL25ZlYl93Tpcj`@=1cB>4COa zWrb&7^Av9*3IV+#vd~6j@cn`q@n~d;0Eg%6b1OseZAdKqWjtyVrqiTAyl)_3n6w|9 z))t{c=|Ed^m?pAQd(!8GXd&sW4Dog1sKv7uhPUTN`!|~=&GCkVh8YBOYk;V^;8Q|O z6k5@U#Nz&-$CNSh@tB0IAFEue?TZ`TwMs#roJQ$>24fmzxlo6fF=BN5h9)fOZgJP4 zZgw@Eo?N%}(yy7_S$A%{udP4g;^5@JzRMXB%0qUPAs2!T$H|t{bMqQZ6nS0x#Bztx zkG9o+j(zc53_-CRX$g{VeiR`ryZel-EV!psEFqd;->~w26IFlB3TbHynLf3PI|?F) z93io9oL(6~Mi;G|HSo3l63ZqH=~JQBJP-36pH-es<}y=udyMFtnAlmERSdSvjiA6> zGl}YmjUcCEWfP$)90KUzt*UJNW-QJko$2vR9%KTkg*{I9h;&HHRgIoX-*E>zT+oD= ztDTR%IOK9YNp4l1jeVdcs}QLj?_H>($_y7RhvxVY;LlP=yHF>?Q2B{lIDNcV&pQDNkO6NuW)YFf;f!RKwA)79y?ME9ss`5-+>eMWO&9~m*cy6 zC5Q1jqlZ`HAYDMaVQDq zIjjLGmAffI``ce*HD)bvTYlD_S!+&CbdYFu4(Udbw1*i;m1JgZVb!jmf1miO7CKVX zGi(N;)hvNwP%oeZWf$EVm^NNhPF+gAqCw zKif+(RY%J1f3l88S_*$Va*Z_Gqy#&W{m3(IK`PlyEc-Lugf!RPc54Z@PYYjLACK4& zeq&Dq3)$hU01mRZk;RgEHIZ%iNN0fIDhO-ln%i=v2-TT>cET69oAJpYU^$Nn9|>}k za=e_teuG#7wC0WbHMXznz0)@nB=rOdC=FPm=dDH0_A9hjiJ9IZ^j-skL! zkZol>b+J6m<37gkrk!}*$*!Fb@y_AKvO8SlIX~rPPiV>YLsLJ#T1BJa2pv^mwk^qs zeqT@ntGh!5HdiP)Jhe|&*V?* zAkNHK3SGdqj{VNq*@5efG0lT6D0q{<3Gm!uC2@EM#A?13!%Z;s?hNZorzq+L`J~v7 z8dp&6uZH&U%dlt>U^NFc#ZA5*c4>U$xy3^Im?8H)sOh7jL(fqFm3|RYWAW<|g)o+F zz5EB+rQXrS*)vg8q?pvBW6G%9%}c3u8b$-nwn83PvSUCLT&c0t!;&<~&ADXm)Nnah z!X2fFVs3h%d%SD=%I2$aw2wC^J~#uqrPZ*IpJi4nUyZayT-D^yVn_yZ_kD&(FFZ81 zE{k5=_p$To$I3N3h}5J4hd#`2z8itJ*IAZP+&;~CDCa33e(uk$cR)==yt(*P8ho1` zOy*dah%f!Yw~+zb;LP>|hEzZm8ENX!B63XcXUZDGgBG#?KVO*z4R#vxw<_Hsj9eg@ zV62;IeM?6bEsAR!6F^ay!Pv>{X4UIT(@y(EqK+YWb)Uv>-Pse?=Oy1=n@ z3@j7m7zkRsO)S!AElCeoJ;gG*)}z{1D`(#kc}d~&*z=?js8qE$*&MsJmYiv>2w2U= zSG?Hx>(Q{_bVJ@3iJ1) zZhqj(tNm}r&(Dx$+1PBqd6GYG%m1WIelZw--qio*3Vx9r%xW$s&c7I)Uo$MsV#ZG9 zzo*5-B_t&!>BWt0Kqg=iv!vb2jX%iFl3CX5g?RuudoaqpPzp|_FSd>CoPTLJ0k~f5 zt1_$GYuJH)u>=6#-z3OiX@y@Bza!8C{APOe0skU&eog!t-G3LwpRtO|O8j#9D`d7m zXpi49zf7y!OUp_q8awWsrFY!NvQwE!vgI`KP^Jghu2rpH0OVCTXJ!nK<*eUa0448|9gN?cE zFH-4m#L6!he;WGd9{ekW-w`Pp+nO`~m-@f3FP2UKb~a|&7v2qIDr#qGV-8?p7X7sY z&H!#smVfMqGk}rp$G$n1r%;bdcdq2Ap8IAP`HVE^q;>kmne zmm+EZL+h6fwU=6HzNq|`5&KO>F>~f^o3?a{IzY{VM$nM`X?h;Qa^F^{-9+ z&4c|d-+xkN%wmenO7>t|V;g2uV*u-4tNoiX`yaK$MgNP|uU-3_*6*hHvuD&_xW?ZV z|6N`ww!gKy)PHJqEs&k4ofGJvt^dp1zqSg%`kP&3mI8sDoW-q-!M}D#!T4X}-&KC0 zE`N*tExmu^ApdUpZ%y#m$o~J@1b<}{|Jn5a7vPcp*KRP1+1r@?e?lMDKM2~tz|U`X z^lyd#Cj#mLSbw9{UjgX%%%A=9R|NXEaQxv0pSc$0Re!}dKrTu%w9$ozej-oAP0b8hv0(X{L>uB-cI6$M5mG9 zV`E|Cc)2QZvvRVtvU1b2a8k3gP``*N+ME3k5-$%C%v?;(|F;7BYjN2A+FQRnLfPb< znzJpl5`c^M51a#Vva`I5{<{YPtSr30uXcZa^Kefq*IIhF%!lQ}d`WsuI^QC%f+(mc zFAsW^93T`g#Dke>wi`iA1fSA*@@Z=%-)137Jw(vV_u@ zgI2VLBag+7p_u1b#(3FXHNZK{Pjc~d9uVJH28m6{B#^;%GPrCmPmou^N}9>2p2}YC ziy<0cI5JM8zqYZg^qEpDD`g-U22~8^@JL2R;eC(_Fp#DW068QkKLTBt{z3f|PW0o? zh{izRm-plnui%ey+(W)GT;CYkS4R(I^$S7D>A?q?=S9wneiTvdVne-#^vCK4jzGS% zGJ5rK775G}AGHBj&b^t_2f!_n!5p8XwB>-?p7&wWU+%S+SJ{oqqNxvrvbG`| zO;C9j)AegB(b?`}sDrE$DAxDka{Xt!#PegOZ$*;^_!uYPm7uYT33jQo-=hE+v!HN# zoLgXCBXq_?%ho}(d#JsYRFR$Q%ekct-?|XjXShEG&G^kvFRc%|(fO%3x=7P8c|KfU zm70!VzkGcc-`qoU;giTjWi1px+(R1>MGL|Y-2n`ar5VP+l_A75AT&Jorr2tKgBr$N z<3x&&6Nv+cx0#n0xnvZj$M4jfYd@R>=~sPuY}UkgCZ(;ujlmotix?~!7?2xWoK$#V zs?5MIkd|Xu@IDh^w6KnPig1=$O`tOxl3*F z!X%mMo(z9JGKs0n<=4Td%L~dhRCJq+QKNb1)b6TA=&c$%)ghiC>a%`sj@-z}wA2wq z^V$scxO~H8;^LMT^J>#QBfxWAKLx>4bf2Vw&~e z)$GOX)^zEwD&|LD`1M|poWDE@QYGtXQ<5chk-9HppOik^y8u7Ett&0GUAcTr=BA-i z1I8C)lx*52w3UBq)HrXDTU9cr6Y>b5`qs>`)8DKPeza<#><*zoB4N>Wb@5qg@NrzR z+pnAv_pXq7($auGcH~-hTOV}5^ax8{IW+%S`m8D(hu8QN+Md!-`EmI6BD;CT?X$M$ z)Ds=fRSC0+)r|gqR8r!}*f)!n>5mU|Y!T2W1cxeD2MzcS`khaWUk1h>W?hBt7q53# z7acdxIw~GyYM47TODhC-J39wXM4wIcZ5LZV1oT<>=#iEwf~yWIN*nqHu2$6GHD(3L zaqO>dj=1D}=E{!stWH%pbBUQU8=~DC2eh8Dx0p+9f8GkZJd5K6HeWbjn&*Vj(m%wb!Tix_s^qx1+*t^UUwncp`Se_p!&do<$Y`7ci=ebg1B zQ(4g3FX+9ONi~)p?U}bg<2k;kyGL^14$0X3W5bJ(OmU?ae|Q(q;W_2R1If z*y?p#Wm-Fl-I(22>p-QRWssQyK&>I6-Bl9wki)xVgx^e!Ih^iQ)5SH@%T#^f?&+pA zy7Chz`F7)p&7>*o(7X3Yi1oYclwQ@j{Y0%BRAZ3ahRc1t>O0psxYc{Iq7=9U z-sMjb6R0%id72`ncY#r8t$nw)Bp6gvfgd@SUDL?nhIybCp=hND95-OmN}^4r`j?PZ z5PKz60$tyw;m{;nnk)5GgT9zJO);Ie@T_199tC}@1Kz!f_26r8NQEF zDo0zwy=&TXvAY_e;c0j#WKG1NH3zSnSwXOs77Sjdg=PdtN)oZhjc`-kz&hS&M6|JG zek*kdOyKwS?)#bV7_t^ruBSb~mp{xRFXGV+EX_tntyvzyl$loqBElduC1HL>$XkX? zAP^21N1#o2v0y4zrBStS^_P zy}ui_SD-xmc_86<)vRM$)2JWg$sbm!i5}!Rpe%Rdv$266652~OO~;h3r|Kg<=OzR! z`6~KEkuQ(K@2b(c61_XhL4F~QJyW|~ai>BmQa3MwwUwe#-?n~uV=)FSd49iJo=HC} z|267o%MnWNM~Swl1P2LQYvv6K5|@&+R(G9q{+~YXX zX>J(;G6C6jM&?o;0A}zOKg}1jVuR}NY70PA`s_Y(f+-}0O7xL9UHwX6opb8=2c(gfbq<8KoYIr= zYU@8e1u`u7F6I|45C!AFWcEK=R+LER1cK$pElYrcXwVPG2bO?+Y7U{}g3U-o<%&@4#!Z4Lox2`OI2b;n{-!d=F_u^Xa95OT(GUgv^X z{1ahrS%EwA>?%qXJg7q85dI9iUs=h2)v;eoyAyax$Z@4mIkVi+;an~h7p|0u%a<80 zCIkVqlWTK^Fvl-8HM&W#2qlNm9Hq)&uM%ENa)0knB1UVeDr`2CoS=4Qb{E6)mf~UB zdQf00d!u8VDL&^U-?y-ruecKOd%fI8ZqQG^cdx(VZ7C94#oby?5n`~Fe|Hs2vsTvP z&Wot9^=MaH{N#A=b)C8eU2WD`x1$tMN<9@gHN*PdE61=k@so1s9X>Giozi9c^&*X_ zo#Ie-E^FuayRj{E{JM+qXLY4yUkVov?hMb@SNYQ#oymL|>nCzSo!IhAa=eSeMRJ6e zr?1LmgFg-w#kq32Om*bZy^#Z&*i9|TXoc;mo2Nw7Wa1BU?q^5cA}q(%^g@Ea@-2GS z9DG+vX$WqyA{?wh$tq(%TJkG3Hi(q)(i7#RbXKXSs;lj)HJRQIk0tEa@H$VM(wPf4?(jmbE=bM}0jR8>bI03 zyriHtj+}q>!JBL1JKxpe`>`Gh-CZ3>CgJ?ITs!!VIA_Tsl>%4nETd?5jF%%2V|>la znJYqR!zsg{C99-vw~U3yTjAo;6&d_*o|G=!Jkg%dmBXAIkwS3?aEw->51pn315fjr zK53(Mq{Z#my!vG!DzQQ-OkCc$Wa%F+v0Aj35d@UCx2;Dd4Nz?1!s{BF+ujs@KCi1C z${UzikZOLrU$o-4o|y{sV(lgG_c(P~uzw7np1JPur`E>qE^_YEK)cVUyi+u4J$}q3 zLiQzN$>;3b&%?g|uJzl%QB&CWN5-2!E&avlAIp`jSsNK{tjg?|(V+8&vQ|bzZmcz<`g%kkT!5F!K?kIzyhk z+oY;JW8{1@9lLpheUnH+{fcaC8b21w1`Q-lNZ2}qvi?_$j9y4(D5qv3dur8hT2h> zJc#rI~>hBl;xZ_AJP{Y@lOk*e60zw+l5N1bDR?Z6Ei>;Ju?ZG?3n-pUM zRZCdm_WF~yC#^0sD{GQIBPsU2Dz&2K3uPiV#0mqMG!$W6NJeUtYkoxP4O%C6EN)U- zX1)#`=v7+>oxShSJmgLelD|ajkqpLDBwMG>MG;PaB({{X4zQP)+P#UiCJ?kDnJP`0 zITIS1=I(O)=3$wMCViExd#RhU-^_6=IP{b`8Sy;ho`rqzB>w!wH>E76G-p|-kP6l5 zMRl^B43CYC1(NU*u68oKJ7Lj#a!qbad;>Z7aQsT7figKe8p_QK&#jHUr)dX-yaIhZ zI==OI+&$jD<{Zq_Nn1wUlSJ%;2adw~emKRKRpDu$sN1}1F%#k z0St&g1+Ruen6*m50V;**An?5y&iFoG4Zs7QZ|)x97`sHvS~{QYYy75vH4&F z?;^A;82h~w9vGId1fS1URT@QH7)mIS?D~T>J{7w=agP~frDf8ox}rybaew`r6@P~S zSn;e(X^!BxC(_QrgE8N6hPtAZj&o2BaG7<1`K^=qopyD^;a(FYv1a*oUXrX#wd55zgI(*W`}=fF zbI8B+Fl3Wi#8n{34ZCb(^LrQf38|Gh^@bj^9Weyt<^|=>@A%W7^s)&_SHBr?G?C?& z(@ayJ{03b41`L{E4GeZxcG~14?!a|Qi;{Z7(T&v3JD{_BO3ZetEuN|xDS?GCG*t9s zP_b;p@m8XmVlJ^UuZF3S2mXwJ{7Y^6!q$(KsUk7~C^o3CbA381fEHxz;PIAC)OX{9 z7(nKODK)VCSMNK_wr1Xj%}uc$=>;hULzxEV>Cmkt#w7(@K7z^XY5i%d{N%ohK{iXB zA@xdSX3=~;!Nv-^T;|!WgZ+^+7yUC3dCS{ld8h5o`?pFkgo4#~P+u&Ss`-drgfR$C z1e{MLlx4dxKbicD&5PH!A)(r&SF|G34SfPq4>!D>-z`X%xqV0N&U=)V%q84Br5_|z zuDyNuhWCslS*;YDQi{tTw^ja?5w-2JI@SF{{E2k2%LP(@IfW3>zn{UFGwa`Z$g63EJed#jaaFgAkPP6nwez0Fr_FMVIXN}v# zz6Q3DF~pF$&xcO9Cbx*`tLI`KiD{aKb3dEj);LP$;@rEcf;6b@VeC1E!?EQhwrP}9^Ac9b=6#5}BsNYUW45Iejv*YY zINm->5c)8pv{ULWU*`e`6C>gDOsrnUR89aj3@1DRUa0H6>pL(56s{D?$F_6|_0Jja z6Ob~4S%T$P`y@i5&xs8zn`_6zcsECHzIF^%a~+@T%8pK8hPU;vppJZckExoL*-c9d zq|gJ_*^G1xBr2|GQV1@~a8paC#S5yM^P9Ks?|&tbQI1txm<1pkk9JgzbFXUbUVd}t zjWg$OE#%auVQbFfA++Xvy_C*g*&Ftn#=`{|saVf`K(Kt=vcJ6kRa6_-Wi-~@WmI;R zj4SsHv%S=oezRV0!iu#8fRxSg^_@ewA|}DI$y6Ts3Dcd`qWapEwb(GzD4or2puh*+`-Cs;AKM<$UAkM&zRRYkc)sdL zJw_qfkN(*=db{+_LmxdYaS0A)_H)rkMLS~Dqd-atxN^*8)?0_RHbUA5KWGVoLD{w( zL&GG5pPIDEUaMMB>Kg1zXo9Lg>{=}-P>d;Z)MXm+$_)>WPB2% zEX?~n*notTfOw$fdRx%cQmCVJEroyF!Y4nyM}O+BlasRG@QybBycps$=4g_A)Z4ov z=csq%{msZYaC4F1b%dOJnYFB3(>qH3uZZTf9K7G>hka{ftlr276-2JN%y!cOp=djj zT{?8AspwPVJTQ2W3oh5#VOq#W=q_%Y*%AuqxY&i6Ob>+2|4Yy#--wwsk+g}IQic%aF+4rryG&@ee;ZCKG! zxyQxXYDXGL!;Th@V%*UT?mTVc;!7ud;^XZ@piU4=WyX445dH~l$(8{SYKA`B9p*}b z8VythT#Q!TX_BeJCaOrF3zNfi_Wk7t!NA6Zighc60ykpjE?L>RB-Fa=*68 zTGiFJc>8>pbAO@o`JmX)a%+tpJnaxhcY+L(g6YYjK6mvY>Q6mQGeE99mRA(!C1?Rn zM%v*FgYqH`78Rw&x>jEuqt8-K*1zCT(CKnb91LqoMqE+$K_x0%#|0=Xc(7IvmR{59 zTSWJswy>7k)HL)IV!J~(4ipKiYStGM_Rp-bW{?G3%{N@aG9u=h&MK5BeQSwRy`?DFbI=~u9El9_>@slHht#(dc$z$a@h|kehYldCK z7ip}&1xOB_m8qKqVGJi|7xbzEKhwO)?KJ`7&{m6ty#sF3vnq!*%c;{kMqxO` zCzVU&W7NhMspPy3V*|=1Bo#}9Vf4w3sF<{1OvNXa^kM1!rNSoUB2-QCFeu{jDkL&6n&mcWV#_5yWAwy3(8m_{ssKk- zO+qm~B;e)siU8T-@va6R6tT!J2Gl2Ap5 zo-0v@@kUO94n13<3By=UJN}ghxdcKj1{Kg5$N>z*z(UKB4KtM^(pc95M$tHGhZ)A- z>V)~xpT%Ja)17_5cvfBa0(Pja>j697tXl(7X&qIf-o}a&yq2oRo2yj zs5EC`7^L*ohGEh1w<=+;s3%C%+nUdRa)_SVV?(nqG-pK^(KKgO7_Vv1vM^c` z=JO?TG58bQMZz8u=CgZUfsb+=G(XhVg@DHzCaD;D2}N4#B*3SN-W9p!{N8lAu z?i$E<^vY!sePJozYI^j>4e#AR^1^pAlDf}oJ9qrZP&45Dw*{O}sIgfyX}W!NpFprv zV82P0aW+3yE-Tt8i~@pDy^&%`1*C=MuFQDY5{r~Ej_8jg<|QV41K)*kIYK~OYQQOm z0z|(DA{E}kuSs&r7HkPD*zDhoQbw-|9N*DRVHJ=Uh*2?5Ehxk#3n;)U#3fO&DH?sX zBpBm}0x?YC6-+4PJ~qT=#VSxdHoVFDq2S@WWTjH^oeM6$C;nS}pGQwqMk;OG0g5@_ zN6@Q8q7jbJ(${8RjR?A?GmA;#4~C~haxX3R`=;YQvwduq4?)OH@h#DvLO7WUJ2OTdLu6_`q)JI1SZ zvJo5ejd*lA>{}N2vH$G7%oVPNxcngOh_P#!cAv4wUtrIBLa5~P%{g=ru;bHrsqE@I zbO}4Pqmbzs>*uhqrbN6pO|3x6ezemTog`$o1Fvwx-ac^2gzFKaX3yTfW$(nbtLT?H zl*OH7V7X(hP|4Q*<&q88BMd~!Z)oNju;)>*(==GCFjjQ|Dkx0KFk2kHgh}*HQ;TLj zGWLwWATjn#N`K8NI9Qho!d0V4TplWhPdc_-?58K0*;%$k?r9e2B{i_DjC9+r({Qt`ba~9N>kl|HPI12d z@lHv<&lxy{o#w_XeMdNDp5{h71ysOgx3y>ql{XkH<|{x-;$pQmTU?7~hAh7s7=uY4 zs~aUXgw!2&&JbROF1Z>oWyjgM-+1^i%Tm6*U)r=PSAhL=%QgY%zFpBJTR0BWHF@%?;U_YfrwploQ6J&>0OE7= zBxtmG>BeJc^bn>^B#-3L?QNxPBo7`r$SKN#Fa^v~}cVI>3OHen^D6UV0}m#pfi zrsFKuw`LquG=4;*uqKp+QYm`2y9(fn-4tXQT1er0I{(8+9%)jgunkJSb$ettISMWj1d=KCAbiqKcvpV}X* zYfJ@yR)cK|UK)6R~z=S#*SxgUq@MSugHi5Q}lwP_RGcL~5bu(#*Xr%kip#pJ} z0fw3v6`>k`L4)rBhf2e z8P+?x?Ih+2=N9gkfCuJTbd7%VC*~e=0JHyCz*vsu!ZW%)=oyO#!W+sP`Md9_bXQ0h zyiDh7-`DQA?(pvX`$P|VZ`u#--+vD+sp%w1c;|=Wj(wj%llaqo4QNDqZWwqHRMdRE zlb!j&7w0~?i1)fM*J3F%yrfPTpL4ha*CkV=Z6II(!flGAO&C!CN`R=j>q%u(?BPS~ z$HP_%+$A^2$S$Q@Qix;eRn$$}kg?Ys5JGDmpTk{yb5(8Hqrm6J=f*N>45D3bbxi> zJ>{NmMLuIfA+_wJ^ltmPeyVf*?T6buGh*j(hkt z=T)g7dZ}dZyQTe!Qmu*#!=J0~+)86kH8QX>60Yb4h6UvXhxZdbU9Aa=#Pm)`)^$`3 zH&|zSXBa9b{EE=8ILQm8F3ZpfX0)w|I6XH_#>B>Q?t@5llRB$hv+c7%RrWugf(RI~ zencvIH89t?3_`bZGey*FGoFszsLzevjFcuFB!7S#9ZlLQF3a319;CU5pG)*G`8qjV zHyM$f@hQS&EFuDwv3E5kpvE39ptk=}fK_r&QrFBlc+QEdL}`@f)O{aGAdZd7ooZJ3 zG-3>I2Os`NuA;t_A8=s>x9R+EZgigb=VI%0f0Gq&3x*qxk$i^*)VesrdL%zb78z4wI-27z9t zF>3@B-F|F}6z9Cr;2ULczWN%$idA-4uFvO3TA}KpL^j!uR%)y}F|NBoHIBX|KyP1A zep#mEk01rQ!D)AZ@8bU8Ux`#-(vZ)#2|f49<#%>a~MgE}4?m z52l@wGaID!9cD8oCK3t?Y7yH}q8p|;M-wUD*5R`&6YX%DeG&_~9Cx!=`P5ChYq38M zh>{Isa50Ue#|4tnHz+vVBrIGr_;b9*+SKlw^{?Y94|N5I?Wb@VUGbUo5G5lOTJp3y za2Ta@pQiCZ;B=#!hB`?`eNG~$e)4&ft+$8wm0V|9+-sfRZ*M$S+U=1J*;0&OyA(^3=A;zG`AjhD_Ae5n%A(f%L0;v68Fvwr9E4PcHtEWr6>qD2F z5$^b_Ll_c>V|Z7HB}n0Mh+F>$f3E=BF3l{Grhh>VyaT@jp#!}GQWb0yeiK3ydJ|+5 zNfT-lP7_=cK@(yVMiW#M(Ji3^z5}fTf&*(6e$%Tav?6FG2rfv%0F*9IIzmnQswddl z&aQi0?PsV1L!+NaWqtuy%>VtQ_A8^;X!Fo8*AM}MBLBO?KYd@r&USPy;%YxYSsNN1 zA(ix_#g$+g^LyvID62VcAmpLSDyRZsPfZ`pZwK3yc2wZZ%~r;2dkW&pfp#wTqYA@0QI? z+R;&iZJYv^7e8 zlHkFvw{CQ6LoC+>Y-egqmd?yXkTd%6MW6GK{r)%VJf^-e^GoiL5c*xYmhg)1wx$d_ zo*}RLADvNlIjO9cW~&LO%QiI04`_mtH&gA-q=H5f=Co3g(h`yKL9D?ucpo%&f3)B* zZlCEb3g}voyDc=fh$ts^cQ!~y0s|c5fpgiE(mx&mxn)8iN+wBCZPF9;!U~RizvU&c zy6;$N|3)wlg;RU%r+u>%`@Pa#sj@D;QzmJR61{Al6`S49PpK)xcC3?)6GzVQ$9?+2 zsv{Zv*(W)z)eR@vo{Qm`8!h=J9f=M2ZllsDn}tVp&~E3Di?Wfy&o}2vJKsr8A5sNd zt+)k4@y}l!bt_%)_{Q%T-;$uX-w+5X2`ecB808)JX*~(}r=2bZ+C`Wr;$)84S2IQT z%{>zgavLSErs*$%tI?Cg+sd@MPo=6Cb`cjS9O(tm$*oI67IxBSb@_Wc1^J4?2NXqO zSZlAEvE4xM`hn3$7g32=u87<|VvcpWd(=L3O~Vsz-x3DwZ100d<~ecqDoqlnXyf4~ zwF#uP9%ftHUcbQ_rA6S7S@!euR*K5^+NI$6V71vr+b+Nf@V$$B&oCqtvw}dE4sVebTG0b&h<+>i;2gJJ7RcRV+KLwT)eX)Z|iUf z2yoXA=fw}^c#}@sSC4nT(Go6Z|B0HIBAogK)$KDBajCS&ljh?x*UbrmU~g z)&&B4sr!OSe8z};ZoQl?V{O!CV(Bkqy4BeE_vQliIMifhOhbAbR^X_k(}<=P--TP* zMk-bXHiSnWeqz7c4Zgi*lX|#yk8*Kl2%cJSp0DdCk|w52SWVpM_{hiUQ%x~R*Uv); zOzH;Ho8j-8JbllHqq~Y z;Fo`SP)sWfyJY>jNSeA$B=EEg|DjF%aDZ*`brQ|9z5k~Id&Sso)Oq`eb_*{rf&ahGwSD~};tu{F_g=TWtpr_e5h1cPB)6t&cBq+vl)pu>aGGcib z4m#hLKcZX9DA{1`EtP)KE945VBi1OVzGCMLw_7T`54wu?L(m9H!E0(~Lg3Zk$Pw2) zBqBQtNS8QfJ#!@H;ME21r;u~j0!IZ+w+1=K4B1>KH7e6mSqo{#ELabyRO$(vh0%)dH9i^CpvU%7?x^)%(2`~6;+f;)brcbQHnG!d-4O{NZ)t3&`HsxJf2=(%aG?_x1HW#0zRKWYjc?j9bUW|%20s7B@>bi zRi1#N1f~QeNgxc$2%wyW@nVPZX}lb7e;;9d%9v0E&=^}$gduNh-8Yk@x=lpiTOu_P zx)HNOv4W>+9A%*OND?{eRa;ydI1ECjrxPS&Si;N{eL|xkx8bAs&>%YRt}9g@ zAWts^;E>2Rk~V5YGeR__(o*q+PLEz28;27Nx~`4rJBfdfLuEnTGCskcqi1w3$Z=8= z&Lrx#7hM-HYt@B&wNmt20*>X_nyFKCrQpmI{}3qo-L6sg{r%^x4&ZJyr6BxGmo|`P zwhYpXFZ>~QVK#>RuWN=qegf^pyS7(WvN5T0Ux;cEI6A9y0$#UBC)v4OMw&pXn6Xlk&v_6SWj} zU0N7YK1RBw7D^-(40;_ur6r_i6|eluZ~JJ1bDJd(P|KR1&Z5ov-2ALd%$0qf$^a^S zXz2e3OhB{0zQEeddUMm-O_Q|`{rRh-DF~#Ng9x3#UWJ;N&eY-|P8Bbw zikDMC$f+RYRPl09F>ZU9g_>ib=2)mX7HW=#mde7IV8^mn5J<8j{Ne??AIpOCm>tfz zfD>?g5}dPF3rUfIOa!jC`j|$IT)-(6AJ=svG%V_7@#G0v)JP~y zX$oO#&UUl~c8h56+*tnL?$|c$ZmbTnw1yx-G-4c~YG1I%&ntrzb$Hjn{x!8alfZF; z!)yc8)?_vb)kE#%m*9w@ovAv}#(@uR!Tt^TB7Q^L_BO&$Q)5pg^wpB&oc)l223mtR zT+4BKXb*a54|-@1dT0-NXb*ZQAi%7$4k)c~!w@Uk4GF2XTI(wx@~teuJ!1y!G6iH+ z;75RC^2I$N-I_?HAa@-Hsm4|Nkmfp>2ZRs~sVN|-cxaw$M=TXjLB5KFtBo@jpTiyy z86uw|S*yol^;%dW-;D#@J0!nISGunC*MubGKAM;i?Se@vxs$OWHM!;IJ#}H$RnoJf|>}YFJw+6I*6N=rU zirs?5?$uXUC!yGrk_mo+hDn}-d!R`YHsLYvqG5ftDM~qD+|#bW6d6G=Um@j03er&H zf(s<|ih@iPQAQ%skj-Yjia@=jJr#+}VV2rwusRKm&S)rP&0p(pcM}A`h(1a3nVCxG zuqW#C2zZmHAz3To1P;zPY<@G-Z2^fD>q$n5SJEGE?s=&9;@^q^_3`qc-X8N^`f=UF zhVjJUw+D%*K;A%sP(j1D_AlqC^O^uK!6^1cB}1@48Cf7SEs#`MAgQuQiWpN_ogb^g z_Ji!gs|w$%V&1C;Sg#sjy{hoNrvY8nV-65bO(UUMJdO;#lw6G$t^JtEfx@L}L<3tE zj6G8tCkwWYxK#-krOx+0@bZz*{_^gQ-Xkv`x$o?~oiovEKEHkY=hw#~Yd&|=j)&Kk z6Ayjy;<5E(kG=Eg(f6KMKl=5*ee1>_-o0$aJ*T(a^vvA@EAIONVw!+&Jr8W%jm5Ap zBgPfhszcSPL)EJ0tyRris}5BQL1Y&^P=FpNKo8Fu@O}@>m^^S1G$xcmTAkwB$#T1C~C2UL!ThGX#xfQmbmeBeixcPnsY>;HppKQLGWrv`Cf}{Ec{HmgVq%0WRp! z!@WkKQLwc@I@|8j#71lYSSs>BQl1lFh8~ZP^En=hevUDil@oK2Y^;VW?qmTFxyUIQ z^%{fSo{~|&8rX3WsNm|j+Vvb{sd?e4t{AQsrc_#TV#&_0jJIzaYqql>^f1QM@*Ta4 z#+QVX!&`5>b~x3%_5Ky{v4Iv*OA(}&rP)NscvHjjI%jg^x*M+>N#WOD^BIt?`h!xL z&*m}H!Sax|ae1n7S#xcwZN-kkq1#8ROb(yO3X*6BnU*``@zg9XYgpEjOtp^efRWAw z(Elrd{vfs=u@5N=dA0!MJ`Kb9hc*Qm#)Qky%z$%()(jI5kBasrpd)V~@je^p&p;U; z*Lut-+wc_dot#TG=D1kF_)(VeD@tcz@<$461?(9ZjRt&?2N{D-%`o2oQW4Xe7{M)y zO5F*J^Ksz!b^-np$7Yo5VnY?~hj#0ScI$_*^uw6!hlqr4ie`mUjtWqW*;G;3R8iPe zQP@;b*i=#2o+Nn4$RLx2%gM4j(1kuS%n!TfFo}q(>JQ`b61p}68^Tm`4rG~9Z#c(G zEerV%wX1Xg?5)>-Z(oO!e~C=x$gNBJZXJpvsRaQ2dHG}C-@mwR*U6n^s356}e_eBE zbyel6JI6?SDKBjW9OxAwu@>wu6n`TvcyjjgyV)hs*vf!X8MsrPz{_}aqzn&Aa3>bT zB|qG$s>Q2n@TxFg6~Y^bD~3ZgELlq6LDbBE5rcoQ;HG|DS<}L{g%FEkY>}*xg}q3m zp`nDVltdp?Pkr0&G*TpEWZyqSHL)g09!>1~&r!{K zu&*&X?LdY#z`EW+nba}`b+H5k|Dn$u4HC1nRPFCJXMMc0bgIG{A$H@Ghz>s)Mwxuh~rP#gUnDsz^-D)WTMac{!j%@@~Q<+@~iGt=gNup{C~HE z!xp@J{l3vkG29S}52S;Cu~v1qd}}7%UT$r6HI8&V^>Tej%7drsMmv*1-V-3d7Vrc+ zCfcJNO;tvwV#zA};ZRe#E&sHuswLkSUtBHazh;ZKL2q%x-T@R&jT*9KW zL|azR+1^ihG9JPcoW;!`aBn8w_1D(a61A1Hc>OVYD@*~$bLb23!?Un(dD3HhU-k&- z0=+D3t|i`;YiZd2xC|~>P_vv@Dfyt9C3%2x)-4@xl#k!u)xH0OoEYnEcIrSPLbH*~ zc(&{2p~}SQ&ZVtmt>p$Sqai=<2{;38vHR06+=YPZ*xR_}q47-* zO{TmduU2qF+(Q&x1So*D$~I*tNhH#+97$NRI-PXEIO)2e*-{|E%7hSSlrG4|Nsa4* ztl2W3^oFipQ6w)ez3a#KzK_%>-1Vaa9p5Wo`APZy!qOs0{PwyMP zXG_z?H)^Lo2XzCV&j_Bc5?h53>IAB>WGyaz8Wb|F_94_(1&mpZ* zQ7J~8{~?2B2FJUyVNwgMP+J1ZLhiE=lk@9_D2f{?n$=!<4UT~@(=1Jazv=u2d<)IO znGCRh6#oWbI#dUcHm!_@=3Qp9!^Gr&M)OWlaPV~g>oo5`BfI<_@g^8q2wRRurV-%C z%x;!-VQ!b^f*{zb_x+RhYv&h03&S!AnhP>$&80 zAUJLQFeAbsYhi$TE|^T@Z^QolG{ZYYvlBe~3Pu?$L;fV-3BYHUFTX*)K_#&)wjIS+ zuh%5O_Y1Ld(=4$ltFI5e?a+WvjUK*W(X`nD?BQ6=R#ih#H;Tmo4+)ErS=JGHTSgZ& z!7HZarp-0*n&WcK)`G4eQT?D2WN40V!OT@lD*?7(TI3rVT1S~``)}wUy=!A#7>I1V^ zOogF?&|MKiQ1YHsG<>3BiVG`#@^4yYPYZv;T>y7ltN8>G!M+RJl9q@F==Z8Gzlnbt+`k;Fo4dcq7@Crx zZ`L5F0fRx$5t@SKIN*Ub3Yh+JG49LGMeDnrH8Br(7?8c_XvX3SJH6$0JrI}E=@%Ki zdi2I+l{9N)Io@uvc?Fs?8H8|imiTq?;T0U*3!ZWjwoZA<5V2vps>-$~^%T(x@)nk` zU^YxoOk@q1t$ZrT3hpVPhzF&X!@re0mw-_g8A@rRQck7HH;P{c3M#ckp%%wMu)UWN zLk@S?ZqVfSU4e*gT9eH$IfJ4Oq;0zVH}IWWMoUUG@D(I13=5b3!d#)Kd_DdXaFm2c zwX9KK^Ec;pjM1Q1eK_%JAO)$QD-l`&ZI}WkZahY9QFQflq$|S|1&EhAngML_`yi`a0*jwRb{lS8NdJ|}*8S6*>DPV>#3%jYBS^TE} zitdIfw!#jh3b~~eimGSIvZd$ep->A6fKo%WD6>HeMl0HE_Ea@Fr%dwApz~&5gwLNZ z9|Q>jfzyK9CVAj!_X;kHz~tjAK}rMuY0YlCp1k>eXAajTe9087`o=68=4nye-QFCpt0)!f<1t( zFH^X>_B8Mw0(kfqpfVx)wnoF1y6&ct#Nsw!p+4Rle4rLhf&L+JcM1pamd=Bk0eHzxRXTpSA9wz(c|C=Tf4 zjKUuj?qEhXI1Sp_;z&KV%^YlcLWXUn%o&9?fDvjes{Lt8R|zN%5#Z5g!xt*;X|0hJ zc1;WhWBUhopW0Q_ow=+bSbtl)(U|`~MJ+A`+dcikwN|gSx-}EBhdVy?(?k1y3N-o2 z=MOH~bN!ldb-PttM)a*Zas$xnXP2-2oZPZ_`va<09|2lT0VXx6_(nZpov!8MLLK}$ zi%2sfg(i1gc(u9No_+_~oZ^)V8Q8fb%)!$ChQfn6-YmQ-gO>jEJF?mq+GjEUD#nRu zHF;$*wvdh4fk;X+GV&3|TIO~Ita@_P6s~En+fqOQpo`88pSY&RQ{P|fswxZctM&As ztu=kw2S3xcEa?zw;EYI}k^O5$N5YvOETZD40Z*iBOFPWfcs5XzE&qQ`2k~;KCGN<7 z*O7p~KD_ku8^lF`k3Q_6BA3O4c_va9sWW=uuXkWZ;HnH+UApapXNe}h8MtrZq+hHN z2@&{p12SNgoB`3G)g?$s3LiL@M%NnTbiD0?j4l`9_3E^ppC*-lknj^8+L|H|ub7OmUYj2FVIZUh|@gm6Y zoF1pOEai!}RY%K{9qXWaSIcoM+y87S=W? z7d$a7qcd~0P3;GlHrq_b{5hRD;BfjZO#WOU6(Y_odpFEc^AUvIa9R4A)w?Vc%{MrFii5I|9FNGS}Vs?e$8c?mTr zEfFp(48n34aU-R-M|{BwiKFsg&{C$b-xspbB%UMyBhXob9#6nP(OzX?oslD-wYdyv z;oZfrkZbh@29>+Ovo~ITPfLSmZ^3q<%APKv=dhNV8ZJ4DznRsyaCXU177B5}S;CeT zB(8C)VyY$ti<)!E3an`sM&wAqI+w&N`{uM+B}WUdyIL`nyh<@tOo?hSRNaH4r(UHD z&T?-sF0te*Mq?p@4DzNQA4Jig2QDN-U-GjzlWqlmGw_27o_8Y?4=~edz^PEtir} zn!HNERJ1pWb0yO|Or$yH^F?fW%^z9zj}&VOIeq13(uh~)f6r;m-INy|{HBV^^W{`L*{YyB0XaU7jMGGj&U#NLA}#^()~Y<8DO{5$|xL(#O!Vu+cnR)=`0HVB#3+RHgIL;eJDig%EG z`%Q~|ixZ1UR%fr{IDDWE&KT9f$)Y+QPHfiA;{TB~V$rAx!#NDjDPc|Oyl9iUN})-e zAA(ynk=is%FjxkxO>Ts+MudAzWub9Pw>Hi{#2ZNO7_3GZ%7r6lnOQ^NE zakMOLe8;-+!j$@%__}de)It-H`hxY+QpnJJ+B}9sZ4^-Y|>5n{`>^aG68g57*m5Eym$oV4O$Ga0z`@hgtOv z^#Mu)XpZJ&q}SEO_ou<`G0gx9r9ct(ba9o)oaDz{r_ zZBLg(+^F@+(5rawLMB8DHXEXmzf4UW9*-~W>WVUEm(}7nYeBvXl6Nyx-q+JpzUl6< z^6y&fMzj95Y-hA%?~=AvjSl>^TTdVC5+Y5p8yTfq$!Hc8lDbQOj4cZB%MN_+*3LU8 zTg?@Vllh|~V=WVVAiG!tWb7wj!0NFdBktoy^YY5FuUFLNUgxLb!lkG>IT}?bN2BVh zkf)PVMwZUC~+cn*CP zmtdYzmr7(gpW`)I=|F@%oRY=fTJlda>|_RZqJzC0mvsXQ4Mj5sS6}9=RY<3H-h_dl z(9n*SzEz2h4^7p#?>M?TKGab!>9mB|V2ZY^Y}$EyAUocY9?ir#xTfj92oAyEDD#-J zdrsW?iKllr^Uk1T6eV-i7bp*$`tI0)Rq=2<#E2e6s@mUbZo_WH&Z4Ys%le_~;4k*p zG!9|zS^UC@Xmq{hG=2eN0Apvf&h_!!w(d;RU=vZ(pY11_`kVT@Gv||&J>6i4S^b&; z%uNRSjr|TNH?kK26b8OrCZ()<7#~;ja99FMzI^uVIYF6I^KXmiK5RY+Hc zvh+||)z!*O1=1DNY;)fj(ri}#%ra}GXt&gEet2uFvmt088~T>EZvOPfOD{4kv=Ejd zOatpW!mCzZy1Q_M`ricMYv_q(25O9gQ;7P!VV|Po5Yn-gcbGXxnH!H%G)M{wfXizOnI|DGV6Z;Lq!058(vME+`{ZeOcU3Vrn7$a($v&}@TIo8}zeLgVK16-VTX6b;?ujxl=ZYd5j zYVNOaCmxnYU*St2QHFY6=gi6Lx=k@(jKG@tW`GOS`$+Y98T7vt-r%IH-T@`Y^HGpd zY6e%UsQwG8pDV%wl7<5&GecVfE>}o0YV!vd=s%d4)Bmk^d<6aDD`~SMC^-PZGn(>G z;@ddA6Z%S$Ht6ub<_!xmuxMrCpTWSzm++724LXvfSsf?w`6u&bf>ptV=4s6~Y@hOO z)HJqp>mUh%(bG5x-$b~OWmB!GLGamWiL8On)V4D-JUC3$OlBvE;mP62^<%H~?(JC* zEmwEbKuXFPTYG?4p=PQEmgJZ&RFngNNS49^6@!$Qm{R&vmbNm?r;lXJd_6-x* zBtHp2fcoD%_L>ata1*+PK?e6|m2xt;OBK8ghYm7Ycbd$U&Oq;UR4tB`FRpfYYjhgI%o)lS6`e=H(U*n=0G>f>oSb%b#20THuC5-v zW92$paEf7n-n(PHPOsA#C9^kZFtBu4-_4uw_xxeeDbT$wV~s9%va4dzP||32ltM=d z5th@%yh)R7AN4VTr-eE)=?@!qEsG){$|luA^#MVcOX#t{C?^%MLa{{zo2l6 zawlGl^h&R9Fm5*zM&0Y~0ks5&c>j)@3WPuTQd}WK=q)*@!~A^2U-yLJKBJBL6b+Lj!VbAUE7DUlS>mE&1y*k z_^yW09ocQ)xT&dS$D=?=*0pUxf*_)SzS~BttxhX#beIjIiDMm-*tUCi z_buPQqqF1YFRT*pJW}011^;VOtnBi8#32w3Td+@|N|23*1QQWUm&)T^1^(_*3BF4O zt_%LWZB0el?B!o%&G224GJUS0+ZoB#^!WSv9uxqRkpINbq~20EWC|`b$qEhnoD5pl zL~^p)7KO58=88G;QWsU6kec&L$_zPihyrefwt8c(vO2%<1%}mW%%&G$VN3#n>2@U{ zy*<=(LvLtt7#0UiqTQ&`u{tR=)U-+Q92fso2r#5oaTnw3J~3YIEv300W+Rr3y`x>;TyJ-E zQ?8?@u0Pzv_uo>Q)F43>a+@1`wG&MCwGdc8Rr^w`mqlM8)n zZkeC$Ad&vPq(`g$Xp*+8Jm3S8ByAIL5HLyVEN9HnaR@Y})9O++wf45<)x!6cQ1JbQ zim4boH11rKirI}MP78h~JQwTjSsLAR*I4;?Y%r;6ZSRaO+1t^!YSGn_D(YF11j=*N z4L5$EHaCnPS{b8gn$|OVPXCWGFr;thR?RNVj6I6IiS&Ks$hJqJo@e&1U*EfW0`6@S zw`JliBnP@)fA2Q%*^A8*?yRr=(Eh!T_B@iir)&Gf-rS*{kM(cuU)|H$pJDZJs>TS_ z)HI+0n^QF)%smv^=RK|!1LK=N53u)BlC;mr!?s+69!#f??o0Avb ztI3GMLeoGEyj_-+;SC)lIT_p%p+t=j3S5%v3WEiT#ftz~kS1F{GNu9_2roEmS3)nW z^p6Xwk1Rp?wDbK22o)EAip@x&iDiJ4a)cC+ey0%jI=iE^2orRKJw3pl4PejwByb9p zV0yBEy}Y~-h2fs-yDJx4^}s*q4UE-a?(A*B&n`d)5!^WbiBSbdx+`$BsfbLSQo_?w z&nd{PA8MSq5}8+`bS3QFq@#e-5&a(Ep*C+HQ~fmc3_#;X>=43YcXx0k4E=94XM^zb ztq7WfW-OhmW^!w~M|uWxnXZs6kxTc)`rZ8;a>gp8phrHFIs+kwtuH99;)Rc>t|MjOXncuP2bah4 zem4UJ_)iOdV-2U;zN05@QdARVMqjc^gjh3Pe3?-J+)j^9w#2sS4Nx|d9eu(Ybp zTCeS0-xbY`bT=-^4fM43SM@m5+;Gn4!?f_{DP<}YsziCmbsBVWE$YK5!%jw`IT>^V zQVF@FBPmnr=I7;pSIPeWX?L#{7PMML3l`c|%>9v4{#h^IeP7?|J^ca4-^uv@S=X)< z6I8u1SztR4DpjB9Pkn0Q$RzaM+eb#)2F73npLlSh4teo5u5AK*w#Q+u(&O8G%l0EZ zhjaV8CdantcK2M@Ki)skV|S+e%ld18YEC(Og|6R<|s|F`#b9uFNoFQTNz5S`LPEBIGxHJ>PQQf7n}IAA?=Drn$dYYfEKA+hU3IJOzuo`8|9`)$R=r<) z484Ot(&vConTaj9iuCjb;#uk-p(cF54s4nALus-WyVA4#RAZ>-PdADNrpQMp9Z30K zy2v&p8F{Vn^EY35?FA?i+$=vd)eyk>#dJe3RHQ4QmcQh@m@0JC|21O;`WhJ5G2d#1 zm8SGL6&Le*Vm7tf7V~&xoXT_sF4R6a#-+n9wOmF4Rv4WT_l5yV;dIEp=Z?Y_qHcG@ zp;9>_f68Bpo_O?Bs?-|RZuGkqN(HdbE<2_u^CqI`UBnrrryDnB?tpYWo8FNYfLnFw zoH`ADNTKtEw zMAV_1iN}x*Z54GW4~+B8!Qjm|79fx9{QBW8%Li|SZ02`1rfY@a2G93T0vjzm?U=!~ zw;;0D*xijed=Z#hpjXd9zPj+`fVKSe&V~S5;D;LmY{LN?IU|5puyrj+ECubX%~i2- z2K&bETk9Odx6D`)VYh~%DVba?S2+?sPsU?-KU(<5KW{&>DGM%AX;_vuxmbltZO+u| z^w7J~$>m2xo%}TMZKRX;-n;OrolyVw2LZ1R0bb35gFr>MkSUFA0jlWPpMqSIB{+^wJyO zwW?!Zi+K(B$cHd?z}c~}+%W$?$UhL92`d#Ph0pL?m_p)L=T!-f}j5R2dm^WRI4UV-n}a=de3fP10Ew@!IdT-rG%$Gy>sW_{vqf? z^QjaUL9<|k!r&v%0v_K_XrL#}eTW+bKfD^UH$u!!^7m_)kJs<6`Wm;^_VYJ4=BqamFA$cB@Spb2jZa3VR5)-A9;lZz0CA0?m+Zf_dJ`ZpY-RHLh5*~C4mE_fmh7Ec z_HGFN-t~(4XGwWztUT8DsXTyT@wTAW@t>$2t4t!|nTp@azJ_uPk05`zG7hI9w0lD# zqG#`3ZFRnzfR>hHwbRh!vF@Cz@ZJ2t0GDaFYvY8r!SQmGFf3qqxLn4gCE())$VQX2 z0Q2-t)PPfHw&2b*1lR_rZ3w6pyU0M?OsccGaTV6ICv7C=Ts6f^?z=2WQ#&vosd}{v znwBdWr3L16y8Q<7F(s@z@tc&tgzyt4!>@`w7jat^;3S!f^(Jy$ZBNBRXV*yMVDh(T zeO{KZd0rMX$LbwY=GYTt^(uK};_x)3$6S&B3TWA9i0>i$G(7B_hPkh&V%xXt1U-yU zoiol4-3L`HsXL%^f}hw&h-=VJ{4x372rMK+3NUi=tbfIhx)Z5e_X1-&4?eTe=J zF-%MoJ4p^%XsanxgLMKmr5610vu1L#)?GgT&f74tS{5q=!0W5$;8$hE40v178BFBl zj7w(dqPrCen9pWW7WP{e9e9)JR=8Y>?u-m(ZYw=7bvqAlG4E%=W%J2MMFUnq+JRYJIR~rPwD`u5dOGp^-h&X7MY8U5LhFdRjc9A2J*63Aqb9{$jfC zMwiJpQhZ}{aW31l|I14U9={>Y2J-%Vt`PBsd$!**nW*_l)@WQ_-n*l#mb2}>KF{ZD zn|99r+Mlqi?!Rqf@34zL67q$&=BDr1l=g6@tT&XU)Kp;Iw!z`WE%``gTTfuPzuV!M zOt0G&jqF%Ib?4@cN*P#wbNkKy{(5}dO};+<(!xNQQaUn;xOHUI(>09hN`QQPp8iK- z9q@b}K-u?#cO$eWgkDcnVU>a|?jh#->xJQsURh`a?#Y)K2eB^wRA|!v27}p#GlnR3 ze(eIX5vY1d*LGzFUV2u@jECUG6_pU0WbAJUjK~z6|HJWdWVN`rw_`y%WoxSV<@F+c z!WV`7jhl)VC7jEE6TS5hj#YNA_b0|{wU|^wlBjK{C8P}TWkn>B1CQ@YYfM(1fwgF1 z9?$GBJJ;=<+?yzc4O90$al_$f?yDIigNXwwykJMQ{1z%JDQ~!U&yXoGnulZQ(xFc_vIgYq~kp?NxXMom{q*Q}h-r~kTRM*XfaJSLhIQYCWjGxZN# zIi1p8ek^53DB`2<{E?hxa)gx#5MRMqn4y`_p%Bf974#iQOJ?-?>Iy_AjKK6PwM4iH zE2gGZyvizmYn8}u1*ANu_Cf4xxDDu82U|xpe7TVl>ukgtCkzDafG0gA;Ijbfo=bJD zwkY2W-9u<8fQcZ7SJK9u9vn!)-zIhF`z7Q_vTGojD1l!rHy}X!MjJK&`Sw}0_<#~N zfcPM*V*^}v>$W=rVWnvxws3rS5a|C&K=nGYh1iXy^y|bpwRmP@d^_BF{W|Y3pcAqN zC^@A8*5JlrZ)mK(a}%W6wyA8rw9*>9TmV540z+>ZgqL1pG4zS1*}xQR;hX@Q2$fbf z3eOc%QbSj>3zsch>uV9CjVDaod-@YSxBTTT`GuLhO+isIMlDw*HtZQIZ(rvPZm5n& zx7}XzN+Y@@wLa%6ts9F;F5so_06r#DgM&$G4E}{j*k~9nMuXm>H@bk)upy&yL!=ls z4&L>Ldn6Xh=Ii1b-g0;FGpdgq7BkC1x+f5Jo;@dTzM*9OaqWxt8f3R$XlIEX?P>OmIpwgW+u=E z%tcf?g*5`|!&z`mJd0EUT)!R*H4kDjlr5KB!xLQm8d_tUi$=*-k)F zD>2(dR6c|dl~;!-Zs`QFu~o^&wh)x7@6FJ*o)te8^CIxGHj-Y%XO{^AnIrW2C_>PS zA^5z-IkI{=vO7lFY(s$mP18^CdO3)~>MdYQVT3M>fQ6B}0B5kC-U#svHx9?dX4}@} z{BFgX9Ymnmv*g>rVPQ%6nThc*s`4HgAFgKl>zPSMo3ylpx|T#-Vh|aMV204^KwF@? zPESC`#!8BaRG zb%|Xts%qhEvmG3AoyLx#MrgYRrzoz+k^(a~K_kZ}{4Fp^On8P$?eB^gzaNd(=v3R3Z_t0EP{;KrL%lj=4IWPc|F@-vhg zV$(itAf^@pI~{Nja>ID&JV}XFvv6&iNY-2v*m#HZ55u02X9dGJggv2}Rk7CsdqV$W z;PBtwdgyNt7E6b}b{M?&{k>~=-wX(40?4W6}*mv*SqTX z-cahVa(9p2XGB!7L|H}0#k!Jg3auw=Dmzm`I~4<&~a*2(*yIJ)7UJws*? z+b#dsP4h#0?n3eN2^2p=>OPGvJ0P!5lY(lRQfs9JrpO$p;F^pi(TxSMZU3C#i2LVA z`|3#h=cp@cYoxAOm-5NjEToTfydSQ~V5gw_vih0~X-S53oimGSZ=K_8KU$K3uI*To z(Sm-s_840QHQi@XG)trlHy+;^uWqO%;f_z1)k5m!vl3;=i-}UmAg#^ljH3S?FV4Uv zugxf$`U+Z)jq6Sqd&#Il6x-Iu9-{afM7cIV@inyp_(C}*oIt806;*0HYOwn2)=5Gf z%8=`mYQ@W^Q|Lss&^psDj#4XD2drifkzmTHuTXN8Qfc#qt&XnVfzV287#SHTd31rW zM=PUA`UcKxRH;--OLnsF(y7bs;eExin1NQR)ha#2sUB*Qtjp4X|3Nf?Cx!18lXaaGIFx)#J_;DKy zcU!bwiS%WEE*RBs2!xR}`i-=n7NNL*ig38c8SZt-R5U@j;o6q>g2PR{(7kZ)bl27m zU7T75akf+C>-v*p1y`)Ham#EamY6#>7v={NRs~I?dWc}Lo=a8|)_7%Z%ce?<)Nc@g zl-L}Wu+I#fe3##43Kb*Kp13cV8oq9*cXvIlHCb7$fnyqM=3^g)!PQsvvb+Gt=-Q@_l<9Ty*l+#L&L#81fw1m9<|z+|FLkw zwSE6LvZk_hfpx3634vGb$}@&_W9ZuWv{y0k6Otu>lOLiwq|sV>3`+`B~xg9ag?p` z9y6FAj`*F9?D|A}w96UtC}A9@3igh-Gx^FQlG(U_*pV`Ewyy2>ZJxVpbMluEm0U^? zi3tEBXVhp6QVO7bHDJD)sEoV)-c_Vy;L5T!uzN#PF1Pd1^@nCVmLRs001#>Cx6}dI z-w^}EL&$z62xBNC+JuZ~D>9<3$cTebMzpILl>D>lGK~=L(KT#*zLhd+T!ehq9@!XAh_F*aH z`W4K018VoxY+<)W$*7plbPJ~S6%r+gMzTLKcMyAs6UaxJ8yP9=>4u$mOuM56q7Vc> zy7}on{KA5~J38H%=lfvxQq51LC*3^Pkk>?~2jv^2p{6}fHT28f*b!{HdPq&t;p|q7rv&O=<_9SP(xF(Yzaw*^n{aYqSMai!c1fifJ z)L+8wJ<;bs0}?%gt2NH#MpziVr@Y>j0a{5d-J2TW*;He&mxnVtPe!IxcoFMGVEf1% zD!qlXl87TZaB6R=Aq-Y}`G^HMN$7m!B%z9DRHN0tqsz5Z`Kw+|TAaR|yGBa7oPR#~ z?&&2;@%Lpv21Cb}MY`w#UCyMY=TV)qZoSS8eu&=GW@4Hj;Rgr(d>2pg^ZHbymp4I0 zjZAHCQ*bED7k1!u@CBH|v+N$0@L5IoCM8k+B&*F!=AGMYp(Dz2Z&`NQW{#V6XGqZoa zC&22}BGucNVYC=^I^A0AAW3OEh2?ivw>OGiz}|d{cmZ+hh9jepQw#URVDfGK(eB;@x3jjFLBa|8h%jS5SmTjvd|E2;pc0JmGe_Wu>Es_cms_4kiseb zvIsAIEh}eNSDkBCs5bUDv;T@+GDam=SWzC{XK1dyH3e{HKi$Sng)tCYMLLvh;Ht7g zz62`*A|pZF)mQJXp|sbi%k9F0%qmLzixyG730cIm*dj8NWD(^fK=b$EdE_&`;TdEI z_Z9Z(_wCrRPfxq1VHMW;Je=n|6LD>V2l^Y$ z8AD&Wht$MiR2G9#SxgCMZqZ~yj75{USn=Qw84IkT}u=rrIP1T$+ynV~`(9I9sKn0t5wEs7=b2Ku) zg*w{GYLZ0ooj=mY02R}uPDBlV=k1COPO$sXzBLga>BVonBqvhCD!y7;)9&ciB)%Hq zCewZ3O`nmB8p#+-#u+jg2Oq2plHnj3fN#qIG8`cN=u zAYKMXuUAyS$qqnV33vqg6@cw)!G(c%J)m*cHIowDAEG^x+JR;kQ}{pHBL;H^?wpfy zJw*gamO(etfEzX2z_@@Zpl+gZRy4Q#Yn$nj5D>i-eT<}NYWX6;A*NPTS2f>dGBXx8hBzu{i zVGpq%VP$N^#PMu*JyIX|Oqxu?@6vE)gEe#f&FS0I)CTaWZ4&v9KZG>jaiLtk2xyKu zlf!cs1lq}{IrEEHQt^z`4Xlraw~}e`eJbci8`C6>ZejvAiKdHbiUOi4!?yt(`ym9% zN$rGp0{-X14m?XIZ?aCpvBaRCt8lUHEpxw&S$>Pw+2USb(xIilNl{PGI%mS`i-Du% zKLFbX{8M)jIG(Ri)c>YbCZKaZlal%oMZQd_%mJs}139g*7+QR$KB-b&I^5#A!J<%U z0MivZz;u-gFdY`h!TnC{(h;Rp0|`g~&71%dkR!f?B_I!|V1x)X(6VKrO&iRTcAyLA zAiAQRw29V>lRn}|71Wd@%-z9jh6u7hL>4uq#t+jYkk1-TzAI6OTPM|x%@jzfY&4M= zFol4uf{KH6Ck1y}YCF9HI#dF_rdI_HZG#ORRhnZyZ^){V{rE>RjWy`@M2w`0v@gG< zB+W6uCuC8}F1{#J8+|TM#6+o<|B%+3wG0h0Huo-n4#N8~TC<*fn*561tdr4lwPN`+ zIU|RAW@;>kq8HjE7nyL8c9c%ElTm$9PsLQE6He0&I7vr8 zB&&n;)g5YcT|FV2AtuB$9^8W~h0O^xD-c?*{Uk9t2T2j2F(vxUQHW39(}dSG<7H?T z1=W3rJYR77jghmG>(r&uGSwdl!`%%rBbTkU#= zRvL7dvee6F4FktSXeqW41ob2OX(ENO&A(2tpr;(%UonbySc1a zmZ@|qN~SSt74Wm=qvV&BAReefP*HavsOLBbOYI9pAYijx&l&xCyUod7dQ8E(2#Oe^ zzD-pa7m*@Jzjz)$uUZu{YAKbHUY)8rYvAOtQ z)Ko~P%VFwYv|5d>E0W;S-A|L2f3ZL?5vo(Ms*>dY0S@Q-b8jD@MZXQ|r^Gf=iAA`orC)nIlpHs#Fpo{1H*$ zS;6!v0iVZopBBKGQo5_b`|EKQ`{3`8#nf0m!mL~(<)b_w*pPV^75teI=Mz!9g*H}zyS-`ey z_pa+bA(auX>EuDL?vxvW9qYx|!Dm#C-e<{q5Xxl8hbpYmcfg^d$t? z^};-C4fOdS(Dw+DCGJ8sNm&pTJ#f}#G`gba$*mO|;WD4l>s8s~ehB1cPdw~jQax%v zBJIkxByLF|&0Rqn`1Ixz0=Pz&1!^uMT{O7PpLkgCFWFU(3icz-ZMvX-x9@G$ME&Bd z9YWB;{Gtvz&CAD4iS_wtxe!pRmHJ>R-{*hy(b)L@u__3J9*}Jq3-yG}l#FmXV(XHe z#-KGj-44B0#XS6Ib!j>ouPzjg)d^d?#|v$GnEEdHjNDBWiR;ijw8=#1x%1?F#h8o+ zm5+5D44&jpCJ(s}>kpy%iw0ge@@C-zUT|RPQa&bh9ZUvK3P}$9;xo}iM0-lTIXB9! zwvMXUT1!AaL&@Z{JY|E?-chYyr@39OcUi1}+0zt&GteX zYW-F`U)Viquk?drTJ5)b3!QV9EO~>5+ zkdt!+hqrdSbJlYj%{K@7TnU$MpvRqZ>9W1K2SWCVvD84wAp5COM_IS8xuRlKG)#aR_K^s>}<@j!woU#8^SD(=nvvl>ap78QMua}a!VqC~? zu=~;eZPa(EyTOPg+U3)66Xc+q&;W5Z5N>1Krazrp3LdZ>W)4e**`@aFWWX6I{b`|j zj#Q0Z>PW~#>RhQBo4Ok~6BaWVaQgZ~e1gHFk6apsvLEOgm@RPBzc!_{pReUI%a2OO z?c+}}9vhERc4d6C4%v z73hxh1t=Hh%bvZjt@88V8H3X*J+akkV06K*Y#^BJ3bdY?vdfiniUNP0PI|qGq|ZxG z@BEm2i`0T=3<7I9A;$RRPtGK?1RO?eAo6#fi+UCEY>$cGhohea0m-Plq({3P5J;XNHmk|w-CqDsqHvj5BE5O zm6(g}14c=%M6trVoT2*a_A}aQHJh#ty^1*XwQ4mLW{#tFD@<;Va~oC64_3<5S()18 zMCCLp{g=M0QML(JX8E615v<@VaJyu#wr5(P>>C)0r zF;Q4d9JaMlSFCf)y;cJMA%SfpKyOEuO8(PA=LIV&8LyzlE03W>;W9d|xwiK=pkqjy zdV2k%ak;^1wz>?8LT_+=Q_UTrkgc$guWzxtx^p@Ez;xcSwyLi@rtDhqZ+&;RFXxUr zG~sn~{h}lu1Jp{3dt`-;ExV>C-1<|orLfJvC=m!(7DB6rNTZMGPYG>jwAB$_ff}ve zLyL9{GSm#ZTI>(i;t~-Yp@5^Xt9x)R-(k(_uuCT{>k{e=uw)y6&-F#n8#C~_#JyQ9 z#Z)Q-mtOQFx=XrXOyR)ga);50L#&r0FJ)ywsY)E5&oxAHTK^odX5b`yLS(@VjVscug1gOFxIIp&7@Rjk7fB119!2K13#(( z)f2EN-<6x$k7Auv&o?t!80&zj0QCP(vHvLQKjYE#;iw=-K3FlEHGMIUOdncIp0Y3X zd`^FaIf?^=GAcA|1_qpTo;`U=urKL*J}01aacofTEG(23gRdxhym(#h#3Y%=!SQ0MW<~jCQ?(kuw^5+_U`EPJOHS;x?sBDc8fje%4dpCL5p^ zWsK$fb)rOWe#)Qrr?rmrDYl$gkp`uMkuFB&N$_b_v$eaEpK zom-AoBKhQT0dF21DLyQqYmMsTs6Y%@OC!TQEJ`>AIYt|g?O44Ytk~PrJd|}ry?`Q( zaCuv=e=zIQ%4tR+Q+wjYNM<-WTrVg5rP+eFJLc3d;2TEHg>$|F2tCHjN&5EG`ixy; zFlcR7omtDUCPOgh4%lq*N^fi^#i_J9HTcG;Wpu1A;q->=TmG}tFs4=CdQD8 zPAu9M{im8Cesg;Qy#1AUg4TbkEx2#GGo7)0Tat`q4+M11McrXy5f721Bj>cksJ*#wS@U~5K#CAR!1y;3_K&erZ|E4u+l?;V? zv(s!Qzo<~kY0!@}^*#E3fqsk56mU@P_b!~28hPEw}_ArC{nIRsoysmwJ*Oi@)t=<2&xAfgWBo(ymOSIA) zaJm9k6?KrL_R=Z~JhG_izmd@jqtjw@8x_=tDC#y+!8)w}pSbUUZsWMt-U@8P7A(qQ zQHe%?BnT1!8`!{JM2Vy*Q4%FemMl>X7S$|SE|TrIJB}TJSa& zjRdhDXOujdcu8D9rfq_d`|Lc?M42xUO%U)eymsNo zPhlDs1idv|t$|<6&I>d6$4}Y#IM2=CPXXJ|7vQ6N13c~CtCW-|M8@wdV3Lx}jx_p( z`4>!1;I={sUT)0KO{5ys@^FD{_JT@pG!i2;F8g%NqcX%bH;^pQ>~)`Pc>F5{T=MA- zx5AJI50H%HwCY}oFnodd->hJy2mt4^XMvbQ%d&AH$CyB(!AL*<0tLsoj3)NKAsX;^ zi77yVvf>_K7=Gp?!*KQ){La&5HXm!V%;0xt1kUE#Yh|Uq?0)i4L2+EXonKzca|?25 zrKyL)=D!UM_Mi>;grgcQt|EW8?s&cvZ$w&-EJqH(CU^9x2Q?;BTDqSimplpTYk*!?R_|XB^W~ z;1PO1=%`)cC;j_-Xd6&QvY3oEtHw!^%;Q74Qv}y$yF+zZa;IpM1?rF( z`4sY^<}m?_6!-Pscgnz$F#hr{&*e?4Q!JT5@s#yno|_->&l|S*XwgYI_at?$;8K}8 z4&P1r@MZL^i{E`1y?g7DcW=GSyO&ipHC9wMHCE+}z*sx9E*P z)s12yv;vb3IhV^Y?AqHfEa@3KltI^UVBzgo7bM|P@oUsO6 z&VZE>Sx3a{jcP2bMZMmLgT=2ddL@w02xfsc0CD->O=Xo%o_AK3mBk!9?}$Olo}W99 zKS^yuC2Y*2-9~K1e3+GJI>XBqpu9UVP*{1kXi1!bi5Vx{V^fFei;VEp_@+WC9Esp^>HRR|wA$&0HuI(^U*_W?RRJNGVr5BU)C)=K2}Ots7q z*FD8~0*)bC0$g~m{Ty0K1W5$bG7@4%kbDU{OIb>vdteLtBCrJ`KG=dwuSuV;3btOA z&mV)w*o8=0J^?hRE(m%IQ07yhlzRYWcr2PPqhV(5#WMoF9B}gx1`AmE5+oCwA%{@m z@|)t#v+|yJTT3q_-%PeG$@x0)?vVvIK&2>j2iA!$_kuEN=NPyhE+eqGa!mIDqfPPYm%A}H z2U_BF&=Nl-4CF>^5?oi3uY+2_>rL1sXn#ESJCdVc0BE+O_Lpf4EzgE08d}I`FO;>}s=;+h_(q_?H} z!R%DK#uH{G&`=H)7Pw9C;DDN3-KjdvKs%u**2F|Lzm=Dx-KkV}ROYN@_6k;Hsob1w zH!&1mx%$RkuXe9$F9#ZdXqRN0WFVMh*MDi}jpLO#1(IaN4&`v|_`3TCwy$jFx#qE{ z!57w!*P3yIWQXl=HK5KmK%LPdb)wPb-=%3e^=7B%P5C0~M5FZb?`FaMPC%Vb+4E*r zz7%x;Zmh+bl%niwK+!HBodCJee0=FvVdxCf2a#tR#BxPrK(r*rJ5=2Qt_%i1qe>Y6 zQ;GB>lRXgyQX|4k97VGxR?*eY@q`L#3421KLAHrToJx*d*^j6}kc_E74RZ~k#^AxN z{XAFIwRZ4@b*uB#Fw1t)SfpuBwS#6PD_pTUKIa7d^EN=<%?OECgX?YR`eO)*cau|i z6MZ#6iWBuwvZ0h3+*g#n^Sym>{0;XTCCzMhh(^g|Ix30!&HntXi-qWgW0l~O!yLHngtP%zn6~5erbPpm z$jR7tDl2V(PR6zqS#bZuIvG=SE!RDJ^ya4yHNfLdGlv>Z1c$B}TYg|T5*#`_w*265 zgix<~<LJM^&HEpl?m4igQ2@peRLc3(%ITiYE4%$wV@HOr6(p7dyw30K+&NIL*NxOQ zZy8K*K$oWoim^7YzN&rVj)|DBZGF0Z&shBE=-oS7Y+f&KvU+T)Lo$?weg3xbWc}K9 zzfsn$szWve+Sk=b2kO0nXn>ZTHp!-lmQcW6z3S@T)}1RG1%ghj+=ILZF>)8>!`iTH zp6U(w&re4Zk%Zu!A^J{Wf^P=LPNvgz{S4lGqH4l6Pw2u@f&~L?$I~$P=`6@z1@oWE zR!z{hg@i4x9|&FA|E{z?NGWtQR?h7~S7?@Uh(;`_`r<#z2ZDwr*^?yK`%|zjExz^6LP8 zj0Rq0_aP9aM(fg>hY}oI6G_rWF}>Ekwl;|1)bio z*Wb1}S-)-`LjKIUhG>7i*AE~hIcES&-mArPI&`qKbaPi4__7t1NQNej6@U$J^>8+)BYCw2uKzI^QNK*hX z;&FQC#ds0{o~9t4L{RaaA0AI{H36Y})mO50>AjEbg~ul%eOuDq+q(SaeOsF0k z^}eBwTh4y`rdRJB%G~l#4<7vd6_NC=hc|#@w0YOVa1|*idkEp_V?{hQUWBJi##RK> zdjL%DKrBqz-pkkK{gIS$6rl7TgwZ<)MpLxyy<$}tV+jAh#!x7oePnaP#(`Q1^ezI= zS9DIcrq{K2fK=?=&xkBd0UIHkTGQ@VD>~!JwLLNDdQ5_jNN!lMxo*Yb(Ws|xDAsaC zXArOGKeRF?+jZ!$Y4JG#Bk1wYNCnW`45GsV^eS4f>52LpqMGj4Y0;rdR@o$ZT$VuB zmbS#|t{6ws6`kt~AU!5|w#U~~IScHM2>aNm`6`1qPzH^h0x!tp?3h6=A@Q+$oXu`4D> zn$*1b(=I0?>#A8-+1!8NB#u`O?*$kdnfn7dOeK*1*;X7oss|YI5!MVVINw#KLjSb{ zJ{duAzMEC1=+J*%0y)%WkuzMe;lW)!dselEmFW5hcklS*MD%gJezd-QByM)rjW)E8 zRx5=0x*yy(T-Ltv$OGfofB(MW!MlHO*MToyS>2X>Xbm{VTC)!UO??YMPc=Y~fqadH zvT{3U=h(t_ZU*gKk*Y|+c5ckKa~idCb=x~Y;#F_e{_}&{xjLP1XMfu}S@a04{pW{n z=S%4vsG$ooGS+<6Bb!?`^;Yn3aVp%2&)>4XBR$y}^mI=3duyWs*wh-_%9KR`*>W57 z?#RabHr3#(#&2C87cCZ6P;`rAGZ`(K#gQ6qjQ7?!D2lZC@EOq5fC&_*na%xyASy@p zmb7@f46|SnY%t%_Rw52s+DpVwV4OaKb0;LYYaVx;9xt@_>~HcKm;~Wl^ZN?Nd?X6;2q^yo4J37u#GF{5f$&HJ`74xsV?cl4 z3)T9t8VH})K>mtE=NQyL_)^9HUrWy;P5ZvFuVe3;CWWC%lgOt=_VgCj_#;IPWV)or zZyrpV3er=pTQl9U{?2(d9^W;3*Y;+M$0wRB9$NsYAWO7($>`6lZGc+5KUxN-QB8KU zWG)Lj zM{0s$t)Ux|{F}*z(b+1IU(S3SF=tUUgg!_#0LeftkPH<0O8lyC-E{5OrYdW)-@5TS zaQv3&tZZ3cvwByn&C{{1zj1YIL}Q7&9{T(7&1=5??iU|?7ahO3`H@4b8yq7ae=hsU zvp1%LT^sk`n(qb9llMajf%oP4bpq7W1&KX@*D`>LwUF4g$V;ad61sMVsLOCrgsjk1 ze0c_XKZZe;Fm$ymNfkyeMjAp-I(=w!=e+M15IM2a$k_`+kxl_kMd;uMa*Kr~6Ct%# z&_-f24073=K~6%=xB_DyNyvK>v<6K42!ac_h#@b(*DH&WijW+Gp$?%aD>f8dG}ess z4Cx z03DQh&_oT-5DFFn4Hf~Z5!jv)aX2xZIF=w2Zir_$WE3}I6gOlP_cKHi!@ye#xI2yF zoT@W0bRUec4Qx0h4Xe_B^Z9XTj4ctOlX)pxiOWALwDj!c>-k29?TZ`+Crfr+RYn1Z z-QTj9AGA4o+eN|^1*7^P`TD`uUA^>CtULURJH9-fRvelLv=*}h%{#a5>)u{6@8$(- z!Mp=nUOzEQ{DS@+VWembBR>mLIzY-gl)@BJdO*r5`WGODgDFTFM~Pn$L&z#Dt*ktW zR#u*XD=S}?js#w&ufJ$z<;z*=2pxDi3vLw!Sm*<6LE;zXD{mNIecebnG768w}H$GY*AVo+;N|55N)z(5e%Kp)%B`f)!Zhti52V?(Ut0} z?B6OAq`Ni)XP*EqR}t+1*&B+ZCN~u=KK!+ego*wa;JD+@V~4eu<_WiCNuQebzW~P@ zWA#7J#tzfkOA85A`4PuO3Tsx0Rk5)Hy@8IpumIF_xCY$lh_=VeJE}EHWnVI!(#?`; z!w(n$okUaaO|@F<-O=N(&1~rkFrvb7qE#}fCZl8)C4YUySK}2KvkhNvw=kkzbo)*b zxVL#V)btzY{!DBm9-c=)#%#enob13IPfEwU0X*;|eKV-}KJbUfUwZwe0s@}QO2_EH zlUZ={!;Xd!+x)$|`v-P(dds?Z4-D_l=pUEM>O+B4nXCrt{E?*Bg!e5!x-L<@=7y1h z>nBq6>#rSXT$6UY8pj&D*VkD+&10a|VxYt_DDf!v$sz(yW=#FdgZ=4Xe}6Dd!Zn&d z&G;~(t}ZIq;5CnRd82srQLiLfyk5HNnAd_^zEP+YXd>u_c77lDE9#$1#zw$fx@sQF zdZUkKi*KMU-zZi*|AHk$VAT8cf%AY^(gOlS$dUf3Hh+66BpFziaaFWb1ZusKxxB5a z)5zr)t9JAarkdQTsM|mR*x)411?#)QjVl|RY9Q%}v_@@D#|BewR#aq%?len^C_Bm& zdr&t)Z)Hj4sbnk=msN=pRFRhihEo-jqp~&RPDI@drAN>z-UOhrO5Bb$<|9)9`w2gG zI#?B~5`YGGGNWOFH-)FZ2E>C5X!b<(2CogbJyv2A2$FqEP~u5_EerBT<4C%<)lGIqQZ4u@-XsXQ_td!D zGTGsOEj5<*vL+K}*Wg6AAPFXCg*%aABnu8KV9o7z-i_mqnts@yG!oYk+h{lFE8v2p z+d)bUq{t}6UPwuR6qN=|M>${$hR-dVdyCvd*J0ND+M1^^b?(LD?ieqgg5fwA*sp`W zpFvaUIGi-CTr{C>EIH^GSBCj%(c-e$oIJ^px6q>1X|*~9l3`fZNHTDlF3a!+(kNPZ zOva|L32HsH0yAO~X2-k$)p4u=YsdPqVQdYy3EPfMV~4S0_z=SSo{=5dRoTXCu5Y1pQ@=-_*y!14UO8?XC(><(Hm;&ttUh#f&&Kh#>gu-fjeCwBGKQzN_`_KIT>P9; z2;NkPDfj*#IDEqVQJ#Rz*7!dwUnUINK>w&kM3OJyuS+Ep<%OeKINA%x;(g!rt~ z_l>s2*P$ivFMc2SdQB=-^C0|qH(8sk4Z^crLjwFfo~*4+5-Z{71sx_3A1md(@I*~2 zkqF|osZ=fg3cQ)y06*V_xgUgQMVupEr~eIT>p;N**PkGMM0|n%7jS(V#eSL~ zzC)a$|AZwA(eN-W41L69({Syk+F#X@&RS<}v~1QqL)>;UI?LpjlIMee;_>r&cX3s! z_11o&mNeyao6BaiF#l;LI-6w*OUf6SEC%DkV8J%K4T%_kxIDbjp|b(`G!bVQ!C28g zQnlj7^~u!a%_}+%R>-W#vpTP@YKf1e%l2+_H^f7NY-M?YT;+2MM!Q`}Zhc_Wmd|FJ z`~lH#@p)vU>bd(i)+8G_!Ir1RYs8-sEuKQO_ynL;2mLRYv#{cvHo^7Ff`!E_ z^sLFGP_x<$aqDpftv4^IB(w4bL<7M@&t^d$jhf9Cb7}4Ei~Ob+ESg^^UWpD)$^Cgw zHksr(PkGp*>-biMqaSs9e{Cys`*UxIswxsMdo6BI<_VxpzfJ!Ml=+!Ld!8fCq4s^Y zc#Ui5`Z;t>6FDbO!sIgQ3oedS_jAkmneiVCOAuvHCiDdBPPO zOozymP3u~{PMHy9o6@Bijk3fwr}T1pcFSaJy}}$jiPs>Frk2uPh-(bWYZR`mj|8N(r7d)d5LH=Byo$t3V|}aE-}>q z`YO#z4y&(>_yQIJ~xo4mTT#!qc9}8jK$cG>}8*mGP85Q1KTHOxxJj5rQ5S+~} z$)FW;R4%GtdD-IL9MsN8CW%*RocCy&OEyrQxqodT7{#S&ULL1$j$jq1)#gz+V%5~E z#NS1kC2-nkIC-3A48Vd`OvKwpmLdp>Gdz;}Ax0LZDCWT`fwqQxAWrI7IQas;2IDa= zekagHs(=_3F}Tf+bJRGW+L^L1+t}fBifVA_{VOFzbo%Y!*x4HWEA{ zg=Vwxq0>wfNYecm8G^_^rzlAlsI(-~eyw@0_|hry1vQXp>8tv&L{>fIKs7D;W z#)$Tu$ypUxv&k3HP1WXLePqW`Po-Zaj|bZlVcn!^#0#40OfHMNl9d4-T8wy;)vpQv zWcF6%o_AHcrQe9|C~Vb&M8(WN2kOjQ_9}iCU~U~>can9?nji)AS;PKuz#^_v#@^1xCtnzHh)e{J+SRj(diUVP2GD%?I)b+wcYF2cdTjlP}`?I zvn>IN{k*2uZM|nh!_Gh;lAk~~L+f5nx?GYrgHN2mA`1W`VN1>=lFCo4dC62Sstl@0TpRf#%Gn-1imDY?GL#o%gTb`03p(vds|; z6?#6MV=0^=|l^xXwV^7E)Vg@n8>Iet+wacyad z=F2hv-QfEQJuwz8tZavh*1FSt*{pnk1_Z)TkW56vGcwSi3aMH?$fY{(p;mAL2p1NU z+w%^#b*Bun8+|?8KhPE_vr~-GWa1Tub6G^I$w>dKSe6T~){ZuL8BU-%iyn3|G%Yap za&KM(LfQe=ocEzU9&;`3*E2sk}dD8 zRt{sIC>Ph=L)w$!)I6&Zzh{9C6E-_FO?piZsyJMF40vA?jUJ`Z;y>7yl;m*@D3jh@vJ4 zEZRU(mdgcMe)mbn3T63iC%v;J5BQ=iw<1{%^f>SA#Xj)G@GTduJaEP)Zl5^uHTe0& zH}196j5N25B&=%9a7)W*!b)Aa>C?N?=e|ApF!=mV%ha-p*z#=+t=r*o3iUfkOT}DR zw9sBb!?XB0Ou^hhsB@SSoHZDLNU}oBTv({TpD*g~2B2SnJXRpLin$i)@36g=wh^_k zKRO!f+tRa&5n)Uc$*3!jIcqxl;*L+aD`U15L*b;~OkHTZvZp-v#}ezk;jmC*xN)#9 zl+=v5e^^5)z^{;Fh`j2EshmGW*QNKiDHrezp?x}e3vP(&!+ z2#5Iqr7JNT_~fxLkXb-to^%!%qrJ!&&lYc;rky3mKv1~cCX5Rh{|TaE#lF6d>`;|K zc3I6%nYLFphs&Fzc3RO@i%Vq4zxMAPE)NY(_v8OwWa3;)YI#c66GI97`z6MPkr4BG zH`anJhc$Q>YXBt!z1HcP08cLI-hi-bN2R|^o}z}mpe8_&EpSCG>etDVBWiM9)t(@E z)ortSRGzqxxS8P0ZoAzJE`CJelE>k2gYNAS@?OFq0&HuNf%qKxFiA@uyY4pOB=N5- z2cyAoES}2|#dG2fsJ;>uYrOCZ(P(60FcWb89ij!sP#_r@?g&2rBR~qE#q-W}>uR75 zXU5BkNop?|n?~#Kh_ffN5*>J!IE!ULFZN@sy%J*L0|%ZbeSP~zNA~o1y}kQZj!gG> zud`NlR3$sYlC7!}977^;ZqsL{TN|^VyYh<9PPa7f{@m^j$3_CRGtd3m{GHm-|LV2H~FXiwBJv+NVKI`%-29M6L6FmsLBu$ z_`;5}G;I)nLbxIPm!sTLz+am7?k9qH&>q3W7yD{t`Y zF~7y;u$gtc4OpNSar@@-uDT#YP-V#;1;eshbj>vLbP>Z zh2sTzg)h+(O0``$t_w`%(x`4i(qHz!;4j>#FXGZ``x(V5r4wmaS&|R)-@u zqov&gdj>*8vU938#ETL|Yc9nmDbncrp<&kSz*ktTwY9$?2!HDuz(;M^lK=p_5Fhyf zA9Zl3pc3&0Mq`0Op?`+uyN3^CrgCTVrmoKQX)U~$5~`^8n#{q5P-VTB zCrraPZAiq|-843QGd$kBZfIAhC(?gqdT1v+ZUM9$#=b$=$lX{MmOPQsLC<{lOjg(F zc)H>RRG>5}oP{`h0&x5cEL{>5FNtQ|KLiWaUz&qZ6coZ1>epXYS;D)l*4&>gHQJGD@p~Iq zH+xuw+Cx}AVP$SX1#@5mrW_ZDXNm8EvI@kD7-SG@ z9sFK2a7eu)v21wF728sGe%Ybuq~vod7(VwXeGetme*t}vc-+8)Iv>v(u>Zr}m%ukw zrElMxn>}eMvK57L*`#1;)3Q`nTe?Fx+R_S)&@@TgK$^rPrL7`_3Rsa(s(?E)RnZZ2 z#uW#~87UMysC5AbL}j#!pyLMWh@dFnbI!RpNlRgHX8ixZ`F**MP0x1U^S;l!oEwuW zHA(segZxWd;UAH>et2`xAl29X1`QsNh!gkRA2sU~Ce62aU#}&9s+=&+lqd}CH#AeR zf z`t?1-Fd={^&WCa21+g_EHU#w&j-8Llw8#T8dZkk|bi+!Dw|c!5H4nHyh~C3{|2hO` zd&Xr};Nw0%hQ0$rP$^+gPv|$S-wql5v-&?GV?b{SM=ylvjRRAHxO~PH`Ge*Unm<@C z;pOuYvtUT6xM}FZVN-_NMns;Ek(wTGc;w+LzZ&(1^ZtN{G;wJ{s zL6A^%9&Smv#Z+ecCNT>*Nsu%ph;b9gy&a12^*v+4DB$gh7KY@RL0sLyFv%d{(4-H$ zW3qEf+SG+p7k9_Bf@xp(gy}C{vr|UOf|LU?Qq#NOof%~_cBf5E`*V6?#_)_gGLB}> z%xud%owY9ORCZqWYdN_&PtMGm`TQ(#*2>%~bAOv>%ya#ZV^iL%VTAGTBY#jAERpb3 z{!=();zQ6}@J+!Fg+h-QS7-@fUEw_!!|YMBx1WdB*?Z5!_eHt?5o{$WwgD$)l;ji4 z(E#@ZaEhRGOX-%f$pLJn*i^RZ+Jpes5zNg7j>wqTLNI^Z{B6H#3g8Zk`+$dgz*&Op z9=h(K1tWUEO#}-QfTsf3L9rWnRYtinjQ?(!=l)Ze&35z0<`d=<6{!_D6|*bmR+uU5 z71viZRIDJd46qEbi~CS|+u1oTzD(+ImGxV7-AW)jTA% zjocW`X{j9%sn*JRMshQ;M*53qUe`ZXYV(|CK%&%EaGK~9Qd{7nqno6*GGvX4Ge);a zZFR`FhMN-ogw)n@{rV?JZ56^M!%+2JWip@1(Yo>o;(i)Q->y1Cyn8BsUUk z1ddngpxk9Dx721lvo_tqfVicxG*N$T;JfwHeQ>&3I;Q#xrX(o>`mm%-Ru= z(c)yO&3N9ziChwA!cQVvd7PcIa30RZdGS-p`7oA-mWOlGS2ITJXgRrf%%pM-K;()r zR>f6g&P#hX{I+5B61-ZmGJ?xSs{$i7t_~{-Ak79DC0qk-iCiuuH$ZMJ-O+(o71cz< zj|*!WaId_F7|_|ojYI3oKrfk#qx+j7!Hu;d_BCT4BE!Nhme$ThuNtFdwifz%1NM|) z+)iz9Tu`4%$^-eoV%TAkgN~Xh3teqwa$J(7BHg7HvleQv%x)d-_0W-8tg=$pM2uI{ zu{9pmwa7v>b<$nD)K59oE0q`_@mNb4^isJt$rpBN6XU{5qrwZRW+`5Y z$K2Amyh{z_I4D1ENlPb2YUr*^rk64m)PU^hrna!$khx{LJ80C9NT`+~muOXkwPx(^ zqdh0}wH()sGqwx!qf@fWMY*k@D}x$`T0~f@r}r_d7o#6fb2rqRqo}kRDxrb$P%C9= zDBp7QIi*M@_A|eDXf((%YNNg;k?Rgv!*r~Y)_BpoL6Yu+70g3R0$wuH7$F%@)5R{i z@>rmWneK0q_K&C4rHcBB%$#4ZCZA_@sT4VKE&t503BjyWQ%3{ylC8}6Ga7nMsD%P&0 z`NHaxm7ZgEskSgVWTk^v{|m<`tKv?{GePNchS)=%DynI{vr9aasvbe>rA@Lye!`Gh z?i$r`)H7zjV_#(iNnc7ZxvrDz!D&?w0de(MQT|>`IJAE4W(%6)Ays&T4F7A5H!`q`n zII@PkLkP`>OP0q4-_^*gd#-MA-Kv|+efPT^^j(3yo87Wr!Dp~w)&x%?*@tnQ{O*jr z3zPe{kO*SB{ls@i}rLu(21VS?mwFU=B1KnFRmyT;O`vl@EB zGb=++nyxV&WTKApSo1IXQ9cc7>AOqDj4eb1D}5z<26fCt$soMyZoZ zXIXUqJKujb0_5{8o6DfH1zaY2WjHO1=tvI6L{!lt%#@;+j?r|CjKYdyX?_&-R2e;o zvaxOsJ>!^+BE06KKbO|HOirYI(wl|#`H)5K&ET%3dt^XbFxmT zjLboww6kaxWc%ggF7_TGM>-RkrX?5`0~U7GDu?bUYnF#z5#(n}v#F4sL*)_u$^MzN zogdIMQ_?h*azrE(nQ71{m-fi$9Q-cCx?;M2Dz%wun@?@X#5}VlgK9u_j+bm@>j*!k z(hTtt(JvPWT9ryU$fnu^`Afs^LTFCpXJNL4o)87NGo4ymOxeqjI3w2P(q7Oi=BYGl z4PljVkdAg9ezF4G7139wOHqiluH2Q;`QR#MU#j$)Mwu(1J?4!x+AE>HBC~OlFN>%h z-FGdck(fbOrBaKF0}+x*qnBwfM4v|PUjT5gVzmns`BD2F? zEoPgY7MEo)MrXRJonm&a)l2p%skVDXN2r`imq(mouW;BcW``*4h&3*3DtcYD9*a#R z>eiV(HnG-ewRuEewN1>+DG_t+7Ms&+n<9E`Hqlm7VY6CoR?)#mMXSwg@z~wOJi3R~ z<}=$J-uQ?#v%_BDv6D^AVvP$Dv60#7g&2>$Qmi!B*c}aGo!wV0dTT3u4x8w4VPm_q z3R+>Q&sKvwomMd5aoRlIcrnK(R@%(IT93^udTcPm?!z7yZ=C3@F@so(*^M^2rKZ;5 zv%4YESzBZCV5QgQqXN95+v9>eh`NyOaJcHkYOpKXYusjwPqaHlA0Zo>;T9O_#9ppS zvBF+O1+$HOwt63KwlB8Di;|h6ykd>n*&teK;ZvqJ;m-+{J!aVAv3m)nHgkn7Vk zViiWb_8YL==Yl~?h)HG<9;jh^k?65hn>|p>=7}$|Rn`+RQi zWVl86GN1~Ms6Cx~dt{Zp)6|(Wgym$U62!`mUu|!SY35a zhs$j3%AT1~g~)X0@B+U7o50(o4X~g;G%&4foQp zpgBOq^jrmds$To06}e=^0YdX47i=QbAeS7dY?SV(BSUDeQ7S>F%ng>Lml? z(1Z|98)U!5rr6Gbe6%-){^UzyxE7wIO-o0@Q=_uTY6HuVt~@4A9)peamDli3EUFq7 zh*0mZ1!8Th?i$L>CG@gDyWs>0lXQAz&C{}$@Mub88vzAc)BKMWpXZdyM#(e!X<)Tj zV$h#7_~qM&8T*t6QkFy%^omC%RYI{{+L8tsRSM`FIC)X&?ey6eiA+ku?9Ok<(oP(e zH+Nd_ASgHL*!#AE#uDo0@{m}IwHO)cX~(4}rEnz+aq@-e6&Oe9hCipNlADMt+xQLZ z)sm{pjpr~-j0`KrVzO5;F^myr33x206v1e}=% z3fe-l%R#CA%lr3-_!1QbGesAaq`lxkUzCb#-`2_8s$Q%55s{Ul*o`a$ZKiHgVzNHD z1@2CfrIDiq42Nu1d`3@Wkg|14DX*uKiIe!*qf2xj-$Sxe-;aYCt+Urg$Rw-5&Z?xUVKQO z{(iat6L>Zcc)}N6oP;xT2jyS}3(>&&D_p#;?n4d92l~3a>TxusA0MhnZ4B+-Ydu*V zaz8S=(QLe7jqg%Ynz@mAk}It4=(#dq-PPkbT1s98>MU<*s?c6cxKWcop(w=0}{@$^B=G97| z*1g_kv!h6@{=Lj)f}=z&iJ*TI1M2rXe`-|Q?%uUcV|E~r0MH)(L$jyX_~HT@c%OaV zU*0WBa)Acf7Z_%C5eGs1y<3zQSOS46+tW*M;fM+Z;sKtB0Vf|&PdC9IfIw8h(B zOtZUJcN0vp^lYw4tX3Uz!SVqR1% z*~JAq@IKvk)2%&--rUtzHEC;ruel;Q?~6sO&wxZks(Q#78~7G8Z+(0Kf-gVn|fQps>?TV_YE5 z2jX=Y)SRF&lHfMz!iyF(vP`rpv`!2OM9W~a9akGoV%K;w01^~x?IsyMz$_??cQX)> zn6O_aap4FHTtXmr4+wkS1VfHxL!s{TkdVL=O9X~RY#PG=X+NSOc7MYJtbQO~c)JwR z(~EO)0eew{3m|$MFCdKMJ_C#3MMIqAg{zf(RIcMV0OD{j>=dzPR839(0cl>fy5)LHOfa?uI$d`(OZvAW`Qx!4?-& zNW{cYs9mtA{5_(uzk^CAw03$5w zaZfMgCK&yq1{v^E5DvDd7gpahTn7)-YjlBzN^B7rW^?gn{qHI?aW*uncX#ib>zv$( z$u&{2kf^ioDW?TToD%ddsm4XkCqVm0Vw7)Tiaov7ol3d;`*c;C)v8g@sEYw%7#B+L z?{Vk5sDTIkRG@!>A~t|TJr9DNgYC!fRG+$N3&!izPwRdamx4sy-RyxUe%drf1~$V2 zo?rlW5U7(uVW~a6gm3A4;V99pO9z+35RW^82WBu2atzJX9no{Hvf;d^p{M8K^0hY2 z*XXz9%o-o3$w*IENQn8pwlg@tvry()d22Q+qnD;^vRAO-pD;H4qkQ)H1y-ZTP@Z4Q zC53VBs$JtS^>bynbuxLIPJ@m?xr41Y)MCfojQ8!ya=T}5XoIbFu^&~(Q7McXE_r~R z&iaWWdVcz71HD4IAX7vlxA`3&Po;5Tvr6UV?d? z1#Zr1WR9Brh?886E1TqugQKEtojRz<122zR>#irA)0krneiiP7HFP{;n!?z{V}`Ddu1~A(FwD(KkBIILn}Iqbt<>!%8H6WBFbvVJPlRD8#_7Q zK-@@1E@^ajGcc)z1#!q~SyuP_qON;SK|$NlQDvS6O!ve2;W>jLHNij1Kq)v7QKblo zx=8d2#WObfd1B-f=ljrrU#>^iN?(M8lvU;s#W<|vs|>ppJ~pDWRM=Qs=PDGdDY02e z9xvDwq7bgp_3PLDy02RlQn@Y{GRt*J9P>%w?b4@-4Y@5vH^@s-g)FDrn z!srcjxNqsI^AUbl`l2;_YB4%ru^Yj4(Zo;c@iZB))>#H=N-mQa9$e?=;zM7vn2Pp} zT4f#SlxH!6*4D(nNP3x8J~uA|OS}FXqmgfP9x4^kt~v(A8#kNZJXXDq%hb7N*XQsV zhM>V>;$_6xl5?bkD4ZI_VAu2a*l(A*+Vvi<4vu9hiz19yn|aL}PO6{a#f%5@yRk z{*4PtCKy-Q!WP1r^N4S8rplKXf$vi0DMqA*o)M|ux}gkAmonhsKJ+vop`59nz9iVL z*MqIZM^ZzVZmgJ-X{_YvwB#QaoJn@2c@^@Ys*a!OQ~XW2I~w56 z5;hKsK%khlptzto>JsyMz!W`Wz|7bBay7N)zu0$Co3~cZpjkfZ#tzX3B2tp^VVutN&a*$DsmEAaT*{? zEK_xO0_n5+WUaE$F$=ozg6nuMofIMGObUOgk954>%Gk>QWvbQN*Wp=42uzX~(=$cj z8$N;@O7)4Oh64pfbB!Ve8vW;G34&1u7Fht%5V=rRVdP?^78w&Y;^g%1+LIy$6MdYF z7i4v;6_W##B(GJAXgj1+rv&AtLSdYl$#TKsrB|=3wDw<_-69tbu81wh`Vt$;_0jzB zT`%O~MHm$Z`kw@{GIgFiGRlG$L5GElTU_Y|j9pqv^r__GNH*(VoXI$PI8=hBdCe#B zEl34PiBnYNzO|TBjy?0Vq`G52D!PpQ+(M=t+@WN@XeSHaF{B+0FTMF?mGx9uKi18F z8I4-qKZjDpA^8<4SAj>L_(KRKO$QE5hK!I6m@v~Ioo1B+P>M_}tur_LF z!I=u2sXicqApWaz0UrK!rm#cbBU4cBm+$^9Bu7Tx-$J<$v^Hmw*sZ2xS&Nk-RmWHh zs)ahzsr0vxW;sMA5~LrtxDSBejNvrT6v1E6nqt=WneR}+2Wl*M6CqF%cVBXi@v+Aw zMWGxH<_Xpa)-YBuRx;Nz<-d>8pVEKLPm%e0)AV8dOQJv36kLT-E7BID{uMj+vv8&v zwSezoXkXMrveJA3l^s4uCK;t@e(ND|`jJ|bgjE81KbmZkU4%@84C{drhqkzlj-k%R z5@gVIfNUaekM-Pz#3xyH=gza`^b}R>CAN3kY+mw~(AOPo3AgU{sj-DCgvyc0Y(7zy724v)_#*d$P<9(E1m2dy zRgF?UZ#vKXq?N#(GjWx8Di14n!rc=t8!7i$G;^d8N&?p#hFa+km0VJ??}DQa(1-a7 z;w6Pp+yp%NWC@WwRX?S!X&y#(Q@6iRSf(qF65d#@tgPH+es!?5wH30RGd6W1LYpYrj~>Wr=4!9DL2hyXyYeLD#L?(S{+zSKqA$>Qu3((^LSFgV!L149a(4J< zxJ&MpPBa4W=jexzx}QEZpE(gyc$%v1|C|t}DelDgSaMpb<$og6**y9Mu6dJ=Z_dKWdy$X-H{E{*?R)6E(KW-NyG9-ET2&Tif!A zOoC4W4Rv*u(Sn-HUp3298=AU0DMdyl45!yoTp|7}Z|27(Wp!f2#jw!xie*)Ipfuy3M(a z)$HsZT|@{UZV6WRP<0!u;E8yZQs{^36yx+&z;jCpcDy5fB;^)@cPASEFZV~B7$b5P zxGC{15)6)%gEH@myC{E~qv341oQnM_Uz$qY0xOA4&-;c-*Y zvGjqOB|jC*NkVjs$#Z$BoMYGYP?<|3{VPaka{~xdAiiYP;IBv7+XfbF}TVF7)BelCtHU&sGl# zJPzp12#SjAS8~-Z8Hm3I{A6KLmkWw7N`pX`jwq5YD(EXuq^72x6y=6r6Dzg7 zdM1C6{sV&ElaGF?QOfJ?ni{&>VyV*PxB@hN9WV86;osMHF`JFi&he@$b>8u;(pe(@ zTMVK(<6f_F?eO{iaxxu4|!_S|b4womyW zW2nuqpgy0JM#O16hdnEK&AESeBQUGR#jD??@3hwoQY{}d6y#mga(!G3>zrhMUMtY& zjqYmW_MCedvF3iYzsd~z^ub*9D>=xOl^l&3fMS{KW4<(;8WEeC^_@ruQ)>a-MyV$YJAJ`bW$4_Q0TF6Vf9{ z8!Q7Xt=$T~l49>(t_${75mBf)3STJKXQ{DjQlq^F5SJY$1qOxqb?6HRldEQ>?6sf7~3GCcG-H>=0 zek$x&6Djg$_#;=(wVzgpF_>OOj>3A4kM1fJGq^|UAFZ_6$l3(#*So?cnp@@tYexSc!n9(Gm3XO>&G8J9#*{k42M zr>dRR`;V-ykoO66^uv{6_PWPb)|#RJgTDRMugS+Qp~Z)>68)yr$kvx)<+i4xXN%*; zn4`?twMJz2!Bc#^zx|fbk}wlpFEypgrxLquDe3|p%UVgY42@GAOO;j+;$_ka!+mAL z2b(_eqaorKl^rwotdDjkHkH-CcWWOBKDwb+4;Mv97hO_o+)>w@LCriHR*$|`e0&j@ z(OFVz_&PaF;-+_2%?-HJx4tPp4BG%6{tjY_Wz^P5yc~o~JoB-48T-NBI1meSVt8lz z0Qp*x3`VFQ9JTD!`#J*b{n%t__>-{>#7aW^@H7TK&1K{ketp4+);2mGQvz z=;J_hg5f8giLQf%_Ap#^oufq(j*eQVa6O3Fp!hp^Wt%M5#=Gt0aFNdiPd8d&FfjH9 z1G6}Hf(YH-gFUZ^F;=MtC~Nco{m(&DB1MBZfi8C&t-XD8^4gp|7>_Y zcOD45+J}g)lG~tHs9>k_a9OYVmx1)ZG*139!Bo~!t6H+saVoa%Z~ee~8D!m$Fw5b| z0KFk}8KjFnF_P=woDrv?m1)$Vo^Jc8^WMfVnvTk`4a6ZxElo7G>%7y2Bh?w!8plu& zYp|11h(>U2_kRliw5L`C8+U%3|BUMn8VA;k2! z8yJo8{q-k0>-diNQ`hbq_DXD@BlB6#rq|WdRcN%^AeR60QGIXq?x3ErpVeJEI5kJ_ zQLFzXivD!kwrHS2=&KH=(Ro3VX&_k#n|Sb&uwznyQ`d3G$xn9O7AeZ+zR_2X5} zZ7i0p-X7$+ElTGpcO})^F~32~cE0`>JRW;@r04TGAj;i8 z;rDjKte$&gf9WxdjGa05mxJf=P?hl$J<<7mJ+iNN(#ez}l8BmJ}A=%2|Y z2lZDfmmB2iMW3sg&0JUqKt7(}ZQ-1z2g=0S%4^>&Dx(m;oyG)#WmkUeXG1oBL#N(P zo*grp@90>|EUQwL}%W!bZsM{^*w3 z;^0=Ck(aOim)}w{rlHU7VZ%h_HzA!Hg@xwtZW)H1rmLW1QS0`+J*v*XjX!pv>3 zUEVx3hD`eKGnL=}oiIHo7@Hkvce7kQ9{y8QJSMdYppUSyz;p4J=^s^oCo}0|>HTCVP0?Cc&y6~?G;P<3Y zba8GXd92q=2psUYND=WxQ_Fru!JE+|ea14Z7Gtkp_s4p3^;SOETQG_u<3}(inv?gn zSL+kS!;>Xdo+Q%pCQ^$zr{SweY0H$D;giJ_vQf$+XxF({m=7n^1xJ`=IsE#>w9oJF zv(fS}(bDO^e(all=XrMQd-m9IzW=hec+-CDj7qx)IW2?WdD%Eo3`?C7-h^Oe&}mFd zrqZa$7NF1R%T$6yOI<}n-X-voLMeuI?|QWUNSO0t18YJpnpOuK^bP%MjHu3sTwr!K zQ@HhGCvqBx?&0!wcU!O(!f`w}RqA~G0TB7^cc*DEpJx_D)=F`18~Op&!deicZbrx_ z_}RPm+f&#Zo9JEnkLqGqZ1JFqtE9k-Iks^TezSVpHpcnt5Z!iOUj_lv63wsOI+I!p zRZ@Hx^LZ8qH=eY*A_Ikse1ow|c|}dC)4DhcK#zm{TH}_mXwlx7OQ?OWhVA;L-)Z06 zQec>7*>fnfwo7{E+(vumtI>JnalTs$c!GLp1a+`AQQZq4=Pueh7>t@G*8D;6;8&4FVsm!&NLLl-pATCj3Xs_F(Tr}J3D}Kf6KxGqv*8zRsPjE^c7yNTRF3XaX~EkgMgY);?{@V)Ar!W71GcU2rh_=z z)6&!6@_{1e3O}iGNrc7?(55zG`WW3i-IK6i_ZY;XGf_@L zBeM-d5{-2=$Sm!hr-u94CYs(0ra~K`Brd!h?1&|fEFAYx)!u9@CnqtD+)fsWcUVwL za>3(_Yi@P)C2>o?X{?v~bSe6b`=>L7J`;qFgR^z2Hck-dpE3bwKdW5a#~|lVwi@w2?SaU*nTBqTti=TL@FR3>s<3y zH(`EXxvLO}liR79iEd5D-9rR#d$A;?oxQZqRy;R&kdf7?vI=z|6n<>^JT>i5XAm); zxh!ttXg3n*ORnbOTaQj)c>WvXAaIv8uV~{r8UhR@ak26W4_cO zfzi%-B0kFF;%7)3uuEGwCN}=;rUJvbXaDizG4dx4*iCl^5SmrhH~M?%@$5u?oalHtlpA7E3c!S0qe*YHPUVaM3rP2Vk*mJCopi zyUDR))8pgAGR#O-_>;W%fu=1=o1)YbEW_*@>}=RSZ;NDFBW^uAiISp3x=VgCEqD{z ze`j0ceoI&-q9xbo?*Cnl8IR!bwF&NJZR*+|>h)s}<_5+62-~X!*2L}B39*>Jy5WgC z2E^@bLlUL(-AX<;@nk?@G~+Y==pT*y=6;g{M!bVaAJd9&I1PDaLQ-%NLKro^+`QzlPdq7^q^~VzEoq>LNvRv3?^mde>1{RV#XCx|MH)1jO{WM zTey+`a7^S(VlWd${~X=+x$~PUbGFv9TFwH;rR?U8i`z%<>MY9&Jfg*9+wacIKfEU9 z_>t@ce=D209!9Opv3jikm9*C z+stRxqie$d2yEw~_@guMW2_gGh9#x9#ImMhWmQhFo&8oxOTFaS)A${;lRgmryX`S( zzhGOnSwDd04zP>toux3|7h(cM60vtOIq4TV-)tvirD#+73(xVimfqnE;*43quhttv z*~0Sbh`=VFzNp!WBytssd|Iv4Hb`HkKXjxbB zMSp=mwFYIR3rou2zzBIS{5OPd;18Ugd_V`NX0nV~Hm7#$l+wbLi;5=UBLqhL*6X*s z3U$E|5D3cLm|#TE7CHRV#n(dE6B=7-`au;I&gbMqJ3ho7JCIHE3lasNlMhx6#yBq? zF0CshO%i(G^7@9$tRT|R;fW6Z&vqL=*Fx8;mf%{Ex+yV~51nkt11XdV*N4OynfLPy zy;79auZA16EVbLTJ8dqNVQu{VKFpSjY^fjv6giY`1=1sykBkrFR^G zQIW{!saBL#^S^q^Qf?;RNYMAk_simLmGa0DUW%n#d#JD*4Ni27e)FI zIA2KBhkFy^P$t>8Y%6|D;{*$CRKt~^9=7}Cc2}z0o zLaO(JH5zF$OXQb$Ix0G1=hUz6MY}&G%xs>S8>X0-u4?aAjwg%u`8J@XYF{C%E`0l0 zajNT`GAa>QhR}{ICRe3)K2UGYWMD9a0eg3UFKq7Kif@+t+7}-5mojC0e>gqt)WY$g z(K22%xE>au2;o8I9SyV9qbkLXCM2-!KtAy{IB}`b?c?F6$%DEm!io<@Qw$lX0Qk9F9%4KCDUa72`T0eWIu(c~z0 zPFG+M>8pLjiLBNw*Z%2*$gj^9_gqj=SYg-~(vf-%VAM}(G~2jJwhDh#w=x{yra0)* zxF*Olq%>nulz|0zA`6*aDYAXpCa8%s6?CI+PO1JKoI4Bl?H`OA#xeMQ4_;#?r$F4& z0#iY)*Srp$*lV8N_<}i;UY3ed=fdCu8@4~S+nUt6`PXIGVGAs-cg#j7Ho?dU=JsYT zuFmGhU;jY|6B}d%UN%w|(tk*oltq`6lZ9KKl$2eUl#Pvxl#`qHt-#9tR?Wdd%E`|D zR$}AOCFNq}d?)efl5%kJl5(-LzLhxM>)GBJ9B+I!PPRA1`Nm*peYe5&hIlwRNx3+< z-b&n@Z(Oc-2G6@~*7qTK-}=8v_yjQZayj$gXXR@+#y_w);d53JQ@4eo+ zZ0|#G{Bx6y`@NQpla%A17i>Ii|BCMAK~2!JNr9<`+XYh z9B=T=%0I~aHWBvs5!t!kY_qZd<8u9T^dEuieWw3G;C_>go0s>$y7K(<<)4(iZ!Q06 zkoRrg?;f&qyj$XUpC>!-Kk-=KA^W>g4%T-P=X+NUws)P_Io=`ryHNk!;^6qFI~ytY zzbJ5UzWc+@{wCf(@wxsPeYeEJ`5s2jcmLm{e}h~+{}~q^uD7Xku=2cr-dnlfMd5jm z49~l2>@5Ev@4x7AyhZTc176m*A{!g)o7?XmzXj=S-2cdyH~jA1zsz~VZ>s&n`lSCO z%h>-r%ic2U|7ha)uO6QzbYUawXj_ax+796If*U3CWQMCigg-_eCz<#SFvQaP4TeD)KD z4*et8SDvm&B>4~I#|H=8|Myds^Z%DptUO%2-2W*X>swN?aq#?~%AI7v8>!9D2TXc9 z+zy*jlRZ-YNR_jwJ13)r7)DD#gBwcefx^Z}_>vdb$7uI`Q>B5{M8904&}I$oM^uTh zlCrWcbOZKXt8S_d{TYt@p3q%3H<{SA!}Chn^F|BrdE4FU?wa?6@0|bw7wLxpWM%@Z zin5Xl-S*B?E;Pn27_{t)vNYbCvc@A!VU{L{aL@YveH^_z<>Nsu58_)JJA>)Do3>qO z-VdV;5CwgE$sNvrJ8nom+6~;c{z-9X(!E^i(pW{ATK;H6)MWQJy)YuVau7n#9j&{r zsj{Jz%4ppkF$Oni8@nmDr;gzTpK%))H`AEs(I8pehC6x=k?9J$n%FDSY+x2ZaqLA2 zfN#Z?FK?TGg456tY|FP6x1DauApcqBAg zWf4y=k)16Rx>QXLN~rLX?eD7_*{})L{>yj?>66nj6Cq5l0OUFrW^$KY^bXRiM+8!9 zi|{sKM3~d$-y%e8@w5WSci)XZOqbzOMN43CI*2N4l1cGmhjG@`T8^ih$3f^lTA@7H ziZ>yN1k6i&|H`#1M9YO201$%d?){ltjhC)XC&69f99DpJXc@Xkde5?9b|6hj}Z}DfBqIWC*O#Sy^L{T@G z!T$vR|IzT@l>cueg3)|8m>u|L{z@?dMqNZ++3(MMzZM2i`y*xmkgxHe+Zk(VDz7*5 zZSNzTUthTGq-m3*t9&6|2+OBF`;UHx5*%~^%QowVBXamVo*5n44$|Jizb?p8T8Fwq z9|WU%9&XomMMS=yF+FtXllyeR$w<5k&tNuleyk`Ey6l~bkSAe6> zt3qy!{)=`bkBMRAEJuuf{0nvB70;wfl6Y}Q(qm^v(xX>o9*=?uU8ylD%2&#Uo!X57 ziL(B>Vz0|QOhq0)W6_Q#`7Yh=8TZ_}EL(bWNrpYgT z7~&FaiRVs?wL9!dksbVXtt2}sCEG)-7$m){?VPN7ds^)}0to`O+@x)&9oohDeggvwlskQ?yDd_nBu{;nLvL*aALV%&P6rX{fs6TxX1>ahgt~?wuUr z&QK!)D2mjRZz7FqYE~X7HPuxk9VS*E%4ED%R3Mvr)C5x$x#x@bO@~kICLB9ga~dqS zp&_}nX43Fyw(P9=a@T1%jfiJjobxZ?I#u1rWA?y1>pPzcX zmT6iDQ#qPgxf<+UH8c`7j*fh@WyXN%Nevn|`@1HOMG|^q{4Tw#UWQfmqqyLTpDg;Wq43BjMm;=`sPVkd zD>6}9RVO^wO?e=SzQtM1k=^z3PMDkxIJ0$JXyU4&<^9@uy?E&^{S?!VTlH1$*vPce zxnq=cG19#>P#h82nbRN>JFx~73f>aOnf@;A++h@E#NHk`6SNzH2aA|sYlB>#ptV@a zd0P-lnQ;CiLH|eM!Y+Fh!Dwh`Jnyt`r;E*8x;(9Zl}#lPXAcF;JUynG1pfm-d=GJV zV5zqoq>WjTpm)EMC*Nn>93jpsaoa=Gvc7y|=eR|DHCAeAYudSYS($ZSk=0g{EvdUq z6z)xL0BCJi^uDWjg!Cs5c?{nRs%bs%)TBXnF&HxM|BTu%#=k!Yv_p-HSsU!#^H)Qo!4n@}?6&faoU=xa`dWIPyy})} z!?|rqX%0ml_r?_}Z0wV!R|u@KV|BA8R1&ioD}j_YtCf24?u8gjb(E>gCRg|_j$fXP zJzY?|DH}ffibBd~r%tF7Y<7GVWSrad9fEIQ(Xp)&j{g*+QU* z!(}a)KwR#Nvv^Gncq;9}XPQVbvV`QP7#qR!9xk(FKo#zit!fSI9-rWp&Zp!b9X3F* zGY#^kvA45Y;#t__7i8xjWm&KR??n?Lr{sH(`r|WFh*8`}&%ml;6qGja(#WV@cy%Vh zYUY3c8Sk76-GF=Zp-f^Vh3zL4kxB|kj;_~mOUm;@BzNA~m*kJ$QwMUD>%;7q&NoRG z))+}rm^}>1WU}#8L-0c;J3uq^IKgH?8#WMl3p#BPH={ z1{Il{TpLmmnGl(|CS|HjH~L00S>~hVx3_i@e|bil4^UMcK##nL`FNXL+YnW0PNY0Q z%yt_mO!KmqleUS6)^$Z=LEd>yV?owQ>Z5QUbtG6gLlYbe4+~F%{vyHj_LXo62{ME~ z$6Tjqmj#Ah;DT0O#3;6y=sTo=y*X$xz_lE-NZ@!*TqH300s%Z3oLV|8tL7Dd@e%9^ zatXGChlQI&dl9>*09%7pgK4ZW9^oJ16w!!_S6%{jUa~Lnz{((s;Ev!hcvN&^$`dlc z7t?jc=Gdq<_%^sZ40j9|xI45n>Q(V2;pW6mn(N1HL^MH=yT1?F77B<9bQ)Y4yz+GU zH(VFKNvSIXo*UgyvN_%n66|&Kq6@+Sxdq$8FQWO0iWkn}gCv8y&|%<7 zFa$}Tk}m|o0-!e6E{`W=g+4<#hsS)!Z}1N2>(`RWr0b;ZXR+zuf#W3V5&w}%FD3MS zqc0^keX_y0@XS+FlbG50J=ujlC}`PaPZ2PW6gS@K7g%6vkRM18ggJNaMDTzbyfM2& zLIIGu^X?;24_uP{L|jBDAXe`e2eTpy3~&?z3xe!HpFtfQ*9rt)0im5?p`96yxW=$+ z2MR$sZ?BTSL2tx7`Zck%JwJOm(PZF_TeL}L^X;CAb6G^bDxZ2$CDFFzjC=0NhF)KsshaXBolj4=d6k40)(PLOE6EWa zY?3}xU9u}a=gbZk@!!$wqqgyc0Q-O>{KW*eQeVPh`aEC4G12xPC=|ppw`0=+??Z&P zfPKqq9ykqv#Pm$?aty$#(%A<~XB#N6qctd6f|_?G?AzVm4VFBWyvenf?0|G5JUT7W zRdx{Vz`ntm%TRU@dH!@1UBdm-Aof9bj;UlZ*TB}sMK8pQ>Zn?|`b!7V4cnZoGP7_8 z-i>AnF8&HphBC9*TCf+y5mx?vG!PCaK=g@V83x6;!=K2TNbxSL{%ry1!DU!&<-9yk z$dvd2r7M~SS_-BDb*9)`Y92JPCZWr~|If_aY^w83R~(`U{@+P;&q@m^0@owQf*u70 zDSX~kqjU@yq<9VG3x6Oxf-UhE_a*85OK?(EQlq> zxR_EpZ)3ap(oeciXf>h+S3MzM&zas>P~4Yz-0rh6iZK^h3&aSL6JaujG3Lt+Wr;+R+AUw_&bd!~^uveo0QQ-*@F_s2kHc z59JNvXT+nG5{KN*hzA%651}K$IT|Gr$!Ex;b7c}yU#uJSxsDRle3YN--_W}VZ$8g` zD)GoO7|&xyiH}`GSD^Uy*n6QWWktbA(Zopg3quEPJeVq&T7<%w)fgQt27(XXhDU@) z4)y{$1w%tI=f=dz4v}eE{$J-lRt8p3;!i3oI1FJ*xNEVXeJ`^QZg@8Wt|u-flW#v1 zzA!h6CH`W*1UGbZG}F`k%Kl_6M3%C=G4;VjgFiS4+b!+ZHuVkbC%hjP+zkG-MjYEL zO7FS3_mv(uR(X47o&8F0SXXVTy0KZ1sKA!DwbAg@bkN`Bti}-0Sh)5)epo+ytWf-Z zP=0KCczoLS>-+=3HTUi5!O98^GSn>)^e98E;c(Daq8Qcfh5i7=z)o}XL$uu6wzWe* zx2+@nEYIF)%W@5LycU$U$TW6ne}YpxpS4D3JzsHie^%0Lqw8VNRIJNaSTwuR&@jv2 zR$uSpyYH5T>T0v-VSk3zWU6rOO29P#iIbtdx)RN(3GV~p5i#p#s$5oEpE24dh0_uy znt}vuW^jzvr1sv|mDaH~j^h56)`tFLD>?`C43`vOhBHA&q>IA!=igp=cfpw<>)TDA zulaCNn6U_*k2(g8C!u-W49*w$&Yv<{);)Fiy)5^Mjsz!>n*qau-EO+LB#SWF1 z6Q$@yyK3I$1tzeavZUz#tr*;t#By_KgqW=ueO1AWm?+dz`j@cV{WtDC1WkhWE}3Ti zky5Ezk|%ph$0kjKHkAO15Z4d~INUZ6S8#-DFbhEVnlG^soAM z&qD+?HjTO=r@5%Xg4p!qDEdUd@#(ciwY9It8azc@uF5NM!l)L>ySRVw6K<}_HAE|3 z_)EU@Ix;cZwe$-fgWkp${?GCAObQb`HgZEJGUNH>g-^gPLzgY!z=XO8#Ho>e9 zLXx{C?P4&B+pdN&1zvP-YOP#Q^+NV49*r4o`+nWRv=X32fZW&u=MgQ5_2O}7F z=U)xvs#EeL)M@N?nD)Zd(Ppq%i5Z4{-VEb6h8>6+>6!U(64(YN-cg9!`@DpF*Yk`w zD1f&d)*P)Jw0mwZy%=W94EPueGQIG=hdhg-F(Nq$qXCzasQnoV4@u4r6$0frR(}ex z1oHxk4T4j_>Of?JFm9(s-}}l3+?sybr9JGzdBUY5<_p0_qP~>5nBPx77CQ$ec>;V5 z!!FusR4H9D5d)u= z8c783t~aJTZVNCzUESH+_4@SK+%j|m6=RJ`C5I=`D5DhU&iVeoNJ@^}G^ zg!u=0G+PdNt9dVZSM;weg?j#ob}De#={co^a;fnsw*&8xiFWNQg25Fq7YIw+#JP5XvOSHzO=Lk#Hk)5oiX#nuEc)G)Ws!r#hx{5+6lVFyeMF z9Dq4L1dmLiX1nDFDJ235nY0wKIxfEog=w^^6uO>_KGr!t|IA__Q=VjlJnmJnI&d7z zIaqIOA5k0xG!9bwo?^#{Yt({te8t0Hgu)oO>nQb@-HbXI+pSvo8kYV0_X;USBUC4X z8j_*VFWpw%63p9NNfEMu_#-qxjd&ZJ!h$<=Ct3m|iES~o;2aTx5A6=DAY|e%ah>mz zJ%s5$90~kjL5{K4Y}rc~2f0`lJ+(?rgp43gU_~mt;z>ybhuQJ@U>;oE1r#2O&mwTZ zS}bzS;Ebrc?Mpf#SBIW|pcd?|Xm#fmt-)fRZyvmw5Z{S?==m6r9{W?)ad4;dp} zl&x4v$>Oo=#14^@Pgz@YO^s0cY^A}Koh<{cEH8w%3wsIyR*(}Sxw8iRjORxVpC^!Yz8gg-}t zOv>vywlm12hiGMMLrs`(nRzE6rjo#^Qan7QHxPI<>j8>Vna#veXcRktMRiXgMf|$l z@sm(fP!UGl&19uy-2YHfg4-L!dGluR2i)_E?9R+54LF``OuW4El-$8Dh?YqH@oKXx zz^mb#wfa?)D|5vhUe!@Rt5~?4^A6|QGD z-DHRQdbVU|zrJS~VK}VBJB%VRnD{TBWaACI*mDZ9+kKhZ;B_)_Jq$2vk+qM|NZ}8c z>@%VZ&D;E7A)7-8XrGvyBO3PH`KS#fU#^X(6_=D0hYzEm>L4UfHMhhW&Yh{4g3_$A zm5?$C9Mw-l3yLqdU0c<_;eJ`lTSC&T8@FXc62jZdR%@@zuK`dvXRa3{b5QFJ=~@?_ zU4U;WY&#~i67*)Zb=w_(12gDYAJgV=w=w%@w*F+I_xeXVV%H`w!mOv>f;H<2CrAHR zdtVt=$FjAFyF+j%xNdag?iMV#dvJGmcL@Zyke~?x65QP_xCM82n4NR(z27+r-^|>3 zo|*Y``w!J?ueEBuRn^t2=?zDs`2&=oVUOA~O5P z!e%U#ehBCuq=_^vB4;=_4jvvKHc`}FFfh9@pgI6scn6K^($I4a8HW2X7^@zu>FX~c z9!3jmS@>hK$Hqh~zqb)6JZBy$t(ZJvG^D2fuF6?ORBJUc3TLJwtCQFSN1!(>GBfI| z#8e`*L>;?p0|$Gc&+Mag0YGzTh;4I7U~70&?J7sbX;2J2NAp76F(j)7>JES=m4dswV1=LV$WmI9bGcPq?Vpd!zd}bM7Cmp;> z=X=YxFfHZb`BI-~4u`E`Cs# zNqD$CQruwga2)EYl_DIVtBChUv_+DWqqKA*rBW=wiX&e&GZE8#oZ#G$HtAC+N_rVp zIX3gSWt)z98&;j#IDtG_0$#mwf9K-b)HQVh7A`8Zukrr1ZXoKFOl?(%F``phIERd7 zon)4B6=R|LZrhe|JU?lHYY2_g@F7r_Kil%5@`MQ81Z!~XOZRb<17v2k z*tvr1mh`OGKYU`2KfLGIxuB9w@4~=L!!-+cr0i@ckQ-iT{PA8@-O=4bB$&7bha_B9 zWQ|u~0iDA;XUTfB>T6U&9t~!7kWv9x@WA$o8w5#|f0+Es!XRTVu?R>~(L(ptMYHk& zfq~aCN!}ZMD-A*()zZR#u>^M;C!q$BL!CBgRv2p{gzFRIk%ZXgl%+s^pFr#CUd-`{ zs3eAV#Y5}9>zz1t8`b78++&v79ua*t!z&h8n0VS|;)?m~W8hH>T$$vx;6xDj!dt%P z_f@27tH6*kgrJLCz(zHpc4ZvTr+s`j-(%nLfX4j%M%meof%g0Md#qG~Y=4qS=y`;* zGsG^BeIBeHq%}*=dwNQ~Tr}tOG^n9oqVjBRdTuA2kuaLNwz zBl68PHM^*wK;hTxJZ4I9DzzvaqznAhk?s_oy9p_gi4pR}^CM}ad%=W?`|2ds^C!|9 zKTm1QGyWYDj?$f$mj{GdHQ#bxoqmv(e_E8T+lMVt;3$=rf1{j~F?o(!BnXoKQ7)wV zm-xRg?og*Kss1!{lD>b!rqniRX^46f0E~4rVmwuXiF!nAh_hH^tDIu|u<(}Ag9Kzq zrZi%oRnmD7ZMM8R_0%XuRy&319n~xQ5ktDitbR)6FwomHSS93FmxvmGBpRMr7rcwq zB_n`kW~|K@>cVM-q$q4?VNq=r43PXyMU}DyP^@SiIVOVS$MAQlu8qz_0cPvohKD zavrB_8+{|m)PgGi{mBvrKE;U2>5naK;ZTTP(V?vt^(vx_JOZ9PSQpy!d>gvWZ+TJr znWN*eUr~D7GH9y^laS6vYmw%vD#FsV63V}OQtD|}6+ypYse@uHuR_os>>kr{i00Ag zaAF~Ihw5FsvTH~GR#hH-Wz&9F z1;|)6DLO!6_>z}0b-8-)DKV`QcInz2y0OfiQ?!7}s%r4|!4C&ug?ZJUU{&bAlakVZ z&*Y;qKR5&0I*@LEeu&ZM`-c!Oc?mCqx}m@wAoXUJ>r!RVoeTNVa=&&>J3=G%nImFL ze}8nKjj8R?D!``aD^!7-J5gCPj`>(Dzt9OE%pa&dCmi+Sf#Gf$s zTnQ6m=7JBtYgkp)AUHMgq43u?Q>N<=Z%q#Qv`x>)&X`7)SWN0QQ++ds)mLK6v4m}r zMU9(qCQd1`Fubdd^QsDqoBz<6pH&&*J=WnSjv6~xxUY^~&D2HQIDkNC&V8kr#yWsf zQ?}w(1n{aaK^gI1td6P-$&SgjvpgKQsW9Ztlb`)+{hGeY26L$;Ese*$Ea)!7Tf!|5 z=t{G<`=eR6U7I-jWcvl6vV8NwVv5?BJ4~>lpx|x4q;{L6M#sZw313mc1JQyHQNM!O zUP-<4*&^CPK{?;F^_FW)S?FfHoaIDN(U<=1rh0_P(f$M)juZa&Z2uRMW%TZ+?CWwF z*AJN~cUy!T!E|@iJhKzC5gXVVx%(L_70lh}2*;i#cl!yK%T0G)H+)*xhbB%u9xs`~ za;EKavIdfymN>>U4$S7DiM}_d9F;r`;#n&zuI3EU@_{l6B+L6gS@m7h^lmqC>KsjG zD%a2yVWwj2L+xp&t~yu6*iT!IfR@msJX3F+>hER3R+z(C-h_lH-8#ctt!7opBdNmz z_vjnW_OZwQFD8^7~QLBax_n3v?ggvGc} z($r57k*)a6Zo1c}yTV^#T5Umb=-z`TW8^h0z0H>5oa3Y1SkjZt@@IkbTIr6<9m)Nb zf;a`I>%3;72k%h={ntygO?-|+l8wAQ6)VS?j{A*Nv2&2tlr`A5fpFO=ixm14jQ2hZ zZ6gWAM>@0zO~n+hFS1~>`cqzu-v~T5j^0eRFWVgS&x)*9r4HQeJS}=9E1aNEvW7{b z3XmNXG_%iLd(2c^zs=gk_SLJUvx4(=fok&pQ8B!hV7YdK4d?3=!@t!n0B>nL9P-*% zp>j05h1L zcuWb`Gii$gAha8@Pc?)35_y>0)m77KV8dy{vLl0|lSKBrY^7xyEW0`A^8Tjn&cj!0 z*t46-h+OzFvRP+7r&RYV zSG0uCRPJ≶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‰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

an+0lX{oxKvO1Dnp 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�N{_~wxFKcv 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 HEB-$KYD%`f literal 0 HcmV?d00001 diff --git a/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf b/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Common Mistakes while implementing through NHCX.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3bf209e24ad61e321081f5502178a385b38d5471 GIT binary patch literal 61442 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Į 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 z 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

42mqw|qJOxf6P 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

qyb9=j1tHW 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 z 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%0Ai9C*8OKJ01a;?R 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

  • >N$MhMWn)kuBwrALX;OesBbjVT#MmEsu}RPVS^h)v;DiFEY9A-N{^)yv z1c+7g^e3)O*H>O7%Rl@pfy++eE~LN3ytGNjsXV zm%tZ^N_=woC_#2y1^)d&2_m~A&9$7snpZL%3%|PngC@yCQ7dNXa3Qx zJqAfKOaJ69Q0BKzxlynrv96EeT#_cVH@|Hf6lWxiYz&^mT}&Gi9c&$EN+}<*G%k1{ z#3g^>sT&TmpK+I0K5|X*i17&3gk)7xpZTsW9=Ej54I$eAkMrh+uxx;KKj!NCoNR!u zg>y2xHmlR=I(IY|%2PS72wRG4AE79^38R>5plf*io z~_u%{1a1iC**&n$6hv$LWKWlx%<3T9c?Y$o2W{|K+xVd=7N5lBqVakrlsSUNkoFHp#PtiDa{zW ziTjlbt4htX-?Ti6l4u&1VjmXp7b=zk4$JwA$IGf_;M|n;Rnlj1+|>0|=V#H}R997+ zW=WEK4oSf&qCph2`o z#q^Zo$Ir68Ei!Pcso%_9{g>YmdR3493O~L)UKO=M~BUquDUO2L30X54M#V-1! zTByjF-@=I2y$f0b1XvAl@2*@xYcu7(?aEm|ajE9H?FKDiJejhfcLimHhd8mJcmLo; z4c|f}j{NDw8P{FIi$1WW%KMgXlR7&_)rmo|=YSW+(nNUt_aZOC-lkx7Jc<(q?w{#q zM7%95y{HiTI%k}IKEUr`)-(iV_)O^Nh^7{B6F_H%h6D{T=79(7zqr(b;c z=@&Z6ahYf{Y{6TJKBc*<_37)_HSln3=2_J}wZDt=neQmhgeR$_axI7h@3_I~D+}n@ zNa!EhRK!*myzuKFxSH!r4D4%>6qg-(>MPLgd$)od@`w&4TWb`-Lyt1R(ySxg)^WA6bosDPd^#Iscsz)}pm=@>6yP0*Y+Bhn%%)2=9^#NvCVgGELr?fNK3-54=o zeiU#u_O5R7Lq_o!W!(Z3yWAKD#2P{X(T4CrydavdD6i44a<3z=jIXw@N3TRvz;{Q% z4Iys9ZXq|pHz8=yjo}ZvV~i{k?y;hoV*uX_yI2?WT0w#nyWJAay|@d5)9*krtfoG8 z&j$uX0gpdoMP3H`bN%hMltgMSio@-n4=|x{2^1df&n0cRD8`{i!&9rjD2_{Ceq*4D zFq3s27R&vTb+^ky?5y8Jn(dO+O68?Z?Z)R3bm5oJ(bASfv6?PwUAaxxFuuJPqa@n&6s+nya%MG*O*j9Tc);X2gSRmZHeiWzn z`q@(XA!@wQ?XtaAt4v%Yy#6w2+o%16`Wex^hm>`0QMior_QAH9`M_r2Nila#qc6WA z3K9-5|3H#;F__uxhz_Y5NVqf%N`_FTJVQd`W`@6jo%nOF-_Xb`4|y^y1jpYy)TpdV zgb`z+6={tMiduQCh_SnUe_s+NF&G^hN6LbmzuDm!5q>Jt)jgnGjrmXs9~y))c_!TG zyZ+_;?OX-Tu_A+HPepTV^MLUPzhM8yMXc%}btU6AQFG8jKaCq)mZu&}R%w=mw9Lm6 zx+8k;(ww5=BLeTD@%g%I$__2oDY+Yt4!x>L#v6tX3CG#xYxfQ@k)IximN%6uH8+PM zL6zN(fmQUakq$P>joKx=S&GtGB?9|#{AIA476Ht=yMA)Nbg^8nKxi{JU(`uZ=K5{| z$O4eu$jBXhvI@V~;2g6u#dP!=SlTZT9Sbc%-U@W{*G>O14Phdk*d6n9;SO)wK3NdV z>2Ir+XeXMmu=P}0%dOah@g!XyN4V;?qca>%ueE$AdnR1oF&{8GdlK~(cAv!CMKKNc z-SOQ)Y@zbS3|&zMeH1-K7M2)1dDL^C@fzamkCUOnp}3Z9!6I(asf4GWA8yFoc4#5` za+>PXtHU|;Qd(Gbdvy#Gb(mTF(h{>-LYrTWrBs|6Ks6RlO_*84{qp`2 znS`H3zpNAF7CMnHX9ydRiheQozOg9rn0Y#9bo)XQyuRtaf&__dJ0CdbIPDiYM?US@ z+fcf9ytmy%&fP-toJXUmbedG4t~@Wv+KUTKKBe|R(sR{pe)7zCa=AkzJp*m!{5gqb zJ9&6h_q%+1B6HS)Yu(g6Q{UIIkTli%-0wC1W#B>SneMsxzEjFl!tx?LxFNXV-Z9ud z#CpYttRmYFT4#6-Pka0p?_}s>%^p`8-7D=H4up9P`z#ux_w$9wX2Sg!Uut38+=!md zhSap5G?3$z4SAFklzI=!%hLre4_nOp%9wX9dd??^+NjNd` z_rWN_)VJQNqxQj|onH$fu)2D)WQpHsut7ot5xdK7M`g>tpTjSu@}gSHU|$QxcDa0? z^38L9Nb~}J&BWMq01o%mX1*G^avhChK*41?^T?uAd$d`9#SWMJ%q^!c>8$nlrqEfh zO@fEBmcqo(>eg*#u$JFMe0Be}RIT=426e&k`g*&wVdyj9y ztS_!)hC$b`&g!uCDrJR3+^j;2`id5~v{V-;p(|usp7YfqZaJK$`DG=jJZ!cxZnhCL z%ROY1CF(z8Ua~C_QVuP41)LR(71Sr23wqWgJyJ`Nu$KM`52Ob3f;pTd?Fs|?bWT^7 zoX@z^e3}|o+JHN2C(L(>bt?j^rZY?-m8BDPl?J$YbE`r>1BUIciEchSPi2HI2qP8> zXN(LlBqBBWy^oYSM~u!ts=F!|Bw@Ak^>u)a4U?N2Xyek`9Pgb%sNFp!_n;<{{pbRW zb#t^a0w75Q+r2dwf43|>m@t&{<6_9PlLjIb)ggh;9qsq2xgm;#wtT5C4sSh~ScTI> zgt$$}r^78js+Np)Q69L7U<&aY8Tb(Yj4|Rrap=%@B(x}&F4|VnS2MTCYx`B*_G^1X z^Y;ecZXLZFdbg}p2zgs zOWNZH-CO-e4~SPp%|a)vzuJud$CtipSm?F45q)*|eYb-T%`0GGM}oM^g`2}DegMyi zES2$3F*j~kw3U|njP2QniQo?mPj$iJ&P6YAFF75fuU)T$2F6vjA~hn*&(;RQ-*^_X zIGZ{IZKM{zp7T`+1Tc?>rdieHaVeKDh?$p=mKGmYIL{7BIp>Y3Ud_I1n2SEqB$|D)Us+R#Wd)iC3bp>66m7mTxxK>e3)thzY-fP@(QagiUE+j0~q2L<_!p@}{?f7iVur%T= z-YgQK@x{LNHB-W~70RKsjxY9sQ5G|1z>ZR8q)Z=|OwC*`a-^1-%9Ul{N%{MIL`*wT zH|1;qr+(B|l@(;9KWOnRi*|Z__`9OdZSOJefp}D~RXw`rEWU5ZhHdgI%PCFG%43q% z&D-Tu+|2Z~mFCjX%)}O@xzl7gw2KC5YfJ1{r_EYN6EbT|ccX_X%_pk@mNf!;Lap>NrbeJ118loq7Iad=iNZlLWLKnN2LMC2cUST*sYd}c% zTIySh&21MY8&gkY%|JgfqlV2fb`q(=TH5x9X#6_w3?eO)e%xvXA`{Rq7&wu&)aKgwT0t*Xzg;+QZ%EC9oU`GZpIIar5$!12{Oz0c=p2gYO^C%g#m4 z&C3o|0)USBtB8Xgs*;19oRg26oQn^tg_D<@n~js44~lW|{B3N|UhDv9H%?w&axP9D za!yVt%*FLj2CxC3Lph-`2RR21FF6M{R1MT92XrVe)N?K_=orA?{!skySawcwP5>J@ z0070IW4NHEczB=~FVrC@&&kCFHOI-p3-yZkuYa7pP|F-_|4`n)QFB9;|96pF7pjNj zZzn#^zxiPQ+y05r;Q(kVpbaW=v2#G3=Ytw$hdRObHy$nys44(2$KM7Oc{!ko1wdWq zfaVUs2lxkZ>5}tu{Z$90P;c1z{<6GKRa{(utNzJJ~I$@R(qrzr*e=al}P zMyP9lQ_s!^<)D)a&GSD;{=>h27&PR+vHlJHUnu_%?EmxeZ@T{KWcw%m)BgYNl!0pc z-<&T0-QHhYe^bi#|JQl**B*3&|0CM}@9DpD;eVRMznT5_z7!N>m9(~VHFsu}v@>=! z7dJO`G&5(FH+QgfwSvwXyRa}C^8a{WduIEoj5vg_y>Gw55pE1e%o2QqL{aD^P5k)9 zS|o5m&ZY!^gcsozbW2EMUD}UT?(S~U&gj@)(wLf**6Ucb$E5|9r9nk~8FC^=;FZOx zNkJSsN!iHth>bI$s~qSS)hua@j|%QRtK`)JB!xHZW1QpnRY?XW9!ir6^E8YcCC{x- z2Gxd2n#;h}kMFlku__=?OD>jURkED$x_n33GM)K^HL7hDcJ~f`)rl>ZUsUajhpfu+ zDm~Sg%_89vbY_SRYVBT}g0*O((1zt)pKB!NcM~mY>?bl+Nf>*d^^}T)eh$?C#@IQ= z_8PQ#xOPu%o!Yi-+qP|<+O}=m#;M)@Yuk3aC)v%L?1xSE<4iKilev>g=DFv0U6XIV zi!?5sMysV!{H2#VX zH?h-h9`qYmx)Ps{tLm@h4_U6;kbX>~H6XPF*8%>%6}#O9ovV6BeFWvP%O(HUdCB_! zstXGG%x!ulwg`@V;u1Hwyp?07gQXe>Nx|dwEIh z14YUNx{qstG;ia5+$81)H_CyJciRsH@120n^K3y6uo=>u|DOC%%X`f_JPx4;1&ai3@0e8A_j=2U4N(V8z5@Mw+TpSsdUW*|GzJv73gUCM)Zf?(2*Y?b z_D}qCunhNG@JqM`ZIX}%2k`KumAVF^ApfbE$H7Px|=RH zSF^ZQ><% zZB~bP34pw-KJME>vGG^VS=mv-D5+_Hq6?6;!ps&FE@nUEq@q>d-&5eomSq2k4@QdL zvW|I!ak}^tJmdTZoDt4mvGPSQdXk*qm=xlm{q&MCyyky?2Lw!Z=xP$wk^5GD{DlRH z57WToE!Fs|2BU%$SZ1o0Cmm4e_E=m9QTWO0P_cjU>H}p6E`p{wf;<=}pi(XT z4kVH?J7hGH0_EN>^^JgNYE0Q#Kl6(>k_U=Pt=~ozJsm6O2Z7;1d;m)M>}Pyul_;Rz`*mJ8p?0&f@f!V<-_#h)|Aw5_LTBl6Y9b0RF&dZ6U6Wx ziO=1*1ATCF6){w?&R^iY3sDV(=FmUt7GizS77)veV6deaek-gH*UFf)10{Ck3@~SX z{{v-mce^u$4$$he!T(N)P!nSAL8@%m7ed$q#!#exbfB^*=ui*~GvIoIGK+U7%+iZ{ zLonzp#5J4iLVW-Cy*HwpQ4B%e_{R>kr}AzB)V2ZyjRc#`h#!Wz-WO44dUxXKbsB-@ zNB%*>(*YltK*QFEmHcgAE&yRa*tCf^a>Eq3xS^MsSavIWA`RVEc;Il(4H0pP2n9?`H zABt>KgD1$rqSbhV>PRcUb?DnRpuG>>BAg1hfHj0M1UN@$T70;h4LTzAp`<;bYj@3u zbZEpGcc#|~dBW>q44XEufnxoEHt+%jJN~VZVK;6+8`<_PbgDig=2k zk1YDBjY#EN`aL)LrK)v+Z23n7073oJvd*0~lcw*+|K8}4Ev0G#9_9OX&C)5mK z{K|j892_5Y3pMpGD6lUBC5pNF17hg~RnP~$Kn!JX@Uazv8Rw^8YhBjWA7%V@sx~+A zc+oGA7W6%-yQh*V_1_ziEOE*EoHjl5p9z+f(uMyF9)JE>b$23J#&_JoX22#6F(~-& zd?lZK{~oqcpPfW!o=T42Sjr~eV#e0&F>zGsc*S)O0ry1KmRy{Ad9n6{>PfTDU7U*D zKL6&W>PUKRhqeo?ae&=~*)ZUS z8~6o)ZX39&hrJHiVt{iW)OBFr1l9k;>p;H=`7#9h1KIe&w7^Ls|1I;)r1lj<&vFiH zZ2X1oG1!}=1PLOw6Uxat(G8@d00Tbd!ASHWLQz|&mB>Ks9_)&oFjknLH7Rks4f$%H=JD_j=0q(-WY|B#oD=*%P`sbMk9 z$}>&Vc){<<-4ttEBxI6tpUZh<^WxqTy~*!7W9UiR21nFrrfEG)9Km>@iwwqip2}nH zvQ|5p!on+PHL%Vv@$^zQ7WUP(m32+&bJ7Z_>z=xxq@{H0ii8;fDT}}PJK1t#vQdrR zL`l79F?Z37mFeP|DOIscDc&z_lUPH$*{d{R7bS&dB*6luG`fl6?1OBwo>QoJ`$1$n zu9i4REU1=da{lWkL_k+W$%~9VgLFHZiNwv6CK%0 zQ7M9)kux0@)8+JEJ6K7BbyzHWNdvQKxuri~vPun*Sd0d8`0zf+j9;omn#hc^f~n+k z1D$wP++lF*#?&Lv0GMP88ZWg{a%5yz7~#RW&-(c|&5Sd;v$BUlZ`Lzgqm4!vk^q^2 zo-^!X3ryfJjh-|U78K4Q(`NR|qu;Vo`;#V@t;`yf;BF#}#Gwjy8cD9LW;>??IR{lh zT_sMM5jug;l51oY$TCpW#R7R?+`&EDLBiZGSO%6$Nk}Nhz8GPo>tXQEAhcElrwLA7 zofw4BWkTV1h{UbkzJ4_Sb*nfR9L4zD@XKc@(mBJZTHn^<2) zk552fo}v`fN~@FE)Y+T=b1?`*P#zGITR}br@gBuWDvlOXV@*EW+bE%dRB`nd|9hJ-GAC^q?ix8~&_V#H!;v2@feQkr^ej1?5PjT-60b;#F8qnW>% zdkyQ z2-7_WU?srK126ox4u>aa*tkgFAvK-8Fs(dCgm_1eEfRHES<4x1VB5-5%h`0c_-cm) zY(1`LH&!~nC>u&dvX<@8bX$j9OXCh-zUA~eyzPSs6c zvWd}o>R6mEEuVY z&eH8uUHlV~?yc=%VNW9*PG*vrg}NB}lWC#n<1dkkp6?EQi^d8Gk3kYlSB7(09EYLj z<(gZVZr-rp(ODjG+{7TT9g+noYX!Fa|_66Ts@S6$S0V2p6^C7k}A2CmrwcF*6NJM z{!wjuh}PKb?E`GI>nXZ-fPULtK=Y3y)zV@|U(ybD-ueLt{mz(Rq#|w%?1z~Xb!aB< zVCm@b^#?MD(wUqD>)7mz3y_hPo`-t8IY4F+jvOV7k)H!$qD4||-hfa5GekIs?GMs^`Bsv7>C$#3`TkL^=I zdH4nao&)A3$)HSn2CO>CB@Uh_f)^NXow5?TZgjvewW|myi;<@KEjS28lG*sy#}`Jv z^nZ=?N$w9~rFB36pjcVy0P6e@3Q#C~JtPNwxfD0LPClVYa&QblP9VZ(v-AMR5kO?X z&!l9NkWx3235k+DjDjkAtDG z#ec`hXS}C-mTV)Zn7mav(VaArXd|a4YzSgmcahYcnW0L_UQIp-cvTc7f<8W4s2PXg zXcJucEne$bDB~t@W}r%b0M6e=R8@T@4`6tB9`L!-+6;=e^dv!3lU^^J;d9}L_{J^{ zcdeM=P|K7tGRBosP_;S2auV2RvVT-`406_?dWiJk3d=AI#54X2Boa!7Qmp5aZJAV| zmBGW3T*~Vn7TmqiY%DK^x~`sI6Bu9)6RCK1ez~ETrm5OW0Ji_yyDnx1{UM=8m6SE1 zp^PO>m6S1osf^`IRU~V=pp4~8m6SR`p^PO;H3a$n`$TT?H92}G?T(wtPkVIC^s_Wt zKjn_z)JJ5Le*9Gw>qliY%+yC>bavu3KN{h$M_qJY{GA-uP5fPablc=BI+lIP-856L z2CNB&p1DL-JUW<6^^tS9T z{0s76zO;OKiM`AZF_v+9du-~z2Y8Kouc&Jm-s>(2b2GgE^13_Y4{g!@d0)LI!yc#G zqM28tRYU^MYzm`DlIMF<0pkkmZvr*s9-LDvISHK}Zn9L^!|Lw%?Z2V6-+{JwTmv&J z3-zqkR5NN*%Vw^Y@#N<$R-(x}U0uzfoQE|r{Sl4`SXjAq>2Mvf>*-BK&BJ}l{w(`0 z@<084cGn#dMcbR3AWaqiQjwKW^d~u=(2R4bmTVI;O06;iqi-&$d6{( z<;Ca|Q>V-AO0S>7lzuE8S<&9Uoi&c*x7aUI@PyzU8a5u6aiyhmJ?!o>ry_C2t0Yo+Ajs6<@HIf^H7mXKw6~l|Pfwh5z6KNZ_ zg}i~?#p$MeISPPpplz6L7yy(4x;5OZnc0}1p#}5gBYg_=A_<>)sYZkt0>nrA)tRy- z9yN&gy^J2K;K=WR?%pCkhl@ACAh>)V!NPjP2u9IQo}}-ZNp7p_p|^wcCJws{VC(gN zZvNmg;1$*%Gef?8yiKt%CYUJ+Ps~;M;k72gY?iYDGK$p`jXZp+_kLH0rR@oN0J#lm zVfO2OsB=KD8%-;<8&#tn&{O=7IUyCtOcxLz-LeDO4cb#Bo}qa_YnvE-O*;IGYCG@Y zXJ5E_z+M#I^36D=s^4JZ3-RHPp4dXkkEcjC_(aJh{SIvc^}(qP)I=dy=7YD~i-%B(eEzYgcyW(!^5($TBQM+iJ>wX78h?*k`-fAEj+&Mvte#()ep{smQ z=i*?7g6^_p)0#PAW#od5<8vA{$<7=3t?vSCH;T|71 zOJTV)=6dLkF0E+U!o6`)htYMM1w)O;&NcDyiAP#{e1>N#SJ%a%?m0pnH@vfV!`+kp zGgdL?AiH@gxk(Ei88rYb=YeYc)f%!Fpbyl|c#IOFY&gfA;}#{VQl4Yw%UAF=G@WCg3jZy2XA#K`j`*-KzB=CsNP|z2&>6J3(buxYYfN#U+ z`D>8L8~+mm8I4#bRl$-~ZD!6Ii7dM{(BLBrKe42HSiFR%f4XG)YZwE4Ipri?JUn!& zk%NlIT(72b32R@G>6XFMMbc6IOi7jDuebT^E2Kklv8()L~?j5IVYRx23IaYB4ZrSB4Z^{>C5unNbRG=)Ka z{zYvz3UNvtdJz{K-xH3;zPztI@y5(PyTIDgOktV?wGLV#yt`a|Sn0uhuE|gh8tIY| z6vSG#)l?^&%QI3{BNKlk3#BwQEdEdx&F`m4A7xW4fO6m1Z1noCX7GyQHz^rDx3}w7 znd>ZUZzAy{`7^qy8tM4V|RZoKvq1$H-k1@V!Wz?QSMT7z&nl3~QlEEtvk|AXI*%b<5W>&yDCU z$%=APk?q*j0at~Cbn+|$rjGXFomcD`58fNEr;H+g4;c7eY}?2Q!F1{h}%VUlG1ioFWeNT5({Csos&zU7{F z+Zu!y{^z=G7Z-gkt8L$YMG5`bPsf?uzK7u&J1XlP`>GE5kLRbwXWU&|8Ewq4f39&? z*sI?Uwx#dp;5TGMYng@6#$*T+AikN$+zyKtX9oUoU0kR`B~Sbz^a;4fkfd1M&Z*1S zGw8UOAvSNQH{H?gG3u8}{EGGnWu$4UlUw{mW3_5F+k@9xjl%zc0M&gNx} z%lT^cJld-ddmouvyGR$Yv-ipvDJ2>u`e>f+!f`C@8vNn`HBRYCwx_wvebEyn2NR67GDalB5KY2ht|#(8vTn(P^M?@7Bm{x8MiH zE|GlpZ3>f;iL>12SIis0nIeo>DyT(-=Rr^E@DW^-m49vjft%HO#ROF))t*yVSKEM% zDp0VchD1RSgWM!n0e%{mbL%WL4O?UAs1y6cZE@tVNEV`Zi%b9P3%f%r2vn;Rat-D^~1?N(*501@P+F75lNHZ~>K7*FFB zncnLSOk$(i0B76r3tw`gp-@G-r3VlnTK9nNJ`pFF(eON21RtUmMBCp zPHa)35@$+Qv+{?dIU1bWZ%Xs)AnxG-cjdXlI6p&^Cc>c%yJ%1zkWIr-hNRn|lW+Fj z+}i#=B@PeX>4B1GNIS#*Kwu2n*}87~JFNK{n{G?nMkPB}`NoLJX^D=c>p(qHwl44`*@5k3U;=!eM5=kAqp&&W7dM4yorybsB;87)~X2x+doNg)SYz)=Dk%IY*M!t zjb>?eLVQH!g2noE08GZR)q_*g6n^Ni8UN%}@iAqePpUQ#@!c$Mg09oT8C~9DSBsNZ z5ijw8T?IGw)r4xBN{h-;noYC%5?y-$0@+dZIAwK}{Q9x%Ut7peig8=ju${OuDS;bu ztfd=wkBLleOUtM+WiI4<1yL=!X?0HAH)2BZu#yJVqU^IaIP{5U%U9JSLKYWU_9bb}`(Zq*b6Camv${|q+A>Rmz#jDh0zDeHG+Is3SKsS%qc(@*8j!5c z{PXS2#6+P*^5mIf3%a_BAFr~l6T+g}%-GCVYLXsHu?Ed8Y!!_rxHs7?|9h461M6Aa z#m4Fbg!IbXj^=4f^dtj`lno|cI#OTI8{xN;0eH!`C=zyhcamgrL1_nW9Jos!b}+cn zgm^*kBDu6W?B;CZ_e9_Aboe!X5k>+w~Sj?mW7c85_Hz>Uu%q6 z<48$0R>NQ@Lpi!5$P7d)E754_2nij#d8P&_x8Puolm@FbzM}H)sq(hp(ly1$aNdfa z_DY{Um(^1)x|XV+sYG$21+L2p2oV_`<8`Q-UJVTw2VteN@p!ssddA`1{5Mbc`}%k(!TMYM7GDX zM4`YPQyJX8$W5a%R$_en>!!6`zq+#vpiFp(lj8QtSO-&3^ zQj;K=OitVYnv|UNFi)Ej*`Us z4XoTORot#BNB-y^vhQ^|BTfmPVVt+ot~`&$a)sKa#)gz!tsk3&^}(+z+E8^8tYf9(O*f8|muq3|e`>%U_+O2^A^nFxfxD zngtTdB{9J&tpkHX_I$bY#`eHu;4POuqZ-}2ua^U4VPyyJjl@Y=r~1@)owKzi*H%Ak z-2CDTHMxyVcND9B#|Kq$U)uT)Aq`a*7j^CRL#|XB7tO`8P8s~KcPqk^udGk2b(jE+ zkrKNKXGQcy11_GtWYHSlv5Ob)3If+dQn&M`^YGe4wO(KA;AvBghsQJ zRRqnbk+k29f~x2BUf?OYTs5CbX`aul@!eQbv;MUWJ$D(xV%aDm=BD(=bCc5!fiDBQzKHj$w<@ReftZtczQ{erMHu?$T$0@2|(9GaW{zuC_t7?PjX}Fa0hT zsROX&QmdNrT@JFV3pr8J3n7!o_7_*O2yXnZIcvZ;8(JY;-+!3vJdWX5>^DOFO3fd^ zzDTc&EN``h&UaQ((NZ)ub+&^YJJ1@tnu^vi)6BDEE<;fm?$9pb#Y6nC1q+f>6s5u@ z8yjs~kx$Tr3JOi4q>jRXyw%BfI+0_c?Dg}$r9wP?R0h@}dQNy9^Dmk8Ye>XmO*CmJ zlU&ml&#BxH>NS$oAxbjF`3rCx`j6Op6MFn)4@jSmCcRI7iIwWUbn*Vn3){?E!L=>Z zS5j$r*c{l}s(+cS-m|~|?Y3UQ5MR&qK1u8HPSxFLxoeO}rTsnzkLnr0SYoBgR!0N0 zb9dfB`l`WJ7~$g~$b7e1?13{RH`}X|L!WJ`69K z=jm4|DKgbLDTNX7?=T`ylxgan>DzNCVMMxl9ivz0uRuAU<@Za7cv&3BR40iz8c(&EF5Fqg z`C2}NR&ODv?|pT@D+7F3)fQJW5nnLW(dMW!)kGpdq=;TQ%lik##r9OWwKnHfm{1E) z`=Y2L2H%jX&*iszV!s)%GMdb*88ZO5kYN@+LHKJN)znv`gDY*V{@6dFws_fSqQzL* zwy;%6APV_di?V9(6TWGAmm?3=z27<1YKsujA@SJ{I_qI2&PzJ+Yg>;^h9g7fbqeIy zZ&JYl$)+x8`)kQDLi7SoR-kJ~a3Zht*x#)5RLd_^7YtEz*4VBx)VoWliWtquR-2p_ zct`F^X4Y4{3SZlc8#s2N_o4qrKOK|15n4+=gA5n~)>9AYN>+@r zJ|}`J7mnDULrO?isp18D{Io<#}khfXmAI^gQQO)8mPzew0H8Jl= z;bmK!s+&McsjgM_dzPw57i}tE!wSdGr>2jmoEx3{o`kzPio-8kqe|f0yY~I%da{)? zrL@ZuWNIsvX(*Qp;unHAnX~pc{-(6#goKddYL#@@AbB%_$rh1&fbs%kUJpeS+Z~V8HwYTBPMlwUq@NK2@|1x4 z@LUv$+`R8NtgNM?kpk1j6bUa!;u+EaqoWR=Fr)WoyUu!ld(n5bNvBv-ades`h)9uqZyc#2l|Q`e=iKZ^QES zrjk(Yh@e5_EEYQB87|R|l!|aAw$y6w-Ww-Z@9sVs$TG7foC!&Y`k=df($g4go66QD zPhS$;$~cj*P4akOa{sCC?d3~yvC;WSy5aq?c@yHlUeJq9>y2zZ4X8>)cEDuOX3=D^ zmKQJv%AGCgaDPA-7C;DwYRys^SDyBFS@2fm3D!@HYn6B7x5h)k5f4{w4N(CzPW`ba z`Cw{QS?4uBLs0K|o+*9lW4cM$HS|^1Rs0v+(p}$jpxh=ef))EY!0}(RVD)vq z(sf-{Q8UYI$C!BWCRV_{Ahd}Jt4RVIZBL^6XFMN!4< zi%=mLBb7BsGi1VkCAHj61LS3eB*p5+`Bzf9+S1TmUzK-?C+~0-Kdw!42-^mRNiV^dPU>l0@RPUYU z(9yccDsi_6l(<@9Sdupf16#EyQHWMtl8}-zGRF%t2SZr2#{@z!msV)d;HR|`Rbx%; zB+%R6L-nMVQW?|U{7KBaW25CWi=~eJ$jY!V@ah(0uhRDX>xGZxv^)(W53z> z4tvrCqJ@{b(?x6XrgZ~afw&U(HF75;?Is2}~GnBBqhtPJx{7Dc0 zLnHMu=_AoE2|4kmx7FzTWZBT2rNHl+lPS9>g|wuMBhdZ|rQ!;D2W6H*f8qpYgG}s~ zjQp>c*F#b>rhakdU_46%CTtrdhX)_5GMys93J%Jdp-&RAdKrkXZ=e)K(x`e4 zNm5BC)Jn0OqH#rw;G$$DW)7)@Qa=E{Wh49<*u#|*z3Gb>Q0^Zj8HeH~XBzd0rF9ni z{NM;4zsENI+{C7h%XSY~cHF-LiOjA8 z9PeyO(`veWlFv@oAAr@o*M0yF1}^Mlf4s6yh$~iw0eymiPx?FnAdAucL|&a>{o|v{ zjn{X&f45uWHwQg?r^mPHOU-!f`#|ei3n;O#FsLvrgb&}(pNm>9oAWY!tiY;frj5}1 zB6*8_&M;};X$-nZ$Pv{a-;L6$ z60N{g58e0rj{jhoK!13lxSdUn;T;(qCO zlOr6x2c)!;^}vKM7G|WSUiC2;2t6+rxmWN%9o+ilJl-@zsPOrZZDUXk& zNe2p?y`tbsG=_ekh%MYOn#+F?)pD+n3%o}&_H2`jCVF^~;o}(QQPiskwai5G4m{BW z-bb`6R(U1D%^Uaw^MmwF_8uB}5q|4dNq@-$*mgq&x1$pQuUeo-^|X7Yzu_2$|DAJa1EN!`)cnBjcw#E_7tk- zlZ~pQZmHjFf>nQw8q_AyWzwi6LUC;wskhoRpA=*N($xU6ou|ub>~=7Hd4-+e@(W)X;SdH%|E_E*@t5 z#Id5TsdFKZmMDo#2`-OBFC>u7mCANlYZo=u4W?Ov!})0V0F6qiyFTy ze;WFS5li=ftx=00%KQ$PT*$N+$k5J}7?GK(>WriLqbfH=wuP&R!_L#2R7hht2<9lb z8p!*F^Vo3F42{HMgle4F2`SQ*o~;&x-&QF^!e%8Bo1w)T{dNZ>n5_HY7L3}JrUomJ zac^II$vqW9R;D`8DQ$|5Oxj2=UAP7Lt@{RGqi&xbED2F|xXL&U^G}lMHoszO2+Zcc zoFCMOSBhA%klN-~g5?QSFm3s?4J5-h^NO$F*(witFIrJkZSw5ROB51C!^i?`3|!6U zXyoZ+7a+;evqws@40>1dbX=!l-pyh!Fx6uaHHX>JDiv^i8C!dY;gC^3$tj^J`E8gw z{tgX~J&%}ueP8ybm*wg)R$ycq+)cw4Al`HyrSQU1?R4A{kiUH8`WYGdZV0F_H?($> z2-v+18L#5=t7LP&opyCOF5Bzb?fAHSwy3M|3>xt~A{)VSwP8pb%ddEiM@Iz|Qjs>F z$62;umscohsZLpwBz&{TqNT}K07HFxA&Y4V26-J^Es(*YojEf29 zJ^!MuILpSs!DucAI#da0QNvGEXahptC2bWEI08*R3k1&JsY|SDw?&GQv03|@k4(Kf zoYuxaqXuI`2uzQA8mr;D-}tJ(yFiGZTOWWAk^Oqs6mev0g8}b&hqzye7sbjINkZu? zoRS5MX`~SjHGmkzfH_6x++x!>%7WI#yH^K__QO6Y`@1E6VvvqT!udMtPUBN25ATKg z?s%Qa-licVl?g9zqOLRlLpx6YbN#A`6_kFI6rTBPntSNV!nk>Io_hxt7xicH$Vj+A9d<-J0EECc})Y$ra002(pO`)m&HiVIs>QC=2igp^sA z{%}h}M&E#HxV7Zv(fV+;`|;I{#9zUR)v6~x-UqgnV?BYQ)P?nYTP0~D$=^Zam}o(W za-(o$MU1CBg-WD>;=zL~Vx-4*F!v-Yy{4INilx+p@FO$5RUez~B}Sp8MBm1AlkQ;V ztYA+%!u8t-CXcLu=S<6siM^2RhKC0n2x9HLE~nE`JT&9pWQv$|h_>pk?lSKWyea}8 zBntI9x>;EFR#Dj;;i~&8sxPN4Zk4{4F5bD^7>KkR4FD0MMnxy5IWuO##}OcQZ1_@QSE+{Bp)fsxGXl@<_-bGgdXkJ@ z@-lLs%R5Q+YGJ`9KJB0Y4ghhL`^A>kFFl)C;m__Y^c}a!KSpKJ)E)?cGyYR%KW!S@ zEoPn1b5M^)dF;$S-^(IU7su7->Lnwi$8e)t(N}czF}w0NVpp9Y!#gW1WkJUUw<)3~ z?)<+oo42;n)NN-}Oq$4buNU9tSn{95k!PPGFxp$W4_ec^hLezE|48`c^=vj9k;D*y zIsD>&qz-btTY5^UP3)$Q)xz#zPGp~X(y+nO`=75keO@>H?`R$)-Ws%{qD z+JP_!QP26bm%u3Q&Mh^SI>J~Bb2((+aN=J!((r;1QmoBYG{G|T4)t^8QYK7TqC{OX zS45Z2EHE)Gas_s^aVzT~qgs9OSCP|JYq!3_I_c4xcAfHN(j)yyU8`8IbNnB`zU$}E z+`HPO5wmGp5(q&-6@>OA^i6JI!i~WOul*-Q<8gc;n@6c?WNO9StyY$ zZod^Wdx#=LbZDhj(!~%82o^7zf%dTj^dhEb@|ARorZsj$Q#6ocYFIM)p990^Qg`q$ z1WrR}uM}+E(ARErZhlUpZg6mcF+3nk9u`1Eweif~XR)t#1!;CRk z$;S_fSOPU$t4s2tM`V5%d7Ep^IczUbN13`CJXZSge3-gx4;Sw6baBfRpg+r1^R{a? z3!y!`0zM{)FZ1#wQTU8hfPJT)ZKt2*y@2sULWR3E{#y)&eVC6Y+;x{uEW2hd!F2Ag7*3C^+f{mYnz6U9{#Nzqd!Ljr0e`-Jqglo2R99BZ;Wb_ zv-$nnNc1fLURG<;0`wR=5O%FWh_=D2-;ymF4@ z319neV1K9SBZ4%;3AQG<5-HurP}HsMRQL!*(0;lMSxu@b6|a{rElvtrpn*X|Y6EAo zO^Nbb(|r4pIk96&9O&L{MqE4rhmeagoyves;X02I{hq7zpp~2fTFt?o?8)%Wx@r za{p>NeczO)BM^@Rn-tz6XTS9<1 z9@44Z`=oc77)yGi^1e1|I#i)NnU=oWam?c~r-;zlZuU63$k@eD(kgD20LeG%z0mx?1pznHR;k!jSKvB8(AN?V7O}K z$=q4__0aF-zF@Kr(81l6Ki%zr0Lp#s{Z&Z)^E@}v1@*wcLi2WIebbGFPw8*KjQf4E z+Q;V`lv)9fRlyrsY&H_8fpFByG~SqEr1nInn!Kz;t4&JPsHFyt;LT&`ExMD=VSh<| zx8c2ck3aiZ>Zt#xb6fgux1r1by~MR#MzigF?pU&OY7$82=9%aIZzFdbNra5cTP`Gh zr|)WrFKJY7$PxF94@&Pl0sFT_;GN>><}JL-HHVs~5NVuIYngd&iIh@u4|Wdf`|Q~x z)>>(+y?zwC>RT-Z>Zl9+Kr@x1&-fbjLU+4dA1K?^s`i2C1;A}w-N)UQ)PnR+U2F@KDKN<$-VL@G4rz_ zMqckuOmq6h`gM+bA2b+l{#hyjEPNLU)F8K{D4`!heGK@9a|@4TC*M!K3K9#;oE;vzLt(903_Ru zq9$--Y$!w_e7osMhgnbK9A9+>&2J|mdU4bL_($AC=!D#n2GSKC{gX?hRC$YGmF9W! z`HB>e3UNARs8C>VRHO_RO9_!fNX&Stw^8Ogtdg1M(ni@RN4r>k<$U5rme{%FEub4# z&Oz%eQD!p5i$qVz~)}GMF_C(Nb#wUsy z7YT?&cuk|=F{%ZEajHfzqVmbr0PGKgHEfvdqpFN|Hgy!O*crbShF(3%(|MehJMllc zfS_Q}Dou(UzKQ81;=5lf$)k%NT$en4k=ZW+iSn!PJ&x>RRrJ2xd z`H9Nmzyz?{X1HwR3CwFh$}FnIjk`yToZWi!$FA)V3V(cT=+Y6;q&PT}{P5vTn~C<2 zTCiv`;l+jEE~r~C7<8|(BZ=bzcqW3l86cfzDc*sgN!A=wBxy^QRVTHSYTP8L&FEzO zrtXtcljJY3QTB&CV)E(38XE#m1CFN-cpUzcMV;7L0Us5 z&~TG=cuyS;i#)iG*@k#FhLR|j4Kay}<~3SyT>-G*eOSyc9-j-519M0I5aA6j4=dB; zHH?2k{Z?(*ZqOnX-rgCrShZfcZm4>_B^<^8${T6>`Fh^vr ziMj1KkIOzP-Oj~!xot}Id9;ek`)8d%-iflk(+J-OqEi#Hzw!S2BWWV?R4h{2f9M1r z*`_vS7di-76!>i4%0*?;ne&OC6XaO5a(UJz^uj}2b3YF=&(Er0!T zOzXZM&*J|*#NRlC!V@(P;>s)kyt}&N>r+^Nvv-B#h5E;4h*_ua-r1UX`)| zQJzIocDb~1twpI|$_D?Uz^0Z|*gHnRKN01y>M?I%!+i3NlVpsgGLEj8D@Oy}xRMx- zSWyt_3ULTdNf^S6ETgPWWfDSCgDUl3*oDfKOQ680CD6e_4_!rK^o4(R$!oew+PMyk zu@~{wx``u3DgrNVe!Sq2G zJ#HEQZ{4NlyrnrS@aHW)pSrbb;5Fz*>t=TRImE}ys4|?XlfB`LdikL*<{d^>S9%E(R0J$X=-UTtut6Pc0qc3h+SdVwrE-rO^ zfUqll2wGb~dyNvY^ovOTcY?;Kq{}<8c>iw^b0Lm&vF546#<~%ZmcULU6 z9Ck;gd5*L%&U#&6fgkQS{)d4!%J}R7seIv;`G4!R$qdiXRX(t zsaKcB!&8#`Rw6+t)@9X3O(^9obAtCK>Cg+%r5WO|k8&lR+z3&>zh?4++X#P|TCm0PI&9`{;gmr!~u+-Pi?RD z(`U|p$noOj&;5$LPb(#9vV&c#qAiOTjZ=1$SAUtX-MeJ4cg!rWdSm&t z3x6z-6OJGE?=vXdLg9rP7Z`qX1J=s_Bx|vKX!; z(~2^vF7ZzCjk0veuHd{}59Z>Xe_GENftvcQXb(~C*fe6I!Tg;@F(X4Co2SkdH=c1D zvA+c01MEF#^Zvb!(Yv*)8)$c~+CX{^96FY1Kp`lwe>@!IN?t-{3tB<({q&Phgsg%L z4FJB>15lb&@-Q8HzOGy7%?d3Gxv%;_REc$G2y{yt1gQWiuNw&T^F%~5K(&JmW59t` z9R-YMpIKZ}_H1fIloi<=U_`T!(jzPsmXD^iNwIcQXE@{FOg=hUnDwK+PQqDCqP+tH+ zi4yT@h#ZdJ{|*fbk7E}crhUE6zP-*N$MSIh$rx(Ck*}Buw&w4)fdswbQw~(`5?A~4 zjLgP7w44%Xeg|X_+7rCnGK^VTVglq07=hq-_zR-Z3@@@~8IGSmA`k5s?x}$99gdyi zS&%krQanW}3_(Ghp5eI((t=t+u!K!XOf_#g;W2TLN$D+T{QK9C2xjMC1p|IA8Q*^a zZ$Oa0)M&M0Oy+^MsdzjYm=f2P9W-1t+QrxCEhFUICeOOHY))3kAKLTW3<&?gK0`ed zZrb7je;0LK)ZMc>`O+`ah*h#%S3EVmYFkof4$<%HwrofQ?QL%OMLZRYEJ&{3u8j5% z_H^v?$Kq>7-Y@z!;v(?Ft}b7|5;G${Zn#1jNzlm6x3CFVP!!C!jJO;YnUgw@M=Zo}ww#?pzB0GT4(}cGJWKcPt=P_ZPBPT-v)d zt7CL)CF1D_;;9qq)) zSd?inwLW3=d>z;kHMUx~S@t%b?J(Db6}RCtVq5t5YN@1id+N#~`E^(J1-mRVYxrkt zU+rk8%7q?VAplPo0wz&WJPy){>OJF#*-}yaP)aXE{1414@3`=aOH7F6ILq<>K^)g( zHf#-r(qN<&luG4PB~?%YRVrloW@x67%3yj@kCPBZGY!;C!w)g#M+Sq#rkWDf7FcFU zqB(m-B(@5~%@UIja%(2|D+_N}bMfs%%kSHA$Gwp5TRxs&nYbQLw`aNq@X>+%;+xOk zaQo8gBU>i?kzX!bdfpSm{H4#DD$ncz~xc(<%~d(^JUr0S<4yCyBUI(-HiHb z21+FI5Zi^5hC7dj@)lB?h(7=Jiu*4bJ-jX(iWm%S@nj~sba%-V&H+Gs((S2iHl52j z;^S+^$J??8l6wWiQjxmgy>O>MBsVForf-xcvIFfs%%mUHZGzCv7NG}Yi{Qkg9 z*?(FxrPHFXt(3xM-@pfC#BrX<(rcm2AyNgbhDQ@|oErg7| zC_-<6-}hwAN)a;m$B>l|z#{mT@F^6zO;`tIgE&Phm5Q0N@}z+U;>4b-@LN-VaR zS<_%Q0U8a{=PhrXV0%{l76Ts)xVdAn=@-KuE6Q+#FRT-&tVa4?;Zw(sojEQt1>1nz z<<*LM#B?$1HYfx|rn_jyli+;zEX-e1GK&M0{dnP~kxum*jW-nnG*y~co<*8;IZ<20L0ZCG6qkn1?kI}`3< zA+x6aS)FLi@iVY3SF$t9cHTKO0-P_hxZLe7SvS~bjAgPLtENE6K~H^O>C}*|T0wkQ zVhDT9Di@MJ)OtgUe(#PLg+(CKDKDKvD>$k_6;Z9jLX=*ko+)c|A28#wGiBjvY)U3G z=+zD7ZVpqkj@Wt*cyjK$Aq^znLvdypyNsG=#f%VrF@}}u>xZ$S7>rF*L#N86(!7~+ z>7-2Q^0o;&Jc@k2W2T%xEt=9`wyB^d7}PB6E2pQrXN~9A%OqYmW)IS5d0RBJnqqCc z@7(Xz)Jl|PFM*#bZ|>T>nK99?IgJw1?=rOoL{?w@Rl6V6bM%95t3+&#zOY6v?b(za z8W$|@Om5xNY_p4t7IVV#kM=;zJ27O$VUv(yATl3N2pEx?j^`pdj)!oWfbmg_sTdAD z&>=!PI!%dAfm|*-Q_h`K>w++%4TmE$H@uqn`huRrkZ_KB-U_TJUE;{HDr=g;fx?VaBVQxD#=?7))n z(xdAxyki86U3qBNo5#r_y>u7A7r8n4G38r*s)b| zADeMUu@Ndn%H?k8W^!(3N*M(P;t&R+Fh~Sp5T)Kx&6M39_ni>cN5?s85Rt#E=TJ=f zfXMT0A*U_Vw+&__AGwvXHpVuHc|31!Tz)-*+&@_9UN zRO+47n~bKJvhlQ7BntR2^^}b_j}t8+uO=ui3k2Dw>`#f$^fW{dJztkQw3tA1FIr~DCiSI#Y4`Z9Dh(KZU5&@L~)jbBa znlS?PDJ)EeQ34(gPyq-b9rzHrGp~(F>J*BQm-$090zniD%>kS?jYjj&o2VnF=fF*C zd$(=>OWBveM^#<_zx(dYyxI4eH~X5IH6mMEn(rTF^YBmQ7QsS&2kV>D0Jiv+7InKxH(m z;3J=vda?co5gPWj1<`oib39;S6hgP~QW+b&oPgxKvwjcVU59T1T%ehp`!iqJGOSIB~CZc`NEzz;W%&yw+j3z?9m9&FlA6l4Zd%{KCbty zk5TIE!r~I?_<9b{JI!bm79&3LiN$Oop|phrw18=~O$LS8 z%ANO=1n%Ew^xJh{npr1RRMjd}HZw4KV%dWGPldc_Tn2KnOr!2=Ga6)4B}8o!V(xjv z>Q$1(MNmmeb()SwrAa1NgW@7_S`O~vX=Iewz!1^P#_TG+F^z#bUjo{zL{3pe1hr6v zFg}zb?6+R^EhW+sN)@!*b#8_Un{_G8#Id>~^U;xTfRv&pG7}~PYsWfG$7nD3W#y)+ z1(}m2Xh37Kz4o8cj1%<7Raqs+s%&%lY%s84x#BUK!B|oZeqZ26_Bo-^+$YX}HlfjZ zdDuIO#+ZGGOD&oyVmqdlsu4ffhzTe$L7{mKM|~^N3Y98KAQb8eif4+SV&mDtH65e? z`$BRIDgP*<98}+yovWKZ^aSW$?F~Bg)5tD(Uunhr`QS4;l0A@z-qSjKLHL<)Hc>^i z64Qvg*`_w%`F{j94aJRP9mcU@qwwjtYW@2HKS~?+!hwS_0wt`xLK&LB(rMp;Nc4jOSWZ26+jlfLwHKQPPZwEOcjtOmwYRKLC=x3Q7?rgKuk_>u{p=S$x9WQ|+gH>)kk z=!$NdRJ*(&^uhDmvIj|W;Z{T{NsyzwUufw0!#m{^{#4Ut+ zL)<@b;sL%6;Tdp9bPCmBU}f+ZrR4J?k1QQ^zvvXYe|VV76|5evMen4*{|@aT@RgYG z%y12=fdcOj?Iy4nWEZOV0Q?Ajq6jgO_9FQL#O^$$Qd0}XD(VFhAcfDPE|`PYR7&3q z;nyUN_R)a@+(n?^EN=T1k^ zAEB_F=gY#%AtVtmgb?z~oKl}6B15N2@qq1x{4qts?x&kUI(Jdnez_k$^ur%{@^JhB zJP4i?K1aw2{Yms)eoUAtk{l-EUS@==c+VmoxA#lvWp_-Bge4Mqu(@{b(>)#0TUsM+ zVcy4aKe$7Zlz-K=ZLO$RF@LhhA2C(z?(o4 zq`h|)ZF!@J+adVn80zlh^I&kT@Qm;woD+nV5`eTqEGIHPpdyrqDg<5t&kSY0MV=Kt z^zAED6?*C**9gtR-DvjbXZ2EkkxvQ;95PN=Wp?2@9U>=s#WdTGkF7!W!QkOdHZl@) zJaZJ9CYyiu)#l>jEnmOP_NIl*4x2*ZF#DVt*)3e-?B9YW-~t{n@ywh>mb6fFH}|VA z{`lbIGbe_9Is>95#5IzSBx&JkK+`v#CaKjfy9O;fG}qT^)FiS+u_%9}j5aoo@yCC> zp_jk9qvTqo2zTEwz#Zn!asQ8dK1mA58$}AD<%wY<)Ck`o%tQuD$J<3E1rjJl=+C^1 zkeP++v^+U{G-+y$LpZv15{;vcw~Xf13!96}w*BMyth^j|dLWqL8JE}ldGG50bp;>? zxvx%Lf%8A&L$l zibSyYHT*rB8-S1T-)9`d-^X$11Ra6`#KBBF{t&&W{H$O(D(`y-f1igqj0$I=@*DW_ zdhP@GjUbB3XZ;WUJ{^^Z`SRI(`4nzI;O1KdjWDR46D@?Smy^h5)e;-D?PVo=ROMd6 zEI$E6M`+ruItfI?bz>{BUkIxyNCpfgoQ>r8`+haQdhN4w20y#V&0|{1tD0PvNLjeD z$*W%U_3QWjVOtsZZ|*B@ko$;?J^gmq^kWa+aeP*&^A#kiM+ripMRZvZRY=o}27{PJ z{Z=e_rc!JqP5|K%rP5}NFL8{LQ$kFmPM8>x5tJz0#ZxLTzd3J8#ON?P`|At91tcMQ ze38!}CA+(YT6b{`cp;cp5}OMOkbDpwOObp&F(F>#Um>4XgM}hD7qZaa_vjTLnFkNOvZupgeF{| zO6;ICkY^QjA&YdO`tol7bN!t&Gus-PdMwW`-MDeWnir<3Y{A;Tl80M9rsxcYd#=3d z*E3pgT2Rz6b@8gfNKl`@sKH-WkXPH1byJHJb9F1yqQ4=oLc|(2T`u!@y&mY<%X*>C zyLT0W2kT)F2KTbaO7g7g*5eSry}A>?b6hT?JRX921qca0p#s8}9FDLN@nnn)#DhmZ z#>v|w{N#6(!z!5zbL>VjT`V{0=Z$X=i)Zpq%m(@O#8?8EQrj-RbZuCUI5P8JO-s`=sU9XyeZqMnT|#o*g?hIfSqDF{k5%9eu3;HwLk5)yk{+?SYVm(IOH0=(WqVka z4b7O-aO&HL0V<$Dtu{f^BWlSK08{{tP9TjbOPzZt`|(R z+vfJJSstC1*F_emxpc}|^w5d?wau%J&AjQON9Vu&>7@m8x9qrcr&?P`9+DZ|+;6zM zG}@l$R&INxCy2(6goPwbM3~4Vrm#^3u!AswCMY!HMF}ipliGv^?>(%E%9N`8(7#u0 zMj%VRJrv3kc(>~ltHYY4|FU#ssvMvD^Be(#h)Cp(Nm7sZET!c^>Ref>5# z$MpnrTzdJ9W_T~W@crji0;p0tvh%vHA7+`X)e z7Q6OlWzhi`*vryXp;V0K%X`IU{wAGoyG5`)8ZDOFx9dXN<@}ygewWzC+SD8vxBrMG zNqW>q8a)@sqoh0)WAhwAeJactF97IZExF{zoBp!v?*Cm`+*eJ$cgvr*od0U^(7EZ| zc{Pl3YFAIUY({T!dq&pef>>Rq?oINHBK*wC6)(={`swoa+d5o|=^xE~qWi`D3m*rf z+qY%bb!FVTarKbku6s&uY46%tkzPL&P0o_)q_ZL5K55A)z4=Alhy+UcQhHpFBz3wWjI!sp;K=K(Tksg;sa=U^%VCQ_W=2uKXI3D@ilLJW7Uy=-JV~4*Lz5!kD*p7 zKwMaeX$c-^gw$9J)hJOCs%?wowB&(mBV*)%md}BqzVeY&Hl@@}UDpG29)-JPTI1!% z7f+AUPOG_lZZRocj{#kw&mhBqPU9)5CVwAH%dDBl13Ew~Ks3{cW`?*kc{&ps*i@8& z6*{-7R6&MP8J$K_1&vlK->z0lz)%ci9vM0AE$%8!z&MbAd5Po-e8T?!vI?9wAu;$} z2Lr~(4+HtnGS(-*k-oejeebdbOY>*8xAdEiuHLq#`M#Ii3hz18xY_lME)wA$DewJc z^SUSRZCbQu>FU2{Gy3K&Q=0F1?umwnLsHZR>yY*tQ5%GbFA{A~I~oJ(F$Pqj`2b>p zfGiIMA+^K=R3-!pOnO$2Ckc8pLV{i|L2dJ^w>caUI!u^Zn$HvUBRH^U)aS8K(2Ay` z|1}Y;-aK|M$@S~+8iO@QPK}Af5Y1?)iEg-e=znhc*__H-W=_7led%XUF8yHQQTx1( zvk&ZQe(va$j_kHFl|cUGg366O?YH%2N>m*?r!PM?C+PcO*&HCkc=LfBiAy`!Q8xIN?GLt3Z4h0OLp2%bDDpX*QhhErmKq(wX7jGK96MC%$5dEoK~bS~1N1FJ3pM175qzE+6WOS0dSX08|3W zew-FEiiQTs=^s0@19nBfd{}BqcX8kg&>@v_2g{{2QxbU~4rJ3Z&pi+;_30!C$$pBE z>=2&+Asx*_7S|7)i8i}Fo-O}zJS(~i&zeaBBUv$FV2!SA2+b0xO%q3;YQ`d3^?!@B`pTSJ zKi}W~LCNtn0CsyGfYU}+^$chzSgADpry{!(54VIZcyKURQKp%@2X0=t_#WmPQy0>$4`97 zT?k8?9-DUKfk{jL_RQ`-uY3#4`;@z!-BC_UXZIIPj2fr&Nc@M3g4`%Z;=fsT>p!3U z9IXBfA#r=Qb9~)PCol@X8|TYki|{}P!UIa8KRGfIA_W5Ca)iW1WD0~MbeBl1cRe5; zDIIzle#{c`U^AKzL!r;a?g?(>}&zg;?X za!%ij8MCJM&64-eE$hyXPAhGg8o)sR;L4SU6F}ds=>7BT{Zn7uzu*ZV+PHn=&9`n` zHALRMv*^~2&fBVMR^cAfgEL|9r`ktGdPoZC%bZFlbnao5N{7+NJ6MdAgV$yU>LFUG z1*81T?b=lSJnfhsa@B+r^^pIl?kltNkEx`~7ef;Qj5@|n8Tg&Jc+S8lC*VV+)S$X7 zd;A{+XL5dXIB|wB$#8SvHv?H<*=YhT-46_rTjz zOBV0$`S2s~^7@DBvN~4PZQos5w-e7**1%$@LG+jjhSlj=BZIN&-z&ud12LdfrZP|@ zcN+{`;dA8eun*5mnxvM@s*ItBTUf8!t0|w530BMy!V7MfUM2*MjZmub`oObkj&S=g zi(ZOa#gr!0f846lWyJ#qbw3W5uCSk2ieD~I8;($=(JgrtUVk14W zf9vb`UYb-GUvi@@KCT=j2J9=L=7@foH3!P`b89qr+_Iyt zfAjdr+-1HtcwTO^{Ue%xS9AT$_Hap6W&Qr3C1-L$ZfAdwgFjn)9t@M;Ax_eXwQRLa z>T)k6{I2#fj&U)Hs8uiD*}SE7Qtyn}6ZfxZ-5a~ZP*-r*>^a4&*A|W+U#Ap4 zwZDRy#8%B>r26^Ib<4`^hJ#hb_cb?75l(6@F0HS`x?GKPr%<$oKUHQnn`gI)#3~ig zK$TM~l2T3)>Za#e9799Oph#pEGc>yO@0I3&S}L}=pza5Oz~dC9Al{p!{EDgl<5&0< z0gmv!mS0hauoyJtfIh!f%IyLVJtJ{jb&^T4gK~?HySG6kJ^e0RE!H~&4b7yQBgC}z z;f8=4??QX4t(`m1`-<10zNr=+AiTs5woWd!NTKvRyU+51g;ZIb7E%H&7Pk&>ZqX@~ zM%Ziw#?O>~ekDl>ftz&;pkUA))amsO`Y#Fv;TWJO-&pUVuBG7xRqK?_!}K*=h^1e~ z(+Gs({P!fLPgtxuDKno!J(Sy!Qe-6Mbz9vlYiheY$|hETCoM*mq(jZMWwz&cZmxgr zNc|o-{osbWiA}BAG;mO)(!KXHnYdt4!}`ruEXQex?+m2BMl@G!WCJzWHtJ)@k2m@o3B`(JbC zEv%flyr|{Cs%K7YAKri5Z#SgN#Z+}wO-+etS}weItIJ-xV#1_#H81SjIe3?pnP zeKs*(_DL(t#Rhn?o(epccb<%f=C1Yz_ew zNoibK)bR~I=o@4W3>AW*K`Q7OFhkpbMg|8Wk=($5EUpvkv-o$U0k81& z8Agr$d9l$WmdJO_u^%V;*!+0cQ%mOWZQs{kG4sjkYaXd+3uhEp%-mPsSX)(9SI*^6oS0F`G)!(rI?{?b zb|H>wA`RyapiEMPPtUVbsfO0@)=tCFSXF4GA__|XgU#mm3@Cowi^pe&h?NNPMxW?} z#$w)m7a!WN-%dKNW(N z4kXs<&&BCH7aw$S6j%wFSQ)28$+&?WMn_g{In*1@nDOl9dd5pz6-t%DW=dnKFWf-B zn!E7%-Mf#kEbi25yuqePJGORAOi$D5f{;bjM9EjdKM^%}Cy@zLLl~iPkYG*zI9YVS zC>0K9A|Jnb1vR>8A}d5J>D|)7=*EM6S&^BCHb$!RyjoMFrT+XB(X%=IhaZ3Jr5g)7 z)tQqYym8IrQ$m*qAe?fq~ID{ zj;{1@?~~v2SJo!3%;Vl6zvHj0OI)c&PZg3LbY*?w$~yEOHOZnYwSJDC*8>>r=hY8zSa$?Csiq0`-gX-Hu?zi zZ4`f!Ow!Ydo@DqZZ|BQoM@c|X{G)t%D=K&K<(pD9)A5=K!1W z_znJvxEu2R%Xhs7mkZm!Zx9}fw;NR{oI^0U-MA0X|0f|%ZGm_eNKpOClvw}q)7w$JzusqS!PX^%_D{6cYN8pWEo7BRiio!h127b zPP|c^dgD4ok6O4UF6sD_N>NhMs4Ro8bwlb&W9rF%QUQI!_PC_uPs)=|cA_U4{>j_< zGG5XKYDChg+{Kq~O4Y2P5|YLz+L4!qdyw6p%4X|WwXRmDVpV*mLKU#%qvq^2tVQKP zH#}9DX0thTT8G6Uk~?k}2>iapu47G(`s|ONV|VpAbU%6wU3SS5d08NQom1!}zvwPr z+&*#$9Xb3R!kRlo+Ypxa5ZSEV(drC{-*B-qRjtdV@|gUZR&_wxstSNsG{rCdlK;U3 zhrYz2cOVge?j9X}o|_AD_;ej02ZC?ie!Ywvl&O6l?kz8)k*Y04B?jBrLw>E}SJFHpwGTM>dR{Sp!RC3bfW6o3S(%87i8f#0ap+4=0U zlmTZsRSLXJ6t8XJt>|7&)Ch5aYhwKOP?bTC0FWX_5d75H($-Sy@2+LousKjUrKvs7 z)*WaF+3USc5^EY8XtbHtEp4`t8WzXI{@j2SY_MdGOQ&L_%*d4HG~M77$y{0Gp`6BC zx18+IIOk6AS)|-q05&Vk#_^8QLJ;4>6ecerbl@k_ScT-U-OeDJJ(%X#Doy~?VH1+b z&?)qb7e_E(z<_fFc{FG=ji<;nBy#eM!&}zzhQ)6d$V~1`=aEpT-4jhSOBSTp&6wPK z?~H6Zt1hQ!bIm%@{MT*SJ_C2`SbMuU5VgE6Q!9!VKQ^QI#=eR6m+Le!lHf>VkeTb@9mYtC}8?~A(SCK(Ww-qffzOK_Vqc|jXkYYFG1Q+fWLJu9QrCr>Ey=tP|WfC=;OnE-I4 z8lqH+D2))ktipJjqO!7GtU_Ds^1Td9gnjsR)`q^>o9XHFVg$@-1)*l8%38Gnv7qpW zvENlHk=KS9F2T;wsSy7Mcix^;A^uam<#oK`r;Zzsr))~dVDuNv9wae)L~8_dfzzb zCvh&xuMn3RL@g_`omTi+xwh6H@?!EG=%d$e*9o1*h_MvmAseS{)%mGbQ9#ftOm^s@ zQ+O5_ITbp0Dg<~v8l5=qYL4O=sla-9AdOp)6c>3g&d=7d{0Pj|rB*67wiCpe`AlYX z8@Wpsk6xV6b+`!WdM+{Hi07~(7k6)SP=S8(^0PA|kbpF@W8S#+mkC{W^sB``1vVdm#?v>R+ zWCv@Q1#-JT>Yg*RX+kiY(mG9GlhYw4VTCa$Q%eOC+h)#-ZFpz01quWT$t(6OukI&@ zp8siHj?WsfYJ`Y+PbfQ$NND64B&%Ygo7Lr?76*f+68~vByEV(7*&6YS5m&5hIGhbhB$B@;Z|;N7c<9Yx-i6s0IAA#Vd;APO9Wn^ikb zt5i-G-D>pfTMd3nL_`M0yjib=6oa#_jl3M}b`~~uXQkWxCKWa2?eP1_3n%3H6gS9> zMu*$2B8_87Nb0~R=5NL_k2L$;a(5Q(cV}25s3(wGXZkDLz4ov$HxDTF zGPA`j+p6?Q$friMgZwLM9qh$bW1H=EsSxYfAlqrwJ&vSI@n|XOu2hc^Yde;gWiBsc zCFiTIN9@qQ6yXW(VIsb_ORxY@Qbshg8RFB9GAArB8Y`HBGPC#p*!vRbwyJa8eFlw3 zlI0<`oOn2i9mPpJD1&1;c5Ed9J3vCfr8Eqsk|o&|ktIcvr{Fj$l%$j}l>z~BX-W&U z_wgvSy|+-xU4qa+`vUFlZTn~!ZIvb@+?EE1&=u1<_WSleM}r-g(%$yowcg6v9`?Nd z|NH;{+xr|_lHjVWtZ(ab*&SUCHFaI}H84>POoSLE_Sx|Xn{W*;Dw(6oyT6LLZ}LiC zDNv16iubF*`d+QKb-BA~>T6urGVj`D?xxA=74_w4)fSe|Gn*(b z)himxwT)Ao6eNUufW#Wo?poAHgr7jZU3ZdqA4n$SE?vdU#V$4_eRs8>r+sw0$!*oSX6FXR6<{n!?S(oe(XE> zxRtGP8O+bfaznv0!V);!zv%6yQ);|%$}^XocNb8e8gNAwqVhf-^y2_6B6s}tAFd5O z;tPJUZ{@ljUz$26n2PPqHA|d}izR{Pol9z(?embY`_;eS_@$7u>Bfh>k+1G>axYYF zxnfI8^&;n{%Qlr&Y`*-mwN(q(TzqMVdgi*Goqt!7)vmJQBTJXAmRB6nmrvR4q<+c_ zf}rHEI7<%H@zQ(3YyxFRUYvCo*_F456;`JI;aZnJg8-gw3~ybzc%Ea^`inaj+M8`~ zyu52aURu|-xTwlHJA|aNih9@b_5O8bc^Zxzpx(wsHeXk_ZgC#RO}(IM@f@^hBpb*E zS9Q^mrTWs=){7c89MM)geNV@|kv+C>&$jI9Szo!jqh?uiX``{IR4$%+r)c>+r!l`|p={UamR4$REs5z^j%|lqItWqCa0)-+lR7gaB7>TFnlV`GU~Q&{jiw5x@Ey|Awg?k?tzn9U0p&6nkQc~d2J zeV49AgHxws&vS=YHDqsEa^LToezYBX$t(Tf0lv*tQ#IwSvun84>gxIVMj;?H-6%)} z^I^p$=ibX9G~QyaTwG)Q^{)$-E-p7gmIg%iUCh@SUDiB8nwA||P}Q}_E_W@oJLoaX zIIjjm*&$ReVJlHinJV|Jk$Gp+oI3jAM|c!}2lJvUmF;E8RkvJ!?cQtZa_krCG<3pKjZ=b@9SWN3P+VrORiud}V3J>T=n+c{%kNv)~Z+L6b#fk*jbaR4^{6 zDZ(K>zpH@WW@V&*jopx|FM9@}v)<2CdD;GBODoKJxuxQmFyio`J5N9tADph*U?X) z66SnUPeI35eJ`)FVewS7pu9x7#@0|`DU}N58K!>Fu(AAGhot!xaz3|rMXBLqo2_zn z3Ad(TX^lNkqnSEdvaBBDFBBBzFSYKeXsIk*Qew%MG+bk&^`feua^==)xft8ALC&{Z zcDjpJ6wWW=ab#IwUseFEab^(u*)G`Zk}HqErJPp%@~&kyHC;=gZmGSb%Vsxp>Frv$ z)vPl>#@Fc%Z=d_M`SjCBi;9YiGN*P;W2?Ze`dZ0isknl>x1dJ*R zFL9E6@lZBj_eT^8~gqp@h7^@+kf?E{(xB=>~1_`HwjJ~Hd0xwp>w zsoeAmtLYr~HNJ&^LD(a165r9>p*f~qtNo)cpfA=xZqOUEN;th@-EH$oi&kfERYJmQdnE~jUr#sH|O17yt4Stk`*P-+paDZN_Wl|=HEE~ zw+kLFTVM8#e@Hs@Kbgv}FaKRdQ^mcN#g%teo|OmXf0f@~xNG5Si$1>Sr7A;Jxa#-S zW7Ve@U%L3o#glfg{q&OSmpu9pNYDPyq?*>62Ww6&?OOWvWd+NAw*2Ddw=e%m?bg~o zbv1Pl)xBBYRsUQ=NyFZT|LbUS>~;KZ#qf&Xt#thPw2G{H=^v1eubNz~S#3ElHLt!L z$+vpv>PK?Yi>psGnj6=AXu5LF^g!b;*T`%9=cVT^qzmb9PH+Af(($IcrpBgqO&2$9 zY5I86C!73D{Y}p`opbg%-)g?9`B!VNUi(1HqLznR9&LHMWxQpgm9*+xt*y3JxwWSC z_SU!7^|n>CJ=cDV%jVj?zG(f^>nAoeZg^;8@y4-@f4u01i|)PHbn%U9dgkJHFP`qu zcjR}>@2Kji?P%<1>*(ybLQU6nba(9N*xhkQ$HN`}-0^J3D;+=Wc&p?6PIITdv#s+J z|E1K^8SlKg^X|?scK+|q?{@y6^B0}}xoPu-^bby7ykx;8{!6}dY2BswTqaz0>t%;G zYc_vj^Ut^3u;sPOD=)wK@|(8`TccZ_y`ubz9;BmJZoZH%qzmcqkak^27t)1vAzerp z(uH&(T}T(wg>)fZNEgzD^xu)#-vAr)>e8T%`o+B1()33)&k>!uR?YK7w7#t71yW*tM$L=FWc{w1*C79@n%5%# z6E&|RE!LEp*OPf>PR$!gRsI4sZxn9LtR<1<`E6?6M2hkQYTnGfoWD!WTgaNi^^k-U z4Jyt`Ucp((D>y581!pC%;H=~ooRz$SvyxYER`LqYN?yTP$tyT3c?D-Bui&iY&8j!h zyn^!<5+Gg@C1Dc7cMpjZ8My%xK? z8c@w-GQ@E5;^*9$4XK*a-d<=kfVHTeb74=%1X->I{g>jmA8p+#E_2PU$ndvfo1NXq zX6i*9wQUSNqD-qeeuf$L=WCE&{d~Dva(sYlqUaK5>qQuv9yY(Cs}D6pO!F}6|D2|Z z?|Ei;m7m!qto~HAQt|^RMc7Z7Nt?E2dLG&{h#nv2qtrs{ksFycdpbe_D$3M;j`Xmo z8zx_a6f22?elGQ&@$roeqcrkqn=1MRkz|HJFOxc!@c|_Y6n!>g9Q762&%^Lje2jXJ zpLv0gjiIxIa#$v+dUYMz6y8vJD-4qLy0o__)(Nuzf7y;)FU$GVI8(;v+TX{?gIC>!8Y-tqRD!64MfzEjm!=abec-WfhG0OaL zW(B2%t{gyJkj?LBQlxt;Ccnn zS})Vr&)A@kVdh~xNZV$jIDqx&zLCp?F&4+c9H!}Jc~6ec0ftVu%Cl*<_Ons_D)(gf zvLR+!A0jBg?ADt>>JyoWm>r!8N(xWqMxvK7OD?CUV<#Oibk#xCew0&W=KYFy)aKxo z^_VCmJ0Gd@V=Bgclya9ZgG!89Md2OA$D>T*0cOu!$+KuF+@x?|)?@s$7)Ze&M3%5I zH!>{ZWTv0bUSWWZRw6W}?n_?OW^J-IXEiEEFO$Q=#t$*eD!RoQE?Wz{h1LIr-;g-u?){Cdw+o0BFj)| zoRl3Yz-$~=PcF*rRQjPA4CGoWc4j${v$C(3qAKl6tuv*=$w-S)Eb06Xa@y_NGugrN~oxnv8I zE}WzDB`Vj<-Vv{2>=kA?rLV$I+gW`7ea<|TL$c?dxo6F`tFwJgUg=oTByS0Lqv2S% zCoXRcMgDyppd1bK_Qhjz)F1Ol2mQYKjh_DQXuu=)d17+6-yf2F{#c+l zbBc+=BFqG8BJMMKYv0-oM*$P;8O=pPSwQRwpoqQOAO zA7j-JInaY_)DLljP-@U09Fb%3XgJhc3qb-wzuXs&26l!+aSYDst_VfvpmHiI`1>P} z4RW#>w)I=k}&fY)-YogE}j>Y9r z7*hK^-Lxu12gm`)5%9(+NRWco1j9rAsMizo%icau)Z>l&qpFAl-M#@o6%dP#URVQa+!J7txaR!WEbs$I( zS`wFU96+;zd3wM=j2bj1`@-Gku*4j0K7h%AQ7{~%Hi#f90x_UP zXNUb6Dj^m>@Tj=o(@z`x!{`@}QJ)LToqT8up)RNiY z?~R5BBDC5Y?vHpv0eH!lFr1XGd@4a-*^8TZ|}xN?2FiljgC5gkj9F8!T>P@dMeLoRLm8^OAn{x44esD%O(iA)@o&*A@-ZNBmE7X)<@|5PJ-Im zzJ(cyRGRCum*MM2MCPQ|`FxOI&+)i5k>lsPLXDu9CU52)zL|6&p@(H#Oz zz+3#1`fyt8qYv1!A~(kL6z=Vp;n-z2Yu z?Q!CLRQus4+E&b0)s6MnmR8l*$c>KI2ao;_KIZG5UHMo1ZgI3=j)1RW2){+;$}si< z#PHCT-~;=M`{S~3N?B+&s5ZWwW870dl-26EtGLTOYV11fa_qwIa=-2< zvejXgIMp_SjROtakg61(H}Ey}p#dHKhj6tUktC>KRt`5i*`f|L!P*lWE>G~e+w-!U{vU{iXa zQ!qC=Ao}HIZW5HnGJ{Ne>!CIEkpL}V<7a-RV45i4<2u(j`i4)`hEFbrPY|`QLcO5l zUJ!S!H?HQpvb!z-D+kSbHw1TjQ01pGN=k8WJ&Y!2{vCqh6TKn+r&#|(k$-zq)V@O3 zzA7e6Ul)OOYm6{KrcCzMBWim3nL=r9!2n31Q>G!uNx{Z*!N*(t4lV0(p+H(&;rc@pq~7N!TauRtZs6lSy`acm5MeK9+wai27bI`^#98Z|%TIP?(!&zVPY0kv zg|8eP2#6#?Yj#vbSaui=;)bni!|W%y`~kj%jsiA5?02Zz3xo&!L;}P@j;r>9exYGD ziRxz2B84sX=e5e>?QYyo#41e812$H$gNOskw=BU1aI!81`iK@8vMbZ`c)+> zC%o8We;a&!vDcBZwv$BD7B+>?|FEkUByIR4VEBY-m=2M$-|L8>nc-KAthod>PGh(V z4G`!B!T|n4rNn}boBJJ(_ktvQLCd`$tlC$~HiH?6aSFpWD9vh!6ypC_NT_xL67Uy1 z<;DLH*Z)&<(E2~he?V&HfTfVaS&J)&MVJ|C!2nVr$D4XV7=~@gn)eXnB8DD}wXdHZ z1J=Is{^Rs+2*6KBz%)3^x*Pzpdc4mOyjB+yz&G;;JcZBiu+;w$-0o)y^*?0n1#$I)h}xiAeL@W6Y!A8O1YXq*@u5;EdqGaU zAS1&kK&>~nW;Z-Qh|CQ>%ppHv12Xrevo>dg@pIaoY(xAKQxFmG7c#{FJY^bueA)ky z)sRO4CCuzn+Ck7w&gLK{@~jPWkLL1+1EZVFE7n8x$}pw_EOWS*d*UOD0fitkpa&7q z0}J?x0N92|`H2R@L0}|Bi8zpf-5+MwRjcY$Y@awpc|LcJHpJc$w3)FUG|c`0A8XxB z&Y%B84(4S}lhQmz1Yq>z+aNd z%wOFh?k?&^dH)J~>LFP(oI0tlv(CD7U9BJ5Z=yJDp{O`rq%V8hu5N&lT9e!)2c^7? znPte7DELsjevvsr-#WZ%^J8=L02TG2aW-JrMsXSsCVMeboH?drmBaRvzA4T5$EL-O z8&6!4H+L>%6j|JkKP7J(v--OwB~Q9xeHQ5V{<1;O6S2BI4C+1tucZj=lb6JNeJw=x zH?iBbU5&*3f#x@v@!LR7&!&ooy76+Exh~H;tIX(0*Rkbe=OtUgU~tdPRaqV<@ zb;4CULf`KTdDJj^V;3RkeLJ=4fiQqXZw})bN0{vS5W!XnEwO`W__aK8m|1vmd@LB= z#S=n1aSY7D+;o-`M>9TCwAuL!8u}$w46qFCyt3k#5IS3#ZRhpYC8@@_T&bU;(mje+ zF5;D$h7BsaE(4PG$n(FG*NkWoLSYy#?X`#9_G~!g1FwW+zUC+>6OqqBRlE?{%(-(50h|is1;EPV3EYiB}BBp(!Sg8xn8P&D@)#;S)BAFE*UN&J}9dvMlr4loOc> z@)KGUzG%pZ{gxMC>KIDS8n}?cN6OM)6V|7}jh8=gi`VlQE_p034oZ`vk{(g`E0+YOfH^Y3Ni>+k*DMwyF)3<<%m9cHf4yHx`3RZX+82$< zixA^-nf*9njLA$Vb76BkWO^*AOmw!UH1l*5A7)aO`IJW{i0oxHb#?(vi8&YNa?LF8 zJk&6iYw2^rYdo^JGzA=8iA0VMwa%OciozxMDVMq9!57Rg(h(n zUbRI25ZPr)ng#WH%!KDaI%hNQAqt-G+!*~LP6Fp$qgc1-WPkt>ec>R!Ts>njnOIue zmLh?!%GjR-tw5g59r^dZDz`Jer9i}Fbox|CWX2Jh&1SZX@glwXbWV&x6l{ zbw$e4_|d9lQLJMGsuINJ?2UJw;^02zrIQvrQFB;tm`W6xohA{rzLt)sMgw!YVyGy1 zW;VmMxbOgJeQ6?!P$er`o96Hc0k6AW4O;(oKIUg<$9 zPg_~#87q?%%P6*~;w3JfNBvuf#Xgilr!`o1Z98MhO>FvgOihg>@M|S;p~>@eoPw+* zF%K}^+he5+d}&HBxH2z4=j8T6K%nZf?mjwnD2<4IPXeK?XMd7KIizA}Qq(qHMPq7Y zYoa<1KmC-enhiahNA`Qth%-z9TUJIL(c(PI*nNO9L%}YVs$-ONR7tj6-RJTu#Zqcs z;(hjsDq*lfL!G>1=-@?RYn$-IbZAd$Sy4$2jrd~G^sPweae2qY%HQ8I=;XO-nvE)1 zj+~pevW>@;VjxHHqpvK351vO5xR?uZme6%KhDMhKgb(Pqs?W9o>_7g(DyIdwpw3ok0$=aL@+Iu9Y%++ zZ}ZS-ot^9oXeVy9Ti7tD4yw0?2E-JU|7v!390*z@ zN1ZR}%qnqk=-H}Bt;#%r=d{`|9cU}S`b^UDhgAM2R)uBFG4mX$?r&$B@`(mMw*B;? zc!C?T(^y`7iTYLovs=kx-T^F@GChGU%R+d(B8qr5DwpUNf`>yX+%~;StVC%U(l$p_ zy@^Lu!^578CR`(rw~pBlgdfX!*_|T8x?M0b7DeaM1|p)h6N=(`e*}3;5y| zO5sX#nBf>kA@KB@(cMUl-TZ)4o>4fO2_CFhV5b-(^q>@c3*bUqNmwZ)d5rPvYGuE zq|X{|@(dwf@;^#hYoTn4Tv+%PJFBL&)X5x_{srD@? z0`G0vIFpSkYSPLN%W(zB?XSp1nw+%sYwsBJ{ic(DF3zZ$aoIFy zB`jI9V|OGZ>-}DdK&|8clsVr&5RMl(eS5g+*KVsCM>8xlH0wOZ2G71$YF3e&77iW0 zeaU1@sJ-|(^Q7;ZBu*6$lMVe#6HXtBEdY0!Hnx}wlGe0!T6PH7M&D0Sv3X|H>eYFX z5T7V_5@F^B%%0)McZFsHmOu&3)|2a%xFzE;G|l^mQ&EnKjpE|dHq);BvaHXNPQ?(Q zG=Fl~05-@8NF=a4JC9{M1Cu|%8<2Teq z$|Nw@Wv1j9F_MF##~dxcWCGca>Mc_gPw9qwPtjMKZg~~#@C1#mkOOq(VT?2S0#>uH zV3t(3*Tjx(2ybEYLJqG>O4%8+58V;_7)`vf*_y^Hgc3 zILi=dcIwKnn5Jw-!ty;}3qO{AYHuq(&5>?Jpt=RkNB;|~DvsGShvKBRPR;S{pEps| zMa|Rr-zIW;j#;%sE^J0heY54UlCX=5O~U9ei|&kEZW0^>1iCy8S+u|)m%KSBI`j~j!JS;0EbFeseyjh!YFXzkwm(4b3Lt%#5Y*|K4T{IXV?h6!J z%^Bn&I=yXO9Z8p;r%K6dnc_>R8@$YVWoISiZcs~K0jH6R-@p>lqh^)OTKyGO!k;0} zQ&_rs0{3Em%X&`{0Y@m1oi{nelNnF5a!@j6LWS>8tRaxXo54R8R4J7qpS23=b9bHG zL?bquV`4WKc_5vmP=6#Nx-2u zm*+7JxN}Spo2-htZze!x7fUQ3joPAqaC+Y@Xqm!d#(UTPqOdAzM!T3sD!g)|%GSi; zQWSn2#<%C%o+WMGpH8Qkl<3HfLp)7WT9_Sfrly|95StX&FaE7Rkw39uG6BfLYp8n| z)wD`E!0DLK387d8wVX}$Hz7Z0HB5QGVo2^zVZm?7TABSJ55_&n0Coxqnf z#lJKw4fhSlqhjE{-!{=k!NJ|!)TB?(0c39GdShYAXJ%rhq7||X(<^SnYNIDkFLjtb z_@q^>H!d?w@y_uhNffS)$)hf2A!>C8?MeOxue2v!khXIH^ODefUU;CZyFN<3`wQ+l z(4RFf?cs3>&X&pS)6M?pZ*eq4xl=TgPKpJzFLiGvNkVjTUA}n}_~AKez|20(Ungqd1k-%SD%TxY@tDR?(diP$Xt za~klV!CNwD62pIJqIlA#)f`Sf1GAVLG^kWkYN*Y8#!dm_`U>UoASAaBiKFQ8>oM9#;a%9p_G|-+Ni92BM>7aRymh6xRJFP6xrCRy2)@k zkG)}cqjSJODTl&D+{LI55@26B%TSn$hH8S3^ly+NYISV!JjWM<{Vl(64a3h%;C>mf_niG>UMp7|=Z` z=P$6)a^Q3X5gIK{bYKbiLlZ;wrd=1B)sYDI`&QOkF>MW#yJ=0>QGH7Hr1mRO+VX`I zZvx}{#YQT$m0M!@!h)@}`HlR_h#)L0PuRS?obR>@+k7V zOn3CrvgC_c(``>&;O9?5%ko&J!1c_=XD->pyYR8oX9cR%0YpQb~Qs z7Hbh~#!+48{nPqEa}tT)jiyYD&Lrevqhq8%2`dyM+j8X>x$|Vi{s)VsC2#}DpTmx z>tcg4^BG&#-?m;}_PZ~I*lLdXZ+MQMvTpeQKJesD^Gr8FYK|Zi1wAf&X?qcg@xaW%PQro@ zSR9>D-P8>I__APkC{mRAG<`j4!KYBKFz(RsUQoM=QOCr_ATA;h_ShDepxjq1b`ku5 zd2kv@8VRB6=;Fl!6lkh9HJTETO6YeBEMX<#oVr+OTk-A?jXnWkI(9Aq=O<^TsBg|_ z^$05U5xf~HV-X1Utt@1%PGY(}o#c_($P-{VRJAREB1KeafUuk(B?aiA0AVUq?F%3Rfr! z2uqluECS=omu)-E`=xXg$I@(1H9$LO|NflBmFssn4{x*FtQV$(HilAboCbX;7@Kwm ztvqS{i`1ZI(_oR@Ko(UK<7Y1-2Luv0NkGT=UkKATy*rz8nS<`Mi9@O|% zVu?LETU3fZ`eJw?aGMc2I0tDN85D@m@9;yx-?mM`h<;u%KN#6@3G)YBrE(O4CrW+LGN_Knit&zFS1I!?juG_i|$I**=B8N;a!(9~V4My9#tYNpyzgAdxeGd$!_#ahGFKj!W+L9*WCNBi9K~we~<|cr9cZV zT+9|B1d96eqJO)d{_rM||DY&-or1nH5(R#ZRh1!JZDoGSW8C8lmZ zYv^E04*z|5Nxp0PohNAv^Rxw~i_~GCRA%Lw3JzvYN+-mqP-nt;6SgnASw6RM2I`sI zUBOhq0EUTtW?agK?_Q!QzuCqGHK(}zprvx4rSMZZT+qEU#YTF>^Z8#3=ZG0fWj=dK zxu8rvV?j~ywP>{wl2!(P9uSC@I6DNOYowZ{RWFxxTn04}W+g!f&JuA8mYo|Wfg+4X zt+L`91OV$re~Fjz%gXEwtxU?Q&&*095>=O$kyZyMKU5$SQq+JF)t|zAf`wW@wa;az zCLY`}R8_+&6Vp3Gfi{2RfOyBqg9sFD7Kz(og5sj#X6^eKet9PM8V7+@3|9OD%6T); zPZGRe*Ax}v&-)L^p1_?C3kc*HG~`f!VI3tFqlCv{ix9&;GK@kS%(leb0N|G{pD|1K z@av-7kuKx>WY%o*{Pm`8Ea^5}(!SCFP;**aVRsLXNQ1wpO)l4P5q@#UHTGlZ5;R*;4o@Beh9*nTe)kKFJC|8Ij zYg94%2UZPn80+sb5B;wci_>3Rv}&_k$)xDg_FJH5x)6OnNMZbG_dC3?jz^H93svGU z?_sjO;1J^%(NXTk2x1~7GTfRp1m71MEp2|rawD7zbU zrskPbRdp!PW!Xo|^1;Ej-=O3!96LMu+x~r^8(_w#9k(>Q7OY2HB7l3g*X;-=cqi%` z_KT7{;&|3x=SvPRL?UUV9J}YnYFPQ=y z`I2#k;i09R%&q{TL-8?LliZ01HD_N(wfpb#ZVg2{$iz9pF3fM4^V-C><`Xsux4qRA zu0&NR>7><`Q1Yvgk_v_)a$N`!xF=@c&IIKpuA*wz?4dZR^ZRKZZGu|1PM5oDUeyZ0 zP3PH&3$7Kv$LOErJj$CmZ-bYmrnCE?uV*Z!cxq$3I!QZS6h%BS!mp}^ZqD&h~uARJa>7G2y177Lt57$+t!6*>uiCC1M#vK~zN^{?5?PuRat?jL{ZQlC#T zXkUwXhIDAQT#qu~Gg2P9&A4z13{IF&g;Zi-9`VdabG6Ot@Jue}Wokwoz{K_A9_1yQ zCaB}*Yi329a1uS;NkN(t%$FTi~^wX@4&Ih^`*1t!flQGd(&k z3JsjKtuP8iRy=k~vkF+w*1IPb9uV=DT$O`#_M zC>?RRsNUR3qmY73u&^IGQ{HUj07v$HsjV18ViQR#udPpoyW7IJZSwRAi7a5AH^_wn zp7IYxfEz}SevVxu0gvyn#%x#BJG{1Qf1;Z@36yI5@(-7A=VDw1|7`DeCCyM$gS~y( zi-SPxUnb%HI6O$mC@Z0T7b2%4F(fN|Re%SO8NN~!q;h$he~^amGBiAf)PPDJFIa}y5Id2 zWZL=$i>XZ|`ou}Dc}WiC?g7Cu%KsE`w4zxi|}Ay3tOkmI*;6GIHe`v zK0aTfE@Sp*{PdB8t@3nSB>mlVOftkb(xR)6W(l5wkD0tslZ&!J3uF zL9mmecf0h>=p(cQ`;BBY-w5g`EG(!yu3?T><# zyT$Gb>Bs$QF379e$|^1tCLpwJj>zM(HzAvsyF%@F!y(WOB9Tw?TgBYH_dehIXnTe2 z!KA(H9J##ZeEmel-qoD;MzGRU{4JDbnIF;~!B?=U_bhwH%kR2e9}QY0iPe#aFm_AA zB>vJ1v#35K-Kc5wqnE*vcC#*Pd`N^B1E@cf+X}w;BrVn;s<*-$j#7dH%Gdv@38(Vb z%0tKHYJjtbe;{B{f*I11{r->^e%D0ng>TFc0y{`{lM*x134#>A7BZ+c?E86y!V=Hd z3w230sC&A%YzXt^6twF{s0l;awk~_e`TC^&LiH-RlD=g@rMeeHupzi8GH|0k`&V$D z<*q=*>x^t*6(3 zA1#Qqr?Aue^Kee+H0k9k2=lZ}yvQ*F4@Knp#arXCO5+SD?n~HR>vl;S;}9E%12ubb zw<>`I__^CL3G;$3VRW2mxdmN;fx(-jYHzLYu06z%HSx)sA|_XaG|4cKrMpia7mX|N zWf^6UK9p9A$3&%xa(mpVSHR}KDyUN5M%J7;%Y4L;mPFMmtr_N%6;O1Cq^b#Yim%5J z-RNLjbL(4u!n;405MR!Y{gCnoW!xC&dYrXQ1RZs}S{RwT);*Ibvr_L89S$HUDyWre z*u$sjK4du^-Vx)nwVr2jlb>^s*p-?2)=X*Z!PT#jS~B0LUHyoo>`K?yyf9C=J_52V zJss+$tflyfNg|gfUEh*IA!n=-x+t7~QM{oEo_QwS2t;b8LMA`#`gMyQVyn|D+ zIm=4ymV`o8iO#Vgsbi(OW+Yx~rX45l+-RzaS?aTbjBuNc$O`f1S;iqo+=`4l`*$8l zyBzAA^}{I-2shtH=(jhrX@hE6ZdYbQ7%@xtGATfFgNkLM#e2NQhxnM627jLlgQ0uH zJ(HQr{&ji+?3HgH6;H2i=tdZ-lDxeH_kerg$1)qK=mthX3fixZNDOn~C4B#t5}r~4 zc5{?8h#@Zvg|pn*jgK-?{RhofFH_0=97vo=@? zF*vuQKu6>lVVGbkuR>+NAzNre;TYJyVR=UrK71_J!?+t)(ah{Y8FVO1+G{jVMJr}Y z!Ak?C!OoPuNT)4L340k-l)^43P#H5z4CTC2(-(16@tLA#4{ll63ZF~3OUd899fgAO zi#~aGGk5)_xv3-S;7@xtlCiA|Ck>t@lA)G!ib(bZj!dKryw+P9O{Wj)(Yo6Ff4ly4 z@8$De*2*1*qh9LqR_w+HjMtu2mY=K~Bui2l3WVRYA<2JTmbL^Pb@h14n(tCAP`}zB z#dRhLg1hqIZvC#_5a{{U^3!==*dX$C7;HCURA%<6dwJYBxy^W$N5Z*cK^9AT+MN&W z95XUorR!e9mVi!mv(&1`K%Z5M4U|AVE4M5G?;w|Sqjnc@a;z+kEts1{uuk>YuQvh4 zITVI|^;=v}8i6{o*@3iA%aVo5>nnY=aEird!hRwF21zh+%#rOi@rG3J`C}dKcy6lZ zHSX78Qe5)~CT ztm$L%GUjB@aDttuUeG=T@EIpaZheNe1T&0m0GapHLOX2 zMtgN2$5Qa)e1~2?i8fcnQsU0R3$@Try*`Se>GheWX18bT#h~>^e=&_=92YW=?~gPL zdI#1sxv6?wy$wz(0m245AI1z#Qne?wRSclLL_F_jKo=Q-82rn-L>x_bhJ|5 zr^xqyPo}>rj?YHLLD?Y%eV<5CR{1_!W1GQM281)@hCP);92Ew-yvFVF>RDM6(K=SR zOo#cYX1S$tW?mhwCkZ*7)#+3j4j}gNDbDsV4coMjf4J?Q`t4pV5`MIi!xv4bg;WU4 z3E|Zp8axW-)FpUJS{4{y(9}0~PV9(RThTFy`B7XU5`E4EuIeE&R>`byH-t|na4Mfu z7)mb;>mAXClcmu2^0_C`2vfu>Le~%d+WD17d;NuxR(43P)Ua6=X1J0eYv0|IM9FBe z)Z8_NT&ML{3aj!Z!liUG8ef3+=r0cjV*v=a?w7NGai-X%(DKn`lPUa*0B78v9f(O_BcEGA?$Oe?abkE|!~x49Euj7v`C zpV)r{{v+vM+NYNPDE*I4|0m-9ZS&8C{$G#(j~@Qy_5a}Ae`^2Bv;RZZrxXAGa`68! zEBB`s{|Rs)$EVBx2a)H$iTwP`5|%d3rjE=KHb%~-;-=s2OiY>OOl{4bEk5IeQ&12Y z;lJ-5_bk2mO{*XlwBWxtSZy2n0D^~_05}~tXy#|JO+i1JLgWQJ?M8U-1e>9XnK7pJpsDcpSRqa6)8UC`W+= zKJ7;)lcHSatj$;A1#XnRQj7DG8p?dt=2brp!AvdXKv@VU8)7xlzSb~#%5gs!cc16J z=#)NXwlWb|V5H^a3nHXB5A?BDz$W~zcFahwc7%|5Ju5A<;(Oo36ME}(ns@Lv@yLUm zLpcp{7M6)ukisoW6}H4U!J;INzn6lZTgB|Sgrr{HvAyfNtiH@OGA9ePIL$0`n9%vJegE53pJUE{2AY3k_+R+{#neC` z_kZmEIkEsb+1dZ6>Ce64y$Kha92RiDioQ7*89dH5a7TxCvK9 zuhnI2|F|6*QWM(!4pryNfp%MSu#NEcLiSgu%l8Z$wFcmU1KO4x5jvh54}qD7E}erD za2FE&x^x%#nY!$!VZf-efKskOkMWt|qK0)U+3lVN*>;bS{aeI#nr94|^PX}LQO}C| zYD!gl=4C}F=&k5|Xp)h$TkUPH#puL0s1`lG$?C)LPxniNcB+o{mP81@c>nc>Q*H8V zH(s0Ven;{52fRiPNH|J?f_Q?w?8|CrOi`HWj$(7c?=uBeBZ+O0(XdCpD#KZ!FyNBR zjfLou6c*HZSX@&9M8PaKEN@IjA|4qX?0$Idl5fRZUm45Uf8?k0|1xTPV!t7nGou;= zOy3Du3r>sWhHV%Bkl|7eZ0{&5^$_=oN!ndzM;wtsU!t1XA5-fol{kt`_hPTrHe*_= zUiE7n1DFfHGc}4epjw{ViSj3u&oow;uD$J7ex2y4V2{TCGoSuI^SQpd{OZHo&{m{t z0xn|rWd@Ki^xcBS$68`oH?u7yY5q*9L**|8Rw1mC+>80blsEDoKYJqnWT(v775PGp zB+&dsC~rKirl5*!#|i7X1~|<^hdHQd{{Dukv$Kuwc=q))}op=uflWffG}HzZ`JA4+QCX%UgtG5f68IZPBsv?R?xM z&$|=+KN=_a(db=%Zo)RAJ%fz1n?+IYD4zcB47_qJ1@rEFp172^Y{Bndjj(ef&$uT} zxhoJK(*7vQ`W(r=V0%BklQo zBDdmXzZV^|V80*3?lJq!Iepge)m9G{dmKW~n^eR1I2cRx zw!)=CZxdk&6H&8~I+=3h0!W_Z#^cV5hrF&6ZD-=O&}vC8;dhBJuKdhdrW18%LW1B8 z^Vy3Nuy#n|pj*8YTjy!XjAdHfDUlq{#AhkHKOYkAo}E3pkVnj-1q9b|#^@qjL1RkT zGI@gRh?62Wv!aa%RU(A5hZeByxfS^a{k+|2+k=0{Op+9&5J|MJ!Xv2w10_Z z&SLK~MbtBuO&9?G_Kw7wc5_|(qc`MEC>;s&X8YbRM3zP;pR_KcEEkHfs1%s3 zl5r*-PYO@nPe=3sv$iC8`SQfLCgOU9Y^WZI6c|%y%Abv(!IAgxfOZpMb`->cK-mN! zNf3f0`n_BAWoqQ}5dZ=M3EIJsL$R4JpMT`&I=k`-eI&6R@(K&XWPZ8;wML&+cqNDc z4MVBquhivD&W;J=tLqqaflYu_331Qil~k!0vSK|Y<%|21Z`x&%3bO|UW~RNp$X{(zLaOtUM-_huH`Vk;Lht^8UqeFG+N@x^-KL0ZT`7?%HtU}l?pKD%&3y11t6{a66;3 zS`0gIllV7-4MA!EGB zcZ!ihR(RrDo|q1R&Pq2WDS$jSE1wBpmOVHf`i{{K1q5BTNpnmW%C<_zVWAt5!b**X z>xO>^r(exx#J3Y9>+NoPIr>0;&zV@Kgbqlyi=caCtZ>s5oJFgj#-uDg#685rkaj z1s!$kmyR%92mPj@s3aSjb}h~iX^&p-wiqhZ3^*#c>VzG>r$v(nQ(v ziz>xSIpHnkSC9`*GGjI~<83HGBi#LzC8Gsi%8RL)Kj{5MCrk|ZRG{26f~s!{e)4GJYFzIt(>>svCw$to^+fDr`d}(*uEI7)G2|5X0JCS zNy+L!H=q*_%Y3U%Em4#Nf0Qk|$3H?N$MQ854IQ-<9;^)c7G-P2q6%4z^7M~}fm3@# z&QEX>4d1m73x(!`y)3=jf}}TcG=|^__#IA1h65_Gg?Og%*q2?!R;)W3ekQ zHX;_6Z5eKD94=3;+*`yJ1TH)?wjLiZhfjTgcQ4EI%I%RA-Ky=X-8X~T6F&+Y>3mY= zP}@RtNcvynM(3c+hnG8K-{gns3L9U^s5v(ziCeRAHr>>MGMwF7FY{K{*NaP1ZA(cy zv)es!sr8#wDK9s4)IHytl3G#swyZh!NWwgp{}3v{F7Mbc^AWkASXT{TIN=qd_(Y58 zT=b&DRyYzBf{HaIGr7>%Q(>7>(7wIvOL+ekV*1-@?R)ma>BY;gQ?jM!Yp}Reu?0Qm zgkYbFiq(-UlOeaP6UXx_4Wf?W!ZBf#wq6c88v$j3MIjDqDgnR;XU(r9A4wp2sh{&mK*p8Wtsr7HkP6!>mi%>ds$_vza^>Bp6L=tGP3FST!Gze z^A64ekakINbV+bwnKbnW*6UR4IBVTsyrbh$e(TxNs2@E5E-!*h{p-zno-!o3W1N5(=e zKTRqI#X<1~H}*mBpYrnNTO%8?IaUPuxBMJFt~2_wq+Gi+|ge;RPZ1(DI~``$(-a{?OG(=W3wXy~n111#+XW?7qZFWh5=E&cDh$S)v*XL3&{vre$4 z=;?-Z1Z8T!-{wYcKmG3uCr=INy(ZA8($3i5%80%dSgA$AP-kx1ewnwLEK|X%oV0aw zslo!MPiVEm`u^Sd*NRe%l2qerq3f*Q_g#A*7l7m38dhCDcCZ^Q*fBahURnT}RUD26i3cT-5wq{KVTu z&XAsT!KZ*-(KYuTw~$O+&d$h9*jnC9$=<#B4O=qV`15;xY|#sUvlV`peK`pq%n0iC za5ZQ=$VjNz)71EySJlLLUWJr`YsuyPesj7FbnEI#@OWT0@HeI8g$!f!;*eFsN66Rd zO*_?$ORDfL3uswmV42pahxi(5(M}db9$c<0jfQ~asff-=5EY7%MXu%--ywh#9u7T% z%~;FXMj2fC+v;jkkJWWM91~i-0zM(GqWp;JVS8RO0)!!c{w2EwoTad{8AC#Tc@gGq z%P_CHStRcxYs=Qv0}&Y!aQYP|zq&m^U-6nEd%E3QVSME!Wh^aQ;RA8;_e@ee?>T+$ zmh$l>>)^hJ|7k-y^Ft$GW*0KKckJpRSnWcjU}d&vOPut3 z?~5tJ+TyWJ)ruOs-Hd^6$=|*ve@kOK;0hg>Z1qq>2pzY|;%GHnpy$yG#h9u`Ly1n2 zHr)~n2iD7>W4Eu)Q#eZ2mqReB;L2ghACqag6YPX##b8_o;M&GvVY{?vDTL}(E}o9m zd}a=b`*GKs)(69&ZBS!hhVs3X4Tm}o77E2Q2lAzjQU z$7cfT7rSaK&4aUEdt0UFqq4->=J{H|ze8-n;U_`(mfB8XI^S zi;31-k3vu+J1sk0;d4jlvM z3gOHqlQB8{#*vwh#w}edF&Bj@b;$nLLu}l{L!>f`L^iU|fN%%Yh1EU$ZA< z=SXxZIMlvWR_Kt>h4aXmQ$H_Fg8s(CDB8I1wn%uDdEVCHHZwmJlyJVuSSfSkRkS&| zU&i*#&GzI|bI#=YmXF+o8VoUa+rEsjc~PNq3kJn@_{Bzo4eMzU`NU)=Oye%$L}~`g zIGob0q%Y({0V6btIAkOS@`J8Bb&G(d$+grXqc;y63cqO_(s1!=p%|lZ)oN>(7BPaH z*Q8&aUzlQP7&NA8Y*z1k1BJRRUBAsPZg>9hUEFYCQoaPBFaVl|xwg67FLZ?3e0=R; z8$jl2k2@7_h;Qs3$B=L=LJ&~m3~_oN_QF?fez6nA@C*_oDp8Zv6wOdFknz3C5Q+@z2sS7bMJnFQQ2Enh@m8}O2c}`uPo?pe_1-V#?Glb7oO|FwQaY%_O5N)wr$+CZQHhOx4X7&+kT%v@Qv{u zt&=2UN+TH?CebMaEuEMkc zD?l#wSz+TvWRC6RtucQ|yxPec`b^ic>tI?`pRiSHnnEY<3S_`a2M<;Povn|5ruurn zPc=3-G#ByW-%2INZ*L@c2nPvVT+TbMZ=<}SpjtB-ZfUeAJDmvzBapdt61R>TwVXH@YMed*w&=wM6(R4eY)n zVpE7No9}~>h5i&`o4^U6b>m-+C^XWzOMD*c7vYw8K_RS@P$`mg6B;g=_#2oip~GWV#C&!8oC}h z5eU+YA`H{iCb=(Q_||%1<<^Vf9D?VdThP+o3jBEq0{mMbB4Efis9TGLcQw%<$1)J6 z36YKV*1nxP)S~CjN3N#uDmTOE1_TSbS^5kE`&yRtZH}zM`&65FQ%G=;nXKxOS>G_Y zxHR)0a^ap-D0VzW=EFq!cK%MgFT{FN{$=y+cY^M z+s1XaVpiC`b5=0ETGq3|ARA-BRRolH4VTx8B-3wT-!{=PMVLvwATJX|UC4*cw!ZIz zg8tQ`>}4dzuj7Ig#@FsDUD_$TU0)`ZRW2KF*TiX=!He#h2H*ug)*JTpSV-auW#oi@ zYuJ%jHZ~qRgdtJrPepqwO+;Xio*Sj2wb5a_t`&bWgLLG0Wqp1i>sk%thy!m$x&~@i zaXptPTvXXV&ycun=SU?7qFqUeH7N!|fNCEYy6(3jih#N{NW@a)5=d0Qt9JP+-Hyd> z^i#ko3}~N_Dd+|y>r_R#pU?+lrP3{Qb`n`>Dg$BUkqeTXbG zZ)^^M+ioELa&XQ0C7%vuI9fk)4cTv!94=Spb{x6LyeMBxZ}KVb!xJ8$gVaxy#4g`m z(*Ab;y_M3sYLwBM1&2F1{3B{3eWi6p7`l@#40kW(_&2bc{ZHUrd1%xFkSFSTRAbz# zX=I~fk|=eUi%(GgvLXlqSRhEc*XbtY$1A4dUuFI*QWwtXG!2~Z7YU!vYgosm2*c@= zl>wV~TU4)nO^1`s_CuTbDXRiV)V}wp!4mVGQsu0;DSanTyUy3@2fUw3(|_I2|33R4 zeJG=RWLrXF>TM*!FfRchQDRYaUbh~sL?Yz8 z;Aw|gX*y1i>>m%spsQP9Shyx=UUsn&Z1d_S`KHE!@flP{(^YpKjdsw4o;M^V%|(Hn z`cjN_%zt%DWG$~)HF;<=60TFRvPpTPX>M**uW?bgw19KU>mjSVP$tZRYdc5#JUXDZ{F0j*)z8uTA4f0Pe=8%>4K zX4KXp$y{{v;_c>~(^*`3{O_`0JksjggcC{VLHj*1x9oqokrA?aCd(T2cZc8EQ`Fac zeL3s{17czKS?!Y#sB1twNn^=HY^A?d`JmH5Vk{(?MycM=}~x%Oi+o#&lNDzZzQ&&l_eD`HK9$_fW1ukG+_o%Y5=f)|0Uqeb1wz=>q3(zwliHC|-;X0fA8D`v zR4E`y2xJUegM-qsx-)<_dlfVX)p2WDB0=H31!u@FZGbr1_|M7{J5$Q_QuOT4HA zT_1P`-}|yK#tj=jB_{Og##7m7vlLs`deaI*EUvDvN2)B2jjo54D)f;3$?IO2_e#Sp z=Ljy%`hX(i$iU+(72aBpr?-u{Cn@hbj-ofi_n~qpw~DYg=!?z_j^Sb%PlTsZ*zNQN z>e;KLvJ%3?`7vr`sslhIR3kzSN#>5?`cOgG-5mYQpAFV4^wp}6`XFe&2$QTcP@Ibz23x*)^)6|bAa zH>BC+J6+hGuGXZYzmoX!3p|D9WLW1|5ARP*-HNX!}{diRo;oNh6yn^IsIVra5ONyi<;6 zgsKlAH^evUHq{GPbl}9ZKRFBoA^v~AZ?;%xZ**8UF6-Mp7y*;3>aJUh3vZOVR5R^% z^YA(9N*__H#fgYE?e2zNms_c|DXs{c+6d;ePbBB&?0!}7reqJ={kFhM95+#HIJ5}n zL}0y&&eM7oqq>iQYGJF5{fy6x(p>oFWO)@5fs#o8?Q*wI}XH-LVAxn-; z(^BTIO`9g|fJ3R8l8MHZw}Re|cP6`89vby_qMp~JcZvh`ZthbJ-tgk<7nNcs5v5Wc z0TcHLP|?j142ecw0uN7MW3jx@5Nzu~6Mj2umD(A{W+7?gt{lR4ddZKi19_Xo-j9*| zI(^pz?`GQdC%u>e{Pwcvlc%*`rVJmtgrjND^S6duQ6Xvj-}4jrN4~xWz)fg~HR6nR zpX14j>GV`Hz)#%P^7Vi@lUIHCA~s;VP+ESBe|{^7dR|)dYBGT+6Ly_gzM-pKX(>|6 zjS)k$Rf@I{fr2{fCY}dFzaN%5p<4kGUelx%8)>q!8L}yHXU(|Ya0Q^iq+rrvEFTe0 zn_A6GF@1-NKIajij*ad~U>bkYM)hZlt1TUt3N| z)$DF|w0hH1EpC{D7hqe!%+qI&bgM-a&@rfz%qP?Z{~ zb@;kzRilbIyW_B&Vej*^?ppfnk-IXvx_^D-v%-3QKH;(B?>T>{8Jra(3J_M5#9oZP zb8UG!Iq5z3BIC9)sA|#hQmCY7!s>Dil-(N!=5USFq8lMVT$_a?L*%Ak>M)JX<2)+- zo9SiW&*#Tg=@|+p{|kQ3b-WO(4-$KcK;xl(=7O9h5Z2NuN!Zfe8^9%9C$JfmZT$XF z8#8(GA-ni@a|^a?JA3x)q4Y++g>IvLPH|4}Uq=+Ip*D4)tga8}XP!o;j>NBj3>#gi zYXcTWQqcY2`_4(Di1>15p0_N&y(D;fDlX+v#B&KcuZ`!Y0MqxBs&l7Rr8ggMY0?Amqf5OkL)E9ly;Xm|yf4b(%A$ARbl`(Toy zXr790x}Gu`rGvIy%4TC*`wv!66C3Z!9;3w&eCSg@Z>je$3+(Z3b;s3p+io9))^sGW zZT63tbQsMUxP0guDB~S&UC3e$3UAhkfoFj#la@|Nc-_%^qtunF2al?rN@NXQ(D=A4 zZiW){AJkg_z8uF^H-V1D;r@RVa;1XEp@_M5$zpfF4V2^k(y9-IA#|;V+>7zy%wd#b zzqn!>rc3(Obh42_!1&F=g$vtA#c-tbc~1Rk`RP@OET(K-Ipy6QE$fw~w(|v!x@Pl6 zV()3^7f9St6Q7UOR0cQvd6Z3qmc4Dt*vR4A({T3R68oqz&`u7rw9aSC`T=@qbNK<< z!6#Y&dU)Mr(KShIi|o9#(|_vn_EMai&X*D4=DX#Ye8ni$v6*{7u4FFrr7m3hWmmp{ z-prs|`-(`d@fmrU=qcDYeJ^+ma%kQhudJ;tG&?wPoFS}~55`$_&X&}`KzDR&&TIqe zA<=(}OL&9FYeBpY?G3gL?fCHIbJJ#$p$!l!5Cr+KI(BxR^JD6No(!F?q@fmwM3>(b7eUo9*+0m}W z`(Cen@m#@*y*zEO7t3!~QH6`pCELm-HCS)1-0ah>d7aOtqAy~W*h3T#@x?c&6qhXE z#14nD(_u}{X-`y5PPHW9cZL3W)OD*QRhbxu?=!$a2xTkh9&qWG3qKpUl3TKxm|zqQ zq0=dtzhcbNL~M1BZP$^zaw3pxr_KIT$AWl@A1|dzYD7vPM+DiAYME#9GNO_d|DEHs zD$zgFb5I`8^whVjJ&^_e7xJ=0Le2*0P#RHh1RIpk_k;=L(Bz2g@9s*^g%i46=5FRw zFin-Zot^`m04&7Fczfjvu`x*XRyjzClU|=s98q{KFG|w$l16bmQvMpny6)lVwxtID zr@D11OHxl{sONG-QHxe}wxP_6NRgZkN4HLvxf^uAzHQDUhR;Vq$9PvB|2EF6n@n8{ zTC3Ezdg#M0-`GAn- z3OhEcHoLqN)1Zbh4NlC*P6q*l&)0%Nh`O-G@xef(TXfp~nMU{&2GpAGIP_t?o>>yYyCsIXPQEkSNEqcf5pd4?$Hq=Yh z89Zd<&m?#K!@nsoqkl7l2-_yn$S9e{WV)G1-%xT+2On0Wz}2AI!Xl$Zrm`cGZ7-N# z{0b@giJUFAoFkv!s0EV}I^Dkt3 zwmPO=%+6w6ELvijq9m3q8|>B%w3As^4Yc-}*&JO>T)47LWwM>c#l^CiXT5WyEFrC1 ze9$FmopVb0*SiZ}!1T5SJs}Ti$0z2W`$GOd0!o?g-m}<}t=S=;cRX8Mt}ITZIrf~p zufDslxeaowM;)4_GQRwI;fabUwAE=hT@69$5F`{wl!r&xmsnd9;WD8eSpn!hIgoJt ze>QDhRbs7js7teX8qDG{i}9^i8})2tU+Fe~{Qh%d&`qvnXaR8=<#+{WvW%RvbQD|# zni6QNbRmHbL;g2HlvDcIoO+ZGWp}rC`&u-G~9nr-BNC zOTFh)qaER0JIVzKUFF>h8oUy>L*mQD;q@n^XtNQ`dA&yERe+xCtK;zR;4a{N$`dI* za|K;Ly^nIEqk+50h4;rMBl&3ikPu%XvNu*JeuDIvueh#Pr1CW-mj7da~{uzA?G6yn$Koo<1CBI7c&kAR}9*wrR&cEI%=5jSd+q18MBp% zM0qjA((yQlS}Cyb^ZWK{%psls!Zw`1(9f|1C44Y&nbK-s!}yR8j!t;X@9kC|0YWi3 z(UcU2Oh`xjDd4g2OhAAaClbLFNp3GdYaC)NXArlvvK6hF4rGbc0)%C;krE!!edbgm z@@#3ZQ_QP}2Q@3>x_a-_Y zIZI-v)66vuIqt;yc+MR;@v5|4D6BnNr`g9y61>-hzSX#gC_MB>tL}oja!U0YH!l_e z-?4|(iXn%f=!#q!1(o-YJd_4myDFLVKU^!AfhlB9ffpz_pX>#V>)?nbwIYS*ADK~}vJ8?*;EDG+Qpc>uC4 zd>L=ajLy%@c_qdc!52CtXKly6^fO$nTXJ7!9z3D~zi%wW@*mZmqV59k2VBIzXAiJ; zQTP0)jPhfx$i?G`24cVR<&wakW<7~*u;fVz$CLutF?v$@Q#@wP*lxIpIEDudiDoGM z*?|{2FLoHAqALU3{>DNlHBB2c85#fe1E@@1E)tYm-RnQ^7}sYn{wK0O2t*##jFd-4 z1vU?(>}=&0-yDmG_eN}QxXD2u>~3|4zA6=WCGV^Vd!r4ryX_{j)ziUhCEq4TJYB0} zc@Ih7OLRm6!rAV;rUKAS;|2nNd(LWLPG7Mc7DYc`hta@v6bN|{Vj!BAskSl zz_w8A+(7z{_|+UG6x)z5J(?22VjkuzLP6H`qOMpm0HiSd?w(3;k?wkQZ;sGEq!Pgu z788PdU=?@?#R|zvwS_zhCX8{v4^JpH%%qA*S@-$tQdpB(jF`?GIWm>DDsV#+z4Bv6 zsk9)O&aPrh3#U{NO{pFAj}_FZmYUob-#0|(Mqy|#ne-}{#gx$ITMm;Br%Py7kmWtO zS8dw8CXfC`SYy~->a^G~@HO(%+3)P~wZ4@$u1ruI!4;s2pUEg`n>|E%hPKf~XB>IK z(wsg)SQ;6Bnx^ca6!27P{Obih7G%x)8}N1trx_~Y1=LVdqZWzs9A>g2rcAEI$~|pB z5crgjf5=FDJ|CM-@RBV6+95{Gf*`m#6%S$*?>VbuD-y^Y((|#Yw$s(&ck}P~-ls;I zV59zU+_fn0caJ&m&$gfUf#q?7{B5_*$Vr?#;9C714&k=%VgX` zB6g&a%O1x9+=5sT>>!x7oLnkk$%8zTm9BdZY=+rfPRyJJcLrQgpwBi3-7Y>WL}+j(Y<>l&!H%Nbv+!-JwdT* zQ6uJJ#=)s>x9+V#6r8b1RpjN$YH7ZF8GxEvgDxo4>UGmro37&ktzloNBe%sMqeS;%$#32in*`hILZc3AH7!Z zCo(Y2-5>v+BLCXD_ip!>@zZmIeWFxVyAM#kU)bswZoXWe5ucMj4O$&ufUplXTP`bl z_SQr-*yKM99=JcNwtAh@bEB_kQ_zGFI;Y?Cz;!R$jzM6ZFpZP)p>29!*ioPe0rwvm zr! zCjGNf^rrHnK`*1;QCyWFdS#o`a1Mbx5i-kigg6QE>%vV)o})k?plvMDmYz{&f42-I zYAktiwlnZPUNl0pN3N@2_XYvXI72!sO2hKLePRDg0rvErl3BXRDDK5>*)n12rg&!> zX_AStp|Ng5Xtb{8BVrvM;6UnKjdD(#Zz$$vJw4n+mp#SKUNzZPJFIhkVF?l z!#96k52&d)$qE=zNv}B1+qM~!a0%ozT94=iQsOPji+Q@? zAD+j*^XNB(ag1nD9+W8yf%^V_m83%tW9V)^v+{c1#6$1^q6XzV}%T zNe*|bH}r1o^4tx;B8swk)QXdYAW^vjL)#f`QgAN`v{iu_O7`FMv=07~19p7Io(cLw zehom8{t3KHt`!sh~4kwww~{rR>uQskTn}=af^FD zg)ZJ``cO$p4WXZ5GEwW(R(JIRV)A|Fl)6xcHUsu1g&VF*I=z>~%^9V1W6({(xd39k z7DE^I9#_OB}bvn{zMmDLNf#Gw8+QA#m-ppt2JDm0r!a!R9pktTHBI4d?6h zXMbnX%hbo?eZmWrPH$-FapUjFWaWk!e@E^$G@Si4b~%tK^F)d-m?XtjQ~{PKP&ebyq0Sw=^enQ@y3MgoO^YR4N6?%1X2lpAkQch| zER@a7E1M6PfaCKp!FC_Y?iVMw-^wEiaf4OdHoDIbi%GpnbqsqLdX0Mfp=JBs&hKY* zeD`)QQd4avisfxxmo`LtDjmSDPQdpNvoNnLFYo!!=E^l6)9mB{N3>L)K;JZ)rzqBP zDJ>*w3q|DmP`{e9H==czx*>O*0HHpeyUmuPYW4|)2D5V3%){G-rKc9ifRJ=197M#Y z6@6{l70Rr0D#@{nG@I}(U4XvJ?J^c#^lBd#V!lJACmTbD(J{gSnU^<1Sk#1kx7s{zR(jKa}cTL7CfYxDod!ClO@Qx z55TVaBnfsO=`F`=nu0)={j~J?nhSNgidFV>k}*e*nPaW5GKQee^HA67V$EwhNV;UN zztylpKGku)X-+dPWnx8u_!c`;d8+~BHlNO488<&Pv; zvggK(`=R>KYQ$!?O8@$r72A?EeMvE=_TB}o7Dn?g@tRQ)#D9iX2_FVPFeQ~i3B(N| zIcbDaZCSg@EzcJB{ZZI472@pWV#;JD5{1cE96rLc z10TC0{pHrRvm<+NsXbC5Hxs2h%mMFb)3^6?n2|XD!>W&hw0M5%!df`q5FW~&(SGpG z>B$ogNhix4d5@G6vXNxI*cJyrF0lM1X@2jDH zT9#Xp0GED^z)l#-gMtudG#QE+3->c1OtEgUK`d=t0GA;@$bVTND`1-k`0w(3<_1fK zYql6GfR#yTFH+0~sr}%YpdNwnz2z@JQ+SOWH~3;xjd`j-xhX~VWrW>oKft$5fPi^CwF9I%e-Gr8@%w5 z%pyWcTZbkEM4+on5rmg+&Vm+hV*oKym%7c8)gZFeyYAYS$MM!lNJm56?p%v^`kci6 zj4M7tLWCRnck;z$rDvw><;x#Z^Y)+-aO&^Q~T7R7+c6NbC)i^1LBI9=t!An&| zHT6Z`>|PGnR)tbr=_0z(hx#_+M!ghH1#*JK;F6;USs!KB!Mkux74i0D>{)X!+Vjf= ze9wSH=K}Uiq)ugWYIP>(c8x6V$<@z}??7%N(qHf|wX~!wHcB^2cF~}b97NaA0~f>d z7j%oTZ!{?mnCsJ_4b!-7vytyDO-+0DtepOee<#dXk}v}4q`!KTQ)8FSa?1*>gaxUK za9O>%VgI>PH>AGueU9$dwytfp^*8g@lVb25q^7I1k~}JwM2#LHr17;OYkh6IMx3f? zx~^fJwYbh4rt5ydSpOQ@t~qg{#%HqtLBPzph(A=*o;53@=j_)J%QQvO<`!Hlqkjme zF;ABWdM0*-J1@KPU+a{6FcqDjTOd`(n5#Mk%c*+1%GD@&DkR8w8xW0Qmz(vX|f{}?h+P@Ik6eERgz^`H+}SYl1nRf*>;#k z&wA}?S#=cWAbq)hb7xCu$^cK}Zz&QM$_=}6%7F0DgX&U}i#nyGJt)vMH^qlfNF>&_ zOqiML2SPU@mH|dmFj>T2@+TuD>gIU9aL#53{z;uq_K_fhLU2eLZbnWDzt!O{TjaoX z%nKBJ5Wf{_TUuf6o|p{8&NrKZVDh*LI1S}nx!k<}aOJLzj_GpIJ%<5i+gM1T@xhrof4$dEi1s9gg=nE5ij6eLIu4vXZcdlo zLApG$pvPOVus{f=_3VLPL(}|a$H=P;)=VE=mt6PIx&!Sa7U3KA^j#4k&HOV#s2;V? zCHTb=`FWjzSCiO?lhZ79n!7v(TtZLOgvwO+2R(`NI?@1f804@!pT z*zJnh3IhN-fxG5bBIwnHc7b)FSEoUc&OpET5qgRmJFYA-xU4W(CqzSDPjCgJShkT0q`6oSWl%inWqe#Pfn#6yWKHaXxxoX$9r^PO;$zPlvDneekSH zGrSPVwlVQm*kcTt=J(-TgC9k^(%bv<+^7H*ygAC4|)8t7>GnGg39HGlLkBxvBLZxTi@GR!Uj{Us4q-70BU zB3d*(T_Q3VH&h1|k8)oj1@cQHi$pmy2}Xttlh&e1IjIuDMdzrD-uCookcjm|pvLDv zpmNN;KH1+qfkzh}M60EK3&yze(TjK0V2&W9l*N`@JVS!bqEn*|yNE&$D=Eq+-u8eO z3E;^kIbPY#58pQ|U?{A#<~o_&7WbsWRjblFr9XKaU%pHhtH};wlf~Vl-R3SEu5hvd z^tVNOe0N^XZ3bSz8A=%P3Mn2(CchSGzN#Caz3B;#dPUOA)$q>`_?4EZwIXkcG~ ziv6NJbHPiijXk-u(b}ZXf2j!m8B;H4mIJgHGJr5nzTwASB!@DY&T51+^5ZLPdOYA6 zjw#_Jr!N^wr1(eibhsS456qC|zFw<92QZytgw4FFdY`LJOuIk^1~` z)n~~Jf3_W3fOC-=@7TLIZ0OJH3Xtyiz8Ehw{zc0Oqw;HR$9K`maG=NeR(5%b08&9X zIM-^ZQzpvV!bSB1>(?LYK`p;8DT(?9K%=ssMZ5ToL>p5=uSw&Rc+n(Ld$^LS^&YH( zHDfs60*)Wno_pZIG{%gPqk})wqh0>%MS!o;OYZ)jRvGn_B{iGsK!qiu&C)D5NiZJ$ zw=r4y0?GaW^6|A|(a7|h_{Ow?NsgF=MsEwH8TE}egIh|2=&ihf;41rgJ-|wL9U;VP z9k-bgfmBETH?UXb{Ix+I{ z7W3L=evv)hXsKvW)ed{75Mw%qJ=@au8@i%_3Do*!7XSS%e}y(YZM(zeN&xfcu>?W! zVUrdkNUv(19K{wks+gNZWU=SasoeEaK|EjQN_TUs3mwsx)e(9g71>*d6q~-)mLpcp zFZc{dKcMQ>nA1kb4v?L4c;Bsm5DlWk|8>ZYt!%N!O{HuO$Aw;={qk8#?HdXm5I;CY zy1#y6`LrSC!m&xjnvYe}7H}sP4s{o(2dR6XV(RE@Im<8@IlH~3>w;YjR?;104w~>J zz&#wXbJA*){3T3ed5jN)V<8dh?l}8e>r^d2mz_krpBE7lxycXeSUA_X|C32*7s%w* z;NcX_nu&!P>miyH18hbDE3J$tUajJ!gfYV)N5QM=n9C-Nn2n6s!Z$}=ofxJ_Rw{Nu z{TE$l_)$ZF>tBOQKjHE7_pR+hLM{gyjoHN(cRGE7xpAWI6gtV=v>vJ`^QDLq+>4e% zF(*V14cIEq7{;VzS`q@(DQ&98UUu~|`Jsl4H8P0FnrWM`Nb%b2@Q@Q0P=0WgnIPO~ zrpHnzV^ZDBS;B3_qq$Dc?m8U4N=U@%qTn(CS?&^`1)U4OW9n|NzaVAP9#tyzSu?C()*tZQ}GmgPH0@+sOs6p9vD zMr7O+)O1uam9`<tBgrVhY zWpgtWRkKo@8x^Ayb}45J^t9@gtj<-fNL%EW_c_$5Bwc`y(nW0GDVNih#mH{zh#>pj ztnS0VkG|&?rgIUz+IP6-0XNp!{&rSnu>(y#Xs!-5jFpAq0(&60WlbBB`ULED1tNVzbYKQ$g= z>yvL=XcaetE>D$C{jO=8rIcI^^9AK}zF%IyKHYwQv&1i2Rk`Z?n>O`?JlJThY z5p*ISMqL%cDA6+NhDC(9#nVR_Rc}J07FWl`%c^H#mA3#K(Q?LOwy--btuP`HZO}jS zT83!RLLuU+$l(Fa67zw_ZeM}3(!vG#yVBpjVO>)k+o`*q#`4vf6kwzYAE@t51`HCK z7Tr}0w{kxUoI_`wKa=a|t{S!?6<8f!XSFBA%9{}Yn`8@BR=fd>amOiaU@m;i=CNi{ zY*ZgT{L%u6DluU>RhBZJUVmH+?j$=nm>0X{A?8!d-W~Oj3vp~YTdU)$`x0tAM(3yq z>K>$t(Ayk)IMRGFwK_)Tz;`dDuPS!@bbadLMx79Z=mWbj3U#V}wAb(0V2I3DR|GDkT75ZV4m!lIs5DED(Ttiv zxPLi}+Os$$kif)D9yH9R|FbXUW5aJb55u^aAmtzpI~@DPf0ph1p6-D5zlO{7fqTdG zS?r9W)DwWE%LDvlx}dwm-e9~_{)=|pkWTVi=~rL4OM!lpx`uvEQ9j*kBjAa#f?W6K z^+6hQ0D{6|slO0`KEdoRV_FU?GsKZ8qU|N{^%84B>lK2Wuhad0Ef#~!cjoa?fCX9! z%CuP)K*;-!`{2$6nhpAEojXXGPDaw0v*3}z zQnF~Q7usT!ZXxQ!wR!&nc;a7i#``8F?JmipZA7a`x|y@S7_eCsv?VK(N`3KAa5a@;X2n8uNjUJL}h;5?jN zfyG*VQhvEt{Pft*} z-ZOi!825$0efW{`IX)0ZBCa|>-t*R{dF!SS)&h_F{Wl;DC9gaA?dUQMjnMan>W<|N zZ;AJzJl$sXOo9%9L8yuqNlORPq5PITtBS>7Gi%x-%d-~KqZFb;by5A6616M0t4f}^ z;O@>(o9NSn217ytqpIISL!PNX)--N5FYo~F1<7qjEXy>rPf}>thN@#A{%q0Wb2u53 z4-UZz=zkB{4Qawqw>X{0w-ZsH`xp+A^}u!i?N|F;>D&-~KLgc7PsK9z__ly%+JY?y{`gu*pVk{lNu1H?TxEu)^*#L#8;xV1f){ih zMaPqWhRwcVRxA}DXE#vg={0;x>hjTR;spBI8Vi4FeIDXoIao4h_$+q{O~>E6t6blgD(RpA23lj+P$?PMYVPxsd1{rWWfvE_FmKm^k@Gy4l zC+Q3a;?Tt5_$Pq~GgiT&m*)+t^Ji2ns|^Jf^z*n^Rl3aOEX)dh|F^z^RL{JP#!NTqWv zhFq{g{?asWAF(9JI8Vrq@84jMx0}11 z_4*8%Gw&47UQA5Ufi-E_8j(@G*6wEMGxWI)p-&G<@7rkuHB54EXg3gvWKm@-;>W-^ zuAAUTjxqkRidm=1`DOrXvXXf#Akx&M0z~mwh621d}7$#Ou zB23lpb9D~1Q0ujgG{H7_Xo=bVZunh?g#+vus>BY>y?^`_sK~drT0s9EM>&1Af&sTx zT;OOl4wL8O@(?8=;bH;*`dn|QexQzS&jTlGl=Twm0X4wHh`-K&E}}^rDnzZOQOkxB zvRHpSp?ZVd-qF*w{uX z!_rzWp=G;IoGjEWV00&26fTfiO~hzb`dRC3!3{e(iEi#y_7b2_mAc<)g{!h(UvDBm zaM*MKSCTpL_#&vC#CfoWNwOot2tD|1>$&x}zVQC#%@7b;!v!&fgxV*y0n-f3C#DYP zU?c@5)-I9(EZ0K6^%5hZysqo}e1Cn}`E0ly zJL0_c-no6`**)bQw+s(%5-Wvt?iYmO6y6~RPpnlm7bJ+c#fuTB1U$AFsBC`xS&9Kq zD;pr;dwaY}*DvI+TwzG8+%Fq*NRPIIcGM*30ERX$QXWNsji}+^;%p_2Y&14nVu%4G zul7F?oR84~hgdSh%GF|7+C>~Ofz5*XmyryMs+p?^BiQ^}DTfk>32;GJ?8jB3CWx=R z53HGI{5uQ;YJ7$`Lkc~rRS+qg>ENlcMfejbRK_88{Dkn@DCE15C&^e4uacwaC`~s* z&&k5-$}m7d&+Vq-;Nq8y|4=55bS*(A&;>NSpy#`ML%xh;GUD{w&`{kbgwOoql}xOd z{`NM@QPYk-UD-*?0s9|!-h^l3W)SEreQ z+sB51J8XgX4>1kjT!`Qc;aVPc_EDD5@#BEm5Z)yoNHzZVCv{R{SL+Krm`k0Wy!|ti7X+w4n{FwlB2JldPV(-Gip>OXCA0NCmIr5j6B~KDIu@8Sp z1}-36A-OX!;c{-?G@Edqe?XzLWF&-OE%CBCJhGeQMr%!*dhV{3{k)d6+vD4@f{rBV z9WIqbU9OGeJ0G>OXi|=+p&V1`bLS|pv^;Pb-_)6LQe6{b)vmELN{3Fb&-hI8b8z625{4WxX zm)ux271y#5NiTXIdBzFm#&?^b#h(CQxK>P=XNo*sSPfW7Q9)In#XmB;m& zt70%_&z=fIsi&{CHT?wjCuWT&$Nf7w0Q1G$@=pB=Lrr)=fkAb?ALAMRJlGCcfP9xJTbCX zl%3-fwsnTtuR2CA@{fbs5Pmu=C261_UrDgN2Z}*23QG?|k8f0>k%THXYM%$|`HVYD zT+}|Z-OFCi>!%zDmJ=gw#6~BE1)n*i!dl?LjR^lZ0%o3B>gE*wMZrVuRPJQrD^LFh z7k{p(C8rzp{d*I`msbIie|~T3HrRGdEy6*b6;C|^yv7njp>F$Nx5Dw$_gt4`1T`=Z zt^QrAi1OKal*2(jPS3nCGqIDw7dL;E+%qK|G#iaY?*19zu__l&EMp?gf0Mr=bB>aL zg@Gl{U$2ESNsuIpx+7A{E@9l=U)^}as@dg)_Ey(=T`F!^Q#@*-V; z0;Bjb9y+5~G(llz2+Y{vr{pBzq;wxXiZ1qm_9Z!2KKww6I3YmBd(~KD<#ChhyCS2~ zVS-WiK| zCK{pRZT-!CLsL8Gu~6PCw_b>_Z!nJ$6d+Im?6(2q!-VhgUvsY{q7xa)H09_pE;$>< z6Q#0Hb46BJjIN6I@eCO8^45B;7(S-e6g&fqwnm*z+>5*!y7NZukqPRlGcHAn~3Zk&HM%VQED;{~I zPdAMKj_`?>5zC#EnBD72aHezUJ!aZCX=?W8F_vc5HR+PPE!VC~V}%yKDr5Od@9ZZj zY?fc4@VBIKd~u|yziGred==XsnDUuune+YW(c>!XxGM=CY{CRkr7zz{=R5nA`yO}q zOW*(e>mC70#%>^lS%UL7tdABCg(8T^&uKl{YvUhUEDKIfh0ohC?kt`NM0l@yuIxi_`$_`lizXZfuO^rgTOi5~35 z3&tw0i2vbdmWb3#n4>{HN2f<6Vs>JqNBzUy*^3ArS$cZFg#A#Ew#NkSlwa3xN_`}{ z8!{=Tfc(uxk1PCRLQJ0}FkbrYkYOfbtsjM8nn6EmsvK_n0had6m9*hXzQ?`CY~zpt zgw2@fm;p6UXLrB^?bN~%G->j0;{Z~pRG<_C(J=!?Q?q;2l%zbX1o^*JTj9)g*aCRy zP#rSFGPim$@L}rF4jZXVj5#sWu!D_LtsU0kV4CQGGLim~bIhbi??;bg{lCgoe-Cg1 zWA-8uG-p!bZCQ0h|e)dzv6fIa;^1pdX|A zssMO?-$p*WQW;R)zb~UXZBRYVJ+0su;S+H)0V}ZlKB#YINb0%J81#dt@Ox`ut~L~% zs{RcWg|dN`NzrG474fI|LT(|k^XEY^q9SyGk8bihAH?hz>u(+1f+CSRQG;kC9cP8^ z`1i;=SI+B8?_N+7bJ}vO5lJY$uF-0&U8)6bC_oXo^`Flx7%!7(w3M~{K0|;WxWm#L9A8|n$#`7yBju;~n zQt8~h>5@bwuqgTsvCy7AlErKj1kITY4IDf`DH?;`Dr)9uOmsClfDfl0AyAetG8Sb@ z0mkb2Qymn0U7WyT5o9_c0fgm3Dj!||mJdvrhw@9_n+JJBBCdOhjB8&wOE4O+jg4SSlJoB)!ZTE}{KX2Nxo-}o9ZurId%+an88 z!x{#V{nBfqFg`8Cz`cNH#U`)ha_;eP`xtsri;zp7Q8GM?!W0-KBC&0b;!@yqe7E7h zkpD8jN+4vCq9#Csc%>CwoE&qPn_95&$%Z=0NYc>%N7`8j#}OoZ+G35EnVFfHELmVN zGcz+YGc(I#W@ct)CQBAG!^yk1cl+MEclXD|L{DVrL{(S(I=d#Kt1`cWWK=)M_+004 z8!>ZP4-rqiEDQ+@8BEc91S2$I>E+>QKJ8eg2-{b}%s!z`{9CwaAZ=W{0^oG7u!R)H zLQyZ2T{<~#D)R*@j7wd?;L(#Q)+I7N3FC+kJj==-zXV(Yk#)X6a(O(YDi|;;wF*sgy@-Az zi4GlF?F|Z5vJhSgT3M`lk}5&`$gLW1YiOZd%`d3$gw#5D2({tR0_F0gaTYxoe!+#w zfF34u@if&*qeAnUu!w;&`Q#QzM@4Edp?4OEB;e!V5^(p2SjZbxdp{H_pm$az!WIgI zAByr}niZnueq-@G1Z4vPxRfi3ajNQL@)n9vZhR0FL~-G2U{FcFqzIRNd%-su3u8GE zcx!1xjU;lhXOOeRMm8|-v9s$<+BMAqyC;l5Ri4ZF=(hP8E998%rRh|H?F#sBr%1@S9d6&xE z;k!CxK7ncjiWHFI*YZKAzaA25Y%kO|$y!Ak)Mri@80ab`Zc=BVMc(a_TdYdR6$jO2ptw^&(JtXq)0FTvDV{%MxHz%C#73 zh5h)0q)$8gVMV^Ax_*4m0_e5iKmud}CkV?35(D;xCG<&$RKHrtc>Rvh@+ZRzslrfH z^P$<7{YQaB<%6(l{g6b0L||uxj3FMxRVax&RU;#uM34 zX@Xc1bJ#1v0guBy{Rux%s)Z`1Z}Ff2iZCSAM#a+M@O8XuxpQzS*>5una*w0HbpEC& zLs5}E86a`S6^lK4z{#Sd2w_IRN`(2O`b%(RBPx^)62H_-VkyDw0k&x@U{|UlQHnc4 zFC`O+B`6hAve233vRb*b6b1hN;Smw7Oz(=C48jN)#Um{9sRX?Qs&?zZsT+D+3quotdHpVaumTh5V*80s=!KD(7b?n*^`-%@08vCgA!31k z^G*{9V34+^L{lcXIvCN+1$t_hpg$m_w(SxDv4y|V+j)hA^{>S-jPwT5r4k_P0|uE4 z@69LJC{*7G!(F33Ai!Ed;_o4C4TW!Tfna`1YBF_6lomWN^{v;vF4g&F0Pk64O#y5P zQ2h=<0UgU}dnk{aWY_eGW01l?}}hw$zLBazTNe4GT*<; zyYbPjmom0;6AhOe+QT7r%flf}2jM8=`-yHj(Q=UkWudbJs%>C9GF2^bkGOB2?*8`KyY8j@9p)n5* zSODuuV1eSC24)kcimHeL5B<&*q&eUaq!o*m-e{E~2As`(7Tl0ffy=eV43q@>SUjR8tf~vk#T~194JH4{J`knQX9_{Kiwy=4?zUn?jDr zdySYlEGco8J$xD(4ju+BCIm!yZ-3uytA@OZFolji(eFEV1+gmzuvD%932rYA@I6a@ zw1DqYLNXqH%`em6C#modkDQz6O)J$ttr3{WlTjQ$JjKdZ8>vm(PBG`9LnIt>x{KW( z!*4Nj*nL)FH}Fnmqs9wd0$Lu(OC*z7?3Sd1QdM4^b@=jZ%GN2Ds!%IzN260?uQgt4 zo)h{~wyU5;br`;$g@glhhT8|YAg5V zmky*Pu3cd19C>2Vxw+)odkT&hfJKPoPBi9m+Zj*IUDye#q9VmG1-E3x-J#qJb<_pz ztWEc;)-&X$O4I0!)C-2Ew%EnGX2M}F1Hh~8wcf;TvdwDxJ7dm38DGAmJWm7gho1d1 zud*78cCEvs*!c7H+B_yW0~I|o{g8kA%$bB`@1-isU_n`7i}pozJwu)~ll#!=PNq>0 zpiO3H5%It0I+tvQ%Vu(G3{z}LWjjvm7@GaMoa=pCupM_PI#e%U?$ z#c%c*W7*&{6N8A}tU&$?+&Y#ON+tPx9rcj!F5{%KzN(_Mgtv-!%B?8kc3Ue>?oIwj zE-nW;Ul>XX$B*S#&GPlCn8P{+vEQ)8o{tJky2sIf_66DbKblOcY!aH5A+}&ilWsbU2EZGZVJTpH}NsiJRV(PNxwzarv5IR&1 zm4+GCs2pv)8wU;*Mtj1GEhIHm+i=$IvoNF60tF)}Z;f#=Up0)4p0hTvxtv^b5U2Mm z=)P;;6Ec#?93IXbGv8UV01+^O7hu~2TCX8H;2Q{e{ECM;HqW}ZWq&jS(fA>wvJ%4U z9>>YLV28bdZ`MQt(x;jL^Y}zF8`$G{5U!8g10Sr1$1i{Z6mk$84(3M~*GlL|__h<; z6S~9Tol8NKm_ojDD=d5yn1#Xcovv*=#$K&?mXBw{pxE-=jMi>8hgmlTv{1H84heJ% zcmsoj@k(dF%ON&JfP)7iS^!g4x5pPm&sLdHx98Vqi*GjQr#=AIGMvKtCxIssvfgpM zDcPS;P>M<_Uc)z=F|cv(){_N~w8JN%90Q9^?adRrK?|LIihVQ5Elmr3tjeRL&2_GOP* zb0|4;ZgOf_ZHoF0$NxN=c!Wgb9DeK^(-edeo3qj4pZ`8G(04m*ytpZ3AnvZDy)|+m z7bsqW_j326@zyb6qu4)-I5DGFS)=0+=Ox1-ASi;DuycFYws3MkYF7~>;e0(!W+p-Q z!k0OlqB+3zGJjaF6%SL$zDbrN{8-tn_~Q}9i*Llrp}A@|^C0e8er%sdJ9|5Dw?iq1 zZsClp&XcMjIg%P&fR;@pQdJ@EYdRF-k!xDWrqqci{9I?Qr^SSm@rlVZCPxiCy zn)u-y*Z4%G$EcU2J=S{z%S2+;x8~E%QNfwz6nx+jWgM|y5Um$!elNeSm zkq*+G4G+7v`~BkL7VlI!2(ERA>BwrnbWV!Iu^`!coW5i=)R2Ou+lRLxmT+TVS@h3* z^JpDAp^(weBs)<&Vk=z=h2rh?!0a$Rrt{?iY!DPEzT9y!AvZm=O`;Rw%jU5$o-Bos z&HcN!kT?_jA>jRSzU$9CcT5zXaygDaxv^8C7r_o?1>O3tSSsmi6PK1sEpEb%udij>~`jQzTa-^7#$0wiF>ZCKZf66!%1_}uj5D+E#pc`+poyEbOn(qmyQ|P^#eNdM79T_g zk3m1Kj%sdCCj9|{NZlf~+loo&Mo*S;1oo1o#ceJ8c$L&M;3 z$hI8ss(rnhuCYl*SAvY-!i2fb-%+|M$Z<5weLK%RHcL#?mc7LeB(l`|`#e(EPkd+6 zcdDI7b1u%xj!#H( zt?5-Kt5YAVzt0A*6I!9h*@^pN)#jX7*8A8P9V;PdG}8NatZ7%UbRZ~D9GJOyFXrQA8Dx5tH_KOW&9C6aA1 zZ6YtI;5qKJ_}XKO)EkQF?A5$?u0M=p>_Z0El%{nDw^;4>y1BRL@{&v);i z@#n0#er_h%ar>y%Ya_Q6UtZ5;G9`miB0ygH|i_Ck$=2FZL-yt z^k0N5PN3%5peNyjac%ij8dIA}GWK@E$NxmB&LsT$n_Aq~tb21z+|v!J4mN*o80jn( zby;C|Sbq2dZ=QsMZjYQ+oMx~+cv=@eab(eN&N`QWj;3W7-@wtCNY^4E8UQ!LX4fBO zzrJU|76)x78p>Art zQ;^Il+VU1gpe~vn&PvRDQ~EH~TI9^$Ca>QY4q+|kTxR`5Y#>VJo~gP@yg!MlnJR%< zlC!@r?XkQdJ)>-%z67Q!`XE-E2+^YjCcN(or4sncVn=BuHLRW z4%PV$M-oOEJ{+jrVGAUT3M~}g@ff-)8|glr^(N{cyFp=UZ6(L`tEm(= zo5I(!xbj;YS?#t4EDW3@OC7tGyj~}EY3Jw2IXg?Bu{>?8n|msISBG6(Z1#1mNd_&q zYpuKoo+QV|IjdidCmrDL`LHO_e~zp)Pk2TY9Q|Uheu$$o=^SzCHbX1=d_yc)mgY=`G)a*(Y+|MNUp zmnW#g>mvupewm}W@r2gqpvx?m;;*m3YwPfQnJEtPpsLW`>1Z1zw|F05kxdgUOzwb`$PYM}08dj3wZXp_a-?!DRa zcB4~#lzeaonSQsQYt)|}zIwK;ZX~wqz~QjhHxIv^wqdZwn7}t&UGWoUj>etXN271- zw<rg}65>OOJvV=}FlGf8ym?lm|zUPvWu@w{G_s z&p#W`bKX0l}e=l|)NKAC=YQR(BS7EkW zDre>!F#IH*r+uhi6=1A1qkSsyZ7*5kU+QMyRysB&ii0oJ_O#h67k1DlgV=bRIq&P8 zF|og_d~AMh(tdg_Tx}vfD?4GS$9RF>H{)-?J>=f-^5(hPm_gnCB|0ZP6P>wIcmEM> z!ERanATt)d6Z7DdUh|%Gxt@_pk^IYjc*hLPez0vby}%B|oVPb;Qw!Z9D_M+xA@$*9 zDic5lwQeVV8h$bS9HD}b%SX_BL!p47tmJn3GTuyoc9Q(E_3Ul67*yOJblnZZs?Ju( z-I(eg*QRx9d|N3{bNehqp81uu8U8sH`F>Z#aV)-g>C}(LF3i6`ijVVFXI?3Oi4sA2 zXpK(Ly}xd;G(?8l9-Q6MV7@q3#}vaakJf7CzCB<6b|2pSGpOA|Wz(yI*3SKg!c)9d z_)>jGi&8uUNqP|lwlJv}#hXUU?I~A^?PTFwBWpp$_9G8&E6`FL zJ2C*YMSr$CtEKIOrDnf8ZY|sZ@_9$vQfMy?%li_z;kYILc0#vbS!1Q%fFKQ`g!az1 zI`Dh~Yw;r_1kB1Rr>5)YhsOb<7^h&MKYEqSFQPvkr%N#x$QW` zq^K!x_}vix3qH@!RmARVX-tFZIy$?r$`I_!Jg2j#Eu;4p>jm_k(C3^t&XN=DN}Y+@ zJ}s^L8`&R-DVun8kV6UVjfwo_?cPMs6@SDHc_H1}DrADqK{zz( zw&e4u#D8C)&hI=ePO0Bs{u63x%X58FgP2rIyyj0Oxxi}jX~Djyx&>h5AlF%TX5juUG%SBu?r`^TJbN=Ew1)%LLd>;3CiSp$ur zw~L?dHd~2V4q_RsS!v8tOq6d;M^@86&m=pBU=sGLF1oYQnFcLvo{RgA1-Xaf=|6sG z*K=tp*%e+!xRH8NSIJozKe$!%+XHh%!~@ibwiLSK*7=M*(%4`a50_9_=^G++80l#B z6|QD5D^uVyO|??+?oD4@k#Fa?Nu%p0`cJ?es)BFk#ePOSSXp36C4{E2KYss3uDzLb z_VoUtg*+*wQID1VZ?}vrUpPw^ zRyG0_mM=0U+ZPd&+Adf{rN(I{=0}@E&dw?|5smMT7B7U|J3gv-hX=j z>$U#M_uokQ)$T7f^dBSrukwBQ{}0Oj_5M?||0K#^^ya@{l3!@j|2mL=_pma20Z9Mn z@in}EJNtM0-&_3u*f*FnYR}neh9umz5pG=8BH~9 zxzD9P!#*H1W)Qx8vTA%zd&$^s#63vS5C|qyCC~?1?zdvE-&QzR%H2NVlcPiMH=PIt zp1mu4>^{a&t7f2?vA&_{H||A);Xvr#TXseb6QT1<{89%q8 ztqcHj`3T(qQ`3L!%z_~uwi$5%JEDoxh^~iN>swa~ zDQ!8I<}L^QQnP`_a(ojiExV@Y4u@{GNlk~j*?4?YuV0KP&{;b$fr;eTDy@o$lr377 z36;%uZAB$9o7wFBH)d^!(4Qa|(BGe5c%58$R}66;c?ZgU$GviL`i28|`K>&kddmEu zS+JFu1wmOM1^nMp7$7ZEjQjnReB8iK{j|V{MY_YA!)ArhQ+25xP-B5ihpQp@V;L{>qj*0!vjsviHO8d4-u2bj#Xt z0P=`k4&y!q?~=#ayc)M$ak%o)MhTF;@|fQJM32(~eeQn5`M{G?6#o4=)WXDW_-+&V znnO~jPx0P)gpl;aXh4dJcs zX5?EJ{*+*)(BhACn7Cp&{(gJh6IDfsWS_)JU$wq0+r$>XEvpFnJm&x51)Iw5hx~3%{SCp#_{{}izd~sl#M+TH178f)X&YRF{t{@ht4^a6IIQxKUOgai z0C851)Fg^m)D<@zv^6rnf){8(jIZ|$t7miYu5(Jg5%qqsgT_T|QdCEpl7MO}z) z@0YgQNUKV=M_)#X$p6$8Dd}J4hXUzK7uP@4{@>pGzvkh##!9t!9rb_waV&O3_WOe3 z3p&OXS#qi(+H-d!0$xAbqb?_|rt3gAun;_DEW{uKYSN3G6PMu2<5?}o z-rTl}4^obx$Wu;nmbmd${rITF802XhF%upuSQ4T7UYw*DKFuUgiH9AWm{Xpj_y%Z= zQhY-sC{0zY>@h19zo&jqsf`WiCs4_)8rlaLp<9^0&QBu#40Wf&D}QdziXFS=P+fF9 z+c5Y&VQmSyxI9^w#cA-;P|B)6rXo{TR*|a8N2sdI<-M^IzsLB!02*XfE$t7VO&R$h zrU`3Cq+MiN$=OC|1y|ifst*pWEY&4dJNCuV=Ez>ftj-M-wG^`G| zTTG#}=s2@XKWGC&)R_`2a3aUY9F^QPcQ;Y-RPZyj)_sT36XS1d~1Nm%w7J2b*A;_r}0sLqO-d=(AQMxh;n+!nqV= z98^n zBQ3)hE@Wt_b#Eb%8o;Tz;STPnN+K6O6dpVwE+dCmX>U`?PH(g3YcVkuu-!!sj8J|e zYtCdJlJ`w9M!m4kE<=kMKPWq~{uALidAfxIA*o%?{<}1ZWUl#dSkcNMp9WHU0hrQyq1S zR#;f?8BA9H_H0FtOt0=+dGJxQ$p~TmxFyN?7G?{EitG&Y9>+H$Ap;kdH5H%dtfdtn0 zghZ~)XHR(LNgL<9W+R4fIEAbS`KSOIs}|BRPpf!y9O0y%6jJv__n)d+Q6PKt{7c5S zlJXZyY;1D}g>$RIuvZ&JHE1RW*t=tSaL2e6=@Uo(-6s2rZu22e42@n4+hk+0Ng+W_x*502grIr_SQ;mD2ji^4iN`nG>}Ayh%kGHU;t6y<6LQq?}2ZZx34|W z1=0i326>C9L)0lM;X`Ugpe4f=cUP&8HSm;DW13u3fFlLzjD{*poWoE4 ziKlNhkTh@~FpP+%@Q9EXHzUB2Zi|waAuCowswtT&%@M+oz!1O?#h~PG`fCnF2)37w zG)|Y8hIE2R6~G7z-7Cd_7zqj@C^LiD01BIzom=#4Q(Wzlz(|YfP#%de?n^=BJxC@A z_PDuoWQmLz06yXa5?(QkTjUjm9=cI4aUeIq1;L#n1&Ly(V3ao~@OiG{JNM5%(HbOu zNHqU6T_T2bx*12}K%hRsJ_wf0N5CcG7HNm@im+?O722+z`mAtZRv-ib9^r!gj9^1- zMY<&l&5L>$t#2|g1Ckwyk0eA>v?b9NQIB^QN#Z>MU;$YUD2F6Rq$8;yaYRx^NJjoW zyErStk<5@XBSeu~a)5jT*&2u=#7rnKLS~5g7AO}8;~%p_`U`0eVCDz}NbE~X?Bhr1 zBKDMg3ch01W^=Iqlp2CeFT{3@@Brau~*Ey-*)N0ViA4@ch|cQ zuForQvUBMcK@ZTU4%I`6q-uXkcpq$74wp9-F7Rtpj8r+%NO~A za3Z|`(J01=FR&Tj2G)q~#B7e?gnXh^;*!7Rw-(^eePUJ8oWJGo&V2H-ggxI{4hnNl?kD+;W~Z^65aD;H2CXbd7CS z+a#wT?G%!U5I4u5I#GKbI~hFsyGdWLHndCceP9G6`a^m^=zXA5AT;C=@)WTn@)T*N zFh>SM7DFX^*7|S}k~yRTWCCC@@M|ln5NTfivT9iB4+?S;L?i&55HMjj!g56InL#Zm zcke%9HCa2-5uX_%M$|jxh4zHKM5o|F>>cV}GV-at{ zBg}~X{xM2I0f6$)G|1o(&fMZ&QoG9Kz@?Hsl^Yz9W-&HYwn~7bc_`y^HnE9B<=&jd z-WRw-u)d7CCa@;nkZ1`)^Jd;9>x&AE3LFRc5dD2LZmyB~1_R0ZY8yUU0}UYm&V*5c z;C-`!1(1Y7ym`?K5weo0;;DjH$f9xR%#eQqS^oJr{3DEU&c7y0CjTD@kdfbdnHeOB zO9DzjN+9HXM0tJ9p3xU_WV;34aqgKHyh?KNz5QPpi;l!fJmmOAyx{KD7B)+!bNQlP zP)-s`WODhUUogz^PdZck9&@*%)`r>SL@tOl#afbWVZR@ke?@yeq{%~iJ)#fEWtQMq z3}byoJJl|HU}K;HBsuaDf-Gq_@C(%mbqRezSKtfL33SP{ zK_Xr61EXKtySf^c?IiBgXGVD~gz8wASpAKi?#1(zc*%nr$Qd`sPNrnNj<%*QxxQPN zc$rung-=Ox>xc&23{6#LwQ~)2jZEbhI!vsTRZT&2gHbO*&x}THoSiISl_@LIL(^WW zp~cfmYAJV1(QI``0(y-q+|-7dfUvF9lGC*ZvAL61k;^p4{l|^zkYy_P2p47@giOuu z<7ZSPQ_cKEVf>))-4qcc^?57MPXiEvqAxkLW$A|&>Bh7%%rDh2)MGcX%umf=IW@-B zgPvD!g=kkN^NP+|^9($G2S<-)E z=3%bR3(wE;(YBMZG!~PwkhXKNv=(!*)TjR(tAbJrFUWG02{L>;|8XI)l|wVnM(#uc zz!kqFJ(oe^MtUTND&|UM++7H~2jnB_fVzjd3{}T;^LZ%4Z~CoACSUom_e!(bd^!(1in4+uVj*@F>I*aZzRWzprtU=QcC(`e4OsMch7~k@XS=!H7CL%BpZM# z*hmkpqmQdZz=UqlBLyiJG`lipIYo8t{lU-ci-XaQaPrRTH8xU_USs|{lYyK3ta87) zcWqT~kW&wGGJC!zt=1_jBaNY!&+^cRfIexuV+Z&LRrS{<1lGH7Y&Mc4_NBn~Cp!iT zT(Kuc-2~CkuLS6n*Y}UZk3;G!r@`9s*}8mWA5sR-@6J^_tklUMHXK4<;4vEk;pY?= zHa(xwrp%a)KS!ihZ#193Z!Xz{A3S7sJ{tyDud7Lvv>_N=M?+;~9ed1dVefi2YjE-W zi+4z$lFf24rvf2%g`Z%${Bo|Dl$o$44KaO&P1rslFnNT#K=1aXWd&#i4g?IhcdX*P zS~M_3Rq1-=D<&QzNcF?+@XfG03~Owz)Pm5Y4T7Gu*v&)R6`4mYM_>SMr+VMz7-3hXZqoBLQe%dT;F@Pd|T>u zZ-Jx>mfVqVf%yPU=|{CC)dW*1V6P53o%tZA(IH>-SF8uJ_RZK;Zo$3q<=&nQJu2|ri73h(n@=c)isV~`1DUP#ru`DxRV7KEFX+ zA8}{S0zF~IxK3uM-UcXsU=lGvB5t5!BBzEvgx=*k$i6&(1Gi-hSg}XI4+BpfF_iLq zErwzi>u-<>dG7a+K*Iv7m*`RMkS108^>8(x_aN$7$HWXBp{KkNa?Vi(WQB&tu2_Iq zrB`dp9BFC;5^H(=Hg7?LnKQj{MRRd5dIj>^g~+%iqENT8C!S%dngQO}nQL5^lO_jM zKSuHQVEwfey^+yG02=*mEz2+bJrM96P0@&5GJ8YAfQWCIxoIWP=pRW;K@R_*dCB+eQ;+_TElFew z5-pXWrjjYuRE=YLYLGIL#eS<2k%<&4Vl%(Tya-IhILwu?=D3R5xVoLK3(s*0{XJ_n ze~VgvuP#`nyt(I0auoTq$vt7hyDMgw0$GN1#(~rl zh9gyhS5FkBIs#{IVgbJ-0i!8R#pIm&cLnuIVne7=VcB5)Fj~6t(R(bBQFunYq2)i4 z$h>u>mr?A)=|)pI{2Yedw0xU-3`NO? zI5;Rl4f@rqJ3k_ZV~-5r7WI}^dZ7o`85*}B&Gi%FVP8}Ow37xt7p6DTCq7|h8yURX zRSA`a0=9LQbcXh|CxBxPk2*JEW}C4L@tPaxBJ;7)iH`^$bu%T6>e>SBZt30j@_V&{ zT_c3NW0;ovaZIe$w78zM`c_)&qq!~YO#jFkcp2*nPdcS!adwNCN!Nv;zsfuO*7B5? zs;I5x`{k~%uiuzHTUq-O zs0a&czqjwWcBW|)Hk!6|V%gjy=`a@}6 zJd~R}x&R)P>T!kHs7;zsdPh}zwc}tOpiVc8Udv8AA1l9y?!n~7&jHt1Eyor=?dGV%a z3%9dII7qVo-KaH;rO&sRh*o^(qocH?>`sdm6eB^i=Ha2Wb2jSk^jTuF)%+udVjMhA z!M8DmRrTNWY_B3|TMF^4RMUCJbZ%1iMa}MQx{ikiZRBNvS>YQf$}F!9MY93#qAJ=; z;a?fU%=T9Lx@UXAHy8%}6X=z2l@iqlcyr!+)Y1`{JomBv7mtNx(HZSC$yg>BZ*y9* zL+|oftK=H~GDB&y;OJK9LtlS??PqA-Q|cRM2^0M8+#77fqos|zZ`&FxaQ)sD6uD6EgpXXb|JAxv=V8Ji9qWyhw5Oj0Bpn z*hJF>PA8zO5_Bi83QAKbGKJ5D7BOc24;UeR{`%cj%S)3OU|%5n$cFducy2- zGIL$=LhSH|Bb5o<;^L8w5nO2!CXusW+%Hgvv4%3DO{w1F3CVkK9I8AO29CGUDVBEm zACc4MQE@u9qLW-cPI`4xdCAla zIaR36q0m>Iaq!^;C<~MzJ3pu;Ky~!xa$`DC9aB+bj}yW!NKN4=4%_5hhO$zd#hZmR zqnB4uYJ;n4cS%B%;!Qb1CeVV#1)D?j5)mj!&%_J^88Q+34E9PgEsIN3VyLQaP?eu2 zMO{9AaSpaBSQUU-WzsXwS}4`^PV3ueQ9e`t7BSHjY!ajN)Mdbeoi~`{eOS1jXPPr% zpTNmUkMD_e#Yg>KD9Xq|-kYT)cY6P_Q9%7H3{`=ShbkRME{qllH&lrA6Cet)^ZUhi zDC|wvSn{FbxZstbwT5~k+JTi+G)?bUmQsW9z2HK=zVV1=B9kBFa!4DJ?lIBOiuea;NMyv2wQHD_p>!3i}W* zX9lzZVuRatHE>(&C*()ZUtNE2@N&<{sNOzr4s~FJd1mZY0j*-MZkS`6Xj$42&-g~i zYZW27U%N@(0jypF4dKq~Ny%>cQ`_*X4wVePE86XuQHM&#%ja*S4YCv5f=t)mlE6j( zUae!vaY;pJZWQm$Il&$o$rr}1{l+iybiQz?%3cmQxNk(obHV8mCe z0BUuD^|=v0zZZNblrkLpMWf=Dtf?6SuMGv(RRh7eVxM7U+ZTtH=>oe|sysF%%(K<+ zfH$z>4GP#ne(;COtjJwmgaKd7hi z==HXpXO&x<-e<@|6;E*=-mI3hPu;?MTVb&l{`ysF>{vF)V=i&MQj|^1xbV*a=hakCur$%6%R`%*tW<-yZ#UBS3lyH0YVK z2#NtiX7gCATvqt)OeM3v3W?+saroT&OP)3uxs|(D!_3j2;U1zGTvEeFFnnkQ9fgt0PSjCj|^a>6!QiM!$g$l6mK9Zfsv)2q> z*olxi8y2;$*VoGU!~DOLbMc+<6@;KjYL`5q_7wdLXh`3x-IN@}xHw|AOBk`AUUB~5 zMmvJJh2T4c6m!1~8M}fte9O4Q3q86JnouoJ;@@fFii8ScC5?-s<80%QOUXPMFD<7C zuU$*zs$XL<`lw^H+H@*S8?MNBMDgf1Tq%)|9>kRnTdks}!8O@TkYhHBpFWdjSVh8x zDjYPL7`rR|SvtBDS!Q5Au0p57x!VDXKr}6S#}sQM#CFh|pUXatg&cZazEH4mk}Bt? zX%ao2wi6!a7ns>YF?+(~di0d#=2byj5+;XT;Q%`s!kH&^Be+$?^d}F2erivk_PaaD z!Fv9klxci6G-jOz zz7zsSc+F7miBm)bk1IDWp$E{loNk`;X3aDc73F{-Y&+q33>x()mp8fnV)~qT^GR5+1ZaC^D{*C~kg*h^ z1uU4^lUVXSNiztvWHej~L z;jgMw$pQjtL;Rz<78N`AHXQbsf;qN6JJjw0{L^?{(5rvmd+Fh=9S!2}+muo6P>7M? zNuteEy?#23Ki9vXJXMTBFI$~fsGY_z1E8X&DrO6#(&81`A69ZXKRbd8mZcp)lOG3|RB7`Nm)9I-zAUhQexFJS9+u0pSen~hY;;soQMr6o z?z}8-(k5wqm`t`@jX(U}WN3hG84wi(JERNI0t$)X?{`K+NU}jPfL7c3Tl|Oq2!c?& zTl|Iq8BD(vlUmEh8GAs0x`VXS_>ysQMjE~gIDgD9I`u-n?T4liIvjv}Mi%FZTTL)&F#jg3JC|FB6Z@TRIdQVs4k!N!`Y(yL~{fgegzUkL@S ztkV`#`P}1)nqMpGryQL|;;0_fsABuu62(~i_dnwT5&3lJV(3Jwnh!I7^1u4d?Myz` zgF%Z1V7#mJ$S1;7E9u#2I6Z+WRTPdtMnmY9OO>)+KjlQa7ZPJUU^PHS2l`cG9S|Xj zq{k5&Ue@=B%Mhvm0`thL5E>X#)&|!$LnH&$Iu_xoJ(6K2g6H8-A``}xlr*uRMhqE4 z8dt?n%&6EA!&r~95%)-U&jT4(=q}WTp;i5mPm~;-jNW&$5z1veu)iwI89c2C*!@%r zt!}%x=HfqJqshK-CVgiW?xI;=JAGk!iq#YR zRmO2B%d8$dz|WV_&GbQINR`IgIYoWFqbO9v_IJC0Q6`wv?({e0x)A~V!TJ!5u(J~0dmEonG!|Jx#E!|DiD~U!Z3n+H#GF1x9{;_ z^rHu@n$G_Npg>>0F-&9lpGi}!clXD>d1UzJu$Bi@oKaI;sA(`Wa(uE)m%e>u{OFL^ zm|b(^;q86dCm(l*S16&WX9-;C}_S zasUL)Ju4k;cOr3MD9#zDM5uzYOk|)Yidq&>jSG0mC2lFJ17ocOCOj3^)uN!Fd`(=^l&G4_{#a z?B2Bdz|}iK?L7^XH}^WmcON`(WyGEmb=fT^rh=u2(P=aGuH87=X9|=;2Dio7J-T7E z7c!Slz!3Jx(f}t5Wj3S@3r?+|HJcGyr#*{4cpBiM01MwDIGjCSg6svNVB^IO(L%DC z21G{TTTEpj^x=DeKRGQuo2AuYr=k{^-(UA@t(jE-UZX}^3C`?u_+xrG`ovFI`eCKr z<8ugF17HANhk%Xm2m4PAtBNPX)H5k2U_-N2eGG3PvvYpa_1J||R0its5B~ZDamqjJEbH#hH9dUzm z{C%;V(g!3vlJl2w9sD1Gt643*KY%abI&)@0rc|l543;6R@va0&KQ;E~enwUOBUbgG z+a9BwUf)8lqcv0BNGcKLvHtx%2FFWJw1MOpWO1b)+W{a_g#Z;#hRm zURc9M0CsAZ@SG(JSX*kkLUbnU1I3)=dPT*b&aSrM!UA(b@o8_{;+|^<&=u2 zRqk|0eDw_*3YyG^hDQ(eyQ>$}uB_M6l+PGdR97Wb$@)wTrcGRT{k0SM%;sB1JV#DG z@%RJ#E0E_1fai#ItxC-_PXV6eiw^GCYK^&gQe$FE+x!y)j#OJm1yqY>us87jJ9y4F z-;3wSyb8{&oxO)N`tpHn(FSp2&%rUffWOVAiWS#Fo?|f7xTzlS91HN3 zN#Z#LWHoXX;5oP%#AmV2bJ~~iobF3J=S(1E=>|-`&T6h4D>0qF&Y}1#64U8NCQg@Qw)S(_ z7eVCbq{wG%&1cbgnQqUOV=^L{)Dh-$XcqAzL688t$xfIK#Ka;Cg0jG`M0SKrwo
    fS)c|WPr&`hwgKfd;+jRhh7q2aZM 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�<${MyPxKfkxVde2v% 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ᒋB;JMD6E&3 zOoSL%`JEUNypyaR)w|K9>ZnQRXsMjxF$b*xg9cBCKK1GsAEz6vP@!HSA}U25&3)V9 zTNl#|ZOozrk#+S-`!V^o4a(#tckL`A4QnmNF(XVt zA!umYO2aVA|I^D#SlwLx$}JvGP%3xN<)EcxFnwtSK;I}@%5$=#RZ_I{9*)TUOq5ch zkEyihe(j7mhjlz4g(|U@RuXLIl-hjB`U|ut-u`#^2vb`juB3j&8AsW=Ul?lB5_lhM~jPDU#a(( zeLg}8ip{Lx@04g69esU0Iy)z}Cc^p|mebyp1Mk6sgO)bc9sO#x>kxx_<2>`zkf5#9 zc3dqeecVt6J5${G(7X52lKFaj4>xgd;U%wBn)wRl{`rclY!c)$o~3MM5*af3^gFW9McfTjh&%O`+(_H7v|+ z-ivC{?_uYLsB9jZ4i4XAC{5|PMx6Cm!I;NC#UAH8wpbeisTwJ_50lsvu7nukyr?^! z64AQjh~&|jWppi&mJ7YlA=o&3gsc(nBYQNmks`6tc+GcP;%|q^RyP;KB*p6NrUAVc zM@yF-8%@iSRU4wTLsNG(=MTdZRO@nM90e;p6>?#@y|Tx-bY#Na#ADc=jr81Udy9LJ z6VCyKs9tXN+HS%O5UM?OwgI@M;6v);`AjjlCUb;;)LxQ2Ns(%GTUPYO) z&EO&@3eB5Zx>a$AaaCF z{uy0$HK~8c50MN$9%m^vHmka21a*Gf))0x_-cKA{4ZQR~DYcMljl&u_PgCZSk-PnY zS$Y0h7YHuF8D?6=4bvmHq7P?_vWdMLzNVlpch6~Dgsuo$Y)#}9(Y;ewWX7H|S!jdU zaI_vgEv@4<4sP7i_=;pmu%Ap7V(OXiJp|KZL2+=M9!NcX`6rHjrDc0rEA;QHWuQM`bjYD{$XT@B8= zONAK4L(GLa&YA0q3gl=$ug~_CRYMZ>e4r-MWvX1Z&GM^#xuWq|H-Cteaa+O6%<+x> zU)30{&yvLWg^K01Tq!2MhqM=T7VOAzF(Nta>28h>yO$}Fqj_tWdCxp8wewknyRMij zICE%~Fm-I1H5i;cN10jNFpg0z>sgoGvZEO^w&TS<@sv2}7(JTKP5&vOb@nbasUqu* z2|A9k;i<#IEVWSexSog-WRM+0jO-4MDdt%(1y~AK)Ix=;b5Ee-pLE%U@W?tjyJ5~~ z{OZ3O9;roU44r4|gPCAxMs}cXD4pp+(*)dOFhYb@pVcH(s>0+KqDU_8V5<31ym58Uq#&znuU_-k^G`%ti9p$&Z<$qq-Lwc&mR#k$uckvl5~qp z_Q#-bJ4D_wyR5$d&faOWvpZA1*-o>u;^lfT28YKX9HCa^lp@7sb4i|IvI@!qhP$nO zcZCQQV??^LFOZ&Rkq&A>>x0-7dK)O(68VTBHddlGqST_#^;@$N!5pzRJ08GSReZ_1 zs|*hR`2oh|M{RsT>m5lT!NLFu@HH27QSYRLzhS+j3w#yD->};G$LntG|lp5SSZ)TlO@>zp&oX2e##d8tbpX9P4uf z_{)DGApK=eef&!69d%$^9w?>$DuKgbZUAxlZwct2{wk9rdwu{J$d?Z)s=rF&$etT; z2inaJXaMJIcfJDoDnNsE)#CUW^~yyc9iV4@wKRU5%?>J%uN)L!ca_UQG&S(H+@y#f zFgwt`+@y=|VVy65k6%}k=+FMDrN^vfO=&h@nx-IkZs)+HV`m1Fu&X+gMU-+6w1M{IKT%S zo0cfxV3-}S1CGrM$N`gVO~W`CrUzVsN!F(695VIFc_0%YhP7!a2SUAaE{JA1wHze9 zJhV6<2Hdsj%?Cx-JH>N2*D(v@FD>H~fdIgm`GL@7oP5wtJ+llx?y}UZL@CGWvefi| z67buCL=6Y5wP`NL#QXph@ODumf#caazmntGicA^5oij0>XR1j713$Xj;j3OjHGGBb zmN&ZQ@>T_AZ8xQnXiR6%#VXR$d^Mf8!0 z_M-JiS^ZK$i!!HVCpUd3xw1Kff%(7Il>=E71Nt0W&$zjDnq&tw1IdntUmq|`1)|{F?+6zFb<{P?(8hryiRKJ4u z48T5G=N8S;1!3mUquyXQfUWkqnRahYx;f@3A%ITX-m)2F4l@b?G*+#SIirt)0Gw5N zlQo$IEfqUbLoDC|fUH)9srHyN{U|B8vj$*RV$vM8#|S{ws<3E|+LHl40W_=hCRpOk z8Ab`fGT>1y2J;f5v~iYbb4pq6(QjZ`t-{)*YB^IHa~fkB3mTKO5tSj8E|ySpmQixB zFE|q51!x9jw;*%>iq>W@88%MqV#%h+Fei}38r1?LY7bQDb+M%H`GS=JX#g^9mVfpL z5>?+UrA?*HoofG7eKW-!VF@v38ubDU1A>p26+^$7ai^F=$p(P`wA^d|@(1`W)uPCf z$~u5UTHLi}%o)LtEe%e;T(rCw>VLC0!^wJp?Ey{z%i1Qb36n^3r-gbVs7Pb(!~$FW zTlgVd05X^XkfqI2?P_+^HIrRHD60$R06?_!v~{Y*s>N#R%5B;4W`Zb!C^9KxD3T~b z`X@|k{%U>08YW%!r{01_+Qi{P@Q3^OBH87zsd`zPh>vC)iU?Z=Wm{Pd@$KxR=PQ=Fz14)x^_1I z4*+XGl)o{s1#AX&pf+-9j2CPI8^NRC5%6$iR?I`t2f+j2esCZ78@LzT1MUWQff}#@ ztOx7BT5u<*HiPUZDyRyuNJeC6CZm6dZu z{QvzQ`M+I&|1%#neWfzdC3DalFy_pe8$Soq7zCqIeddsBj^(7tmGS)bQ>x#v;TgjK z5(rT&{lEtrz)|o!_$N35egnUPU%=1cC-5UU3=V-G!1v%F_zrvv{sF!L2f)|hE3hAY z3HE_6z+Uh<_zZjs_JB{o-@(V=Bk&>k0K5<01Mh-&z}w(0@FsWz>;}8Q>)~0C2(AHt0Smy@sdT*x%m-J1%K@G`ZzyF;`Q z!vDSR8vjv$Py3I){l5H=j{Xq)2mW@p?>Nl9ShVz&`hWFZ|K4sPVlK9Rhqqk$ zEQ8);#icy>S9-_)M(-A}0zIOCnb+(u_QX0X=JEb(PZ@u`*nqyhOWZB)MUOuq9zs8} zU%=;K@rc+YYT(52ChSQ71NwE#h(U1Zut!b+3c#G1&K`_7AESc@!aDvU$ zP}rsuLhG$x%04Nc!c3|cTVc^v`#mjoDmS~H70<)x1@WSINxUw0p~XLd^|E+Pyd~Zi z?^y1S#24aw@w@m;e2sqCgFe|Wz7hw-x8gha{~!*D!{S%;(J}PZG0a@*rv&s=XUyR^ z^j7kJW+wkvJ}Xc3GN#JcjUx@d(8g5^^M8eHsDWDf4`KA>iyM6f@NOB>C!~e_cl!^b zg?)gCuse+1{$J%gAzzB{kalK!|F7a=G4+oM(70ZeVjQid6$+~p{chZYOB6zFB2>hP zzGAg^alB`%aLLtm39TaO)p~SvSeMYJu^k$st)!nPNtxu1HjT(t(a}9RukI3Zhb^_0 z6HnY*dYCKaaFNpRX~S+@4z@{7JSY?Q?0tW4^x+p`W}>lJG{JyTbe7&kxQqP_%6HScc;Yfjz>Q6efs9g*0HTE+C>?zP*?Y) zegpdVHe9X&N&U_=WWNsW$^We0#(@6A3^VH3`8H33Y0Pk@P0KWkLoU1doC{{ST|K9- zF6ry5kLw%R(b=X=Ovk9Gjxlz}@B8hJqp9Z9qw9?W2|20V*B@JykeTEtP8v6@;oGD* z6|YSjXQwDMLIheYA1xLNtA<+3-6q0jhMV>G02^E~wCV5a&V)Vg&vU6fmQkPD<`Yl+pbEi~_R;!CJ ztW4XNBh!!*a_e+_c5RZA665=!(PCY;Ser{GwYAyI{O2Y%e4f8m*8QBnXOHaa+h=zi zyUW<#kWRmr$8KXgf?Bl}XNsPpoa$BEx!ZP}J3~YpdGBM9ArTQFqF&zXZXFYHPGsl3 zad9D?_JyW)+ZTem989r#J6T4*|L)$_bbs{u3)I=|BI7#mEl1?gPW#G3Q$xD#D-W@H zH^u7LWa?PzxY*XQ&erWhLeI3>tX^%M)Nh#4R-5PAj*MFJ%v|3?a-MvwsswMs|-sC#y2^@h4ZWluIVxQrzF}@I80Qs^^iAt>?zo1Z z`(+J0(>Lrg`mZkX{fBJ(?D66ZQ9(7`9CgN-9q7%ry(@-%$1P){WK?T%f?8Y3{a-#-W@9YjUL<(5ou?jnc8kHKf~xuZ->f}4Ap%x zop6QF8n(y=Zy1OtQXJPbsOaxbvSwn-@V5KP!&AfBeO(@=I)(egwE9Enu5g-NyShtn z+quAZK#r6BWWx6Tm(-N6UM!zB)=qxpw)qz&qRn6MZCbu#-hgB6(Y~)>GuYEekh z%Rwwk*j{1tHgq<=Zg|azY1nHFusc@zW~}rLLpgS#92-%NaB%^ZV~Z_3)Cj4U54a;k zBaAQX_E5P$EHxBmXe`3v7ovA2Qvq7pjW5a(BTViux8ih4X}q`O`?_%FjScS^QU62R zmj^~w-TU8j@7!7L?E98wl1V0Hog|Y<7?LoP1&A!kWFbIUWeK1cK~a%SL_}PQ8c}N1 zDy2w$V!&y;&D1o}1`+y2NMSIkEXMQZ3MCe_ zO8ccW1|e9meSg9>__o=2o;O#h@QAm0l~nsBFC795;`L%~EyHiI07&>jh|G$@))$v$ z)K96jjsNlF7558TK=ON=e!QwuX>{s3bBnfaq`!UmaHRu@z z&dO@FMiVQs$!v5;5z_Vy{%6RpRnRgCBbTY9Ql&w!R#kAE5+O>7c@T4`KH^fXfwB0X zPj5hha&XeN-ogNO);3-21?G%{{o(W3zH>sK=%E=I<7P4##%=T&ttCdE#J}I6EI+!w zr(9xvJ#_M|K*^y`87~TSN3Wr8ek&Zh`8mL?Y42Wi0rPMT@bEIwtfm$cj6-skQ)0&r zQ6JcyR;sRGIEIsh^Q}VI>A9B~OpV73o){{1EU31gAIuE_`twHJ+^|Rl+`qF*`FXrrv z{9^TcPfV?U^2qXg-+LU6hhg3EXh=g@sc_tX^=E=hCS{=A`N4D@ z_Lzk&o2Heom{p-O&ab1T%a;k^#6TnQDBwrWf&Tc#IIZ0S;aD$dQ!Y@+B@}xOBQ2FN z_DRXY>WACjlS~|Zeb;^-7&1vMS z;Y9C+CFD<$=!A_2g^kQ%$(9=%C0nr1S^?Z0fOA`^@uF=~V4G%2O>EOQmb~&@ukN`l`@< zdzLUOZ@xP1-r6yHo@eG`Ip+eE0fO6|1jE!4@YX%(?_DyDM5hCi&vzpkJSfoXm%3KT zkz8WvL90U?C6O3SI;F(Ly*v1ylxpw`NV=WKS=^J&+pFl?)<#v zb)Po)%KGkdNfAyo(TV4OCV;oPx$T=z(7EWfHxDxSPFl##CAB1KAs8OYQc^OGkyA2A zE0I(op^=nhWKu+_6_9JHI7l%oq!p4X2HSHUEaoVJwf7b3edI|C|A?$c46}*jL<~pp zr)th?|I9QYZx+9zuku-=QEw)6Q=ZZmXFR(b^ z#fwy@s(!~K7nx`xGc~-)p})>M!jhZ_57T2|ZIC3kB=*mUJAz`L&tHUXQRW}dVAC|~ znPHCrDOI|p;Xmd!ud7S%|MMU2xo`SwGgInY78cHac1iJpvla8o5)ETQd1Ws(Z>z7# znYOI_$NOf^y3^zSsmf|lj%nD?6rGAba^zQKCHgaMx7FeM`F9O|12(f2Fvt^&a+S$P z&;d#gYTOypndBKN)*jV{6^*GUcXKfN7vedNPy+pCU=HmQ3Jyt;nXdPx|Z{OI9TwU3Rj*j7`urlqL;r<1mhPj}c6eQnJL zPfW4c_ogQM7CbSdyUXRm`7hQ^kcf#&q2>^Y;9&Z#4!IMQsWYUfQsrvaHlS-z)^m-? z-?Cu>Xv77^HIeuP7^Slf@ZvZ&`CA@F5`ZI44_0oBtr_IvjwxV?xNbdh2P-CS?pm2Y zH}}BH(%arx)VyUzPRE@KD|ggqFY`V1D(Zje*yEE_YP5G?{kwOx)@s9#11c_qjp6Ex7^|yPX5eCXXRy7Eqsxep7><0I^L&?Qa)Q${ePk6q2m=ka|X1!Hmp; z88ZqpnH1|0^gF7WDnlQKJSn&9jKaj4i47mi(RS&2-n5UIZVumZM#U*)6 z{8==L6f-i#;v`Q-x`r{vLUMl$x|r1o$$@2UGlF-yjE>vNkbKIf*}idW4?nbS-(7{( zlN=tKsyxe>XjTT6w#`hhb|5~=JoiZB-4l`)FBJw-vTdB-HLfndsJOd|B`Z6dNzMnX5nL6X)VUZT_EaXfGIXH`ft}NF~+OlqXQu=QrUG%_J%pE zX;juz_3?muB*JTSN;7+d9~u&moy8hPkw*k`oFL1v+p?IMWBX^+yUQzUef#%IGwbRa za(3>aH{ZM3=na=eTiLC`(pL(qvJ7t%tiUyn6JS3I!0o$44b-A2qyrMrI*kIsLn=#> zC?c|Y2!_XmI1@Og8WZ&`QwK`*S@y*sQK92vz$1or3W-b+;brwEaRzTNEj zUibU#;aZ4T2{Fck{y1Eqh;Rmdin4G17n)q2SeR}$rxzy1j?A2AZobym#!_ZaL1IFo z$87c#CL|Vk%$S-j!W?E9P-6xY+9Xnw4%9d)BiIwgnX>d*QV9DLU7Ys1wAn(I=fVWJ zjNejmf<$bS#{JNZ3Y6OzXhtgE6i9 z^%nqgM3CxRhuLD|M%838{zu5!zaM@0cOjE@ME}liz4{{yF{==0q>On4(LU%Zq1TL z_^fcMF~Z+E$rhg_))rFqLm`%XWm=ow;L6BP*|k;f zC@3mTt8cR9`9oR1qEC3s+!|Z)tcvJ*`rVRhkH%EgGBLWIx$s^fTwuLpCB`n{Y&1QN zGeCE&%Fs?*FwR&hCB_+*)kag+dS$)thAfOV9mg$koDs>>hy!H08$20;-5nl-qm}s5 z^&G?_=(wBTwDFV zHc{!KMRlqa-&;R01hi6l~E5w4uW5w0r1Bu2PywIa{^*cFn<2_0hQL>rEvcG44R59t&} z6AiH&Wvo}-VB_kJ!@XM+UK<<3s&4S?kj9f?qRwL}SY+<n~vQ;@;mRFRjYF_?DQ9o0c+c1D)d!B}8_4h&bAhr@wW4-W7)wo* z8dk00tTbh=Q`Kn)fa&!kptS$g5R&50W!eFrj2MBWDees1H1m+^me@%1F~?q(=GKSn zb6Li9j+3Sf$52DVNGkzX=84jisuOZo_C@?9-@GT> z{~P8)blL8`^m8{&u!3}0K_%If_5oQz1}l+DRVt;7tyZTqP#QI^ zsA)(+4HwhCz{NCNSPNN|I+a$>Nn~oZOd+q6%IaxUZy;+9`tW18vgV7gKGq|_l{Qje zj`vFR;zLAQo92hkY!go$JM|Bh+A5zt*_N2{`Zv1JkwiY5V6WY_t3k!i2 z%`a>P<*C}boj!miG7P~&y*laCPy#d7GFI4j4lCYo)@kN-}Ixc!uHRR z95H8vZD^CQ8C^r)2oIu%1zg&qN`(bPk8RXrM2plWqm6PI6p$y{9p;|FFS;OKG}J@H z&4jd^dJyGHkhIxoGTCBU?F$A1V`KIBu`&Iy^#THj>fKGIb7a0AB6js4FG1AM8HmFB z2vCwjAOTB6%rah}FF~R@Bnof%?|yXGB1e|pQk0nAIJw#-tn3qf?hp-+dcjb;%ibIF*iY#j|G9;D^huqs?E9E<mkgCkOA2#2epmVS7ofz#^A7p)!V_-cOwPs)ZNhITQ4knXN}$zQ7dc_DW_%_R^7zL z^8r%lxLBx*_d8CJwtCFW9D0Zn^=eauS1`5+f6HXs(Cq9&u}l|hwY&X3Tx5-VAF0`# zlFod1Kv=)OqvPCP{Er699xHovJ6&|MoQ^~}I?}fGqu=PYJN2e@8@4Q=hG=`5&~`70 z$P^0BhH0{^G%BZz!%oGdQ#oz*I$1=mH*uVbIcaKA)yLXugd&{g^b$%Sus4Y1Ei=sE zWD#DRV`5J7WLB)vMo0<9H$lLiF4x` zxTab3X?Ryb`$2<=vyjYIK{Dc47K|P6(5`}ZG4<8NQ{UlyH&%uHo<#S%iS760v3OPC zSpCjQJuF6}EUwN6G9un?V|p>vU$76_@bLO&ac`ir7xPjz`LPzt?@% zC)Tmz0Yid82PqqwNm+03l$nn3Fk8i)&1$Cz1z3bWu&Z!=^6Z5QULU1Q#(l&+^kXJ`dwObYO0G;=elxIRS^y69;3CpTx0Cn zHz+nTrpa>MY>3z!;#8UPNgdaW!l?{}QVI%yQCbQ)_Z?+pE zynRHSeE4J{jd@~I!#o@s#S68B-dKPrDR5O+g`A}eCwS0lA-iT;R@jw3w`e>c_6nb( zjPlicm-!zbFF7k$E7;`nx#e%Q3ES>iq)|Sn;!>xrpM{=l+q-z@VxLwEcKbL)e`iUJ zHiOzaTw`J>7uYM8n3$0?CMCgTrEp0_&xQ1+8ZPOotIl*iBQ0W$SEWD87V|1FUP#MH ze%OU)ab%i<7w5S`uB5BHt1iQIozJkQMR@BFCvbIUDA^iaa2mmZ7*lBPs7eg_IDLLm z%>y$Egg0q=_N=UiRJLt&9cEySNIsqZY;-YZ2WSML9_%ibsT`tIK($e!FmfifoZ+sj z>Zt2RU4$7fzsHE|7xz5M85IXnZ=I34&KntBWJD80Bqsg4i)YS`UaNfc!bZp?nevIf zxI>f|MLW{*-puwci%wVMcVXt5vqCy+O_sxY&0>r=!m{g9Cc+JCtB!~U1#sh-$fZ4t zOiSit^FkKuHQwSdMtDb9DgzARmYkFjo?m<^kmQ9`4)&u+=8cf}}e zX~}AIdlvX7t({pgZ?x#bBUSTG{APz5-fWmfpZQKHEiN$u__A2safta5vH(L|DTD_) ziW|iSlBNxD0SnGPL^K)wUAo2i<6lz!!&Lq-RUq3MK>O7oTQ?P;o)vAb2n|x1lmSrR zt#FJ>!y+kh1}e_?!TZR7OJ2isCA7lz6n@D*;Tp7ZiOq4|kEEN5S$DzPAq2;Lz2n%A+fdFn^> z>WbL`J7G`S^r!A%BnZZgmU<2Gj{BZ4ZJEBb1&>>97u$Vgb? zgTND=l%`E-UR<8PXiWZHx&FqflXFmZwD!yy=ECmmsyrJfe?x1u6ih3Q{x1Y4r=Or= z`=~DfHFj#cSj}|O5IeVb+a0vbUa#sws&2JmP!>jYVt+JN(+KFWD7x?%H69e=c(u$h z$diFMKqku_E)wG%O=5^4R?Ko*7T-I`T3R;Ny72ToGCzUOqe59>XTnw9nG9J>a#*Rl&MUPLUTa4< zr=a6(-%#8@$ilkzT~#Y2w3iG?jPd%LrcTM3-O^a;Zt-KqYo4mKs`be_|NPog9i34- zV~Hq0X0f%Pwpi%7W0Cbag))xjh<=tf=hYN3c@y(Rfnxq#65gOsph}S9I1!~xG~GpU z)F*ar56W(r;;w)96B|DUvRg_bhWzO^163bf38-H^DMDQ;Iu#U4tn{vf!)H_r%jljRa zdO9c$JVaKPBRpzZL9#H>i8$~OP$ozC`xY7e!DWsP-3GpA*(i`aHp_0$8k_7Y$+Fq9 zN`8P2wrRu|7oGzsx^?gpaJUpuG)JV1r5XH3Vo**yMk*jd%!(-d4J0ur`ks)I&Q2}Q zbvSa%Q{83wScXa+dFAd@@lC3`JkJ5=L~`^AGml$qP9>pdJ`x(2!4QptZJy+@;SU! zpn(n}E$Km?PE7;Vi0%CMKn@W|Cmqt@PY&|rBW&4@-^Z$Cqx-Y;i_RC5?r`S2&1QGL zGa(;*ZdyLO^~QiidgE?$T7fhEkrUi8rm|mXrMF63VF_vR9k7obM9f_LrJzBPp`GNN zP22#zAy*vquI4rzW#d6Qem@@_odMEF5Y+!*BCeY8V3(5WzE!z zTdslM4_yOqRLv+h_;m=aK*w|L=zMI+hwlp;*%QL_=(qfr|2y#D(xYh4-_f7Z29Q*a z@By<>T0%?FCaM+QOW^%D^8O*J6-2&UXk|9DuTvf|0%=c8>Oqf%Oa_l##Ts0y6G|oJ z_@kZo{1LNl=r$>DZ{Mlj*j@pXOQ|}+!#KO+kG!3yJb&Z~Q%Bw*MXJy7yWPORh;{kQ zIP*2hEM~pQ=VLZcKKhQOWcGyY?AzuPna0d+TRyq;%af=7UMjS9^`Myr)BFif+6tx? zU2NJm-}j^buf9n(M};@e0S)JXhF=fUaM0mllTv%o6Cu4p$-0y$R4PovbfAGBNkd=n zm0sPc7!4}r2_D7~8m1E(_*-c(;$9?a_u+LzGD|8Dm>!_4!~-O`-RB4ib1(^WfrOT4 zmrpJ`fAaLXGWPYZp7TQ#2)jiRP|G(-)|=k;GxVWp#lklvPRvU%Xa zW?#}SO1#7_iAe|?C_L#d>clpbPuGvDtnD5v{xT%qmfi!C&3t^aHv1BU)#MFAKzk`=oxKZMWerZWo=gU z4aCry+PqMM55J|i@4VW6d)*#k|ITZ0d`&o*TICX!6wM5}D<3}kWb*h#^b=oGd1~dB zqqp!SgDRz3i403}OL9#~N6>bBPbOha*_a-b8d4S(vUXsHdzc;Gi?J>u>BnJC6q2Dj z9>!|zgnIW#>b?I?*Lt-7z#I@MAL2mb#MRR=wMi4iqj1`hmufVo=7C2^HJMU#N3h{) z`$Eiy#qT}WQuXlBO-tV0(E^-6oXMT%u#2PZjy$&s*8xWIW5{1@C*Aq&q&q*7{#&~9 zqiOwjy7T{bpu)rzkrO7J3# zOump=OaaOo7|}2M=%GW6iLD7 z9nmN0+=0)9l|ld=Ln*@NDCH;2?KfYg4@D;dUUUpzVm@KFu`T3!ko}-ia~ZQcz8w=Y{ZFF0iA7*-g5?qq6Ku{ayltTp&v~0y zvYN{=N%VbJ?}qO^z&BOk;vbd{^GVZ=-`ty6RT;DwKRGGqkp?+UdNNu z(eB%Ktqw7)RPu^i<(af3xNar=@(V&+>h!0v-mC|`p$J|6*j^h)4*nuv&S1dNQCrBI z$`$8abY%1;CKlUS;}yfgf@4Ewgy}jPZ)|%-ObI18axU_Y#86^JA5SJ3j8}NWLbl-8 z2z$bmIdsQIX`3YG3}mA>I>!}{s(9c(mhyX7jdPSOe*U*xH~;9qH}4%Umjqv1u;}?k zh24qc=T~}ar&K4TON@6JB)cMA9EX&E$cp|`h4CG?PL1~huhEC}S$#a7;dCA2or|QhE4*~^5U>P>`9Mo0 zF^^tSa_h!hH1fVpU<&iqoP$DS|BAJn-`Q9R^zT`)Xy>BB$~Aiz-~QSI)k5*u`4h$@ zmM^GGubWcs^wcb+&%7sGY;Ss@Xi3{#O#ZT`n`XaqUv=o|zoE4BNz1Cr7gVKbY?v3z zbK>YK*$!xu3|9Ii=0vwO&E}SvTu0C$04Tqau@JlKrO+NI9R zKje7;a;>=k)ShO=U%#KSgCi*|F`{z~NIW;qSn32#L*Zp&<`6*-Q%5|Uao?o-$vz_bC{A}Lj9e;i` zIhZJ{o!sK*cW+28Pej`$x0I~-IduzHu+O<$#DQFNuCt^ByPf~b-j_hPRb6Y}a|cOR z^DNmKEL*lFTb3-@mS@TFn0QKTXU2By49=h=&;TJMkdT2f0s;*L+*hCle)uVU;5dmx z3N39C+V?ZGe;Ha@Xjzm}`f7&uy$28Q&D-Z($(ECJdh1{7{i`c$+me0nIp^-P&p!J* z`waW0<&sbU?&SGGzJK;HfGKVfen2MfkF(%sU7JvXYEqQ2HC&=Urj6UhaxpUAbEtwhg zIZ4pxBtf6->d!%+^Q-zdq0e8f)?cj!MxS$jwv63L&}VZReF*q4+32HI@)FgbScMcJ zM!Jq!Pt7i?Mk3-IfAo_xx~TRv*kbW82QNXYKP9uWSZ5bgBV>EaU&NjpgvZdb`8+WspWc zi!|22nWPo$Y|+^y$)weNoYZdQLfJ@z&j`&y8d~?a0?ljhJDRq9^A~sAaNB_&>}`>- zbq}tYg_*ATP49=7kggbmhEzd-grHJkL{^*m}=!-DpQKHm$cDO9nB_ z0Lq;6Gao>2DWEFT=NNSnED4I|DIY*xddb1#%?P=2D4pg*xU!vGxhs9;1IV?Flyf+J z$SO zma#mACefONp5?G1`x#QmI1a|dtC+#;aWt5+&|9CJA$Ba19z{cXPW7{7c8=^(G_hoy z+vKiDTQVlf9J%=+VGUaL-p#@<{`kk%Lx=7}Q$h~9On4a202P5$M}WsXYLJYqtX30s z3dE|Ra?x-?%bQHca&x(yH_fYf(q zR}{(~92;};jwf+KwdQ0}y^8amoKY9jOK16?nbU#(Y7)1xruS`=brNQK+0tv;zy8gV z4Nva9>V}qqS_f-i8T#tsZ?|?Di+u&k1zpXZc?}~??r)8+ee|kC%2FKn%6ZMMo#6(& zJteua5$g2;=*>3J^n9?%;{Ir<)Jow{Y5Azs1Hu*D0n967?wy+B_)H|HaJtWjN!=+JmRE_$noh}yR!{j(CZGh4b?d~TH_0b zOx2tEB4tarx3z6w5*8*}7MQ)2E=_TuNUkcVedqQk2lMVQ1seP^P9|YYvBCEG;pW2p z-rFv3EOYvE6gWzWzpdN}b$;~RIP*Mukj&kbi+zPIVJq;k<)S=n z1s=A{8*RoMT`OpwmM>WG|gks^-O1aQb!mdU%#nAEbSlf88*FDbL#tr>UAH4`IB9rHM zU;L|6_!ounK2&VZGbY^?i;pK`!C>2XGT6(z$CJFlU>i?nFt2#pHu*LUf~x z_$V`nS{vxUe3$M0a^1rW_~+oNH`EWe6lK2ePEF3^9bf=qE|~!Rb{=I-hxW>+~zruWUijW0cat7-BK! z1MN!hAdsW|<4UDz675guEEa2y8UE2eA*F#O>1r`*n|2ECXC>3TQ<2aV+5U->NwrTT z)9J)`Y{fVomd(Y^;vij0>a47YIY&1=P!`p@JtejWIO__qUh zBJa@pqoA6jAb1@s@JOkfWk-f@;uf_6iR5M zs-jd*j?|NqSW{A|B+dDhc1kBMJ4{93Kj2|XJkyd>luAN!i6@nmTH#mBff+3>)@4VS z!%<00SrO(;vk~S@7+-7s9h>HzdE?)!5jcAe zNOhc6>)>lbC6`n5Bz+?ZGlVzo;ue{LKQX+H2BV&$ zQ4CtB3t9-rk!#7U_=U$+DsVbOCwN1O=Zz^DX%1j>iZDysKmqrXJTEh*k}^^D#nH_C z1xv(kmSzI^Fb@B^^0fL5#~fIV;G8((J35E zE+vymGy19{ykJhCWr>O4=#&^x4&)@JBU-AA5|{jzcgC2 zvLWAAy}Ut@W3}*y1#5X_Wp3BbrKOcad%7aa{gNt!xv+Vtrfz7Sn`Sxs#f8EXyjIQ? z_g~l7yLV+stAjd+LFO@{1uI33RG`oVEtfOWQz%490O)TzA(L@(i6mpQ{i?lsNv)|gP^5DA2Wk?+hmxm+(&Db_d`_;Gt+eDe$IW?8s5SvP-En>*CIseb;ZcK79ml9sYiQ;Eq~+#C+Il$f}+ zEA}q&moB@$XE}U_mR`TOW~jBu*E Gt}aNZ{R*NromC-#1pL&1GY;%u0%qm(EwoL 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 literal 0 HcmV?d00001 diff --git a/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf b/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Dummy Payer Implementation.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e338053d6c3b5ebeb3676095e9763593012e6f30 GIT binary patch literal 278011 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%0A|~haYE~x33iZ{+Y{JVJK0H4O$Ve*W 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

  • !Ho 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

    my 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

    2=bupzC$kaI=1dn}LiX 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%0AqmMc5urSu8 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,m0|bKkB^I?3Va>|FHe?LyUnT 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�ETgr%1ye+nLs0FMaa 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 d!Fhb99 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

    umzT|WowTA5NfD)XCRWpUH0G63)O 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 literal 0 HcmV?d00001 diff --git a/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Usecases.pdf b/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/NHCX Usecases.pdf new file mode 100644 index 0000000000000000000000000000000000000000..52922959acd8d4d9a13c5eb33ecedd23d01da749 GIT binary patch literal 134558 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
    jE}s+-O<~>(jM;yF5pxmaHmC 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%0A6s1E^4w)U8qZFO3MXTD}S`|e6AD{Qn^25 zcpWP-@PHq*oynOw8A+N!FA@en_76q_H2u4&_}h#&(=)9#-R8SFAN65;-$hZrkGhWq zvAfmM{xIz#4+VIkW0E*Z+Ev#k`<86K_baC*!!9(l{GSzXOt?4VX!=-$V#I#Ln9j8u zajL;bWxwH8L9U5dTs4XzMJ;NP@0|CM_k8c9RKq_9R15K=_0#rKaVHsQZK@s1*sL0C z8_ifP8@4T<{by5tqDt{WvYMBAu1;@LZo;$M zi9<&wPtWFxaq-K@6%9|onM_;**d^x#cHguW(gU;oR}-aLG{`@KCrFvC=3S>#K_(R% z^ZF=773z}L3mH2KqSik&$$@Z?9iOaw_ zy+v54SW+TjV=;{NexAlFnV1<-M&oizNQ6Uj@?`Ul8Fg+NM~KC�&!9XxGH3590& z9Im08#pv1V9v19Sx7zQK$Q@uGZdY-cZTarlSJSh9q)oYXakEl6Ef4RxkldVKNJ+mh zV7CSAPbqcO2w2(u{%7C{S+xwPbBZ=RPediP7;8Y$xS-`xvJ_Xj>|8F(6{n?)NtiT_ z&Wm5rz(OwQKu1rd9Hq3l+>rSQ@YYL`#5bgqV6*Fxb>T*Z(@rM^$X+tl(hmp{O9^N) z@ixW*0ey&F+5zB0x?-;%V=8DJ7ASBvMUVbTn`)+(;It%9(5Y+L2z1@9`X}uy@Mvq~ zMo-ny@DY`jmZoFYWLUZ7czOBA$bj9TMJh3JKld=q>sY<|5*uY}*WeQ<6s6;bbNtVN zD}T7FWi7re)zD;8i=KqY+(%~Q4W)gOr5e6m{B*|N11c(KG0Gu1>48i-2?^?<)o^Ow zfn+eF;$=JV|rKeNfaTHT&Fjo-o(sF>K(RwRv#^vaG*)lmOh{?30bPFoU=Z2 zRF4LUVF-6fR37Ft;*A0RT$hjV%QH35r6et?^dIgaUlhUt1@@R3^k#SB6}+M86zo?- zH>3{Wx+O4EWC_-dQxm~O?Fs6UMIkfWqIDp1wgqIx4Y7+m6D1WE;}K{di!#?b@UxeV z%JsF?X1tr!9uVR=O!llllQL&oMGFmC**W-Jl~70}xt@tn(j}fc`92pjRBFmuegY;k zGH;-eXPr0OE(_y$IBZSjK3`|4|KQXT3mUO^-pNLzyVckk_3E&kXC~qzGdv4C_5!VQ zZG_^Of@<=4Wf}M-W!DX!|4|r2htqzYQ<>oWs)>|Dd&)piPU7(QB|yS9eBNbE=oI*VTyEtflb{I?ggjVBBIA&4O(J)~OiGtQ#SkR=?SX*zuN3zuj znd5Z0H`W_w9QF9Jx0v252whuZAtx8(^i=1JG7VWY5Y3KG#~BMRo`+U=tAX?r!efcs zoznjq^wy@vMV3l5I)l*rY5H7QsCnqgo_W{&ApUZoJ3>P{zSf^B0rdd&NQ=UvofdO1 zB%rJLJ8g7##;nR;gO$wlWo~QW+f62&ZP2+VLj9ctd83cgf?S|I3EQJ6ALjtS@r!`RzZf>mdi6jqm!C7QXAwPgMsrGAN@mNo9q8&WO{l=1cOPM>KE?O*2gz58YR zBgwSnNXDFYIUKGa`S0vX^umtcoJn+FF5+0@GZQvkz<6GJ#^+PD^TM5LXe4OLj=y+X zW{#Bleg$5>ft}C9U~IQ0Pxxz89e)?ClBrHtAN@-9YO4nqCOQ~Bo&$n=E!Jx&_cqLp z=chxu&ZFM@np?(O$-e$`YPYX+j;4xf?3&A0_uY!nX*7QDKsvQ=O<&v?cEs_dC?uw` zg?LTLSLrdbjnb)<%zvQy)QWSb=+WW65KhQz3PBB)*!>eS8*!{940xEANbcN2pl`{I zVX&JWk=&AuVP>yedoLl$eX*+7t-U!tkImDBzFW6DA#yN1ET8XNpj#bkUp3F&z}02O zR-eUlh=pqabQJkWyI>&Hr66Glpg@o!+NeTE1PDmdKw+r)x%pONb+oH4I$k$EbuZVN zXkHpFEA^D;Y)mg?Ak;TsJ0H(IH$FX=)MIIBOeHx?Ze)l_$-rFlX67k;af6r@a2I-K z!c>m=PcHd)S?02EaJteV$ccNsI95Cp>ALzd6OF~BS_|&GkH%IPLyS&_X>0Z48jVC~ zRSi0gxI8%;djoX#tar{sVm`zqBGJ^ZrpC!e#Ov4oIZ|aY+0G2!IIEs7@0`t1 zg_(Gxk6X6+Ofop&t1b!#5qo3)GM~YTdVu~oFW32($Nqu$u9lHrmiFJuI^P1d zYTCM=^@h1+v8m;cXT#xVV%2WLv-D0S$Zy5}Ew_Kg;{#@8VFVSbMd#$B$nq)?l|ainSbMEW7IZAYUw?T82l|Oi;h>RK_xM zeho3E7wmxn78ny{=>cc|+7@h}O!c#6&Hnte2pZ_O&eT<`#WcOH{AteS7-slYFok=f zSW7zW#9E@S<<#y3^GP!)4Yq4?fEB8b_V-E$oM;s$nhMc6W;m2+6{znBq8TKheF0yd z-a-h8%tpMw5LV(>vCw*4kOX!@El0{VXK28$^q=NtoBc!0P<<-mx2imA-e-tr1}r-u z1ALsmXL(k9puQLY*V{9HeR5)NvqECX4vgp)eyan-O{hB}i+0StM%I80BJcTZT*ONL zTDpLE9-64b7W#b?BWBxz6%)`9BR~v)hgt*xQbUb@Fr6cYl+uvCjp~Rgp`t|maH7m%nwmlgLP5ULzzAJM_~oZ&cZnshVEC~8xv^ls#`h*bZj8aHQX<-L6}m8i5DGa0%ATE9e2h>+I&*Mf zt_CEY_4NRQU%mkRB`H90sFwk%?h;8W5_h2)k|0L`{Mm;vnHE?#`IMSlz-X`nuBH!R z^yfhdgO6zfe|0SMAJ=bzQ)jGC9?q46$b~*=%T}b0yZo`s)XKwGs{Cmgd_QrJzbO(& zfeZ#vgS-U%`UjYvIX{NJrVDx)PYmZ^P6i#tZ)F*0x354_HW!6+6bI3{d;w=O+}Ez3 zQy z^s`1WlN=_8myoVal~+1i+Kn+cErfLlL`{<(STP@u%{mQ)j_feg&{@0{9oocNrZb2!=QN+JiF!MOv9BPFE zVF`cB#T>Ror$lb@s%B%A3Hko2T(G(_lEM4jQ|O=lapLI06aiQYSr&v0DS@BYw4L2C{bgji8scJ)dl;(N< z4im4Ws#>s4A;wWzg}Kgzy6CHbzqPYI@u=|j^abNdyB)`YRX`3rzhjItN}-!Zk&>LW zvnFoF(lis-1g;9kP|tT}=7W>ykSwNRp8&iGKI$W45r)E`+LOapZRY1s2ZM%0yrr_3 zT~LFs$eaLgEp#mY#RM1Q$^weYboIpOyVZiRIf8Y0+Pi@pWlbW|5tT2H^`<>yH!HNH z7PEX-*Q33)8eN{T{T!_(R1yEQsBYJ#{UoRLq@mPzcQB=QWG;J@JHwp&Ukhh1H**RZRdT7@{s)^>n(D3?%G*P_YL_Kf+?p{ zb85y;_`YbB?C`&2Rqcom(&z1y!Iq%r)y|T(^|qac^zKU6bGyJq%8(Su8^Sg{qTL?- zSb!csw3vs58h|R%PmBI;DTax@>cjB1K=ny8o{9v_iPP`H(hDzkvfV2~t%v3V>LRTl zh+_%fVu8Pxl@34k+b@Q8@dEI{%?4O`sOt>|f|rIP6eG;VfEF<9W{K_fp(5&&Kt2-U z1eX(x(ZN*`$w7Nt%8`)DfE=_641_4&A&PYw*X5FfJQkE`(B@8wJ?4JK`O$%lU>;tI zNQ{fH1|$(qK@cdwocGO<+~UFC3WxEbpGiw%hdQ5v9!u!Bivx|W#m*-W20lv^o94#m zdNbrMSq+J>hKbHEZqNaBjsTAleo@e8gtb`Db9NHpq1gLdPei7Am`$pMMEq~33mrHSdXU)7K#~F z|DizgfQXD_M#Cg3M32x_^z?B~;06&*i2Ka7i#C}PWBHE8AuKyRNu-eTvqd*|p{<8Z zk}}@?WEuCRx&;V84j?xjyH!tCETS1t+(V>v$(E#99#@g%%dC*!74$GoQ4NGP!AfiA zCwm&Ou_-V)v(zA@9Zmd$yqAvQ5KpNWNu`|T2uZ7Ogj%+Tg_A%Ibmw|Y6BG?S6wyh| zty!5=O2VPv*g`24E_Nct@=I|~(GH}FIx{X^bZ_O>AxsTJWgkM^Ed@~0E*Mw)T^5ay z7KQ4>t#^@f@onFDoJmOM^|DIB~Cj(>YC6&F=%s61|ZsH8=!7-(Z!Z#!u z?9e)(<@!A=9^hPc1GL#m@p{2tkQJ|}%zmcjb&_3lUz}1Q>d5U>RQrMbu(&i#R}FZs2z{CxyzbY|zNjF;5G zh`w(gMjPV)W2DC$pt>dPeo9|{huu#7E?eu{#)sxH6fG5P)+(WR8 z$-?j?Qq;2`okLi`nt|{@Cmd8bN5x5*BQR8ueKNluH2M7pv7(`j;iBNnBolI=xrxXU zb*lkVEa3mJ&Z40!935(dlf)~7T>zei((UgBJKCV(utKr1qT0%Pel-fh?I#_=T9l0i zK(XhN1Yp(QX(uaZ1MZlN5_r7v6Uv}Ts`GR5;FHyW!6_;LF+YMwSQ+OE0z=KNBqeuK zP^R7fB~4>aDvC!4)+pb!JB3&v(5nLJA4LExgG$mNk!qICUjkS6!3o?=9aq?QAr;cj ztfq{^yn@R8?n@H5?M+d!sdX61EiVA)yM8zYz#|3iCz653>lnBcMNGB=?{W^3f0i+W831Yy46M`34qH zdV@v>+Jt%_u=7$B0Ec-TeNcczK+8jS;*_(C?!d7CD64WvcjqSIhYm&nG>F>PQJ3J^ zR?4SQATv~w&S(-N5$4UigYmHM@N*Ute02HKY>Lig@r=jx%M7jz&wq1lqOPJ;V0j_m zD|mevx0*7p*Ja$U{C;$}-aN|Ay1#lJy0ad$&!)GWPi)(r*tXi(s*j7kUP4~3Jum)U zZ_Bvd6nDJ*)ONTPAXj2sA-;dxIOiv`u^-j2TT7hPC0Ip@6}n9f31igOqR(WW#*W zCC{sl3N0cX096Z>kz_N|t5?(>3(s*G)sg<5cN2OiU_U4#P$T?_TUV z@OGj>6;<`D(m!Z&2LkuN5H(P?U;!7HAu8?GG}LqMUwg7Rv?&mYlm&kSm}AVLI&z9> z6iIO!F^|Nc14(*+OmKlpgnA;WnyICVWDL(72wXZ>I<(2WcCzBQ1G)BISaN~W*Himk z34G?WFcfHusLnsZbx2gxA5_W74{ZBjQBX##IFdZHUAuKtFI zCmCG^rBQDKRfglq4w<6Fj3z&a14)Z!Q^07Sn>|4pnZxtIwvQjhvJ-`zR^1>! z*5jc>_V@SG)d6Vw{C<12{)}An<~jeIfvl1`U@*d+8dksXs_dp(;Gu2PxgLv`(%bmN z%-OEf9;;1Rr^`3?-dcZ(fTseDs{Bdg(NR*CO^X zi$1bh*7&Z=Iw8&OVT-mlzZOKVw74J6mxXo?uC}MO?&^cRdrpeUbwXu+l<<55JskD! z|Iv8BxyLBoj%I7iT%QLB*wWmjoj`)mMyp59}8(IwpqpFf?(MRVrX z3wW{HpUQoT#v{qD=g77RmkF+z(vf_J(!J)f3AE>8O+ixki=TX21A?^__(x+}i};p{G7 zw>nv?EjrgzWUtHPjA(!&8%9QG$EV|9(tQ2dRpvDHzAXJkY>}Q#Qx?0grHuk82BRc* z&@ben2Y|>q7lyZ>xOw}4)j)~KrYwZZUIVsbzjxH7owl*S zeoblKgB3zN3NLO&P1*|`g?9L;I{61`S>_Z$aKdn%Dsuil#&XPXPP|n(H+)|{mJxfY z1`lj;dC6X-=_+kl3^gTGt!&k8nFT6aUB^(CQ*=u4{p{ZzAv;`G4MM-XSS{SY4IZ6A zc1lOCXXjln{E$dyEIC7Jd6tcV#lpFzDo>Dm%JNlLb?V`w-gTHS>2eA3o*!t?ajTK? zx-ES6qp}RAq@p^@wKg|OJ;ozARKL;Xqm88Kpxo>{T%6)x*&a<+wX)~?^snD_A*0PG zELvM^b(kQ(MM$l@L~{?!XtlkS;GR=RG`LC8(Q0cx8@Kr!YL6X1-QSt=y-;GWcb)_a z+2WyxbQQJS@eJ}bkI)nkAFZ`}6r6K^+)gABx9sTeyw13#0^iIspCz&b*!%93#Jyb-SVRIbmtP9;a(uU}(mT~i11nCihGb9AE8byRSk zGn^z0Vm(@fr?iGUT&n+FWFwxQZWXP?)%B4dz!g^cE%8V;zAbNAE$?6B(#aU*z?`iR zQ)f1`HgyesA9{GL!-?n4%+PXfTy8G;Fp;IfKVad!6=*znJ%rjdr!g`8Ac&o8#?Eq( z2ZH+n1zqiESNFXCvvc+=rPP4_1tN{6z{Et~-GPWJ?lc@T6GoY3LH@i4OUIBSm%PwY zGvy3jw=9L)ba;;ET^oJ8*;R1NP-om%`^7dFxsxJVG;W3Hl}d z+Lw%apc!&KC*$=zkk7!TSJ}F3Vy?Cm=pEjF+!Fk9+B4Zjw&opix6!fHG(V?Oqerbs z&GJ%TE}xET|CHIs#`IsU6BQ`E_^ws7JPa$!0h-vc~|dn`y7kV%w*2<7JlN-ZpCcc>OW5+f05kJ!$<_ zy5#fG^yk7?#^nT;qE#0!z4q*@s2`4Fi8E9WGHU=f&;t_&OYFoRDGJxdp4Md*Fr<0b zB5G!)h*L8lt!X>!dDpzWAQ*5XBp`g6Ap6g}kzy4_BVDFIg{Tbn!nOO(=W?u;Nb!}P zqWsE-N4rFxfp%qS!1dS zX$g92CV^zkH>t*fNF(74V)fI*rgj<@cPM5SIr~*uGfBFZVG4%t9+?73zej#+H6UPL zmbZt$Kle`D^sc&Kyb(sCRMN?~w}_^LEgmgVkGN`))jTM7U^f8y4b>C5o#xGu9XmLm z2kl{jROEIvzIf;lDOfJE5qrCj!amrEt^N3Muald+yxILGtd6MbkKEe{KJV-{`#P^s zdo7)pn&5`mmFWS(JWC9A}*Tb1zu4J1(3c)WpFAdWjp}j20(H>jcxX;dki9yef|a*V@fK zq1%cs@9d|GhTHK1JWVt8>e|of?h_hk?BW8$7d&1@6YH?)9?)-Sd4F;zVz&>`$)kFG z?dGJ^5B~;~dSTk!!NqR){&A+8*F?a0i60h&qg6)?mFKqYD+=Y=dQT?PQEZsOfL9YI z%D<%=X122(A1Kgo;B6~=wBt`Zo?zc#*8`_#bXsQWZs%9oTHPmDso)E=NO; zg%S8|S8fB`^!#gv{2g+Q*CYXKH#sQn+UqUw=>7MB*frJSC<^-R3|#T z>Pb~_(7mn3nyiayX-MtwV_WmAYuOLBZ7;c0axh)5H*mje7gE+=rd5;g%wY{{WEY)JK7wdOXepW+Go#ZrgD zJtoJx@CUS1CB4qsN6A3Ld+h=oZY$NcUTu+B$c)=emdLiWtd(s=3aTwR4K6t>I&#@X zn0Nw>`6e1W$N{@Ls6qYE%E zO7rzMH>uxJ_5JN?Z4i^|!=$HijAwFPDg%?_VZ(wCFU8F?N4xFYjS!cnL$+QtQ%1W- zrpRm{VYLMRf7%CgYJaoJZpAHNw6~`W zu^YM+vW2;hzPS!4+^)RzACVHf2d@JpYd;?Eih8p#ebJY<$Z{TKY&<%i?}&yEl#3Nq z{GFo1W&+krz9a{dkK>Aunb6C3k2j#2^%kz2W0GR^SCUgA+-*B#8SZb#I3bU|yIT6| z&5N%LpYtDA{f6A}<}shfnf@!QMOl z@wSJDu@$jU!*X6>W38E4B{@tfQ(4)oTBir_`>7iCwzSNDY?H+>0j1Kf`AlUj}Rk6WdPObsP48tGoo&z&u{ zE?IOl?jG*pOOy3O9cYc(Q!w~lE=qUWGt;kRH68QhcDmP?eatwva=BT^AuZ7Lc*tua_dpP}Vo?j63cCqQ~uw04USe^R7c^F#g z=#CeG^|(E`KgHkKl#fL@DTPu?!qGBqE1!rV4~^AXwo%Tp_iAfOI@bN{UV4oQ*ID*+ zYZ_*?c%H3Gw?%uQ^uhP>qne$`8>r~|4&TPJvs4|@vFUNyim+l@p@Y_QKU9Xcy{xKl z!9Ah2Oc%)9$b&s~QewPZx^(j&d}pjH_5-VV8y;P|Y7LCzI)3vwjB%&u&Hv>+b}0eAOn9LQlqYnzg1Nu@VC&_SN%NejF)4LO;G&l zV_kPL#3YV^;`NQgePcN5nwlMt%2w0exqka91md%s?$SA-%8^s}aVFrUztXneefiEO zB#vFDsr-ZES>m`kV#UznyYK#ikK<`_r_plA$4%CD=Q?LP{aUbey*x*X{ka?^Z8Rzf zj@G#tbR~)2h;2n0yPbx_`*D;q9XkTYqlPiU!}1{uA~sSB3N9vvGQIGl>*o8kY3ZF@ z2rNVseUo5~txe(Ws?+#&|CJS*Js9<`i?V$Ddm%UH;Ji7u;l{yP%km}<7c}&IJS@RY z6y)?fGeJyv%qRa4PN6QFs-52BcO> z4&Fr>G+P&DtN#gGh=3_#VG1*qRousVR~l?X(ZM zoywrmIuGfEh2*(VPiFSIgv|);dO1~WJA>cXwB;1_2l&7Su7-6NBTIA9L0!j1s!9nd z3?I95`&XKzEWm}^gbN>83m zJjBHGe+~Mtj{l|G&d?GTih+swf3^L;f`^zG{~J0-Ct<=ikRCzg#XC6ljHv$@lO#wv zSlDnbRPqB*AO4RbLkc1EceiOsp$awTnfZ0o4gGVhipH6*>30XN2`tlvXBD;d!IGpt zjkf1i_}?VK&zqHs{9i{tgNeE{iB zY*DHCI#k?qmxOqT)i%a%hVwa{EvJEXD@lL~DM&aGM8p-OodqRJ(MG5sWxIt5AZ1aI zvckkMQ-v{$Hyp#X%C(S*h9-p5Bb3#s83VB7uryib(y@bR~C ze*602xEg!ecADwB*>*~OnLmDjqz9PYi-f_VlAO3;ZNmQmP@ld6hJeGOxi1<(P%1t>#C;xdr=Nhueh$6q3L~Y<7VWAWnGgC3%ky9M`wt)5qQ{K zG@;sE5SAYJ1`i;c(^A;gW)a^$(Ml>$s9 zJ@OfB#!6!|)!}Xg(mN~Jxg8SoTy4S&Tsd$z+Uh4}W;L?<8VwGh+692X0>F(HF)x$R zi8+B56!U>)80bHd9jnGS@HXt$!t?cI75G-(x{G;Q0Rkvqn++857gyfq?Yqh7LfJu4 zs(|EK*Onm@o+mf(jKEL^*I1DFuWIiFlse^jF@%=@T;Ki0QQN99kb*ZL9tr_Q&@6#K z(wMM-D@bOy7~va^wd&YLb(#sIKV?7149-kES{*a%=CgVi@C#myraD!>NW;f95vN_)j*~uR& zqSJ3zEp@zyndY+60GE1lzjmE9tKDz2btLfE7UG6%lu%cS53%*QEok&_rj<`M;ZG#8 zuY6Bf`KQ>|vGTn4Aa4ZeH`0|4KY`U2`(eIar)xSJJqO;*$h+^g_xf}{>uJ$Xu_n^b zvq9G(>wlj!FS9$>u3_J9ub(YpxAZ9D)S-3#EAk}VkRk;WYis1oYuF}G@qHF*ds zoI-bV1~Kv=2j5Oz-#5tGAHCaeO&5ivdMaobpw0)G^pAGBj$vyRJMT}v29xcNdn)AqXTSew z{GZ~_29kRY=6}uc-y84!^j4pGT;YEe|KA4u{}KiFy>3^o1^%-}Kgrh@i}2F1$0;>x z3@7RF$j^?DAi_uX01xti^g}(7lF+83e;xmU*_sEas>9&Uf@0%-g&7sbD)PJ2)|#Xh0sZq2%D>bOwdQ@o+~?4g&xBiQz=(C|V(W9g3h zfS=vaySE;f-GA6zit>s-MiPjQ8hlL)^Vvl@;ra@U1 zcQQY}^!}lL?x2zN?x3-rQ}VgIP4_7IH3oeRx)CP}4MDy&=bV8(CyJiV%)Bh{=}O-r z{^%jy`4uQMLog$$Z9AQwq0`6Hwnfi77I1U)w3H@l`+>uN))x}M0k?r=oxeU(F(jIIAVg! zDva_|(m*e31Z#dxjCe0241 zIiY^wQ|ns%==7vq+y4C1!|8;1vE#yYsxphgM{{cN{7+&9nTl#sYO<_zvNQ%?b!(~p z<-dSWX){sJh^cgI2J&IyQ7IWejD* zN#sNGb0dmm^nVBol~JA`5h{;TpTd?SiqU4G*54x>g%lM7jRP6WXkzmxkx80NG$%h` zQq$k(UtVl~eYyKZLyL#z=b3A^iCGPbbnEh4UJPTm_avH@Z&sg{2aA@@vn#!Lkp9a3GOW;7b5MLU;!6NJ;OywbyR~ zg8$t;E-ou=gFwUT+M94ms4VW^-OFSa`QmTV4h+4 zoUKIksN3F$H4g_**<{L8b*0=pMri4Dji|&xswMhWqWWn3TG$uE0@Wu6rKZTIQRsasH=$F~q>^2zBc__jk93>P|NjBMA zlY78(J;Z}+1j;-G2w3kn1cND&cB@PN=G}oSks80pq`@^SHv_|P9jJKaaX$}or6<;$ zD0hz^tw>S9Ou$MI{}xS!`Q{y~%HCD5Ih&=QCvTsgagFZu2vw9ptvV{;bQdge^aKBm zC3WTl#e@C{t`nutnJ(WWnv38M!}ploN+#H?-)+h)4>PLs`Z}D0XD@=ft0c8gClHq!o+`H)PKu`987mQ@r`SaDQxIsCZjn>Zww9 zyLD)X;GaGCUM_0$m`rL6?8HEoMtDg^QT(@pY-(`QAD;2%XUsGD&#zu>1X4Dq-^lc zGd*MH{mptdIYGb39BhOiNaW<4kZ-_SFFdvgE)I{uw3`QD^CygBk+kIBwfJKt%i#24 z)XOkWz{usxcLFixrwECKHISWHzBFFNSa= zFR>@f$s++9-0Q%g6yw0Wwypc}k42G1wZNtt?8_E3${FK|P-BJDs#Fw{`}82Z)$>)V zR6LSotr7e@G_MY|6m4NG&2y)v+9JQ;+-=mLNr1E9rrfMZA?2Kz)YMNN9HZ*66Q^n-KRHnrySB| z*hm_=CLc;EUdHWrO{I(}9Ogi?j!J;X`gh9xu&KlX#*OME*bcI>#W* zVsG6~+qP}nwr$&+s5gCoqKQH^W{|KLu#k8cT)9K_DZtWZ$T*_ z;#1%f@``(;+&~%$>={|R5bO~#Uy)r9@k*}Bol;y7^9rs?tqQdPcF7(*4_pxO``sLT z==b^i+55XgszbcHZr37qkgiI++>x$GH-*}A9C7y4EBs)LV2oJy%=_g+c9a)5knQu% zR#5yz+TtAP_OL75+4iXWQ$uJV(^1%w=nG3YlpoZ0nB>VoRBXXP}-Pl;zjbMS2fs%o= zK$NGTC2vBKC!r;7Le_?y3JDD%7bYF4d&?Z*`k=5T{8$aRD^V(*hHBbg+g zBwa){M=U`pL9&Kafm#Zo3Krt@9{+ z4Py5$j7F3)Wko`Uf&wKW$~7b$L^6hA3b7PMB}%G66w-jCFu@d3m_-tXA_Aoo5>Z4^ z1tn|7l7%EL3?if$g(MatWCWHpPe-a=t&eG>>)qU2w{LS zK;);uCG!z~NnsRx3Atg~Bk2zhL4dqoc-+1h*Fy9s!o3yW12(xv-o6!&73-4YyojY1 z={ky~mgti52)?m!PzBp}bxpVs|qAvEPO8VM&yhwYJ$nH&x1^@+S3i1cI+ULl9`PVhpJ4@M6B1KI4uTTWrvq4r+R)#rECMYmC<=&wLOzOQPq!-Wi28y&&Xm;__JqAr z%TE9l4TQGB-w@CA7x~H%3bsR3Zgm#@mPHczH-1LrhX!UrW&~!$m7k?3PFc(;OWFoW z76KJ=%X%m&3`&%3(n=W>w36!a&ad>B!yOn`5KSzvCtD;#tdT$2OI;>IC__F&yo^Ye zOckXBksPH0G8r;81X`G@Pgb&EItwx~1T-iSQGpS0AF@6K6Wg4XXxx>=8SxQf@meW9 z{|k-cg=f)0saNO|`)9dja8mCT{KS3qU3^yj4)Owh)LV2{+!Rka{yH-$`z-5p93~LlitGS+^jpMvy?_ZuJzxu23K`Pp7S0ipq~L_K3Q-k??vt-W zs$%6B1BDTiPe2k45;SZg>2sx-59bbf0|I|CTTK7?FZD#cNh}KF^#r`}p1EM2Zk1s~ zE)T+pS?q&NW_tLk#lLq|^IbKo*=(NJ>m8`qQt7L7i>uZ$5l(A0x=x+jpjK8+y8#*> zZCfucA{xP#Dk{*fQgt-imS{4}J=Iz}Yu+WFHMWdJ-SymMo*S+zI}!4UPM@yuwjer& z{C4~_G@n=Z$8)bHIzu68G4irPon4e$xr>~&)Ji*TY)W;OfAU(P`Y(;ayE7A2CQqH( zUZBpNe@!2zNMGgbVEqJQpHH6sc8#)7YwqM}Y3VF&ZEdZ!+u8hb?DVmFFL5*CDFM~! zRMzn{Us8V7k-@q^^T`w0VtDB)sPK(v1cl{C3Df0w0|(#z4LfLjVs+J0UD}SprL$SB zqq7-FM@A>y=#t+#wsxw&n|;midhYYgdxHDCS?#hJ=^}j$2{-NaOr`14(l~v&t$mVv zROLFesePV%m3^EW_JnQG?0vRu{fugn>V3CN{TxHhKBo1r1`!7NRv#GZWg~Gm*^yPK z#Gcg+GZg;7=s>A(70I7fU(?1g-^u2HeJC>jg?LuR*7%}ib*g^D30}*n~=lv*6~j2-5Q$>Lz?S~ zm;d&x(q*LIJ+Nns`<$#b+%;C1CDK6*6csLoCmQTOQvcqdt#!ww)1CwWc8W==K?&s7 z!`(_Muk;q;_yJ>CUL{TPx>p?Tzc?h+^j_cfQe3Qby?pNgx23#xTw!-3z8e2^T}Nx& zRsAP|F2n%>tH*Yxf^o7p<6uN{5dyJ?8le9T6cSK`E`05reJ~ul1$h2ZUlHtOomxz)Ltw=hRlh?*mNHi*rxt|kn| zU+y-{ASHmBCn4jKz{7s3WcN?<}VD>`iIhIHIn=N?$yt5Gc zZ3J$+*-Cz#D+upd?Io|PNn<~?=8w7K*~c!G@lu9jrwlbP)E-F?Oeky)E{xfF~Kks-~EQ-lH z{BrT>ea9w$2Rwr}+&#hmzZ)p=Kldh9GS|N(mG70Gi0qVIA(M;urka|b-z!NjpXd|b|fRmC$vO3YU!O6mLV+mC7A+UV-P8W1iGva%M9ylFGTb;3=ihWrrsVw!1W^{D25 zg*Aak4hbM<4BwGFDjq)PRdoCiMElWq+iQ=ww2pB=7!Xdu0kat9@VMBc^@63=z<= zGz~`cpp2|!!U&{+G$`O1mfJ^yl4!KxvHpspeXTX;<2rGQFbIg~NGNTa8mgv_VdVs5 zigYj+WJF-5DyXEt$M1&W+$nO+x9%N#jixW`ZW?~-upDN$t^M>z zwh>g3IKOeRDfbv)gIx(}HtL=+mS@K8>%>D89q;?0p&9L?B>izcLr6%FLGc~&6*9$D z%L=5A-O>#n?wVQ79Q+Ong3#UDg^Cf)DiF=eT%2vprl{S$j;T%-Rq6j^m#bL?nL!xS z)f>%?Nhz^7yq_)eU~Y0yOj@#p3~lVA%srHhdJ(v>kc{fr{;xVeq);4ba%*LDcdB3S?pdP=-qMicL7O^1q9D=Ghcj3 z&=}Ib7&nq;+P%JY1#ObzHu54I7|z`zjy}!wUe`XuYkxluyNA(%T;E6}Z0nb`03cOUfA zw-+iaX1oj+N-Rbr3lB4-%hO7DoER|V-Bf723E)#bf`yCS{qB=-JSKD#>|f0+=Y==Q zXE(C8j#{XiyG;?VhP_^qinzE0Kiu!Q!7(f|3)x|OBYBC}*`{WL0>l#QpmyE<)$1p&p8#T2KW?9>h zQHhmWvz(BTga0NPPc()xDJY9{C(p{Mukf53V>&~$k&0vNHI#E&Dk%?kQR8kF&L5uD z|C3oRH`0vsC=$3E10`B6&hkycWn6hx61qdMlk4c%O4kW{u=>(~%Ea zW-s^r2njt>mjfOq=Mfs%)~bL0xVx=%uSFjSUzyCSI}DZfuc^0s4_()rV{a<6Ycq4$f?}^^n%bWEO=w?X5iQ1O-cA-B&lD-y6yDWQ^)}<8{?>YJFkkH8 zNZX``goKAza;k*tVGPAtC0ga+fqD(4A8oSZZxS*UMzC=6`$ z!r}ppZn*Oy{}p6D`ddGkMv485o#wrLBh;gOK0}9%qxU`ERgEqE!r(ZA&C0e*9KQ-~ znG|D+HhY$HE}OaCRak#Yvy&Xsfw;BQ9P7YDcw$As<@QZLpPh@8n~0xh#4=h5OE&C+ z>qI`srH|ITiiw?*I(24}yGsUjuT#n|z3%>fz;6E2h^|+lj@CgErUr1q|7xYktjN4; zVBmlMo1vonxOgIbTUJs|&QL6!&wDK;-yx|YjV;$n+}9#jj?v)0|8;1L{Z?A1;k-+N zp9CaSqoeZ3X>d9MvBE=LO?s%iLt&|U$%#76on=?WkB$C3M z$xP~DiO~5=?v5OUKTr{ns?_2k;@orwNe=6@OnEe$z`Q=LF~q&Yv>Z*ti`?&SqU*4p zKi@2Uj$v|qy#U1%_qgBFu-`Lp8Oz0PBVRzSB(|a!NkH8!-HvPE!{2p+Z=x}Fjc)s* z4&1A|YARYTR#-i>T5|6| z?l+R3%m(XV;z2olCRjO@W~Inwx51)2Ejm@%(ApFkNBqw2{dP-a{(aNLuZms;g%0EA;Wv0DC%2Lb zqXLcq8EPe#Hv6FZt!akB)G)MrAp?Ct&=!$yMx?79!Cr}dg-O{~EQ5#FumnmDA>(F-M{QwXfSY8Izsbbbc<{V>|U=~|pGLuSK% z(Tb?kQu(?MX4>0FZ^-oUY-Cvj&eteomfQ2J06Ex5c;b+%w0%Fc$dy5#%XJgXzwN9G zqoyp=v5$pg@-#Dx&Ajgn`Z?5vWrX&0&m!nLqYXwQ9qC$d&6j-$KOf?u%SC_oV0mFX zo`agk!ZbRpmbwQ5!eg_zPNtjJ>4@}5RE#3xjyG$|{2qX^U$ftMb;_-m9FRr0Qs%U- z={3H1INw73K6|n@ebcnM(CIQ#90KD&zuH7-W4Uu$Mjf>1xu5{xGuJNDP6)2jHScbL6?7rVjljS zThRJ=E`~L458!REk)|8ZL5jKqfpG(a0nt&8-#;v zdNmIoXof*R2Gpl)_kt$5J8jfnI3*q9w+ga=pzFM7*zM#kS}CT!(?hNkssEi0ZfFL3 z{%6?hD~ttd7z7O{lV;((sl0WzA)R!zJXLjNZB~Y|&w3cv^ja!c2VpxUczNns(=AIw zl5_Ha^28?G)x4@YuiX??W{0MUrlqN|s?K>7=UAC2XN)b!T*tSY zS3Zv)vxf=%Aj4`&_`D8o<&1PEeBb#Ntw%j`>-$R$D^|w!3chY5zs#V_@!x|n>pSxw zv1gmRRRmAk`0rMQ^0|g`PtWN{t54ctGfrFcee8Sj#$DzaMvgy2iY^6Ov!j#dne{vF zt7rv%BLXHdaZ8x-T%|GB&%V3L#^xVL=_TUeOqpM;Ht@QiF!DJ9{$D|_A6zsGOy5<3 zuNFqO@Thk<)#JO03Lbj(&YL6&UdN5`l!Na+%s z^UTVRChXI>P5UWTx0P;HoMH}u47GV)HjUEdO03QP)saqnameWDgLNX%WrEdFe8>6vyDHA=gdH$+? z-we{8n3+(HxDUDhpKS^GryMa7L2c5f10eYo0=>U<6yH=WAvRF8QcKRQr2n+1usL$r+wpLA{I7lE z5Dh!+OLDfi$v(x`y#d|dBhTOOJKg{i$6zV4WK#=F+{frI zhT;neYTXLx<)t@^n!#kWnQ(>@i5*w$Qn@FzN3TAaYFnSXcq-4=^p#m3FFltM>o;>< zpmE2&b`NaJww0{rY3@rK)@RtBo!T=}#o79o=LC2?&oK^PSmL(fn#shcs+N|5*Sm!a|)o^CHJ=y#9Gd!9jUM*My{_od^-x}h@JB(7P zNBYztf3S06Vot!8E|ANK22T~1FYB~^Q+KzQfZaebn|pvLOT!JUE9>9s!sS8SxrBuA zg$RJw9DYd#_N?bws`O5;!$<3ozJjnoqiM{LI_@)6UPvE5jSR-`vU56mMYX*H? zIpbiw4tNEBZv{0MgQWo1fPNwO`!Ssax|a(C0?@W^=-Ot?1nCVEFd0VM(JopAjcnRKt+z8Tj=-dd3p@;Dj zlmq#v0O~y+=dm=gm>H$9ftul6CDi;wo7)(ml*oa~lI#z}GW_EMdqGy38L`O(W)GK9 z(-#k|8=`b@uf}2neBCadI>9fcGBRj#aRPx2J&f3&^gr8Gp*43^)b4WK*?Ag} z$wZ@E6YE{e9zMlP=_vbm&@U3;^bc~M<=`c|E8V&mGMg?(_jB$`k*BiaeJ-a%Rc?<{ zX@=M9>81{1xk~=rKBe7?X%J>%+pL{}#&X}mg`;`peiB8dGR zHlYC|5!clN+ld2E)o1#};X5}YsMiqO$`TT7Y$;R5H}|_78JIVCn&Q5)dt&y`jRj%8 z&WbvgE*UL0~Qp2y$QUM*S}m3 zjr0uYYUpZ~4rv?o@Z5?LJ1|$y<*eiOwpm$ScVTA-IqH+hMUwl998A`4^j>grf$eI& zolTEEOJIFa1+AO%a4aA|3t6AF)d_)@VPt^@tcPbRYAzv5|Z(SHA%$~9VZ z*EZ+pR`>R<-6%?=W}|jB8;KM57O`?0JMPl~=SW|?`keI`atvpYp$bK*5-)ddvUT6E zd4-jDzo8qrgeUhWWKyl*(1}r-?jkPi|KqT*Hg5Zx>Ql3|=CqL(2LgijN45}uy7d^> zyQSZf>C9Ga4Ghi4KEKiAd8u;L=MiI`ehu;55I=0N*idG*mMHt5Q>V@w=3O3LX(b<4 zT^GN8CcpryzVjMNN~E}yqYzmh)IuA_s}Up9&O#bo%_Gp?dm^;;7KOG$Z2&=acT^|q zZL@GT!A^QjOe%CEz+*uOLCe@j`m4G?adLwONyCQSfsOLex;N1@`p59JCb8TUzRFMjGcwg5d6^WfXZZA~nxN}L))6D#eSJosGw&d1x z)Ft*}!B#LWzG9Yq(NEiGvuV`l)k#$~#PHEyp`RfFLNm-hzsBYFZ&El}KCT8J2{SdNy{oC3e7R7wf$%UKP8l$RmiCH(30AY; z_@}2iPpCePeflbSbdC3H>TX)4OQ(2G%r0sgYH|vxOe30xhs?3y?xAac92(eT*a3>z zRhgcz?d`i0=1(|Pa%s_I=*cSGtSzWlM@fAq! zmO`Z3?olS(C13swrt3D=%y?OVb%7uWW8Ft1q6; zmZ>U>&nH;1mBqFLUQb8!g&K;a2udL?zq~q(FUYi zpPI(kZ%|#Jf2awbT_gjFj5cag<2|O_n(t-gLnKrbEMfSZ4p+8d_AlAp>&gk$Wp^#E zmsa&?ZnCyca4EYR*PignXF9L3U|eSC&EvX%vKDj)drBq}sF$LKsokgO@>{lFEX|CF zOa>LiNS)>D=M66E)L4%XIn)kUX~cA{f-z}?=np+7$@EO+`EpGd4>{2@8C)}z;^a${ zw*ANJ4-N6)WnL*>f-7dUkt^fzBr_rxqW-ja5i?<}v{^p#_HU;rH{R9tl(lzls%VT_ zsp-ZQ)|Z|gilC9)etm)HeJmt(yk#?I#ie%XBmhn(!%1K)=&7d{0(bbI*0$Rd#~bXn z(OvG3Cxf7IG?^y-vdTf@cUd66S&N4K!xtco<$YsmUfgZORl~M!#>28kr3SN<5inn= zO{DboBejZ|4-^We&+mS#syW=M*4I)kz7R!f_nFghfgSS8znY48YU%lUVtLXJ`{`K! zqV-lBF^Ls>aUasP1INW_FAIN_mS8XSo^(m@uR1c+G4Zr(;%6pg5V@9* zZZ7FqUU!p;bz0&t>1eNC?YSF$JgZWIs5Nh`Z0R@VsQj@GS`^>c!vFeFRCrZsGU`t8 zF6WE1cc>IYL{IssvSPJNI#6(|b1=FsaWY2xLJIhfyJo1FrM86mq?VJWYb)y=KC!jL zF8x{2oCU=e=n^t1po!KdyaIshH4@%kDiqotLv@LS;TG*zA^bx?|BR(|Duh6YV$;!) zT%5ig5HYzI89FL-kAow?rv8lMUQtt3%&FBlX^Yb4OEP#Kl+ZH+nd`}2rJHUD92Hcm zT!4na3NLK#=MAvfx0|e8D-|Sxuojjph1tXfpN){ttaUdX@LSf?BTVJ$wH3%fnaZf- z5nCE?zf$3-9*Zq?vWuZ$QiVMEp~1N|D4^M|wXSLJQ8Gn29u z2XpnuYi1<)roKMR!REaF_&ktQxt+tl>!c>PagaLzSw`0y6S@Kl{s)Aml{A_R(#5QI zkSR3oSBbQ&{cm_=^Chk@B{kJmp=ou)2AVamTDfMt){>gqIjzODH4V-E!k*UB?HFj# zxmY$=MLqq5vTAj+vt8HO;*q^ot$M-c?yixRJ99g)@$iqGxJ!HKTzm6)m8#8BJD8Sv zwQ6$y*i_4EObIi>SC&^2nRBanEGs3>4ut2iQ@eD*KQSHs_P>fpD$YbMy&f)RWc0rJ zZRrhny-WniLg2(0sX=iX2FG4}TCtoLIXamTks%=c|XTEL?tZ8j12~e7mRaP)K zGqXo9?aY?C`mV0X73XED&T^bvy1F%~NpkYi^oDX#0j$t>yjp=jo*a;Y1N zT3YF)^M@;`+-J~D>p|QSR(d^QnaWnT{7RL^{zVhOORQQQ6OUxgUGgIf}}A$*ElBOqQmTomsj|bW`-x z%3+43TjS`zN?WzSUf&}T0+zzb{GLi1Jm*Nn)#2soO^*~(CY*6Mm|FrR=of?L81xrT zO~I2mE%%LP%42@cvXxrK3&x!8x>&+>pvoJfZMobElbBfA=2S>t%U;Z|j61jtnuVw3F7I^*TA~_y7``3_6y9a8SJp_D&WFVIXiR@ByAAzu>Q6@Pc-2h zv3?H68EDyfI=-I5-LhIAv$sxfbwQ)gIiIb++0MD7*La`q-ZKeDjVqVx1W_|6>oH^$ z0ViY-(Hjn3$LVGA5Iw$T0S3`GbttQ?q(kFx4EedppwicPZhuaOc*Pwn6{K=p6UH`SAv!|scqrAMf)@b@5 zn#O(i+1=?{VL$0`;pRAOeLVjB%=!zAdNNpXHL`sR%3+ejx)P`6LHM7Fy*u9oOpZFL zq6ZAZyHt1QHW*k2-oXXeQ}zYkVvzQ@HV-EequZEi$R@w#)1)bbP zx&|84Oa;%U_ov1epA52#@q4nv*8~s&FpPNdOIwsR`$UUfR*KjaPle6(UJ3(1b(;AZ zTBfy~kd>W~o`3ULXKUMbVx^h|^+TqzEBj$agAzjLcXp@IY?31bo-YD~9E?5q+-GTJAD1a;Zyh8VEhk6Q5YW zMkFIXc{1^lQ*Sxd!|a0!dgs>N)+eB<(!pnXv8{7KZ=OM;v2T_aho#plW4-gY+) zrDs^r?nAo1`VsynA&;v<6c3M@XWwex(?GT8IgrbIYYzkt5ksJMaDx?~ZF0+zCCpd%`k1iE6#On@*e!tbV=xP5Ld_+skO3yCz;yiA6I7#`- z(9f(#>QMurf#nia9m&k|4%6M2XTheiJ+^rISoJktEBP7IEon#HQWe7-uN^&kM$A*d zZrHR3d&;j;)Sxaf#0z^wd%Rbx{diQe-c>rfaqPCfHq{vs%WY#JLR%Kq%A>H!TXIl5q z2<{IVn^jt+*wd_+o<(JZUrRA>@|ce1+njo|-t33yj#`$f2;NmkCY+tes~R*Tj}eJN zpR2yk3i_Q+Dy+Cj7A&0GK}Yf|kDc7%Z19@ZN5Z3<3imi2Saa1AHT(u${#Hxi7K4j# zk-LNi+mTAw*@^(m@*OY{(f*UrNU23aE0|RB6%*9THK$Wt*^>6cNI_SM(uV)nxX+h6 z%7J|T%$HL{w@ATf@NE9G7)Gta{50xYouI=u>{!FH(wFPMNPxgRJCG;6kh<{u#P64@REz9$~4FRnk0MlEGj z{(OCtC*PNxvXms_oEj~Zvo&RuuohFvSxKw>38<-}xaYrbEH_Oo`tK+6DgUqWf2sac zkYD>x|1aH$j};!ZD!gs7wo&s0bg0)#Np9ujgq>SeX#>=8Tn6SYc~qIp99CS8gaX)`Zv3fZXbYl>nTaqLl%Vw%vajIb8`k=W0RtJ5q(8<4T& za)h-)nQ1jbnMYzs&B~RE)fiIPMlH8UQ<|Y8T{S7s6`>vy3B@abkC@E}5XVt1v`aV_ zn1?cdfNV{&P9g&((_qZ22tARFo*^p6?lJ+vPrHGs|}r^`IirP-ZPQMvxoxSS?D}z6X-1O z117jV&@NLPd@^!8c)-2UE{_ChSRSh!>)sv(urK_8rV=<{aV_@j#(|8&Ms8H<&^u5B z_3e&u1;&{Xfq~Xicyp6SRrap2JYe zmDq-nO2#lbIK(Zg&xn!OxKJ#@hsM?B`L!5_6q0nZK6JxuLow3%ey}iZVvsG#MJE-* z<>*F>=%bw0k3eOeqnmP%=2Uy^GMu>NoRd(EtY{8QZ~elgChz42#-!MTm~e;&2cxm% z)%o1=FuwbWJj9L)0ceXN;Ys>;Ntk^shHkNX#>cmT!rDgWPzMZ)UD7_LDga!c`K<-A=3vl#n9dzamS& zb8#n&8*cz|==i_ne9B@byPWs9<69ETA`qvL1v$g*gqH;Ug6QzMI*Gh=g(uZSUKu0v zt&qi5Il}XoU^-M{#A;G3B2EL?GKkmbHzhpvXv7alrwa$&qJlW#y_1K z6CYYubtcjHi2w(g*QA)ceo92t$}a9HyV&T?;77OF~Dp z3t0R~o;+an?8fu_U;jY%u)9|bybrOv`pu#NFqSVsZ?hey*4wv(mQtO&^{c6v0)Do^ zvv?sHG$vzP5rC=@qa=y0mFAS;Tz5IuIUhu%?Q*pyUWsFvDFwfV7O>Dw;n&?!6*+?}`pQovPBYE?Gt~en zv-3OQfWv>D4HJ;a*Cw@I`EVqxaD0O{OTaU}=gt=GjNTfJLuc?pi^tDeIrh$MyDlrY zn24S?o@18V2zHAK#*4FfGLo8N>V@y(G})M`D+Wh(C*nyg6uAu&`ClbUh=`_hF?i@7 zSETGCAxjdQ8nfN=O}iFMaaOuwp}vTzh(z8_4D~88s0`YAM=K|d0znK(ke-p3n5}sU z=RZjS9--c^8Rytsr(l!tys`&N@(vz-VUFsX&v`vMdBI5h$IFRa`8Qbwn!M(bybX9d zxmL_Lklr5)MGlJ)buC)UR?hHkU6-qBL<VrSJwlyV=w1@s}3Sa0Y_Dq_y(R7PZQ7EN!$ruzL9v4`}OoEUCFtEGkA=_ZTfGbTp$_?8s||(U#61$#CpW@vz3w3irz2fo~XA!Y{nx2YuWk9eE_o zU39YJc_0AR_ps&YNF6-|w>K#|q1@wxtOmJRqk9-2;m$XMSakBl84FU~MvN)2h~PJp zEBX^B!UJe>tXB6GEht+fToe!VuXS7k>3WA0s1iuq5g8Ye;`0WT;{zp`#Jax#jRlv4 zYrP7XK|19SKlF~6Qr#dj7D3Q0ZTXD?S7(}TNOKu}yGEtk$KU@3_p4g_hzRom*-riT zJY)uG7WaM!Tw`PmnhBPqGosi8wA&tt#rE=7d9}6}-;z{SUzss%M;iiWq+J8!=?g^+#5Vi^awlwI}UCBO>&8GLoWj zQHCY`7P=@;ci@<&VJ<-&c>h6o zA&}o+Z%*d)U6I6pdGXI;1>q(hpz&Ot=N=GWmdMAFXJaeUbngY zaVM|ukFSTNshL45fT?BgMg8SuCKl%%V!IweV0D=pg z6NsQ5K~8+jql3U-1Q|K7FP}gH1O?Sy0*KE;K}xpxiF*j7U44q1#g`9ZLCN)m==(<& zB!7`WJqMf&QDEe6Rkqg*PZG$ z_b~J+fOSQ-YZ6Y602_)k0x|nIQ4jzgf$R7kP{%z+FLWu9Vt^-ZHf;&P`3?d>jSx=? z>ml1fDq%K7@<(|EKu+)a*2-4WcY}@i1N*?I3?VVGz_k*o{FpiAFja&i{|W&|^#_LAJI0=%a>yjaXSmLc|L`i-N*(hsfRC z?FMR5!$`zC4C8fS)*7LUtTk(txc)BjZ%edo;XMB3v)N5AchenY@> z%%{ndMY!Mi@*=^!St>>WOVUPlX+r^<2_*pE1D_;g=JI`w`f#G&zO59T6e|k-4&>V9 z*UgX-B|>`vS(V+iAV-X<5kpNv8DzMO!$T%@F(c>1lHDaO#)C*LCH5FLOa&{;`6%Lm z?-1`F`%T21FB=gmxXMPrix>m`Ayi9)oK^F~bU$rZkfc4@)kj7*#W!SMnGRVQHxxkh zg5AXz7-YPT50Jye&QKs4wFkXwZbuerC)crVCRycjVov;PA3*r4kgyI2t2Y@CC3HNX z0!n_sx*Ed-UiG(-F*{yXco@b+v5QnE+R5!+-7vK4)?*OkVgDt-6Wod>`)0lf8y1M! zEaL#%=9P&^@4GJB@{j^6@on$Vr)1606xH4_YCoI}gFZYMk$k!BB#n4FO@bgfQp;@Q zy{99zKR6`e92X-czX&;PU2gV3GDjRvC?ya~W#5g*uhM^#tdfmqu4=_7_@eVtB!qG) z8Gy*i?Z4u@aL2|*isXWrFC+;Pk@W8%Jt3Hel}@mI*9b|Gt&w4zMfDr07GPhV=Oa`bjPlueAe?{G7(^RW*j z#NYV_lYsdC#Lsdpa@7@9I#}ZLq7B2r4eW12upni`A>3=`{jI3=hGoIIz`wi*t+24! z5!`vPr`TEG;1BV9`lW&(u#bgzeZI-Gi*+R7783^>?;89aIsf>MwB!B<_K;hekO z<<9jm!Aj1YGS-ba_D2}?gAT*Fs?cLv`^8G+!PH!1p6f3aS8lNU>KeY;U7V)3ds`EH zTl;$*_*3~yaJ}|R!f$>C;)@sXeq2e zh+pA%1=v<}&7*Os!x>2lEdS>r&NqjbnKb^QCFbcscH7#QHr+q}f9CJ!k8J`xevO|j z%#z!-a$gQVF+q3Agct2WYz=+>UQU+E|nE%BH7+;`F0sAXxYbOt8%M z5LgR@2Z*C>5T-t`ranlf*}zx|!7=R04k=ZLgM_RmcUpf zgeC-|oWGclg@(fghbaXA^EC~jVXXuwAX8mXEQi3D?}S0j@&zG zGEgi&4?Hj|387&L!QoP&;hn&k5uxEm!UGDz1Gt1+nqyEBBYZ<<(ob3ZQOCd-@PxS@ z^{^^dF>(CSRZwQPJy(MN43QU<86OO5CLjjpXIcrjHple4pGd>Mm@fzi;F#Bih9O5+ z!I--|zNpM3sp9=Cp!9blsnI0MeXd_mb{{{yrO}j~E#iB@AFgiw`M(+ucEE`Fa=i~? zF$_Mwo&kkuZ`{=BMC~6*W_!iy=!eRr>0(S1ltvDH)opn0kv$LF^YcMbV$@^v$lAmV z?Z{*8J6$mbDR5U`NwawR8L_ioP+l?#x*f6*%2E?b&kadtDa!MZvRF__(&=Q#;#54I zcSXw6lxQ$B`!+N5yU?qW`i3Nhst!$wN)<`$`&UiR_b@9hN@Nn$q2h&HQSZ2^6N$R@ zHy=mE#f9fFhY7l$fDwQJa^yqNAIRW3ShI#lzP=urb2+v8n5aL0j4NTw4+G+*`^r-6 zk`MPyacauTMEVM;*$U_B2hP(czFBXXX9Z+^2qcS5RX5vL{2m9=d!PGXU7ExVRP3O+ zlqu2W4L9PbO=E(>#@!3Dv-eU8rW~cFDO2*k&3 zT>Wj|{K?0wJWdIEAf+W=<<4LN)KHB2j#X}}^^6<0r8{nvS_$YRYz!01uoilFHGkDqjT1SMwZ**^3w3KapF zZk+SjQ);va>C>-V0Vz>>I=MCmx=Jl^I^v+AI%IKjo#Bi!C~|8u$`!xo%EPxx_tr|a z813$$ngW-R8S;Odx0RM)<;^kLy_;Q|K303knavpdE_*BtKF3{0U7<1Bp{Jcxgo!d1 z@wLS(aXYc=NST5#=?a2Hy6|(E9#|#&jp-Py(Bh5IScc-{_?kTp57nuKt0kzjX(`y^ z<(+LlkMmiB1}UQv(KHT-yMue6Tx{KU*^oKP!<0bWf7l(tc&_Gyj=E*A)0RflmkTIL zPpu%mu+a+lpl7#6DB=c=Nab*Q-#vil9b?2n6oa~DsA?NWYVi$(u<;6+Xiw-*^sPG= zpOjCF5#cZIDW(COrCg*Umpvnw8;vONN=pW-{o-Y-CL8Ow%jhJTr}#>*=P$B zi~n{M%`;Medg%gOl9g(8ePhA>k{~icuys4zgsnk!Q)85<#3gm({*LN`&;F`8&A z^+MBkY0LA zAx6Dnw@rX355nW*{r+Y_e*1Mt!o$vi_(|gjD7XJ zIDaK3gG{+O6>b=zV9a7 zbGjtDcYNa?@SgdS0J$l3uoLD>edJCLOALNyuhBbS=Tx@A58o{gIZAToTij6j&-$p4 zdZ;&Ygg~l)ltsDoDaE++S7xITLy?Ng0-%BCi`@UIA)*?g0{x>TR4am{6ce&HHp4y1 z>Rj&L`QxzV`rTy;(0}rLYJBE8MgH^24Z^D)5ManjCMYjlgg|B#a$2|-^NUZ2(4>g5 z>87dCz0XijZ};~vIHJUqMAeny^|hrT>}fDu(jrAh=I=Ww#1BM5$x#a9!)<_r9f-(= z3BLic4L~`7=q4GoO|u;7zuNoqaH`sndk6s)$_d7Iq&zq&wE|p`~CCmKe*3tuY29=xAwj7d#$t2 zwU?_rw|s3nt8jVR{&PxW%4-JuYqw3BSCPq+-~~$FIL{r0@i)nIdoyUpdqhAO>5AO& zA+Xym+CP)Ou3Pyb?~(PHlL#Z;!;rkCetQ4ms1)W@uZv#7bJ( zm28cUHUJe5YJ`2)&fBUTjYLj{A2{A@di``a-!+!j1-MbBr$sxM=ZJ1vW`I*o_Xu6F zp+t0gcZ3noT8e|#vEc`yqNifnLyK=$7^d|YewfXAy=Z&7V_k**c4%a1u9p?PKc%h{R>Y{{+zW=3zhB~Au?h%CuSNL&z=Ik*$&nQ6yq>-lkRx*^tEkueZ! zTBj>IB6#rhn};))c8*Cd@neQcDm#MB@vxCo7>i{U*}>~(v)A7Ta>O60_(YV7O1cC) zG~Y!>Wj9g#b&cZ!E!Vtbn+QcZm9Sdt+=(+98mE-@xE?s*kRqm)0lzl=CeYRUKIsb~r&cGUq|{8R(R$?G_TV@( zkv&XwH07zr6xHt#uMxLh)ARRXa-|dfe3svRwAWOV*;w8R|D^q`bxtz;jm5Ktd;4Pz z*l)7aXj!c(TzOR%A6Tb_lRu1E#L%8T>#f;i~IOAOZB(UBb2J;7e$I`nTepEnW?M0GSJSsRB`JxDyr z>b5h{z_)1kt^3>ED7hPf?lOe(b74cAg7H-aA6)zMJ)WBw%G>w~eVPlb%3&*ohFwAt zV{UocZM>uHpw!Dou9thm}TmKKGgY*6>_|gQKRm}*3sjJsG%3(l@*GH`6+>YRVQ)rJk>(QjCZNd*p+^& zX?uKJa6AtD#psZOnaNwdyRk+#hve+cBzoP_gFCijv>dmyq}FfO3}$sy^fxB&Cs;o+ z@_C4CcA1vlGp05)*Xp^#IHhf<^*P&L#pywEoy5{Y4GoT!VvYtE~~glHqSGqSjQ}RX*pCZZ^oHt2;oSW&a;B`Kf?{_?%z87@}!Nf zm8u&@WP!e2W<_SU6fCBC`m=Mym|K*;j`zvO4}zQ~SKFy0bLU$o?lU|W@9?`-j(^+f zkX@d)t_u2~4!B~+)Uws2;gr4X9$Mr^v& zuU}Q<)7)s+wYzcR@y7FbNn=TV8j%j*4V6O=jTkKDv*9-A&)hYgN8-yBya((+8tKV- zE8~~97dZB6Td^$$a|B1kth3w`!Cim=kM}(a!-6qNK$88|c)fXLL0CIzZHKddOL@=`gt!K= z=RzPT>8eYrXzr_Trx&#izDWDN z#vqvDfGHiQ)@=D`!Cm+um@h)rgxv`c@ba+?LEL^ zZ%x1W_|?~U!+e?|jl)B?-b#tN!2>L9D=VI2^Q=$t6A&e~;f%e#VMOuxim|(6aBA=B z4co~Op*NIa;b#S8Bg?ca?ns{EDiWz+GreFU&*d0ga(M;xQs&5b{L{}X+RrZ3SQB2R z=Oh{{9vpc@GY!5x#c>7u)OaZ(W@X={D@xN1Rd}LGak{45of20e-vHa$=Z6aHo&7Er zUh$}(_o$ce;!Enj0hcsVKXdr?kR8T;dXcup`06FS;f0*gDH*+7Lphs$Ha5ZFkKH08 zPqI&xMS;B2c)xZ6Keq2^>p5D$JkI89FnRu?-mHa@$m!~WhMWxU&-K!`ed`9x_s)2V zi>23i>NT@f_&qSpH#KM)_mj0&ATVvI@qd)&pL%Fx*coSFxIow!!PH=!V6N4oGR*0# zTR0@%Yv4Vyt;os9p4bpIKi$`r?W6AG+T*`in%69K)ar3TuwrZu^z`wzOPN)V)|f7P z(`e(8@Y)jVi9MDACnoL`8b#%YBviP!-5o0Oej(+5OBJ+`lDS@B6Qs~+$vJQ`jBVcI zW2Gqdi4X_Ah4vSzvPErd_9zzTGg(1{rcWlq6}oe)Yf|r@mxYM>gCAbayBBvTz2qiV z+RN;HR$6rKH+3&g^kJi%lWy>uES6(Ub@_Ko32B0|*AeoyW`$Q8EmzhXE>x%SoSSjw zeG0x}-7?W8cg0}PpDSET3JeTZxD4Tp=XN?KV^GApTjdyCM zbnmXRt(M6iCPf1VXTM&{=sH3G@@~;_V)3oJ(^SIMLIULK2f+c&m@Vw zg-@98_jj2+u*w0Ofco~s-a)G+7iecrQ_aRusdEU^2;@DuvGGl)?3wRJp7Qtv%RHyo zs#XZzj$Rq_*<9fRgKs-&-`Gc8uMlPI9Pyo zrt0t)9P8?l{yFc%od#)p_zKq`I_@?R5&J2}e6i2as%vVX#>RA36$->2D!;p&8)BkM z^sEEx1T2z@V)UT-#8}j28atkS()$KKovx*!+y*ycmZ!z&@}ri!?Bfm?FUG}QWmnKs zH&rmwGuGA~H*r_mOz0{0e6nBJT0C*sViKG`)#JK!ogy-pp;K{mYp%L3+(lcZ@WdM4`J=uB%($F)8s#xw<*}5BHSw5@6WhrHM=AEM!&9%Z z(uwcUw4bM~x_)7>>zHnuW7_DeCw1{34yRQ}p;lHbxtJ)`r!Mm}9ay6JQd=d-#(C=| z+ILZ-WH>=D;rT7?+fVnQ^0i6DM9X#+SjT~ujL+$xH-p9lwwu>%DP0017 zzp62kx^uF+a>hRLi#nnxI%^N$mMQr1lG&z~b*ZPbvja6wo z_aqyfs}Om~)jI7O1=e)Y73+_iq}57H+p33@-3wfPIHvNU<9!Z~fSsmyrT(hPnGYpB zd(N=z^%I*tb!{)Bb^T|nrxMz9%(yZB#VsN4Rz0CiaK3ZZGGr)MhR&;O9n*r|Ea7f9 zk2sS09y5PRo$-X>1>h$Ls^i+Mg;CY2Zw~dg3Ju1x=g%)mKf>RzS9I&%3b;1fW{ILn zDnnGQxn#T%`b5Fqwmm=%*{rYcq@ulY?w-p%kMfT-4_fnF?k9(=dD3voQ^@IYfybh9 zDJYf4Yx&CO>?FUIL`5c0f1-@>C7Ny$HaD7EcP>?J@m^h1eil4!z}vrdf4`lzQkKev zrJ*WL^~$#3^z?Ik)9^lC9p@hzHJfLJC@hQF<;OA6W^9;ER#%GNVtjT}v6;Q^EODsS zXfA?9`^Mt5w~d=j*{#j)b$8djlpHoOQXxfIpU(ujG8m>_JmSmI9i$)c#YYC(Q!c6;Ud&n(%m9&T@MZK0F(=0NF8 z>+|%bPJWy=N=^92tk1{Q)%89z#5>UV0PVYMQwVFBzQcjk^^9z<=@DwA*Xk77U&e{A}XZFTGozuf#l<#>G*k}|q4^?yEZk3);w`O|aKbD^8 zzF;dc|0?`U$%v!m#s-Vg@@CW15U|r>PP7A$!s3#JM-lMix(oN-31tOz53h?=^xoXt zcjKYR`5U>#A9a%T^o_0>3P>_Vc^nkC6_Qz@^H)H@!0$Eq^u2;>_;UTeDCI>H?)E2) zwsqPz4(Yldxf&NAR*`*Y#>YMYYooKeX7o8fobJi91Qig!?bf zCg;qJr7pEka=%}7O#9rjJR@;D=GMwbtb@-*B0n>__F!U%#qwrTgHc#WP zc%XeaE;mo=GBdDcyinCY^z!XYV7X=sig4t8$|dbWNhy{7=varU;Z5K26~i#A;HM!h zrmzTw=Yl>CH$Bu?4+}d}&J)^4mkYq-V!}i6NIsg!sxF7~-_fyx8K5kY52WHAY-XJw z(Xn_D@MLgl_z@Rzwbm*wp!s>&^~u~U$HEWY{E}_?!_!$(+7Dcyb1d&uo3lbk*N$pP zM>6O2h8^CN&-HKb|LS$i?VZlq!kPjb%Qp#Or`(@QB;DBF9KRBBr&Y9l;dp8O1F+_( z@Sfx>f?KCGvN^71sM0SYOxN~c-^`)3n`zU_X)iSzVwbV<= zQ%ZO{nw50F$6C<`E{HAqc%&Ms?7^0w`!VG`m+^&QgR0po=;fr6kt*+jr+!L z8@@t2u22zPUI$*hKQ1!S>Fw3MB*Uyw;2!Kwlrt(5M2_brX{j)H_RJiStSNC5 zGOtH%P;htgrEUx)ZZv_OY35S2&V&uz*hx~>Ikv}z=saX9GgFv%#4q_Bss;hyIf@xP zirKvO3ioQ?0M-;CQXfItupV(-SEkov!StX;T(%8TKi9WiZNlYwZIfvFUXx*MH-Wx0 z0iDm%lD;^M_dG571GIa&38EI6}^U zxNI>lA~eA@#(!MlYx~lMvG@J?^7BG>vMuM0)$(6VA2J$zXS_Uql$EyuJ<{Z2N==aV zy)itjwd$HKI!84icxo%SL{2-=m(PD9`o4Q8$4ZG>d`74}BU^7(zfVF6ubG}kM*T{t>(UR#TqCDL(fKvLH1<&f#T-in0jCmlt2 z8qMAPwa?pl_s^_2{UzJSecOteRII%o7#(L`l);UnT-MJBiG6lj^p=C z*cBRD2jAE0Pai{+dub`Y`Etcp1l@E$C+9Ft3x8C!(K#-UVg*Mf@Vms>13jhXF_AnZ;Q5wJVX~!B>?Qej1m0qNL5&d#!(cOEU zdy(m+e6~KvB<@>6NmrP>z1rD1Ij4-(Buy(T)*vo~F7H8_xuREo^bupHZwTC^uvn6z z+(uH)QQG)5TBca6X@4txv^GF7?iWC{6ClsBq%hZ|vayc#ow!RS2-gdu%JhBB7o;|^ zdgBOR0k!%=idMSUH`ID8KactaHuU&$!?f*%)#md)A_F@HeHo?n4n~wFePDRlD+yi5 zut^hdkCKqW-5s5_`cP54w@IwBrpH{%E5CoggN?@H*kV%!=l!OBpV?aGq$Ilv?x?FU zYMQAh4VPm}0;7Txp18g;pUrx7H{9Gy*=d?ekF)4G?$p^ve~#&OlR_?ED+(bM&+V6q zuRqd@V^~fxkEOg%MoNB79)495J~h3sWTMuNB62JG?37&4;5NGkKD#`Ik;+uHqDL`~ z#ywASyrapay<2k=F)HxE`>rlKMUdayHx%!MrHPbuNz@9D0=iU$U!Yq3E{O~Hvmg~ol`#U+wX1v?49G~Ccq8(T3#L2^5 z{PYm?9*W9*);Zjeb*HWQrPl)Fp% zbhWR7@y&kjrS3rqMdb`%8AJQ?jrfxIiOADprxl*f*+*!3wzI#_CXQwZiX_w-GSOWA zk_%#k9`!sCLyJ&wfUZSXuR@-;sy6nqX6-XO*+pyD6z`d+QO__ zV^q{$HaM#fOfS`CA7wF1V#-D_o#K$$wv7m>K2Q18r1AtV#?O#C8y`Ri&Fr-n&JRrG21eMSQL?w{G} z8qTssFmJcA z?G}s)2noXiEf~TCgo5uDc0pl*7IGJZLUutUeD^dGkVIe+yG=9X3rQ#!$1Kc_^v!03!M3hVu7x3BoaUo5D3u3?v99n0<~n2 zm|YZu0fvD?0ENGol|lc-2Phq*=k1CIr>BG`T!P?c2Zmy?STFx2{?FH5zv;@awFJW zw8p#1;vB5q2<`-1VtpRSfZ%2WvL(2I{suvC6jFM(^M7`b2Ja61iy=SB{et{%+7CAY zIsi}or2MC8UVq#6PnG}VZDaknZr6)$PT!qrV-3bT;hpg=M0Y?v^gDGMYe{Q2yd{y~ zCj0%0=;AN@XgE2@8d=)8;N3kf-7G;kOKW?)o0H`auE4n;jqlRnUv>Ns%>`!A-}e6I z3olDoz*fk2TLB?S#UIA%5eQEItt<6sAL+jVypkmmFAIaf5aLjXI0UT+MM}bsE9dv@;lAn`|c725Oo)KqNR&9 z{(qwFm%e1kgZ>u|hW~{zK>rT%kG%Y^yZ&|8Kk~po68?8~{p+rOW5GnqhAjtk_f`NAdvIrH5S{QKqT5CMZrTFq z_*pO$`-}AVtjACXZwuCS@WBK1H?d#?6A%=H0Kv>aU>yR12z-EmbinE^wge!@`q5T0 zkychlLy%|~5{=yrl@Ln1vC^-hlI;Io0vJHW!HI}>1FJXz(WMgJnqY(fJKI7)e@(W$ z5|Q0)5)InyE%W|aI_HIxa@<9-_0xNEsgbuQ_BVDbI0+s};TGi=JJ#5JE5gvwn@*~b zl~deNJ#h`0#L~KNo+-c=1AA3FFbLMvQOf1P#y8i0bEJ zg&Ciq>#FxE*PV1|Ngb1Bt)#x%PWfpLRLzTsmq|*wH4q&o*A>sTE!kBp zc!Vr@n=PnrLH71QXo?}!Mrw7^HX!Eq0y@TmJy^q>jxFUCu|xZ-7Zuj&B(9BWao~(s zbYuF1Z{74|4_%!T;r$ZS9j_%c7jxi*k23I9T02!1va`v{4R6cL00BV}5a8d>1C9c6 zcO-E6cTfF1pg{J#dw^X2#-J!*g8YHOV8HDB14E*KDzLv}NEi&5Xn$aEB&i%610j(E zz7Zh7P*75R7$hl%g^<{c#3F%v7oD{>5a>HQIByw0NjKl{(4cR}(g~A|ElIshB0OOL(XJ8JIVpviP0U?7y$zU)t z7@Q1-AcG;vU}Ww=1Q{L(GCUAucmVgp?|h+fG?{xE0^EbY%K?)DNrnfK3=bq39!N4g zkYsou$?yQ~OA=dvxl4-u$qld>SaV3_$nZds;Q_2`qTDbXfiy|WOx8;1nIbBc%aGf0M-MNzQ7trijm=gA;SYhh6jcW4-6R|7&1IC zWO!i6@W7DafhEHOONIxQ3=b?B9#}Fwuw-~($?(9E;ejQ?153&S3hdB-UJodQlm`?- z$^#0l#iV^nc|d_ZlvIwC2Nc)?NaaX*K!J6fL=H-Z2e8MJ%8}s#JU}3oBf|sOD@f(Y z@Br3HQaLg_pk#Q!$nXGSpFi~hE7l(vus#Fp%kGx^pD`B{0mu9q(*U6giWI|;?3XAg zX*`62!GJyG_c1Uq6iJMPfnk6-^rsw#Bu2u(q3}QCfXN5{v+phj>>t1B+r@x2;!g}s zg2B*m#2AoL?4LO}kXXF)&m97{Li zkI)-%81U$dnL$ucSyP3X;jefch{pfFSO?Z}!+QXU;jU5O-AqxJ=nQ<^^&5%d2srvL G!~X-Yg=TI5 literal 0 HcmV?d00001 diff --git a/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf b/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Onboarding providers and payers in Production.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3ee28244ec6ee920e29278ddf3b11b968392f83c GIT binary patch literal 116517 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¶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%0AkGPJ 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%0A3{T4*i9&5l|pI&UXF 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 B;kf_+ literal 0 HcmV?d00001 diff --git a/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Payment.pdf b/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Payment.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3b3529f9d9d47b263cba8b22b3d23e15c27e7ee8 GIT binary patch literal 275075 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�RV?bwD#?#7cBqi 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

    p#x4^(Ef$8_GN1>;H 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�E@oO+OLO3 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

      !c^O~u>q|W_{vEpACw6u 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 YoBNTAF^>iQoa;Biz$rv3?a#pf9q(R{7XSbN literal 0 HcmV?d00001 diff --git a/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf b/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Policy Linking and De-Linking Process.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fc92d217ed4e7299212dfbed20a21ee1aed7299c GIT binary patch literal 160995 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%0AcNL86~B~-7+nwtfmFp8?V0Xy8mL%=4o-4@afk9 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

      Awp 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 literal 0 HcmV?d00001 diff --git a/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Preauthorization.pdf b/catalogue/openapi/.raw/nhcx-site-2026-09-14/documents/Preauthorization.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3a7205b65c3be659247197c9371e3e4756d37a26 GIT binary patch literal 303060 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%0Dbvwtylta0zbwu3$70nqw0mN*5K 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%0D}~1<$3=#aKE!XyrjjI1M2Uz_YEPx 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

      xVgFL%?X#EWZr+;K; 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

      ^;V@*I#U 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

  • 6ssoj&k_pGpHK;qweebz(Q{QLOabrHzA+} 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

    W18g_cF5#^gG6lI9#|phMIv$ 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%0A~K6*F#w*TPhBVx})?1dBT2Aick6d$(D7 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 z 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⁡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

    &=rPSGzlNWt1?^`pVqdka@Hx zUs&~{YE8}M?PpuD?VQ6)+)F6{4*Vof`6rLWw#9(3$r4(M?{+DMYoz;Tp%xx)nP)zi z)$g<&i>>w*_x3SK+D~zs%8&T)$9kXchyv>`EgqM>m);uP>U%ok+wxskThdS+*B#HL zw!rCWOm>E)?wuRfeyk}iFmI`(Z6A6%|6FsTVU3#c{ z|2{2%?UwX5?8x)N;~?sST5*m`#2Dr!=2_8!Z~s? z$A(Z8XSo|0!^;%r^zEY)nycmjN9)nFQH-+LNMJgxFQlGioeL9Pxb(y#T)fS)c6L61K>|A zJQfDUZwKbr4*{1RiiMW_On^6Dl-f>dv%%j5QmnQvmDF%j*t!6U1Y?6FUDW)MVNn5@ z7Gy`*!o>19v7!#{ED4Y*TB%fC8Z6Bg|IsUEVVFG_X z0#pGiy4$`PXLrZfklFxIL$$di0r%8W9!3ra{WGkgPZ0yTe%2JgSl>kTb#~zAD$)gBY2O^=z31oc`RaT zi)R5`B1J5_H&xCCNw+_OSm!c&9M?oANSC*Rs=ej_osfZubI663$onTWupZZ$sO2|L zqDoS#Bu9YO2;EOy=2Xi#?XVy^Hh5i719pf>%TZIP%eSnvf|%ToWs;hJzN`*i&rpxF zW@0Y-jG7)pzaj||i#p$yt8?`L6OzpH8gEo(QV{{ z3lbGBfGYxFV2{QK5z29B7|uX0Ez+)=N;5Q(M%3F6mILn(p?T-OJGBVgR~&`rYHDLP z>s7B!M)I0{_|`QodU4$?_>Mo^{b-r3^Yoh^8~rr^n5&i(6V_j#27<73K>odl~okA>uz6#lKeq$Pb!+#dMn>QS;QONQQT zq_M7Rn})$T0$%t8e&%&3qzY<@87#`TtfKFC|qML1uh=z;iorLVO?G1%OOQC zk1ihbjlHz`Ae0HpCZ*{V{*Lndg)m|20jU+Clux8eFOExx9;3MQ z@rhBz#bGlvYhswRYoSrt2>Q{}Ud+ttk`qSQVb_cZZ-tAt{){%5>QI`8d}=e_0LcQv zx$J1`YXG|;4otm2*4yjYx?G(@wN)3Q6Gyexz-ynKQoK48{HP4tnQz8k^&U{JWIHQw zZhJdYHNK7joVR0qci%2?UfJ|I$j$xg-jpaW~R2f$~{Vw_(? zuTPT^b$|jULA#3OE=a9v^yDEW=~yp-HZ)4;JctKwJA{=FFHec)-QXK9d{gO zR5SR@M(a0<-!ZSLtM20AN(%mD0wo$;DN6bD&i|6M?x}=~4B+C^X@YhkjYwK}6Su(? zEUFUnOi%-3_-wOi>GKFZ=z&KH7%kYy_aeEDg7E^ges$NYd`e5s*)RUiE5~FgGI_iE zHhQKfxc9MC6+UV^bH?bJQkg+|LoCHr%`w&b{91)IEyCQjner?NGR36j#&|A&#>%6^ zj`)bOX~!l;W^7#jgyLKLEB_jFYSQ_di50a}s_bb3MgPvE4T_8PUAc@I$S6q)s6X>qs14QAy)< zt{d3$YaZH?%Di_qTINY~;uZIJ^4uP4YNoe>pKvK{hTj-&vf;2wNa(6?k~tns%EiWG zOl|em{l07o*J$f#a(FUCz8*g6EZC*mwPt~Qw-Cn|A4EQ|2cvK5YGLa7V+K?Sava~ zt{t=VtIN*~*E7e^j@V__6>YZLHbL6mdbn6JLHcj?zXABSX2`ERCoYU8rEjjBdN4ib za^}HFEroj4UpH^pUY;)i4W;0^ zKs)5^?bZ13*+5;Gp4&nP_+#)VjT9R%+G^yfT2ffu04MD-hKbz$IDi{UV)F5~+J*KO zXuIGEck)uKjb~8d*@U(~bSJU0{_A-zf66z+`tvM_f4E@&P(;DT0eFDIzxtrq=>Bp( zZ1jKG2gUYF5Z@mb?LRxmfCuCJi$m$piTri96&o;!^FQ2He=Zl`&Ln?Pgq{9hH!=8A zxv>8d@%-mRehFv$LlJ2!%U`t5&iwmIHqbM%&@um4n_*}BeWm?@6#HMcG~mHBf7wGy zPxsd=8+cO4zaDw>hgAm*m-^53Ku-ref#`Rp@JC{Q-RS7)SpF|+kL@p;9X%b}?=9j# zxv}Yi_3+zj_%AYlLQ8*8b@adN(eS4gMgL1w_aBS>ml6Ua?|-A*|Jt0=(=+|H{{Bb` zxS_;v^7_y1BRxHEzmwm{{83K8ZD0Pn)Zb1D`ior)J;U!Cq(3Mj1Jl1A)!odvUDN*ik4PlOOWzU{OL?b%cmgwNr-G3@%?^Gon>WrwwXLgbxCxd0)sWcCkSj*qmoQYK$bwvQ(%H$c$aNYM*K|d?R;Rh%sh+9%8+_* z5Br{3v`h&8O%~I>+Mek+GVyJu8e_6?gcaW(2ZLqU`j{ z{<*G5^niy>%&NHcY{eprH%zYn-x7%?_XCZFx%ReRR4CAKvqe znQNuPfa=!P2)SY{r@<`BISgjQ6=$>~6~KO}ezPmyTV%0`nx0b=iBFg!Q1~O;w`ocu zUwuSA4t_-Gj&iKUOupg?ylXr+ya0jJYQ8d(k=bk^%R&W>lwWmEON6*nLJ&Do-D%Ek z-$0aHV}T?)eN^4yHqD;0U8mb)+=Qo_R5L!i{F~pQt(-AKnr4_41baP`|8%xcbqyHT zO!{a;n?-k{R@!A6o!??T>!DEZ_rUT}_oTqn)H1!(Zm$lBKC-1R1I0%9p#j@tnqnlc zGsSmzWLgILHBExpL<8Hy8T{p|ilx&P(JQI)D3x+(vv8}- z^XqhDFc#}wtuySkE!@?DQ@tvsr(}vZW!@bo*#p*=qS;)7%NW&QD zg8hcnY8pC~-(Cw66-s$S;pz_r5b}SZq=;4nR~F5;5Q6KKMN3F4VYYIR6CYX?U!vy$ zoeb!A!Kg9rpnHEX+uUD&60<|x5m}~(IIXk<*56?LBSTJUTFJ((~x=~}bM z!l@ZE-~*HEuCj_&>Dv?5Nec(M? zo(5B=C_<$XSd|U;u$<PeM_joktKtv6I0TW-trIU{B9sNL^hcbg!K55T#8{QB~4O?|>sxqdw*T zQ3FjOfaHW24-T%dx>~4Kz4B(xbm+#l@X&C`p~PMXMRqY&YdQXz)nnf54OOFldu zuHf--Pk&nWxH`G*c;n@Mv!3eZ=6>_gagX2nbaH=;@8x_m5qI}v6!B?++x@N>Y%)&! zaWAfw&rT;M^ES7%I^1CD2|6-=bM8y zTJ6VD*)a{7(g;hC{%tR}^CO6)Z4yMUXovNBEs@4&_xq#L(uiXaH>!Q78xzh4Yd<0p z{D{03@6w8htyJpo^?Gn51Oev=2_cP&7A5sgNiobmzQPFSTO|6SC|2LZ&ewGK>YC0&FqF2;mKh( ztpT-+#{s4tC{n5UVX-1%)taQZIE-{zh~kYRbM{hmc3N8McE(u|R{6 zheVm?v1%U+cFoEp3>+zqZh7uirq@;b$en`pxN8CLf!8K96!A5deX6zU34#tT`6aZ- z8cut6>NIfKW!3^v+fpCDe^r&XX_Oz32$kI)#jsVYrL1ny%HPZua)xZ=GhP_30rnjR z^{}mwjZ2O-hwH6WFPJvhpOshl)K{_9R)PD9bJYTNrom=<{VW=>O&7FaMRxk-wY1-v z8YPu%7TGGPnT+DF`h4NYwonpVv0EM|vM)%BO}eDszU1Df{u`!y$A!6CaOwf2OXe3) zRRRf4MrD+KM}~zZC%Chl6c4aP-9%2GYD1qJ z6!&L7#f3g=c;iTTPpIxRgQ=X?$t(#CBQg!xG-v`zJ7SYbACL(hapB zssqK~fCwk5vI^)q1qkX5szB;(f9~yKs&<$Iuymc;!$BR1(FS#;6;MZ!p0`*1=Gi&N zAdQNKthV2#Z35o*fz8-XKe#BrT~Z$=I^YX$oRUS*C>}s=sF81VA~4PMq}_Zi&v5H# zJDzoz)M@Gmv}ud%wev8Uq75pbty{8}7BfA(^tV+qyB0Hz_ zM~TN&t!+&Zqq}R8PQAwP-V3U4jNR~OES8ZI%KNr{CDc>L%o&b**TDRcl`iX2LI*iW4)Rj=$h!Ii%4% z^R7d3rz~i7!!rONU2s@?-`Kng8@HW$z z_x=xK-vDD-5N$i{Y2CJM+wN&&+S9geThq2VZQHhO^R{jK_kZstANeo&$;ryjsY;#7 zshvuy*4}ID1Z)l=-tq@CCbvCepHFkc#$j!MV*GCV{d=;O!L&))!?4tHeQ`_w413zT z{C-Grxv5;#V4b@2KU=DMZIX1hsXJ>I8dLP%Ha$Zg)I&F}ws|6bY+O5Cb4=N7y`Nik z&+(#>+G-bamqTCOJwwFuXUtGB4?wMtNRyQ|+KJv3<(|qX`FNp;Qx-12;-tc*cRviqvdLws-DIcUx6>j#pZCm$ITfbAeY zzzm7!Tj0RACN}ly0a9HZ=1IT55W@sGj!b zE%QY@30Tw6u)PR_tuppwfPF58Z5yO#CB;Ew6`$2#-&dm< z2ETmKK9ujFXanJKk&t&lLJ18jj-h<~R%Q?YwS&Pvf)$~3vR21XJa~1A1HlyR_fYs@ zoY5#eul=Q&p?sPH=!`D+P+6gB`-4-SI>!h{5hJZg!^y;IwfN+}vhb$!y+t`&0=j81 z8;Q@A>@^F7ApV#oh7-!mn1#I2q1}|FU-Lb8f?lDyRrk17z7u?a{D-Lo!B2gy;2#3R z`v;f{ih$-;(jy#5$gy&Wj@b=xL+7Q*dgkBpov7E(qPy|EhpP4-f5xABgZ#9;-f4#8 zj17VOv<7ZNc3A`0zoADL>=XOB2_&Yn?!!L@l9zR+dq+(Q$1mhUs{gXsP6JQ+SGJze6~h=WvthD%#z3qCL=;`*54- z3-EaoyAF6cj~xfJ{wDyN0X}E{3wj)(vUsj}zo+re=GP6<0Y9?nrv-mK{KH4g#Jm67 z|9c2#Qox>ZzQGN*XU{JS7g!I%3lB6G{DM2q2KmT$2bTx>Bgvs0GYtWmB&b-?59v8; zdjRHJUKwoXA(upQu&3@Cv-61_S>?BZH7$Dpt#GJpwNzhybpK&d(CR`+i53$=J%56E z4JgQNus{c*dais&fBe0fXLtl&D9i}Ka#XWq&?@K&%OR^{IAlmpEF+s1^upa1o#B} zv)S9-Z-*}jurJT$#lE~=pU)2=Ap-neFNZfD3QO#?UvKSK+g+aT@9iAizbl^~cusaE zLz?BTu0KEf*T39JAUxlyi=TWyPESs%r^_KKU*23}VhEg43GhGP56_ye@ETJrB^bCd5qpUr-&>Ghf5mNJ|>d1T;Y;ohlwR<)a-wf!7$_YQ_Uf%HX3m3 zTwsuLdbB9n+l7uz;Nj{qYY$&E_JkmalOF=NVplnz5scUY>jG&3{ruuX7cc8K;97)0zGT3hj(E=^IZn3inrYnVEIO1^17o{|k)3+~2RMBR>!nNY;WJ zsm)|b5>spDKvbFpn>RONqkx02GzsumSYoARJx+#&6jPq>^1BN*4$STGT>NM-PreRP zp~VjqicT>)(Y}tKW=MAmQjw{T;q5jH>Qg&;cYFfN1y!%k|p{|Q#?zusBC!10ghlxq94ts4NlalrDF z{n^HBd4kz;4{3|cxtnTYe7|R12YG~MU3Bxd-RRs6GOmpP_ePx~D!0ybFCJUSx@NSi zBV|BG%77(g3(uZi`M^yyNMYhKwcX?PO#|z+#9m8Vzk+#)(oQsh2LEe6S1$9>nfFaH z?Z{p=)5V#0Ft|S+F#HoQx`r!r$yLmn84IZ@$u^)y_ z?bl8E3!Y!VEm~rAP`PwNphiW|as?x$d{>`}N{M*O2jfV)x9<-~Vf9{gG%E#tOv~;E zq{ECS2T-3gPAzV@8$47?h%44>*}wp6e!46*8R0`+{#IOq=|Im%sX3f9+b!FUgbr^o z9ZM~Xz+#PkSG81O%jN;mkFj!f+pXCw|KB+0;_bXlKd)8xOu#x8do(MxTE$eSHB(M5 z?vyd8$(_%{53-;-R&w&NIRvA&^%a4wL)u6ymG+hkCnBP}($8wb6+Qj49bo-0Jd-mn< zpQeG8IbZYO%4jr1Z7O&GcfF8fn0wo*uNHXTCJaI>Xx`;ZpeBPuH`)uzyh;yR@b8x zoVAs^3^PxWv>cRzl!es^&0t|t5~4$SdoZ3l9f=xrcS{EDU=GZUx2B}*DoN`lY9bbg zywy#;Z2qIWF!7x~<7ib{)1z{a2kD?mC=D^RD3nIv$Q#KHF@&ZQrZCB=0<z`vht$ z1`bII+IoY!waZ~tEa(CgxeehkS8C!jkrm>rAS@E^-&b&Oj~~w^%NAK8FDlABTpAq5 zNnJUD5>}kvCuFR@u_XUXlvyJ3jsf)GV?}B5-UZn#-PazyV4^gbK#5`SMC;%}oSSEw z?Y+g0`wxF{`aJXABGAZF0kavRuD>)^2X!n0G$VoGcna>`5R#h`j4#bUu2qo3NbfKG z3=!6`KU`QFaol0p)S(EPpet!TJx`H<%LMv)YWFfzewAUg=5S_B^r*UaYAruEVcOL^ z6Iiifu=Mbs1QwRPi6qW?j47`Gmanbfe>v`kCV$(oG_Os#u-Au8Ht4XxE=@?Yv4~D? z$gnKW{^n+Nyq~DxigvfcWf|u*v9bT1yPIl1zyuX)r~(+~#fo;P#6=O}Je0GWFaxF< z_S`IW?^SvXpIt;Z_u^fd@@%ELbo8IQiLcz$U3RQ<+h$C?W#5S%c93vYqfSZt+^ubP z{N$)En#|C;vsvu8V7(%keB-;zo9swtz6zU&z_}wI>?mPmfScHRxa)Z1_2ZZOI}Nsc z2fX7Y=bgTo3T(JDI^*T!MzG78qI$o@_}-sV)NKEsBs$Z#7UTcMcKrA1hb(OWSKgtw zqKs`IBV6Yljl($rjWiLR^lyV=Ea$nfA&(4?JR{!RPlX()&kyAGi#Az}0=<_PzPH>J znFwv7_ORAzj}qxrwe?Z4eokCxcq@buS#DlE8CAJrxNc`%s$sTW2YiZS*j0cmF3Zy( z>agUrmHjrHXN%(o#irlozCYd8+}!?wLMg-XFWCvl_`hs3>0$^;9u*#X^kd1QhNqjX z3{i(6H{3LOppLR8r@8(L%529{_&s5Kj>zaohopd!!=lRsi|x-DZ{gx=o4o6Iguklb z)l3y`0eT{OQb25qOwTaKv)B5$XbpJe-tITmv&#E8c-x!9Sw zSXll`xsr*HiS=7`^FQ=Z{}*p_?(OOIXR+~X?I<(NC|;5|!6=?cIGzOynGoeR9g!Jv zgp|}D(LWY^@_Od)Z$dqh*b+Sm1GL^9B8Bzc{BXLprL}B|Uz#;4-zB0MN~{-EIx7h+ zI$;8IG$WGspElnn2K*Wx=GQf^2G%Tw-A1yDIxm>u3#6-{;gRm{i$}-wF6qp9O zbR`PXEz0Oq=@D3E2wmRjiRY_YWgrGs-E}O94K(G;8b7|Ngi3}BfnN&?!lc_vKFZD1 ze4?n{PjkxS^qxl5d~wHlMyz$N>dS3~?b*+daCv7g$ar3@_4#zytEU)%9DbHl znv1_gH>Hsp1?6%0^X}?TYkV|^+Y$GkB6lv%+FM)f_d6_Kl2#^uW@EwQYfDww6cl-P z6)2yl#(107F9KBRBIhR#1sSSM+DlC1ulE-NRlXS`E@x%q%T5TJ5}TOQ8kgOt;nB*{ zM;$F;W~=ogOZEeX`n>h8r)|xN(#T_9BGG2M4PTquO08av*ZmvFpKqR+{ggD2m#>4>Xh z)dKllRGw7X5WQUZ9<(&-o2xvw_s5tr2V!hI5!o5Kkg_>eW>qo_HTNrlv|Air3I}a0 z!@RXFJbB!=K(;jEa4cIss4l=OJ|&%$0xQv=EcUjf?^)PFu?mtJ*d2VDsB)Tkq?phV zPM?gQYjvQwl1DYF_WR_PfD+B4?%g~6$vNh(9GT#1c{8LsB5_bSaLi)jNOIx=tU*XJ z=o7}7x;~CS*m)N6cP`}t^@^|9zu;`85C=cdv4@eTo|tj8k#%7V8l79}<~cZHNHUx! z`L^92^;jXQTbzaK|2Z@w!P)oFz7&!aC!np#V+92B2JQg5Wd4G|bFi`${z9qNXzEoZ z))2nm?Cz*9D?YbWwllb`&?AAqV3UHYqI2-9;%y1^iDF7!S_qoRQOaGy5Obca!Dn+Q ztZ&&T8Mz_vkYF!gi-w=ugyxVRip!83C!7Mcd`1|b`6nR9DbODw3uN-*U`KR!aCA^6 ze+wtu2PwQ*`MububDf~Zv#ZS@y-kfP2 z=>B?fej@t+>HL3;_8F6a+h=Bn9?v9Fk%77taL=kJnG0uTzn^!*ij@p`J5S~WuPxnv zB7TpuCjE9|uR8^Vovrj2_Oko@P+;Aa!(T& z7}!nD?QwftF0RYBB;_;#HxTRt@5ua8@<cF2pcq;pcwF}S&&#LOdsTQ68mEN^YB;?K`45WNbWB# zRHS%PZSLa_7gUD;z$3j;7vPcI$RBWnlO5!T@t{RyK-m)==1fE=0ICkniui@5+BXsZ zyvd4V7Y1kruY+%aY{73)2^kn}=K<#*A~=bi#a9XPJJuAa!FYs^eRCc;BO(C95Ah** z4|lrW7D^yL2^B3UTz0D2?qiUG64q!u20oOl;0eji5$Ru-;bB6&g~aCjI~@}UtDMC? zU1!@b5*hNITHsmn7;)499`Pmal|{D?G6*?N^_m55c~|x;V>>1Q$L(I_9M09P1`lQ9 zsya)~C*cSG#*AjT-ik-2U_EQkrPFaTcNDe;=OcWlG9*b7*9S0)PD70IhU@pwP-b6&0Nh@jCw0eBIDsychJ~o9CnBD`UDx=3m zjBWNoTvU7?%DtF_ZDm#KkrOVvY&kt;c@hzocA36~1O^5T_Aofmhdd5nVxUaGB4;QR zH^G+hMj9S1{EY1GYRRc$)>T<4ueBJ8;}G99vdY0)V{L?aK_;?fE!T_))ZAdR<=NMZ@@^eV z=mnZ6uSZ=*k2pI-i|UCl2eQ#O1dmy${JEi`!pvf?#XbWyaPZPx|5Ir?3gdmzXboHK zYdVvc_H{mRuID4Khzb|PJku87>Mn{yU@{5A*3u{p=bV9wy;QDIpO+qpF>qS^LfM&9 zSTwJECmM*!iOTi1Q72o>J~jyp8OYWVVGVMxbH&Wubu6%r0^kt#Ewbz~Au3Uy0MWQ_ zRDKgKitPv0i9BjhdHay{-r6Y>HMV8nZ(ks+W}?=VcG1j)isfJ=s_v>SELtNHtCpPC zEXu0kkrk}A#bjsU@d|*T!1ahc&Cq(dyH}pUGO3(=g-i}M#jhgrRXEdc->a!&uqbt2 zY=R7Iq;F(j!M0lGSg0Q;)X?hXujgthD^f;V&+h#^RtZsQpR88b;8`_d67Jwms_tAH z@}M){65>~Gv@p%^vHR1KX$&ZKUMb$OH4b^iRS|gnvF-S4-2R>pzc@j-@<4o&KNAr! zsW{Y3%gx#i;hCphq1#)dnl9fOc!j;1tzF+ig-Tm7F|)g43hanQOXB?JC1AaIlussM z#&@T2-ykK8`>{`BXNa%qJ|)OG%$|L8|JN}%qPdOH_VKmIx28+H>LO<`sl)?ToC>-Qe8bONQlscmNtU!h>(EDKoLdJA%tinP(nj(XYz=dg5VSTp z(0@k+I9{~$aMQVOnkd>{e?tat(77AyEnm7EIGtnEedw~XCpF&fduMcq@6pjHkX$Z# zb4%DPD6*|&tSiyQ1GbswI&6<6EZGD=XN@m+f7038@imxMH$uDXI_Ey=(=_%xBdb<`%8WJx^oYz8=;q zl3=5_8~0NPJ4UFS0aUAsO?a&%gov;shw+`mZY8 z?8_If=F%JV#pQ*8x?HnHF6_;+!(O+XZ5Hc@ydsJNOe;rsH<-7vJAW%-!L?=R4qkal z75U0-hs?t*>&vDGn5?{IBx%r zp>!09k>&+;8+ON(i0@PP5zbw_VM1#NZ%FRW5d zys61$j~=ZsSXjWhKlUW7djwk_bGhOuAg#?q@qa}iP3X?lE&ndjwR8Jp--l;)H2`X1 zuRjjXsw+I+_&KFlp3R^vHQUTE1+mOJN4m^0H>Moa z4<;TlhA{S>J|03*RgLbzC?N3T*(9NE(OX!!#TT%*;2$o#_L>X*%q z+2n%`Q02k-{ol(*ld1X3<|8}sXwQLRRR;E0IQ5OG=aX8gGaNoqKO?{-Sr3;3QH{l> z*R@A1Y`^0J=KfYz>|e`83O73e(|QL0T-V^2B)->LflY|Z zviGe^ocaLB{Jkk%!5CGijT)_zZHEia)s)+H*#lL&C7jZhY@|PivfArQbpyzsPPMo+ zYi#9m>3it$&{&y4XOLuEc5mY=^0I8eBOQ95g*)L3TkcvU*>`(|Klly5p^Mch3*~I( zHCCks#yRI1>JkXU$XQpV;cHzZxwmkr43tI3vxB8Z=v%WHmE(Ae;^$8`TR z@D(bPUT4iNkJ^TYe|5W#?iJre-;c<8emI@Uvy-EF!donnLYCUBZL!%+nYmE z6829E*7Q$ye{mG7mrAR)HD0RrR@U0mHwzx<;pAo=jg8^r3gzpUMm$uw%c#|--tHEv zyKyQ;TG2a@a|*vJuM_zuGHTvkgXW6fo&JYu(Hel^ds4q}lSqJe5?y3Ht92}>M=|50xC-ni=gBC%G|Uc4 zn%6&I&_9^3xjm|JpsvV-qag@RLeW2PQ+pw-=)h6gf~K(zNix(wsH|~dt-yt*>HdBI zG~F;X48chlePcT{4wMz=02+>vBs_gGOqHg;Nt5~qLp61b6|_HTK5OQXRnq&Vgwb@vwklE^k)Zf8v3&W2n8WP_^cFw@bmL8up7~<8t5G$K>F+* zaE0X64CDddrhjJdZHB=|eJAhbfc6OlE(g99O)7edSmXn7z;zj(k$aDzw+Nqq_m+dl z9P#GXX_prK&iPUD;}A6EM+z8@e}=!OUx*)tABI0?n}`pAToB(aMFYwTyjjnWYh*ic zP6&~F6$Fcioc{;N!@bIbULm`s^t6L-kzLdKyF!cRDr0m)XM!6^{g?))_LKJWL`|7C z=6pb(pMuMbgPiJcIvhz;GDX!M0TX6`$HU@gE2t=oRH&Q10J%=_Bk7?cTQ^mS=Jh$X zm#q0KRlX}SDEpaGRDkYA;YR>M%8JuJFLmEfOB6!(hdYrnjy=FOQ8DOBI}sZ72U?F7 z5V=RfHXs{3xS-uj<~BoIQBl169cG22O2*!6Z%v{5mF>Q~3bNe_O>Ox=FQw|Yy;hsU z9-8^4D*3t?gCJlGC8PCT8Lw(LAs6Lm0Fh>Y3}ic!tDN?-3L##b#jLlh9UBovYHujOSeR zr%{TlKq60zVj8)(l12=bi}bSOay*Dbpc6d)-p1T(Y=>Bz#7cE?GIZ@U3LIPXOJTP- zMD7AzNbzR{u%e$D=2Tg68*|FB8$QMoRnVh_MBO$gLOadmqzoza=P?d3)mDP(vr(DS z5rq+j(ujTTiunuRT;l08Y=numbGUl=gAx(uFiryZ<$g4AT_`8wgt~!|amo1ug+I-B zEKdEbL}jE2Q*5_bx6Nfn_Q)`jpcVvRs3 z5Xtm_cglTFqL*Xxp!a{*F}n(n_Y{S0G)e^l@?t&`vVQyU`$2P;u@j=d0zJiy(dHuI zfKOrcGI6|r5Wr(k54#kTjF4nhg>KWS3Eh_|Le7ne)Uo4HgcadOP+qJx?{#Ryw?OrPs&$8L87ERO{{C1$zaNR6yf~;KYo#Fe zkY!LX0dxJ#as?*J9;aapb4YjPNRgbwJ`AAX+wV2YvUcWhgFibx$I{XDgbSFR6o?*u z)M<$keT!eY@-?-Sb8q}q9xWama?i$PY}o;3ILRr-FT1M#%6+QhNqw8*fxG1KKzoX@ zQQc_XCT{nh-bZt{JxSWs^l*KUDsu6BV^}wCXItK9ZYB1Fo|D@vWiH}oQ(Byu!R|=J2z3VgCdpN?r=@$)mAV! zX%DN#SRsmgv6Qe9exz|J*&Z=vFY9hu86Om8M(E!XFbXw)Q2(0GI`qDDU;TKm4_|+( zV2RLt;kicK^o9#FY;E1@52*N~126jro*|259{{`sExvcLy&p3k zxXaZPMQ+(I5K69$dTA(NLNJr_x*zN&*y^P z4~3Y0{zgsvY!NfB;RxxDu069TjBUPZg%maxCv_G2vWU&7FkeTG^{Ds_ADktD=I)Ka zXRYSAR*oFiv)KV?pexSmkj!eDCOgxU2@tZufsfHA!BuIK-2H@Hr9CXk#(*m$)i8ci z$D&@Qfh>6inU~$McJhxA3;NnVD9*vUtZ#Bo7CkTBL1YvG2RqR+UiOjfh{IrvJ(-cw zP(1WBGQ@Yl{st+~Y;C38VMs?J6?qAV5iVn%05Bm5-*9JJ0bWFW?;ovH5sePD~ zgI4d!xZJj*$I}UhT({Gjn*EyVYwrBo2}v=0L(JeKMkc*m;-Df#!~+_&FP(t)r}<0v z*xi`p_;AuuVhq(Zwdy#_7~a97gQmNIyHIQCh8q3%cC;}AG&j*O;9KNSHJ5~|E0wxy zIeQwl$X7Y9TK)|WtNDt#z7wLH(4;5MVL680LCcu@ zqvG3*6uy-wy(nh4_xq%4m-nD%oy`nCYq7Jc+A+9yOC8@x$}`$u@D}% z(M=WYR3~4F<4dbGSWaYw{L|Aadms(TYNs!G%!OS7e>{DYKQ!c$O(cA z#s6aqVhdyoG8)7dMBJaG$JS35tQ%AZT;~S>EW~fKXR-%C_|po69gG7M)*r%;zziha z9})J5ehC#)_e1CS} zKWhUy{QLcd{g1$=A+q3c;c$QQqGA5zMS2$1v&~_+mIroyi)LQ-ME5-QH1#YAGTJHW zDFK6f9{jU&HMw(_&&e`VSfesKC$)fk4oF9V7fuxtFXJccUBwIaM<<}#gkW=%lPwQUTYv(N}z!k7`h zXLOb)*aW;8E=aiI5EPr0W=t>4_(~^)d}cJ|oj2bkJN;`AzRb00OTH`;K-Bp-IqWU| z{5WX_`OpAk zsZXb}!7)39hUpGVH+b5HT!+%)(85q?g>Bti;Y(n;yI!L@3#l=h$w`GUhi+1A3H;Jl zv&|P*C-PdJ>9@lDC-wo$G{%551txvWOW4Jr4)X~8SoDr1H+~f|9mr^Ec)S{S1malB zS<#$53ugA^=|thknD!|mZXSzPGn?9ab58>#+33Hj$UzS7F~;-D*UP@XFc zec;o|pmwo7&7D!zFWU>4Ec5gG)!GH)Cgb-=?OUxzRUK<}_FPg?n+XaJEv; z!QfyxuY&G`Qdn9e&m2it{n6cM?>NuR=kLY`EVrJ)A;J8tyxeNWHP}ONRrnp~uB)~u zY#wo0xrX;R73W7MF%G%!kzRj3)y$P6gZqQ8W=W*@wPm*XoB53k=SnA(9w}iHz53M( z#P_N!3L@-O8+W@pP>-;&T*T0*nlb5F!S`bhrs3MR;SUTq49x8J*?WZ-L}>?UPk7Z6~t7D-c++S?4u8Yn1mYv=2hC<^Z%gn0h* z{<+vcxFnK%O7}w@pb60AOYR>`-X@@>HbRjul1wNXMUi&UQom75v@|d;E#?%iBO^g# zShp%=UluWO*5E3T97^0^D&>m)J7#XNld4d(bemDM+$4wdkFkhXZn9RC?9wPZn`z8C zJEc~jsKDq*7MG{2XU}<&gFJ?6>e)ohr>)qgRDv+d8z zeLWPDVEjmE?Pp4EATw12{xW;3rq|*uxoI*HyVzv-G`8`y;y?8|qOI8EG%j*}HY#p* z8uh3+Ll1B0Q!VAXu`&xeqfx9nwpkBfw!#4%yx;-ab|JK^fIl(oQlqk|Fi zvMrTi`w!^Mp8mrL#}M`8MIM#-F~)a2JwL?b`cn#^VXiVM~SHOEMR6IsJK4u=#>eudW+$1XX)tkiSD4ebKiMo< zP1C1czvw)64o4WAUoxpXMpS7sp9M_ZGAk*>nJX91-7mi#vK|hjOXe5KylbwVA=aa{ zkj+u0NS&Y~HBwPE&24Nbwl*xMSjtXc;Hjqa|H_)lxRf@1QZ1%Pcihj^sh`I6^lemc zva#ciP;?Ntrlh7GceZ6k#ibh(jMnJPR0_(NJ5NTjfnzE7MfX#@x@2ZYTB`OS`O)Q| zNbdMzSNX{$&G=G#hu)3^QPc+^=5HgZE;i4sdS<+VG&^>_Rh!f3U?ED}-Wao(dL>oX zt|FqGPP%bOMIlReHDadfW09ZvEL7v|~H9L)B!3rk%I#LF9UuyJ?*9 z`GmTIrcBT{y6T@!^A}ORNyFcJzFv#TP^QuZn{AaQ`sQWC|6a}~#!AZ0*4Eg6lZdGz z{8L1(9s2Vc6q-b~ifo&amKp0NxqA@iU_gC=!+k*W7aF$imqn6JJZb{1alz2|O=s6a z0bIV-`J_B^>MZ48O#z>xfq}|Ia6>@87d+me*xjx$8nJ=Sghog$ZIKK#WHOzSm}AsXRHS}HBc5|eDKn3>Y2B2rRNdt&57y?) z;yg3AN%wt1IWREW)?_G~zN25B{kd0k{MH7W_vYTe7oiD*)|$Y}a)ENG@34EUtbz1g zl=p*%!BCs)+JseCM9SG{1gjH}4HhvHhiTi@&F#~{+r^>uDCjhn3T57D9Bd z4xJ`{oMH1-aM+izUnA)2i|g5Dbg<<11cJZlBax96Sk94VNuh{1+s@ayOOpNJaD0gmIxNhkNj&~s)>+QPL_gAdZ)N5Y z={IedJm+)P>_J+fO|9oS#QQ)E?mp7o+YWa*fd_?wqG!87-TAj3&P&l&l^0Sc=sVBI zbebJ}?mx1|@qClilq&0IJFz4Y7C|AFWXMI~@FeeR3|rGB(%15T;B)XvF7 z?C@g|t99?HdMYY8-_!BnFW=I$8wP@H7L{}UnHSSw+~rO@!LcbIygp@k(E$;%>oQ#I zUifNIU7NA+-sQww@T_%~bKw43gKw8mJjlZfBV?B*8)w_dCpjjv%3N~n8Tvpp(6%E7 zii4<}@GHoz(P=~PA+$z?u)S2A>+d(#3U5cY%{G^lLL_!K^I^vc|1Z`wq)1aYK2ZXClon&8KvQ)7$acnS- zS)`U(DJg@}K`=)wT+Irqch&Y;M3W3kSg|%7A{E85avVCS2|DjnRa=y^G7qFccWP;d&+@wM0luxL zXlr!k5HWO>jAW(>c&B$s!NaJSV?l`W!ft+L*D-*^SdYHZ@1sTb!Z)q<*#y!pA<7Geo|CSi+cTpe$78wa-u7MlAqJp~7`a`=8HJ{C zLL(aX*fK+}9JD^EIF}n|xL*Y^6rNUHI$m)-(SC6qZLx!;nKPjvG0(qrh)oL@19=r^ zp_|llA%Y{~B%US6Kuf)4OdKf^wvL2(1t$IMb?Jqjkj{wE5yL-zf+M=+VsfKnW$PD} zV+lED5ic>kyE}~Pw?`3iD$M83K){F^`EON22OlaUnA1M038m9=s84@NO&8bA{ms(= z+9?S!&dDqpVYuaWhJCcuv+UMj!9Ym6xuLlUrQ@DQam&CyROmVVg$ypJ4zNBOV2t3$ z#?mQ$mgM#`Iw)!jtFW^8r{Y?WcVL})ArT}j#B_lAXv`u)`vvw2=Mn8Lf=*ifEQ$px zKH9;tbm$E}{kA9f4=)R$4jEf@1^16YT8wsK@Ts|iaU)|g2^wVCLbP}A#!X6iBNtV9 zj%sOf`Lohkg;5*{cs!v}*%^*oh3#S0%*QXKf6|s$fV_>aC&sQha6=+Nu;rMl; z&SxFq(J6?9bjnD)z(a?v4d}HmAQlY#jFrVGc&x3{v|RW>hEF-`mr-n3P*k2OC__^L z-e$NdNTk%rXf$TFIEnw|j2MO(AF zu#tm?d^D{YBcu;PK4ep(raBE=u^zEy9x!d6!hu8}N=SJqN-Q^~!?G&-;h8R$RFg#V zGOHJ3u*B%VygcMaC6b`_7GgUYvC{cK3uknDjxy;9DJ6<2B1RMNI# zfa)J_Cci9)(-3(VN%)>*PVO*f!&%7OB1f*j7YewX^X>{2r~fB9h?;0BJ%VnK1g*Ld z;`S|9%8y$+V|X1j@GavoD2Q2*n4Glu+p%&?gfyhOV!9*nSmGt2`6#krIdO%kWSg7V zpLc$S`$5wpeuDb*t5Ze;)|NYKJE6{B-x)#% z7-vyD<+bidmw|E4<0yM`$_(8eNKAyh(X%~Yf@XfAY2!cR`~_EY@p36;uY$JBJIA~- z=CPW#il#aPQ+-VNp@=#ZUH&@HP!yMYDC7B;_uCH`M8K1MgwpU-f>gk}BV~F#jk)@AB38R%D#P{X0r!cdYha`Vpnx}C6Q+xh9k&2Tn0 zQwwo~q~HJ=+=U3Vy&%-z2?Upodl#PQZK2&a{oloRgeBALR$9tdgsRY4LgDXRyN503 zMd`5*s3)reRf%o<3j}?5Thz_j;w$eenWOX#7c(c?QksUX4Gs?WQboJIE7{EN)rS(S5tAOv|Yqlozoiu)t}X`{+R7o<%IDOV={mnUj0$e1)WD zbqM8o1D0X^a^RmS;c;-npQAv@;86-Wi$>8?c^v?n!#@%Zcdsp#8nsHcd&@IIhkoDM z0tWVokwH^`awhFTCBd@N)Qpa-qd3vC-WT&oZzj}HV*Nc(Ej+BfzBu97GkXcg%I-SV zGRvy&%7fsHs&3Qk@N7KHj4q3I#tw7IuY=9P)1)^7HFmoX6wPi2xWwfv$_=lNcs!hT z9@lNIuA^(QB^vJrA5G$JXFH?yQ}mltD0XcozBmgA_H#|B*u$-GRt|~HUj>^JD-|Q8 zm9fx2Sm3}bJTMLd=nDp8`N8Re{TvDHC^6x%9*KNW>Xt~;K+eU7(WsVCLKWe0!*TPt z<>DNOlE`2*5)G?CFkoUw$`+|p$f5rHTgOfFYVC+gwOY-7upe4? zRCYED+6OB}Dv!g=ZrPw2pS2ip?b?yt{<9?pz%E$y<*JH%#YXSVP0sX^V8-p}@7%a` z>~EQtDl?&~sodqD<2i7Ram*B33TEwZxm1cps8X)`VVNPbhe5FQJ&m7h@z&kNN!z}* zcZz~x(D@1fEGMdU3jBwK{$5?4Om||Xo@mo&cp>4$@lPnv=rbo>1nL(EVk z?J=2ODKfT(U^$dMsAhWiZZCApuu3Gy$|skf*FpZ0ohnQsg<3kj?5vqU>J8X?apGnE z&|@@rVwA4kt^OL^VBRl56b`3^5#~lC8k^)(SAi;(e>5cMb3>+w;3jh($&9T< zBpj{sfEn))+?FB1b(T+yZcU3EGZ^#7z+wv;8r@+AGDEyFNH#)F2EJrb27Q}9+`@)f z7F~5eF2Oq^R5Z>C4>Kt=!Fgd6IiAhI`PbNwQc{|X^AaPOy*2EF!M3NMN}%=0^k6bN z_z!k>VutQiIO92B@}KGznoi4G1A)wGk4Yy4c=8m}xIH$&n;2997%)CA%#AfDUa-h{ zkDiMDqsEZ)LS!0V$fN}&xA1_nPar7AJCiy~gw>ptTyIywKE}TLhHB4I49(amYCH-7i-4m{X2#6v;Fn5L&}wx!wKy%eYS_&$ z`f0u?zQNMlVIJjr-6tIsdJ) z10xV30SLe9V=28CjG-UsCb!+rwk)}m86tXrsIelpo=#Tt+rMl44**R-vcFHbhgJ1$ z8Ef_1^eu)@ULT+6E^;rt@X}8ri$}A_OI(3uvJzQENU8W%f*=p*rvLzf{oF{9vazcS%WReaS5A0-St9aCzYJin7?n?@>j2lxTe!321 z3Ct}E7Kmi3z+AX^pS3tp7_Rm?JGYDseMamkE#0uL^rM&eymD~m{qXSX{Y(5CpP5?o zz@_bNm4Wu26!*!=M^4;|yHiL~stnSeFx5uQ$R5>tlx3N@3d@)5IcE;$ut>tGKmchJ zmWoz0SJ6^BV3@Mm!!Ux?2pf1L(%yt+q}cWO8l>nC?q)gJ6GV;BIA{oG4l^GPq%ilG zZcUAl67`+Htj{YA@}=5HIe`&kypHhEV9R9!QgYj*Me#@3}S6^hGU~a zpXiIi=%YUT^9`ZH!3;g+Wbl4}7K}5wOzFeoudvKWzKP8Z+e_ccQjzpal|;#n2IE;r z2E1Rr*f6HrFppM!Sn05>5i*%lu}>~tMH=F_6?u16xfl5@fsbH+kGFM{=u2i#h zc~hJ>+!S{SR^W8)fh?OF1&9o!-WQ9EYZQ*oh%Rrg5BAOE*o46p9*bfb zq>wnHQGaM)U~DMJa$s!8?_W*plLb|}>!6xNX02B9C5l=zhC{89L7y1o`8B13X`-^n zGD_#_;dqk9I)r37O5nZahR8{IHCz5 zK%9+I(a~@k+50HPut*rb{j5F^{pqu-y2pHjl@G4GtE2krJ(taWrhoN#u1#Dqx}@W> z`<9Q6fNf_N@7PirZRU$>+c#h8DwQ65c;g)vOJcNhW(8cQH3oL|KJi_?vpp7P2X-&s z^zce&$K-I|OYf?PpHL*R*Y1li%3wZB64J z_@hLGm&3@vcPie!8{$=^ljs8Qg~At>%fMtRIajfz_#hzdP>dbg%X5`>ssos&oX&14 zGL=^hFt7CO8l61x?J}5_b2X1>Cu9jpwGZP3OiT9e$hBh_T?Yw%Trzh!YNkfyswDpP z_v9!5u2LWtQ&%1GB?OC&Mi!)^o_mh}bQt>e2^ zN_Vg8i=ZsuWD5>ffM)7}VejZzM!KWYnQ$2uyM#lvcz`|qDkQ#l)D>hxE(KSm1(i!R zS8?&R2+7df_dvkFw;;{H&FBw=-~i1{(FO(R8Wf2ca+%Bv$Jyf)0+5p@B$!psLi0O4Y;#GvQC)fd z`HxQ`mIsEx_r;|-LD#B3+q!lzVkWUnEe(O|35NppDB-YR)amq4|Cp%r^7grk<0y|< z6wl{T7u4$+Cpbt8Qw=`(_^*yzWpIRMjOOb;*>_@IJ20amqfY-=Rp-TI|L?qJYP@oC zn{l3DaQ#1iuk*qE;oknVLt{^u-|Zoc{^GMwULRZU%yev7LjQ4TCE+x->X8NXAq(h6 z79diu%lVP*+@J8;pag*Ywd3+*54uTbdxC;T%|~HMq*0c((9@3f=-Oh!s#Q#iZr18i3e@f5d4E__DCotOH>G<9`cQ0x zRy*S>_CDV1HGM#ItYG#g2HP5~imV3s4O$HcHAXa!S7|i}5g-rB%~k9a4;+A+GAjZ# z%c)3TV^lYwFYw9-iD;Dm_(k|Tf9@ZD>a38hYc|7IsV%@uX0_I+!`6#?hor2h!Y?7d z(D)_57Ybi=C5_WlTDDT%*4j2#S?+G-Hy_=!X>zWzi2?d#W>`I_8H9tgW(})vp6bRL zhuFe@MeK&VyVrA5Ob86Vg_1(-GSI^ierQAwL!oV3sL`qQSQb_=zFtvR{9AqabL){y zLF$J6a3+HS8v))K+_f#8RLW+un<>?6Mztau*1f>|%#~Ry6V?pQR?&2c@(Kun<8Gc% zQ#S$QABXI+&v(zNi@5CidvN|e*@Smny2nTRLYLm|Tr#<}eQ@hwz`(_urO#k@uID`A zY&JVV=vh}HkwGRxcPGF?y=6G zV56W!>^ z;-zcGakB|uGWg>1c0(G_D7glF>S!{Vn5!h2CL5E-DP^8*o6_leo6`2F@H6LL!>bs^ zXP{Xt7z^iWt9V=~gUm17!e~l{kjW#;d6YBe6RS>~z=i@C}C{<1l zpgPVI%O?`UtK%eY)WXQSJx0soiOH6>HT`K`XOHJTv|cTE$>(5M-Msdxo(d)ZtY$X|%0w6ZZP)fp()65D@{s?Z`^A_O7sL6~a3|b2+LLtK^jHb{I^yhqynp!kUKiNBWoLiz zr!RneB1;#gaUPAN8ARIPrwY`)M4E9wF(BZ{>e8k(OwWoYha<{yC=Hz9SSKT}4%d{f zP^&i-3Z=vWMy@xMj(6ZNabc~YCMQH1ku{}ftB58SovF$M8%qr`w2~#XpukWTh^YX1 zdv&eOpbAPm^BFmB#*-kt91=yF@6l?8({ z);9n)^eoE$<-H>(_WFW7>?fb=8cI40@b$?ZBZ1d`^xVr#xHH#Vko^s8Mv_S={>JZc zIbCxVCy#5f@uM+@0VYbv>S#OEsrQ>Oda<#NQMC!0)T~~oOC^A9%CGntKZYc@aCwaC zJC>m`I9Em>0s#maoYf@6qe1xdh!fiXfJmEAE`V+ASjJudvLY|yO==18MI8?E^yN)g z4Rz-BI@@y5kpUMV)Nvr+~S^; z`_Plukk-Mc&#dtOGBY%>nJS*vOf}2aTHf=c%@0N@6g8!s?`|U)SaQ@|T|+ONKDWiu zJyu@6Illa|9lQJ5w%xsa^;ef{^ISO@9cl|ES6?}Cb>D_3_YT}LNgwYX@-FGmcDH1j z7H_L8t5*Cj`|FpiVj|tmC9$v+MPKt=c%{&K>W-D*6U)1Qg|Z4py^{zO!#+ zGAN%QEOKumLcKLUHf(hecOdM@^N_cHXq_c)>`qDxV%6(sLyibMe;r!iJpE z8vj-{&Y3NL|EisB?glp`(rKUcog1VNy`cnJ*@Dp?^mw`wk_Mc}_j=MzxHB0V5zl() z_r^QCI?@&Qo%=-7gt(4Tr{vQw7M28YbYby@G~aya#vVi$E52ArgvS>aU&whCE0&U- z#aAo2lJE5}F7$2?U#;@h9)p0VY>dIoY-E_RofKvV<$F*>j+6ePvtvA=9(($Y{*BgaQy6b-F*x z5KCJ?G4Urz+GTmC@Uv9<++T5c%RF=LuVNnEc+!+b70KK97z{_k$nqjuLlNfkxw(oi z&rlXmT4l>4os8LR9kF_Q-6nL@x2M$ieF_~!$&fr6i7Es!F?qv^vguPGc~QBoG5_Y2 z{F@wGn?JSIOP4v=&?}~Ock=FV6pX}|b^PM@g{2AU>QxqQ`ioXBmXy91YArXv_AgB> zO%8C+GTuS=ANG_yf?r!G7{w7uIyNxOAjH+e$6c?y?1%}ThziLu+EE5Hh<3MmQEF}~ z3Ry3fo?Ti@EHq1fm*{G*(P?#zo-qEqk=Banj?%K)pcd+()+i!~Yy6g|@&+l^!6(vq zCqGJM1V(pQt97tcFqm@4%7q;E$@#rK2okvEQv9peWNY@P zPA>eZlbflcsm)Z4jC>;MVwA~l$51N>g^_wktRWtR@M6GKXCyi*eOT;lajv8Pa`v}C z+tLz`xbURn!O~$#3i9wQ>Qr9ZV z^@9-TBlr=<>GHO=@`ZKJt>+az3!hf+JSU+{ez7V+1*r&ioj4HIt0U@=!4k2!U6D{Y z0@W6eIuM9CE%uNB8cvH$C=kkp_Jve>7z#yfE(5R!@R8WL3ME+7UbT(N)!iyyCiyt* z#ZSWG{}(QHmK7^?{VXf}bUwye%ns=i&SA-QNmG$Ra}?})03?J!Ds|Qmb{;C2xRA%w zo*F53bO@OY(o;=rWF;(~`Tjsp$WQ=ZC;uQ2{!I@R{tXs46{lLME5%OEmhgHLFmYP+ z8Y%DTWF8;3I8BK-5L3n&jGZ=$M#EgisJA7Uk3yk@`k0f&mR~=Sh(RJYwn^4 zS(Q_&WTRevKdgL4)mlH78irN{p=M!ZXG_M)rrW^j|M~nCSMI%f;+bc^^}w|^v{kNK zyJCEJcyo2o?=EyL7YpWCe`E!7-myls2n` zj^!~0pJw>xLQhyt5qb(YIBK5R#BK5T2AXxkw3qF%N zz|jNTA$% z4R;Rp-8xa((C6K>^~o*2efx&vUmm*+etc?dLu}_yKKt++yHo4ed=wCX3Fr?0^)43I z>#sy>I)K(xprTZ-7!thDds+|$w19#!0weVWw4MwE;x4>!=N&!H)sK=cSS6e};BA+9 zQIsvTk?@r*X_ig5fcw7k>LV*su?Js!>Jnc{_|@w>{@WeHwWSc_rb79af4c9Uom=rb zoOu}j`uL+SUVBBi_vez#E!}57e@J3W{jiF>$rL{U_kJzWmxD;4u>vYvTC)>zoJ$=Tf50$-F4 z+Ov7-m2}Y|O_;+&tE4|RD(n9ltaucOd^byAy-07c4$A1kC!6{srMdo`+Q-`A%;ou;ZvH0r#KrJuW#_5KORet#)d9nF0w!d zB!{GR(iVlc(k4f`v+LZ~qZvQ5ZXN4SN55_>bT8nmdnhDr=Ucm^L!GUT|Gj*1qGod{ zEwZ_0>Tpso_v%ol(S^d>pc7V8VHOW#*4V(medu;86GO<-dFDrhog=^4X1(p3x2B zx`U&^%9V?^PBQ6MaC16pVS9o;#qMnG_s7>qcDyou`L}PWjIK;{i+G=+IojJRuc+!K zw4x>4&Ip`1g=PJzsy-I6?yq%w`XzbLfgwfa~7M+5unHHn0l-wze)1^6; zM1Yw+u9TB%(K~ehd%Hv)~VCWCxWO-T0j1W1`B&kj|@K zrKV091gAk6+j-uB#n^n$us%Mxq4%ME;hvr*XKnPo`w#7ju6M=SH?M?XegcaBQeA__ z7O88+ekuu*q78;2)s>}Y?0LbRht1jMxr)nYhgsu)a`qkIaa7mBbLY-%?{&8KrtLe@ zs!O9)FP3CW?zY^pv5f$O4WR_=7ch{3!Gy%7B=AU{5jchB1V4K6XfH?s9u9;g+GG=?z!ijd(OF15o!R=v-F4Lxn0>O(4(Q}VH? zxH_dP8e>%Chv0P-%gni&8O+qgbw8`Aj|Z7C)9EuJ9+Wk!3UiIKE^XE5X8vd;kQlzr z1VJxG@MVcL9BU&uwEhqTqg02YP=VLXh|+0cEJ&~sV;OmturW3}l%#zhClV|v`BY!5 zqGCmR?n`S0Lm(hzf1b@60Olq@>5JL`Ag|+JQ&J>m$Ad+7tOPF51RBs(#nbsRG@YeN z{^=v+(Yno9o;!yDv+KzFg?T!AsA6Wn+p%GG6k&bdnHlP0gmsE2aKV^TCYMcg$m4QC zZ}z&}u89t}_ERFIhZL1Dnd8v*X|STsFD*u*STQ7pa08_XQgJc|050KM5L=5C?i0`g zD-f%8%>LPGk^``xO*N*PHO?T-hNB6yYL+fRKeDLV$Yskz8fBVy~9{8^{zY{V6arZ$)T`!_< z9~ZG<3yibblK2EvFS4msNti6J-ulm?(Tv|wUbh!svOhX|ofd%=yLtE{!V+C7Cc{hI z+;RK`1gPfW$*bPA#{G2mb>~R?X+^$g523k(Y6$ZlW z{wxwn`#v*^X^i^%`j^gW-y#|!qU-un4$Ty+ur!xKu}G=m`pFV|$obrPE8y<#irN#b zE7gBZXVc2{ZOyO0U1Zk-vyYa!B}qkwV+xnOuBRcicJ)#vF#b=GdB5gA1b;3wPv9N3 z9q}$rG!PeZb&Rzto5k)Bm(3C?FPSFN6CEx;p{j@VWfq1UR;#|s>-RV5KdY%}%2v%Y z!b)+rIkqlbXLv4qHBf3TRSX6y(=`NtNu)sqqo=?1_#hK+?dL$MH#XvmXQF2kjYGkF zW7BHP_Wd{Q_N+MF|+(amnyH ze7vr(%hHJWpCvYM)pol(L=Z}4hzRLIq>2tvW?T~ZIhVAUu^net*bdq4RldDCUAAhk zRLT;EvUBx-3+|ZU+(5BiOEyzkuLp~~FPU!Qh6WUJ@(`h(wYIMB-*l08nzJ z_b=|heZ>ZE%TUYe?SZAcx-S{3dika04=x6D-$;1bNUFd!R2BOAl8Y|x@o5axJ^jAX z9=5Y7>u&5?(RA0HjQ&G}Ykko}b`m38La$Ou35O7sCM;5o6iPqmG;-Y`y~e7N6jX=Q zYM1q6iOXHGbud%UD%7j2Awhf=b4H5+lTw=#tSUiAoVCk#u`L;948A;O&9<^Tb!jdu zvn9J~$X5ePhk>1+9$Xfjtr_Tzs)Y5c8)>}(Vf|t`r^E}rpK}t6p(-gFmT{9j`$;&= z+CE;m<_?%}vUrM`Z;as-{Q1@c{GF+8?YGYBzI1tG*r-D$BQ_4?&f2A1?V4sgwjr;; z*5tvyf7#ksWlpq=>{tdKZRA2lLx3Od*f^AThKDa%1CA6;$fA8tJ>(Z({40%kdnxq8@etU1z#H0eg8{{ zmj8|27YiW+p%~(u{Q()O8}JHYeYuNaAUPT`jSjYm=COKbkRRVua0E%>H!5)VjRL7Y!jdA@-;Z8&VM40Q|u9oX#6xim0aqLfvLUTos>A*scp0aZnx+~tK@ z4RS%;a)UiUYvdM5(C*cQk(MyXRH}IRV@W(wsU^@d0Cex;44*G8Hxt){n)$mb^8_4< z-uWbU@bsr@Gf5Y?HJWr-e)O2n6pVtQaCM&jN6D9Z2aGRk4Jxu(+V5cU0seiUWAlvN zk1*9lxPJbQ-xmF=VPwJFfUqk=gm72tRjq@ z5)clX${GT8Wtc!ZD_(=GwE>tRkI>H&0c6?S%modcT;F3bXq8H2)l74^0?w<1a;Q{l zV^j=+*eFLG1>_S}s}^dfIqOjXI7cAho9GD47z{3>F(?B>AmEx*27~Fyq^uZ;Da{0- zGy&T>Ux+3Tddki9P$}C(ST~pJ$nv#9J(Ogwd8C-M84$|IgwQGYP}aDuxo$N6>VGzO zXS#G-R^HB459F*;CO0L$ZO?dmAPVmSb-8$dX8m?~W_e#t{f4RtlkMj|Z;jbhNsy#l z3u~jzE*v4QgBjQ*d5W+RQ6ffc z1Voh3$7Zy4y>!awL*~w;ULUX0mwUAdGyjW|x-b49nnFUC5LPgXFwzKPAxL8>B`e^n zFuVeZ@qED|5L1wVwQyc-|HVz2B^R|etc_)BCC>VXGv3a|C8Ku+YU*8NnjYjbefzhp z-aQ;Nn_^1xhdo)3EG3!U+}a=5edUZXk+AV=5%1R`-v0pc-idsM5zeCZYDf)9D~(F1 zJZ0qU$ikiGj87um>S*Lfstv>g+{DxhmCOg7s_VXT?Nu6o$Zy7yiTU*x#4ju1Mi#@@xhjGS#d`=Znv5n!n2%b< z!=xEBUl}fu?qL`Oa{r*|6bCUu6bj@NPIC%O5R+%d>Lm!RTc@337@uxZA`ub{N;ay# zn6TbjNfdEzR!&qg2?dC0BbB96nBNhx`V)|M4esgs=7E8IYdSWzL?GX_Ze4CoeucEH zrF~RJLil)Z!=ZaO9vF#s?%GOUesO|*ZS&Z+Rs8ix6ZgYrG9r12h!9tBTBp+!)=dD8 z@j%Zs$6&TAWI%@&WiZW!j{<`8$|Q1`e4;}(!#F%1Cy7MHal%Pz!{nr~pjOAC7{m9D z=YFX>hLv$?Jr=A~Q5Tg|6BcIC90&74N>~S-Q|ts@`+>$C=iiDtR7;~#N|snL)>vOP zC=YvVE{k6A19~feNiuAbC6jVPFavH&0=Ktkq{XJZ+~-A>U5-s-le>*fl7C0sO%sho zKQVxqqzK8S2`LNNX<>K3B-ivvIZvQRDy?tw5IUWXl>!pZZT`y_S_Ii5Ly-08M_9hBU0T!ki;#8VTARlfzG0XtmTZCkuMv5#A2qJ;* zn;e+&H2Ir4Tjf+Jgmha9MhVI^+1WWrP3H51(bhjWozX=ql|M7-FGLYR_4Qv(3#<0= zvIyy35-Oi6te%s9JGu4}U6HoBkLJ`qTKaG+t+BQBLXmB}>=WYpqhk3{x&Ek_mKmO3 zeuO2@%F-q8xU%>NzePU?k#B#M4BdWRbHa+O;MfnxxAlK>6FDCPeyWGS1zi~ z&hku0JJ;6P($=Bz_|Mz0Zc}sfR#gx96FnxAqzYRvRcj*}yHmAzano3}v#TlIYEjns z;@uu*X><36wEFp;;r{mC!JgSOrmVXr-B_Cp0U?jR4K_mx>8%{nvwA0Pb^>i^5y5E~ znZwy95$*BvVF{|VVHgMokVprSrZO6<3D0CzIW$rsRa`kL1XYZKoE=*e z)fn(_8`;9ju)-ea-wWB*DsR+nOE=q9jtKvL*shW|>wcV}hg!1iszv-?(*ctl3vMX! zdP{dyuTLe+{9m&H1Nu;A3MWZ*cg`bA%dvJIgw5b`$xns4nO06k%mOV^%o82j!x}t0 z4OTNU9?`Nn1Exs*q)cXG1aUcbygUU(yng?Yuy)kI3ZP5HJc)hXA)8uaN4iyjSMt-F zZ$5oQZU`qpCL6KK(=y&GK!>0(lNoSCfX9q1*X5iA&XOh$7xGMV!^lp-`J8enLyF`H zqtP(YVLEKYaH=gBK$)DH)Myy10OCtI3?v2*0a>iNuY}Y%zvEvmYXqTNZi;Uov$bSx z5=YJ9%pC%t-(9(_&)R7THsrwvBDAyD3)N^yKJdE6B0c9IJP>_g@OV@qaX&#XQ)M#~ z9ofSy>2$`R#%kCdSxNYuj$ zhK=~NIxCq>QVH+Pf3~}!g(Jov4>{B-XC!FP)>_2(cD2G43;25z!h8}Z*WoNZ44bR#o7$=kp=2A&f1dG+ zY9N?=tFa?!wx+^1ex~$cDDjJ?-YRo4@8f4g)le}Zr6PTy8qv2}>>vJ9tl~n4gTicM zbde}j#gXT9ii>00#Kw^JYG`Gw$gN~%GRQQ^yQATPanhas^u3&ZzAhB4HET%%9FK<% zGs3va3-Gvc)v0kt7*&3OFe)0cm{ApvTXXS06qDP_)P)OCQfjT#uuv_iO|>uLViH-m zY98HWlBO-yZ7ZTOdlEJaqi<7bWIc37?)vV+&iP5vf2FlDT=D-kcAzLkIK0WplqVzM252qJpj0M z&DRG;Z(F(avOeF??fjY5!^zgDA=#f9UP-pXOy~ab?FR?4%Pwob;NT)KxO-o;b9HX* z)pa-WJ=hlQCL7?e;5V{}tKZ=CGFn2TnIZv2zgU8&tkW1KqW&n1PW!p6CFMxL)F}st zGlh(Y4bPw{RZaL2N)CjQp?bzW6_4jt7E>VzCRM6@4aV!!T$$w+&Qpc&Bq}wre4h{^ zVGHrEqNF2Ia;J(-Hh@o!jJLP3hCqrsCzr(8eA=<=Yr{7!Ti@yHtr;2ZANDjfFk~7o zx&mnr!Hf%J$aFH{L<)R684KAI58l1=K>JL8zi-b~*IaGPL>Yb!rqUWjr7lDz7xJ!C z#5kvS3DJ^a00^K1h)O_kUW^u{F)ocN5ur|TN^Gkejeh8#wi>bIs!}r++hkHI&4i}3 zC5IZ3BX_R5Qb`98hSH zd>0{S&EZoe&Z@3hXnpcZGHu=QXk@uE6f!1iH9CKg|4muB^+7gimE9NcTiB3uCKuLA z&Qe*(npuXtt$Pp#m~%VPj8iIYlmXdo)0_n@Mhpd1X*`it`E}16>TnkRbsCkQuzR*bXx@#z}j@sZ_?v$)Gr|-a|qs zNZZL=*(ofp%f@nd9#O{5jRpvxcfTpuIepHW3(z9_Chf>Sn3YJYxz<42@|esKryu2S zNw@fHs-;;VL6)^F$=9T#cER`0#?0B}%YZE9Hwkt25m*b22qVmcu194S47#3B>+Hoy zv{foM;gc;1IDSwr^iy34{RQcH6bDYzI%! zdOikDR>!5uB(#~dK`Z|=FwNTlTjwx4VKPZu<3ZjBkt_v~?s@@X(?G1?420H|phB!n znT6GC^+bo9#Ta-(MvKr{d7{G{nsK@k?l_&CBD6Z7p&J^S8uemi2^YQ3S$Y+T^q|yN zjunmVipuo4)Og%CtF|^$8U6-0tWhYWjN?;(qx&0og=-o9w@!ytwc!Gl+~NA0B^L62 zeV^SIFax*Sq1I5(kE^ssh0=h~lV<(j`&lMNB~zqXDK~3(U#l@I6=s-9(u_a!y`z4= z8C?YpDuva6rH{-B(w9K`?<&rrl_5)61`SZA#F_BiFa-!oN1+vr!Yi1;VhTn5l+}VJ zR#@kBCul)jEiRxfBxhtNq+0!?ov`~8l*^S$mgN)YCZ5dY=6EgoR#U=mxR~rxk>;Kk zn(vfofkdFPHJ=gO6&)IDisyQyZnHC*3q7N@_&p#I2^g-tStgeRVnFBgxXm|0`{;QY z)h#xL>FxsW`N9m62ijtGr1)n5YqUC*jFT#gco50LA|wkt5gm-gcQ}JaO{yuVf`k#g zXZ*xSLZMljTcz)jbNE3{L8DQl)~bP$Qd24wULRDL5I&Ma9=?)-qy}fbPm?q96ABeh za3_fqMxz;$r5%F$bedp+nABd}97cA|?A%VVp}0{TkFUeMv~)MpIENY_=>g)dDx!zj zp`F}0`x|i8Gp>kF(?z=Z8=go+9eRpeQ3T+0&MEGqzGzp815nn%+$G5X*=y zz$9d$ZxTwiqrE<&VS}&1*Wy;Xm&4xPF+;)I*4EP50$UDta-9&4L2?YZsIhxFXfX`K z;RBq3io~u91`9sr@(oZ!>}~9I`x>amQR^oI1BKDO8jZBgTPSQ@Rc!B6Y#JsmjA(A? zj_a-UqSHOsNUV5LM9Jb40*|5;mGX|oTqB(7pIQ)VuC1-J<=}Xy04*H5cN~LzVBAn_ zo{JmA#&cgXEb-D&$|LKVZ`{?}vi{NW_RE&%G|uGEReiZvHn+EBYJf{2k;_#ot=4F?Se*_}wzuBn zu1%$yu4~Hn4)Ei9u8R+|jjLJKwQ*I)<$cR<8S*wAig|BZ(lv7D`Aha*+rIw0OV-{t z>}Wz}ZF6ly$3Rv4UoP(aMsIbsB%9SFT`s57>A(*z^sk?Ff`FYR1JEnJSnHb*$M0F z`h!7Zf6klDrfP8i#2T&!!hYEQ7bG)A+8Xm>(b)p? zNmEm<@CA~ZtT&fi+_SeVHTs36<^`hlnqzjRqP5c5Qp1StLrW~i`)zYE#Z)ofMs%43 z=FSC0D%lAH?IRj!(o(Ro7Qn>V54Uf-k5H-mzciuAi2Y~4?xVQB3_$>XFZH!E&BC3u zKS4vnO@K&$1k%T|8Hg_YkGbpU<7b*B-$&PlI2+u=kvqseB-D}smmds~>qv@3Kc9m| z{I%r!!mkO2{}8kj9}w!&nIV$Lo>$}iaJ59LCLdKQwHi@zyp$u-ar=kD`5fhIa7LN^ zLp+zoBf@aFt~vs0G?{H{@@&c^{h+I(YuC=s=FFmveFJ@H4Lpo)dMUgSK`SLzi=7$B zM+m5cUN{W*Ls|==^bt-1Ncv$3T4Ej+H@DfGu(gY6B~a6}&~N50DH79&33}-(ue<_p z{L`OiH+=8`!uLXS|5}7EBx1td74VTgBzU-jV|ILp$MMI)fEYPEPVFx~Km(u=#=+0X zCUOlLp;4q52_SidBLFZ%K+%ARHk6Jx5*tP+0C{9w{961xE(S<^WD}nOuY;f6gGVK= zBAcKYH(ln`;)oT4iK#W^pO9DGgDu485jc0yO9fiCi>D2dm=H(?2@*sbh&N$j9vMG7 zj%RS%KKn~t@Kn6E_z8vy8H57O?r7VP{m)nErKkJhPyXi)gf>ZRgU^8%=^qgqLR&n| zMX!-bwLqg$O1(1WqY&zKLTusp<&Kqa*`}Bm(2ahgk#XosbRWF8$-IE>WGt$EYti!j zno1oU+0e`;B&u)0=X`_SmQ7oiHML$b>hA0SzZSBR;6q>yeGuKhR;+=QB8rPQhe%3w zT7i3S&9%#%!d%1`3Ec!T!r>62jEXA@XjiGD%U3pMQxX+@5Z$t{W!qp=f*dEyiUx0vq5Y2P!`>Yc?symQ5DKkr*K&@6v zWlD#`X7*Za%EzJYaXsSXab4-wy0^+8xG^WN7aRiXhj$_SVQv2|M(?{R{m=t!YR*`$*15iGv_s<<+?ll30 z@k|*7avu+%b%t<5_W{D8bepfIX|D&9W%i}qS?!Ay$^+y0(gWj!qujm-$F)hl&VX!i zv%h3&n@tAfeWL#?dE)TfSLAE1`1Rqgd~-bG4(JW;fU_#ZHjeR&w!8rbfg3o%;$z#F zs5H^U(3(5%KXaUa@x0M=%* zbtEzzYjU;av$IHK_M`uS_?H4q-?QZn{xSZ2{v`kKJb*!?2=JLRh{E?H3V%#WNF_0f z-pA4VRl<7}fvX*eGg|WRXRbqB^I?2`LcD_v7LeAxfJ`)j<-|K>mYb2COaA@SUAxfl zZii2TErQ&&h^v@T97>WDG7YYQuw;X@;-)KNuPOY!9Ew-q%HQIVS9qxgTY9(q>4SU# zyo=Y7+u;l31H#x+BFdR1LNpuz8Qv>;7*Y>QrE*z$Zy4`>uVuv;kPnYF%5Afg=GN^t zG++|EiT}_@7oE9WvYy_8JoNzbMIIA-kkp>c=R+sM;ZzG@YC-?IoCvAU1M zV@FEk6{=nxFKC&U$AvK+$EID-9@V*P07q9=h z&vyKGUw`dVJLc_0!gGz$!|6)6k-|^TdX6@;qx<)tn0Dv7Y=&BstOAx@&JpmUHq!F|BAyY&x=**^B*y* z;}}+r@||%ErwAsRIu$ThKqn-%qT7}36}Ph1T-++G-Hw5| zp=bDT)f?|O+}OlVHQdeR-$QReb>j_9ugvbK0&Ep5@NZwruLKkL?@|!k3GV0D z;lG{y+aQKBK(9XY34Dr*kPQQk8`G zhDznI3x?tgx?{z}zKV2Q9J8!E*GULtNFyOuVg@JF-tPX{H%9xtc859Kl#78IYH1)V zv{l*Y=4PqCZw2@y8dCZEJ%8Nr5P~L)mhnXhnlLfW)oZ05X<7>PP%3qXtyYsfs8%aX zP7}15?&h2dMOcpJ)_rn`)U!{ok1}DoJYv0-VWN@Jt|u#6w^K-+mAVAwikm3qV3`n0 z43!S6#VK6myrfbg>k=&^2^s3&8 zo_i!3OW4c*HPij(`AaX@(X?#!_=czIb60+~ZsVqlT5esBG!e@`1|Oj}BRq2iOWeT) zoX)T(n@wrdIMM^dcXJWS8o4`~v3j8AZYxJwq4g+GaWQi5n4{G4aF~$q zi^u)hTM5Ep+~@b#IB#`0YN{(T^~!&EBdOGOc;VBu4RbXnHFMj-|Bt#afsd-Z`o7P- zv#?PC-Pu~Ys3kn}{Lbccjmur}8Fy{?{!?w6UT9mk zux*Kz{1*jI7Z*9|mX2%PGSerPMklTsv*N}1Ui*c3=dK-(?4Kx_w5@H~y4efJ*;lq9 zJuOT8oL9u33ib330%5y$D7lj`O7sw3!bd!Fk|bq(6K%!G0Cj3hy;5eCQL_E4)ynYQ ze2U-Ax{=`WmAWilNJq&j9m5zY;{lct`@GdYwU^Qv^m>zHhe(vGG|}WvVA@90xj9&V zV~%K=#vD;LcT9T0q$!#FKH9vN+NRx`DN8&TecfrTWTI>=&7oyEBrh-Hzz4{M4kopy z7l{`z?JKRTrf%9$vua%R^un>E)NWNtM=J*ZSg^8m#Sc5g$K-4cWSlSGwHH}mMK%|D$jICNznlG{CSd|!YXCZJ|h$mZ53&Qd>wazk-h(+P^q zm&pVql8lBB$OV+(fLsiaEENhyE|rCPUqR!B<6jQ>KTYtjUMiWa8mc*h-M5K;y&xZ- z$%ule0~g6sL-X|D;O}>lATigQXV=s1YAVl7{rSp;0^T~M(ptcRN>BkQTmmV4jXwwW z>|6p-JUele7r_+I8$=W*EfgUmOz6C#5DtNERwzN4FS`k~WQRs$k?){xbY3xeoE_mQ zkg=365RlB17;hndBpO_e&-?n_|iWRMM{WK5($(etxO#Dyc%f#o2OJq*>+el z;|2{3!vtFLpwt$dJa({pa(l=mH<`11y;V?UP0%HZySp{kxH|`L+}*u#_r@A`cWdAP zjXN~%?soWacXv6s4*$fx5i>9IvUf%8sLG7WjHq1|E7wZrf$Lo%AiI{A^7@5Uksn06 zv=%ebx8-|zdu;u;_rZm}$Y$+R>9y5rRM?X2tCEid{P32&JmT|3#8rH;$HQ}${*d(k z;81w7Rv&}z$J`+k)}3S+iY2!yNf2g*?N|`w9v#LLoKGkqE=w1lv=YjOw=!ZIDi$>a zb9GwY1cXvs+)j-Yy0qmTDl^Z5r{R&z%G#+Xoadm7dX zOH&3?Nhpk`i=p$V@VQXYEuN-ggh2eE@cL_T+hbE{^nz1|%+d5d z^Yg0ugR`aOg=}l{R6N_8w=wgo-^DD@%MppV{w9uc^ub??ilfzr_u#Tb7y56nKXf(E zwU-h!gwjep5ct=vQZI+;CT$l79f2P_564T=`aY;fD|*728OWm@mTsJLVlAM%)Fvtu!w!%!I82NE<7Pet zTEg$QR`y33{AiQ~w2oSuX&||4&G|TSU1j$?lJB}%?J_OG?@!TK{pM7k&8~B0uddQk zGhQo2WrjoLYqr~16>ysDl??gTi|FYq)ILXwe3P@A2gp zwN1m3*KRussVvwri3r1zSln(>UnsZCp;Ahne$OFJiZKMkRa*T;tnqJ}tcU zp(Ein@l3K3)mhI+H_ggu>(3QfuguOg&B?{>cigTYY1Q)cyWIv<0b9GLzE20#+g;|D zOQSQdp;KKv##OiasErIqGaJ7*nZ1U-FgtKICm{0Vhbjzq7NtqAMtfjRS}bVgsz!2a z(fvBRSIGi8O!tpZ%qIW*%U_0eO(!5aIQMgmH~>&Gw2eQ)ez}vYTFS5H?B0tSqV>!>>idY8MnMbtN0CQao^L zs9OlPh;)3+5l)L`x&Gzw6wUILfF};dlcnY%_(fS6&vEilrdiL~pxAK0WFT8|r zes8y7@i_O(py_~;+3}tXl4dA-Rc|=E8sD!!2|Mu(?dq~}&RtLQi*qOnq7(}3Eq|Hx zznCRZw&>;i;tCgoSRm&*-V6@}>XV3P4#<33N4%seIX-T4YcR%-`o|83{?77?|@WFJKdGwLw0$ zPn}sr{f=am2-W8&n5(dVvwtW~Zi3}7J;hz#EI?ucR+>X~f!Q2QKg2Da9`D5>kac0B zmCt&wKAf9W_y(sHCi@&Xro#Ff9nSZdIAX((&f zI_;*few-ZLgBTp&L-;Y7*X*`-c_~{UtG||Bli2|=1m%3KOYXsjsbo5CBZin`t-@5P z%^>*&pmNG*dey%^so#ih)*GZC{b4I_47 z?P8aTbS2oaW%_|`L{98sBR_yPq_bjSQ0_|sgMdyR_z!Q%T4d4$I-qYYqOE;@`xGJ= zF5zzyC+@?s@W&no;W-~-F9yT4`Cq6n`18HA7SacCFuZLn{I6D9ynVwF75=Wxd~gPujXsBReYpnu}|Dr zHR^B1`|@yW7<<6;=N9;+{@qXg>xA&=OzUtPkiS0Fy57|aAlpC9DqG%u@tn_bYqNq8 z>_vkmh>8E*z(Pqe@u-%(SLxW_5#%pf#RKJ66QOlh})C6IxL|)J}(g~k{~!M z8UH}4eSBFNf|$BPQ1c=Ax2l%iArjEflIdmrdnu@7_qJ8@Ytb+Z-zD z=UkWBp;p$?4H)UNM~-ACEp3v&`EXM^Lwtl)7%BRrQEx0mO zPTq*QOmgN_t;|!q4%S$jTw)gT^MhbQB;n8KOT*u{p^DVEE-9rC+q8^Zk4i7!vKQA2 zvDWhJ5cwBf#Er5m8P)zK_qD>l{5Lxj z(_T_q+C)Q0sxI0Sf1Wj)-8X~pKfS_Id`Hyn&M+W|Wdv_aqSwFk{&uHScf9V)u%ei` z;zQw6cwsUKD~Q*B?5zXHmr25n|Hr&5+hWJXGxR__xZetr@Fdw-`G$YPajM|l%1&4{ z$8eXQxF0C9-O^K|=k9d~fAvYP+U&8ns%a539Dg25Xw8QC>xas9VN?_uO|GI~=CXKq z8X(0B{$=|o*}od6%Max;TIu}9-^6Nmay4jc8vNB-dC}{t;ZR{p5uFTmn)(0!v>8&| zdDCF^zg9<#Tv}>n`5PpZDQngZ(Z_PyHJZab&>qA`+w8$r%a=yn<2CrX`#>1b;X(MH zAhc-7@o-%eS`E>SU%6>##6!OjS~DWLpclQkpSwMpR(x*(cSse=`7&t)wy@?p8t)5W;8R!!kq+Q~#nt+Abjfvv)lYzhczmCt%+u*-o?m*U%u;WfH%HX2#{ zhRc6@0?DL3*%Q$5o&Izu_hD~NLsxqZNb98XHGbk1eu!K3thu(t%`ukvYG$Kk!!=l$ zA!|@@$=XSbJ=8z{cHI{`p%Fmb5X_f6vKc**jO_$aTe6`SG9as3q+KLfCGQ`4j$jJG z??wW#BZ<;QO}V=+Ml4vx)^APf73tP$5hX}p1E48YmM+6&B$6d4^{*q}TmE8lR_oqm_ueGBz49Ca(#Rmor=amLe}(<#B=tAe&ddEzu^4 zjZWhtxB44>=d13UvU85QnFSMN1~ABs|L~|bc-RC@)v_{Y^JTp$E_D!-y$n@7ZDYz0 zRlTIw>{c8UUTrcpX-+v<8)+JKmAKpif1g}E`+A`xF6q%L0kI0UMgxvc#CFRi| z`XZmrLNtl91b9+~o))$$+q1xSmsfx4swtcVn_C<5QAFf-`(Eo{K2iT*M5A(7><$NJ z*i{QOS@=B>JkdO{KUD8YNB+TA5xw;c{`N!0T|5;GLm>=@u#2Qh7)L4S$E&I2PwoX_ z^rcFTlz`O_>4j;S4O^Qtq-%hz?%bG-{ z%LTdU=v$xL^=Z(2%1SxyQJ-Djjuv`Jp80HJO{wWVZ7}Nfsd_o>7=_;ZKG}7O@}Ax7 z9u>L7ld5l5+<1uEGGZ;6T#Nm-UbtREwxDz~V(v)Cne8%3V{MsoKbB>5`o4S?)%B7z zmYUdIrfypGrafUI)~S(jo`BNh5Np50!RyBdILD9>-Z!OVL4ECSW7a-tnJLFB=<;D5 zDC@JNfO7bUglmAVVUo|g+T_;2)W|?hqqM;ABV9H@czu)Px~!31!UQ0jk7)`c zLm{UzBmFN?g$SyV2I}JlVUzkKg%YW_1hO!6Yl2NSFpjR14JhUg(DkE_#@fT7c@zk` z&e{0Z4W#$c&S=u`T0n`D{oVjOjnBf@^clq|U*LY)Pnh6&krhk-dde%)gH@Z<^W6{V zZ^*oJtBWc2PqkHE25H9srl^G4U*7)*Kc8aABYV|;)|#_Oe+OuH@nLJX1~-cLD*!dL z;g-?6{U?t_o!NH&z9` zmaLv~;5qfodZjG!#W}>QtCbDNMJP~#=_Pt8A#t~cu4=h`N8Y#StxcsjhI(3Xxan+x zap8t=v%TCSHjcaQbXz1!ZcYzI$44HttFpYh5sBZF#Rn&7Hig>72W70_koS%kPHMXk_D5@iCVhsJ8_Sh@q;98hXca?io;=Z2gLgl7fv${tq& z4OP~E7+f3%APMyuV|NvI$c?hEG|FIFz-rFG$?8L)Tzzw?6?ghxkp zzC-vt3JaS^TfLr!S6xvXIoUcn+S`}g|6}gB-Yl$DsMKk%1&1W`X6BLc`M#Bw((E$a zdKwEMxWBXhW9^>K_lGMkOJO*jQKO(glcDBH|TE=DNOCYh+o7!MJ9_$*cu_woFhe#mihseX(dTj-7pq63UQ({Geqk zSTvkJ8+tIxdWalaSM#PyYdwBvJN@@ZM3V=T6_pe4vZEt?=qf$zmLV6rD(pEIy)arvkJm6aA|XwJCGULMm!q7$=MUyJ7rwGpQ9DgS_RbhA7|IQ z`XPSTI9?Y4bDfiLdXI+!S8o>1p;vT4yEB`?i@M0|Di)cz+GIfwXB>mxeguV~!3!`+ zXJUwX=WudLgeaDo^HE3*0-y`UB(km63O}J z54&6WBX3xTTNtnq!JjM=2BMlD}|`}fuVUw*$X@x!blkSu4fCq8%l+B}D^LHq7%emoHFh0`xnNi9kk$I zFt>s`93w~l?=f1!=#~;4Nao%F$%OUaSFg+Glp8!rD}JR~#hSm^KYW(a5TW%L0D8HwSTzuhOC zTy{GDRZpQvwJ6LelsTOJ;h-MH!wG59%TZ8clpV}be`oeguwCbLQoPtZk8HNVrj5bT za#pFDe>6y9kjIP5ZEeP~SrS}E&g)aP4@|GgLDhqiVjm}k3qc7<=@ZXDEU@?#A%1&f zf`-t&-8{E9)~c1_Y=l3~ihPw~{BRycLC$X@h!rDrNlXc5O7_tbCghEb#-CTx;Vamw z3)@iM@N9bxtu>cPeT*uW8eTgl%iW!JP&osU7?WHs#a(d1g-L(+SGo$dpVtssmZGX~+SW*Pu=PRD z^foP%ZtO5roCVH(NbC}ETso|e1qTcJ550-D>Dbc}yZ7?Z72R2U&*u)o;V-yfs>M`Qc_wz8B4cId!$ygv+uu73(3MIu$Gf2iM+4G0U$?F^)rLkkN|XgggMBBj9ldLaxU<{m1K zY!(8`pgf(Mn=x#`eh3q|vtbw$xOf@qIO;&-B=<0CzX-p{WLKBZV}&c1WPa`XV_%w~UbrnW7RyiBgI^ySOb{vbdAx0Of## zdRMuh_kO5$4;387s4YI9SAwI!puu}CBJ9Ul%KucPlC3|4 z_Hjr=B`phwBgPGeKwKfwy4$fURyWfD&^ePrrjTm z4JfuC>^D9(yt3~^QFx{h`c>>hnoiuI$OB>3*rB!FX|*eXOO{|LTT^*3O!M_r`0Z`- zacg*ZL1$7ehWpg0%MbPS?1jUOy;QxrNS_YKuE{I((g)6g+@Y(8yjhs1fh{f>h?XXte*sGyJjvU* z8{?LNdh27IT`lOmA4lnMp)CZSyo0)fc&Ar_gcRgF1^&YRX#Vj3EjtGl3ig`OXF=f@ z_X>y^(a2IGQepHU(}~eh!gQ;Nge+6X0_cV0#*Ix+FHq9%cGdkY*Kw9cn-t9jgL98B z29ebvB!WDIo<~H9n|@E2ks|~rP+zXa9|G|beQ!PA_|}1>ZAjDUNZu!WW@_^Oy?LOi z{l3cn!qE7Ptcb8B&@Sy`X-%g3l2#(+Em!x0#3@l)yB1R3Yw}j#)B^PuUBRr|aAL0K z)1w>buk{qJv@Fi>CEUDdP$0DHIoLo{sud;Al?GB&WrK;m$ z9L^8=$pg#HWM)o-2?Vp=E2HfzTHisO=H6ksg?pat0mi{J-oaR;1Fl!#J%geO1sNx# z*B40@hmmVTjb8b_hhRWxGq%z35bgGhy8L$LLE4)^@>zZqA<*+Q3&#i3b#ZHd82HoF zsJAe!iuu-#Zl@}jx=yBH{>n{yBf3ZRA|%4r)=*EQMeoS`i}4gwR7>}+=16adHU=4p z%1Ema?4=@~rrrU&MNt)+b1bMB`Gb_PVdb2k`kzW@g|sIUPQ8|8;9m=vX>tr5LOmKh zyQWy&k2$B=lUDnTyzuW729CP8^6BD10pcGl57KugaP1_i8Th4hL|W>2@jo$COKr!s z;M^L+2bCL|iG)eb~nIEE6!)hW|EyVcp$8~R``fS>s zEdjfFeOSQi2H-fZecOYngZ{xwsnbF@=FrOVLP@JK8>`8iD9Q9{DXLJ9!eu zsyewB6Rou3z!s|>6Kv?5I}seC?;!3jYVxNI9aP&%2o1+Nx^B^{_&a-J^>r4O?0^3G zoq-x0P`Dflt_`f?t81At99@UOuNfjb;5)F0uP86Au%DKDTuZ*c<)qf89y_rsok=}d zR&}&E9p;^R;Za*Ix}{bZdehF)-?~y4g*+0rb$Lw)x^dVw^aqAk4wEr3-j$=%o3dur+EhzJio<8&YAs3oRNs6OI|m!|Ni7erp{_691EeH3D@M`YpI#>eKMM z6*0Pndoau9f#OAxhp4LOq24}+9ZOkeorjhp6XUjzv)-ImDP!wN&`WOV0uQ><$2g+) zceGP6$!gC5+<#1KRl(hgOJ`YS+j4~zpFWlp&mkqirBK98;xiFVg*mfmDV;d56U z?*o)t1*1CQ;@V*a+)2STY>W>o-xco(AKb}D-Z3WZrFX)#-D4mp(5IzSm6E!_m0o_m z`k^VSK-MSh=zrE}s@Gx(G$FP*-4s^m6ineTS*?d%010(=&l7YfS(&VlZ%_@&{MAtkNjlcg2ikcR2&l-s`qXabYJZXD>raX{Dh2$4K&yFXx5&q~Q8c&HY zj-XB<8P-D~(r>a;?XMFTXF_d=YmwB+hdZJ?DcDf{QIizcz9>6Erqks6=9M`B?|N>D zsHt>B*wpjB&{fM)qDf0+J1q<@oEtjWRLR9WpyN4&QzvT2f6xtWP2nE%+!L$mu=;w4 z>MN(qjTXYJ=2ofyYq`sU^#8G~vi3xACtvZ;Ml354zwW6(gJ{7Er))3Qh7%vnB|FrV z4qY4J6MaR{x=;KVeko!g`FA0TT}$!&OG%2?#*MD$+40pN* z^HcnewiAGsSd6PJP)GM$*Z|LwMo(KwT+1>de7k(l8K$w@@$ zj2xZ7J(=E}qExeQgXZH~ zv~Sa;qi0D)zF)CS6SZiPy9;Z3*)@O@n<+#|io2tLxu-A)-p3JL%cNWvZeS}#Unf64 zTM`dQz=fWI7;ZJc*O03J?cOe-C6&`l9H|2|@xnkmS>XHMXnG!`CdgW+1@vLK0Ev%*`_+4-r*U_StejwfN#%GV^*gKcX#` z@JA~)r_s@(!NK~in4q;Pe!fV#LPrJtJ5GucFIqyYEA)q$3Z>%Cx|y10BIEA4HkCUQ zSkE%v$Jeq_bX5V}adJMZnzFb>IP2;5cURx9n=A@L6H{i!i6v~I)!^Wt3GA%sGilWB z=Hd<1>G#KRvykO;)Wu+Tr7q2a5DhF?-!hFVgR8<5G2>BO6g~7;@`Zc^rRnNuKN3-Y zxHV?DZ)M{4Wv1_Cd;NDqDo!Gu%Lxn+!FHU>h1CHpNDB&G-D~sY{dVC7`E@sy1~Ce~ z__V@K@{vzaT%(`L$xhE!fxP6_{dzA4iNpT$&#_L|I4cGoHJ9)CGr2fp+ji!N=`yh| zEU7Z2>}hH0dc{@JEa-OxWT1QCj}Pod%=5FWXdFZ zJtY>R*OxVEXJy+?TYkq2gfU;}h8^uI2&?$q>}JoGs0 zy^*=XAe5+#C=8S?5()m#h_Q>nPJ$hvrARu&cz6v+##d?cAA>D}3C4amJ!0JFg{1cMs@27ZHfs1s&x^w-qDrZHzB-xaYTw()dRg`c2~R=2l3J$m z_|Wy-ReD^{nhD{k>C3)c(8vq_2h1vPBJv*4s=_7&b83tz^tULjD70CQO}a}6fiJjL!j>-+p&NqBgEbLvkkdc0hVslt9rjawgb1>=V>JRdJIwOi=@D{M9Q(j!{7nF5?Buco5SHp^6NFO5{|BsrG7` zWt{wBusQxW-fTB>q9SiG7PuEcYz}io0jsI;#11Sl+0U!`C7$Kl2j z`Qzt-jbj!MZ22GPk3RiYQ^wa(NN1;t)96a_I@h~zu*lkh7vjbgd;(>@r@}HlVb+$^ zKgtWN-4Z0tMdu*#-f=UrM!yajIp#<(%>rIyFsOqj+-bN!-` zo!^=M)nm2i1!1zu&g)gcb>HZ;gvixkx$o0`8~@?Oa_+Df7gq~BwnX8^qg`q z4yPIp=iC3qjVFlM;E1#jvP#Z(rT=iy`+GA$y{+V0RnaSBb^ZdBjPUki2hskdev<%wtAtE*T& zM^|&2PQmtp&ozxb5jGAH^^F%5cd&>Ox3IclWHsrR+TQzJa6i4+$7GC_@EvP$aRV~E z`drEKhS{2k2t&Zi_N%&O2J>6#2;O8S57EhAJa0=-o8M>f$un%27tOCUr;omf$_(4) zSv8A!x}#-w^<3ZI{qt|85EV*#YWJu5_^gDqX;}zHvZaz8PB;@CKI5r`*ynpiH@BD; zFO%Pqq-(5)$)xcGtZcueco%Tm{_3 zvTo-Y^qO#f&?16oR>a1=aABcd0)+*bU+2Ih`gy{6_jzSRI8>pz%!Y!7Iz@^TdB5zA zylRoB$IV#(@OnPDy-oVIYYZWH;%O!zeZ)aa&E7L%&=zlRPI4hJ1EU6aQB zd3-Ka_uYDOXa7Ca|EU-zZNEZE(Y%{z)L7yA09gC8GO^iVeb-mp3|iI#Sb0xT@19J3 zAR`;flf>5Lgd-U3RGNl)X{=KEQHs=5X*@8BG`cS#nFA*$# zzvOtNpN{{`qhd{dbouzUd9rzhYftDtcicbI5=Tk^?qBY7Nf{{~w%apiTGxBZ!_Ecj z2;Pjz;w!x@>}Rw7@fAHKqfih1)UwIGEiLaW-&*ipZ7H3~dKhiY!;fQqk($}Qi$5ui zmXE&5G|6_ER&YOb=gjMJo)61oCDeA+AM5ypAbhz>(lu-l{*u@{*FLh(b+f-zFXoiX zme0#;@!#xzMn3A%;VC~SMm}T$wEoxj&v7S8QZmL-|6I@4I_mnQ{@3X&`o~9o6+->5 z72JV+rBUVd99@qRU$N(cTjz8^Re#s#)`PQ*PcV|jP&2MFP~FJrW@o&P@hBm&CasHc zOLrwB1^DJy)Nfc

    ?$zNgWW<={XZonO^(b^uA)jPP?c3MRAK{i*ieD%V-OoF+=;K ztfKyOf%|Mp@Hp=*p#PKkGmjO`@C~#&Wf#!yc+tMLw1J%nwFL9w{(gE-%gbfJ@sZ4G zJlk`VuQc`C!nalO+HoRjUt6W{}m$quM{ zo-Cd%-cxLQnH|XZsQ>MA51-*@6Js?ok-^&aR#OfB;?}i0jm|TCp3%JWYq#$>W*r}P zShBZU{X*(6uU&3DEH^tj$~(L!RAv~yA9I`4AR2+so8)WWZy(++9-RW--S$Kto2LDI zH#X0N+x=JW(G5RU6kVqBv()>z`=sri9pt z{Xd$@*u%BYyGWJ>q~$TX+N3cmiUoRIcRmeF{{+3Wb@6m_D;JsMtCn#&CtS72!f@L! zIVYN{UOk%U?u&G_R_t}TCeWG}4b9VYJgnM#Vhm3lIVK#ncKsKb^o8YZ@?hOykvE*O zErM2r!Yp;oJ+APl>IbE~drZ?0s)Ui;e0t2%9dsWr?28}08>;H-F3~6JLlhtVP1AE` znNL1gcuIe8PB`+EY-2T?W5(keIHiM^XJ_ViqR0glfN}Lf4XQlOJmYX6DP7R1*|vS^ z*IcOoSN}@y3LP zzTD&0Pb-tbRnQ{(Ga{jRvWuY~QB|97MmSk(==q*lzgbT2=M&bB@SbwWU%=j`$Amm1 ziRKHUHiTJ=So?E>(aWKL^$;CEN*>n@+ z6H>hn>z%oj#%Ylby({aNC;9Z5=;9W%N+>#1jnlOh;C-)7YSH3i7U;Bs5fWyU_6}uG zJtZ*NSfwz*w#XG(-_jFXjdZ{^AvI%M_LU(X6O10Ze#@42<0(|e0z2CiA?6S;{o1Z+ z`hXet{f2677k1=pp6FpH-~(mEWNu*(ssBLF*B#DQpV(q*Tg3`BgAgKh%bx^-G{Yx2 z(+zPE)b{Ej-?7>!n9jwp5EY8s(bB8ep>ecyr(Z?cWcy8wl03%Gs2_WLtq@uNjgDKb zd~@Auc=`NkX-+5P;E9DpYv6rZ^5dGjrqp9%FQ>5vZTusrL^9qC<0I~FII=oO-;&lj z+rK|Q=@Q09$u8DJL{^ne?`hIxJtpxT!`tMZM+FUT*6J*q~xyLqS2yd}{dJno1;?t2>U;uIj+x zjQ~m=J+Cc}qalj0G|QxPW{_G!D;C9?$5WHXZhof0AjZ3dI`CUU0FG9;Sv_cf{hMy# z(%%-B7b2hCx8=@-yYor( zVv#op@H&7KgCedAAf#3MV@krEXMl3H{@QGUf>X3%ez9c9nbLoP&7dG4!8yH`Z&c$wuQtX!Ae&J`M-< zRu)o43F73{ENel$IQWzu>j}YX4y>8oo#7I5v6u*~{3npgdnb3_;i?y)j2jkP&w*~f zU?Bo)XE9}#@NlP<-)tX4~1s7FP#k_?is%OP0yN^pT@M0e?ozYG|Xw8`|d6xByJ}CXQs)-}ER66Pmd|Vc&OTWbC4c2RaIvWl=zzi zhZ4nnSu(cFs$Soa7H{>LeFO2r$#&Xd;1P|k1(K}w>5T9dLL1vlehTVjpbRPE>)V~_ zi?53+tU_Wt*YONu4*hc`v6zHl5>HZbD}$wo<*{~{@$$22bRs17b zg*=R49*vd|g9qC?io=WtOX4=h3Pod-<-zc+TtdB(TW#7JEN;>N42y9valf&jMh4W^UFkt!%fW?dDJNh`5tc0 z`hb-pSnfNUP}Y1Z_`iIkS2y!z$Ps#{&OL=~JVfk5x)GBbqEmMKyE_P!F7aGWVJ<&$ zqG-HOOqX$YVE)@(#0(HC4tqf7U?4=|0f(yyyij8c9u?@Zt&6@}wTLFqNyv3*)n9+$rmPv)Gf7eaOL5HHe(3Gl z!NCEX#jFngX(BuRhqtvX7>3rqRCm``UmAmwHS1s z$>oZ5pm}1Ij4Q~KKp-Qbj^>9#FOj>VZf=u_+WDCbqZ-SeUn8uIF;*_@Y}rAdl4nHN z^lf@Owv%ZLRTA#7R3iiu>tiGxpB0X7XYLtIT6|Vcz*8eQFH5l?=srl zdI$ku7_0QYR$3gb1>9NRWfT|2_NX(e2M})Q%Q8+v-_dXgs>30k^6ww6Us?fpWW`zaScUyD3r-xNK}uPs%8ymV zV=;XVL#@N88aq|9j2Uq3#v6LEYJhhIm!y zxHEn3I5T{SiM-sktKpHSGk%Fbu>!qI^zc__3N2=-o;4EnoT4sHi0RTSA#$TXWp|)o z_NKC*{wBL$fA=x8W#}l>a}Ym_bC#c9RYagu3xE`W4|$}v-H8RLg$L;ef$w|ypnz+EVBu|F zR%d@4fCwV62O0QPJsJQ7G=>I!A_4?Rdg1%C8yZ?EVbQ<47h>^JwpGF-LwB~+Nt*$cKeNS`wh~W zG%>ke-ZqU^PT)XSE!%*lX#%obyjyOSnpcK*Z1h(fHh>HYgbsN$66A&i_=Exk2$EP$ zcO6B6MYrGBoIm)Th0%b|wZ)|5r2vBwJGt0Iw4&ZA|rh~w> zLEuj_c!{75B$i_=)}JjD+D`b4fncd^UuI`VI1n%NkwB0ey0bqPKm;0S3<9y5-}c3J-h>B!rCUgE8$3V+5|{@C`h)`- zLxE_6z+X!Y>HI+eK$p#!NGWa=l$IO)viEzt6BWPNRNYFwr9|CZ% z*IUH78y`Rh3z~*FB7-_IhCJGWIP&+X-T(P0i@oyRdk1O5?xUgy4Xg}uLjYVsfm)!B zY9WrCAdj$npEb9AzY+%;_%&8^r={NTN#y~FYz$k120tpeQvv57Zr0R0rV&PmB`svu z^%-v4m(kfD`ZDNHadqmIukWIExTK7U+)D22p|J|l5M|H2n51^Q391$$un5A$X2dg%vzkI z(GR1^y)Ng>ns{W~8G6V-fz((#^k1Mmq_vj2T-iI6jRr0=Sk2H!x2^cb(I()R@%LHl zBlevdA`ZwJr1u{~X%GB&ia3k_#R}M)YKMqUjPjwLscHR$7Ae>I2Mjyn)O5Z@=NOr@ z3`pbO3d($C^{PnH(&>yd(iygr(iuPH+YL_AcE=M_|0yOVH*=IPXi;A@I;5@IBbIN3 z`!)-)T-1L{ajeftc5IHBCH3iUToTs(y)G=zZ@NYPt?BCLq<^AFM!AQtcNaA^b;rAv z1~J3Ce?Z69)m5onnDNL#?e@mJe*i8^gGKL^-Q)8cbf+mNL$^`=@W}dtO+4S;<5hSQ zXT_jK+mf_)EobE}_{4JLhdWbXJkmL#Ly-SMpT-e=7h0z~tUh|Vd1>q=>%x-LM!U8Arzp~XkkcWNx#cK zZ;My|NG&iZEt7Ab!%OiA;3e+k=^3}V6vi{B=dMnU;gttX|Ev?uze}L3 z4M^^+L~Z)vuIRq)7coeZys&8J#+D5(t;%#Zm=^xefyc6;M?p$ax&2E5>S5_r5u;pc zlc)UDTyJcGz21^(ywv@%f}`LBe81z-B=z;*KJ^2Z(673^U2pDbJ)Z3Jj6Plxqd{@5 z!r0Bc-A0JMer>7xxt(6YR`>63$M>BO0ct^lXq|jYgy^C(g(a86$buT=pWpe4k%Ad+ zG!B@P=>Sw@pHcT_u~f)t#qFiiP@{70?g{#kauv~kZHS~5N9<4|s;mrynMRw1MJ>f$ z^FpN@iKZ3Nic3pJ`rKS`Ic_lD*}LGk5{}chsm8;0cl&mGf0F-Y2)3ma45HI)G>S8R zw~RSm@HISsFa-71JZ@E_MIIUJ~ zZ4rj)$&jO;DlL`Q8{fguu)-A>eq-wWh_zaJe&K4C@+=EJt>8aIN5R9vtu0iVrqCJD zVSi=kSL7C8kI>W6F)%Pt)pTDq!6sq2-~bVJTDro?44B}PpoMT%O!8nz{uP2)9j&35 z`cJ*s1qiSv*-9QH5saBLpE(<^xrsgczD0A{%R^gf$$03DfVSlJGhydV^e{>U5Tr6i zj=_dN$VNE$YvM14BZ-aqfbfHjkrVGKM2IZqrYqFJuQV4;9qykR20F*i>=A3*NvOZW zWm_Rb1m%8EXJ++L_m{dL5;3u0*0)KNVET0iwHEPDQH$|pEH_jU{`bPf;X=Gd9iuo2 zB8ILz4V>W{pkc9edpB^pewGE@t)AmK0e3dnrl)Acc(Q-)G1hVu+KWx_XDhbOU=wt? z(BnpBbq$&iEW2S;sIk6d#B3(53+AC}rD*gL+#Gw;&v?Uz8`Pw-$@cj=`uwg0uJ$)(#Lusn1 ziX24HFC8G%Pwy!z-0CfRbyPjsrATeMXrQ(u8O*Vgr1Pp~i0%*O`Gq39xw1ZH9jV{_ zI_+^KM|Y+vF!(dbrXw+58+NSjosHi3$>3(C`E-a$FZ)Z!3*CEvYKe9Uu;SQRTlnhH z$v-0n<$jL}EGSc=lUMvHLzZ`YI;W-t?`BF?ZjTZQpQ+BW)veUA{R<^fb(OCH<+?&o zwJD*nv$mqY97*ZuhbFb5RHfO!ad?IsO-)oatA_DB@&8st&73w`YHe}j4zj(_w}wh{ zlD9QxHRjF;wGLiG!t-i4NDcnmg4@G;euDqUQTl4mQ07FjBC|WETwJtX+@5Ga6!ikO%)BHOq6e3ClB|#yE82-g9tU--h7c-3JKdQJUqDVw!Bp zM2dZw${n|0eVA77yKF6}$nOmw)9Bmfk@3^hN+$-KZfN0gk2=6_9J>lK92|VOd*4`R z7RW-mN~s50Y5#NGWg$p|6*$@_@@H_CVp~SOvpC`b_yzS?lk#IDAz!dqmSUTPO!K39 zX*x8jmbOfxEl z*uUc{9(xnfgjdh+1#+pROO~P*Eqtnz%w2gbRtsRtq0xODD%98N?__zTl4j)z z`%0YNn!pYs+cAlZ_L_z6VUQT^n6)34g4 z(wv1(hJhdvYj|=&p+a?>)B}Iv}i4DKV?1bdrKuW#%+Fs=$pN&lz8M zL+%-;?le2_9;jOtk?Kmwq&oIcFQ@+R=#%pE#$0f!f{w6K7iBeJ)#iJV_rGO%^&SX<;8F7rFAsKoXuh!zDB4?Zcs6z1sSTwDt-6$UT*a;umBX3+ zBJLtjQH>JIq(zzB{l9q%E`LiQU7>%I!dMA+D;;W%YvyR?NE!}7vV>WLSp*O(SI{W` zFW%k)s;ww$7i^1rf#UAPCAhY@Q{3I1;_k)WDFi4*in~LA;ts*RxVvj!+W)=z|2Oky zy;*B!O_HTgF;fD1gJE7|nq6(?=Nd8TkAZ#%F2iNq92N z(=+19mmLwwk{qbfeU&}$Tk=z7g zV{b~_JnEBL5uK$SZ7vV&@Zj1*U7=0&PUeJ( z9C3GL-2%8t4`SD-#;a=)F>WN6ZdXf#+?y6WVj_oEV@`^Rv7n+L0>6utZ_BIi3{qnP zrNC+J@C<43ur%p9?d;UmrYNn|5@fttvHln(}qPAJ2^Av~<5wu4^0J^V!WH&^wo+6G4msj77fqI@hJ*%~!rR zCcF1J4kLO|E5d6FawYg0-?9=6sOp~=Tdt61EG5|gdL2ZpJ~v*V1&(j<}FgOqYcryIuZbCtj#D?iez;>(#>^*JB+ z8`w&?hU>e)rl^A!6MweU5JI#RD-~%&MoJoj2O4cfsdUe0wWuB5hs%jgugk(3VtKFHjgWl{5Yxz~w4a+ape%0>{zincVv7UncAD$}XQ2S|zNqq^b z2xI0^pK(H>o{S79UBAv+-?fB!Y4aQz(^K)n0QGyN1T$B0EWoMNaNeIfznxgx)<>y* z&pHVNKRV^;qVhZB}QKQuuxhsLm__=bj5u0bb7W!)dzBOj3<84K*WPd$NZfW`f zx_cXs0j*{ke&nrle3sV=w}mN7(z}jNcSRb-^(h*vs?+m(Uy(`g-lH6H(X)K^bJXyP z@FET#;7VQnHNQ`v#?18?>*=-e6^Rr>^6IsxN{!7tjudSCrOKGAJnf{LhjsSPTEeL^ zT)fLK7A;lPw&FAlj&=g!Rg{vw>%GYrNxvw?>6glRrz+Y89`$6J&ZC>b;DNdH9dW~; z--3;|wZ@tXQCVMmV#Wh>b0M$K4s%`iZRx%{Y%o=5ZZiy z4-rNcqn@S~+y&09MnZf?2fN{D(^%7L(^S)3(|A+AW@f4UgGz_6&c=tdz>=A2#$R;T z^zbGj+sNtsQiXY}pj7cIF zZLK}C^rdsF;GSD-$CbrX9Wrj^U(B%$7^OL(I=qPD^Y94DW z-ME*tCq*DW|{-Rs0 zwDGs87`*z-{LHm3!S)8=OeoIQgQ3B442AXh$Ms-N2aDWm-W9c)jSc>h0^N^ML0N4A z(;8!$4Ev%)a5Yjq947L<@S_qrJQ#-&G$zU$;03PO44fd^S` z5**c^@+}XV@jtdwbi|1Ac|IE%Yiplee2yo2VvAQ0org0k&gW5aS-A^7gX^ei%hycI z_;}Sjr>^`ZRV@nQuf;$U75uSSrT<|M6BEY8=MtMORfW2n$`|Dao&2L3t2OsHVowwZCj7_KE!qBn@`YE^pi#qOaMy*cf z1l0#!ki>`^gSJ#GLP?ZA{!Dqo5$NNHE3ZY5dhz6Bk2&A|NKGG7fR{*+s82c-ll3UU zucZGfV8LF*kU#I89t}~=)8ty~#wcLCeifpq@cR1B_8GSS^U({H;-681>^)2&xbI=A z3%q$>ks(OMPP@dkDC~}S22y=axMh#_YeeDNZ2l-yk0gCqzR@>{X_9q;3`WFKPBEolj ztu-!D3xbXB4r(Ixp<8`T)UoWE{oc_n<N3|3asq;k?<4zAecw?o~DdA~ERDdwW}tXPOb=mo?E} zi?V=fH|gw-X&|d!SJt(Da||zTPuG^|Rx6NT1b#d`e52d816Ckxb2v(q<2-hEFlC}V z?lL{&%~k^}+Sy&IOZTFA8aKx3D+M^ZQrW_cto}w<2|ys4D5^zSByL1R=;m+ywkmTs z(9KB4_^I-u^Fz)EZr#pkI9^10^~mC^^c;MGGx1D&I*E}-CV;W)>xZmB>Wn_wMXYus zoeA#Rieth@#x#pZ+mFE2Vf32Q)^CygC27}a1zQCkiEC1ix2;Ch^s8czm|!XCfaL2t zX|k<=Ve$^~M;vff@+r*=_raY^fR^Swaq?qJ+Lbh3vcc!p@2)Th`Zvr|77r}oyF~v8 zSBwLyf?VpC4+oZno89~m+F%jN7Xa8XNm%SrNso~m{F8E{Kab7m4DoAX1hEJF1Hf57we;t_X;1Z*h{5$->OMA{Nj*;Ad+3Prh69MBg;V@Ck(xeqwN zax$6;m6RmXp}K^2Su&0^erN}TV6+0Ng00Bi){F|^wJ;b#M&wg#`1L$iWG!5yWAdv9 zctARr`~~@dCl7CFjq-)`Kp0GxO!{YuMU=I+te~R+MaH&3PCA`N#}@n68T?;^!LFzY z?MQRQKEMUbfZL>x3NWaHvR=p!e5A=}Up^jGCA<X<+=F;?Jd&y5c0&LnTg7h- zUXSXfe@a}bT8CaoGCt$^tdo*K7yfn3FA3m_?l!Uld~WpsnWOTO=uMs<3sb-u?^Fst ze3X=sWiMneAV%Mz{Vd)a_@M>oEhgqiN=ng!z_%uW2}GEbl#(&Tvh;;1Dy1J1#pqw= zyl)RZkWU_TAos7l>t{#L{uADJZEH86vpR>XQ+o2~$G*usIQBiq$tO7W2c^7MrTkG) zo7i#NMYQy1S_!rQ`rEPFiKb9L$SYL=6J*>l?*+P^{C4bRBL4#Je58ChlaV={TUMaZ z`ykX+u~pWj0D+#mXHbhHa+G3Z5WY5KCUI+#*!3pCOnXlNPlcmWg!Dp{yO77HwgA!-T3jLa>^OEUS5*%BUh^Jka_~?*U9QG4Bwd z!2!XTD4$dLaKLhzzK5QaGIe#khrZESd)5V^pb}*KczJHAV=4cOk_W9_SyYDZf~DtqGmZaTv<@neZK4#6*XC0 z09u;t=zQE=fYPdIeW-Ccad^Fs)N9d!44-nz9(w)P0d%{VS=Ri~ynD+;rgwvplXd3l z(6aR~xGtRB>F?07^)N$nTkII%uhp`(_<)g9_u73$Qg-hYzO4C@c)9#U#@7WQVdZua zNnok=D3r_S`wFh&QrL2oDV^!Q3#*xEnqBy5r`mYMN3$%A)8^(5-wNNl@!&HWm*62? zW>)3#_D=qY=CvXzlIN%Btvg3jhi+{0{jv!ypE%*5v2%*gwf#lMxWj9=UETTe9;=4x zBGEE&+K}rlDRed5SNh{s%Ww4>OTBhHvbqHfa}K6=n+9_lat+7+DTVwc+BP>QNxvM+ z9C>z?WEPOu>ZCBR}@J71lUSQhB*Y3I3KgIN5nJY1)-VvNht33>QY9^)H%X^@n z2yY3^Iap2%Oq~MO@LuS|Aqe@M3fG-z@lP8Ue`R>yq7|%Yhmx)8CitsZgAVR zz_kFF{qc?8C+~QcA~*0?9i<}~ghz^(gcXSZ=#%51_*xYV)ubtd`;zUi$Uii&ZAvW= zVs>tre>U74?a9G!;Yw{ISsbG%KH_B79GPQmhTl8d%(G>%saagA8d<2QS)3fmF9!S^ zd?@cmi&RoKqfK2tu3?!R!7l|A%Rkg}V;NFroR!5=-79O8W@$U(ytE%Hei&k7F2A8& zpL(?N8>Fttor`~#W}FF299lxOhxL*qDv6~|T?$zWG0VBFzGcg-63Q16&6x$2`K2>W zf{Oj(pS66{d{UTZKvjOZg2kyeg=UEwMFWE-LX`stpM-wU9r$_coXK~Vc+9qeDZDW{ z5MI)t2~r3@6uYKyZGP4FLnZkkQY0cNb-3fr=l2Pc_)4Wyt~5_pjB$wb$n;q4FE1k5 zS=L#Vn`e5h`^d~cXGBBgHw_5v~{q$ROzw`!LTFlskzmzRr0>sLDP+``$y zc@#6PtI1SkYb01c=p-N`vOMS{!izz<{<_ubfd$;iI`)b6-(7Z8d2j$MkETJ!>gDBf ztop~ApU-wR$3U0VS8y&3f{S{lm8r$wt1_wv2|xa(E0W zefJq7^lH?$of}rl3Lh1_)T^5kq!cl2{C+l!GIlqLu`RK?x4U<#G@7-m;MLMOxNhjb zCNe4_Z?MC9D?;7*hioT6++ZtU2J)+Y4w3<3e=vu@LSVgs0r>&>?Q5mA?juCyFLVA6 zTt|6sU)D@WYSD+PbkQ_I+GlNQzi;!D_ski4Wx35fYORst6XP?@*CyYNK~A|_wrC%Y zbhjbD(Jt3l5sur&Kp3qxPvl1H2)tfOo75E}2>`PLSP?QX!n3cmJ+zV4UTq{OS~PR$ zfu){Pq)(uY?COOD_}hQtxBpr1twkvB13Kl6FG3?ycC z+>bru423^@g5Q1{ARB*4P+07Flc%TQU*%h>huP%WV00;x3R6pW_k89?4mNQo)2#LJ zeA{M=S1aI->9DEe4#QKImA>9~Jh$V)()M*e@#dK1r1*HwFV>Et>gp+JHSO+FH)%C7 zWO4QWO&gksS<|25FFtKOFGrq@P1ed#xA z$I#U(ux(Vsi>qCyaPEwwGr5zNH9kSBNXMg{X60N4yL&+3?bve)5#9n{X*_4_#xIFof8 z>ff`T3!F58guI5|ADCHQvAfgKy`GR7)!iBT{DDlY<7IU&p9P&l#KzzIP<>fbUfa?3 zSSfGc+y67@{tJB?)4i9(T8c+XNy<}NWv2r*fjoLiWg(2qg{|_M3pgHb?l(?1&Nps2E$}U2t&**hE&Z*s`q+BO`T)H; z{nW~DmFAV|l?|1#mCTh4^A4J^W#hBQHf}(thPLtM@ivy0%I3;8hZY=cr~0(1OsY{xRtZ%h&W4y4K=W%htW-y*9j-^ft}5`4*m*rdE&UvekxD zZ;$AwjJ7eqVZS-QZofspS-&1CFAgEa_|qCeWu@QKi_<;RBh&M$+XUMLhXe-%I|N7c zH}dE5x1;Byw`$(F-f3PMUUS~u-i@B6f^9-vIs8g>#j`HIr%(B|_|96kTQ*xxTM8L$ z(hfB`Y`(;n&^JVT$1mxg6yIthl=aM*xYg_ArRYEiqyP+8dEprfQ=h+_lOKv7=m9pQ%% zH$B`Sv*c=@#;vLQrxcuK#aPd^1aA-6QZKNdcDM0qfYJHsE-p|BoKdvhtB+p7Icas5 z)4XQVpH&bVRrJz1E4rI`+Lw4F_xmNRLRJ_*D|dtRXy#tKw|{jb@#yT=08(5paGdqn zpY^UVsA{UdS}V#0PaNW1k36csz%SoqhD}eRjYJU8|BU_`KefDXdCdb)L=_Vr!`{#P zb0xz}p2vc~CH7lChbc}Q9XFwF41;Ntvgr)Lm?UG_&2lWD-)k%BYhSa&$|b`ZQ`I3? zhq2>I*6r>2?d9zat`~w=xVMzIl$Tt)`C8;!$y(+b-`c~P#M;gp*BaW|*qZ$saIIqv zW=--8^X%)H%$fBW-;X?Yk+r`cG%?-{2{6pBIq6c85x z3P=oS31|oa1|$cR1%!7l86G)aH$5&t7r*Siq`zps@GuP>8ky@dFpBhOtjOxFmgi`Y zl}!>_q18xgVQ8C{f7NK=8v1TLR?|zbR0;?1~c`Ea*}V7YLao1buxEVzvo?F&{R;;Cv77WBO4=)JdWy*)s)q= z)fCly)y&lbU$B3na3aLPDZ(ovjKi_O3nS^Fte}F8G`^sH?{;D%l}BiU^MQYYMG1ik z5eudY#(*1u9e^7NNe-S4sS9=qK?#-%E(<;i&I(cQKKv78WO^=r4qef9?s~3wZgQUd zr{T}odo=T~YziT>Z}~sOf4TgU`lb2H@mGMAw3WD(nw8xzPEHC=K29o50W|_0d>vdJ z937&i4@?kVr6qs6cceiax47l0L>NGUG;hH6eG;hLd16x(CV~>KzhZ z7(!ThSagr+@4^kFjiC*Kjm3?J4T+7NjoA&f4d#u~^HV2N=^Kh zXr8E^=$1H^SSszd{i%S@naP>Mnctbknf+2`TW8xMMH29H{1<6M{*)Ev65kTl65|q& z&IghYB!nacBse5Q%(03QigDu+8EYX#54iOHKrxB;Iq!HYb@#67PN|H)a6B4YF zB9R8sYokB-GWo`dg$9Nrcd4EE_pS#IQm1)}KU#hnpUh6=`{~@jo3blEn3)ZrvUFE8 zAOD?g&R6Cu(%(W-3=rg{U9nGid?9gk)#8}i{uEm)a;TCrj zaT9eDi_-_+7uGM?FWJ}MFKdczl57evsWVNj`Br0Iqh8ZcqfldCvs$yHWm?WPhburL zK-NawhTE1Y=K^p6ws=>j5{)TryN{nFE;BYcIw+s!t^8=Aa*^7J8)F^=CJ69(NS+?A z46l4^8FAL!sT^C)XrpOj@bGX@fNm7*;$V9kxpKP#XxVdN-7y&I$njyU?5*28ZRR13 z8Q3iGOurYpSiA7Qc)jSpFuvHl-}jVhXA))?<`M=7(+P`!K7s^6{2&$(J%|fLWk6CD zJ3pYiIk0Jep?XnwfpRf&VSAzLMRJ+#wbt%rKv^YcFwqY3dbxt%LmOcnCjx3FX{Pb8 zJKC&`w)1&iUE%I9Pv`=hC>-V1;@UgB+`O2*2CkN_#>%fbYV16*gvspB5QklduMt_d$W6kduw|Sd&7FudgFT6#P##} zroQtgS}A4AWGm^(>dELSt;jMAl@|ycD8MJzm@zEUECLqkv@?h^h?9sDeLwQi^08>= zWT#~3WT$3l=_TkT=_TqVuOzHwucWPHu4D-&*vXU1kSgWK=P2gL8OZx5wWqab=9i47 z01AuC)i_h7-DGa$Zxn8n&}3reV-;iNQj2K|i;67@cZ+Zf(!|pWH45g6xCt_uUNOC31dKhcIt`e10bfl=gGZ*zrjNi`VBKi} z@a(~ot6wXPAJb}@aH?oTO?%AtWV3VT$dIkowJ3#%4t+-A~t&;b*QEb`}_8lV>1LOka+OIvXIWDFcuaPfC#A$nz6c(x9@==G&e2E)Y#!54F zW{Dh>;gfOJa%)KJ^)#0N6*;KJC%+ydH2`BYm8`Kc3zV6Y%V%miF|^B=r{@wBmUK?c zFN+!tmOuFyb>w%5x?5LSw+%X+FrP3xOD`9nP~9voFMS5*b(8^Vn3wogBDhZ~O~dEDLvgSUQV2j(RYQDVKT_$j+6U zf7-3Q_3-mNkwia?Yw|@N`?piBA_BSn@baW31raWPhwLAkG3!LRlV!(1sw{&m{*Kjc z#d3dd`O{63GkwPRtI8`(uLh-Cn(Zu5N|k)%vx zYu1``kNz71W$niTdjiGfma`LZ<{@YKXGxb)XSHV-!xrn7potWFi$PTSEN3ir+ib!Jr0>f_<4#4G}5WOm&%rz=o&Nhu z#nT|FJS_7JKWPI&m(PrQplB1%h3-Z`!Bbalx^N$Jf zZr%N87^E@3BWVcD&@!#g^FCMgbjBHwn7UmboDkrfO9s?Y>o$Puw#?{ z2l+N&w_qWr0jCHDy*7O_4tx2vR7lb9+XO-n58oxGd}YX}U&gzZS2Qiq+Yz47B6N-> zB;@QUfn3XHPEMsV)xhb%co@b&r9T=~xEf0Da^DG~`NF?QO^GP|`LMErK%oR9j9&i6 zIsPhifOg>(|57FBe+=2NWRGT&|=`%roz%`UG&X+=%P9BzQkH@w@K?lrReN{ z32y&sCfgx?8qsp7I*N*{dpjhd1w)Q}-XqjpO3VGjcc`eK1$C6#7Y;`aX7Lk_6-SEK zPIoDK+bYdc=l*&xLCq5mIPQ=dZZsHyPRgES-fBWLnZ|}`CQSzwf3Fz9nReT5a4|uB zkiiV5_U&S*o#-j-1e5T1A`q=?Qe5A{_GBg4eYW)2G9##!4(5qc%-UiBu4UDHzGQM8 z?nVFp79>|P@Zj*)b}irATqjN;#u)9eHZEV-{TMna}vv-6-zW9|DQr zb1|ih{dyy|k4Diy{mbclpj;3m!EpO`ll2PsHr4uoDa{RZfl(0qahhgERsN|rE@{q| zfDBnLS3gUoajF@b_em=zSM4P~^oF&8&p8M!NY2>Xg$e1R2IyXV+o=hfq6UHbBajXg z|K&x#x>D7d?~S)qf*n?x>kADo>@d)mBYByu6~m8`Ud4)Dy}Cm}U$5v#B3q95s<79O zrK1nN7CWXH>z0_NZ+)4&+F834U)VLOke(Wl0K=A%XW4s3PsE!nzhAYe-Nz|)!#$(f zP1r5G*(I5R+I!QCTVNlYPX#2F0~=*WBY_Z(Am3|eBFt0@>))s@h7&*cysoQ}iLVB8 z2E(zcetWGWiyOQ>!WsNZb9*4mrXQ)N5v8YLQuW0e$6-(%|KVMG`x`H=?b&?Ny-Py1 zP20&fcy`={M5C*BhmUwcN{pSRo{1A6+}%Ntg3Xu3xxCl%&kBR?ELHdq^5;596R0_m z{Hotg39IYfYpmrCA~CJ4@D1!@Jw05HXjZin_AwssKx713Q^U+!#$dmu^^Ln7o@0-Vggvx-=FRbk2Z3LtR$6u@Q$<;TtF( z^geZeglN6xeWYASn4b5qmO08_2B$U!z8hm#llt_H_tkoEBIU^<8JWE|_`;s_emlW) z?;g<+=h>brcn#5n_gK0bX>*kZ^*E4ZwU^miv;8e>Y*S!E7fcsF^gD|b`UMJq3ODDp z?Sa&z5jQ-LG@AHOx2!Wo`raOBRVJa!x+FQpab|!p5oXMM{-zpT3#}Z1`<)lJvKg7g z?O(E{yiEcnX2cTx>EV_z~_O8EkyxkNl_jzmO|k z^4+FSqmDrt>+je*;Y|EddY^G49+=->>4rTp_dKT=`;V}7nrEzYj5-qRHlY&usxS5@ zLLO|wo`Mj5tfN1?uYS7#y8^R+)TyxM;Mxi@wd9AVC{QtT*^+-ZB5uG$_2b`5aLP{TPfntzXZxP zO2?S5w6nTktfjXg{9kPf3&14wyxC@Z!-x6_{lBvJxj@T>cfJVC2+bHj|6l`z-vInY zp4TxTcRi4ob6*j`b&QF-o}QQUbLNEr6z(1hjDdv>d;#JXv?iYoV_rd2DTkiKWv6X! zC=$N6aV`iw{)Kd*B~*I?{?DWxr$?8)9mn(~y3d~h_o+ndxY(p7H|l>aU~Ov#Kg%W< zB3&|m_NN)Ff_+FO@BBZ&g|t9>B;WK1Jvs488p?UBMBB*02JvkjN@wQJl`~Raio(M# zCe37??;lSRFy0ac3Kpw4eS`~#5{cWwLC}ZAbjmZ8ZGHGBj)nAY5Nh@aTPf<#VJLYW zVQZ9+c|jb!V#XF6ft}#!u9H7!`cGCq*b+-H`A;V71hpq^HvlO|W?MO~eI(I??~+Ao zZD+8J*ejjt%z2sAry=`9Jre>SF*?#+NUS$(k2Y6De8huj!7&-FQIw_7h(MW>NRnh;KgjN`B}2U3L~OXv3@qc0?+=Z zRTkzM((7tpHLm9yErfFTIT)g#vG$_(7bcVj^1acKp6r;cw3~h6?HLhG_!qcTYbL$A zF`m(wj_jMvlI?vFn&g`}5uR|A20{OoZ6dvxqgwOs)s6Q&!gLhctdMHIxp(jzv$)(Fw+z2eBn~gLY6iF#JO9hJxtA)*X;O<~#VS z&pP@(^@%NE&x<9G$m$t?4X>;G8q{b|8JUVEMSjt0*89cDLNbS{w30F9MIi4wdSDuQ( z*!tAQsp)IM4*9B@mIHDD^D5%BEoYt6e#x~I96sH-9r9_{w6nygL5WKvuTVi*mc)^r zp-XwM%Jwe?ELDj-!@4^_=U6>Do{54^h5iKV;ML z8Pc#+!Lk^IO)9@oRl?{o=uK0;%C_Wo+|;z#oHym!Uw4Ky4h6v4*L9{gpvimV*@r;z zmn0!RR$0#jQ`}EV)s2aZeu0hM>tT&k5Q-&Qh)n(1tNR=`dt3Yz_r1~&`)ddS6t#w; zfO2~a_s&nte?+38edX#EUR|uRUXItyI?e!g*L6e*H`RAvi$vm|k6t=)pIH$7J29VG zko`Mxo>`C#IA6`Mdv?v;s=c%`xmnA8b~tFHjZGYy zUDegv`=|BnTJk{;BfI7;_6BJ-SGAm3>4nSfOwbWtP{8`C_L-Y?q}EIOZ8xLURW0J4 z`D&l$*rk&}8b&)U`^3;S!4tHZboL$Rc24O#`&>FyzZ*# zKlAG6N3{2Dc+cL526u=C5C+ei5A7go&l{|E(Lbpu1`ocoHM)w?NyBD|@@gAN{3ELD{gx7*&KoYme)AnaCipKVqjoLx0L z$+W<+9~H&>!N`ez;S17SA5I7)XSbupWB3K6dHMo#L=Z1ev!2ys)0OUoJpNmu8O~#a z6mMl<

    3-=t0)7#9@Z+x@kr3fe}_w8ZSY) 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%0D$abmCq=#kh|XLjU;fq?aBB(n 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

  • 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

    TH)4c$I01fMT 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⋙E;D`CoBh1iM50TKA)TW&)Ml4rN)2ua zyT(zsWr$v+Ma^sahS4@S_M5d=EM97 z6AnzfAN;z|$#-5irHBwt6J3-eKvhtE?eXpc6+kD7J5d8=E^j-xg&XhX{gTf80}~@2 znrq{o+pn;WSoQQ>sR?-%d_CKgSGI#jf)VbCNwC@9*O&`Lr@VOPaXj#e=hu=u`Y~t5 z0x0lm!QOj-N~kt5!gtWmg&LsAeN9ZL#TI{vf%g4yc8~>8bXwoL%l?d%8yLA85+e&m zV=eGdGyed0zPevZMEkihQAJ6P_DCh^f*U!gytskvYkHPQosy}&m6XUyZO3U)*#jfS zr&Sr2cpjC{s?3~$-LS0Nb_OGl1w43}J{#7Cc3x2c-MybX7Cq-Vo1+~)|*Si@==sspU%5){#9Qg(D2a%gxG>#r$c@rD;M z|lQ^WW(I&~r2RVp9x0UA_5 zinlD8G?yp7>S9uH#ZYNV?XT5=wLBgx6gN~Ms;9A$eDpTy0JMD&G*lgFJm1OXNO!u9 z;^6mVwRD2zMKY!+cZZm3ZN|gDxFt3-@H{>6Bd6TuQxkpKadc;PyK;tOfxRqPn)u5(bJK`%Ij~z(rfGaN6huU_yHc?L z5cqK`wCqYs|y%5~Gk-60D);4M?$j?{BXc~z2USpI4i+6?YXW=Ns8}tt+Pp4_@Gh^Sdb3Z6br!y5reFZSU#UM7`h|5_^bHytm>&Eq z6-zNA`Xgu|<7*T4T71>dec(@A!;1K7hoQ-Vmx8wXWO0Ml>b+hl=5-p}d3{%w0$Qi!&THU45K7O7o{M29 z_33`zg~_O8e!4L`4eV>7caLeaQk|0{bDcK($sUpL502QigfQ{W8;fK^*2$^wgAk{H zie-S0WLl$GFbNZOEI7{V)kh#7S`%#XyS_DN8Ba+zq8|uq3S+3{7eKsTOOZrU14#0W ze-Scp?YWiP8HvA=YfoepWpURYc5+=XP_q0gj0Rlo0oUPOOKKzHbjrOM`F15zOT8Eh zK>MzLhWn^A7)(oS_jmCmaA0@HAU40kv{Vb?J5rJ(u7>7s$I5La=}}Z8;&c=w;W&b- zBXO3^RrY+;I1GJLM-M=UceH6(s0%#`nY*6(gya|U=4rlnp^&_*shO8k&}=g#dW&S< z%na6}9XBz6ZwRChBezw!+@Z70rCNU};w{4-s&WsDH-1qL(UCt_k4S*NdJTl+0;!H- z`F1Pe@G^0qbN5Ji3Os&{?CtJP?T<@N0n$F$i%$D>5IKnyn+cOAabHR9>ay*%8+B?_ z#e=F(KT|+49-0n|<5DR_0xjk>gWOFdj(p$;K%ez&h(g@5y9hS2)8IVku5n-Lex;Hp zP@8%Z7*rRL`mT??KjKI168x>m7ZsK}x!pi#4&Z{0AS!Jt!$wAHWZSf&-|akFg1R zk~CCA=>DqPgX-ztvMY@v$Jln}=)wlZXA=wd7W#LC{hEuvuSaV?mm3_g&}eXiY=55U z)z+aDNSbBjkh2Vx-2@9Xtu>n1HWiG@gW!mDjjj}QfuP%}?i(bK4vM?)qMMk#>cGYy zJWF?cq*uZa4Yb5_5})--Uda)H6(IS9oz+f9E`3$gwdQwtRir^7nE#qo_kNF4jVst? zM3%EQulN|aW3O7$2KUFpr8K}9-{;>lo5r@@)cO{A=2bWe&Qc>+g1;kh$?^mO&Gktl zqko$C%SS(0Ck?t2%x>dWJ84g67F8CWW=MPb6y~P2TvD8zvL)AK$D5K|$&2H;)=JNB z9CP(?V#TYyB*qwFK85laAQHNhZ)ddZhanbH?ksOq2AAbUG4Z-zz&Vt|^BRdkkDMn_ z=vH9-)Z(@`D6*R55apij!@OrTXNv~dodYo+g$l!OZ+C*pHh~W~2_c75Cz)JU{rSGD zeogV&D8)5biD`6c8l67c)MFI-fbaxv>i0+Vk|6^OV4t8akz;HXvXcu=%(8zrMV5~! z-%COX}M8pBUi&$v_TN@b| zXA-l;OS%}WyGwQlEQ?qt$cWG5Sql3JffnW#j~lIGV?<5N20yX-JN0WMSUD^6bu2Mv zrVO0}wH}+M&PlXQ<2Ot*q(P00gtR&%wAN-%$4t-Y(p#5GCn#Y(jW_13uznnsM0jJ4 z&!CA7X9qzP4r0ra6TJ<4XF$l()oO-U z^sEb4Cw_-U`_sln%4=MzMR?OEj1Vc^&8PKZP_6Ja#%tQetGi z{c7MHu%9(UYx7bBbd;5iqv1y`$l6iq6TCE|n#}-VkfNvzpIa9FkbAjtaij|4&cW&N z=1vuGm1a9nGM4Y)eTw2YOZhQ8un&B`2>xaI)2C9~SngdeR@cimz^S5vHIZoXV=}4m-XK4H)6Ni-gW>H^H#Ohzrc4@zd$^0f_ADm9Dsxh=0 z$0{NZC}0Xc$v>VQWKaECY0nNhgJuj8G@`{Z>RC5LI)qQ@GNY{B;*d#p2*c@yGeD$^ zK~3=0i-X(mA-UXr5s2JFQsPDJVp8_pzEGMHj8yxgI9g{4bKoM!dXjJP;PV0R-h06p z>l^ILN)bv4>`_Sdh1$zJFpz`geC_YR7w+8&=8>v~yoCB;%aT!oAfna_HpE=HXHekC_iLLFOxHq=`hoz%Mk!q#F(>G*@R)S~Quqm|t>Ei;cvF>KvFAtOh2(VIF`8wq?sE72 z>rR>>w4znbzT2vP5dGkLP)Y&WBD(WTx>+zw<}8M{up~&4Pk^sty>7Wy(`PvRAh*)M zPl%fotgHjcoh@0Ub`f>fFG7AfmlCin7+EA+#(4Q4hN zkjYq~DH^q|4caZi;$oRL6x3DdPbYuW3fm-%0Hi#rA#L`;4(=z4e{TZ~esYC7lwDXg z?E@%0oIHE%ZGTUz%fUzLtIH2kzKaJG5r7F&rhP#~glAPDaD)8Y7e7b{a{M7VgGu97 zjmZ7^d+tIYUG|s3GIh63sm)H>{_cP*Rnxi%AMh)jr{{~ID_TvYai)-?^-_WCixaA+ zr>V(xVQ*9{m|%OnM2H|cqoTCJ4FD{6O8(N;CnNW`SDU1_?(k#Cu~KHj?mSY^U-TCA z827vuMmZdNo9xH5sYf6wR*XzOk`H5VT4?Bu1`W+WYPp%?g zKr4?a20Vhs| zv=A;r7q}9=omiC1Wb+4N`QV>R*@kg(23h1_3kRKT2G_P91<+-E&4HB0G#pa}tMOcE zFl2V0N)|5aFyr!biW=vde>?3yFi;%FYi@56L`6JyNbmCLVt3dcZSW%UyEqK8$c;Rt zu2zQ4L6TZE2Frw545x$1#ojhe<5;9qRb#C9S_blnIfNr`e`hlt2)W5Hc<2?g z3Xq8WU|#E0OTZVEZ@(k!L#WQtxW1Dxh#K#`d{#pOt!0sNgVkLr_XPr`fGgU3}Ai}oqcGuuLseM1PlXFU$0qCDi!i%mDbD~ zlD$43qhW=Zoz>dOpqT5*{pU1WKFS||r9cIJ_D`3OU$&;hcX297YYqy0fsBi}{iu7T z{XQ7|6GUy!hdL@L4&?q&w;-K!y#0N<6Z~qPNtF()_UZXN>s14hiu6;0aj(AM6_%!d z)8P!ij^$FwH}#pF?hxpl1b3!C58kG}|8~fgWVsh48MSIFMU4o7zdbNio0z1B-QGcsjD^^}@5+5Ge&jXA&7zKPhD5+7s_&PMt%e33`qU+nV>z`zWb z@Ct7hBo9{jDVBcWRETRBL#TBK)=@mP1MWHftmzx)KOkg{^>WqS&Y3WwKSC7>gKoH3 z@_kW#!+ncnuE3h8Qa)%vSL=Ag-O;$Cg=S~=XK9wCj!i<_cWj3ua{|JGV8g-}wDZW} z@`HmX{3As{%BQ_Q{;&4N?A?e3v=5{2#R9(A}q2dN$Ofi%Nz0k_}oF57UkdM$| z_D^O#;!cm?E#Cn}5~(_DN@-Kplu{o|U>bV^A^TmOKWX&_RBI*8P&6*bYzzn^e;Qy% zEbZcrfwmpsQ)q?-9S_^qRYHRE%z6O1Zg9)x6ZEktg-8wm zY|f27D#yAb^}E?Ei#`OU3B(-Yac|Q8>S*o-84eCJ1M=nC#ObkBys4<(klX$|yHGGA zQDhj7fUwW79~bmZa4^Q+FJZ{7j>c8KB*u0_J1?Sk&G~qKDQik~g`qi|xCF8rgb*ai z4MWBH!Bi>1*Tyu*p~c^*za-J}j0v*qFB~l-XA`ZF(~{R*-J!!P#`e(47uH(70qi!M z{ZvTh5WF_)N5JLm$Y{~dtch2XLrhyJc>cVfAb^R*rC~c(Diyqv2VWvyy+hJW3A!Ne z2^7&GWe|yB?6daK`<9Jmoa+PQ3p@t){FPDS{nbMiSAum-L7a2C#n}?p+QW82??)4G z=tlq_(K;Xg$Qfi3EFqx%(T7^_V4Y%m103?+F-1%?-6U5w`MkZ9qJ09+u@&St#MWN((JT`S7Zk6BN}PFyn!k}+j?B|<5#~rZ z=nLfmZ#sEM;2+VQwV~YKSa}dH*AB}wM;SErl`xDk$U5?SO?sa(@hAc@r{nf(Pf84-u6OeE`SZI-OUv*{n{Zq&w>4u^K-Ml#&Ic>Y@PPt`*teI7{N3o zZV-_)x1F>F#@KWnfGv`kjx9FU-HTPh*rII16Za`SDGpyQ)Hyt=c2h<7-R+WKB3rMo;$x9u#h(3vsGX$gjvztGHYJ0T!P$~!uYp(iEP&~4 z;kY)WSI@ZSs5e|6Q5HMJ=15qGPwB+_x!mgi!0ql0O0epSDN{JN;Mm*&*g)LRQ^ILi z-0$-|1$)!J4KV@QLdg1&hB*l5sY{Afo>7P7Ck(#0K`Sr_;q@3f(0Q28~@#XupPt=_lGth=cv61hOtI`s9lzS<(^=F|| zU);4|*$)Z|x{~Ptgote0av4D#*Dq_dd)~hFHBq%{Sks-hjEii&W-Bbt7@|w}<+MqO z?GQhFB$;xpl>I|CeB9~i6DHre^FDw~u%*@>f$oep3tYvT9X8Lp9y!Is$~Bd`JhZrISdyB5-AGYkx7LVH`-|m24o4M`C|<#H&Dv%O1BFJs`+J2ViLQ z>h|9w6k{+8o1UQZR9fV~L+&nc2%S4*MCF#x`W>g!J_qTZ)l;b!+((L6<^@OO=b0^qCq92| zvnobP;evx)9JTm$*&40PNy8JJjC~^ZU0)1Q9BiRG6N>`{9T-ODtg0MlHINSeMIb9* z(l5UB)xqrxfICGnL|RQ$t7iq zYr|uOYH~1OpDr07D+eG#+RKJ20#x(*O0t`8-LqlFYY!sJ2Py!+lJnJswmSCriY7}y zjB6Ux;qh~CBG+$;AB(#3d&3{upiRHfF${(x7HkNcjTB35Dh3seQwr;Ie^+ER|CH>c z&K5IIgdZaw7jLBB-lYuXSN-*=9>E}imi^`g=fPH}t;J6zVf_*5MJ&8IN_km^Wn6BD zIy7X?CHy&!RfHQYF9{G!A}8eb#jZRwG+y)2^TbQd45pb2Vb;3V-4PDmTgeyH@yWoV zGyKRgdosq4Gp|-jUn=65v@)HwZ66JYNYZJd2(nRUk0i4EM52qz5 z@d%bC1>>n_Y|NA*jL00uzh|{G=I@UV8)j!Nj>d{ebAy!Y@Rhcj&Mp77b9qCobqIQY z1ZOEBl1)I;qfH?NWi{hYF|!b@5}*A%n43C3z2P#%w*-%Le45@O>#u}3tJ!#vfkZKw zXyFh;t(m$LbUiQK_67|?Xsgvq7Sf}-p|#5{MNbZuyq53_GfL+jdn2};My;e}(c?R? zAj%R_wbl`alvGZ`8zqT&-_*USjGstjalQHeyeDzMlRFle|B*8{u4d9o;=l~!I5F^5 z!8R(_i7rVpARBvUn8$HU?M5ni8$|Br4pYB?rig|*aMx7B1#+%`t+wgVud~p_$@BTc z2O5=l=?{T76RDmlnK@~%f85^VypFE(++%nXmWO9~y`iP|wpT~Ars^5r?` zc4j`n)tIDr9rOIAQm>})`<>wAj-+LKux9rM8VuW%S&PTrDofC2M3}VMqQ9~}^?ma# zz6oZ3z!4VJi{S;?hJcj)YIR?P--Pj)wVjp4!|Ss2JnwL?HfJ#9=Bc_~y2ukan)Z1K zfCJGB55-{Xb!cUIb(}f*s5nbw;1nR&xEL6Iyhl-L17R~)<;0<77iWYz(nSMffTCDWy6g^;a8T;94YvWyx zO3(3;)~9UU(N2D=2oxW3=n)qv`TEPa-f3eo->oDejV)y-^EEH`86h9L{Jznr5;m|w zw-gwp2-myN#&w{z11CCDazDrS02#vQj+f->xU3c=LcL;QF2`)vlcS59&8}~;*c)L@ z(S_zw+p}osVzw>Z=iR1ZlmR=Or30Xd-uo+!(urQHOZF=pl}q9OWCR)Vb`SQ;A*c6rplKqncvmAw!wowwqQvW z^vW2)-X6RQj-|Y~&2%xqfB3d}!fcGBHZRv_Fz}ilvfa zzA!O_(_4%nqLgg;5ySAD>$A@^3#IS~^p;-xVP_p<$u$`+O`TZt$Jsz0baXpx$(Kc^ zm*%jb0Kqu@{&a0)qMWTKg-i#m0i_K$=LZTh?Q<-})D)`_OUxzs0;i7U)7N0qd=(Ec za$rN_HM{XbuvETZUwcbmvb6&WDK_)ItaylOrX|EFLi?pbk%|RTJbhABx&$~eAg%EV zEFJVcfQ?rR$h&MQJuK;-NMoAsCi=RwRL!4~_L%;@bbIIo zB8V-Wh^C16ZPQGR&={`*kGufVEQe61r70@2$s*~QM-V{~uV!K4z15}|ym<6pm*+RNH;W)qY%GNHY`yobIWElsEN)!()J6M_-DiY*j=isy zJkcq0#|l`@jnPEwm*iqqjrC_GIpV94SsE-eP%&y)IIaF2!P}wEI04m-&5s8$1V>qJ zejt#BPdLU`l>vcS1imV(EMMf%u#)xi^q~lvEzvKlHz+b${S8gk$zChCz+%al2F1wV zOsgw>EEq=pidEOwtfvdE|?B6=z~Auup(Nz2PYJLK`scAbG&K%MRGy(U>+J{cMdmpMsbJ95UAKe1Wzmch zHzGNj8AI2-jugVT!jW^RnK zWW*kEtOrv%u~YtL3=b-uPExKfE9OG_5P-Sf>AES&b>!>PIyQaYmbevRQj-i_#1yW} zzl$<<+xGDNFp=-8Iaw5b)9)+s+K<+o-HyTg&)3F-t_+{`OVW&3%^G@~k`{YSbox*h zEZE+`BMfg=;La!au%Z$4)rz`_I=6#;9v&9Vq{*vjT1ws3 zVwj!V+Ni~*>n{hFp41{dPzunpizhiAY9I&Vh$q z-Ks^sI6tAR3q_)b)ZE)bM&>&7G08YW_v(n>YSP7sJuk$gA~AHV-p#@6w6j)ff^wfw zD>j0V$U{0Xg8%}-eLBzQ=pQscShov=9Z zvWA?{WG+edD3BDZ;RSYzMP!0^{Ro)=#&j+>bS=Z{HKL9R^yY88dcgOF=3r31{9msD?}6~@62IH zA{)50Wg=;JXR!A=4@(4?enLnhg_kuW68DV+y8pUw&fMYh*?}FtFQ` zRzgATt1Q*};Oby08&Jbd82hz~Kw+27aE;Xbt__2-a3(aoiv_Km; z&L)~_O20_5A!tQON*Zj5S0S9M+vM)a-Ve)hUd$FZFHJ~?vDG@JQMFG^ZAwriu&G65 zF%kHh7$e*#T&#HPlY9dk@?W)1h_FthMB)2#E*Api5hu&Qa@LuxIG>gUP5QAfS8 z)cfJTDsdeqDPd@*B47RuU+D*Y#UT+7$xEdPWPF|4hPF7!v;Hd&jtk*;&^(_I(D}PC zB!W+c%EQW8-237+fx#&RFxAHBotLQ;cd6`$`6OZvb2f!wTolB&otmbei(I;_Ij0@j0&5C@(9rimxMz*irw1~(P5YdD7>}1>b_Ii2DZ85VXy*~Au zVVC@>z?oa?lyclSLq=%4j@-1~_<%>GP_;5P67(K{=y$T@YIVYQex?e#eK<@}Gm7Qm z@){0_D8CVYs~Vjr2dF|fVhLzY`L<=$J!(GG$w)Cp@ZtKSA8^}jp!YGu@~;S&h4w0-_pKaNTb;=XjZx1!fDFT zlis~0NbEzW`qq{RuJ}SxCM%P9q>%7WA^@kiPKM(|xXiu~WsAfaulj(RhgC8?o>(1# z=qV8|wY_1r{FA!R37K=Im!aaegb;Q^ej(h$(QaD~thofcLti=V97Rr~nZ|tO$7X7q z{&Ty#=3U4~E!)Q4>a`L^t$mGT69y7USz{V_sO}Za`!sKX9*T-~QVTRHz63oCSRxC2 zREcMHAN&w+wf&`al3f@uFmwOAic?OWv)m< zaF8bnvM%@RLiioE)W`NMEQdtQ-<$kZlw{k&8q^m_Mis-vyinnE!!KCoyq}hPr3D4d zOfb3B?CwPKoN1-~x~{JDYXA;^#4u z^v@IQvgWvtGfU5yezJaD0?fatMxVd&7JTyT2kn%ZfGl;#yOx^8+$7=VpCW1-sm}qWga9atcJzlnGsRI z$14St*pia=@VV+`O%gN9ce z0OIw193ZqxE2Znpke94%63EWJWh;9dXI=tYqT?jLE9>czH3-dmPE)O%Ju)S->o5m; zy>WrksmS0>gFjE1+aJ!e$4{;<#VriDJenCLb)7yB;Wz_F|KO?s|BZbtycZ2#0zW3;zE3Mz&AY_;q?QMR$TS zrOxj5$q@L3;xtRT+l4v!y3OCqMUZKi`TK2CayH0cbrll_U+jZrNVjnUvVt${laXTP z;@cM!z-P!MYbM31)^*xI+krx^OKhYD5E|Z4_7bvn8-1F);k$;HH!V0ZBn%E|$H)qp zOmDJ+WfPK;9*D`dWlG*uY)?Zp5xQZmuUns*#nVode_+T?;W5eA!l7KSK^B&;92@Jk zaXr8!>|zWBu&_(ttA&dVriK%tKo}^bVnrIO>!tAnTosY8#Y89k~fMzK7ECi0yN{^pmqT* zmhg#ti;!>Ldd|GfJON`kXsq|HvL_};m(5_z-%j)3ufB{7sIar}EMsab!_oC< zVLY=Wpp`{^zwkJ-E`rJh^Yl<{3KuEcJAI7Gtey9{cu#m5>Wv6|ivfUA7U6p6*;Bs# z63)g}=X8t=WFo^Z00`P1VfvwNW9A5K9`Dy79Z2qX_xGlEg?=E-*oq0cB7J;+1WA2x z{*fOs=hfGDNOV`tLjaWYo8Isz164!1i@km?N*&M1CIn%Tg*QSw@EG)F?3To-zKF(T z)`Wf(1f~TWV(L7jMM(24nI)yn^xY^93*~2s7G(2{KKs;!P4Zb`AnDT*eaD6{yacy8k?Cp zt?H$7Lf{O&eG*#Wu|e=24(d_PH(w&T6=gEhNYj)o9ibJRtV)AZ{12}_Z#wb$vEG)sKBV)&mn;NTHj<| zwQ%oft+0=+BSgzn@A11Wo-USU!y-xmbA!=F!#cu&_c8J|XAi04rsR{ODu;m3L+tDX zS&819IV38uf-EB-hCSqKi&XkbeRAl;8y7yl7(OBan-rTg8O1f$?Q1(J)ss%}nYy39 zfICNnxi9&|T-pg_JD^rSEQz%ekJ~}W0!UeMeCM*&_?`Ol>`*NEuRF6x&O5d?Zw(|A z@fqi105w3$zb(^P6fp4{*RY(nE!(~m4XC-2!BPHwwRGzFIjFFXb@O-{JA$U|QYuo~ z^yO~D@Gg1fFGhn#J~sx~n=c53VkGZ; zC|;hiWeHzClF8=#0`z7n0nrKIMJ&g2@eIBv@ zZ}Z>!|M>lX{9n)OKmO;h%kSIV{{C;j{a&u?xcu8+{~C?e5}$vG;o{l8ww8Zgwz#X-Uq=40@%x-DaH-4Ia!7x=yK166-{>iw55|I8~<+e zr+AOr?bq1RIJQ;tB&(tSYrPEpKbx%A_^ZX5oqtT|A7S}Ftg}PEX8j5{KVANR8Y9l4 zIh(&fLHcioV1Cv9mR(92i%IpW6x+RJ$f)E+?ky}~<>FP*mEESUTpd*ew~buUkC;=K zSWqg%OS#x7-PmcL3_~fOhQzX(hNHUOO(cZ$fYEI5GsjI@J?O}$&2q>+_?KtAHk0V; zRrB!6X+VQ3o`3uzcMs!YWn6bc?B$r3Q5T?YKjZe+DAz+3!t$lpUS-tbs@I=3v_a6Q zKc(h0m|nZ`D+kq^gXzkCji`=@UtSzsdRxOP#^CkUU-Vh!;_*J32xA|Ktu zzyl+ex<0dVS@$XPpu!C^B_H!tYJ-~ItxOd&V+O)fj^wk8F%s17t8|sr!V`AeSHG?r>xBS zUuBNjmbuQ+hwjMW&wP?cQ6zA?$1QcIq5yvE$Co;RUZQ)y9HZ2HtNql)YH%j{sh~># zd1jF#--hU(&)B!lFQCTXU-vP?5U6apM5&0j60$K*w8=QJU+#~u!Vlw zYW_dg{sF%BVc7al4B^Q45G`Pyxqrr3bRWNejdMS3k6-K5Jy#zaKP=New#Jxce*Eep z|7?HkhwwQ*_2AE(|GTySNBz$lu)o&s&}#YCFBH*j^m@+Cj~{>77AW`=DC4JV+n@dV z>4YVL-6xLBv!6e0^2GBaJn@9R>zV8N%fH@u%0FWWyX((d#K?07Sm+M>|K1PNx0W$#r_tY#<(ZvQ&z zI|bg5vjn{a?~EH#~lZh4E1Z;<+7;CRRhX>vB#b^76hFdH!=Q`;XlqDAwSb16| zA>y@FH%?gme?!5q%m4a2#Kl8;{R0Lc930YL?dRzD)5x#)Ptm{sAo*|4>u$mZb+TV_9Eq`0f?6G}YnJ}@2gd%E z^~p1I`diii7Dr2lqmNI2`#oxlXPm$NZrL>OqWL%Q2-Kf}et(+(s-T|&k=1{doxnpI zfQLG;1|reKPCG$fIsdHgTEmo-|qdwN}v+g}?q;^8DO>{rU&J`Aaf% zWBW+|f0m5V{Pb!6S&+^1F#pRqYt=oLqHg@dNf1T=2m(OdfslWL;eP}1{~N>*@LwIv z`ey~cKk@(7Q5^SUqgyKQ;R=jgn!Wv-TGw`7=f-g+o~$WB)Zq1Q9~MG0sYJD)e6Gd% z^Zw~q>7tJ6_k+!x)jr(hXAD&H%lfH9VnmrAtlCqE8b9nmu=CIQ2fH6`5Ex+a!;>D) z@$)Hs-7ztvlmE2;pT>MS^22kUJm;jXA%3cV_5I-+Wh!~UxXZ5`D^lB&zqbcV)Z8T&`^v_E~~UtHqhNt}FZ4u5J64SO7aziRnk3xQu4=k z^9K%;zx*`CpZXszSges~Jbph|54XpIb6YA|X`es! zm2`8T_hXjprxS1+8T5r|(@=WK*`if3`Q?n(OMI&;J7H_U&Ua#wb)helPfx6I=Mqh{ zoS(p{C1+c(m?!zxMK>4Mj^g{XyHs3RNNMBf8QWs(zHEiYYA-;JoS> z2ATWI>Mus*$;{P7#FuwTf8EAGGA)?@H#k$Snb|eFOIsVi-jCL2>4NA_IQKY& zUh(F_+G98JOVrDh_=Et3c`(j>*#0~$yPgxLAgZ|oWf^C)(!(nd@l_S4jc*3S!Xw&* z26N{|i%kvVIRHe71XO~?a+65lUZ3S#6$bdd-tYD@4L^dc*<6Pt-N>@=yrrTTiON^&|!+JX~{X^U0@giC#@hO31SRe2 zN8 z0?OgM56W-{MRQU0Au{+X_YDMP0M>C4S`*2D&b^dWXhj)BS=Qxq(rTXbgpcf%yIj*=VB%3^rhT*O zg_*{~;v@w0x`eD*vYyp`$mH`QjnIBeeQN>b8`U*9+RApg$VE1f#kOyR-{##f@v8u+ zf;3#~rI^Z6g*)QR_^)Moz3JH^ zOyFJJ>VYCy+BT{nlIp}e_2RI|0>rYl7VhRQdS%p<2P;~^rp()_aE6Xr=E8!juf9pY zYl?rNq)1DSy1e|tYgJu0WP2#;EGB`zF2K92+B2&;9Sl@6n=LmuY;=xu$FL9{3WJx# zjtx;vYW1ZQH#m7?6&imBbJs^?4-RD@EL-WI!(|*v@CzDY^OdA=ir+6O&FKpEs?U44 zc$r(i&3czzKQqb^Jv!CHz`4!Dwa&exjSztTxh>Bz-wz*oIXV^NN2?`Wf50O^L)$4c zGmT9;ydcRg#%uKn-&>|bz~M}7XU79lCx`8khZe36=C?sOkGwsB*@vCwm+)#@&CGMY zqjwaQcv-Tnr7m#=FCr5)gK}e7336F)-M)n)8=qxvgg3MEUZi8{$(pC5s48W6+0=Rl zK)p3T!h^&%^8g%Lym~~!f(@d*NJKoSq=t@3cvg+3tqrKy1b>1^@X@vDqx`5VzrxhQs zloKiQVPxV1E34l_u(-(pktQ-Yb_N=<%Ib^@sobV0C;McClH52Omf{%c&kg{CArlZG z258pRvD`kj1#<7;8<^GlQpSZ4m7(EbKk=q_xLXlEs(d5E1tqn+-l?%F?_q9?(4ldR zDyTtmR@tKKv8XnaY3yTO4Cfacap=aG+3dcnC#m~jU0~$7Chep(%qSr&W&OisUCXh` z_rP3lncp=KftXJ`O{I~_l5E_cnhgSmlU9p*4qi`z647nTdc|hch=F=>`O)dw`O4kw zFqa5o5{mkWjBma?DR0XpZ8eLcElagkio%=sLyX^anxT6jy=~EmzvG7jbGkQ`1P$cd zNWlfVNy_}#lR?4!#yspLIHk9sk=G5H?s8G!Zk3z1Emt^AV1baW5j5HhhS`K$6Z^9b zACkSRvM7#=yKugf!eRouJ-&7JWxUzq(ays9*1|NVKb;Q|TLvOzTSx?j{xe6Y!QvgqQ> z69~I<8H$t-OX}<(6qn4A@ggqlI_A-JWzFX` z0+sM51)#G+c4)ZzhZ;|c+QT_icIZ;ECh^8=lFUED=_?d}Fw3ERBzW3`<@nI#X zImLTn8K=Rc{t7kbx(0Q@Zh5&^lFxVT=+_Lvze+r}YP_l3K&=L#L@K!H9&^zsJA176 znGGL!OWIch>aba{HhsBYUm-=g-!HFHBKDn`&~>{4C%j*^gt^E^tU<|?cM~o4Z|pYv zAu{!GX-$eZGnFM9pAIa^yR6r`ah7ogkR|}bw9W009e~S?rM`slxyu$Q_pbn zw@d8GXuqsYF#&(#&Ec@!S>w?QJY0x;?=gW&L%*;McI<3(V&`~Sqd)lu*EKhthOX44 zJ1UtIP{MG*zluf;DJStU_`<=A$UX9k3+t#wS5BbGpPpPEt0z#X>cV!L2;y9~a?KHPUGLPz2cj+L|>B)8~o3)loG`wN)>y19ku>jQA)Fe(b)KPp_dJ z2mCw=r`x3omfj!Zd%BK-p7gvn@>nD2!_r3giyR)Gv`+mf&@&A{@r5}|wjN-5s^QhwzUnTC%rUAh|sv!E@8?von>R!Fb51fwr`PUafC+6L^Ou;sIE}C6oj}GMF70R-@~JQ; zZ^{YoJ8x>@NEqma2*{S@W$GO*gjlGxVBtxxNaJ8MI3876zZ|IOQ3L;K&&ig&5D>JR z61#I6?nU>lnFCiC*ack=bcD2a)ymEYImU80+u#^WF}chFJK?M z{U8q5`###fgO4W+V6mXISAv)#%ONN6K864w&qzy12o~b^+&bt$9}Re3%?o}JCIi%V zHCn9>hVzHJKVZ41b#+@prEqz}%d~_R;P5>KJD4*a*SQUDA;?}UfDqiFvy}yxY($r@ zqRC|$2?yw)Q`wS6yLhkFS#g>{U~83kj?$ha59hmNPblzO8jsnYvl;ds`>dG3AgB{- zpH02=0IC(^NZJG@p}Kk}rI%BAHhbUB&5`D)ztqZPa~N>cE$`roVQ;0>fbVgrqVzD; ziY8_xqQBY7Q#;s@lN!C@Nqbv(&|#~%JVLVjq#$S>`TQ_7f=0G|Yn@@x>FkA@9q!y? zugCkh_o;ezAtPKv1CzUCgYD0UR7>LX$c@^0LFY#og=_~rvs+c><^uWiMp*QVF6nW_ zyQ`rM#FZvZuq-EQg!`3aIR5Ip_0X8qft?iZJ#tvX{D|7IVFu0P0GnOzw8ns%Vm!F> zZTV#~ee9FSUbXR8QbLq~i42@^s;SYy-Q!6BII?Qx{kz1+$cp!)A?i6V3N{6}7yJSD zCy6N5Blh+gVy{(4j9W~RY989`MqBe-90?RN&2(XT$woy4kD52x&wFXS@jcp z##~mzg-cdmz1uJRrfdpWj^UmSbaI#m&_C}P)9|p%idKmYT@pM*&GXWSUGUNW!eL2A zlo0tBAWL__H*`h)=`>2X87{bR_(LX!=DTzNw>Lt$DDeYf zMUEpl<5`+acBUT7fsMT+TYv%>U4`=uj#tZ5FRJ~@vk>_90WBGfG4EkCz?K9ZmEYJB zJN!lp@DvOxC$kWszkx&xV5))yuH{Om;0molnLZ+?#F6LQf*!eaHppQi9di{N*H3zV zu819L^&Tl*;jD_^i~g+_YgB*1uz$wVz7&3O5APlXhZ2~4OJ^ORq{v(Mh|pS1Y}Q>S zAwfHpXlEE?317Q2nGUq5$jO3vuQ>c|PVLMI-;cH8!V6NP3Oo8R*_5{@@>=uC;sj%B zY=6NWuq;Lz0NSU92IM&GF}+|+$+3)e7jnuhFL!`r;^SMZlHrTA)Oy^y@ESX)%k%)~ zzd3DSq-lt&;L31x(hGWXyFkyMqJRB-!BktyS5=){n4c&gysCbt`8QIbfS?x3Cx0NE z6ou&I)3lphkSg2CBbjo3i!$uDXey~pmX6@Ya_jsd<@AF_U4(11H(jVYF7QYsq+(&J zAe0L+x^|=pyyr?U@0Jl+LY_>FsDJ`DJY9;hEJY0fdcx;UQLJ3soW}ZcjQ~wvd5 z`}Li^3z7;ddE(K}V}sH>JTH>EGx~7impTnErM*W+oe+Sor?NCzpZU%P^*Y{LieV5_JI03LGZxe#rt89 z7RAVw8lM4Pan%0kSJaXFtAxCn!(9Z(7hV&AOql`=`FetRO|ag(jE)?PR3S$y9BAZ* zaXP<}I=r;^c_?N7?)E6R%PH+O-b}z2=RiC!kA>`wWzY7BkOv?HBh_vOg)G8d!zGvH zUW)c87i%)t6dy(8y=RY-6)mNqRykQnoBR1#QOiF24Z&RMh!Gnzv(_oASLFfemnW?g z9=c>F>T`KXr#n?>ll71C^Ch0YFxoMT?O+Wc4=3W35QNIxOt?;Xd=txPEFOre8lrul zDIgMYhwvG}4A0~=sNzDs_ph$cw@VVloq#9chMO?t1aVcyC9%BHWQyE&$oDjeD?+Rs zwN`K6urX|QJ7Gp3b47sTBOLW}W>rKgyab;Vj@7?>4hpJAev|$s(kLQXg@v@Sh|_=u zLNBEZ`fG4yyUvnIGP^bflQAIC7ifi9t++Iqpy>7xValRjR!MA24cJ;AZCx$}q#0tk z8@S`Jq}D2nA1Gj6sU-5Xcf=Wi*8mSp9YLcVWx~9D zE&e_dsNlOq`N$EAdK$2o%4Bhf#e)%%5q>Nc0cp(q0VO~*r3rf@NVx+wN5|o%1WHXT zx}q}vI!Y~k(8sg!VC@xvQu2|FtQRIb^gP_<-gFgyG~L~u@0Pd;?DsXSD(!rL&m_2O z!fkuLXN*Bq(W!=1?6C5vH|P6qrnDxQwssRFeGW)=Zh%xSH;#_kaTh*9+A!B(B)>Af z`6*n@HA7p?#c@L`#X{|ceO>GuWdv{f>ghY}8fQSn&`=#^_<0y1;jrRH@q8zAbh9dV zco$;#9uX-tFQ-PMcU#-T^ww^(|MEZuTcRbN?YfTghGhX10|OXo#7z;5wek@PDUwNA zp~E_iDN#E=AzhCs6QFq`wSH9~2act2TYtM=eK~}5$>BKb|Q>TnFX zwVV#$+H+VN*=Nl~`I;W2AoxnfybKpanfjlu%m}T(Z^E>oB%>@6z?eG^c)AxIxIA2} zm6}BOhQ|7KMyOq|vxqC-nDRQwJvelyeVxLOOS{llq^;eu#<1!@>uj+Bx$3(OrD?2f zAbDq!8cNLdu1cH9f=RLZvz#09J#gMz8GX~>25SaM*@a=v(9)j%Uz#%83b`wPBimZ7zQ%kD-y)SR zOAW0%pq;Hvd`4S3L;httUHh_y&nT69|K#3Ny{olUQ@-;VMO4D7O~34Lq&4!6LV7=d z;B-yIoL`qX%&yfdeW%tqYfZFB8wlwgti#oB_#!--b6VQCL*Mj8+d$!UuMb13$QT9d z7e3ra3&&C|-{K^Z%Y-H*dgtG!(|v_8v2NZY@~GK-(TptMc zDVM4Qaz7$uP7CxM`o;FuCC9sPhtk=-u>58lFR1ZO9(#jxrbJR#ni$|G9wgGh|k z&kMGGeP^Fkm@ypQ&ABLyvu9z_9*yccuaLGq7k_;TkSkyfW)cr8HWYm41oSBRxy{yN zJeE_~a{?w;0GpjPfUu85Y>&E4bulZ*UV?Lye3$m|fhH^?3`L`fb3$Qd79l0=!^phb zP5B;PqXDvFsOf;tH;yX@Nh>8(y=jN$ltY>UpgZRF5#_$CRGX+S(sypED~^N&u9OUV z0byB)vK%SB`$XeHNu#9s!}-T0$OZyHa-lvF!iVOO>+aRE{c z1PXu?qQ!ZF6+hqCkE-Cr@>T-mSu-~8)+6^Kv80#SEY_t zW~F?LeL}3~LBnrVQ|Wr5e_D#Ar{>aYmB?e9uv!&$V8T<7j&_f7Tx~LS09W z5Mdqq?+9;t`%=TfArR!J#}-REkGZo~@fY!lH+BYh@Ehcoe28zz(%N5Xg|q2af2mx0 zVgFYojVR;YFI~!scu%c_8n&N z$*nV40%=1PIXKIB_;5BW4c*|BuG4p8SZ{Lv9zI98@al$j-Xu6!t0%B<$EvB;JFkhe z!{9?W=TZ~U6otj_PU5g0o*2Hy=O5@HNzDH)jmGsFuy)_&vF7$$HLy(I1?)=q-b#y1 zUhP&jc)eXMSj4TW3gGdCbt$7flin84bG`FSau=as;tx>#ebr0>z2Yv|R3{XJYRYcC zIZ&~mkHOSnOL-zeAH$mi*dF>{Kb{r!VPpQFd|_yWam=V8b5?FKr5QR4)o4^9Ykrcp z?M0)fxC(>Jz^&zuUtC8{EBlW@C*ZTC-IR{?#E^CWbofk8NZSa2#V5NzsRpeW=t`t?U+f<;t5YFVnT;T(s0f zb-rcdq}&&D%e^KK6K8!U><4mA1X#x8-J_*|DXJHqKKvIK;}CA%g59h(RTHGRYxH{N z(j(In{uBxYV6Ww$?2z^n8aE;NHZ>5jHh2vXE~{WD24Dz$gzC{1kydq(EgTP{J>p4n z@ScZ+*@qjUQcC2NsaPPcpLQpk%^X-+DNcV;d6`wA(H-SOMChoksx!o1*sL{NNx*71 zr~4dTXY=_l^^s!zL8^J@L=5$bt_@t&3*k*cC2qp$^qltD!%{-T$~?{~dRK{P7tBSf zCg{gU0Y5Cdxtt9mLRsG2>$g>>V^!;AJnLwEDcM?p-S1vdHaL#_mr}2j21iX0+f2H? zLQj)S@xN$1LXovOZ~s|Mbsr$bWQ<{~LxwE|uv%I#d0(!y*6WXW~bv|7|!# zdtFHX8>(=+U2{}8Y(P+RDoAnaI`Y{)bX+Ke*^lOnkUE6-|3AYaA)@`Qm>Eo1@&ATu zvRz}?OSi#~>R7Gfi?HfcaQIrS#<*`p|1%u&|JZN{tlOVo8e;!X7!LWbpQSYaMOIx^ zZbe8}VUtvow|civnth{}1}62>EM8aP#eZL#gad1QufiWz5JsT!CW~#@8-}IpU-I!6 zS|pB+X|%c=wJ$zOxsY%w9?2>(hQ!W9KnAlyQ85td@C26?A=XkwDOLcYIf`c$6RwHA zvA29AAZF;{vIvNC@ijxNkje&KIBF&yY{prhW^V2qlfcC3i%0JpdwvC)wY9s+W~?)> z9T{YaDd)K}!C=Z}t+%ROWD5;ArJ3tyk-LUBvA5GSOmWQ`&RHj zI~?-Q%*Q`7AOFmJ{BNE4xO3n8Njdtnzy4=UKRfr$e`Y@Z{mh31*Am@fl^NB_o;*R` zOp6F?=;_wfC#gGQ?0(84-w12|eaBn_m)i&gyPu%t?Us`;=eX&q9SQ4RP9pUJ@iHw)M4YttSC4>8;CofV01Z zPmMzFmciEDypVw;K_v@Trd7?2nJzyHnhfeVc1@YoYGai2%b|eElV;#8BJyqP_HkWP z(FHNF#k{M+uxydDp-D2+o43!Yl|j#w*`$3PhmFCCeB_&e{MSx(aJ-Y*Drn)_g~GoE z(iPMky7jLr@Ri##IuZ&KKuxv9^}^qSW3_x+9k^%MKF~P;v@NSAL%99W*f#)N0i#eZhafLDT_NW_Nh-sEFsHk9 z91T+uoGp_+@0knE*nLIY|nH3`BgB_$i3_D!7g>D@q8g3qB$>Fh| z@lSX75B~5iT07OxY^JiLB=2oVqfTfc=>x_u!bvdP4j92 zxAAILb(fRu5Ea_dF6LBXQnUegKhP0$vn(kc_2F6zTj|7`P6+%+`%zm(n$*D+2Q7zA zmdYp|#9vsA@g8DF$97FBpP(j+R$}7X69`NPcRX17Chun%rP1B!16!^kxhkP4I{y6 zJ=)TQg>znl1Kb3TN09w~!NFcpZj%Uc!>+?LQd+n+DL@_DrDn>;u$9iT5y+DBoR+%U ze({lFFPTg78@?72Y%T@qY#v0uYdgLsMz;2gQD>x#F0dr-uTRXU$Cb|{NI_7I+zgR7 z$7^hv0X6V`g4XbNw3{8S$&M@syV%T^llD)N3)!K(O?jH)_6vyT^VrCZX;|n#fw)_Q z%$-^G49vaNV1RHug`y=yvSW)fY0uEBwo>O(#OU*0bZwOYJvK{Tb`m6Fj6wE=^l4WI zT!Y@DZ$OAcPAWecHU@2ny1DoGuS89`X7`0Cc7)ZcYnndwk=&!8D{>2G=xTLIC?cL0e0Q-+G#Lh! z9(IVCcAm(lvcuqGr^tqN+MMYWhQl`D%Ken?MDymIe+YU#MBXs99MsUd=S#q{nv<_P ztLpp>$S!m!lT=4?t-r)m1EPq^vT)HVzfAKpX&K@7MBFNNyL?G{&DYMr6VUl37VjQ zn%NDyBwOx`Y%DS3>p`|G=*!PLB8soOAk(5>2kVCDO(F$+Mq0a{0XwGx7w|9^x6Fn) zaQ|-T?^j9}2IkHA+54Ho3xi0X)FNq<1?U6g|HcxeoefMP~h z-uAtR=v$N~3a9$Nm(nbOZhtrvxE6_=fb|bbs9y9hb25r*c)_GWah|!!4dw zhUP2NFAw~BuZkqhG>{#U;>x6CjfsjYy&OLA1%5I97{ z9O%8lqi{J1<+ac^X?%=73{Q0~3(L9QAy&oXN^ey)xz5(Mfa>bfjZ8>Ha!fM|tzZB$ z-h#Pl&2jsxq}S%WI3is0ubJqmNX=8`Y%_+UBCp~;#rkQ9cOXV0op658FWEJG6=nr@Dp!p5|arf_?vsYFBKjNRweavIo`C5$TaP7qshZW^cWs zjm+A}Qywo+X;<2*Ud~hU-vfgl!Wz07ry>|b`AO6);nc+F+cZ1QHmp&d+s5vXL^ltwx>4BFLRyd7y zFf9pK2`kF+=e#k<(hR#vjTMQ)t%G(Q{jwKD52>&vd5zB}0B1|0D0f-XQto|bQ zs>VZ)@>z7%T=5)_&eoaFFARF^(gbap95MYVH6^7Wc1vey(!K76rfH1$qmdz4)>-`# z7#MuGf>QXx)ck;0o6`6$va6A!;0UKKO`j>g^-Kpl1XPPH^kzkE=P=tTt4FiHmZ&LmJ zn(#I-TujTR#{xON(r^5JPcnc|&4V*_U=B=--9QL4V|WuB2vO~G=T~E6d$Yreja;2u zqGTyj8^7aX;f}IcpCdJu^I)R{7<9S#ldjWlu%$cSwBDkQv|BV5uAm?_w>U;J^B_>1 z3rT#*RF`CV$NAptfLl#c`hiC+77a!cpDv3(d$VahwmHU~$2xJPTR$Gkfai zn;DTk3jx~0H@Q=YRp6MV@1HTUOOnuSgecrz$2jNpYAUdo$U+yCw+gy7@I4i^CFmq4heob|DJhnDUeTtLf;p9D?Db z>%{jt&MvL>ej(cFC5f@W(A9U(%z@W!k9+LtpvPLnLHv?!<$7wpxM*1}U73=JW^~iHUuoJ@!j~y{NDRZntkR0rqrIUt z>ia>mS8cy-{VEe^nCR@u+9kV*Aanx z6J0wiX99>xMZM>MmPh-Ni5k}6ut;6Ig^UY1hRw-E?yp}1a73+eS2Oq-lJnq!SV4#F zRTnaKr7!p`x*q~eCBNd>TrN%4UI`BMmywLzugrk|2AfMxzd!ehBw}{9F19I`9NV90 z&adnqeL)QQiU;q1y=DGe&Pr*sx|#FNkxv_KPjkBC9H|=S!Fh`jdRN$<+$J95;M58b zUrHBp=WIW9z>={3{czm6hVB7qJg=tJGSgcUn{xV5z+xxbq)J%%zO+tsVCNfMKUYj= z6bjGW+YVZMWpao-VniCW`rA?bWpG-8^I|9a>r*fOwLO)3?z!EwL;HJqh{N|H-g;YZ zm2HFCY}eRg|DNqrAaBqp-xz~()jai;-Zvs-QoQ_Ol<>=Shbk(S7o~xxI441ggZXo6 zHjBO5ptiCcNnh=G90Z@wryP20{e^dg1}2OuKEjS0C_KpKn&cbt>4>O|z+{LQ#};9V zR+n1NKmIim;P(v)R|X^;*~3+6KrOjia2@)lo4#vitnu#}42*MK{eFoH#w_HQXg|Y2 z);Vs{4RFKr*{MPM)aO2ira}k%m8dd}f81#fU{t9O=Y{6VwXI(4 zD5_XIfADZ3m&ESy{zdDuYj_FWBLNvUy@_vseO?t8yG|F%Md>V#s) zu8}GYFgS5^YVg-sXV(Bf@C1M*L;W2x;-A(W%Lu?7woo~~ZONR?m3hrarWgrpGK4b} z=p?@gxdb*E?42W<4ZiJeO=}#*#TmUIHc6Zm#CbSiK2%_S+qGvcFpaTxQ)i;d}D zA(G7E9JO5N*Q>0d(9F=yF&ZMC^2s4rTKt8g7sIPoA@2pVs+$NYi%DG|>MMv6Y}I>X z!8niv7^vBn`VmFIi;1D)Ef(**Y^FCPF(ho=_ISsU=ordfeovt)ghz}r7!mY z99jj)iX{C}n5C`r-}T=jX`l^ba^`I+w?OdnZG-UY)3tbd%Em|Knp=OBymb$q&U35> zdX*ZY>|PJ{3@g`-;G2RToj;Dw;@Wyd-1<@)#90m1i6lym?1_UpnW?qa(Nk=G&xQTP z;~0Le_P7#^6ggI1rX61>6KISvBQur*vYkFv7!(=#4Z3=BbYERI7&}6asq|K%mttftB}c zGX=)v(cGqkV8YO^y^HOEk)RlGl0^Sl2yW`Hb;#3D2pD?Tzhd%pwx0cMYlszloCCSD zhL7GcQT>)fo-d$4`9n${0+eCe^0O1IzLHuXa^*VHuis0c0_<#qf3iKgFoJukOu`%T z7{AQbpDg9sNXK>8*YTuiS3c^+3Xl1=mPMJ@2(InYP!-djk{3ziZTe_5ShJlaOT$3> za)?5aT}{%msIsq1|46a?px67it88h8K`s+92{VG@HO~=vk(ee+f<}O>z2_8$XN8{2 zcvxQySMjyG0BJQ<9<}T;(V**Sg(Yy9YcrmjkGjBQi-3i(?*gIVCjjX%aJH{gMOIF@ zfIv&h3A^7aW?5J}7`CS%d$o;v05?v}9Lb@u2NaCO?#&bO6mESp4KTex+OSPpyu#N* ze`64Fmm74HXLgs#o9@dPTunVP753#24$+p$%C&fEGAl*3<7<*OnC}f&ci)Xx#IV!P zIs-V^Djefl*1aHr6-YB~B^y2wx;c-UOzQC0q!m%(*Z4YY~t1kA6L1H6O;x6dtHPN3I(fPje z5>J~y)rBUs;zlchrzC8gvwWg+@E97OIhYk0kSl~eVc|Dz`+m|IR?dl@2SyOwuIcie z7qav@3}1BJlRa|ba6mN!ZTdRnK#Eo{pIlr7Oa(Mcv?O+O4pWZ){s6XW{Q7dc#2R&9&h zL>{ZTsH#Cu8P~#D#4{qkJ#I%AjNDi5guNFO4~n0ak*K}DT46_@w(Q3JF#*38WQ6F0 z-i};%i^K1WYL$LLHLxZRw}Rgckhi-30~Wbck=1z{F8ze{7{(Kr2m5n=NT?9)5*eK4 zmx?}Pd&7ovK&WsveU(KO_L)q>eVZ%lvQS)6Ml$TV0M7m{piokV7pW>+(Q~%1+#huM zE|~i440WX5EHq}+v#m|Q7Lm_rJ$Ucly%jxx%7OVbWtZU18QP9dk5vWZ*73#rM#AhR#=agG?ci)}qVf`35tAsb z*lv|k_8IGps)HN4_$ewACl(9%e3*ckuo#uYfsGwVA^P@$1YtZnm+tAIm%$Nv<>^TGs==%$?FYy$l%Y;uwSg=0 zJuEK3CSRENgrAxGiOic!i(ZP}g_({MUEf;Cj_n2OoD6IFF(&SUl`we_VxX7erphA_ zD*ChOLgF0c#^Rmi45k&@o^?0#*cg1Y;@u!d25HT5v`@pJlKJ-@$q)4zAjoW+^|S^% z76~iWzg`j1@ppi@Co2=&;bH(s>mh<6y2yHLqrP2=<&(y9ulPLSuL#SZCWbNQefbiL zLgtr@S=E)b4kCVsHKC{caAR;<aVD<{cv7T#xb~~Z>7q&3pq3X7^g=LEjNg2u z+x8=LXg9R{3d^s{AN?snk)_CW*acizg_rBT97NcIu;nA*)-3Exhu2|<2|6F@Lb&4q zLn$*x$TXYXZ7~b9bfr5q_e&NO5nAEnrwVK3zAKR;JWM5J=czaJg7^qGj_Ib8$`a-n zw{v+Ir3xiIevg~%hLgW#c0>b|yk_8C-qB8-$Jc9-2UqG_n%)Gn1_s5HLfE8VDi@2l zAeYx0)X5<1;008b!bqW{EFu&zV?cguaO-mONTzg=GE{b@(Ew%0yI;fG+sd|VzNT-H zh@N#s-@sQ{e`;6%PAh>c<*GF;&uQ;avd@<_jPJ}C%AH#{f>#u7j{M`15+8ZM086YK zS5JK~sZO)YS4yf7*@BJ1BFJ!ka=Nb69T4TY%^&z~-SSQx#Z)SH;MaG%ZbMP=CtxN{ zz7znsq2P(B&L5+x${j^}FckU1b7Z!|oeEzR&)Ckc;zLpc>aOn_lyz)>m{1RLl`x&o zy=-f(WEV2+dI7(l!I3)bC4ED$I_Z)XoF{UCe1FX{pgXx0yJ!VgYbnLY`5Uc|re95o z@(;ph5R?N42#eDgHCC~G`52eVLI>39?4I|TP~5M^1WOP zrb9Estm^BN+VWYlJfQc>?>dHD@%?u1%Au0yvRQa(OYDS}Ub!P`L$6p!dmf%YUsTvs zY`k6?mm423SSvYuHv9q|oa`$4zj4x&P z#`$z~_mhe_x49to;p~L6SG3>>QYFFh-rX$yvf1&b8|qsh<<$Ztbm`IaDP)pW`mIHH z9e!FcxqtijIEk7Z?elvLy!^z-b~mn8mp_7JJ{{3(E+cP54)r*?j393ZQC zQQs}UL5L&X0Yy0x;ni{Le+HRhO?mw$O)#=}o)@`v@RHd?*)%@dIvI4O9E0?Xy~TSy2d@IDK$tHS{~pJv^#pv@ zwOQ+M7P1fKZMy1~dNS`vK_QN^6h9#PyDk{2!dT}C(TYSqT`*Z6ot3W(`$zngFyKM4 zS;O_J2rnCCWASY<2D!bDdt~=$`VRx*Mh`JS%WGApG-Ytj%rrFd(|9&7SdZMn+2PK< zKkb5*58*TR0uoSmO2N|cAx?bir`mmP_mB};Uu@G+Cf4#VfYm>8Pc&s{p;Cm2u)mjp z>d$m12TIlCovJzEfybC^qzMrQh+OcoCfegl6M#@PgOib6{*pB6Uub~6uY@H; zcM>`*mN#8^0aB99oLXX(Wa2qro6RmiWaj5+tM7)g%n92tsZ*h`EXMIO(IJjGXD-#= z4?`*LdgW3J7`8PUzsWg~fWTqZbkRglLwZ=k34wXZSR%+;amEH^(qhy zxCo>euaaw`xz(o`wJnxTEB~~)%NC*CZWh$Hp|UCJ9Wb&F-o#fU%H7G!M`NnYkm`^B z(M6lrq`69VW(PI8I*Tb}66Pp^q8W0vR$l`ND&mbS4?cXqp%xO~ICNCf?YD8C$q1+@%W+;?T@$?5c7?EwlFX(SXq zTW-{1R^eazN0ve0mxK59jkcct>*fuPM<52N2QY{J5(nRYN8~0)g;7@`gj;2MDgN$J zmiH-~j<>hE1yfkO{)2!|cC+30ewmJU_g%#Y4fkKkkKyy$X$TCPp_+1B)G*^{>!z3x48 z3)x$ad=;-vqg4zMFemdimKo3gR*iCM@-zA5rY10b>(A1pNuj4j!$xs`&%g~IF9#XW zu6LvS(Mq{cEXp8fSlPf|{2{yOii9j=`knmx)ya^_{n#9VGG$Ivw=Puyf&jw@;?to^ z`9xy#^4sDi&EccRs<7uMwZ-}GOd`l*9U$+`KP4snTBnq2j(VTjTq~y?U8CJkoiw^Q zO;gYmu@ofF!AVE`WO60gPP4o>44AL_kw z1E|h%)Jff7)Ga^30&5kX0&NSWWu#qM7HId|u2K7^WGTSSuw74gV#)17fI1v>rWPdM zHh#Y~sAG*yTfYdx>U}uDVVW)}Ey5&&U0XQopr32tiv*~cBAAvJgX&hni>)K_IR4r7 zKU<{97I-OXR5D(I-eAP%1V=cRC z?EHBTmL?l1H5d)L%VhGMuBd>3_ub1AdMFpua81!K5{=KNGfghr3I80QvTfZ$Bq+ub zx1DN&^!vtx_Cb5?s)nI%mou@~neeWGpze=Trl4ux=a1s<^IASmGkh7$N>ef=PWZiA zWO(d50)SmS%JsR^JoE=W8`mt3s5l&EO20e)Gf$a@0UC9XR;PoB(lxQ3Ph2tD&k*?j zcODaqsOpOMArNUN(icMb{&wAPl1|cpeBAsK8CqGXE-hM9K z5v+;>@;Nq@(59#EOHl!Wj}2#~a6>>f+afsCb-@7g?7PEEPitpYpRn?tB?)sQAi!Ph z@ZH)3E+iPPGc<|3-HdN-fL`C-@F~-}A8XYmt!lK5&*$OOp+bBroW<7=HU#cDH=mvl zpO0~i$r7M6S)x*FW;JjL#AT$;6@H6@J@-LCn-KI-^1H&&{b}#9kf6fy01_t(o6Mc= zJM8+`xQ=4)rpX|zad8}2{??vFV5{w;CgVThuZl?5^34-TzhGn99ZX-Lp2U9h5RkN` zeHp+A*p)puf zOAqF4Yt87J$Q8Ba%)+rgSZs5%aUz9v49+-CxrI7l--e z@~d6)F`s(vUlaji&rI^8%iJq2@tyVEmB$)(5vsqv(nQN+wl1k(EhEC9s!vXh{x~XQ z;$_2w>Af4A46wsLuyDD#4*|nxYuCSs;k{4AIr}gF{uqRmhFx82JpA2J z$)6#LbQWIUNkBw?sn!j!{k2sBH{gNAbS?N%Q`rLdxmBcjSq_TGezY7 z8Ol|3=4Mo9pdhfrOIARWe!P)DPyFc}SLV!y3fZlmkpf}Ze#hJ}H~mJE;vfN#!?1*E z^o^*pYY4eI(t3^OjInUDeW*axuL6*Mx420zjRMS8n)8Htl$JA|H9HO46pJq-T+F)1 z3sJ-{cyyHjHGNp($chIS!venElqJq}{%|1K6E17#>h6^zA;~bje;)HYpg8AhhvsXY z$}sFG?E`C3-e)B3!(xGLs9FO(#q7sV(x6fC`}0v21~YTld3S<+E4fXrOr!Y~?TGy} z44=iD!NT4+LqJe`xr7+CyHVD`4s0r}_ice!ojbeV2Ti8kl_BZoU49>vkA-;atU<(c zS#xZyRIPA&Gpm17sx_jKIyW>>(dPEi_fd(gx?$NoUv}j?JZ=eMhrU1cCY3nys+NNx zF{!2B*6H$l;0db5F7=pkCyOKxP)e>p5t1)<_SSZr!5%Uv_t`>YaoCaj384{BhGF&1 zLfGhUt5FGEPLc91;Y5~d=nn`-T%6S8B;>^SDt%jJ& z#NhUPU7xs1Mb$)CqiAW%0S@QCV#42&sA}yKi5EQuE@orvU`TXOo2mrshpA3 zE&;HJKW(FHc;U3YjINP`F6pN`r#)C26FJJ`+WeUQx$ON;6^>q;XwsOZ0e0Yg!<~WG z2c8WhGNIwXhjO{A2y={A$|89NT@8wAsPdCt&F;J@nU_z5@$-o8kAO?&W5#>;K!p88 zKx2E1z$TR#?PfJCcv88Gjo}pe zmCHftT>Cyi=(dvl%N{A&YfYJm_wY%&R@(LQavs%pbe9%Co}**iQFf#Cw=s;Ge|qzo z))e~Pu|T8e1juwnAW1llKLksi{DRV>r5DQQE4kSr9$fylC;6d@HW?Wjv8@7v2qBz* z)<9Nc5ep|bE?iA=A3iCh;1H70f0-N--dU8QsB#YTXJ5Kw*qEZa!wDwE)GOfUbG<~D zw!ij%I3ME1lu`zo9}W6-b(%bMJSae}c|-R5qcO(BtzzgS$=7iaZ!S3iII3s9Z6=_% z4S3T`$5VL3H0=?zIIE@kJgQ^tz5BzB2t-U1I7zwvwLNIR)#UyQs%vP7#HOm~mb&(2Q^7 zvlQFB0oP|_h2zTn_jZy5LFC7dlL7=H;9;ar zST4>c7MciQS+TMMz{GEx_UqdxkH2zXvVjAH{f>4V*sGv%-`QXf$R$~h;A^+C*zhw| z^02w~`cvq^)4omH1DWe_Z=?d-MN3ym$Jn@E?UWv2UkZ%kIE~QIKK_Zn#n*%Drg}Rv zp3U_E8?UupB>%cf5@D}OAyM%p$U-B%10{pWy@2MKU7IPX?Ux7{sQfSRB%RJ2-#LjT zA(=+xutq6$WQZ62W~ze`nBi}E*SjT;(I^Q_g=Xo70vGFi(u3JMoEz`H#b>O-aUcs{ zPP3P?9C>z-zU*Xt1}>TJ1Zf#bqQCfXt$p38F$ss!t2y6GPU^dYq?903sw1)ySKhUn>Sb-Nc1kgbzVX2&h)nap z|Fsr$-3q3she5dr^+@HV$|rSPvEL7)usR@HXmb|tc}oe}eHec?D}hx;y26Xob=OVk z>0%(wzwO<>BQK7V*#4jtm{a}l0q`$qXd;^$w%1tqyb-_bL1J%2j{wr_Jd{OVyd6c}MEAHb zKSCPaL2T>S;r9%iz}Fo-<2SuCY^FM;FERNDG(6TwEbXsyg))q>ZG_*oR)kUo9CJn0 zTRIwq@SZ!PhO2(8vh4~icd z*d{t1b}c-95x}rDKh<@Me@gF091huTj?#2wHYmN+ZDo`7Y>iyV{w5wE5k9&^p!PPN zb9^z7D+hI=F)d&&Quec)XhY-6AtrX!;*YWKv~f<9d(!MYRkG0`^*Z627Fm(vP_iD& z73;K+g0>1q1zc6`TvS-Nb7=zj@zH0wSp@0=JJH0WakL6?c&d4Nvx6FgOTe%EV{41> zMnI)ei#NH24wyt00?NBaKc`e#kD*_n35@&&Jn{WuiuCr3_@dV51dRxj1n!FT7^iD4 zkZHW)W$OzHS;?ZBovEe_YE)y;@nv(0U>IN_+t+-bstGBeH^W3WO4!42y&TM|EaZEm zVI~7?K3|Zoew@C?Sm+NJvpXtIHP2t2^=9vzXhS{|e7c}j4@5558Z#^VUHP}U?91wT z@9?pa7D~SiWsP?8J;Q;cB8&9EirnVS4rGl=U^~=6MCU34FM!yO42I9gI3z3g%=wT$ zIi^$F7^9QEh1qi4=%y|4R9(4WscT%OD=<3;@QrV^7g~dLT!>vIx4oSxLO7a^}J-aI`Wo&ybsY=3l_ew~!@C%KUk$D@K zGdD{r=ca~hb+<)^e`CP9vU}HG$R(BwnwnproaOPuU9%{DdS@7dxTC{A1gKPwfay%fGZ;ke{`5f zyUuyrl;@rKY~D7GAnGah$3i-u@Da(BRkB7|2^tj$)7m~gR!H`0Sk8<<@m^)LK3byTWj(F<3;l$xazRXcK{h_X6|uhn zpN%F?d>=Qza+ZMoP@iE2rIWwT(?JoCX$NQoez!lMa*_&K-G&wlC7c^ja@i=Tm5qXL z;ai~~+ zR2ZM(g1y z*7F*rr&Y>`Mhw6cQ5bY zO=r*x=rqr11$8`V-=p+fSS_1}_B0{dtDonrvFWJosJI++h2T4F{uu05*X~8p&oJg) z7#FcX{Cn&WNKdK9wN3`Z)C&dp1!`nzk3>n2w)*l0LJG{hs2`E|evei*W0htp^7)*w zt-7Qql}#(Yizg}oa1AT;Ba5P7C|li$-nBqmf_{fV@!R13pbGiO;1r?60n*W$UeR-3 z-WXyIz!CCQa}8e^+s@nwFQJ4h8G z?F5WJKKSm*)AV%h&D6_y|8iWK(b$D6&G2Htv+L~sy%_W1Y>5d5G)9=@DWc-|3p}QA<4%aZ z@=OG9N+q1VI`wG-c0h)kBI1}i**an{W)qC)#|#2yUe-<#ljfbS;WqQ5a6^qxy=k-~#G^-a5dCxz(e6$vhZE=318}oU+@sh{sR0x{D)$XI8p(`#P2Vvq@|7?s%!yCPVyp36} zZ9n$$g9-#&;%{P^TFs;IXDT@YGY~dE;^*mCIdkVFYc`n^gkO;|{U-$s4I?*yzaLD{ zFx|g%n500kb|U3&P*cs|8$xb8$h4eTXFU^#X|p~MqW^|m4%q;D8WZR?2kuz9rFK#c z?lJ@s0$vn+;(Mwt_t@Lgej(W1TF0k(cXZ#$W9Kk~L-vUi-y^idY!3l0`WEoiW4(4G zZlCm~L&_ZaISzK@dqQzGO?-E!-t3oH=NRC{)BIS?5KAFlxVN3hC&m?BYpvW*!BKTd zYmu(t0pS!gNbVx{h|4)uc@brjQe_2Fj)#NM&t7R<`W5E4`o>{)0Br!aSQoU~{n&-X zqQW_G!&hR~5OXu;0$nE=OOspeO=`wSon|cIK8I`~jWZOIXXCJPu{c8<$FamSv+^Ly zu!2Vr)mPss*Ibk$8R~Ik34(q&gfjGm{c+)<_8tsk5N*Upr;uHIfvIXG5lN@QR{vB3 z-E`2y0J8-rQac}Ses$UKYdmOmnF$+7l&*TO0`|771(||7xNCWXv3v`fHP!0AY)l*< zdL+w4lu^Jd=wdEm5C{}uCE-L?42w+dZ-*YBQIIL^19zE|=)B<5?!x1q!^-AU{+F>n#o60#_4F@TO7Y(Bl7P8I>NTUxW8T5*-nA6@y!qy2{3Y zdM&pg^hce({Irn5?9M@~{e6p%z*c>BDmB%nShwOB)cQLzorhHmQFtxSc z(1IXMB@_I>hEn)O?PKke_$!)mJh`9^vnM3)90wjX%cAr5G37(Demf?$Kg_$Y5k2xQ zJ(OJ{(0Td7YXp!#AT3RB?o_c-9k#?Mnj{-9x8GQ6DHLb51828~73qP}0ge_q>O(_JYff)leZL1d6YIJS|R@p%1M!SrpWK{ z!Typ<0k5AvpV^vnJ&ncveA@5X)A`P1OrCnA%X(~rb?jkKCHA4Ud6PW^x8W(z6ayji zb%)bwi4G%Q4Rkn-2s>%MFD~NRvxJ`KEPB3KKE5#w?}+W=ydr>7oAvrT5q;t2A5Fcm z!)4vd@}-aGb@2ZNl6N;(pLh@wGj+`C@OOQ|;-KKQeL4QaI$!ZCoWH8{=Rl=ugw-Rr zks*98W016!Wms%F5#ae_wOn0OIh@ntS|jv|>xCm5$LP&XWr2oZqV2G6!PYa7xJOG* zW_)4bGe|i`4+78Xn#t4oOoTBK`cwCqi3+V93VedAH^{%lKf z70CG=yAQ|i!0>s_NG0puzK~?E&znPWtN5VY@N&>%nrOVqyD;3WViYK&12^a&2=<)< zp*#2D7ok1#6}!q1?{SSjkMNjZgJqmS{k|@fgz+5ro?5t=bu{JeY91d#90dUVcKEq1 z_@AG2c%XRFm48@rQOdU;1!zR#X%m`>8qIk-CM<;+QD7i9$+<4grS#C?os&`iUW^bU z5;Ajbu30TZdJquxVPAZMLK~f~VFFpyVsrY-!#Ihzy&Cr6A$W7&ib%BQsiAO~1X&)a zyEFUb?s*If3Q5{>YJI~BQ-25A|5bf?4b2|%r-_Yl$PPdu+Q6Xfq)vD29bf3XfuUcd z$gi%b&9FP<&$`n)z+#rz$o$7AoX!<$00{b4vfw@rKkWe0+>)I=4n;xR z{&`-)(+8&inYQMr=`%q4H#EPv$n)tLT3Y|ned9;QDKE134V2bn-~IQq!+;`x*?UW! z1V*husOFlnEZ=C?-sH1KQ5Rt<5E!=_(V~FR)`CfM*|xMD9W@U>5RmahH&6!FQAQL7 z`XV7{s3g$EpO8T!Z)EAs*ZF9=!5;RRq;9#Y_>GJ-bAD2D7^JBND@*Wc!AC~#rENFmGS~Hqm5A=+E`Wp#JmajtSf{9o z#yay(-UA%f32wY;FMM z_qBq>3w!0LOJyDgsZ3ZP2<@&c*z2bf0{-||_F+2!CUfP`EBOedvE~^v?Ngu$6|_tA zAzrLV^H8g9ZC=5&gD5}Gngqky9_}w$F=zut$ae}35)JS;WBeGOR1{@-$)86@>BEFO zusP2(C9#poV3^;@5+%pW$&|$x2VsP&VNEum$XTpeEMh*cdrbj;duJl!$62QK)nHxfZ3 zy*zq{A%<6AI0?M&{k7Q3Lq`Vhh{(d)RBCbBNk#WX^R=wk_eM=F| zljcc3@q;5l`@tp-Q}jI-4QV#wGg_v$p=Jpm%wv`@9!2?`3*VlAbXEQ(!Z1%+nH|6A zs4L1QT?$`hllPh75sjBaKRfEpPQ)X(Q6v52FGx$c^|^l3%`1yS|0K@tEGRa|D^;M~6SZZ2OgJu7`Hr<*RDDxTzYHjz%3=s!^^Y$Z!fk@%en< zaHDC=RVUGfeJWvTQwmh(2O|S$eygqg9zw^FMxj`cx8&TJ8|7Yy!0y#6$8;5Fms=_x zKo>5Uycz-cTR{BD)1G)X4W}EdDk2~*in;Lu=YDlHDY#Ac1qx0WO6g9kcFN$6-Hj;c z+w=vmqL&0h0tLk(y7ZXx$&DL8jOUc>04WoqgS}!Bh2JfFncR%+Jr2Wi;r!1DRG*pO zfOU-3!V)NhL4x2>`hv=a!@m!A+v*z|EqS&(Ko2p!eS1(&G0OzrZg?8gOB!N4>khPj zxn7rm((&yHLSS=bvjVHv1;dNk5)jcKNIdf)ylG^*e(!4pwFN{V2Rt`qpKsXIBk z@uuSpA^uotwR+8t*i8fj$(|LBv;#6PDzIOq|x86x;tnRJcjsb%;RMX4%y38s^2H3h6raK zBomJX0LZ2|$Znx?B*bN5lyKB{(^)7=Q?I}Xvsjj4I<(6_N}HP3aBJz_uvC~(X6@y5c5JtQX zt}1}X66~8ickyk&-V803{_y~(Hy)^DRdD7BZ(%e9qUPLz@PpboV1Hb}pDm}gcC)&8 zu57ubQhNiZPKt4D_-moY+TRhfeQ9NuvM9v?qx}DvJfu8My;7WWe0~Ev8;W{DJhEp7 z(LFrYgV3TADAfTAX^j!$vK0_EBL>#rXg`Ofj6cp6vrTL176#YxEbl6h?&6y^5gjF0 zij~N~(s%?4#jgvXC`zJ}=klf)uzR=?N{2ydz9p*?#XgxsC=a-PPb1iRXDgFiIVt#~ zaq}rK)4=UPeI;C-k|c)re|;(!MBCyE1jypSjh>(yTbBOQE4M^_-sfBh_{WkoMsbDy zVWs#bB>Fnc9&ZvJvT131^$K&0DX2@{2Pm9+_M)kq)>4+uLidyr_R@eamD@kHvB{k@ zH^SB*+=zcQ=sv$9*^F{ICG;(gEZ*iPV80J(xR1l$OKPfmu(xP#!qfGe0(Z;zLkr8g z#^&rQ8|np3AORR~QC+C^ z8cPrRO$%&?5kkEAP~^Z}IYB?-*z#OgZuRJB{;Jj@@f|+1P5hS3Z*+{ti)Q4Mxt$MO zCHpE3+l2&4!^?*cVsdny7gDuW9K56GPqccDO3jF(Y})d$m+1T=%asW1U6oAa6K$&4 zRA0eH1c@#LrlSaZ=v{i2!`}_wGa!4(r)-FL3S%XexUM_3yNKWC2>46A4KYIMb=3Dr zAl@AqV9XuGWqz13AOF(6Swzl_T%9amCu1$`1?(riSVk>*lw^EZ4srV z?)|?(syyM++{&_$MQs6O51Kx9rFU?K9%3uBc{^q3wCMhd~j>3~gvQDXc8OWldM8>p{#pk2dLi;WuwW zMa8o!_r1@KH5Z%fd*9ewPYW@ic&o$DQU4xDQ z1^5e>?*N2LuTN%B5wEnu(AB^mf_RZnkDjK5s`#x4>mq>EMw2Bu!HXk&h%&lI=Q!m1 zRyv21W^<05aO*68B;9R_G#M&~G-u1NPe5p&IG`lLm6|&zI7;2!cKYo1MULF{wwZqZ zdfpE$&O{sZegxRUdqfSRwh=b19fM>k=VrS#!$b}Wz*6|Cd4ugB3*_Vo0?#b5-43z) zbg_0RezNe`5BgR5&#J!kg(YTFP03o_-wYJAA}M=piC7ZE-H~Wrugt~#Q@TY#YytEb zyxO*J*nCG_1~{h>2sN;9>9LRvvV%l4YzI;tWXtsMq=8BXeY`o5^-)x;tDFGSO3#_7 zgQ5(6&Z(7~uEvEf?6>m_sM6L`xnAmOy6iMxVaP6N^jItvY0GzuKAwkk2^H#7%}Iv` zYp&gJ&XBNxAQ8En!vGJ!Nwyq-s{mhWg(>}>G~@Cwjs{O-)l5-PNHR~mX%J*{p(}bk zc8{VhkI=brZBo$ye5<@@G&D`-=)Q&~1QU>NJ?*f9Cv5R)u4I?=*FrF{{v{I~$GL8m zRq~FRb4u@O1T$&{i^QEDr`xMTO_Lcq>Pk-0Ojo2D)Y%c zNT1VvlOw4Y@)4RD?ci_llv~Q|!dtjgJbve|c<~(mJuH*sVqXZkhG>A^sIT7>=Rvz3 zQ%rNzjKJVRU~9poNXcV@ATlzuF<<7joVY-=6&No0nuxZFMuNV+J@%5R-y0HT`yF4y zb;zH{h{@E|nIVKa%X%7)IV5$F6AJZZU5&$n)miwk*BWSnTtbpIS0ou!Wv zNY3Nle)d+&2wSoQGkuXpM~BhiJO#I3dm^8#jtnlZPZZ^W8U>Z!Gu`l#b`-tz9STsY zO{(5V1GRq;kBU!UuX*A2K2f`uyr-o9MM4EKuqozhjSR3#mheRAN07uW!HO=SV~Fzp zBnad}z_ztYB%Hd|{%)QSzmfk`PYZP3Id#t%3gFP5^kgI-5c~P|PeuYsE64vAC>_nG zdyD{CwSDYqh8SQ|zT!%7y7DqWF#N%Otk+FG_>R&kNa;p#GeuEjPIs_>41RUg5Vrhm zz9XxWpBTG8rZ@&1d!0(-fZ9PF_&Xn}OOI`k+SofyXd2u|uqWJ>Zcpw&FDeV)|EM{3TlVin`w zTOI^4df&#cSh$kx&oqmdx3lTkv)ReFH{Bi^M~5wn@E?@Z`?~>uEkIeK z08{C&TvdgtaQqtb1SG>^lRtCyE5+l?``n@*vsDLVEBD3DQj$VldESQrIP3Ft=E=5^bVv*&=au4=y@o=IC z_AK#4?3lj!@LXm1G~L2+1_^^;61g9=RYFAhW)1BX6`+prAW&I1(EK{Y+D;e%?;`(Zj?D0$YtcDx}W{qu3$;vuZg9ipc z!czkJHmt`-pZ6siyEo|IZ?pPAmwQVXswppprun&D84Fbs8bZu)gRzOk)k@B=wgxhv z`5h=uejFOl$feFLm$4icoCB9ctE$$#^&4s=VUZr?6}41O+*^*JfpJZu-HUI|x>6X2 zDXT>7>OflZ7^Ds(K<@c@Vj!|GB=tKQbxv<8v5U{u9feD?~*6 zsCxzPQ(vv&(3ApPe3u9fGY-!$!0GqOJZ5Le-Uf>m?>DXc-VISilpO*)Pp8(}{;yw`{7Xt9wu^wV zA*TKLec?%-WMCNmQxk#JbS1#?ukJ9^>tuG@KnP|V3UA6wfcetMxu53rUDsNv(l(YW z@ex6bDC$iJ>gah9XWz?6MNwc>EP&77^D6)eDyx581=S9YKoZ%t5xhICH0BKMf-IFk zO3sRnzX*&7;W9%o{djL&v&Sy{#aDvH@L9Y&S^%EplO)hjs_-&);7a9|k=?jpV;R`? zaEAKiy8L|=X$40`VE|cGOLi4pI9#Td^*>%xsM>nhCG)wpuQ5V;%e>ls2CGume2vVv|c-FlWnD`C;}>LGX!fwI6M5M)?gQ&)NE{&{cIFH zF!vDZ=tRo1&-m=$G=^6_Qpy5aCpNt=`77ci1vS_wo$ikF@KQj)X z)!Gqme%w2V@vqX=ZrR+Ue&+`VL!ElC*Y<3h`N?FjfBMY-3W*!PVtx&#VT8O~4@T#t z(y{jKCi-%Z2I;*4JkZpF(%W=_GfGX>L4n^`wxK01-M06=>97jN`h&}vvw7ch4DDzn zb$4f8Kdrt@he%KLN%_D;ebYT)sk#GB((4emy zx=w!KPdf(RPFcY!+%zowx(@Os1Tr zjlmuxeg_L;|HuxBGqeeV=Qwo+VK2S>ht$Ccfah(FsYxb2S_USefh2#6&pW_mr4lt6&NH$A{aY zf|Fev-F*33>hm#CiV)1T-{iX#&c*YUy&{Ko-=+j!rxhu76_aa{Lz;N0XYb6G1_3S@ zAF^yUD#lqMLc-yjy{1Lmo)*W)r+HM|M;{C7b>xh~1VMjDU^^fp1mAy1cD!^em^dZtjoG&HI}-o^7H}f9Vp%oZe!N z4RcHmOJ`Y(nI|e-g(h{SZbk2;<(BOf zot91D-CvcrB|)PtnO2e0QK_$Mebc1fV~PpfT0LM#K9^V^5fi-6q;J+HcD{DKBrf{(j4QOngx>&_u?D{sa*gaj5)^l2uzH z=Zjq<1g*FP%pnLXoV9hx-RY^NPP~7|40Q3`;{b`7ewH~wFJxQkb!u+e)*59F|F8e` zxvRViqkI~jf>>bqhw*{ja|pZ15)-6~DL@rM@-9(oY|fV-wi$Z?377lL5Pjf#X&-vm zqr8zJ)33%e+GZ(NRA;3Jalfm2Tn^|YT=4_wt7@f&)SL`3vuIUQuaV~idFT!)w;hh^ z9hOg&DlZe2s`3B(J+tVekH7zTnCRMfa-?d?9u|IbDQ|d)EtZxze>Z_-RaeY7E}L$` zKH0N?izDgnTPU8hQ*8!^p_Lt2gm#s2 zNm#Xe6MSXb6$iER6a3@gQE}ODb;8azY*6bLC63~{0!)_*YntZVh!oigzsZ-leOjaB zlgZbjHm0U#mMB(#XWO{axVZC*ugyZ3W$z)AohG-ZN3k6{iDqHmsNQ+`Jz15uH$O$| z(L!{aG_^^dH1RP0m8ne9fu z>Yv^j!Pwa;HB38KKyX?JKrF!WBO>&YvbxWwu{VXOqF@ZNax)mW z_x!U^A)wP2rU&A3wV2~sCpd1dgoh2#{(mKSl&f_??&=8E$e((E)Nt;|%b_N00ohp0 zC|CnfP&@V!&R3`{#o@)5ld?XvEBMb&76ZJyY3!KxR)4bOOQqWQT?CU-I~+$`21bO# zjr-3IO9W&gnA)m}c#2+&@r@M|14nE8CRT2moS%OVY4IBT%V^nuD@@q6R`|t`fJo+m5Q9at z<8WdABqBdXRmhRf;7;SpXJRyTese?S@b4IMHjrX?8w$k&qtua|UrN05X^y(ph}{rX z^0=jpLZw)mhy3TEjBkHO&~EGNWVAT0m#%Y+)tC1R_7Dm9&7V!8SI2E=(5qxiulZoqzV6 z?pZM~!)}_U5)8{HoNt5!x!GdscH!SO#U}J(*_9%ceS{HAhC>K>`QcTaO0Lk9|It43 zy%=g4O3jY$yhqp{dG^*k`p-H&^29peMnZcjfGsm#mBj)ZF}vC|utXf5nd(9tOgRZE z>&+*=l7La;N;wjO!4M7l_tK!F(xKJxsWra0SWLfl zW!5qn<$m2XqjRo{r?;Jaza{W5=P%`j{4OrD>v{4QUF)!d?}GFPFtTZmK6`7;>2f?;q_CU3KdB#LTp|FxOP2 zNnh!~x0=QyFFD|2)M_fAJn$t0{uw{4l~I%wp;>1-5Fbj^b|^X@P79+{Bu^Nbq1%yG zvcu(DWH@xstE$>)uV%Bif=>t&EJYYus}MWJmw_R%we=PETWaA7><-#(i_*JC4?w$J*|*pYq-w}Q)$GZB^H8o&CE^aY7-RTL?51h z2<})@P&%c6HZ9D-Cwg3hz>yNk^P%5AfQ?V-7YzR|JV3rf0I3IbUHiVXdE~;xj5$GB z&A6^xALNl1k|q!7S)=`kG>)=|eJEL;wBWYS{kc`SSU;Ko}m`!dD8tPhC zhw>Ov`WvSx@aR25$ZDXMUpS9wiEmlZQH_D{{YFg|>aYy5r`Fe7CU^Be2fT3m#ns5D zKdfOcUIi9R9M@D}`}eT|C+fIh4tLE|k(edg>;a}`%F7wTbs0(R+1&hYSAU{=Z#Eot zwfp}Y&--@6Sd-6k=yFPqa*J_{m;V_9vf?g*vG-Q=XVj~?OLUyY1JCT|i2(I-G78GS zeTdBSQM}&&ZVsj~i9G3^c-hR)!c^&S^g+T!Qj1G@BMiHc4RwcD7QFG_2VQ$0BPF3! zm9)X>l_dhyouS>w&!#C)S^wP&8yi+cO?kMFSDhJmw}8{NrG*PGJ@rIkpXXmw`YeOc zBmOcg0cxz)QJywO*hTq8k~C&}OG24Ia#YQ~Tpof9u*t$&?Ut`51Q0tgwhy-TV7)p! zR?au-dHx6&a7lg&Wo{8)~1~A0xQ*~I^wM(6iyCp5O%kKbBK(N1wI2K~s2EE{spS2Ezy1p3( zU`uwTTcWQDJ#T(zy5ZACw9mS=6Y%t30)>l0>}MH9nG4?JJPv-n&E4jPlf&`l99!T(7Zkh_qIWES~i&JoNbh6na?Uoyq6;g>6)gS#%hWVQ`V4vg5QC?M*BukJ1@(MlO zvuw%)5L|#&-r2BSvI7e~rh%qFaGu}A!imN3f!#v=Rr{RrQ5_o#Oxq{~bV@+^B=SpI zGw~*R6h96Di|e_>jkZCQ`@_u~WO@7uL$tcOt8w@T=|`CKS9E3{X&?Eu_%NIrY+m2_ z%B?V6u~>O%3+H4sIj8)H4pT`n*WmfyFay~H@4U8^i+|ph@f#-d-XieEi#r0e{u3P*6W9|zbw3tFH=$~8^dAbP`y&Q1%j?;A$Gnl)AjeD%p$B4 z;@BV!F6NcrUwg+C_WS;wNKfraD~1CE&BLGWhs#9Zd}w8vMNoJY7(_$3{b_z&FXx)L zJyQTg@G4W#kKR;CTpRL4AYo8^dZ}A7e#Bnrdr~BYSsfO8>=>JyM8Y5(zJZ%+)w|Bb z_~)kI@&L)2myd>O^e*7Yh`2K#BTmEubHKR3PMHEr;){lh9iTOJA9Ek9NS{r7f%6Vj zyUe1nF-hP!!RJ+#8~a8~`imn4>=s6+F2k?@c;>CJdN^4$q&SlTXB(6p5Ta3$+65@x}^W(h@6(8ewR? zJr7T{eZBc*YiUe=Dan>N{96IiDGG3*;bl-ltJ?DT`l|WzQoj%`$1EG$`H&@`Ih_EOr>ki;XkpeqUke^mYuV5M`qqNNmQQItERw*>vK6hP}IeyxOE(390{I ze8_U0NKlDR=idC-lEN^u$&oh4{8w&({=P2&ig_HgZGES$G=tL?;B2ycXH~P6M{aCp zE(*&`uA}-SKAG`9mXHzusyN~S%w50!@7B)sc)~k7A7Hi{*>bZRDdEnesWYQ z9^gj;t)x{BQX-)RAuIqXmEvd1xFmF z&p`bqY2KO*O#&UnR_9ZHIXqC1fE#AEzw$ZN2L&=Q3fSqUJ}M9dQ1hBYPH-O-UT-SV z-@H{ab~R@ycr_YMWyPu|UKbJf$HpEuhjnm*>Y36+^GF!?f@h?@T`0dSaWy^se9K7* zP1!?ocZMwZaS=*F{BQrJ&Wm^C+;eP>capL{coWeiqZBPw)C_~-1){0|<@5H#Cw&hc z6ota$^Bezoi2H_(Pvk*I#apP@2Js!Xmw3z5To|@VyWdy@txPcnpD}q(AH7h!54+Cb zEIWN;Z2>?jhq!x9B0WbblNerl8RJp*S#W8|^^H~$BT}y=_R#R8lh}zLNg-x}jsp%| zMMpIHzEW9?A~GS2m>2zgLPtck6DMOouE8j0ay68y%~@#ep`QqdUNrlBMc=0IjWUGF z_~MK=^QCnD+=x=bRTJ%0g!tF3^;Lc503pyLKvk*A$x}_#*bBNA>)kKTj?;@7V3+UE z5Vj;@y!bZXi+<9NNE`Mn_Qi3*jJV}S7FHg)+*q7+6 z^14qfrLz2ax-&O%Edccj8X6yXmU%f7{2hjM$8ZJA)yxgmPe*y0k=#XSzvC@MH76zf0RG)-TgMy7O13Jvg5FwclpAmQ+bf5zEz{+Lqsf~>Q;H6-Kdn4p z+^5OXWI4V*Q(LP%4c&6Uq*Q*y)a0^u0K!6w3jy<#YwTt=2R3c0t%08oVgjdwY#6_t zZ3p1|%a__u34>k$$dK;nSIp;N9=ruQ31bG!%qh{UxJR>Ff*Eo_d=~GVvn}_yT^asG zO)ywT0i}?H$B{=&sAh^X5AE=FifM6k@;x?Gu=o_a`vy4gLZ5t5=m*X5%?GIIc%sj5 zHhtF-2Lkwon+=~|^r)FMt{M6Z*Q9Vh+!RTKXbOC4SxOr_a;ez}&Z5ExYb@!ZbRkN2 z4gid4@@e494e*6D-zcXAqV(n>o22UI?u9}z`)Pa|<=Xxm2cPa#L8Gy4TpZu}K0>v~ z&A{x!-CN~-H)-R_Rk!U0VDCUXXtb+3z8;rB&L`f><4pv$I8j?huytPHH-Zy{s+p$p zwm507LdbrRKIS(G4Sgh_f8fN;SPv zs?;xXjZ>8~*caMXSUR@f*3AkTnv+`G9W|%2=_6Td$-F?4;^1tAd|F`yZZpPJd9ayo zs)UTS`QhfOAgC8`_W7AmQgg|L6|AZsKjr4;OXb)!yrc}<&Bclw-85`SAZ&VNpZmw4 z?IY);*HKqVD286OW1bDgsi*gOsGY|IZ2Fbq8p3u_Fw|7z2#B;i_o*fLQ=cCE@EK*D zb5c(dfRqzYO+LlGNur5;Ga2g-E=L7<^Q)rh=Clg{ElsGbHb>lko^C$i*VSg|E`$T% zmu=kKZNd3ZcqV+hpO^{*lyDO&j-scl*ADuI62Gh|Z zBcA|&XK0m^D$3}9uR7qK@gqd#goB2{Iu?*&4BqhmZ!a(y3d?r_mHB!=_W_4xg&4?{ z$z%?p-Q&LJltx`F@#(PaVtXzHU0$(%=%|%QB^@4ZnSa%IZ@-mhV&iGY11e5V6tKW# z_;^0-&nE_k1V?_Nq|JHtGse_`B_zrndlTiwYDBZGX6iz!3P#WK(>JZxJS^zXL{@jE zM(h?Gn!%1RRH-%j7X@qtsTlKPZ&>`3EfANqm&P!X7huC_^S1zYDoBViq)_-s* zdoIx$nR@T^&An+1)^fw2Qfl5Qal#+L_>f?&yJy(ja-%b{3YYXKeK;(#{7%EI^Ssgk zFD{5eniAaM8;wSCF~JVLEGnnm|Nso#2B4u42kPd1M;E zi>XDEt}=z*OFpB4ebtt`HPWRgDQ@)}-OH>R^4$^z4*k^bfqbyCMy*oOGDX%uqLZ3R zI#T#L!FGp!B)+VTUzQbZ!T$!J7l?&P0h}%fe0q4R1Cd@`?HVwo>vI*yuD-}_g|i5d zg_Fr@7~WvG_dP>0Gd;ZwtOB8Lar)pfh#@z3{-GH9upd}7kg$yqh{A|!vtC<={!lh4?YaB@_noCy9E>16+LEoX$*AhW1}cdZvdB zAB=V5q?-_=maJJj0%73hV&=f5G+z$!eIN_Nm1CUBclFx?TLm}cSb2lH8}>NRZONso zAWB#@4{4nBcY=AFq0IM7b2TomXk~3AN|*zjs-woBNR7&YwzcE67V_OfwC~UYO?6ii zi^gw4BFJ@=sYu{k{84`E=5Kgzx2WHX(3FBL2D5l*ZBFwmWPO80$)}@i)?N~hCpRF< zGA)Z*H>zwCFX{e9l&gAc{^&nCrx|Gj z;(alys^$HydZ3Bm=)oxvY#d?QW5f&L%fKg}{@7HHpETQbE<^hbZ5e0r`V6(o%Zy1@ z`kH@~4|oFfP5x%5MZY8L**U!fKaom|NTztuARF^kT>|@nP|qP%ag(JSbz5(&jo5C0 zz~yHTmE(+h7&qPAjt9Y&1Rj&C1mL4?GnUxoq_?o3x*FD!*Q@A^+I>#>WdrKwb2rm8 z%ZPV;B8Jza>4#uP*!ikEI!pj+1@d{L)});!nvSgomfPPYbVHhEHD~l^=3Z7a%UpZC z9+R08jU|dzqY0Y&Ta!(W+wxN`%0ER^Y+7C;_dQ^Q4%i({zD|_;&cV$@>op+i&JfsLf}zFVSxz}-i5TY(oBle{X!ui$^m zU4#3U!l64Z<}PNf`Y4^xaNb>eI32Jx5g9jS>_Htb`1Qt-t4-!2mK&!2`)zehDL=U& zNV%b_!CFGNl1Ww7qXfnE&);eEU1|yMU+|8ZaZTsn=2O7EFf3#SmU*mDr%Vy!@heoH zBN#8&YDA$Fbrnh8-z`hJ2ZdoZc)yyTiUYZQVpT|^2&mwsY2!bu9TRDiT{E|5I|5le zC32M695#XlW=@FYfnS8yfOB@KlhSFPwG%x0NjW>izU|D*-%V;4CR{jcJCBoI0&;BE zS=*aJdO2zEjs|t0b2$LtdG6S0>HcDgE>BW8`r*aRVcBE$LVMh}v*ikXKevkLv_$pa zUtjKRBWlk>9+mQn8cw5l2pA+chb|p=&GW!&Ur6kaD9HTjX~dazd&T@Gm*-exG=G)@ z*e0Pg{d_lmLIt@(yNK(NeJXH@6lQFx&9`!>-!m#{ar26I_`7~I$Via$^=ZB2c+!u2 z^7IVqD&_Nm!}Z~^t967%Ah}d@lW2MOQryc7s=e8n)Z(Vy`;DGi!WIGYQhHyl6TqSv}g|C zI$9SXI2x!hY&@v0b81it1B3^KYs$k0E#2(xqeha|+u>V$m*% z3gE9LgJbTsYD5l;Y1h4+=vSwLT!cn8hFgtHTyfq460eAIJb|P)>+Wh!UN}xOVHkr+ zED5v`D49HSX-t$f7Cdr4zh;C_oO@O*pWA*T(6tw+7#oKvGn?K9;z4E8+$hx2~cE&$HWRiHq zEnh%%YBqbe$-uyNml~oH_mZ?jZFu?az)@;@OocvEr^lzplyiYxYAcXK2}8!&1meB>k6b?wQ=NstJDt&l%U;l!kHYa!R`nKBo!J$KGJpNi|; zJOI?6pRJ2|FzXg9Bj>oBf$wbIL^{>LG3$90djp2UlH3@aQ)O~EtPO3~4Yxb?WuHnt zNMB8<<7J%a@Rbqi7@|`v!^FWa-nG@FE@vx6zuX-cY}qm?CbVSM(OHzwv}n}cqutrQ zasrf_JgY|Vmu;2>q>o^MeQAVf9$N72oEaYYZIh5Dj?}mD;Q_`5eeqfpo>sw_ctC-K z22!`e@0Ih~$ffEfm-VFZE|OIDwb_ulVJFvA;ZVQP5yS7>!c&gwJ6siBLtH^9&ps1; zqK1LdUnrmoZo1;)E|v!l+Pmqn^0mTDl9Rr2uHV;me$wjxEv9*qu~j`GpGe4PSdJO_ z;O6k&BD3Txsw7u&9wc4s=h(o!oK>OSDISRng@v+sWdn17V}I-z0_e(F(!b>X`U zxNhRwY7+kKLF6=eEtUHK))XnYw=cN{rKAcGGqhZxZpp{3Duy`4%E7Y;f`gc0I zTckS|g?scEeS@9}E5R?9|1LUS6V)KpBsJ&Qj|7+$f;sBNL;hH}*sO-}H?P-J>{#0$ zaZmD%HjVb^+tB=uWmW36>w@^Rswn4Aj!M=_@)n7@5aM|ZkT49%fI*ho2u}6(k1S6j zD9c%(KCQ8=1FphZ73E`wcDcF-KCm6$)`&;yd<{GU3Fngt@p7@6+VqlJ^I7`cB7Ms% zMNmi4y_TtZ$JKVh*Smv~*ZH7}+MU{K#_rb9=be&l=AsV^$K7DN^>|Hng%b=pFU6(+ z`f^&oV(HzzHsu`&|6NH=>=cI1)#wzNUp8jdcTB^c{SArCwOPWK<=-k6iLgl3rKRS( zUY8G@>%tbL?MK83Gf5Y{pbXUEydmCsX)aY7i^)B6r(YU@l}m%kA?;8dA;Zcm^U4&A zOrb{#hxqXa_Zpgd15KIYMRbMD^%=ib-J{|%py)&{RA(_HDS?pyWc6@;DD?+_3|6m7 z$7j!i&Y}!FKe|t&P5OZYik!RMFpo9m`Y4*TgTBUS1{1dhbch(x3D0@%mQxk67b?20 zch}Mjs$7Ym@U(;azJq4Vypx5z*sV7kH4Gw`g%05r?FSMu?8;1R?+*yq$)3tXot3^V z_~UgUKCj>NfHo8av{ZZp_cO^8yhQE;k<$oi7xXks7k^lN=%a>*R*E`zgS9mC^keHT ztEP$f$sgL}q}%P4|q8@ zc{kwJ`XT3AKYODSM=gtikc93G2RK$w#UM^eK!=ltbKh*4&~C#ca{{XyD%TS?EaVyu z{3NcxoiMHCA_;yPev*(Hm$6@JRCijF1B2TOSfIAJ_E}3YtxMs#8$-IY{;^US@(M40 z?D{f(;)B+M(Y(V(8#pi=#KSvvC)uDsEx2f*(^;3#k{+-5e#J0#dic&%xbO5}!1Fy< zx;xr(TrdfP!wT)?lI}B}rxD|I_WRNJuj#fU8v8^gBgOJ45CU~7S)@{V1U?Xp&m%cS zV0fcORZav;sPp60*BB^Rz{T?k6Zw7JW`$j(JU_Y&b;HL;AZ(|UFn8FpdhF#muMsg< z1T?sV(B#F8wyU@(Mi(Mx12BH88IY*`wO|VpT18j&uPR_BXfUi@d@e`ipF5YV?*&@i z-O7b8Ms%20At*@WedK-hkUt2TAT&anZLK@~v%CPeC*v=Bh@Zq1>8dLCfio$bni1sB ziZi26L$$*rD&kwnIs9z2O-VwKVr4MTlPQwJRfS>7UGPg@SGawC(kJ>n52A->f3{4W ze6!|+XmmHbu+t%a+N`w%N*(B)jl?3Mj0Qg9_HBkn7xiw=Qamc*1&semk5ikWPpjAP z^Wo$v0nAmyNe{x#>XMJuZo10|Gu-he?#X>Dkify%(bukbEPV(XRlqCSnibMsi0T63 z$0zFYdl)mGi3WaYr%wfk}&o+f6kmyt1{{YUh`cPwT{tbc7AWQrVjMc zC5FbyJhk7a=DF5@?T(0Q-H9T<=grwTiecn0E`9s(TdCmRf<0eQRMiW_{h5bOxyS}v zWecEDRSxwp#(2@_Y!y|t$Xq|BayjK2!SRUsOi zzIht$J&P8<%Xqu5j5T!))NkgE3_c<2hP%N=(iZX=ZaN@UI8ug{2s)Frj9`N_;W~I9WZqNh?9V3ZM6TB!|5_K0J$ub~5ax_fR{Ay^CZ%Dx^JFVLs33wfJ!L|@b zh~3I8$aDJTeqDQ?oIrX45Z4eyL@wICQ$U8qTu#@@?if8CI29+LUqa+PEYceEZoJZ= z)!X`GI7ihg&IV2Bn98Z+35st%o9C-sYW>Q+=)NzCae8L$WcB>a6B<|@tCK85H7IHr zYX2#spp}V$<to(Z0!D=J#{+}YaD;__RZF)hJSU| zXbY=diCk*xCAL}*3O};(z4 zy3-~CQC!dW-g=RWxJm5(H`OG5PV6a&$1*|J=o{N#Mq z^x#`Bs3c``LR@|-L+A|sK2tU)zKn2veT-$(t$dc=y0GRjHV%wl%$b19Ze~LS$wrj8>3xd2VHSE(fjktDqHbRhu}dM|NUDygMmGyY&8wil zjAS^^M9wm<`wEt7oC#yws4YNier*TkezS2K^6vG0^ME*~9KN}R*jW`9~Y zcm6|=zC;;w0)sXqr69P3%}xWf6g{mhz zd9R8A65P`Ci;t=|L^Lf12YgaUU>D-E9MiK|ADUT)$~K9o9wecKriJg4@Yc1HguZVO zjJxbh!G?BvzB4Y7GxSD^e9}SL1O?H83uhussKAPr^d-bEV z5YIgNPWG`AK2<=&t(61b0)V;b=_ip{wi-lzK(24--{ANL5CZ|jyd&{>1J7d zDTSWVI*2}JkyOc0jABmYUR8r}SQz(1ffvAM196z7-zojYt|6mr%xUTQwaMQQ4YTbI z$rQ3D)&etcMWUf$;*m)wf+4^68duUaYeg)EvHQ)K1=1y#a>TzSHkZuK*5_6Q>rp#N z6H)gR4%i=Q&tK;29Et3TSHwzOOkq)rHVNx-(Rq`fW=Q$_;aqVu5BBG!LoJc!Hj z%#}qYv0nA$=X)@v)6tQ}EUj6Qc+l!WD{ahY1D5WaQ?`-c{vYbA4m*pDNLd&G~)8M=9 z6n(*T9S%VBqIFLCd#bVk7#nwBwA;83I!4OUr`Z-f@3aV)AvQl4uY$>9BHCsu3w3Jc z9ES6sKPvrzLbW;GYtDRtXo-cn?k>h zb2!P^Ze^(d2U}(8#I%eOtj>n6;>%m6{CKF&Atg$(C`1HdHQRYnc+e8l@ij`nBH= zkTLBgX3lZB?*t+el$3TCuptkzd-JLwrljnT&L^gdXW+0q)g&2||?RZeKE(o4v- zUiz1w?|s+tCVGilELPD;%O6c0Bu6GR!H((OU)}p@NY4Ro3cAFn;_*xa`OBoJWCSyq z2dZ}y?WfPwH^!PZi;R)HRLjOBGF#7BMWy>|;ZZYy!_}ab=Q3|jV^RN>L*$6E#+6A2 zlj4GkYzPv+RRy}(AGBqH=e1(4-RAQBc~`wphiCuYl4zk+<+6!fxM+jrs&a)gZ@1<= zgFg4G^@2wzhfAARwqbC65c&psDq=OW7YYX}(y};FGEaI0^99FqcfOC`^Ixv1;W{eG zJu=x{T`9=VmXYBdQo?Sz`6x`I5ltWW#G%cLJ9M(dz-v@YFIPYjOU~yk4nLdF${+9w zo$50^hH@}~|1@qyz&jLKW!NnMg(qRW7X2T-{Jjku5eku4jji$>nw?EhY-w z&vV@zb_ksVq%Cs{r-SH-EMkr3(up=10mF&X9r%o-s~` zP+wf7bX@M@9za^kG*HvWFhuv-V+6oQ?11CfSMZy{)^Y z5S#WD>!+r=CQJj}0?#_nEg;GqY-j=+-UPRhp9mA)!QaB_oug)v1Sk^sAk3M*NcAD* zg#_PuUx=cIP}Lx%h!$+4?sv6U+ELW%(q}IXo60vaYANCBmKUxhJK)K9_A%R*Kszcr z!ljupuz@i4NEYBZrQ3>4SF+<%25y}>b^LtMzm)19d| z=p;1LzRZmgg3ewUHNeXvcN)PHu?HepL+SG?x6ojg=B0Vu1+`Aj@O_|oI8P2dPR}nNFhnuU9o`hW zX=7fs&g<(|)U)>AXTJ*hxdx+X?UnqjTk9eh{wde5BQh-(6rE6V4I!gWW9k9-MthQ?yOy3dRYG>>`Q%ytEn zo9i%O500X_OO(i7cd(N6NwS=jjI~$CGgq(%OfmhjgrAi|pQ_sI%mo4@x5wFD5l?XR zUUfF)!_M=-&KRv4`6C~1LJWveKh+J?ncW#LE|)qlfwP-M2PP(f6?>gY7c2fpD*~Lg zQyhWQK7OW_|4=iPAP@$0($ycNW-RJc*_OTH?yP4S@9&%R{OT#E)3$z9P}%PWpnS>0 zkI0q3qeMjfn$-ADnLA!!+we}uLr;PEWlH=dOh;uh$I<0H|4QHyXA? z72V-(9qE3&e5)(Nin-E=hTR(DX#99tS(VclG(CPE#KEZJzu(CB?^wCTv&qLWu$D4} z>~YX)V`-lBh;6)yS-^|gx7Nmp-1qNVEyAEapqf5(+=YQ(0}sCp1f&wJCxPdeMRmIv z8D@U^Y2mU<0F)!A=L@ZezOr*6F?Kv+GUjcp!06YQ4YY?$8z^rkAE7N9LJ@)YXf12K z9p0g-@(Xh9mlPwV}7Jol0_05|Dpf12Tr0R*C7ow^fQ zU&rMw{E*fGKCP^X;_%^9(l7J0To=3jISP>uGXu8BOR3C^{fy-oH|5mdB2J%R0Pri1-eox)e@eF#+ zNp$HsfZAU>(^g0d3J@DsL#_iK<6q$Ud`RTs*)~E#m-FH7r@I2k-%cpRhmL&}+(m;{ z=0`p;DTh1@rRJO@<3{m1H~5@!p<{qR22NkDUOnNfYQUOw&DD&ow^>e0e!TAxzX+(M zr+`@NNX7t}4p~u0G?DM)@R!>vBLfgARsbHeOjS+wVBtgWx2?rY$4cjY^p1OsROTC- zl7dvsY>h&ux-}K?RZFCw_0zlYqoE)-4UKuHoqMBw6!H{^JgqpS#P~aLe7LEcba7_x z52%K^eEiX|^NrwJw0w*Nw2y$2E;bd-uq!K>-u1Int@1klh}#har4i|KrfK-UQbC~~ z6XTL^;>o(BHN)7>Dr+i4yA;O`99s{l`aj6PV-qIXS@LeshS?cO>hh=h#Ohd`b;1@ZSzkzbYwuZiNa;a=Oq1L`Y z%RECwREhceAP3J$zHBfUz>_WIojcm5WtqUCkKZ}$*Alfz&;LQMq`$M&_@Odv%l!3~{e83O^%sYo*dN3}=IH9n*9{Wi zubS(J#Dh}Uo3BA)SZHQ$N~C&v^DV$4ueT@2h2w8C*73p5cSjH0-sv9(2hLD@t~d*r zgC-u|>H80qOjrbO5SJ_&J1VIs{S@0?D30MvHK0X8uw9`1gYfT@3#MNj( zUjRRj4=;613}s*G%TI`t{+4-ftop{zXorBYtR}Eszvg*{0<4~@HT@vv&c+hD-fDmg zT~4;5@hl1G;9F>f(yl8&vLS^~%`i~xYP;moyt{N1>wEI+BGL!#bD2A|?og+3w4-~{ z2?nlU3ceuZi=_(esidt`>C`&>W}l_*k}$A^m+7?XCLEiVA+XKurLh4 zNpDHj(U7wN1Nu7MsmO$zez-SaXQi~#zI{i6lUK4GoA_Jh;U(FE%!@*w;O(#BZ_xJv zzmxfERu#r^aC(U#nt@RZ7eNbDbg&!=HskMVj)jJle|ZXGB_EvwD!lotQjabj9xTms zTQ`f0{;o-QdA9uH&FMsn?ptG`t_yRy=fTadu0{rx2doTLuTkhw&tagg{~1)~?)4>U zuG!5M5%1hVzOFYXxmGoIza;!(c%9xGbQ`GlQN8gLRglezjD%trwhcQ&SgloVyvGHT2z z7}8w)(^9!lJZ|sv%fZLLzk4|G?h!05t@zA05tjD<4YEIkcAkTdGHK5ONgiOMt|3R# zBjvYL5rhV`4RwN}k%6b}8gok!z)`$`0LxmHyg(|Ej~2Jy8ah_wuuAvaHLd5Lj zUT8v+fey9Q9HBV66^OmMcgiJKu6Gh?p~e(iB) zqksT)eZ8u>k{<0VfUw&fP7W~CY1k&?uAy?O!_w4;{;ZH=9bbwth4`dlnEwfNQe5Pj ze;EsYHP}g!-z{yz1Ntqo3XrHfAMEn9X$-u+z8A`6xAW9jC91p+i{3lKB4l0b0UhuU z)`Dv3V_@%i_iB&qFEq<9P@7)q+PC-(*oWHP7GEPkR-B(pCMBU%!Whq8jjZu6O+mZr z(I+r}p??Qv(*Zy6p$@u$O#I#C9K7FoQoGGIu#zvFne%?hEe zCJowLxkl`_<8v>fV813s4)W1QOs9#<=*~U!XE$zG2=8w}K*GG(J!5QHP04*hIO0qQ zDt2(1ESenb|NJl;f~{n#wy}05((o7KWBqxuAWaTP>XGVZ=dZA7<&ZMPD0JhtuQYEa ztqPugb-;)Q231pUlr2Hok)prwtY;{=RySQyXgyO%t@n#t9)_C(9s|_1nUH#q`Orez zvv931rvF{f#LDZ~IV0%z+$5z@7&^Jl9!jJ{!G&oyOAZGMO}g|*<`bO*LK5Y_zycJ= zEn|FKK&QIoPfy+f|JQUHrRwXjS7D9$d+mcHUYtCr(GCa*88jT ze4%Xz`vY;sh#lM=qSB~#_G*!|s@w+}$Ixii-J#T)osP zTQO>5F(>oQ@Bp)VUrG@H)fz@nby0k=m~gy(ot=gYY36Tj3oIP4tw;Y9Y37%SBS*4G z4RDp{3z-FNfYlK3DQVZRz4aF*pxge=Xu?|!vxV}&Y&An{C5@SbR9WIZjz1)wNBM$L zaAwOBEnHeOe(v=_W}Tz!P-4Gj{Dy@E7_$)ITCti}768ZI&Ej=xvYi$gsqT)5fo7ZG zWaYaeOuUpvA|<=KsO5Ln+FNYfVKN=STnb-9aO6${lrR8VDXM{m^6(9Rp8h5duerkY zO+m0E+MB9cKW^ms2mk=G1dQl69Q1t!#rJMpSXiZor@~+4lLYlmG~QKGx7iW^tl4r| z${*iT-ZOt8-lyDX6s1_VWT{ToAI|O{!WZ!96WsI9D|nz>W;;kA*HO(!VSd1CC2E4# z%QPodlZA;XMnx5Uu@x-WoH>-*U|Nt)W%>?ho>i?Xmj@GdaXgI< zyaKYGabqHGdLt&S#kJSC~@dyA+%*4SaK+ zOiY23KTi$|m6W;wUI3YA=ipU#O#q&m@H3h$BM)s^)kXTS%S|00KX-oXVPU*qfxH2+ zkNx|YcGvvmR{u&2A}VPE(+<|aherl&5jcAK-O)7b#eQRISm7;z*)=XfSYsE+48u@X z69UYU$(j|pmxeAG*PH{2=JBK-V;%CQxpm6h3x7Bh<9~ddQV5=G}642j@RwL2_N^NtJ2O&mQ)PK zPd`2*Ddc1xZ`o(c2Gh}l4N70!I`GkYdN_0U63G;tIAKHjbr{A;4a3 zv;uc-IDHu($OS`Ee@IC^VV@#zIQQ~jg`vo4IG!GVAo>BQ&984Zj$Z<9P03#K5)=@S*LB??oQ$)fF_;HexLEC>(F4}^o=pzQ*W2*@3#--VT|ylws)=2MZ2sAQjmUaLxB2 z_z)ruan#T4Pp$-({CZ>ZEOSXC@QqTY&>Xf;PeXVGEc&@>uDC=Xx9^FNkI>ZzU=JSi z^RyO8J%EK71BFhhrW&asO@k{p7yNOcC(0)A<8!0QuP7;)k}&^@tIk4_KH$+;9t!!) zmDv{phooJ&%d8^bZIVd+=cmM|YN`~lxATy^4fEw``V0qd=%K;3y)CEq3yd<;fP4GY zD*pqda{{uZ8H8vxyG2x)Xcc7Cr$!wCihwXAhS~Mf7|HkmV+z9Eaho80xz+Yz5riUV zDhDUs%@e3m8j}P^GM5X^5$k`Ti`lleUueamP?`=vOx z24jcxa&ryh)Ktt+2xdAvF{3HKB-Jz zuV2|`lK=htVl&#mA4Fjj?e)L=Gkn*G^GrO+ofre%B_z_1ER@>W1crM`jmUT7g@cI& z{$uYwnxt2>uPA$44qicvUNNAx)~qoYvvNIFg zi(&5`+ys_EC_OZW_A`G+9CSA_`aB>N>|bdR_r$Hwa}vOJ!p8Ol6o!u1Y~LV5YU>u$ zdV-+p1WIc0RHVQaY3kRI;Ur#8>4tzx?{ZT-pzh~X=@}7C&C@t$NKQZPMkv3VuYwmf z_LfJr2+&J3cSml{K}Tk@;5Mgw3A;>oR!2k|NEcu~S_)Av-r;+mS7!clzShH*M2g(M z6qDOHjp+Lq?7S}#k^^*WA(_4TTAhc0tO9A>!s6Q~W3O}!8&KMKTix>QBvq9UWPr%9 z?-HR$bYdilC-S^aO?ZtqvTJ@4<~f_j*+4WhCXy##LF;#W5K0NOeBGqL0=3LGq6$g{ zTQ|MP(0ZkB%P#J%1CRW5P(p|tj*rZ7_|3n}cNXd6{luIRK3FOZ&cMEf)|;B~)U*R* zn*#jCd+ulps$ln3E%9;`>bYwpT8f)!bYvQl2$tou*)jVv z=*!h1@`YFjvKOq7u!+%Z@nt6b zkk$gl+AQ&epl?m?O`}FTsgTWZrKo4ZmoxXlen$YQ?ar`H@xZ@g35?hn~zAF$sQm4Z$ly}~@`a$iK5=$>q znD@)vS%)?{RK*Q%^Q09&CPqi(_IL?5ecR*m{@j|V0|w;-XXC-u?0DF_Rx1O(7o-Do z0a+H2;miBmXtn$z3ZHHOBmlq`uGP;*uT!YLcz^5L3?z+f=62-33DLN;)N%POP-ociZ^clN09{imwp03VBFIj(D6wY&ebJvK!Fh1lf|zk&T)Ah7dRKKS>@MJ^{j&0jJjXW<#(9g z5{C$BgQDY=<@O%sFC6!}Wx0gX(x|vYNrqG}>m_6l3!FgW;eVQs>P_>~(QKvav@_p0 z8x#YCqhN<%(aIoZBRNe!zE zkPBv{p{n_^XB?D#6Mt{^;cKB#khl&CD>* zFZgJbisO(-B{^wk4 zT0#0%?q!pexkO5GAedr?g<_NmUV5Q@#F%z^(Q6SJ!g8~SPPu%?@X%F{(>t0GQr;|C zKU-MI-A64mNVaaw3o$91+LSE8zvqz~ayvv}@@aQj(=q8I^NY?W@yu(MvrI&%X z*9K|4jp8ZvYMc(^(gs=PxnyB(YnhM7jASU-58cjl=b}Hptl44%cO)ymJj*j=Sx18# z{wZvk##QrRpJ#&}di5L6aymqwH%BfLKg5KY7z{i(YS zA@>(=b>VJCVpZ_;g?e+S=f_KP)^`aY)7r{xyrGd_V)+ylEbch-z`e`bg5#uBaY2$g zV@F#Ncs&7>pBb;5*PAG@#C*9hG?wJ1)iANRIH3APmCDhw$o3?30u^ANF(nNWF=ZNKeQ zmpgO}p6&OiJyl@+Vv}gqS@S8>va~D&=BsW?g}nn_*h@k7mL?u8+Fu{G*cy@PwsQ>p zL%kqu4zAAv5^Sjw0(bzYcjQ4R9iUAF0a27vGT*RMqZ780SDsJj4tJ{oWL@Y#OIzCR zS6X2#<#Kuwez)UrIq0;~Ha8C&q_!^rJ>C1!2;NIS0jyK>>e)TwoIXt3hP# z(Uh?r_S~VFB&Swq*~uTUpSWtB>$;69UnI8bBXO`r)2>;&=fXwxoqrbBT1&4+;bsj@ z4QkNveyr2`5!+aL`Yzf;L-sp5SkFa-|hr^65O% zXydpkM&!+WtOC-oWw*Z_L9v(b1NS3za?}`VF@yp))txY26*)@}4=+fTM0K zA)^HjdKUCUy!hXCQpMCzxfy%ggmORbiVtitQ?4 zA2U@jRJSDv)e`pYqmXwJoPsk6%K1Hjm=2<$2HkUBI=9YIF z{l=z<+TW#nS4JUQQfx-7RBd6;>tO~Yl8L=Oz-ix>%U9@@RH|Fg0QRoZhqx@j2t-J7 zJ-DenL?KuO`Q@K@zLgrn(J%pm%A9L8Nqq8Ejd5@l!stj7*cJ5u1mHXt@JVzk>(O zR0{hk9d={0d0}c$3a!8V_Lt=^l|~!OnJ3h> zuh!`cPinty3iofRec{rxFfv|lb-!RUxA8K!=bfIC<2Q+w-3v~;{;-e;(n4Bwz<9~t zMH@mkQ@q!&G=jfB{q?2zYK@MA4fp-k*f(mh^(qa0Q!o;)xe;dkN|R87dHNmgS?Z=% zzdguc`9XKzPw>~^s0BgYts&KInmFLL$n~HI=1@J59_AjMzibZm`=@Ry+F&kfxO!3V zIE``P*?hl zHygFq=+{5|#!iO{pN~)YH5HzI*$I1WLZlvi)`{Fl!MTO-k3SyUE(w3;_sZb2|M?tT zvXln4oQ-xLBXUy+{@WAfeia3J7yr!H&%6nKlZp1^1Xde{fAo_- z{>}%z{||lrdmnW(@svF>!GGp`&ZN=bBA@!^0|mx`4yFOMOFcyWj5&h!qX@A7wax%F z*}#vn1O21SV^bFJdlVGC8vK3kw@m2w6w!Ws2&aLMs3HA~J)R#q^Vt2XpZh8M{WVX+ z^B!Px%+USQ)|@f)k6l9=oc&Mx5q!>1KKL`{|7`C6p8qok%&)oos-1Le7YZ8=dK&Dn zx%{JTo`U00p5vkKf7WX}@M{ixk00r0J;#0i_%r4of5QItjCK2E->5(7@f^Y4_A?g` z*W3#Rx})(wx5EnTcRu_v5C54hmG%3pe%IAnMob;GX+8Oie+DnBZ;i?%t))wj!u)TO}OIw2MjEAmN20;IXbt%xY)s>MD$JyRDk zlbpb?CyysDVB(FB&ulAq;3C60kLJv0;%$95WKd+bn&-C#h7U~YrCtW55;mZqcCYsV z1w0FWaJD698X~>0P1X-LQuSf6ya$gzM(>ak8IsaoJQ{e}};b2dCm!`6c~(BfmaB zN&n*q#sBoY{_?BUzdUJw`ArTuGrjsLE&lS`fBRd3pVy!NTA4WdA1%My` z#9avaHyHjm5dYsm3<3YyuyTB6Ao=nCuPQ%-IRE!2=id!IZ|C-5Bmb`0e<+ks%To5g z7|Gv!R8TlnRvGpmeMEpMgyUt7XULC_{`9vdvT_8{tVw~N`hWUaVZW^T%WwblAFFTv z+k*Sa{&(C2}G~DRHz(?na4XTFC^ImU1pPzcICTOU3KiJIL{liUu`asp7>7G0!L*(Vbs-u9Y zIcENjoqx-Ju>0W#p$>*WJn7*aT9;p%`}6lD>2K}-yFLw9!VI^0_)O93Lfrnd?GN8* z3eo??U4F$_f!d$=y+2s8<-*w)55D|U-w&=q{ZF0j7nhJOjg@ZI{S|Gn#=Z$Lsbkor|J>v?Ei$zo7OOC_q)%ZycI7Nj_+)C7u@3`SpVLnQJ6e~5~3_hos zl&pHYavGR&WTlN>7m+VjvL>I0oV-8Vm1w8Ik+%NmcWivEx3*)uJh`H%E#1V1Irmzc zDe=-zJHKJQfaQ8Q;8>sILu?!D^?+dyHh%Yk0!V16UM_)stPpv-$&gmIFdP>LeS@N- zACDxz?tW>A`0jDUS$TN74f5rj;FrhwQhnEWTu`H&;haKDETHGHjkJTs?C!eW0Ury* zB}HQ1WfKiY{bw;4&&?-p&!dTZ734uOs!I0W2I%r=l8TCpDXe;CW%+AlPiGP;8oX3= zsu~pjCAb`ic_Vvm8-etUjcas47 z3)0TE7%_MoJ`_H7DKj|t$hlPFw*Bl4Vk@SwS}GNz^i@0DT3^>-*%b538Uv1ILgIb< zVz>)VGUKvD&jgDcx1tl)-!dHBJ5a0F+h!Mrefx>49^y4l$oZkV4Yl(}C{JIoqU9TB zlMdL2ORk**oDnVR>H(`wlqfojas#4UULtWI5!bX)E779WK_ z%j5Eq77vG=7qYx=5u;3HpLz~UdQ6u&2q+$~?|p^_xI)KX>ALX1`y*`>T`Y_8^S$su z;=p2yj~_ELiW#0fy;t@|dUy|}ps$5-9V(Ap9qx0WwL@O<{w1+j<`^FF;)JG0QZH9O z$*mlvA4rJWe)Wm;jZ>DqJ~w%UAR6pEs*LZuk}!r#H8xFOf(C!JtR~~i!;tfCZX;@E zzb`vzYVL_3EWTG$sniX*^cqMF_tq9IK$hV!Dt^NBEPyK0YS8g?hLePe0>Du%&j(Nm z-QQq^SDhe?xDuI!|7y@SP?E603rFO9OA%|aqpj+E8`CDe%b69}8ob?6H0S5m5BKN( zrJw(~!v#4rlX2)-OsFP&e7)KtJYR{91a|O7Hge=yZj+ij_vO@_0NJANu9=={oCI_q z4jdV9a?l2eWOXN4I;NtT5AwW=m~I{8@l3|K43JEuVv zA*~n~6hmIX%0Q9puGlw{VNlENFx6K$P^YrTZ@#nB{>&TFa2fm4P1?;u4>z?{ty-%D zH0e)zu0gi}Q2dc+qzzwRbBg-I4K0+pkiD@5$RHy|H&7D0oI+PtITSf?!;vo%Zk;?( zmcMjGOKpfkd9Qrc`vyu#dg|%qp7POgSJ#P{B0sk#QZPG6q0hv=DA6%L7=>?&1DX5Q z®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