---
title: "MIS Reports (Beta)"
description: "The new revenue cockpit and corrected core MIS reports — how to open them, what each figure means, how aging is calculated, and how they differ from the old MIS pages."
date: 2026-10-20
lastModified: 2026-10-21
category: "reports"
author: "Dr. Umesh Bilagi"
beta: true
---

## Overview

The beta MIS section is a ground-up rewrite of the money-facing reports. It answers one question per report with numbers that always add up:

- **What did we bill, collect and leave outstanding?** — Revenue cockpit
- **What is owed to us, and how old is it?** — Financial status, Debitors
- **What money came in today, and net of refunds?** — Daily collection
- **Where is money leaking between the price list and the till?** — Leakage audit
- **Which item sub-heads and doctors actually make money?** — Profitability
- **Which item sub-head brought in the most revenue?** — Item sub-head revenue
- **What does my accountant need for the month?** — Month-end accounting pack
- **How much did each admission or OPD visit earn and pay, in which clinical department?** — Admission / OPD month wise

The old reports are still available and unchanged. The only difference on the old landing page is the dialog that opens first and lets you choose between the old reports and the beta section. The beta pages are an additional section you can use side by side until you are ready to switch.

## How to open it

**Sidebar → MIS Reports** (`/admin/mis-reports`). A dialog appears asking whether you want the **old reports** or the **new beta reports**. During the beta, choosing *Old reports* leaves the old landing page exactly as it was.

The beta pages are:

| Page | URL |
|------|-----|
| Revenue cockpit | `/admin/mis-reports-beta` |
| Financial status | `/admin/mis-reports-beta/financial-status` |
| Debitors | `/admin/mis-reports-beta/debitors` |
| Daily collection | `/admin/mis-reports-beta/daily-collection` |
| Leakage audit | `/admin/mis-reports-beta/leakage` |
| Profitability | `/admin/mis-reports-beta/profitability` |
| Item sub-head revenue | `/admin/mis-reports-beta/item-sub-head` |
| Month-end accounting pack | `/admin/mis-reports-beta/accounting-pack` |
| Admission / OPD month wise | `/admin/mis-reports-beta/encounter-month-wise` |

Every role that can open the old MIS section can open the beta section.

Inside the beta section, a row of pills at the top of every report — Revenue cockpit, Financial status, Debitors, Daily collection, Leakage audit, Profitability, Item sub-head, Month-end pack and Month wise — switches between them without going back to the landing page. The period you have chosen is carried across, so the same window stays applied.

## Two different things called "department"

The word "department" means two unrelated things in this system, and the beta reports keep them apart:

| Term | Where it comes from | Where you see it |
|------|---------------------|------------------|
| **Clinical department** | The department you pick when registering an OPD visit or an admission (General by default) | **Month wise** and **Daily collection** — the Department column and filter |
| **Item sub-head** | The category and sub-head on the item master (for example Hospital · Cardiology) | **Profitability** and **Item sub-head revenue** |

A clinical department answers *who saw the patient*; an item sub-head answers *what was billed*. An invoice for a Cardiology encounter can carry any mix of item sub-heads, so never compare their totals with each other.

Clinical departments are stored from the moment this feature was released. Encounters created before it show as **Not recorded** — the department was never saved for them, and there is nothing to recover. Receipts with no encounter at all (counter sales) show a blank department, which is not the same as *Not recorded*.

## What "billed", "collected" and "receivables" mean

These definitions are used consistently on every beta page, so the figures agree with each other.

| Term | Definition |
|------|------------|
| **Billed** | Patient/payor `INVOICE` and pharmacy `INVOICE_P` vouchers minus `CREDIT_NOTE` and pharmacy `CREDIT_NOTE_P` vouchers in the selected period. Estimates and purchase invoices (`PURCHASE`) are excluded. |
| **Collected (net)** | `RECEIPT` vouchers minus `PAYMENT` refunds for patients and payors in the selected period. Vendor payments and doctor payouts are excluded. |
| **Outstanding in period** | Billed − Collected for the selected period. |
| **Balance (ledger)** | `opening balance + total debits − total credits` for the account, up to the as-of date. Estimates are excluded. |
| **Total receivables** | Sum of patient and payor ledger balances as of the as-of date. |

