Billing & Claims Management Workflows

Billing & Claims Management Workflows

This document defines seven core workflows for the Billing & Claims Management (billing-claims) module. Each workflow includes process steps, actors, decision points, integration hooks, exception handling, and the paperless transformation achieved by the HIS.

Regulatory context: All workflows must comply with UAE Federal Decree-Law No. 45/2021 on Personal Data Protection (UAE PDPL), MOH/DOH/DHA revenue cycle regulations, and emirate-level health information exchange policies (NABIDH in Dubai, Malaffi in Abu Dhabi). Claims workflows must follow DHA eClaimLink and DOH eClaims/Shafafiya technical and business rules, including coding standards (ICD-10-AM, CPT, SNOMED CT, LOINC, RxNorm) and payer-specific contract terms.


WF-BILLINGCLAIMS-001: Automated Charge Capture

(Reference to brief: WF-BIL-001)

Process Flow

Actor: System (automated), Charge Entry Clerk
Trigger: Clinical service performed (order completed, procedure done, medication dispensed, bed charge accrued)

Pre-conditions:

  • Patient and encounter exist in shared entities (patients, encounters)
  • Provider, facility, and department are valid and active
  • Relevant clinical order/result exists in source module (CPOE, LIS, RIS, PIS, scheduling)
  • Contract and fee schedule available for patient’s active insurance (via policy-contract-mgmt)
  • Charge description master and charge_capture_rules configured and active
  1. Receive service event - System receives real-time event from:

    • CPOE / LIS / RIS / PIS (order completed/resulted) or
    • Scheduling (bed day, OR time, visit completion).
    • Event includes patient, encounter, provider, service date/time, and clinical code (e.g., SNOMED CT, LOINC, internal procedure code).
  2. Validate encounter and coverage - System verifies:

    • Encounter is open or within allowable post-discharge window.
    • Patient has active insurance coverage for service date (via policy-contract-mgmt).
    • If missing/invalid, flag event for manual review (no charge created yet).
  3. Map service to chargeable item - System uses Charge Description Master and charge_capture_rules to map:

    • Clinical code → CPT/HCPCS, revenue code, internal service code.
    • If no mapping found, create exception for Charge Entry Clerk.
  4. Determine payer and contract - System identifies primary payer, plan, and contract from policy-contract-mgmt (e.g., Daman, THIQA, Oman Insurance). - For self-pay, assign facility self-pay fee schedule.

  5. Apply charge capture rules - System evaluates charge_capture_rules:

    • Modifier logic (e.g., bilateral procedures, multiple procedures).
    • Bundling/unbundling (e.g., inclusive services).
    • Facility vs professional component (TC/26 modifiers).
    • Rules may suppress duplicate charges or split charges into multiple lines.
  6. Calculate charge amount - System queries fee_schedule_items (via policy-contract-mgmt) for:

    • Contracted rate for CPT/HCPCS + modifier(s).
    • Calculates:
    • charge_amount (gross charge).
    • contracted_rate (expected allowed amount).
  7. Attach diagnosis and medical necessity - System pulls ICD-10-AM diagnoses from encounter (via EHR) and:

    • Associates them with the charge.
    • Validates medical necessity against payer rules (e.g., DHA/DOH policies).
  8. Create charge record - System INSERTs into charges:

    • Patient, encounter, provider, facility, department, service date, CPT/HCPCS, ICD-10 codes, modifiers, quantity, charge_amount, contracted_rate, source_module, source_order_id, charge_status = PENDING_EDIT.
    • System INSERTs into charge_details for revenue code, cost center, DRG (if applicable).
  9. Run pre-claim edit checks - System evaluates claim_edits relevant to charge-level (e.g., age/gender appropriateness, mutually exclusive procedures, frequency limits). - If errors/warnings:

    • Store edit results and set charge_status = ERROR or WARNING.
    • If clean:
    • Set charge_status = READY.
  10. Flag exceptions for manual review

    • Charges with ERROR status appear in Charge Review Worklist (SCR-BIL-001) for Charge Entry Clerk to correct (e.g., missing modifier, invalid diagnosis).
  11. Accumulate charges on encounter

    • Charges remain linked to encounter until:
    • Encounter is discharged/closed, or
    • Periodic claim generation job runs (see WF-BILLINGCLAIMS-002).

Data Modified:

  • charges — INSERT, UPDATE (charge_status, contracted_rate, error flags)
  • charge_details — INSERT
  • charge_capture_rules — READ
  • claim_edits — READ
  • Shared references (READ only): patients, encounters, providers, facilities, departments, fee_schedule_items, contracts, insurance_plans, payers

Mermaid Flowchart

flowchart TD A["Service event from CPOE/LIS/RIS/PIS/Scheduling"] --> B["Validate encounter & coverage"] B --> C{"Encounter & coverage valid?"} C -->|"No"| C1["Create exception - no charge<br/>Route to Charge Review Worklist"] --> Z["End"] C -->|"Yes"| D["Map service to CPT/HCPCS via CDM & rules"] D --> E{"Mapping found?"} E -->|"No"| E1["Create unmapped service exception<br/>Charge not created"] --> Z E -->|"Yes"| F["Determine payer, plan, contract"] F --> G["Apply charge_capture_rules<br/>(modifiers, bundling)"] G --> H["Calculate charge_amount & contracted_rate"] H --> I["Attach ICD-10-AM diagnoses<br/>and check medical necessity"] I --> J["Create charge & charge_details records"] J --> K["Run claim_edits at charge level"] K --> L{"Errors/warnings?"} L -->|"Yes"| L1["Set charge_status=ERROR/WARNING<br/>Add to Charge Review Worklist"] --> Z L -->|"No"| M["Set charge_status=READY"] M --> Z["End - charge available for claim generation"]

Decision Points

  1. Encounter & coverage valid? - If no active encounter or coverage on service date → no charge created; event queued for manual review.
  2. Service mapping found? - If no CDM mapping → exception; Charge Entry Clerk must configure mapping or manually enter charge.
  3. Edit errors/warnings present? - If errors → charge blocked from claim generation until corrected. - If warnings → may proceed but highlighted in worklist for review.

Integration Points

  • CPOE / LIS / RIS / PIS / Scheduling
  • Direction: Inbound
  • Data: Completed orders, procedures, bed days, OR time
  • Protocol: Internal API / HL7 DFT^P03, ADT (INT-BIL-001, INT-BIL-002)
  • Policy & Contract Management (policy-contract-mgmt)
  • Direction: Inbound
  • Data: Fee schedules, contracts, payer rules
  • Protocol: Internal API / shared DB (INT-BIL-003)
  • EHR & Patient Management (ehr-patient-mgmt)
  • Direction: Inbound
  • Data: Patient demographics, diagnoses, provider/facility references
  • Protocol: Internal API / HL7 ADT (INT-BIL-009)

Exception Handling

  • Missing encounter or coverage:
  • Event logged; Charge status not created.
  • Worklist entry for Charge Entry Clerk to correct registration/coverage.
  • No CDM mapping:
  • System raises configuration alert to Revenue Cycle Manager.
  • Temporary manual charge entry allowed with audit trail.
  • Rule engine failure (technical):
  • System creates basic charge with minimal fields and flags charge_status = SYSTEM_ERROR.
  • Technical alert to IT; charges excluded from claim generation until reprocessed.
  • High-risk PDPL data access:
  • Access to financial data logged with user ID and timestamp; only authorized roles can view/edit.

Paperless Transformation

Previously Paper-Based Now Digital In-System Notes
Paper charge tickets/superbills completed by clinicians Automated charge creation from clinical events with charge_capture_rules Reduces missed charges and manual data entry errors
Handwritten procedure logs in OR and wards Structured OR/bed-day events feeding charges via internal API/HL7 DFT Near real-time charge capture; supports DOH/DHA audit
Manual rate lookup from printed fee schedules Automated contracted rate retrieval from fee_schedule_items Ensures correct pricing per payer contract
Paper lists of bundling rules Centralized charge_capture_rules engine Consistent application of complex rules

