Denial Analysis Integration Specifications
Integration Summary
| ID | Target System | Direction | Trigger Event | Data Exchanged | Protocol | Frequency | Auth |
|---|---|---|---|---|---|---|---|
| INT-DEN-001 | Billing & Claims | Bidirectional | Denial recorded / appeal resolved | Denied claim headers & lines, denial codes, amounts, appeal outcomes, corrected claim indicators | Internal API / shared DB | Real-time | Internal token / DB auth |
| INT-DEN-002 | Policy & Contract Management | Bidirectional | Analysis completed / scorecard generated | Payer contract terms, appeal deadlines, denial patterns, payer scorecards | Internal API / shared DB | Daily / Monthly batch | Internal token / DB auth |
| INT-DEN-003 | Patient Access | Outbound | Trend analysis identifies front-end issues | Denial trends related to eligibility/authorization, prevention actions | Internal API | Monthly batch | Internal token |
| INT-DEN-004 | eClaimLink (DHA Dubai) | Bidirectional | Appeal submitted / payer response posted | Appeal submissions, supporting docs metadata, payer responses, reconsideration outcomes | REST API (DHA eClaimLink) | On-demand | mTLS + OAuth 2.0 (eClaimLink) |
| INT-DEN-005 | DOH eClaims (Abu Dhabi) | Bidirectional | Appeal submitted / payer response posted | Appeal submissions, supporting docs metadata, payer responses, reconsideration outcomes | REST API (Shafafiya / DOH eClaims) | On-demand | mTLS + OAuth 2.0 (DOH) |
Note: This module does not directly integrate with NABIDH or Malaffi; denial data may be indirectly used in broader analytics but no direct HIE messaging is required.
INT-DEN-001: Billing & Claims
Business Context
What flows
- Inbound to Denial Analysis
- Claim header & line identifiers (
claims.claim_id,claim_lines.line_id) - Payer, plan, billed amount, allowed amount, paid amount
- Denial codes (payer-specific), denial reason text, CARC/RARC equivalents if available
- Posting dates, check/EFT identifiers
- Claim status (fully paid, partially denied, fully denied)
- Outbound to Billing & Claims
- Appeal status and outcomes (overturned, upheld, partial)
- Recovered amounts and dates
- Flags for corrected claim resubmission
- Recommended write-off vs rebill indicators
When
- Inbound: Whenever a denial is recorded during payment posting in Billing & Claims.
- Outbound: When an appeal outcome is recorded or a denial is reclassified (e.g., preventable, root cause updated).
Why
- Centralise denial analytics while keeping Billing & Claims as the system of record for financial postings.
- Drive re-billing, corrected claims, and write-off decisions based on structured denial analysis.
- Provide feedback loop to improve coding, billing, and front-end processes.
How often
- Real-time event-driven integration (near-instant after posting or appeal update).
Error impact
- If inbound feed fails: new denials are not visible in worklists; analysts may miss appeal deadlines.
- If outbound feed fails: Billing & Claims may not resubmit corrected claims or post recovered amounts; financials and KPIs become inconsistent.
- Both directions require robust retry and alerting.
HL7 v2.5.1 Technical Detail
This integration is internal and primarily DB/API-based. HL7 is not used between Denial Analysis and Billing & Claims; however, Billing & Claims may itself be fed by HL7 DFT^P03 messages from external systems. Denial Analysis consumes the normalized claim/denial data from the shared database.
No HL7 message definition is required for this internal integration.
FHIR R4 Technical Detail
Internal integration is via shared DB / internal APIs; FHIR is not required. For future extensibility, a FHIR-based analytics API could expose denial summaries as MeasureReport resources, but this is out of scope for this release.
Error Handling
- Transport / DB errors
- Retry with exponential backoff: 30s, 1m, 2m, 5m, 10m (max 5 attempts).
- If still failing, write to dead letter queue
dlq_denial_billing_syncwith payload and error. -
Raise alert to RCM IT support and Denial Manager dashboard.
-
Data validation errors (e.g., missing
claim_id) - Reject record, log to
denial_integration_errorswith reason. - No auto-retry; requires data correction in Billing & Claims.
-
Denial Analyst can view error list and request correction.
-
Concurrency / duplicate events
- Use idempotency key: combination of
claim_id + payer_id + denial_code + denial_date. -
On duplicate, update existing
denial_recordsrather than insert. -
Manual recovery
- Reprocess failed batches by date range from Billing & Claims using an admin UI.
- Reconciliation job compares
claimswithdenial_recordsto identify missing denials.
Retry and Recovery
Retry Strategy:
| Scenario | Strategy | Intervals | Max Attempts |
|---|---|---|---|
| Inbound denial feed transport failure | Exponential backoff | 30s, 1m, 2m, 5m, 10m | 5 |
| Outbound appeal outcome POST failure | Exponential backoff | 1m, 5m, 15m, 30m | 4 |
| Data validation error (missing claim_id) | No auto-retry | N/A | Log to denial_integration_errors; manual correction required |
| Outbound write-off/rebill flag failure | Exponential backoff | 1m, 5m, 15m | 3 |
Dead Letter Queue:
- Inbound denial events exhausting retries moved to
dlq_denial_billing_syncwith full payload and error details - Outbound appeal outcomes moved to
dlq_denial_billing_outboundif Billing API unavailable - Admin dashboard for review, correction, and requeue
- Retention: 60 days active (to cover appeal and timely filing windows)
- Alert: Denial Manager notified if DLQ count > 10 or oldest message > 4 hours; RCM IT for transport failures
Idempotency:
- Inbound deduplication key:
(claim_id, payer_id, denial_code, denial_date) - Duplicate inbound events update existing
denial_recordsrather than creating new - Outbound deduplication key:
(denial_id, appeal_id, outcome_datetime) - Billing checks for existing appeal outcome before processing duplicate
Reconciliation:
- Daily: compare
claimswith denial-related statuses vsdenial_recordsin Denial Analysis - Flag claims denied in billing but without corresponding
denial_records(missed inbound feed) - Flag
denial_recordswith appeal outcomes not reflected in billing payment postings - Weekly: reconcile recovered amounts in Denial Analysis vs payments posted in Billing
- Monthly: denial volume cross-check and financial reconciliation between modules
INT-DEN-002: Policy & Contract Management
Business Context
What flows
- Inbound to Denial Analysis
- Payer contract metadata:
- Appeal deadlines per payer/plan/denial type
- Maximum appeal levels allowed
- Contracted denial categories considered non-appealable
- Escalation contacts and SLAs
- Outbound to Policy & Contract Management
- Payer denial scorecards:
- Overall denial rate, denial rate by category
- Appeal rate and success rate
- Average days to appeal and resolution
- Denied and recovered amounts
- Denial patterns:
- High-frequency denial reasons
- Contract compliance issues (e.g., denials outside contract terms)
When
- Inbound: Nightly sync of contract terms; on-demand when a contract is updated.
- Outbound: After monthly or quarterly scorecard generation (WF-DEN-006).
Why
- Ensure appeal timelines and strategies comply with payer contracts.
- Provide objective denial performance data to support contract renegotiations.
- Align denial prevention actions with contractual obligations.
How often
- Contract terms: Daily batch + on-change push.
- Scorecards: Monthly/quarterly batch.
Error impact
- If inbound fails: appeal deadlines may be miscalculated, risking late appeals.
- If outbound fails: contract team lacks up-to-date denial performance data; weaker negotiation position.
HL7 v2.5.1 Technical Detail
No HL7 messaging is used; this is an internal RCM-to-RCM integration.
FHIR R4 Technical Detail
Not applicable; internal DB/API integration. Future versions may expose payer performance as FHIR Measure/MeasureReport, but not required now.
Error Handling
- Inbound contract sync failure
- Retry batch with exponential backoff: 5m, 15m, 30m (max 3 attempts).
- If still failing, freeze last-known contract rules and flag UI banner: “Contract data may be outdated as of
”. -
Log to
dlq_contract_rules_syncfor investigation. -
Outbound scorecard push failure
- Queue scorecard payloads in
pending_payer_scorecard_push. - Retry hourly for 24 hours.
-
After 24h, mark as “Not delivered” and notify Policy & Contract Management users via in-app notification.
-
Manual recovery
- Admin screen to re-trigger:
- Contract rules import for a specific payer.
- Scorecard export for a specific period and payer.
Retry and Recovery
Retry Strategy:
| Scenario | Strategy | Intervals | Max Attempts |
|---|---|---|---|
| Inbound contract sync failure (batch) | Exponential backoff | 5m, 15m, 30m | 3 |
| Inbound contract sync 4xx | No auto-retry | N/A | Log; use last-known rules; alert Contract team |
| Outbound scorecard push failure | Retry hourly | 1h intervals | 24 attempts (24 hours total) |
| Outbound scorecard 4xx | No auto-retry | N/A | Mark as "Not delivered"; notify Policy & Contract Management |
Dead Letter Queue:
- Failed contract rule imports logged to
dlq_contract_rules_syncwith error details - Failed scorecard pushes queued in
pending_payer_scorecard_push - Admin dashboard for review and manual re-trigger
- Retention: 30 days for contract sync failures; 90 days for scorecard push failures
- Alert: Denial Manager on contract sync failures (appeal deadline risk); Policy & Contract Manager on scorecard delivery failures
Idempotency:
- Inbound contract rules use
(payer_id, plan_id, rule_type, effective_date)as deduplication key - Duplicate rule imports update existing records rather than creating duplicates
- Outbound scorecards use
(payer_id, period_start, period_end)as deduplication key - Re-pushed scorecards overwrite previous version for same period
Reconciliation:
- Daily: verify appeal deadline rules loaded for all active payers with open denials
- Flag payers with open denials but missing or stale deadline rules (> 30 days old)
- Monthly: compare scorecard data delivered to Policy & Contract Management vs source
payer_denial_scorecards - Quarterly: audit contract rule coverage (payers with claims but no configured rules)
INT-DEN-003: Patient Access
Business Context
What flows
- Outbound only:
- Aggregated denial trends related to:
- Eligibility failures (coverage terminated, no active policy, plan not covered)
- Authorization failures (no prior auth, auth expired, auth for different service)
- Metrics per department, provider, and registration location:
- Denial counts and rates
- Financial impact (denied amount)
- Preventable vs non-preventable flags
- Linked prevention actions (training, workflow changes, system rules).
When
- Monthly batch after trend analysis (WF-DEN-005) completes.
Why
- Provide Patient Access with actionable insights to reduce front-end denials.
- Support process improvements in registration, eligibility verification, and authorization workflows.
How often
- Monthly (configurable to weekly if needed).
Error impact
- If integration fails, Patient Access will not see updated trends; improvement initiatives may be misdirected or delayed, but no immediate financial posting impact.
HL7 v2.5.1 Technical Detail
Not applicable; this is internal analytics data, not HL7-based.
FHIR R4 Technical Detail
To support future analytics APIs, denial trends can be exposed as FHIR MeasureReport resources.
Resource: MeasureReport (summary)
{
"resourceType": "MeasureReport",
"id": "denial-trend-eligibility-2026-01",
"status": "complete",
"type": "summary",
"measure": "https://his.gates-group.ae/fhir/Measure/denial-eligibility-rate",
"period": {
"start": "2026-01-01",
"end": "2026-01-31"
},
"date": "2026-02-05T10:00:00+04:00",
"reporter": {
"reference": "Organization/denial-analytics",
"display": "Denial Analytics Service"
},
"group": [
{
"id": "by-department",
"population": [
{
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "denominator",
"display": "Total claims"
}
]
},
"count": 12500
},
{
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "numerator",
"display": "Eligibility denials"
}
]
},
"count": 140
}
],
"measureScore": {
"value": 1.12
},
"stratifier": [
{
"code": {
"text": "Department"
},
"stratum": [
{
"value": {
"text": "Outpatient Registration - Dubai"
},
"population": [
{
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "denominator"
}
]
},
"count": 6000
},
{
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "numerator"
}
]
},
"count": 90
}
],
"measureScore": {
"value": 1.5
}
}
]
}
]
}
]
}
Key element mappings
MeasureReport.period→denial_trends.period_start,period_end.group.population[denominator].count→ total claims.group.population[numerator].count→ eligibility denials.group.measureScore.value→ denial rate percentage.stratifier.stratum.value.text→ department / registration location.
Search parameters
GET [base]/MeasureReport?measure=denial-eligibility-rate&period=ge2026-01-01&period=le2026-01-31GET [base]/MeasureReport?measure=denial-eligibility-rate&group=by-department
Error Handling
- Batch generation failure
- Log error and retry batch generation once within 1 hour.
-
If still failing, mark the period as “No data generated” and notify Denial Manager and Patient Access Manager.
-
API delivery failure (if using FHIR API)
- Retry with exponential backoff: 10m, 30m, 1h (max 3 attempts).
-
On repeated failure, store reports locally and allow Patient Access to pull via UI instead of push.
-
Manual recovery
- Re-run trend generation for a given month and re-publish to Patient Access.
Retry and Recovery
Retry Strategy:
| Scenario | Strategy | Intervals | Max Attempts |
|---|---|---|---|
| Batch generation failure | Retry once | After 1 hour | 1 additional attempt |
| API delivery failure (FHIR MeasureReport push) | Exponential backoff | 10m, 30m, 1h | 3 |
| API delivery 4xx (validation error) | No auto-retry | N/A | Log; store locally for pull-based access |
Dead Letter Queue:
- Failed trend reports queued in
dlq_denial_patient_accesswith report payload - Patient Access can pull reports via UI if push delivery fails
- Retention: 90 days (covers quarterly reporting cycles)
- Alert: Denial Manager and Patient Access Manager notified if report not delivered within 48 hours of generation
Idempotency:
- Deduplication key:
(measure_type, period_start, period_end) - Re-published reports for same period overwrite previous version
- Patient Access checks
MeasureReport.dateto ensure latest version displayed
Reconciliation:
- Monthly: verify all scheduled trend reports were generated and delivered
- Flag months with missing reports or incomplete data
- Quarterly: cross-check denial trend totals in Patient Access view vs Denial Analysis source data
INT-DEN-004: eClaimLink (DHA Dubai)
Business Context
What flows
- Outbound (Denial Analysis → eClaimLink)
- Appeal submissions for Dubai-based payers:
- Claim reference (eClaimLink claim ID)
- Denial reason and category
- Appeal level (reconsideration, formal appeal)
- Narrative justification and references to clinical documentation
- Supporting document metadata (document type, file name, hash, size)
- Inbound (eClaimLink → Denial Analysis)
- Payer responses:
- Appeal status (received, under review, additional info requested, approved, rejected, partially approved)
- Decision date
- Adjusted amounts and codes
- Notes from payer
When
- Outbound: When an appeal is submitted from the Appeal Management screen (WF-DEN-003) for claims under DHA jurisdiction.
- Inbound: When eClaimLink posts asynchronous responses or when Denial Analysis polls for status.
Why
- Comply with DHA eClaimLink requirements for electronic appeals.
- Avoid manual portal entry and duplicate documentation.
- Ensure appeal timelines and statuses are accurately tracked in the HIS.
How often
- On-demand per appeal, with periodic polling (e.g., every 24 hours) for status updates where webhooks are not available.
Error impact
- If outbound fails: appeal may not be registered with payer; risk of missing appeal deadline.
- If inbound fails: HIS may not reflect updated payer decisions; financial postings and KPIs may lag.
HL7 v2.5.1 Technical Detail
DHA eClaimLink is REST/JSON/XML-based and does not use HL7 v2.5.1. No HL7 messages are exchanged for this integration.
FHIR R4 Technical Detail
eClaimLink uses its own schemas; however, internally Denial Analysis can represent appeals as FHIR ClaimResponse resources to standardise processing.
Resource: ClaimResponse (internal representation of payer appeal decision)
{
"resourceType": "ClaimResponse",
"id": "ECL-APPEAL-20260207-0001",
"status": "active",
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/claim-type",
"code": "professional"
}
]
},
"use": "claim",
"patient": {
"reference": "Patient/2025007890",
"display": "Fatima Al-Nahyan"
},
"created": "2026-02-07T11:20:00+04:00",
"insurer": {
"reference": "Organization/oman-insurance",
"display": "Oman Insurance (Dubai)"
},
"request": {
"reference": "Claim/ECL-CLM-20260115-12345"
},
"outcome": "partial",
"disposition": "Appeal partially approved. Additional 1,200 AED allowed.",
"item": [
{
"itemSequence": 1,
"adjudication": [
{
"category": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/adjudication",
"code": "submitted"
}
]
},
"amount": {
"value": 3500,
"currency": "AED"
}
},
{
"category": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/adjudication",
"code": "eligible"
}
]
},
"amount": {
"value": 2500,
"currency": "AED"
}
}
]
}
],
"payment": {
"amount": {
"value": 2500,
"currency": "AED"
},
"date": "2026-02-20"
},
"extension": [
{
"url": "https://his.gates-group.ae/fhir/StructureDefinition/appeal-level",
"valueString": "first-level"
},
{
"url": "https://his.gates-group.ae/fhir/StructureDefinition/eclaimlink-appeal-id",
"valueString": "ECL-AP-998877"
}
]
}
Key element mappings
ClaimResponse.request.reference→ Billing & Claimsclaims.external_eclaimlink_id.ClaimResponse.outcome→appeal_outcomes.payer_decision(overturned/partial/upheld).ClaimResponse.payment.amount.value→appeal_outcomes.recovered_amount.extension[appeal-level]→appeals.appeal_level.extension[eclaimlink-appeal-id]→ external appeal identifier.
Search parameters (internal API)
GET /fhir/ClaimResponse?request=Claim/ECL-CLM-20260115-12345GET /fhir/ClaimResponse?extension:eclaimlink-appeal-id=ECL-AP-998877
Error Handling
- Outbound submission failure (HTTP 5xx / network)
- Retry with exponential backoff: 1m, 5m, 15m, 1h (max 4 attempts).
- If still failing, mark appeal as
submission_failedinappeals.status. -
Notify Denial Analyst via in-app alert and email.
-
Client errors (HTTP 4xx)
- Parse error payload from eClaimLink.
- Store error details in
appeal_outcomes.notes. -
No auto-retry; Denial Analyst must correct data and resubmit.
-
Inbound status polling failure
- Log and retry next scheduled polling window.
-
If no update for > 30 days, flag appeal as “stale” and prompt manual portal check.
-
Dead letter queue
- All failed outbound payloads stored in
dlq_eclaimlink_appealswith:- Appeal ID
- Claim ID
- Request body
- Response status and body
-
Admin UI to re-send after correction.
-
Manual recovery
- Denial Analyst can manually update appeal status and recovered amount based on portal checks if integration is down.
Retry and Recovery
Retry Strategy:
| Scenario | Strategy | Intervals | Max Attempts |
|---|---|---|---|
| Outbound appeal submission timeout / 5xx | Exponential backoff | 1m, 5m, 15m, 1h | 4 |
| Outbound appeal 4xx (client/validation error) | No auto-retry | N/A | Parse error; correct data; manual resubmit |
| Inbound status polling failure | Retry next polling window | Next scheduled poll (e.g., 24h) | Automatic |
| Certificate/auth failure | No auto-retry | N/A | Alert IT immediately |
Dead Letter Queue:
- Failed outbound appeal payloads stored in
dlq_eclaimlink_appealswith: - Appeal ID, claim ID, request body, response status and body, failure reason
- Admin UI for review, correction, and re-send
- Retention: 90 days active (to cover payer appeal timelines)
- Alert: Denial Analyst notified on each DLQ insertion (appeal deadline risk); Denial Manager if > 3 appeals in DLQ
Idempotency:
- Deduplication key:
(appeal_id, submission_datetime) - eClaimLink assigns tracking number on acceptance; stored to prevent duplicate submissions
- Re-submission after correction uses new submission_datetime to differentiate from prior attempt
Reconciliation:
- Daily: compare
appealswithstatus = 'SUBMITTED'vs eClaimLink acknowledgement records - Flag appeals submitted but without tracking number > 24 hours
- Weekly: compare pending appeals in HIS vs eClaimLink portal status
- Monthly: reconcile appeal outcomes received via API vs manual portal checks
- Quarterly: appeal submission success rate and average response time per DHA payer
INT-DEN-005: DOH eClaims (Abu Dhabi / Shafafiya)
Business Context
What flows
- Outbound (Denial Analysis → DOH eClaims)
- Appeal submissions for Abu Dhabi-based payers:
- Shafafiya claim ID
- Denial reason and category
- Appeal level
- Justification text
- Supporting document metadata
- Inbound (DOH eClaims → Denial Analysis)
- Payer responses:
- Appeal status and decision
- Adjusted amounts
- DOH-specific denial/adjustment codes
- Notes and instructions for further appeal or closure
When
- Outbound: When an appeal is submitted from Appeal Management (WF-DEN-003) for DOH jurisdiction claims.
- Inbound: When DOH eClaims posts responses or when HIS polls Shafafiya for status.
Why
- Comply with DOH eClaims/Shafafiya requirements.
- Ensure accurate tracking of appeal timelines and outcomes for Abu Dhabi facilities.
- Support DOH reporting and ADHICS-aligned audit trails.
How often
- On-demand per appeal, with periodic status polling (e.g., daily).
Error impact
- Similar to eClaimLink: risk of missed appeal deadlines and inaccurate financial tracking if integration fails.
HL7 v2.5.1 Technical Detail
DOH eClaims is XML/REST-based; HL7 v2.5.1 is not used for this integration.
FHIR R4 Technical Detail
As with eClaimLink, internal representation can use FHIR ClaimResponse.
Resource: ClaimResponse (internal representation)
{
"resourceType": "ClaimResponse",
"id": "DOH-APPEAL-20260207-0003",
"status": "active",
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/claim-type",
"code": "institutional"
}
]
},
"use": "claim",
"patient": {
"reference": "Patient/2024005678",
"display": "Ahmed Al-Maktoum"
},
"created": "2026-02-07T09:45:00+04:00",
"insurer": {
"reference": "Organization/daman-thiqa",
"display": "Daman (Thiqa)"
},
"request": {
"reference": "Claim/SHF-CLM-20260110-78901"
},
"outcome": "complete",
"disposition": "Appeal approved. Full amount allowed.",
"item": [
{
"itemSequence": 1,
"adjudication": [
{
"category": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/adjudication",
"code": "submitted"
}
]
},
"amount": {
"value": 4200,
"currency": "AED"
}
},
{
"category": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/adjudication",
"code": "benefit"
}
]
},
"amount": {
"value": 4200,
"currency": "AED"
}
}
]
}
],
"payment": {
"amount": {
"value": 4200,
"currency": "AED"
},
"date": "2026-02-18"
},
"extension": [
{
"url": "https://his.gates-group.ae/fhir/StructureDefinition/appeal-level",
"valueString": "second-level"
},
{
"url": "https://his.gates-group.ae/fhir/StructureDefinition/doh-eclaims-appeal-id",
"valueString": "SHF-AP-556677"
}
]
}
Key element mappings
ClaimResponse.request.reference→claims.external_shafafiya_id.ClaimResponse.payment.amount.value→appeal_outcomes.recovered_amount.extension[doh-eclaims-appeal-id]→ external DOH appeal ID.
Search parameters (internal)
GET /fhir/ClaimResponse?extension:doh-eclaims-appeal-id=SHF-AP-556677GET /fhir/ClaimResponse?request=Claim/SHF-CLM-20260110-78901
Error Handling
- Outbound submission failure
- Retry with exponential backoff: 1m, 5m, 15m, 1h (max 4 attempts).
- On repeated failure, set
appeals.status = 'submission_failed'. -
Notify Denial Analyst and Denial Manager.
-
Schema/validation errors (4xx)
- Capture DOH error codes and descriptions.
- Store in
appeal_outcomes.notes. -
No auto-retry; requires data correction.
-
Inbound status polling failure
- Retry next polling cycle.
-
If no response for > 30 days, mark appeal as “stale” and prompt manual follow-up.
-
Dead letter queue
-
dlq_doh_eclaims_appealsfor failed outbound payloads. -
Manual recovery
- Manual update of appeal status and recovered amount based on Shafafiya portal if integration unavailable.
Retry and Recovery
Retry Strategy:
| Scenario | Strategy | Intervals | Max Attempts |
|---|---|---|---|
| Outbound appeal submission timeout / 5xx | Exponential backoff | 1m, 5m, 15m, 1h | 4 |
| Outbound appeal 4xx (schema/validation error) | No auto-retry | N/A | Capture DOH error codes; correct data; manual resubmit |
| DOH data quality error (invalid Emirates ID, facility) | No auto-retry | N/A | High severity; notify Compliance Officer |
| Inbound status polling failure | Retry next polling window | Next scheduled poll (e.g., daily) | Automatic |
| Certificate/auth failure | No auto-retry | N/A | Alert IT; coordinate with DOH for cert renewal |
Dead Letter Queue:
- Failed outbound appeal payloads stored in
dlq_doh_eclaims_appealswith: - Appeal ID, claim ID, Shafafiya reference, request body, DOH error codes, failure reason
- DOH data quality rejections flagged separately for Compliance Officer review
- Admin UI for review, correction, and re-send
- Retention: 90 days active (to cover DOH appeal timelines)
- Alert: Denial Analyst notified on each DLQ insertion; Compliance Officer for DOH data quality errors; Denial Manager if > 3 appeals in DLQ
Idempotency:
- Deduplication key:
(appeal_id, submission_datetime) - DOH assigns unique response reference on acceptance; stored to prevent duplicate submissions
- Shafafiya claim IDs used as secondary deduplication check
Reconciliation:
- Daily: compare
appealswith DOHstatus = 'SUBMITTED'vs Shafafiya acknowledgement records - Flag appeals submitted but without DOH response > 24 hours
- Weekly: compare pending DOH appeals in HIS vs Shafafiya portal status
- Monthly: reconcile appeal outcomes received via API vs manual Shafafiya portal checks
- Quarterly: DOH appeal submission success rate, response time, and data quality error trends
NABIDH / Malaffi Integration
The Denial Analysis module does not directly exchange data with:
- NABIDH (Dubai HIE), or
- Malaffi (Abu Dhabi HIE)
Denial data is financial/administrative and not part of the clinical datasets typically shared via these HIEs. However:
- Clinical documentation used to support appeals (e.g., medical necessity letters) must remain consistent with clinical data sent to NABIDH/Malaffi.
- Any future reporting that combines denial analytics with HIE data must comply with:
- DHA NABIDH policies for data use and secondary analytics.
- DOH Malaffi data governance and ADHICS requirements.
No HL7 v2.5.1 or FHIR HIE-specific profiles are required for this module at this time.
Authentication & Security
All integrations must comply with UAE PDPL, DOH ADHICS, DHA security policies, and TDRA/NESA cybersecurity standards.
Internal APIs / Shared Database (INT-DEN-001, 002, 003)
- Network
- Restricted to hospital internal network / VPN.
-
Segregated RCM subnet with firewall rules limiting access to required services.
-
Authentication
- Service-to-service authentication via:
- Mutual TLS (mTLS) between microservices where applicable.
- Short-lived JWTs issued by central IAM for internal REST APIs.
-
Database access via:
- Dedicated technical users with least-privilege roles.
- No shared generic accounts.
-
Authorization
- Role-based access control (RBAC) enforced at API and DB layers.
-
Denial Analysis services can read/write only to relevant schemas/tables.
-
Encryption
- TLS 1.2+ for all internal HTTP traffic.
- Transparent Data Encryption (TDE) for databases containing denial and claim data.
- Encrypted backups with key management aligned to TDRA/NESA guidance.
eClaimLink (INT-DEN-004)
- Transport
- HTTPS with TLS 1.2+.
-
Mutual TLS using DHA-approved client certificate issued to the facility.
-
Authentication
- OAuth 2.0 client credentials flow:
- Client ID/secret stored in secure vault.
- Access tokens cached and refreshed automatically.
-
Scope limited to appeal-related operations.
-
Message Security
- Request/response payloads logged with sensitive fields masked (e.g., Emirates ID).
-
Hashing of uploaded document content for integrity verification.
-
Compliance
- DHA eClaimLink security policies.
- UAE PDPL: minimum necessary data, purpose limitation, audit logging of all appeal submissions and responses.
DOH eClaims / Shafafiya (INT-DEN-005)
- Transport
- HTTPS with TLS 1.2+.
-
Mutual TLS using DOH-issued client certificate.
-
Authentication
- OAuth 2.0 (client credentials or DOH-specified mechanism).
-
Token storage and rotation via secure vault.
-
Message Security
-
Similar to eClaimLink: masked logging, integrity checks, and strict access controls.
-
Compliance
- DOH eClaims and Shafafiya security requirements.
- ADHICS controls for:
- Access control and authentication.
- Audit logging and monitoring.
- Data retention and disposal.
General Security Controls
- Audit Logging
- Log all integration events:
- Who initiated (user ID / service ID).
- What data was sent/received (with masking).
- When (timestamp).
- Outcome (success/failure, error codes).
-
Logs retained per facility policy and UAE PDPL requirements.
-
Monitoring & Alerting
- Integration health dashboards with:
- Message volumes.
- Error rates.
- Queue depths.
-
Alerts to IT and RCM leadership when:
- Error rate exceeds threshold (e.g., >2% in 1 hour).
- Dead letter queues accumulate messages.
- External endpoints unavailable for >15 minutes.
-
Paperless Transformation
- All integrations are designed to:
- Replace paper appeal letters and fax submissions with electronic submissions.
- Replace manual spreadsheets for denial tracking with system-generated analytics.
- Provide electronic audit trails for all denial and appeal activities.
This specification provides the integration-level requirements for the Denial Analysis module; table schemas, workflows, and UI details are defined in the corresponding module documents (../denial-analysis/01-domain-model.md, ../denial-analysis/02-workflows.md, etc.).