The bin card is a pharmacist's digital record of every unit that came into or left a product's shelf. RxShelf's version has two levels:
- Movement summary — one row per product, showing opening balance, closing balance, and each movement type totaled for the period.
- Bin card — the per-product drill-down: every movement in chronological order with a running balance.
Both live under Sidebar: Reports → Inventory.
Movement summary
Landing on Reports → Inventory shows the summary — one row per active product over your chosen period.
Columns:
| Column | What it shows |
|---|---|
| Product | Full identity — name, generic, strength, form, manufacturer. |
| Opening | Balance at the start of the period. |
| Stock in | Total received via restock / PO in the period. |
| Sale | Total dispensed via completed sales. |
| Refund | Total returned to stock via refunds. |
| Void | Total returned to stock via voided sales. |
| Expired | Total quarantined (removed as expired/damaged via the quarantine flow). |
| Adjustment | Total manual adjustments (positive or negative). |
| Closing | Balance at the end of the period. |
Every row reconciles:
Opening + Stock in + Refund + Void + Adjustment − Sale − Expired = Closing
Filters: date range (default today), and a search box across name / generic / manufacturer. Server-paginated.
Bin card — the per-product drill-down
Click any product row in the summary to open its bin card. Also reachable from the product detail page → View full bin card on the stock-movements section.
Columns:
| Column | What it shows |
|---|---|
| Date & time | When the movement happened (12-hour AM/PM). |
| Type | Stock in, sale, refund, void, quarantine, adjustment — as a colored badge. |
| Qty before | Aggregate stock immediately before this movement. |
| Qty change | Signed. Green + for additions, red − for removals. |
| Balance | Running balance immediately after the movement (bold). |
| Performed by | Who did it. |
| Batch | The specific batch affected. |
A synthetic Created row anchors the very oldest end when the creation date is in the visible range — starts the history at when the product first entered inventory.
The reconciliation guarantee
The bin card header shows Current stock: N unit as a live banner. The
latest row's Balance equals that number — always. The balance isn't
recalculated on the fly; it's stored on every stock movement (quantity_before
and quantity_after), so any two RxShelf devices reading the same log see
the same balance.
This is your reconciliation tool. If your physical shelf count disagrees with RxShelf, scroll the bin card to find the discrepancy — usually a missed adjustment or an unrecorded refund. Every movement carries who did it and when.
A note on "Expired"
Expired = quarantine. The quarantine flow (Inventory → Expiry → quarantine
a batch) writes a movement with reason quarantine. A manual stock adjustment
with sub-reason "expired" lands in the Adjustment column instead — the
sub-reason isn't preserved in the log.
Filter the bin card
- Date range — narrow to a specific period.
That's it. The bin card doesn't need many filters — it's one product's story in one place.
Who can access it
- Owner — yes.
- Manager — yes.
- Accountant — yes.
- Dispenser — no (inventory reports are hidden from dispensers by default).
Export
Both the movement summary and the bin card export to CSV, Excel, and PDF. The bin card PDF is formatted the way a pharmacist expects for reconciliation or inspection purposes.
Next steps
- Run the sales report — the money side.
- Receive a purchase order —
every receive is a
Stock inmovement here.