Remaining Paper Touchpoints: None — fully digital (subject to rare use of paper notes in downtime procedures, which are later back-entered).

Inputs and Outputs

Inputs:

Source Data Element Format
CPOE / LIS / RIS / PIS / Scheduling Completed service events (orders, procedures, bed days, OR time) HL7 DFT^P03 / Internal API event
EHR & Patient Management Patient demographics (MRN, Emirates ID, DOB, gender) patients, patient_identifiers tables
EHR & Patient Management Active encounter details encounters, encounter_details tables
EHR & Patient Management ICD-10-AM diagnoses for encounter encounter_diagnoses table
Policy & Contract Management Fee schedules, contracted rates per payer/plan fee_schedule_items, contracts tables
Policy & Contract Management Charge capture rules (bundling, modifiers) charge_capture_rules table
Policy & Contract Management Payer-specific claim edit rules claim_edits table
Charge Description Master Service-to-CPT/HCPCS mappings cdm_items table

Outputs:

Destination Data Element Format
charges Charge record (patient, encounter, CPT, ICD-10, amount, status) SQL INSERT
charge_details Revenue code, cost center, CDM reference SQL INSERT
Charge Review Worklist (SCR-BIL-001) Exception items for manual review Worklist entry
order_audit_log Audit trail for charge creation SQL INSERT

Post-conditions:

  • Charge record exists with charge_status = READY, WARNING, or ERROR
  • Contracted rate populated from fee schedule
  • ICD-10-AM diagnoses linked to charge for medical necessity
  • Pre-claim edit results stored; errors routed to worklist

SLA and Timing

Step Target Time Escalation Measurement Source
Service event to charge creation < 5 seconds If > 30s, alert interface team charges.created_at minus source event timestamp
CDM mapping lookup < 1 second If > 5s, degrade to async queue charge_details.mapping_duration_ms
Charge capture rule evaluation < 2 seconds If > 10s, create basic charge and flag for reprocessing charges.rule_eval_duration_ms
Fee schedule rate retrieval < 1 second If > 5s, mark charge as pending_pricing charges.rate_lookup_duration_ms
Pre-claim edit check completion < 3 seconds If > 15s, defer edits to batch; alert IT charges.edit_check_completed_at
Exception worklist response (manual) < 4 hours (business hours) If > 8 hours, escalate to Revenue Cycle Manager charges.updated_at minus charges.created_at for ERROR items

State Transition Diagram

stateDiagram-v2 [*] --> PENDING_EDIT : Service event received and charge created PENDING_EDIT --> READY : Pre-claim edits pass (no errors) PENDING_EDIT --> WARNING : Edits pass with warnings PENDING_EDIT --> ERROR : Edit errors detected PENDING_EDIT --> SYSTEM_ERROR : Rule engine or mapping failure WARNING --> READY : Clerk reviews and clears warnings ERROR --> READY : Clerk corrects data and re-runs edits ERROR --> VOID : Charge determined invalid SYSTEM_ERROR --> PENDING_EDIT : IT resolves, charge reprocessed READY --> BILLED : Charge included in submitted claim (WF-002/003) BILLED --> PAID : Payment posted (WF-004) BILLED --> DENIED : Payer denies charge BILLED --> PARTIALLY_PAID : Partial payment received DENIED --> APPEALED : Appeal submitted (WF-006) APPEALED --> PAID : Appeal overturned APPEALED --> WRITTEN_OFF : Appeal upheld, write-off approved VOID --> [*] PAID --> [*] WRITTEN_OFF --> [*]

WF-BILLINGCLAIMS-002: Claim Generation & Scrubbing

(Reference to brief: WF-BIL-002)

Process Flow

Actor: Billing Specialist, System (automated)
Trigger: Encounter closed/discharged, or scheduled batch claim generation job

Pre-conditions:

  • Encounter status = discharged/closed in encounters
  • All relevant charges for encounter have been captured (charges with charge_statusDRAFT)
  • Patient insurance coverage and payer contract are valid for service dates
  • Claim edit rules (claim_edits) and payer rules are configured and active
  1. Identify encounters ready for billing - System scans encounters for:

    • Discharged/closed status.
    • No existing active claim for primary payer.
    • Excludes encounters with unresolved charge errors.
  2. Aggregate charges into claim - For each encounter and payer:

    • Group all eligible charges with charge_status = READY.
    • System creates claim header candidate (one per encounter per payer).
  3. Create claim header - INSERT into claims:

    • Patient, encounter, payer, plan, contract, claim_type (inpatient/outpatient), total_charge_amount (sum of charges), claim_status = DRAFT, created_at.
  4. Create claim lines - For each charge:

    • INSERT into claim_lines with:
    • CPT, modifiers, ICD-10 pointer, quantity, charge_amount.
    • Link to charges.charge_id.
  5. Apply standard claim edits - System evaluates claim_edits:

    • CCI bundling/unbundling.
    • Modifier validation.
    • Diagnosis–procedure matching (ICD-10-AM vs CPT).
    • Age/gender appropriateness.
    • Updates claim/line statuses and logs edit results.
  6. Validate completeness - System checks:

    • Attending provider present and valid.
    • Facility and department codes valid per DHA/DOH requirements.
    • Patient identifiers (MRN, Emirates ID 784-YYYY-NNNNNNN-C) and demographics complete.
    • If missing, mark claim claim_status = ERROR.
  7. Run payer-specific validations - For DHA (Dubai) payers:

    • Validate eClaimLink XML requirements (e.g., provider DHA license, NABIDH facility ID).
    • For DOH (Abu Dhabi) payers:
    • Validate Shafafiya/DOH eClaims rules (e.g., DOH provider ID, Malaffi facility ID).
    • Apply payer-specific rules from policy-contract-mgmt (e.g., THIQA, Daman).
  8. Calculate expected reimbursement - For each claim line:

    • Retrieve contracted allowed amount from fee_schedule_items / contract.
    • Update claim_lines.allowed_amount and claims.total_expected_amount (if stored).
  9. Route errors to worklist - Claims with any hard errors:

    • Set claim_status = EDIT_ERROR.
    • Add to Claim Generation & Scrubbing screen (SCR-BIL-002) for Billing Specialist.
  10. Mark clean claims as ready

    • Claims with no hard errors:
    • Set claim_status = READY_FOR_SUBMISSION.
    • Generate internal claim batch ID if part of batch run.
  11. Generate claim payloads

    • For each ready claim:
    • Build DHA eClaimLink XML or DOH eClaims payload as per payer.
    • Store reference in claim_submissions (pre-submission record with status PENDING).

Data Modified:

  • claims — INSERT, UPDATE (claim_status, totals, expected amounts)
  • claim_lines — INSERT, UPDATE (allowed_amount, line_status)
  • charges — UPDATE (link to claim_id if modeled, status to BILLED when submitted)
  • claim_edits — READ
  • claim_submissions — INSERT (pre-populated for submission)
  • Shared references (READ): patients, encounters, providers, facilities, departments, payers, insurance_plans, contracts, fee_schedule_items

Mermaid Flowchart

flowchart TD A["Encounter discharged/closed"] --> B["Identify encounters ready for billing"] B --> C["Aggregate READY charges by payer"] C --> D["Create claim header in claims"] D --> E["Create claim_lines from charges"] E --> F["Run standard claim_edits"] F --> G["Validate completeness (provider, facility, IDs)"] G --> H["Run payer-specific validations (DHA/DOH/payer rules)"] H --> I["Calculate expected reimbursement"] I --> J{"Any hard errors?"} J -->|"Yes"| J1["Set claim_status=EDIT_ERROR<br/>Route to Claim Edit Worklist"] --> Z["End"] J -->|"No"| K["Set claim_status=READY_FOR_SUBMISSION"] K --> L["Generate DHA/DOH/private payer payloads"] L --> M["Insert pre-submission record in claim_submissions"] M --> Z["End - ready for WF-BILLINGCLAIMS-003"]