A payment *from the hospital* to a patient or payor is a refund. A payment to a vendor or a doctor is not counted as a refund in these reports.

## Dates work in IST

All periods and as-of dates are **Indian calendar dates**, not UTC. A voucher entered at 11:30 pm IST on the last day of a month belongs to that month, even though the database stores the timestamp in UTC.

The period is always kept in the URL, so a reload, a bookmark or a link you share opens the same window and the same totals.

## Revenue cockpit

**`/admin/mis-reports-beta`** — the default landing page inside the beta section.

- **Period selector** — Today, Month to date, Year to date, or a custom range.
- **KPI strip** — Billed, Collected (net, with receipts and refunds), Outstanding in period, Total receivables (patients and payors), Payables to vendors, and Cash + digital + bank.
- **Billed vs collected** — a daily line chart for periods up to 92 days, monthly beyond that.
- **Payer mix** — billed amounts grouped by the payor recorded on the invoice; invoices with no payor show as *Self-pay*.
- **Top revenue heads** — the ten item subheads with the highest billed amount.
- **Patient receivables aging** — how old the outstanding patient balances are.

Every KPI is calculated by the database over the whole period — not by adding up the rows visible on the screen.

## Financial status

**`/admin/mis-reports-beta/financial-status`**

Shows, for the chosen period and as-of date:

- Billed, collected and refunds for the period.
- Patient receivables and payor receivables as of the as-of date.
- Payables to vendors.
- Money accounts: cash in hand, digital and bank, with their total.
- Aging tables for patient and payor receivables.

This replaces the old Financial Status report, which understated payor receivables once an organisation had more than 500 payors.

## Debitors

**`/admin/mis-reports-beta/debitors`** — two tabs: **Patients** and **Payors**.

Each row is an account with:

| Column | Meaning |
|--------|---------|
| **Opening** | The account's opening balance |
| **Debits** | Total debit vouchers up to the as-of date |
| **Credits** | Total credit vouchers up to the as-of date |
| **Balance** | Opening + debits − credits |

- **As of** — change the date to see the balance on any past day.
- **Find** — search by name, mobile number or account ID.
- **Aging strip** — above the table, the outstanding balance split into Opening, 0–30, 31–60, 61–90 and 90+ day buckets, with the number of accounts in each.
- **Download CSV (all rows)** — exports every matching account, not just the visible page.

Because opening balances are not dated, they sit in their own **Opening** bucket rather than being assigned a guessed age.

## Daily collection

**`/admin/mis-reports-beta/daily-collection`**

One row per receipt or refund voucher, with tabs for **All**, **OPD** and **Admission**.

| Column | Meaning |
|--------|---------|
| **Date** | Voucher date in IST |
| **Voucher** | Voucher ID |
| **UHID** | Account ID of the patient or payor |
| **Patient / payor** | Account name |
| **Mobile** | Contact number on the account |
| **Type** | Patient or payor |
| **Mode** | The account the money moved through (for example cash or bank) |
| **Department** | The clinical department of the receipt's encounter; **Not recorded** when the encounter has none, blank for counter sales |
| **Received** | Receipt amount |
| **Refund** | Refund paid back |
| **Net** | Received − refund |

The **Department** filter narrows the whole page — rows, KPIs, totals and CSV — to one clinical department. Pick **Not recorded** to find money whose encounter has no department saved, and leave it on **All departments** to see everything.

The totals row and the KPI cards always cover the whole period, even when the table is paged.

## Leakage audit

**`/admin/mis-reports-beta/leakage`** — where money is lost between the price list and the collection. Four tabs:

| Tab | What it lists |
|-----|---------------|
| **Discounts** | Invoice lines billed with a percentage discount |
| **Price overrides** | Invoice lines charged below the tariff or master price |
| **Refunds** | `PAYMENT` vouchers back to a patient or payor |
| **Credit notes** | `CREDIT_NOTE` (patient) and `CREDIT_NOTE_P` (pharmacy) vouchers |

The KPI strip always shows the whole period: gross billed, total discounts (with the percentage of billed), price shortfall, refunds and credit notes.

