Billing & Claims Management Screen Requirements
Screen Inventory
| Screen ID | Screen Name | Primary Actor(s) | Workflow(s) | Access Level |
|---|---|---|---|---|
| SCR-BILLINGCLAIMS-001 | Charge Review Worklist | Charge Entry Clerk, Revenue Cycle Manager | WF-BIL-001 | Users with enter_charges, edit_charges, correct_charge_errors |
| SCR-BILLINGCLAIMS-002 | Claim Generation & Scrubbing | Billing Specialist, Revenue Cycle Manager | WF-BIL-002 | Users with generate_claims, scrub_claims, configure_claim_edits |
| SCR-BILLINGCLAIMS-003 | Claim Submission Tracker | Billing Specialist, Revenue Cycle Manager | WF-BIL-003 | Users with submit_claims, manage_claim_worklist |
| SCR-BILLINGCLAIMS-004 | Payment Posting | Payment Poster, AR Specialist, Revenue Cycle Manager | WF-BIL-004 | Users with post_payments, reconcile_payments |
| SCR-BILLINGCLAIMS-005 | Patient Account & Billing | Patient Billing Specialist, Cashier, Revenue Cycle Manager | WF-BIL-005, WF-BIL-007 | Users with manage_patient_accounts, process_patient_payments |
| SCR-BILLINGCLAIMS-006 | AR Aging Dashboard | AR Specialist, Revenue Cycle Manager | WF-BIL-004, WF-BIL-006 | Users with manage_ar_aging, generate_ar_reports, view_financial_dashboards |
| SCR-BILLINGCLAIMS-007 | Denial Worklist | Denial Specialist, AR Specialist, Revenue Cycle Manager | WF-BIL-006 | Users with manage_denials, prepare_appeals, submit_appeals |
| SCR-BILLINGCLAIMS-008 | Revenue Dashboard | Revenue Cycle Manager, Finance | WF-BIL-001–007 | Users with view_financial_dashboards |
| SCR-BILLINGCLAIMS-009 | Cashier / POS Collection | Cashier, Patient Billing Specialist | WF-BIL-007, WF-BIL-005 | Users with collect_payments, issue_receipts |
Navigation Flow
Screen Specifications
SCR-BILLINGCLAIMS-001: Charge Review Worklist
Purpose
Worklist for reviewing, correcting, and approving charges generated from clinical systems before claim generation. Supports automated charge capture validation and manual edits.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Department Filter | Dropdown | No | Must match existing departments.department_id |
User’s default department | Multi-select allowed |
| Date Range | Date range picker | Yes | from ≤ to; max 31 days span |
Today | Filters by service date |
| Charge Status Filter | Multi-select dropdown | No | Values in (Pending, Error, Approved, On Hold) |
Pending, Error |
Drives worklist |
| Encounter List | Table | — | — | — | Shows encounters with at least one charge in scope |
| Patient Name | Text (in table) | — | — | — | From patients (read-only) |
| Emirates ID | Text (in table) | — | Format 784-YYYY-NNNNNNN-C |
— | Masked except last 3 digits for PDPL where configured |
| Encounter ID | Text (in table) | — | Must exist in encounters |
— | Click opens encounter charge detail |
| Service Date | Date (in table) | — | Valid date | — | From charges.service_date |
| Charges Count | Integer (in table) | — | ≥ 0 | — | Number of charges per encounter |
| Charge Status | Badge (in table) | — | Enum | — | Worst status among charges (e.g., if any Error → Error) |
| Edit Errors | Icon / count | — | — | — | Hover shows summary of errors |
| CPT Code | Text input (per charge row) | Yes | Valid CPT; exists in CDM | From auto-mapping | Editable inline |
| ICD-10-AM Codes | Multi-select autocomplete | Yes | Codes must exist in ICD-10-AM master | From encounter diagnoses | Used for medical necessity |
| Modifier Codes | Multi-select dropdown | No | Valid CPT/HCPCS modifiers | From rules | Inline chips |
| Quantity | Numeric input | Yes | > 0; integer | 1 | |
| Charge Amount (AED) | Numeric input | Yes | ≥ 0; 2 decimals | From contracted rate | Editable if user has permission |
| Contracted Rate (AED) | Read-only | — | ≥ 0 | From fee schedule | Tooltip shows payer/plan |
| Source Module | Read-only text | — | — | From integration | e.g., CPOE, RIS, LIS |
| Error Details | Expandable panel | — | — | — | Lists triggered claim/charge edits |
| Approve Selected | Button | — | Enabled if at least one charge selected & no blocking errors | — | Sets status to Approved |
| Put On Hold | Button | — | Requires hold reason | — | For investigation |
HTML Wireframe Mockup
Show HTML code
<div style="font-family: Arial, sans-serif; max-width: 1100px; margin: 0 auto; border: 1px solid #ccc; border-radius: 8px; overflow: hidden;">
<div style="background: #1a73e8; color: white; padding: 12px 20px; display:flex; justify-content:space-between; align-items:center;">
<h3 style="margin: 0;">Charge Review Worklist / قائمة مراجعة الرسوم</h3>
<div style="font-size: 12px;">Facility: Dubai General Hospital</div>
</div>
<div style="padding: 16px;">
<!-- Filters -->
<div style="display:flex; flex-wrap:wrap; gap:12px; margin-bottom: 12px;">
<div style="flex:1 1 180px;">
<label>Department / القسم</label><br/>
<select style="width:100%; padding:4px;">
<option>All</option>
<option>Radiology</option>
<option>Laboratory</option>
</select>
</div>
<div style="flex:1 1 220px;">
<label>Date Range / نطاق التاريخ</label><br/>
<input type="date" style="padding:4px; width:48%;"> -
<input type="date" style="padding:4px; width:48%;">
</div>
<div style="flex:1 1 200px;">
<label>Status / الحالة</label><br/>
<select multiple style="width:100%; padding:4px; height:60px;">
<option selected>Pending</option>
<option selected>Error</option>
<option>Approved</option>
<option>On Hold</option>
</select>
</div>
<div style="flex:0 0 120px; align-self:flex-end;">
<button style="width:100%; padding:6px 8px; background:#1a73e8; color:#fff; border:none; border-radius:4px;">Apply</button>
</div>
</div>
<!-- Worklist Table -->
<table style="width:100%; border-collapse:collapse; font-size:13px;">
<thead>
<tr style="background:#f5f5f5;">
<th style="text-align:left; padding:6px; border-bottom:1px solid #ddd;"><input type="checkbox"/></th>
<th style="text-align:left; padding:6px; border-bottom:1px solid #ddd;">Encounter</th>
<th style="text-align:left; padding:6px; border-bottom:1px solid #ddd;">Patient / المريض</th>
<th style="text-align:left; padding:6px; border-bottom:1px solid #ddd;">Emirates ID</th>
<th style="text-align:left; padding:6px; border-bottom:1px solid #ddd;">Service Date</th>
<th style="text-align:left; padding:6px; border-bottom:1px solid #ddd;">Charges</th>
<th style="text-align:left; padding:6px; border-bottom:1px solid #ddd;">Status</th>
<th style="text-align:left; padding:6px; border-bottom:1px solid #ddd;">Errors</th>
<th style="text-align:left; padding:6px; border-bottom:1px solid #ddd;">Actions</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding:6px; border-bottom:1px solid #eee;"><input type="checkbox"/></td>
<td style="padding:6px; border-bottom:1px solid #eee;">ENC-2026-00123</td>
<td style="padding:6px; border-bottom:1px solid #eee;">Ahmed Al-Maktoum</td>
<td style="padding:6px; border-bottom:1px solid #eee;">784-1990-123****-3</td>
<td style="padding:6px; border-bottom:1px solid #eee;">07-Feb-2026</td>
<td style="padding:6px; border-bottom:1px solid #eee;">3</td>
<td style="padding:6px; border-bottom:1px solid #eee;"><span style="background:#e53935; color:#fff; padding:2px 6px; border-radius:10px; font-size:11px;">Error</span></td>
<td style="padding:6px; border-bottom:1px solid #eee;">2</td>
<td style="padding:6px; border-bottom:1px solid #eee;"><button style="padding:4px 8px;">Open</button></td>
</tr>
</tbody>
</table>
<!-- Footer actions -->
<div style="margin-top:12px; display:flex; justify-content:space-between; align-items:center;">
<div>
<button style="padding:6px 10px; margin-right:6px; background:#1a73e8; color:#fff; border:none; border-radius:4px;">Approve Selected</button>
<button style="padding:6px 10px; background:#fbbc04; color:#000; border:none; border-radius:4px;">Put On Hold</button>
</div>
<div style="font-size:12px; color:#666;">Showing 1–20 of 135 encounters</div>
</div>
</div>
</div>
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| Date range > 31 days | "Date range cannot exceed 31 days." | Error |
| No department selected but user restricted | "You do not have access to all departments. Please select a department." | Error |
| Invalid Emirates ID format | "Emirates ID must be in format 784-YYYY-NNNNNNN-C." | Error |
| CPT code not in CDM | "CPT code not found in Charge Description Master. Please select a valid code." | Error |
| ICD-10-AM code invalid | "Diagnosis code is not valid or inactive. Select a valid ICD-10-AM code." | Error |
| Charge amount < 0 | "Charge amount must be zero or positive." | Error |
| Attempt to approve with blocking errors | "One or more selected charges have blocking errors. Resolve errors before approval." | Error |
| Approve with warnings only | "Some charges have warnings (non-blocking). Do you want to approve anyway?" | Warning |
Actions / Buttons
- Apply (filters): Refreshes worklist with selected filters.
- Open (row): Opens detailed charge view for that encounter (inline panel or modal).
- Approve Selected: Sets
charge_status = 'Approved'for selected charges without blocking errors; logs user/time. - Put On Hold: Prompts for hold reason; sets
charge_status = 'On Hold'. - Inline Save (per charge row): Saves edits to CPT, modifiers, quantity, amount; re-runs charge/claim edits.
Accessibility (WCAG 2.1 AA)
- All filter controls have
<label>elements andaria-labelin English and Arabic where needed. - Worklist table uses
<th scope="col">and row selection announced viaaria-selected. - Error badges include text (e.g., "Error") not just colour.
- Keyboard: Tab through filters, arrow keys to move in table; space to toggle row checkbox; Enter to open encounter.
- Screen reader region (
aria-live="polite") announces filter changes and validation errors.
Responsive / Mobile
- Filters stack vertically; table switches to card layout (each encounter as a card with key fields).
- Inline charge editing limited on small screens; deep edits may open a full-screen modal.
- Touch targets ≥ 44px height; horizontal scrolling for wide tables.
SCR-BILLINGCLAIMS-002: Claim Generation & Scrubbing
Purpose
Dashboard to aggregate encounters into claims, run claim edits (including DHA/DOH-specific rules), fix errors, and mark claims ready for submission.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Facility Filter | Dropdown | No | Must match facilities.facility_id |
User’s default facility | |
| Payer Filter | Dropdown | No | Must match payers.payer_id |
All | |
| Claim Type Filter | Dropdown | No | Enum (Inpatient, Outpatient, ER, Day Case) |
All | |
| Ready for Billing From/To | Date range picker | Yes | from ≤ to; max 60 days |
Last 7 days | Based on discharge date |
| Claims Ready Count | Read-only badge | — | ≥ 0 | — | Number of encounters ready to generate |
| Generate Claims Button | Button | — | Enabled if at least one encounter ready | — | Triggers aggregation |
| Claim List Table | Table | — | — | — | Shows generated claims |
| Claim ID | Text | — | Exists in claims |
— | Click to open claim detail |
| Patient Name | Text | — | — | — | From patients |
| Payer | Text | — | — | — | From payers |
| Total Charge Amount | Numeric | — | ≥ 0 | — | From claims.total_charge_amount |
| Edit Check Results | Badge / icon | — | — | — | Clean / Errors / Warnings |
| Error Details | Expandable list | — | — | — | From claim_edits engine |
| Fix Actions | Buttons/links | — | — | — | e.g., "Add Diagnosis", "Update Provider" |
| Mark as Ready | Checkbox / button | — | Only if no blocking errors | — | Sets claim_status = 'Ready for Submission' |
| Batch Submit | Button | — | Enabled if at least one claim ready | — | Navigates to Submission Tracker with pre-filter |
HTML Wireframe Mockup
Show HTML code
<div style="font-family: Arial, sans-serif; max-width: 1100px; margin: 20px auto; border: 1px solid #ccc; border-radius: 8px; overflow:hidden;">
<div style="background:#1a73e8; color:#fff; padding:12px 20px; display:flex; justify-content:space-between;">
<h3 style="margin:0;">Claim Generation & Scrubbing / إنشاء المطالبات وتنقيحها</h3>
<div style="font-size:12px;">Clean Claim Rate: 92%</div>
</div>
<div style="padding:16px;">
<!-- Filters and Generate -->
<div style="display:flex; flex-wrap:wrap; gap:12px; margin-bottom:12px;">
<div style="flex:1 1 180px;">
<label>Facility / المنشأة</label><br/>
<select style="width:100%; padding:4px;">
<option>All</option>
<option>Dubai General Hospital</option>
<option>Abu Dhabi Medical Center</option>
</select>
</div>
<div style="flex:1 1 180px;">
<label>Payer / شركة التأمين</label><br/>
<select style="width:100%; padding:4px;">
<option>All</option>
<option>Daman</option>
<option>THIQA</option>
<option>Oman Insurance</option>
</select>
</div>
<div style="flex:1 1 220px;">
<label>Discharge Date Range</label><br/>
<input type="date" style="padding:4px; width:48%;"> -
<input type="date" style="padding:4px; width:48%;">
</div>
<div style="flex:0 0 160px; align-self:flex-end;">
<button style="width:100%; padding:6px 8px; background:#1a73e8; color:#fff; border:none; border-radius:4px;">Generate Claims</button>
</div>
</div>
<!-- Summary -->
<div style="margin-bottom:12px; font-size:13px;">
<span style="margin-right:16px;">Encounters ready: <strong>45</strong></span>
<span>New claims generated: <strong>40</strong></span>
</div>
<!-- Claim List -->
<table style="width:100%; border-collapse:collapse; font-size:13px;">
<thead>
<tr style="background:#f5f5f5;">
<th style="padding:6px; border-bottom:1px solid #ddd;"><input type="checkbox"/></th>
<th style="padding:6px; border-bottom:1px solid #ddd; text-align:left;">Claim ID</th>
<th style="padding:6px; border-bottom:1px solid #ddd; text-align:left;">Patient</th>
<th style="padding:6px; border-bottom:1px solid #ddd; text-align:left;">Payer</th>
<th style="padding:6px; border-bottom:1px solid #ddd; text-align:right;">Total Charges (AED)</th>
<th style="padding:6px; border-bottom:1px solid #ddd; text-align:left;">Edit Status</th>
<th style="padding:6px; border-bottom:1px solid #ddd; text-align:left;">Errors/Warnings</th>
<th style="padding:6px; border-bottom:1px solid #ddd; text-align:left;">Actions</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding:6px; border-bottom:1px solid #eee;"><input type="checkbox"/></td>
<td style="padding:6px; border-bottom:1px solid #eee;">CLM-2026-00045</td>
<td style="padding:6px; border-bottom:1px solid #eee;">Fatima Al-Nahyan</td>
<td style="padding:6px; border-bottom:1px solid #eee;">Daman</td>
<td style="padding:6px; border-bottom:1px solid #eee; text-align:right;">3,250.00</td>
<td style="padding:6px; border-bottom:1px solid #eee;">
<span style="background:#e53935; color:#fff; padding:2px 6px; border-radius:10px; font-size:11px;">Errors</span>
</td>
<td style="padding:6px; border-bottom:1px solid #eee;">Missing primary diagnosis; Invalid modifier</td>
<td style="padding:6px; border-bottom:1px solid #eee;">
<button style="padding:3px 6px; font-size:12px;">Fix</button>
</td>
</tr>
</tbody>
</table>
<!-- Footer -->
<div style="margin-top:12px; display:flex; justify-content:space-between; align-items:center;">
<div>
<button style="padding:6px 10px; margin-right:6px; background:#1a73e8; color:#fff; border:none; border-radius:4px;">Mark Selected as Ready</button>
<button style="padding:6px 10px; background:#34a853; color:#fff; border:none; border-radius:4px;">Batch Submit</button>
</div>
<div style="font-size:12px; color:#666;">Showing 1–20 of 40 claims</div>
</div>
</div>
</div>
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| No encounters ready | "No encounters are ready for claim generation in the selected range." | Info |
| Missing attending provider | "Attending provider is required for this claim." | Error |
| Missing primary diagnosis | "Primary ICD-10-AM diagnosis is required." | Error |
| Payer-specific format error (DHA) | "DHA eClaimLink: Missing or invalid prior authorization number." | Error |
| Payer-specific format warning | "DOH eClaims: Service date more than 90 days old. Timely filing risk." | Warning |
| Attempt to mark ready with blocking errors | "Resolve all blocking errors before marking claim as ready." | Error |
| Batch submit with no ready claims | "Select at least one claim with status 'Ready for Submission'." | Error |
Actions / Buttons
- Generate Claims: Runs aggregation logic; creates/updates
claimsandclaim_lines; runs claim edits. - Fix: Opens claim detail with inline guidance to resolve specific errors.
- Mark Selected as Ready: Sets
claim_statustoReady for Submissionfor selected claims without blocking errors. - Batch Submit: Navigates to Submission Tracker with selected claims pre-loaded into a new submission batch.
Accessibility
- Edit status badges include
aria-label(e.g., "3 errors, 1 warning"). - Error details expandable region uses
aria-expandedandaria-controls. - Keyboard: Space toggles selection; Enter activates "Fix".
- Screen reader announces when claim generation completes and how many claims were created.
Responsive / Mobile
- Claim table becomes stacked cards; each card shows Claim ID, patient, payer, status, and key actions.
- Batch actions appear in a bottom fixed bar on small screens.
- Filters collapse into a "Filters" accordion.
SCR-BILLINGCLAIMS-003: Claim Submission Tracker
Purpose
Monitor claim submission batches and individual claim statuses across DHA eClaimLink, DOH eClaims, and other channels; support resubmission of rejected claims.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Submission Batches Table | Table | — | — | — | High-level batch view |
| Batch ID | Text | — | — | — | Generated by system |
| Submission Channel | Dropdown / text | — | Enum (DHA eClaimLink, DOH eClaims, Portal, Manual) |
— | From Claim Submission Channels master |
| Payer Filter | Dropdown | No | Must match payers.payer_id |
All | |
| Status Filter | Multi-select | No | Enum (Pending, Submitted, Accepted, Rejected, Partially Accepted) |
Pending, Rejected |
|
| Submission Date | Date | — | Valid date | — | |
| Gateway Response | Text | — | — | — | Summary of last response |
| Resubmit Button | Button | — | Enabled for rejected/failed claims | — |
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| Resubmit without changes | "You are resubmitting a claim without correcting the previous rejection reason. Continue?" | Warning |
| Channel offline | "Selected submission channel is currently unavailable. Please try again later." | Error |
| Missing mandatory channel mapping | "No submission configuration found for this payer and channel." | Error |
Actions / Buttons
- View Batch Details: Opens list of claims within batch.
- Resubmit: Creates new
claim_submissionsrecord; sends claim to selected channel. - Export Batch Log: Exports submission log to CSV/PDF for audit.
Accessibility
- Status icons include text labels and
aria-labelwith full status. - Live region announces when new responses are received (e.g., background polling).
Responsive / Mobile
- Batch table becomes list view; tapping a batch opens details.
- Resubmit action available via overflow menu on each claim row.
SCR-BILLINGCLAIMS-004: Payment Posting
Purpose
Interface for importing and reviewing remittance advice (ERA/EOB), matching payments to claims, posting payments and adjustments, and reconciling with bank deposits.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Remittance List | Table | — | — | — | From remittance_advice |
| Remittance ID | Text | — | Exists in remittance_advice |
— | |
| Payer | Text | — | — | — | |
| Remittance Date | Date | — | Valid date | — | |
| Total Paid | Numeric | — | ≥ 0 | — | |
| Status | Badge | — | Enum (Imported, In Progress, Posted, Error) |
— | |
| Claim Match | Badge | — | — | — | % of lines auto-matched |
| Payment Amount | Numeric input | Yes | ≥ 0 | From ERA | Per claim/line |
| Adjustment Codes | Multi-select dropdown | No | Valid CARC/RARC codes | — | |
| Patient Balance | Numeric (read-only) | — | ≥ 0 | Calculated | |
| Post Button | Button | — | Enabled when remittance balanced | — | Posts payments |
| Batch Processing | Checkbox | — | — | Unchecked | For auto-posting rules |
HTML Wireframe Mockup
Show HTML code
<div style="font-family: Arial, sans-serif; max-width: 1100px; margin: 20px auto; border: 1px solid #ccc; border-radius: 8px; overflow:hidden;">
<div style="background:#1a73e8; color:#fff; padding:12px 20px;">
<h3 style="margin:0;">Payment Posting / ترحيل المدفوعات</h3>
</div>
<div style="padding:16px;">
<!-- Remittance List -->
<table style="width:100%; border-collapse:collapse; font-size:13px; margin-bottom:12px;">
<thead>
<tr style="background:#f5f5f5;">
<th style="padding:6px; border-bottom:1px solid #ddd;">Remittance</th>
<th style="padding:6px; border-bottom:1px solid #ddd;">Payer</th>
<th style="padding:6px; border-bottom:1px solid #ddd;">Date</th>
<th style="padding:6px; border-bottom:1px solid #ddd; text-align:right;">Total Paid (AED)</th>
<th style="padding:6px; border-bottom:1px solid #ddd;">Match</th>
<th style="padding:6px; border-bottom:1px solid #ddd;">Status</th>
<th style="padding:6px; border-bottom:1px solid #ddd;">Actions</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding:6px; border-bottom:1px solid #eee;">ERA-2026-0012</td>
<td style="padding:6px; border-bottom:1px solid #eee;">THIQA</td>
<td style="padding:6px; border-bottom:1px solid #eee;">06-Feb-2026</td>
<td style="padding:6px; border-bottom:1px solid #eee; text-align:right;">125,430.50</td>
<td style="padding:6px; border-bottom:1px solid #eee;">92% matched</td>
<td style="padding:6px; border-bottom:1px solid #eee;"><span style="background:#fbbc04; padding:2px 6px; border-radius:10px; font-size:11px;">In Progress</span></td>
<td style="padding:6px; border-bottom:1px solid #eee;"><button style="padding:3px 6px; font-size:12px;">Open</button></td>
</tr>
</tbody>
</table>
<!-- Selected Remittance Detail (simplified) -->
<h4 style="margin-top:0;">ERA-2026-0012 Details</h4>
<table style="width:100%; border-collapse:collapse; font-size:12px;">
<thead>
<tr style="background:#f5f5f5;">
<th style="padding:4px; border-bottom:1px solid #ddd;">Claim</th>
<th style="padding:4px; border-bottom:1px solid #ddd;">Patient</th>
<th style="padding:4px; border-bottom:1px solid #ddd; text-align:right;">Billed</th>
<th style="padding:4px; border-bottom:1px solid #ddd; text-align:right;">Allowed</th>
<th style="padding:4px; border-bottom:1px solid #ddd; text-align:right;">Paid</th>
<th style="padding:4px; border-bottom:1px solid #ddd;">Adj Codes</th>
<th style="padding:4px; border-bottom:1px solid #ddd; text-align:right;">Patient Resp.</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding:4px; border-bottom:1px solid #eee;">CLM-2026-00045</td>
<td style="padding:4px; border-bottom:1px solid #eee;">Fatima Al-Nahyan</td>
<td style="padding:4px; border-bottom:1px solid #eee; text-align:right;">3,250.00</td>
<td style="padding:4px; border-bottom:1px solid #eee; text-align:right;">2,800.00</td>
<td style="padding:4px; border-bottom:1px solid #eee; text-align:right;"><input type="number" value="2,500.00" style="width:80px;"/></td>
<td style="padding:4px; border-bottom:1px solid #eee;">
<select style="font-size:11px;">
<option value="">--</option>
<option>45 - Charge exceeds fee schedule</option>
<option>PR - Patient responsibility</option>
</select>
</td>
<td style="padding:4px; border-bottom:1px solid #eee; text-align:right;">300.00</td>
</tr>
</tbody>
</table>
<div style="margin-top:10px; display:flex; justify-content:space-between; align-items:center;">
<div>
<label><input type="checkbox"/> Enable batch auto-posting for fully matched lines</label>
</div>
<div>
<button style="padding:6px 10px; background:#34a853; color:#fff; border:none; border-radius:4px;">Post Remittance</button>
</div>
</div>
</div>
</div>
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| Remittance total ≠ sum of line payments | "Remittance is out of balance. Adjust line amounts or adjustments to match total paid." | Error |
| Payment amount < 0 | "Payment amount must be zero or positive." | Error |
| Missing adjustment code where required | "Adjustment code is required when adjustment amount is non-zero." | Error |
| Posting without bank deposit date | "Bank deposit date is recommended before posting for reconciliation." | Warning |
| Duplicate remittance import | "This remittance file appears to be a duplicate (same payer, date, and reference)." | Error |
Actions / Buttons
- Open (remittance): Loads remittance detail and associated claims.
- Post Remittance: Creates
paymentsandpayment_allocations, updatesclaimsandclaim_linespaid/adjusted amounts, and updates patient responsibility. - Enable batch auto-posting: Applies configured auto-post rules (e.g., auto-post if payment = allowed and no denials).
Accessibility
- Table headers with
scope="col"; numeric columns right-aligned but announced with context. - Error summary region at top of detail section with links to problematic lines.
- Keyboard: Arrow keys navigate cells; Enter to edit numeric fields; Esc to cancel edit.
Responsive / Mobile
- Remittance list as cards; detail lines grouped by claim with collapsible sections.
- Posting button fixed at bottom on small screens.
SCR-BILLINGCLAIMS-005: Patient Account & Billing
Purpose
Provide a complete view of a patient’s financial account, including encounter charges, insurance payments, patient balance, statement history, and payment plan management. Supports PDPL-compliant display and patient communications.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Patient Search | Search box (MRN/Name/Emirates ID) | Yes | Min 2 chars; Emirates ID format if used | — | Autocomplete with patient list |
| Patient Banner | Read-only panel | — | — | — | Shows name, MRN, Emirates ID (masked), mobile, payer |
| Account Summary | Read-only panel | — | — | — | Total charges, insurance payments, adjustments, patient balance |
| Encounter Charges Table | Table | — | — | — | Per encounter |
| Insurance Payments | Table | — | — | — | From payments/payment_allocations |
| Patient Balance | Numeric | — | ≥ 0 | — | Calculated |
| Statement History | Table | — | — | — | From patient_invoices |
| Payment Plan | Form | No | If created, required fields | — | Installment amount, frequency, start date |
| Collect Payment | Button | — | Enabled if balance > 0 | — | Opens payment collection (or POS screen) |
HTML Wireframe Mockup
Show HTML code
<div style="font-family: Arial, sans-serif; max-width: 1100px; margin: 20px auto; border: 1px solid #ccc; border-radius: 8px; overflow:hidden;">
<div style="background:#1a73e8; color:#fff; padding:12px 20px;">
<h3 style="margin:0;">Patient Account & Billing / حساب المريض والفوترة</h3>
</div>
<div style="padding:16px;">
<!-- Search -->
<div style="margin-bottom:12px;">
<label>Search Patient / بحث عن مريض</label><br/>
<input type="text" placeholder="Name, MRN, or Emirates ID" style="width:60%; padding:6px;"/>
<button style="padding:6px 10px; margin-left:6px; background:#1a73e8; color:#fff; border:none; border-radius:4px;">Search</button>
</div>
<!-- Patient Banner -->
<div style="background:#f0f4f8; padding:10px; border-radius:4px; margin-bottom:12px; display:flex; justify-content:space-between; font-size:13px;">
<div>
<strong>Ahmed Al-Maktoum</strong> (MRN: 1002345)<br/>
Emirates ID: 784-1985-123****-1<br/>
Mobile: +971 50 123 4567
</div>
<div style="text-align:right;">
Primary Payer: Daman<br/>
Plan: Enhanced<br/>
Financial Class: Insured
</div>
</div>
<!-- Account Summary -->
<div style="display:flex; gap:12px; margin-bottom:12px; font-size:13px;">
<div style="flex:1; background:#fafafa; padding:8px; border-radius:4px;">
<div>Total Charges</div>
<div style="font-size:18px; font-weight:bold;">AED 18,500.00</div>
</div>
<div style="flex:1; background:#fafafa; padding:8px; border-radius:4px;">
<div>Insurance Payments</div>
<div style="font-size:18px; font-weight:bold;">AED 14,200.00</div>
</div>
<div style="flex:1; background:#fafafa; padding:8px; border-radius:4px;">
<div>Adjustments</div>
<div style="font-size:18px; font-weight:bold;">AED 1,300.00</div>
</div>
<div style="flex:1; background:#fff3cd; padding:8px; border-radius:4px;">
<div>Patient Balance</div>
<div style="font-size:18px; font-weight:bold; color:#c00;">AED 3,000.00</div>
</div>
</div>
<!-- Encounters & Statements (simplified) -->
<h4>Encounters / الزيارات</h4>
<table style="width:100%; border-collapse:collapse; font-size:12px; margin-bottom:10px;">
<thead>
<tr style="background:#f5f5f5;">
<th style="padding:4px; border-bottom:1px solid #ddd;">Encounter</th>
<th style="padding:4px; border-bottom:1px solid #ddd;">Date</th>
<th style="padding:4px; border-bottom:1px solid #ddd; text-align:right;">Charges</th>
<th style="padding:4px; border-bottom:1px solid #ddd; text-align:right;">Insurance Paid</th>
<th style="padding:4px; border-bottom:1px solid #ddd; text-align:right;">Patient Balance</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding:4px; border-bottom:1px solid #eee;">ENC-2026-00123</td>
<td style="padding:4px; border-bottom:1px solid #eee;">05-Feb-2026</td>
<td style="padding:4px; border-bottom:1px solid #eee; text-align:right;">5,000.00</td>
<td style="padding:4px; border-bottom:1px solid #eee; text-align:right;">4,000.00</td>
<td style="padding:4px; border-bottom:1px solid #eee; text-align:right;">1,000.00</td>
</tr>
</tbody>
</table>
<h4>Statements / الكشوفات</h4>
<table style="width:100%; border-collapse:collapse; font-size:12px; margin-bottom:10px;">
<thead>
<tr style="background:#f5f5f5;">
<th style="padding:4px; border-bottom:1px solid #ddd;">Statement #</th>
<th style="padding:4px; border-bottom:1px solid #ddd;">Date</th>
<th style="padding:4px; border-bottom:1px solid #ddd;">Amount</th>
<th style="padding:4px; border-bottom:1px solid #ddd;">Delivery</th>
<th style="padding:4px; border-bottom:1px solid #ddd;">Status</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding:4px; border-bottom:1px solid #eee;">ST-2026-0005</td>
<td style="padding:4px; border-bottom:1px solid #eee;">06-Feb-2026</td>
<td style="padding:4px; border-bottom:1px solid #eee;">AED 3,000.00</td>
<td style="padding:4px; border-bottom:1px solid #eee;">SMS + Portal</td>
<td style="padding:4px; border-bottom:1px solid #eee;">Sent</td>
</tr>
</tbody>
</table>
<!-- Payment Plan & Collect -->
<div style="display:flex; justify-content:space-between; align-items:center; margin-top:10px;">
<div style="font-size:13px;">
<strong>Payment Plan / خطة الدفع</strong><br/>
<label><input type="checkbox"/> Create payment plan</label>
</div>
<div>
<button style="padding:6px 10px; background:#34a853; color:#fff; border:none; border-radius:4px;">Collect Payment</button>
</div>
</div>
</div>
</div>
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| Patient not found | "No patient found matching the search criteria." | Info |
| Payment plan amount ≤ 0 | "Installment amount must be greater than zero." | Error |
| Payment plan start date in past | "Payment plan start date cannot be in the past." | Error |
| Attempt to collect payment with zero balance | "Patient has no outstanding balance." | Info |
| PDPL masking rule | "You are not authorised to view full Emirates ID. Masked view applied." | Info |
Actions / Buttons
- Search: Finds patient and loads account data.
- Collect Payment: Opens SCR-BILLINGCLAIMS-009 (POS) with patient context and amount due.
- Create Payment Plan: Opens form to define installments; saves to patient account.
Accessibility
- Patient banner fields exposed with clear labels for screen readers.
- Tables support row-by-row reading; summary figures announced with context (e.g., "Patient balance: AED 3,000").
- Search input has
aria-autocomplete="list"andaria-expandedfor suggestions.
Responsive / Mobile
- Account summary tiles stack vertically.
- Tables become collapsible lists per encounter/statement.
- Collect Payment button fixed at bottom for quick access.
SCR-BILLINGCLAIMS-006: AR Aging Dashboard
Purpose
Visual dashboard showing AR aging buckets, payer breakdown, and trends, with ability to drill down to underlying claims and generate follow-up worklists.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Snapshot Date | Date picker | Yes | ≤ today | Today | Uses ar_aging.snapshot_date |
| Facility Filter | Dropdown | No | Valid facility | All | |
| Payer Breakdown Chart | Bar/pie chart | — | — | — | Visual AR by payer |
| Aging Buckets | Tiles/table | — | — | — | 0–30, 31–60, 61–90, 91–120, >120 |
| Total AR | Numeric | — | ≥ 0 | — | Sum of outstanding |
| Aging Trends | Line chart | — | — | — | AR over time |
| Drill Down to Claims | Link/button | — | — | — | Opens filtered claim list |
| Follow-up Worklist | Table | — | — | — | For AR Specialist |
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| No AR data for date | "No AR snapshot available for the selected date." | Info |
| Snapshot date in future | "Snapshot date cannot be in the future." | Error |
Actions / Buttons
- Refresh: Reloads dashboard with selected filters.
- Export: Exports AR summary to Excel/PDF.
- Create Worklist: Generates follow-up tasks for selected bucket/payer.
Accessibility
- Charts provide data tables with same information for screen readers.
- Colour-coded buckets also labelled with text (e.g., ">120 days").
Responsive / Mobile
- Charts stack vertically; some charts may be hidden behind tabs.
- Drill-down opens a simplified claim list optimised for mobile.
SCR-BILLINGCLAIMS-007: Denial Worklist
Purpose
Central worklist for denied and underpaid claims, showing denial reasons, amounts, days to file, and appeal status. Supports prioritisation and appeal initiation.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Denied Claims Table | Table | — | — | — | From claim_responses, denial_codes |
| Claim ID | Text | — | — | — | |
| Payer | Text | — | — | — | |
| Denial Reason | Text | — | — | — | Categorised (eligibility, auth, coding, etc.) |
| Amount | Numeric | — | ≥ 0 | — | Denied amount |
| Appeal Status | Dropdown | No | Enum (Not Started, In Progress, Submitted, Overturned, Upheld) |
Not Started |
|
| Days to File | Numeric | — | ≥ 0 | — | Based on payer rules |
| Appeal Button | Button | — | Enabled if appeal window open | — | Opens appeal form |
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| Appeal after filing deadline | "Appeal filing deadline has passed for this claim." | Error |
| Missing documentation | "Attach required clinical documentation before submitting appeal." | Error |
Actions / Buttons
- Appeal: Opens appeal creation form; captures reason, documentation, and channel.
- Update Appeal Status: Manually update based on payer response.
- Send to Denial Analysis: Flag for trend analysis.
Accessibility
- Days to file highlighted with text and
aria-label(e.g., "3 days remaining to file appeal"). - Keyboard shortcuts for changing appeal status.
Responsive / Mobile
- Worklist as cards sorted by amount and days to file; appeal button prominent.
SCR-BILLINGCLAIMS-008: Revenue Dashboard
Purpose
Executive dashboard summarising total charges, collections, net revenue, collection rate, denial rate, AR days, payer mix, and trends, with drill-down by facility, department, and payer.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Date Range | Date range picker | Yes | from ≤ to; max 12 months |
Last 3 months | |
| Facility Filter | Dropdown | No | Valid facility | All | |
| Department Filter | Dropdown | No | Valid department | All | |
| Total Charges | Numeric tile | — | ≥ 0 | — | |
| Total Collections | Numeric tile | — | ≥ 0 | — | |
| Net Revenue | Numeric tile | — | ≥ 0 | — | |
| Collection Rate | Percentage tile | — | 0–100% | — | |
| Denial Rate | Percentage tile | — | 0–100% | — | |
| AR Days | Numeric tile | — | ≥ 0 | — | |
| Payer Mix Chart | Pie chart | — | — | — | |
| Trends | Line/column charts | — | — | — |
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| Date range > 12 months | "Reporting period cannot exceed 12 months." | Error |
Actions / Buttons
- Drill-down: Clicking a tile or chart segment opens detailed report (e.g., list of claims).
- Export: Export dashboard data to Excel/PDF.
Accessibility
- All charts have data table equivalents.
- Tiles include descriptive text for screen readers (e.g., "Collection rate 95 percent, target 95 percent").
Responsive / Mobile
- Tiles appear first; charts accessible via swipeable tabs.
- Drill-down opens simplified lists.
SCR-BILLINGCLAIMS-009: Cashier / POS Collection
Purpose
Streamlined interface for point-of-service collection of co-payments and other patient payments, with integrated receipt generation and end-of-day reconciliation.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Patient Search | Text input | Yes | Min 2 chars; Emirates ID format if used | — | Can also be pre-populated from Patient Access |
| Amount Due | Numeric (read-only) | — | ≥ 0 | From patient account | |
| Custom Amount to Collect | Numeric input | Yes | ≥ 0; ≤ amount due (unless overpayment allowed) | Amount due | |
| Payment Method | Dropdown | Yes | Must be one of Payment Method Types |
— | Cash, credit, debit, bank transfer, online, etc. |
| Amount Collected | Numeric input | Yes | ≥ 0 | Same as custom amount | |
| Receipt Print | Button | — | Enabled after successful payment | — | Prints bilingual receipt |
| End-of-Day Reconciliation | Button | — | Cashier role only | — | Summarises payments by method |
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| Amount collected > amount due | "Collected amount exceeds amount due. Confirm if this is an advance payment or deposit." | Warning |
| Payment method not selected | "Select a payment method." | Error |
| Zero amount collected | "Payment amount must be greater than zero." | Error |
Actions / Buttons
- Collect Payment: Creates
patient_paymentsrecord, updates patient balance. - Print Receipt: Generates bilingual EN/AR receipt with PDPL-compliant masking.
- Send Digital Receipt: Sends SMS/email receipt via integrated messaging.
Accessibility
- Large, high-contrast buttons for payment actions.
- Clear focus order for quick keyboard operation at busy front desks.
Responsive / Mobile
- Optimised for tablet devices at POS; large inputs and buttons.
- Minimal scrolling; key fields visible without scrolling in landscape mode.
Common UI Patterns
Patient Banner
- Displayed on all patient-specific screens (Charge Review detail, Patient Account, POS).
- Fields:
- Patient name (EN + optional AR)
- MRN
- Emirates ID (masked according to PDPL and facility policy)
- Date of birth, age
- Mobile number
- Primary payer and plan
- Behaviour:
- Clickable to open full patient summary (from
ehr-patient-mgmt). - Uses high contrast and clear typography.
- Accessibility:
- Exposed as a landmark region (
role="banner"). - Screen reader text includes "Patient: [Name], MRN [MRN], Emirates ID masked."
Search Components
- Used for patient search, payer filter, department filter, etc.
- Patterns:
- Autocomplete with minimum character threshold (2–3 chars).
- Debounced requests (300–500 ms).
- Clear button to reset search.
- Validation:
- Inline messages for "no results" vs. "too many results".
- Accessibility:
aria-autocomplete="list",aria-controlsfor result list.- Keyboard navigation: Up/Down to move in suggestions, Enter to select.
Alert / Notification Patterns
- Types:
- Error (red): blocking issues (e.g., missing mandatory fields).
- Warning (amber): non-blocking but important (e.g., timely filing risk).
- Info (blue): informational (e.g., PDPL masking applied).
- Success (green): confirmation (e.g., payment posted).
- Placement:
- Global alerts at top of screen.
- Inline field-level messages under the field.
- Accessibility:
- Global alerts announced via
aria-live="assertive"for errors,politefor others. - Icons always accompanied by text labels.
Loading States
- Use skeleton loaders for tables and dashboards.
- Show concise text such as "Loading claims…" with spinner.
- For long-running operations (e.g., batch claim generation), show progress indicator and allow user to navigate away while process continues in background, with notification when complete.
Arabic/English Bilingual UI Considerations
- All labels and key actions available in English and Arabic; facility can configure default language per user.
- Support right-to-left (RTL) layout for Arabic:
- When Arabic is primary, align text right and flip layout where appropriate.
- Ensure numeric values (amounts, dates) remain easily readable.
- Receipts, statements, and patient-facing content:
- Bilingual headers and key fields (e.g., "Amount Due / المبلغ المستحق").
- Date and number formats:
- Use day-month-year (e.g., 07-Feb-2026) and AED currency formatting.
- Accessibility:
lang="ar"set for Arabic text blocks.- Screen readers correctly switch language context.
```