Decision Points

  1. Encounter ready for billing? - If charges missing or unresolved errors → encounter excluded from claim generation.
  2. Hard edit errors present? - If yes → claim blocked from submission; Billing Specialist must correct data.
  3. Payer-specific rule failures? - If DHA/DOH format or business rule fails → claim flagged with specific error codes for correction.

Integration Points

  • Policy & Contract Management
  • Direction: Inbound
  • Data: Contracted rates, payer-specific rules, financial class
  • Protocol: Internal API / shared DB (INT-BIL-003)
  • EHR & Patient Management
  • Direction: Inbound
  • Data: Patient demographics, Emirates ID, diagnoses, provider credentials
  • Protocol: Internal API / HL7 ADT (INT-BIL-009)
  • DHA eClaimLink / DOH eClaims
  • Direction: Outbound (payload preparation)
  • Data: Claim XML/structured payload (not yet transmitted; actual send in WF-003)
  • Protocol: DHA eClaimLink REST, DOH eClaims/Shafafiya API (INT-BIL-004, INT-BIL-005)

Exception Handling

  • Missing mandatory data (e.g., Emirates ID, provider license):
  • Claim set to EDIT_ERROR; error details shown on SCR-BIL-002.
  • Invalid coding (ICD-10-AM/CPT mismatch):
  • Claim line flagged; Billing Specialist can correct diagnosis or procedure codes.
  • System failure during batch generation:
  • Partial progress logged; successfully created claims remain; failed encounters re-queued for next run.
  • PDPL compliance:
  • Only authorized Billing Specialist/Revenue Cycle Manager roles can view full financial details; access logged.

Paperless Transformation

Previously Paper-Based Now Digital In-System Notes
Manual assembly of paper claim forms (DHA/DOH) Automated claims and claim_lines creation with payer-specific formatting Reduces preparation time and errors
Paper-based edit checklists Centralized claim_edits engine with real-time validation Ensures consistent compliance with DHA/DOH rules
Manual calculation of expected reimbursement Automated contracted rate and allowed amount calculation Supports variance analysis and AR forecasting
Physical folders for “claims with issues” Digital Claim Edit Worklist (SCR-BIL-002) Improves visibility and turnaround time

Remaining Paper Touchpoints: None — fully digital, except rare payer requests for supporting documents that may still be scanned and attached.

Inputs and Outputs

Inputs:

Source Data Element Format
charges All eligible charges with charge_status = READY for encounter charges table query
encounters Encounter status (discharged/closed), admission/discharge dates encounters, encounter_details tables
EHR & Patient Management Patient demographics, Emirates ID, provider credentials patients, providers tables
Policy & Contract Management Contracted rates, payer rules, financial class fee_schedule_items, contracts, claim_edits tables
DHA / DOH Payer-specific validation rules (eClaimLink schema, Shafafiya rules) Master data / API

Outputs:

Destination Data Element Format
claims Claim header (patient, encounter, payer, total charge, status) SQL INSERT
claim_lines Individual service lines (CPT, ICD-10 pointer, amounts) SQL INSERT
claim_submissions Pre-submission record with payload reference SQL INSERT
Claim Edit Worklist (SCR-BIL-002) Claims with hard errors for correction Worklist entry
DHA eClaimLink / DOH eClaims Claim XML payload (prepared, not yet transmitted) XML per payer schema

Post-conditions:

  • Claim exists with claim_status = READY_FOR_SUBMISSION or EDIT_ERROR
  • All claim lines linked to source charges
  • Expected reimbursement calculated from contracted rates
  • Payer-specific payload generated and stored for submission

SLA and Timing

Step Target Time Escalation Measurement Source
Encounter close to claim generation start < 2 hours (batch) or < 15 minutes (real-time) If > 4 hours post-discharge, alert Billing Specialist claims.created_at minus encounters.discharge_datetime
Charge aggregation per encounter < 10 seconds If > 60s, log performance alert claims.aggregation_duration_ms
Standard claim edit execution < 5 seconds per claim If > 30s, defer to batch; alert IT claims.edit_duration_ms
Payer-specific validation < 3 seconds per claim If > 15s, queue for async validation claims.payer_validation_duration_ms
Edit error correction (manual) < 24 hours If > 48 hours, escalate to Revenue Cycle Manager claims.updated_at minus claims.created_at for EDIT_ERROR claims
Claim generation to ready-for-submission < 24 hours post-discharge If > 48 hours, flag as submission lag risk KPI: Days in AR (DBILLED)

State Transition Diagram

stateDiagram-v2 [*] --> DRAFT : Claim header created from encounter charges DRAFT --> SCRUBBING : Standard and payer-specific edits initiated SCRUBBING --> EDIT_ERROR : Hard edit errors detected SCRUBBING --> READY_FOR_SUBMISSION : All edits pass EDIT_ERROR --> SCRUBBING : Billing Specialist corrects and re-runs edits EDIT_ERROR --> VOID : Claim determined unbillable READY_FOR_SUBMISSION --> SUBMITTED : Transmitted to payer (WF-003) SUBMITTED --> IN_REVIEW : Payer acknowledges receipt IN_REVIEW --> ADJUDICATED : Payer processes claim ADJUDICATED --> PAID : Full payment received (WF-004) ADJUDICATED --> PARTIALLY_PAID : Partial payment received ADJUDICATED --> DENIED : Payer denies claim DENIED --> APPEAL_IN_PROGRESS : Appeal submitted (WF-006) APPEAL_IN_PROGRESS --> PAID : Appeal overturned APPEAL_IN_PROGRESS --> WRITTEN_OFF : Appeal upheld, write-off approved PARTIALLY_PAID --> PATIENT_BILLING : Patient responsibility transferred (WF-005) VOID --> [*] PAID --> [*] WRITTEN_OFF --> [*]

WF-BILLINGCLAIMS-003: Electronic Claim Submission

(Reference to brief: WF-BIL-003)

Process Flow

Actor: Billing Specialist, System (automated batch)
Trigger: Claims marked as READY_FOR_SUBMISSION (from WF-BILLINGCLAIMS-002)

Pre-conditions:

  • Claims exist in claims with claim_status = READY_FOR_SUBMISSION
  • Corresponding claim_submissions pre-records exist or will be created
  • DHA eClaimLink and DOH eClaims connectivity configured and active
  • Submission channels defined in master data (Claim Submission Channels)
  1. Select claims for submission - System or Billing Specialist filters claims by:

    • Payer, submission channel, date range, facility.
    • Selects all with claim_status = READY_FOR_SUBMISSION.
  2. Batch claims by payer and channel - System groups claims into batches:

    • DHA eClaimLink (Dubai payers).
    • DOH eClaims/Shafafiya (Abu Dhabi payers).
    • Other private payer APIs or manual channels.
  3. Create submission batch records - For each batch:

    • Generate batch_id.
    • INSERT multiple rows into claim_submissions with:
    • submission_channel, submission_datetime (planned), batch_id, gateway_status = PENDING.
  4. Transmit to DHA eClaimLink - For DHA batch:

    • System builds XML payload per eClaimLink schema.
    • Sends via REST API (INT-BIL-004).
    • Receives immediate acknowledgement (ACK/NACK).
  5. Transmit to DOH eClaims/Shafafiya - For DOH batch:

    • System builds DOH eClaims payload.
    • Sends via Shafafiya API (INT-BIL-005).
    • Receives initial response.
  6. Transmit to private payer portals (if integrated) - For payers with direct API:

    • Send claims via agreed protocol.
    • For non-integrated payers:
    • Mark claims as MANUAL_SUBMISSION_REQUIRED and provide export (e.g., PDF/CSV) for portal upload.
  7. Record gateway responses - For each claim in batch:

    • Update claim_submissions.gateway_status (e.g., ACCEPTED, REJECTED).
    • Store gateway_response, response_datetime.
    • Update claims.claim_status:
    • SUBMITTED if accepted.
    • GATEWAY_REJECTED if rejected.
  8. Handle gateway rejections - Claims with GATEWAY_REJECTED:

    • Appear in Claim Submission Tracker (SCR-BIL-003).
    • Billing Specialist reviews rejection reasons and corrects underlying claim.
    • On correction, new submission record created for resubmission.
  9. Track claim lifecycle - System periodically polls DHA/DOH/payer APIs for status updates:

    • In review, adjudicated, paid, denied.
    • Updates claim_submissions and claims.claim_status accordingly.
  10. Support manual submission

    • For payers requiring paper or portal-only:
    • System generates claim print/export.
    • Billing Specialist records manual submission date and reference in claim_submissions.