- **Discount amount** on a line is `sale price × quantity × discount %`, the same formula used when the invoice is created.
- **List rate** is the tariff rate for the tariff named on the invoice; when the invoice names no tariff, the master sale price is used. Only charges *below* that rate count as a shortfall, and a zero-priced line always counts in full.
- **Items are named from their master record.** When an invoice line does not carry its own item sub-head (it is stored as zero), the category and sub-head are taken from the item's master record. Only when neither the line nor the master has one does the row show an empty sub-head.
- **Deleted vouchers leave no trace.** The system deletes cancelled vouchers outright and keeps no audit history, so a deleted invoice cannot appear here. The same applies to invoices edited before they were deleted.
- **Unbilled work is not included.** Draft lab and radiology orders that were never billed live only on the ABDM/FHIR server and are not part of this report yet.
- Refunds and credit notes show the note recorded on the voucher when one was entered.

The totals row and the KPI cards cover the whole period even when the table is paged, and the CSV contains every matching row.

## Profitability

**`/admin/mis-reports-beta/profitability`** — where revenue comes from and what it costs. Two tabs:

| Tab | Rows grouped by | Columns |
|-----|-----------------|---------|
| **Item sub-head** | Item subhead (category · sub-head) | Item sub-head, Sub-head, Revenue, Direct cost, Margin, Margin %, Lines |
| **Consultants** | Attending doctor and referring doctor | Attending, Referring, Revenue, Cost, Margin, Margin %, Lines |

The tab reads **Item sub-head**, not "Department": it groups the item master's category and sub-head, not the clinical department chosen at registration. A line that does not carry its own sub-head (stored as zero) is grouped under the sub-head on its item's master record, and only lands in **Unassigned** when neither the line nor the master has one.

- **Revenue** is the item value **before GST**, net of credit notes. Because Billed on the cockpit includes GST, the two figures deliberately do not match — the page says so.
- **Direct cost** is the quantity on each line multiplied by the purchase price recorded on that line when it was billed. When the line has no purchase price, the current master purchase price is used. Lines with neither count as *uncovered*: they still appear in the line count but carry zero cost, which overstates their margin. The **Cost coverage** KPI shows how much of the period is priced.
- **Attending doctor** is the **Consultant** on the invoice. Every invoice and credit note carries an optional Consultant field that starts as the encounter's attending doctor and can be changed or cleared on the bill — so a hospital can correct attribution when the billing doctor differs from the encounter, or attribute a direct cash sale to the hospital. When the field was never filled in, the encounter's attending doctor is used. A blank Consultant means **Hospital / direct**, not unattributed revenue.
- **Referring doctor** comes from the doctor recorded against each item. A line with neither a Consultant nor a referring doctor shows as **Hospital / direct** + **Unattributed**, so the totals always add up.
- **Counter sales** (pharmacy refills and walk-in lab tests with no encounter, see [Counter Sales](/docs/counter-sales)) are included; they appear under **Hospital / direct** unless a Consultant was typed.
- This is direct/consumable cost only. **Doctor payouts are not deducted** (they are `PAYMENT` vouchers against doctor accounts and carry no invoice lines), and neither are salaries, rent or depreciation — so margin is not profit.

## Item sub-head revenue

**`/admin/mis-reports-beta/item-sub-head`** — how much each item sub-head billed in the period, and how much of the total it is.

| Column | Meaning |
|--------|---------|
| **Category** | The item master's category (for example Hospital) |
| **Sub-head** | The item master's sub-head (for example Cardiology) |
| **Billed** | Invoice lines on that sub-head, including GST |
| **Credit notes** | Credit-note lines on that sub-head, including GST |
| **Net** | Billed − credit notes |
| **Lines** | How many invoice and credit-note lines the row covers |
| **Share** | The row's net as a percentage of **net revenue for the whole period** |

- The **Top revenue heads** card on the cockpit links here with **View all**, carrying the same period; the card's figures and this report's **Net** column are the same calculation, so they reconcile.
- Lines with no sub-head on either the invoice line or the item master appear as **Unclassified**, so the totals always add up.
- This is post-GST revenue, which is why it does not equal the pre-GST revenue on **Profitability**. Use Item sub-head for "how much did we bill here", and Profitability for "how much margin did it leave".

