Appearance
Demo HorizonCare Hospitals: a multi-branch hospital day
Demo HorizonCare Hospitals operates three hospitals and six outpatient clinics in India, the UAE, and Kenya. It treats insured and self-pay patients, imports specialist medicines, runs an in-house pharmacy and laboratory, pays consultants by contract, and reports each legal entity in its local currency while the group reports in USD. This lab shows how OSERP joins the patient journey to a controlled accounting event. A clinical system may remain the source of diagnosis and observations; OSERP is the source of commercial, inventory, receivable, payable, workforce, and financial truth.
1. Design the organisation before the first patient
Create one tenant for HorizonCare Group, then legal companies for India, UAE, and Kenya. Each company has branches, departments, cost centres, warehouses, tax registrations, fiscal calendars, and a functional currency. Do not use a branch name as a company: a company owns books and tax obligations; a branch is an operating location inside those books.
| Setup field | Demo value | Why it matters |
|---|---|---|
| Company | HorizonCare India Pvt Ltd | Legal ledger, tax return, statutory books |
| Branch | Bengaluru Central Hospital | Operational and revenue reporting |
| Department | Cardiology | Service, staffing, and cost analysis |
| Cost centre | CC-CARDIO-01 | Allocates shared theatre and nursing cost |
| Currency | INR | Transaction and local reporting precision |
| Reporting currency | USD | Group consolidation and board view |
| Warehouse | BLR-PHARM-MAIN | Medicine custody and expiry tracking |
| Tax profile | GST healthcare rules | Determines taxable versus exempt lines |
| Period status | Open | Allows approved posting only |
The company master also stores registration number, address, timezone, first fiscal period, numbering series, default receivable and payable accounts, rounding rule, and approval policy. A user must be scoped to a company and branch before a patient, supplier, invoice, or journal can be created. A disabled branch remains in history but cannot accept new transactions.
2. Register a patient and payer correctly
The patient profile is a controlled party record, not a free-text name on an invoice. Required fields include patient number, legal name, preferred name, date of birth, sex, nationality, contact, address, emergency contact, consent status, payer type, and privacy classification. The identifier is unique within the tenant, while the same person can have encounters at multiple branches.
Payer setup determines how a charge becomes cash. A self-pay payer requires price list, deposit policy, credit status, and receipt method. An insurer requires policy number, member number, plan, network, pre-authorisation rule, claim submission channel, copayment percentage, deductible, currency, and validity dates. Never overwrite an expired policy; create a version so a resubmitted claim can prove which terms applied on the service date.
Example: Aisha Khan visits Bengaluru Central on 2026-09-17. Her insurer covers 80% of an MRI after a INR 5,000 deductible. The encounter stores the policy snapshot, referral, authorisation number, attending consultant, department, and service location. If the policy is edited later, the encounter still retains the original coverage terms.
3. Schedule an encounter and reserve capacity
An appointment header stores patient, branch, department, clinician, appointment type, date/time, status, referral, payer, and source. Detail rows can include consultation, procedure, room, equipment, and estimated duration. The scheduler prevents a clinician or MRI room from being double-booked and records cancellation reason, no-show flag, and reschedule link.
The appointment status path is Requested → Confirmed → Checked in → In service → Completed, with controlled exits for Cancelled, No show, and Rejected. Only a completed encounter can release billable service lines. A receptionist can check in a patient but cannot approve a discount or alter a posted charge. The audit event records actor, device, timestamp, previous status, new status, and reason.
4. Capture services without losing clinical-to-finance traceability
Charge capture translates a performed service into an item, price, tax, department, and payer responsibility. The charge header stores encounter, patient, company, branch, clinician, payer, currency, price list, claim batch, and status. Each detail stores service code, description, performing department, quantity, unit price, discount, tax code, payer share, patient share, cost centre, revenue account, and source event.
| Charge field | Demo MRI value | Operational meaning |
|---|---|---|
| Service code | RAD-MRI-BRAIN | Links catalogue, price, and revenue mapping |
| Quantity | 1 | Billable units, not appointment count |
| Unit price | INR 18,000.00 | Price-list amount at service date |
| Deductible | INR 5,000.00 | Patient responsibility before coverage |
| Insurer share | INR 10,400.00 | Claimable amount after deductible |
| Patient share | INR 7,600.00 | Deductible plus uncovered amount |
| Tax code | HEALTH-EXEMPT | Prevents accidental GST/VAT posting |
| Source event | ENC-2026-0917-0042 | Evidence for audit and claim |
The charge engine checks that payer share plus patient share equals the net charge, applies contract-specific tariffs, and rejects negative or over-100% coverage. A price override requires reason, permission, and approver. A cancelled service reverses the charge through a credit event; staff must not delete the original line.
5. Invoice self-pay and insurance separately
Self-pay invoices are issued at checkout with deposit allocation, receipt, payment method, bank reference, and balance. Insurance invoices are grouped into a claim batch only after coding review. The claim header stores insurer, submission period, currency, encounter count, total amount, author, reviewer, submission channel, acknowledgement number, and status. Detail rows retain patient, policy, diagnosis or service code, authorisation, gross, deductible, covered amount, rejection reason, and resubmission link.
For Aisha, OSERP creates a patient invoice for INR 7,600 and an insurer receivable for INR 10,400. The two receivables share the encounter but have different payer, due date, tax, collection workflow, and dispute status. A rejected insurer line is moved to Rejected, not silently written off. The billing team corrects the cause, resubmits with a new version, and keeps the original acknowledgement.
6. Run pharmacy and laboratory as inventory-controlled services
Medicine and consumables use batch-managed items with expiry, manufacturer, UoM, storage condition, cost, tax, and controlled-substance flag. A prescription or procedure consumption request reserves stock; a pharmacist issues the approved quantity using FEFO (first expiry, first out). The issue document stores patient, encounter, prescriber, warehouse, batch, expiry, quantity, unit cost, and waste reason.
The laboratory catalogue separates the test service from reagents consumed. A CBC charge can therefore post revenue while reagent lots post cost of service. A recalled batch can be quarantined by lot and traced to every patient issue, supplier invoice, and branch transfer. Stock adjustments require count sheet, reason code, witness, and approval; expiry write-offs post to a configured medical-waste expense account.
7. Procure medicines, implants, and outsourced services
The procure-to-pay flow begins with a department request containing item, clinical justification, required date, warehouse, budget, and preferred supplier. Purchase orders hold supplier, contract, currency, price, tax, delivery schedule, batch requirements, and approval. Goods receipts capture lot, expiry, quantity accepted, quantity rejected, temperature check, and inspection result. Supplier invoices are matched to purchase order and receipt before posting.
An imported implant may be priced in EUR, shipped to Dubai, and received in INR books. OSERP retains supplier currency, transaction rate, landed-cost components, customs reference, freight, insurance, and local valuation. The landed cost is allocated by quantity or value according to the configured method; it is never hidden in a manual journal. A three-way mismatch routes to exception approval instead of forcing payment.
8. Pay consultants and hospital employees
Consultant contracts store speciality, branch, service rate, revenue share, minimum guarantee, effective dates, currency, tax withholding, bank, and approval. A monthly statement is generated from completed, non-refunded encounters. The statement detail links each encounter, service code, gross charge, payer status, consultant percentage, withholding, and net payable. A consultant cannot approve their own rate change or statement.
Employee payroll uses the same company and cost-centre dimensions but a separate payroll policy. Nursing overtime, on-call allowance, benefits, deductions, and employer contributions are posted by department. Payroll journals summarize approved payroll runs while preserving employee-level evidence behind restricted permissions.
9. Manage deposits, refunds, and patient credit
Patient deposits are liabilities until consumed by an approved charge. The receipt stores patient, payer, branch, currency, bank or gateway, reference, amount, and allocation status. Allocation links a receipt to invoice lines; an unapplied balance remains visible on the patient statement. Refunds require reason, original receipt, bank validation, approval, and segregation from the user who collected cash.
Example: Aisha paid INR 10,000 before the MRI. INR 7,600 is allocated to her patient invoice and INR 2,400 remains as deposit. If the insurer later pays its INR 10,400, OSERP does not net the patient deposit against the insurer: each party retains a clean statement and the deposit can be refunded or used for a later service.
10. Close the hospital month
The controller closes in layers: cash and gateways, patient receivables, insurer claims, deposits, pharmacy stock, expired and quarantined lots, supplier accruals, consultant statements, payroll, fixed assets, intercompany transfers, tax, FX revaluation, and GL. The close checklist requires owner, evidence link, expected balance, actual balance, variance, reviewer, and sign-off date.
Multi-currency balances retain transaction rate, source, timestamp, and revaluation rate. A UAE insurer receivable in AED is revalued at period end; the unrealised FX entry is reversed or carried according to policy. Intercompany pharmacy transfers between India and UAE use mirrored documents and matching due-to/due-from accounts. Period lock prevents backdated edits while approved correction journals remain possible with reason and audit trail.
| KPI | Before OSERP discipline | After OSERP discipline | Improvement |
|---|---|---|---|
| Claim submission cycle | 12 days | 3 days | 75% faster |
| Insurance rejection rate | 14.8% | 5.1% | 65.5% lower |
| Pharmacy stock variance | 3.9% | 0.8% | 79.5% lower |
| Patient checkout time | 31 min | 12 min | 61% faster |
| Month-end close | 18 days | 6 days | 67% faster |
| Expired-stock write-off | INR 4.2m | INR 1.1m | 74% lower |
Practice challenge
Create the three legal entities, configure a cardiology department and pharmacy warehouse, register Aisha with an insurer policy, schedule an MRI, check her in, capture the service, split payer responsibility, issue medicine by batch, submit the claim, collect and allocate a deposit, receive a supplier invoice in EUR, pay a consultant, revalue the AED receivable, and close the month. For every field, explain its data type, length or precision, source, permission, validation, accounting impact, tax result, API identifier, exception path, and audit event.
Related: Setup field guide, Inventory field guide, AR Invoice field guide, AP Invoice field guide, GL mapping guide, Multi-currency lab, and API cookbook.