Data Modified:

  • claim_submissions — INSERT, UPDATE (gateway_status, gateway_response, response_datetime, rejection_reason)
  • claims — UPDATE (claim_status)
  • Shared references (READ): payers, contracts, facilities

Mermaid Flowchart

flowchart TD A["Claims with status READY_FOR_SUBMISSION"] --> B["Group by payer & submission channel"] B --> C["Create submission batches & records"] C --> D["Submit DHA batch to eClaimLink"] C --> E["Submit DOH batch to Shafafiya"] C --> F["Submit to private payer APIs or mark as manual"] D --> G["Receive DHA ACK/NACK"] E --> H["Receive DOH ACK/NACK"] F --> I["Receive private payer ACK/NACK or manual confirmation"] G --> J["Update claim_submissions & claims status"] H --> J I --> J J --> K{"Gateway rejected?"} K -->|"Yes"| K1["Set claim_status=GATEWAY_REJECTED<br/>Route to Submission Tracker"] --> Z["End"] K -->|"No"| L["Set claim_status=SUBMITTED<br/>Start status polling"] L --> M["Periodic status updates from payers"] M --> N["Update claim_submissions & claims<br/>(in review, adjudicated, etc.)"] N --> Z["End"]

Decision Points

  1. Submission channel available? - If no electronic channel configured → mark as manual submission; still tracked in system.
  2. Gateway ACK/NACK result? - If NACK (rejected) → claim not considered submitted; must be corrected and resubmitted.
  3. Status updates from payer? - If adjudicated → triggers WF-BILLINGCLAIMS-004 (Payment Posting). - If denied → flows into WF-BILLINGCLAIMS-006 (Denial Management).

Integration Points

  • DHA eClaimLink
  • Direction: Outbound/Inbound
  • Data: Claim XML submissions, ACK/NACK, status updates
  • Protocol: REST API (INT-BIL-004)
  • DOH eClaims / Shafafiya
  • Direction: Outbound/Inbound
  • Data: Claim submissions, responses
  • Protocol: DOH eClaims API (INT-BIL-005)
  • Private payer portals
  • Direction: Outbound/Inbound (where integrated)
  • Data: Claim submissions, status
  • Protocol: Payer-specific APIs or manual export

Exception Handling

  • API connectivity failure (DHA/DOH):
  • Batch marked as FAILED_TRANSMISSION.
  • Automatic retries with backoff; if repeated failure, alert Billing Specialist.
  • Schema validation error:
  • If local XML generation fails → claim remains READY_FOR_SUBMISSION with error log; requires technical correction.
  • Duplicate submission detection:
  • System checks payer reference IDs to avoid re-submitting already accepted claims.
  • PDPL considerations:
  • Only minimum necessary patient data sent; logs maintained for all external transmissions.

Paperless Transformation

Previously Paper-Based Now Digital In-System Notes
Printing and mailing/faxing paper claims Direct electronic submission to DHA eClaimLink and DOH eClaims via API Faster reimbursement, reduced postage and handling
Manual spreadsheets to track submitted claims claim_submissions table and SCR-BIL-003 for real-time tracking Improves visibility and reduces lost claims
Phone calls to check claim status Automated status polling and dashboard updates Frees staff time; better KPIs
Manual stamping of “submitted” on paper files System claim_status transitions with full audit trail Supports DOH/DHA audits

Remaining Paper Touchpoints: Some payers may still require paper attachments; these are scanned and linked to the claim record.

Inputs and Outputs

Inputs:

Source Data Element Format
claims Claims with claim_status = READY_FOR_SUBMISSION claims table query
claim_submissions Pre-submission records with payload references claim_submissions table
Master Data Submission channel configuration (DHA, DOH, private payer) claim_submission_channels
DHA eClaimLink eClaimLink XML schema and endpoint configuration REST API config
DOH eClaims / Shafafiya DOH submission schema and endpoint configuration API config

Outputs:

Destination Data Element Format
DHA eClaimLink Claim XML batches for Dubai payers XML over HTTPS (INT-BIL-004)
DOH eClaims / Shafafiya Claim batches for Abu Dhabi payers API payload (INT-BIL-005)
claim_submissions Gateway status, response, timestamps SQL UPDATE
claims Updated claim_status (SUBMITTED, GATEWAY_REJECTED) SQL UPDATE
Claim Submission Tracker (SCR-BIL-003) Rejected claims for review Worklist entry

Post-conditions:

  • All accepted claims have claim_status = SUBMITTED with gateway reference
  • Rejected claims routed to Submission Tracker with rejection reasons
  • Periodic status polling initiated for submitted claims
  • Submission audit trail recorded with timestamps and batch IDs

SLA and Timing

Step Target Time Escalation Measurement Source
Ready-for-submission to batch creation < 1 hour (within submission window) If > 4 hours, alert Billing Specialist claim_submissions.created_at minus claims.ready_datetime
Batch transmission to gateway < 5 minutes per batch If > 15 minutes, retry; if > 30 minutes, alert IT claim_submissions.submitted_at
Gateway ACK/NACK response < 30 seconds (DHA/DOH target) If > 2 minutes, log timeout; retry batch claim_submissions.response_datetime
Rejected claim correction and resubmission < 24 hours If > 48 hours, escalate to Revenue Cycle Manager claim_submissions.resubmission_datetime
Claim status polling interval Every 4 hours (configurable) If no status update > 7 days, alert AR Specialist claim_submissions.last_poll_datetime
Overall submission lag (discharge to first submission) < 3 calendar days If > 5 days, flag on AR dashboard; > 10 days, escalate KPI: Submission Lag Days

WF-BILLINGCLAIMS-004: Payment Posting & Reconciliation

(Reference to brief: WF-BIL-004)

Process Flow

Actor: Payment Poster, AR Specialist
Trigger: Remittance advice / Explanation of Benefits (EOB) received from payer (ERA file or paper EOB)