## Month-end accounting pack

**`/admin/mis-reports-beta/accounting-pack`** — one page (and one PDF) an accountant can work from. Pick a month and year, then **Download PDF** for the same figures formatted for print.

| Section | What it shows |
|---------|---------------|
| **Headline** | Billed, collected (net), outstanding in the month, total receivables, payables, money accounts, stock value |
| **Revenue and collections** | Invoices less credit notes, receipts, refunds and net collected |
| **GST summary** | Taxable value, CGST, SGST and IGST grouped by HSN/SAC and rate, using the percentages recorded on each invoice line |
| **Trial balance** | Opening, debits and credits in the month, and closing debit/credit per account type, with a difference line |
| **Receivables aging** | Patient and payor balances in Opening, 0–30, 31–60, 61–90 and 90+ buckets |
| **Vendor payables** | Each vendor with a balance, plus the exact count and total (the table shows the largest 200) |
| **Stock valuation** | Quantity and value per Pharmacy and Hospital item at the current master purchase price (the table shows the largest 200) |

Notes the pack makes explicit:

- Estimates (`ESTIMATE` vouchers) are excluded from every section.
- The trial balance difference is **reported, not forced to zero**. Opening balances have no date, so they are the only legitimate reason for a difference — every voucher in the system is double-entry.
- Stock is valued at the **current** master purchase price; it is not FIFO or weighted average.
- Deleted vouchers leave no trace. Accruals, depreciation and adjustment journals are not included.

## Admission / OPD month wise

**`/admin/mis-reports-beta/encounter-month-wise`**

Pick **Admission** or **OPD**, then a month. The report lists every encounter that had voucher activity in that month, one row each, with revenue, collection and balance.

| Column | Meaning |
|--------|---------|
| **Encounter ID** | The encounter's identifier |
| **Encounter** | The encounter name, such as OPD Consultation |
| **Department** | The clinical department chosen at registration; **Not recorded** when the encounter has none |
| **Last voucher** | The most recent voucher date for the encounter, in IST |
| **Revenue** | Invoices less credit notes, all-time for the encounter |
| **Collection** | Receipts less refunds from/to the patient or payor, all-time |
| **Balance** | Revenue − collection |

The **Department** filter narrows the rows and the totals to one clinical department. **Not recorded** collects the encounters created before departments were saved.

The amounts are **all-time totals for the encounter**, not just the selected month — this matches the old month-wise report's behaviour and is stated on the page.

**Collection** counts only receipts from and refunds to the patient or payor on that encounter. A vendor payment or doctor payout that also happens to carry the encounter's id is not counted, so it cannot change the encounter's balance.

**Services** on any row opens the encounter's itemised revenue — every category and sub-head it was billed for, with billed, credit notes and net, all-time. Use it to see what a single visit actually consisted of.

## Exporting and printing

- **Download CSV (all rows)** on Debitors, Daily collection, Profitability, Item sub-head and Month wise exports the complete filtered result, with a totals line at the end. The row count matches the total shown on the page, and the department filter is carried into the export.
- **Download PDF** on the Month-end pack produces the full pack for the selected month.
- The cockpit, Financial status and Daily collection pages have a **Print** button that hides the sidebar, navigation and filters; only the report prints.

## Paging

Every report table is paged on the server. The strip above the table shows `Showing 1–100 of N`, with **Prev** / **Next** and a **rows per page** selector offering **100, 250, 500 or 1,000**.

- Changing a filter or the period returns you to the first page.
- The chosen page size is kept in the address bar and carried when you switch to another report.
- Totals always cover every matching row, never just the visible page.

**Print** prints only what is on screen. For a long report, set the page size to 1,000 first; for everything, use **Download CSV (all rows)**.

## Differences from the old MIS pages

