---
name: evolution_invbomrestock_rebuild
description: "BOM Restocking report rebuilt into modern 3-file pattern with financials, MRP suggested-ordering, CSV"
metadata: 
  node_type: memory
  type: project
  originSessionId: c82b846f-c0b4-4969-99d0-f2f50fdb17af
  modified: 2026-07-20T04:56:08.116Z
---

`reports/invBomRestock` rebuilt 2026-07-20 from a monolithic server-rendered `.inc` into the modern 3-file report pattern (`.inc` layout + `.js` controller + `invBomRestockSave.php` AJAX endpoint), matching [[evolution_invbomrep_rebuild]] / [[evolution_inventory_analytics_suite]].

- **Demand engine preserved verbatim** in Save.php: override hierarchy (job→quote→master BOM) + `mfbom` in-progress reconciliation (see [[evolution_bom_hierarchy]]). Do NOT touch that logic — it's audited.
- **New financial/MRP layer:** unit cost (branch `inventory_soh.costavg` → `inventory.cost` → `lastcost` fallback), demand value, SOH value, **Est. Purchase Spend** = suggested qty × cost. KPI tiles (items / need-restock / est spend / demand value / SOH value).
- **Suggested Order Qty** = cover shortfall + top up to branch reorder min (`inventory_soh.min`), rounded up to MOQ (`inventory.minorder`). Available = SOH − allocated + on order; Projected = available − demand. Status badge OK/Order/Short/Critical.
- Filters: in-report branch selector (hides legacy `reportHeaderBranch`), category multiselect (CategoryHelper), preferred-supplier (`contacts.is_supplier`), only-needing-restock, min est-spend. Group-by-supplier client-side render with est-spend subtotals. CSV export. Breakdown modal enriched with job customer + $ value.
- Docs: `docs/reporting/inventory.php` BOM Restocking section updated. Release note **132** injected to prod (status=0 unapproved) per [[live_inject_release_notes]].