Pre-conditions:

  • Claims previously submitted and present in claims
  • ERA import interfaces configured for DHA/DOH and major payers
  • Bank deposit accounts configured in finance system
  1. Receive remittance advice - System imports ERA files from:

    • DHA eClaimLink, DOH eClaims, or payer-specific channels.
    • For paper EOBs, Payment Poster manually enters remittance header.
  2. Create remittance record - INSERT into remittance_advice:

    • Payer, remittance_date, total_paid, total_claims, file_reference, import_datetime, status = IMPORTED.
  3. Parse ERA and match claims - System parses remittance details:

    • For each remitted claim, match by payer claim reference, internal claim ID, or patient/encounter.
    • If no match found, mark as UNMATCHED for manual review.
  4. Create payment batch - INSERT into payments:

    • Payer, payment_date, payment_amount (sum of remitted payments), payment_method (EFT, cheque), check_number/EFT reference, batch_id, reconciled = false.
  5. Allocate payments to claims - For each matched claim:

    • Determine allowed_amount, paid_amount, adjustment_amount, patient_responsibility.
    • INSERT into payment_allocations:
    • payment_id, claim_id, claim_line_id, allocated_amount, adjustment_amount, adjustment_code, patient_responsibility_amount.
  6. Update claim and claim lines - UPDATE claim_lines:

    • Set paid_amount, adjustment_amount, denial_code (if any), line_status (e.g., PAID, PARTIAL, DENIED).
    • UPDATE claims:
    • total_paid_amount, total_adjusted_amount, patient_responsibility, claim_status (e.g., PAID, PARTIALLY_PAID, DENIED).
  7. Calculate patient responsibility and transfer to patient billing - For each claim:

    • Compute patient responsibility (co-pay, co-insurance, deductible).
    • Create or update patient_invoices and patient_payments linkage as needed (or flag for WF-BILLINGCLAIMS-005).
  8. Identify underpayments and denials - System compares paid_amount vs allowed_amount (from contracts). - If underpayment beyond tolerance or denial codes present:

    • Flag for Denial Specialist/AR Specialist.
    • Send summary to Denial Analysis module (INT-BIL-006).
  9. Reconcile bank deposits - Payment Poster verifies:

    • payments.payment_amount vs bank statement deposits.
    • Once reconciled, set payments.reconciled = true and record bank_deposit_date.
  10. Generate posting reports

    • System generates daily payment posting report for finance and Revenue Cycle Manager.

Data Modified:

  • remittance_advice — INSERT, UPDATE (status)
  • payments — INSERT, UPDATE (reconciled, bank_deposit_date)
  • payment_allocations — INSERT
  • claim_responses — INSERT (for detailed adjudication, if modeled here)
  • claims — UPDATE (total_paid_amount, total_adjusted_amount, patient_responsibility, claim_status)
  • claim_lines — UPDATE (paid_amount, adjustment_amount, denial_code, line_status)
  • ar_aging — UPDATE/REGENERATE (via scheduled job)
  • Shared references (READ): payers, contracts, patients, encounters

Mermaid Flowchart

flowchart TD A["ERA file or paper EOB received"] --> B["Create remittance_advice record"] B --> C["Parse ERA and match to claims"] C --> D{"Claim match found?"} D -->|"No"| D1["Mark remittance line as UNMATCHED<br/>Route to manual review"] --> Z["End"] D -->|"Yes"| E["Create payment batch in payments"] E --> F["Allocate payments to claims & lines<br/>insert payment_allocations"] F --> G["Update claim_lines (paid, adjustments, denials)"] G --> H["Update claims totals & status"] H --> I["Calculate patient responsibility"] I --> J["Flag underpayments/denials<br/>Send to Denial Analysis"] J --> K["Reconcile bank deposits"] K --> L["Generate posting reports"] L --> Z["End"]

Decision Points

  1. Claim match found? - If no match → line flagged as UNMATCHED; Payment Poster must manually link or create appropriate record.
  2. Underpayment or denial present? - If yes → claim flagged for Denial Management workflow.
  3. Bank reconciliation successful? - If discrepancy between ERA total and bank deposit → Payment Poster investigates and may hold reconciliation.

Integration Points

  • DHA eClaimLink / DOH eClaims / Payer ERA feeds
  • Direction: Inbound
  • Data: ERA files, remittance details
  • Protocol: As per payer (often via secure SFTP/API)
  • Policy & Contract Management
  • Direction: Inbound
  • Data: Contracted allowed amounts for variance checks
  • Protocol: Internal API / shared DB (INT-BIL-003)
  • Denial Analysis module
  • Direction: Outbound
  • Data: Denied claims, denial codes, underpayment details
  • Protocol: Internal API / shared DB (INT-BIL-006)

Exception Handling

  • ERA file format errors:
  • File rejected; status set to IMPORT_ERROR in remittance_advice; IT notified.
  • Partial posting:
  • If posting interrupted, system ensures idempotency; already posted lines not duplicated.
  • Unmatched payments:
  • Remittance lines without matching claims held in suspense; AR Specialist resolves.
  • PDPL compliance:
  • Financial data access restricted; audit logs maintained for all posting and adjustment actions.

Paperless Transformation

Previously Paper-Based Now Digital In-System Notes
Manual processing of paper EOBs Automated ERA import and parsing into remittance_advice and payments Reduces manual data entry and errors
Paper payment logs and spreadsheets Structured payments and payment_allocations tables Enables robust reporting and audit
Manual bank reconciliation using printed statements In-system reconciliation with bank deposit tracking Faster month-end close
Paper denial logs maintained in binders Digital flags and integration with Denial Analysis module Supports denial trending and DOH/DHA audits

Remaining Paper Touchpoints: Some payers may still send paper EOBs; these are manually keyed and scanned, then attached to remittance records.

Inputs and Outputs

Inputs:

Source Data Element Format
DHA eClaimLink / DOH eClaims / Payer ERA feeds Electronic Remittance Advice (ERA) files SFTP / API inbound
Payers (paper EOB) Manual remittance data entry Manual entry on SCR-BIL-004
claims Previously submitted claims for matching claims, claim_lines tables
Policy & Contract Management Contracted allowed amounts for variance detection fee_schedule_items, contracts tables
Bank statements Deposit amounts for reconciliation Manual or imported data

Outputs:

Destination Data Element Format
remittance_advice Remittance header (payer, date, total, file reference) SQL INSERT
payments Payment batch (amount, method, EFT reference) SQL INSERT
payment_allocations Per-claim payment allocations (paid, adjustments, denials) SQL INSERT
claims Updated totals and status (PAID, PARTIALLY_PAID, DENIED) SQL UPDATE
claim_lines Updated paid amounts, adjustment codes, denial codes SQL UPDATE
Denial Analysis module (INT-BIL-006) Denied/underpaid claims with denial codes Internal API event
Patient Billing (WF-005) Patient responsibility amounts Internal handoff
ar_aging Updated aging buckets Regenerated via scheduled job

Post-conditions:

  • All matched ERA lines allocated to claims with correct paid/adjusted amounts
  • Unmatched remittance lines flagged for manual resolution
  • Underpayments and denials identified and routed to Denial Analysis
  • Patient responsibility calculated and queued for patient billing
  • Bank reconciliation status recorded

SLA and Timing

Step Target Time Escalation Measurement Source
ERA file import and parsing < 15 minutes per file If > 1 hour, alert IT remittance_advice.import_completed_at
Claim matching (per ERA line) < 2 seconds If > 10s, log performance issue payment_allocations.matching_duration_ms
Payment allocation posting < 30 minutes per remittance batch If > 2 hours, alert Payment Poster payments.posting_completed_at
Unmatched line resolution (manual) < 48 hours If > 72 hours, escalate to AR Supervisor payment_allocations.resolved_at for UNMATCHED items
Bank reconciliation Same business day as deposit If > 2 business days, escalate to Finance Manager payments.reconciled_at
Denial feed to Denial Analysis < 1 hour post-posting If > 4 hours, alert Denial Specialist lead claim_responses.denial_sent_at
Overall ERA processing (receipt to fully posted) < 24 hours If > 48 hours, escalate to Revenue Cycle Manager KPI: ERA Processing Turnaround

State Transition Diagram

stateDiagram-v2 [*] --> IMPORTED : ERA file received and parsed IMPORTED --> MATCHING : System matches ERA lines to claims MATCHING --> MATCHED : All lines matched to claims MATCHING --> PARTIALLY_MATCHED : Some lines unmatched PARTIALLY_MATCHED --> MATCHED : Manual matching completes remaining lines MATCHED --> POSTED : Payment allocations created and claim statuses updated POSTED --> RECONCILED : Bank deposit confirmed and matched POSTED --> RECONCILIATION_VARIANCE : Deposit amount differs from ERA total RECONCILIATION_VARIANCE --> RECONCILED : Variance investigated and resolved RECONCILED --> [*] IMPORTED --> IMPORT_ERROR : File format or parsing failure IMPORT_ERROR --> IMPORTED : File corrected and reimported

