> ## Documentation Index
> Fetch the complete documentation index at: https://help.clinikehr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Financial reports

> Revenue, outstanding balances, payments and tax — ten reports you can filter by date and export as a spreadsheet or a PDF.

export const StillStuck = ({topic}) => <div className="ck-callout ck-callout--note" role="note">
    <p className="ck-callout__body">
      <strong>Still stuck{topic ? ` with ${topic}` : ''}?</strong>{' '}
      Check <a href="/platform/help/troubleshooting">Troubleshooting</a> first —
      it covers the failures we see most often. If that does not resolve it,{' '}
      <a href="/platform/help/contact-support">contact support</a> and include
      your workspace name and the time the problem happened, so we can find the
      matching entry in your audit log.
    </p>
  </div>;

export const TaskHeader = ({before, time, after}) => <div className="ck-task">
    {before ? <div className="ck-task__cell">
        <div className="ck-task__title">Before you start</div>
        <p className="ck-task__body">{before}</p>
      </div> : null}

    {time ? <div className="ck-task__cell">
        <div className="ck-task__title">Takes about</div>
        <p className="ck-task__body">{time}</p>
      </div> : null}

    {after ? <div className="ck-task__cell">
        <div className="ck-task__title">When you're done</div>
        <p className="ck-task__body">{after}</p>
      </div> : null}
  </div>;

export const Path = ({steps = []}) => <span className="ck-path">
    {steps.map((s, i) => <span key={i} className="ck-path__step">
        {i > 0 ? <span className="ck-path__sep" aria-hidden="true">
            ›
          </span> : null}
        {s}
      </span>)}
  </span>;

export const Availability = ({editions = ['all'], plans, roles, note}) => {
  const list = editions.includes('all') ? ['clinic', 'pharmacy', 'lims'] : editions;
  return <div className="ck-avail" role="note" aria-label="Feature availability">
      <span className="ck-avail__label">Available in</span>

      {list.map(e => <span key={e} className={`ck-pill ck-pill--${e}`}>
          {EDITION_LABELS[e] || e}
        </span>)}

      {plans ? <span className="ck-avail__label">Plan</span> : null}
      {plans ? <span className="ck-pill ck-pill--plan">{plans}</span> : null}

      {roles ? <span className="ck-avail__label">Who</span> : null}
      {roles ? <span className="ck-pill ck-pill--role">{roles}</span> : null}

      {note ? <span className="ck-avail__note">{note}</span> : null}
    </div>;
};

<Availability editions={['clinic']} plans="Team and above" roles="Any staff member can open the page; the figures themselves need View net position (owners and managers hold it by default)" />

**Financial Reports** is where you go for the money picture across a date range you choose, rather than one invoice or one payment at a time — revenue, who owes the hospital, what came in, and how much tax was collected.

<Path steps={['Sidebar', 'Financial Reports']} />

<TaskHeader before="A question like 'what did we collect last month?'" time="A minute" after="A filtered report, on screen, exported as CSV or PDF" />

## What you're looking at

At the top, a report picker and a date range — every tile and every row on the page updates together when you change either one. **Export** gives you the same report as a CSV (opens in Excel or Sheets) or a PDF (for printing or sending on).

## The ten reports

| Report                    | Answers                                                                                |
| ------------------------- | -------------------------------------------------------------------------------------- |
| **Revenue by period**     | Invoiced and collected, day by day                                                     |
| **Revenue by service**    | Which services bring in the most, by billed line                                       |
| **Revenue by location**   | Which of your sites earns what, for hospitals with more than one premises              |
| **Revenue by provider**   | Billed revenue, grouped by the clinician who saw the patient                           |
| **A/R aging**             | What's owed, bucketed by how overdue it is: current, 1–30, 31–60, 61–90, 90+ days      |
| **Outstanding invoices**  | Every unpaid or overdue invoice, with its balance                                      |
| **Payments & refunds**    | Every payment and every void/refund recorded, with the net                             |
| **Tax summary**           | Tax collected on invoices, by day                                                      |
| **Provider productivity** | Lines billed and revenue billed, by the clinician who did the work                     |
| **Collections by staff**  | Appointments completed and revenue collected, by the staff member who took the payment |

<Note>
  **A/R aging and Outstanding Invoices are "as of" the END of your date range**, not a count of what was invoiced during it — they answer "what is currently owed". Picking last month doesn't hide an older unpaid invoice.
</Note>

<Note>
  **"Revenue by provider" and "Provider productivity" both show who did the clinical work, not who took the payment** — and both read the same attribution, just laid out differently (one as billed revenue per clinician, the other with a lines-billed count alongside it). Each billed line can be attributed to a clinician — from the invoice, or when a payment is recorded — and lines from a consultation, a prescription, a lab test, a ward stay, or an ordered procedure are attributed automatically from that record. A line nobody has attributed and nothing can attribute automatically shows up as **"Unattributed"** rather than being left out, so both reports always add up to total revenue.

  **"Collections by staff"** is a different question: appointments completed and payments collected, by the staff member who took the payment at the desk. That is who banked the money, not necessarily who saw the patient.
</Note>

<Note>
  **"Revenue by location" needs more than one site to be useful.** Every hospital starts with one location named "Main"; add more from **Settings → Locations** and pick a location when an invoice is raised. An invoice with no location picked shows up as **"Unassigned"** rather than being left out — the report always adds up to total revenue. Closing a location later doesn't erase its past invoices.
</Note>

## Attributing a line to the clinician who saw the patient

When a line is added to an invoice, or a payment is recorded against one, its **Rendering provider** can be set — the clinician who saw the patient for that line. It's optional, and can be left as **Unattributed**; setting it later (from the invoice, or from **Record payment**) fills it in without disturbing anything already set.

A consultation, prescription, lab test, ward stay or ordered procedure line is attributed automatically to whoever recorded that piece of clinical work, even if nobody set a Rendering provider by hand — so most billed lines already show a name. A line for a general service or a custom charge has no clinical record to draw from, so it stays **Unattributed** until someone sets it explicitly.

## If the page shows no figures

If you can open **Financial Reports** but every tile and table reads **"—"**, you're missing the **View net position** permission. Ask an owner or manager to grant it from **Staff & Teams** → your permissions.

<Note>
  **A dash is not a zero.** "—" means the figure was withheld from you; a real "0" (no revenue this period, nothing overdue) always prints as 0.
</Note>

## Exporting

**CSV** downloads instantly and matches exactly what the table shows. **PDF** is generated on the server as a formatted, printable document. Both exports are logged to your **Audit Log**.

<StillStuck />
