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

# Reports & movements

> See where stock went, what it's worth, and where variance is coming from — the output layer of Inventory.

Once counts are flowing and approved, the dashboard turns that data into
something a manager can act on. All of this lives under **Inventory** in the
dashboard.

## Movements — the audit trail

The **Movements** tab is the full, immutable history of every stock change at a
branch: sales consumption, stocktake adjustments, and any other movement. Each
row shows what changed, by how much, and why.

<CardGroup cols={2}>
  <Card title="Filter" icon="filter">
    Narrow by movement type, ingredient, and date range to answer "what happened
    to this item last week?"
  </Card>

  <Card title="Export" icon="file-csv">
    Export the view to CSV for sharing or deeper analysis.
  </Card>
</CardGroup>

<Note>
  Movements is read-only by design — it's the audit trail. Stock is only ever
  changed through order consumption or an **approved** stocktake, never edited
  directly.
</Note>

## Reports

The **Reports** tab has three views:

<AccordionGroup>
  <Accordion title="Food Cost">
    Average food cost and input-cost percentage across ingredients — how much of
    revenue is going into raw materials. Depends on ingredient **purchase cost**
    being set (see [Set up ingredients](/inventory/setup)).
  </Accordion>

  <Accordion title="Stock Valuation">
    What the current on-hand stock is worth — quantity × unit cost, rolled up by
    category and branch. A point-in-time "how much money is sitting on the
    shelves" number.
  </Accordion>

  <Accordion title="Variance by reason">
    Cross-session stocktake variance grouped by **reason code** (Supplier Short
    Delivery, Wastage, Opening Stock Adjustment, Theft, Other — plus an
    **Unspecified** bucket for older counts recorded before reason codes). This
    is the actionable one — it tells you *why* you're losing stock, not just
    that you are, so you can target the biggest bucket.
  </Accordion>
</AccordionGroup>

<Tip>
  For a true shrinkage picture, read the variance report scoped to **approved**
  stocktakes. Open or rejected counts never adjusted stock, so including them
  overstates loss.
</Tip>

## Low-stock alerts

When any deduction (a sale, waste, a transfer out, production) leaves an
ingredient **at or below its reorder point**, a **Low stock** alert is raised
automatically; hitting zero raises **Out of stock**. No polling, no manual
checks — the alert appears the moment the stock movement lands.

* **See the queue** under **Inventory → Overview → Alerts**: filter by type and
  status, and **Acknowledge** alerts once handled. Open alerts keep their
  quantity fresh as stock keeps moving.
* **Set the thresholds** per ingredient on the **Stock Levels** tab — no
  reorder point means only the out-of-stock alert applies.
* **Branch toggle**: turn alert generation off for a branch with the
  *Reorder alerts* switch in **Inventory → Settings**.
* Each alert is also published as a real-time event, so notification routing
  (e.g. WhatsApp/Lark) can be attached without touching the dashboard.

<Tip>
  Pair alerts with [purchase orders](/inventory/procurement): the PO form's
  **Pre-fill from suggestion** drafts order lines from exactly the ingredients
  sitting below their reorder point.
</Tip>

## Making the numbers trustworthy

Reports are only as good as the setup behind them. For meaningful reports:

<Steps>
  <Step title="Set opening stock">
    Without an opening balance, expected quantities — and therefore variance —
    are noise. See [Set up ingredients](/inventory/setup).
  </Step>

  <Step title="Set purchase costs">
    Food cost and valuation need per-unit costs on ingredients.
  </Step>

  <Step title="Count on a regular cadence">
    Variance and consumption only mean something when counts happen consistently
    (per shift, daily, or weekly — pick one and hold to it).
  </Step>

  <Step title="Use reason codes honestly">
    The variance-by-reason report is only as useful as the reasons staff pick at
    count time.
  </Step>
</Steps>