WF-BILLINGCLAIMS-005: Patient Billing & Statement Generation

(Reference to brief: WF-BIL-005)

Process Flow

Actor: Patient Billing Specialist, System (automated)
Trigger: Patient balance established after insurance adjudication, or self-pay encounter completion

Pre-conditions:

  • Claims adjudicated and patient responsibility calculated (from WF-BILLINGCLAIMS-004), or self-pay charges finalized
  • Patient contact details and communication preferences available (from ehr-patient-mgmt)
  • Financial policies (discounts, charity, payment plans) configured
  1. Identify accounts with patient balance - System scans claims and patient_invoices:

    • Where patient_responsibility > 0 and not fully paid.
    • For self-pay encounters, uses total charges as patient responsibility.
  2. Calculate consolidated patient balance - For each patient:

    • Aggregate outstanding balances across encounters.
    • Consider prior credits or overpayments.
  3. Apply financial policies - System checks:

    • Eligibility for charity care or discounts (e.g., UAE nationals, government programs).
    • Existing payment plans.
    • Patient Billing Specialist can adjust or approve discounts per policy.
  4. Generate patient invoice - INSERT into patient_invoices:

    • Patient, invoice_date, total_amount, paid_amount (initially 0), balance, due_date, statement_number, delivery_method (portal/email/SMS/print), status = PENDING_SEND.
  5. Create itemized statement - System compiles:

    • Encounter charges, insurance payments, adjustments, patient responsibility.
    • Generates bilingual (EN/AR) statement PDF/HTML for portal.
  6. Deliver statement - Based on patient preference:

    • Publish to Patient Portal (via FHIR API INT-BIL-007).
    • Send email/SMS with secure link.
    • Queue for print/mail if required.
    • UPDATE patient_invoices.sent_datetime and status = SENT.
  7. Accept patient payment - When patient pays (online via portal, POS, bank transfer):

    • INSERT into patient_payments:
    • Patient, invoice_id, encounter_id (if applicable), payment_amount, payment_method, payment_datetime, receipt_number, collected_by, payment_location.
  8. Update invoice and account - UPDATE patient_invoices.paid_amount and balance. - If balance = 0 → set status = PAID. - If partial payment → status = PARTIALLY_PAID.

  9. Issue receipt - System generates digital receipt (EN/AR) and:

    • Displays in portal.
    • Optionally emails/SMS or prints at POS.
  10. Monitor aging and escalate

    • System tracks overdue invoices by aging buckets.
    • Overdue accounts appear on Patient Billing worklist for follow-up, reminders, or external collections per policy.

Data Modified:

  • patient_invoices — INSERT, UPDATE (paid_amount, balance, status, sent_datetime)
  • patient_payments — INSERT
  • ar_aging — UPDATE/REGENERATE
  • Shared references (READ): patients, encounters, claims, patient portal integration

Mermaid Flowchart

flowchart TD A["Patient responsibility calculated or self-pay encounter"] --> B["Identify accounts with patient balance"] B --> C["Calculate consolidated patient balance"] C --> D["Apply financial policies (discounts, plans)"] D --> E["Generate patient_invoices record"] E --> F["Create bilingual itemized statement"] F --> G["Deliver via portal/email/SMS/print"] G --> H["Patient makes payment (portal/POS/bank)"] H --> I["Insert patient_payments record"] I --> J["Update invoice paid_amount & balance"] J --> K{"Balance zero?"} K -->|"Yes"| K1["Set invoice status=PAID"] --> Z["End"] K -->|"No"| L["Set status=PARTIALLY_PAID<br/>Monitor aging"] L --> M["Escalate overdue accounts per policy"] M --> Z["End"]

Decision Points

  1. Eligible for discounts/charity? - If yes → apply policy-based adjustments before invoicing.
  2. Delivery method available? - If patient has portal access and consent → prefer digital delivery; otherwise print/mail.
  3. Invoice fully paid? - If yes → close invoice; if no → continue aging and follow-up.

Integration Points

  • Patient Portal
  • Direction: Bidirectional
  • Data: Outbound statements and balances; inbound online payments
  • Protocol: FHIR R4 REST API (INT-BIL-007)
  • Patient Access
  • Direction: Bidirectional
  • Data: Co-pay amounts at check-in, payment status
  • Protocol: Internal API (INT-BIL-008)
  • EHR & Patient Management
  • Direction: Inbound
  • Data: Patient demographics, contact details, consent preferences
  • Protocol: Internal API / HL7 ADT (INT-BIL-009)

Exception Handling

  • Invalid contact details (email/phone):
  • Delivery fails; system flags invoice for manual contact update.
  • Payment reversal/chargeback:
  • Negative patient_payments entry or refunds record created; invoice balance recalculated.
  • PDPL consent:
  • If patient has not consented to electronic communication, restrict to portal or print; log consent status.

Paperless Transformation

Previously Paper-Based Now Digital In-System Notes
Printed patient bills and manual mailing Electronic patient_invoices with portal/email/SMS delivery Reduces postage and improves speed
Handwritten receipts for patient payments Structured patient_payments with digital receipts Better audit trail and patient experience
Manual aging reports compiled monthly Real-time AR aging dashboard and worklists Supports proactive collections
Physical folders for patient financial records Centralized Patient Account & Billing screen (SCR-BIL-005) Easier access and PDPL-compliant logging

Remaining Paper Touchpoints: Some patients may still request printed statements or receipts; these are generated from the system.

Inputs and Outputs

Inputs:

Source Data Element Format
claims / payment_allocations Patient responsibility amounts (co-pay, co-insurance, deductible) claims, payment_allocations tables
patient_invoices Existing open invoices and prior balances patient_invoices table
EHR & Patient Management Patient contact details, communication preferences, consent patients, patient_demographics tables
Policy & Contract Management Financial assistance policies, discount rules, payment plan terms Master data / policy tables
Patient Portal (INT-BIL-007) Online payment transactions FHIR PaymentNotice / Internal API

Outputs:

Destination Data Element Format
patient_invoices Invoice record (amount, due date, delivery method, status) SQL INSERT / UPDATE
Patient Portal (INT-BIL-007) Statement and balance data FHIR Account, Invoice
Email / SMS gateway Statement notification with secure link Notification API
patient_payments Payment record (amount, method, receipt number) SQL INSERT
ar_aging Updated patient AR aging buckets Regenerated via scheduled job
Print queue Printed statements for patients without digital access PDF generation

Post-conditions:

  • Patient invoice exists with correct balance and delivery method
  • Statement delivered via patient's preferred channel (portal, email, SMS, print)
  • Any collected payments recorded and allocated to invoice
  • AR aging updated to reflect current patient balances

SLA and Timing

Step Target Time Escalation Measurement Source
Insurance adjudication to statement generation < 5 business days If > 7 days, alert Patient Billing Specialist patient_invoices.created_at minus claims.adjudication_date
Statement delivery (digital) < 1 hour after generation If delivery fails, retry 3 times; flag for manual contact patient_invoices.sent_datetime
Statement delivery (print/mail) < 3 business days after generation If > 5 days, escalate to operations Print queue tracking
Online payment processing < 30 seconds (real-time) If > 2 minutes, display retry message to patient patient_payments.created_at
Overdue follow-up (30-day bucket) Contact within 5 business days of aging If > 10 days, escalate to collections supervisor AR aging report + follow-up log
Overdue follow-up (60-day bucket) Second notice within 3 business days If > 90 days, refer to external collections per policy AR aging report

WF-BILLINGCLAIMS-006: Claim Denial Management

(Reference to brief: WF-BIL-006)

Process Flow

Actor: Denial Specialist, AR Specialist
Trigger: Claim denied or partially denied by payer (identified during payment posting)

