Inventory Movement log
Movements (30d)
1,247
across all types
Sales
894
−4,820 units
Receipts
182
+12,340 units
Adjustments
28
net −248 units
Default date range: last 7 days. Movements are append-only — no edits, no deletes.
Timestamp Type Item Location Quantity Unit cost Source document
May 12, 14:32:18 Sale
AA Batteries 8pk
BAT-AA8
Río Piedras −2 $4.10 SALE-20260512-0842
May 12, 13:18:02 Receipt
Coffee Beans 1lb · Dark
COFFEE-DK-1LB
Río Piedras +40 $6.40 RCV-000089
May 12, 11:42:47 Adjustment
Wireless Mouse
MSE-WL01
Río Piedras −3 $18.40 ADJ-000028
May 11, 16:08:31 Transfer in
Dish Soap 32oz
DSH-32OZ
Río Piedras +24 $1.85 TRF-000017
May 11, 16:08:31 Transfer out
Dish Soap 32oz
DSH-32OZ
San José −24 $1.85 TRF-000017
May 11, 09:24:11 Return
USB-C Cable 1m / White
USB-C-1M-WHT
Río Piedras +1 $7.20 RET-20260511-0012
May 10, 17:22:00 Count
Ibuprofen 200mg · 100ct
IBU-200-100
San José −2 $3.10 SC-000009 → ADJ-000027
Show per page · showing 1–7 of 1,247
▸ Mockup notes
  • Endpoint: GET /api/inventory/movements — append-only ledger, ordered by CreatedAtUtc desc
  • 8 movement types: Sale, Return, Receipt, Adjustment, TransferOut, TransferIn, Count, Distribution (per MovementType.cs enum)
  • Default date range = last 7 days (forced by frontend) to avoid full-table scans on high-volume merchants. UI hint banner clarifies
  • Sortable columns require backend SortBy switch — currently the endpoint only orders by CreatedAtUtc desc. Confirm before flipping sortable: true on others
  • Source document column is clickable when ReferenceType+ReferenceId resolves to a portal route (e.g., RCV → /purchase-receipts/$id, ADJ → /inventory/adjustments/$id)
  • Two-line source for Count entries: "SC-XXX → ADJ-YYY" links to the parent count and the auto-generated adjustment
  • Read-only view — no Edit / Delete column. Movements are immutable per design doc §5.2