| Old behaviour | Beta behaviour |
|---------------|----------------|
| Financial status summed only the first page of payors | Exact totals over all accounts |
| No totals or row counts | Exact totals and `X–Y of N` counts |
| CSV was only the current page | CSV contains every matching row |
| "Today" could be yesterday between midnight and 5:30 am IST | Dates are always IST calendar dates |
| Refunds and receipts shown together with no net figure | Received, refund and net columns |
| No aging of receivables | Opening / 0–30 / 31–60 / 61–90 / 90+ aging |

## Questions

**Why is total receivables different from billed minus collected for the period?**
They answer different questions. Billed minus collected covers only the selected period; total receivables includes opening balances and every unpaid voucher up to the as-of date.

**Why does a patient's balance not equal their unpaid invoices?**
The balance is a ledger balance: opening balance plus every debit minus every credit. Advances and partial payments are already reflected, so it is not a list of open invoices.

**Why do the aging buckets add up to the balance even though the patient paid part of an invoice?**
Collections are applied to the oldest invoice first (FIFO). Whatever remains after applying all collections is split into the age buckets, so the buckets always total the outstanding balance.

**Why is a refund to a vendor missing from Daily collection?**
Only refunds to patients and payors are collections. Payments to vendors and doctors are payables, not refunds, and are excluded from this report.

**What counts as a price override?**
An invoice line charged below the tariff named on the invoice — or, when no tariff is named, below the master sale price. Lines with no master item or with a zero list rate are excluded, so an unknown item is never reported as free. A zero-price line on an item that *does* have a price counts as a full shortfall.

**Are refunds leakage?**
They are losses if they were avoidable, but the report does not judge that. It lists every refund to a patient or payor in the period so someone can look. Payments to vendors and doctors are not refunds and are excluded.

**Why can't I see an invoice that I deleted?**
Deleting an invoice removes the voucher and its lines from the database and leaves no audit record. The leakage audit can only report on vouchers that still exist; recovering deleted ones would need a new audit-history feature.

**Why is Profitability revenue lower than Billed on the cockpit?**
Profitability uses the item value before GST; Billed includes GST. Subtract GST (or compare against the GST summary in the month-end pack) to reconcile them.

**Which department was a patient treated in, and how do I see its money?**
The clinical department is captured on the encounter at OPD/IPD registration and is shown on Month wise and Daily collection, with a filter on both. It is a *clinical* field — it does not change which item sub-head revenue lands under.

**Why does an encounter show "Not recorded"?**
The encounter was created before departments were saved at registration. Only encounters registered after that point carry one, and there is nothing to recover for older visits. New registrations default to **General** when the department is left untouched, so they are never blank.

**Why is a counter sale's department blank rather than "Not recorded"?**
A counter sale has no encounter, so there is no clinical department to look up. Blank means "no encounter"; *Not recorded* means "an encounter that has no department saved".

**Why is a department's margin higher than expected?**
Some lines carry no purchase price — neither on the invoice nor on the master. Those lines are counted but cost nothing, so their margin is overstated. The Cost coverage KPI tells you how much of the period is affected.

**Are doctor payments counted in Profitability?**
No. Doctor payouts are `PAYMENT` vouchers against doctor accounts and have no invoice lines, so they are neither revenue nor cost. The margin shown is after consumable cost only — what the doctor is paid comes on top of it.

**Which doctor counts as "attending" on a Profitability row?**
The **Consultant** recorded on the invoice. It defaults to the encounter's attending doctor (`ATND`) when the bill is raised, and can be overwritten with any name or cleared on the invoice — a cleared Consultant is shown as **Hospital / direct**. A credit note raised from an invoice starts with that invoice's Consultant. Invoices created by an older version (or by an automated flow) have no stored Consultant, so they fall back to the encounter's attending doctor; when the encounter has several attending participants the first is used, so the same revenue is never counted twice. Profitability attribution is separate from doctor commission — see [Doctor Revenue & Expense](/docs/doctor-revenue).

**Why doesn't the month-end trial balance difference come to zero?**
Opening balances are undated and entered once per account. Every voucher is double-entry, so the only legitimate source of a difference is the sum of those opening balances. The pack reports the difference rather than hiding it.

**Does the pack use FIFO for stock?**
No. Stock is valued at the current master purchase price for Pharmacy and Hospital items, which is simple and predictable but not FIFO or weighted average.