Pre-conditions:

  • Denial codes and adjustment reason codes configured in master data
  • Claims and payment allocations updated from WF-BILLINGCLAIMS-004
  • Access to clinical documentation (via EHR) for appeal preparation
  1. Identify denied/underpaid claims - System scans claims, claim_lines, and payment_allocations:

    • Where denial codes present or paid_amount < allowed_amount beyond tolerance.
    • Adds items to Denial Worklist (SCR-BIL-007).
  2. Categorize denial - System categorizes by denial reason:

    • Eligibility, authorization, coding, medical necessity, timely filing, benefit limits.
    • Uses Denial Reason Codes master and payer-specific mappings.
  3. Route to appropriate specialist - Based on category:

    • Eligibility/authorization → AR Specialist.
    • Coding/medical necessity → Denial Specialist (with Coding team input).
    • Assigns owner and due date (based on payer days-to-file).
  4. Review and root cause analysis - Specialist reviews:

    • Claim details, remittance advice, payer notes.
    • Clinical documentation from EHR (NABIDH/Malaffi-compliant access).
    • Determines root cause (internal error vs payer issue).
  5. Decide on appeal - If low financial impact or low success probability:

    • May accept denial and write off per policy (with approval).
    • If appeal warranted:
    • Proceed to prepare appeal.
  6. Prepare appeal package - Compile:

    • Corrected claim information (if coding error).
    • Supporting clinical notes, lab/imaging reports.
    • Appeal letter template (EN/AR) referencing payer rules and UAE regulations where relevant.
    • Ensure no unnecessary PHI beyond minimum required (PDPL).
  7. Submit appeal - Via:

    • eClaimLink (DHA) or DOH eClaims, where supported.
    • Payer portal upload.
    • Email/fax (if required) with tracking logged.
    • Record appeal submission in claim notes or dedicated appeal tracking (within claim_responses or related table).
  8. Track appeal status - System tracks:

    • Appeal submitted, in review, overturned, upheld, partial recovery.
    • Updates relevant fields and worklist status.
  9. Record final outcome - If overturned/partial:

    • Additional payment posted via WF-BILLINGCLAIMS-004.
    • If upheld:
    • Denial finalized; write-off processed per policy.
    • Denial data sent to Denial Analysis module for trending.

Data Modified:

  • claims — UPDATE (claim_status, denial-related flags)
  • claim_lines — UPDATE (denial_code, line_status)
  • claim_responses — INSERT (appeal records, outcomes)
  • payments / payment_allocations — INSERT/UPDATE (for recovered amounts)
  • ar_aging — UPDATE/REGENERATE
  • Shared references (READ): payers, contracts, patients, encounters

Mermaid Flowchart

flowchart TD A["Denied/underpaid claims identified"] --> B["Categorize denial reason"] B --> C["Route to appropriate specialist"] C --> D["Review claim, remittance, clinical docs"] D --> E["Determine root cause"] E --> F{"Appeal warranted?"} F -->|"No"| F1["Accept denial, process write-off per policy"] --> Z["End"] F -->|"Yes"| G["Prepare appeal package<br/>(corrected codes, docs, letter)"] G --> H["Submit appeal via eClaimLink/DOH/payer portal"] H --> I["Track appeal status"] I --> J{"Appeal outcome?"} J -->|"Overturned/Partial"| J1["Post additional payment<br/>Update claim status"] --> Z J -->|"Upheld"| J2["Finalize denial, update AR<br/>Feed to Denial Analysis"] --> Z

Decision Points

  1. Appeal warranted? - Based on financial threshold, days-to-file, and likelihood of success.
  2. Appeal outcome? - Overturned, partially overturned, or upheld; each path has different financial impact.
  3. Root cause internal vs payer? - Internal errors may trigger process improvements and staff training.

Integration Points

  • Denial Analysis module
  • Direction: Outbound
  • Data: Denial reasons, amounts, appeal outcomes
  • Protocol: Internal API / shared DB (INT-BIL-006)
  • Policy & Contract Management
  • Direction: Inbound
  • Data: Contract terms, timely filing limits, authorization requirements
  • Protocol: Internal API (INT-BIL-003)
  • DHA eClaimLink / DOH eClaims / Payer Portals
  • Direction: Bidirectional
  • Data: Appeal submissions and responses
  • Protocol: As per payer (often via same channels as claims)

Exception Handling

  • Missed appeal deadlines (days-to-file exceeded):
  • System warns before deadline; if missed, claim marked as non-appealable.
  • Incomplete documentation:
  • Appeal cannot be submitted; worklist item remains open until documentation attached.
  • PDPL compliance:
  • Only minimum necessary clinical data attached to appeals; access logged.

Paperless Transformation

Previously Paper-Based Now Digital In-System Notes
Paper denial logs and manual tracking sheets Denial Worklist (SCR-BIL-007) with structured denial codes Improves visibility and reporting
Typed or handwritten appeal letters System-generated appeal templates with auto-populated claim data Speeds up appeal preparation
Physical files of supporting clinical documents Electronic attachments linked to claim/appeal records Easier retrieval and PDPL-compliant access
Manual statistics on denial trends Automated feed to Denial Analysis module Supports targeted interventions

Remaining Paper Touchpoints: Some payers may still require faxed appeals; these are scanned and linked to the claim.

Inputs and Outputs

Inputs:

Source Data Element Format
claims / claim_lines / payment_allocations Denied or underpaid claims with denial codes and adjustment reasons claims, claim_lines, payment_allocations tables
remittance_advice Payer remittance notes and explanation of benefits remittance_advice table
EHR & Patient Management Clinical documentation for appeal (notes, labs, imaging reports) EHR API / document repository
Policy & Contract Management Contract terms, timely filing limits, authorization requirements contracts, payer_rules tables
Denial Reason Codes Denial categorization (CARC/RARC, payer-specific codes) Master data

Outputs:

Destination Data Element Format
claims Updated claim_status (APPEAL_IN_PROGRESS, WRITTEN_OFF) SQL UPDATE
claim_responses Appeal submission records and outcomes SQL INSERT
Denial Analysis module (INT-BIL-006) Denial data for trending and root cause analysis Internal API event
DHA eClaimLink / DOH eClaims / Payer portals Appeal submissions XML / portal upload / email
payments / payment_allocations Additional payment for overturned appeals SQL INSERT / UPDATE
ar_aging Updated AR reflecting appeal outcomes Regenerated via scheduled job

Post-conditions:

  • Denial categorized and root cause identified
  • Appeal submitted within payer days-to-file limit (if warranted)
  • Appeal outcome recorded; additional payment posted or write-off processed
  • Denial data fed to Denial Analysis module for trending

SLA and Timing

Step Target Time Escalation Measurement Source
Denial identification to worklist assignment < 4 hours If > 8 hours, alert Denial Specialist lead claims.denial_identified_at minus payment_allocations.created_at
Denial categorization and routing < 1 business day If > 2 days, escalate to AR Supervisor claim_responses.categorized_at
Root cause analysis completion < 3 business days If > 5 days, escalate to Revenue Cycle Manager claim_responses.rca_completed_at
Appeal preparation and submission < 10 business days (or 50% of payer days-to-file, whichever is shorter) At 75% of days-to-file, system auto-escalates claim_responses.appeal_submitted_at
Appeal tracking follow-up Every 7 calendar days after submission If no payer response > 30 days, escalate to payer liaison claim_responses.last_followup_at
Appeal resolution recording < 2 business days after payer decision If > 5 days, alert AR Specialist claim_responses.resolution_recorded_at

State Transition Diagram

stateDiagram-v2 [*] --> IDENTIFIED : Denial detected during payment posting IDENTIFIED --> CATEGORIZED : Denial reason coded and classified CATEGORIZED --> UNDER_REVIEW : Assigned to specialist for root cause analysis UNDER_REVIEW --> APPEAL_WARRANTED : Financial impact justifies appeal UNDER_REVIEW --> WRITE_OFF_PENDING : Low value or low success probability APPEAL_WARRANTED --> APPEAL_PREPARED : Appeal package compiled with supporting docs APPEAL_PREPARED --> APPEAL_SUBMITTED : Submitted to payer via eClaimLink/DOH/portal APPEAL_SUBMITTED --> APPEAL_IN_REVIEW : Payer acknowledges receipt APPEAL_IN_REVIEW --> OVERTURNED : Payer reverses denial, payment forthcoming APPEAL_IN_REVIEW --> PARTIALLY_OVERTURNED : Partial recovery approved APPEAL_IN_REVIEW --> UPHELD : Payer upholds denial OVERTURNED --> RECOVERED : Additional payment posted PARTIALLY_OVERTURNED --> RECOVERED : Partial payment posted UPHELD --> WRITE_OFF_PENDING : Denial finalized WRITE_OFF_PENDING --> WRITTEN_OFF : Write-off approved per policy RECOVERED --> [*] WRITTEN_OFF --> [*]

WF-BILLINGCLAIMS-007: Co-Payment / Point-of-Service Collection

(Reference to brief: WF-BIL-007)

Process Flow

Actor: Registration Clerk, Cashier
Trigger: Patient check-in for outpatient visit or at discharge (inpatient/ED)

Pre-conditions:

  • Appointment or encounter exists in scheduling / encounters
  • Insurance eligibility and benefits verified via Patient Access (INT-BIL-008)
  • Co-pay rules configured in policy-contract-mgmt
  1. Retrieve encounter and coverage - At check-in/checkout, system retrieves:

    • Encounter details (service type, department).
    • Patient insurance plan and eligibility result.
  2. Calculate expected co-payment - System queries policy-contract-mgmt:

    • Co-pay/co-insurance rules based on plan, service type (consultation, procedure, imaging).
    • Calculates expected patient responsibility at point-of-service.
  3. Display co-payment amount - On Cashier / POS Collection screen (SCR-BIL-009):

    • Show amount due, prior balances, and explanation (e.g., “20% co-insurance for MRI”).
  4. Confirm with patient - Registration Clerk/Cashier informs patient of amount and payment options. - If patient disputes, staff can view benefit details (if available).

  5. Collect payment - If patient agrees:

    • Accept payment via cash, credit/debit card, Apple Pay, online link, etc.
    • INSERT into patient_payments:
    • Patient, encounter_id, payment_amount, payment_method, payment_datetime, receipt_number, collected_by, payment_location = POS.
  6. Issue receipt - System generates receipt (EN/AR) and:

    • Prints or sends via email/SMS.
  7. Update encounter financials - System links payment to encounter and future invoice:

    • Reduces outstanding patient responsibility for that encounter.
  8. If patient declines payment - Staff records reason (e.g., financial hardship, will pay later). - Encounter flagged for follow-up billing:

    • Note added to patient_invoices pipeline.
  9. End-of-day reconciliation - Cashier runs end-of-day report:

    • Compares patient_payments collected at POS vs physical cash/card terminal totals.
    • Discrepancies investigated and resolved.

Data Modified:

  • patient_payments — INSERT
  • patient_invoices — UPDATE/INSERT (future billing adjustments)
  • ar_aging — UPDATE/REGENERATE (reflecting early collections)
  • Shared references (READ): patients, encounters, insurance_plans, contracts

Mermaid Flowchart

flowchart TD A["Patient check-in / discharge"] --> B["Retrieve encounter & coverage"] B --> C["Calculate expected co-payment via policy-contract-mgmt"] C --> D["Display amount due on POS screen"] D --> E["Explain amount & options to patient"] E --> F{"Patient willing to pay now?"} F -->|"Yes"| G["Collect payment (cash/card/etc.)"] G --> H["Insert patient_payments record"] H --> I["Issue digital/printed receipt"] I --> J["Update encounter financials"] --> Z["End"] F -->|"No"| K["Record reason & flag for follow-up billing"] K --> L["Add to patient billing pipeline"] --> Z["End"] Z --> M["End-of-day reconciliation by Cashier"]

Decision Points

  1. Patient willing to pay at POS? - If yes → immediate collection improves POS collection rate KPI. - If no → account moves to standard billing workflow.
  2. Coverage and co-pay rules available? - If not available → estimate or mark as “to be determined”; avoid over-collection.
  3. Reconciliation discrepancies? - If mismatch between system and physical totals → investigation required before closing day.

Integration Points

  • Patient Access
  • Direction: Bidirectional
  • Data: Eligibility verification, co-pay rules, estimated patient responsibility
  • Protocol: Internal API (INT-BIL-008)
  • Policy & Contract Management
  • Direction: Inbound
  • Data: Co-pay/co-insurance rules per plan and service
  • Protocol: Internal API / shared DB (INT-BIL-003)
  • Patient Portal
  • Direction: Outbound
  • Data: Updated balance and payment receipts
  • Protocol: FHIR R4 REST API (INT-BIL-007)

Exception Handling

  • Eligibility not available or system down:
  • Staff may collect standard visit fee or defer collection; note reason.
  • Payment terminal failure:
  • Accept cash or bank transfer; record manually and later reconcile.
  • PDPL compliance:
  • Payment card data handled by PCI-compliant external gateway; HIS stores only tokens/limited metadata.

Paperless Transformation

Previously Paper-Based Now Digital In-System Notes
Manual cash registers and handwritten receipts POS screen (SCR-BIL-009) with patient_payments and digital receipts Improves accuracy and auditability
Paper logs for daily collections End-of-day reconciliation reports from system Reduces manual tallying
Verbal estimates of co-pay without documentation Calculated co-pay with documented rules and amounts Supports transparency and dispute resolution

Remaining Paper Touchpoints: Some patients may request printed receipts; these are generated from the system.

Inputs and Outputs

Inputs:

Source Data Element Format
Scheduling / ADT Encounter details (service type, department, visit type) encounters, encounter_details tables
Patient Access (INT-BIL-008) Eligibility verification results, pre-authorization approvals Internal API response
Policy & Contract Management (INT-BIL-003) Co-pay/co-insurance rules per plan and service type contracts, copay_rules tables
patient_invoices Prior outstanding balances patient_invoices table
Patient Payment (cash, card, Apple Pay, bank transfer) POS terminal / payment gateway

Outputs:

Destination Data Element Format
patient_payments POS payment record (amount, method, receipt, collector, location) SQL INSERT
patient_invoices Reduced patient responsibility for encounter SQL UPDATE / INSERT
Patient Portal (INT-BIL-007) Updated balance and payment receipt FHIR API (outbound)
POS receipt Digital or printed receipt (EN/AR) PDF / thermal print
ar_aging Updated AR reflecting early collection Regenerated via scheduled job
End-of-day reconciliation report POS totals vs system totals Report generation

Post-conditions:

  • Patient payment recorded with receipt number and collection details
  • Encounter financial balance reduced by collected amount
  • Receipt issued in patient's preferred format
  • End-of-day reconciliation data available for cashier review

SLA and Timing

Step Target Time Escalation Measurement Source
Eligibility and co-pay retrieval < 5 seconds at check-in If > 15s, display estimate or defer; alert IT patient_access.eligibility_response_ms
Co-pay calculation display < 3 seconds If > 10s, display last known co-pay with disclaimer copay_calculation_duration_ms
Payment processing (card/digital) < 15 seconds If > 30s, offer alternative payment method Payment gateway response time
Receipt generation and delivery < 10 seconds If > 30s, offer to email/SMS receipt later patient_payments.receipt_generated_at
End-of-day reconciliation Within 30 minutes of cashier shift close If discrepancy > AED 100, escalate to Finance Supervisor Reconciliation report timestamp
content/rcm/billing-claims/01-workflows.md Generated 2026-02-20 22:54