What's in the module
The pieces that close the loop
Each piece is wired to the next so there's no manual hand-off between forecast, ordering, receiving, and the stock ledger.
Per-Location Stock Ledger
Every location (HQ, satellites, trucks) holds its own on-hand quantity and rolls into the moving-average cost. Receive, transfer, consume, return, and adjust movements form the audit trail. Nothing edits an existing entry — the ledger is append-only.
- Every org gets an HQ yard on day one so the first receive never fails for a missing location
- Multiple yards are supported, so growing from one yard to several doesn't strand existing stock
- Moving-average cost recomputed on every receipt with concurrency-safe locking
- Two crews consuming the same SKU at the same time never push on-hand into the negative
Professional+
Lot Tracking & Expiry Alerts
Regulated product (chemicals, fertilizer) carries lot number and expiry through every ledger entry from receive to consume. Foremen get an alert when a lot crosses the expiry window so product doesn't go off-spec on your shelf.
- Lot inputs only show up for fertilizer and chemicals — the receive form stays clean for other products
- Lot rides along on the consume entry when a crew logs an application that pulls from the linked product
- Expiring-lots view, with a window you set (30 days by default)
- One notification fires per expiring lot — routed to foremen, not the whole office
Professional+
Vendor Catalog & Preferences
A real vendor record — not just a free-text string on an invoice. Contact info, payment terms, QuickBooks link, and per-product preferences with priority ordering. The catalog is the source of truth for who should supply what.
- Same vendor name can't be typed in twice — the catalog tells you it already exists
- Per-product preference list shows priority ordering; lower priority wins when POs auto-group by vendor
- Cross-org guards on both product and vendor — one org's catalog can never link into another's
- Coexists with the legacy spend-aggregation view so a tenant already using it doesn't see a regression
Professional+
Purchase Orders
Draft, sent, received, cancelled. You can't skip "sent", you can't edit lines on a sent PO. Receive is the only step that touches inventory — cancel before that point and nothing in the stockroom moves.
- Auto-generated PO numbers, guaranteed unique per org — no overlap with anyone else's numbering
- Source badge on every PO so you can tell at a glance whether it was hand-built or auto-drafted from the Supply Forecast
- Once a PO is sent, only the delivery location stays editable; corrections after that point happen via cancel and redraft
- Receive is all-or-nothing across every line — either every line bumps inventory or none do
Professional+
Draft POs from Supply Forecast
One click on the Supply Forecast page groups every shortage row by its preferred vendor and creates one draft PO per vendor, plus a no-vendor bucket. Quantities roll up annually so you get one PO per vendor per program, not a dozen tiny ones per round.
- Grouping reads each product's preferred-vendor list from the Vendor Catalog
- Products without a preferred vendor land in a single bucket; you can assign a vendor after the fact
- Pack-size rounding (bag, pallet, ton) applied per round before the annual sum
- Result panel breaks out vendor-grouped vs. unassigned counts and deep-links to the filtered PO list
Professional+
Vendor Backfill from Invoices
Most shops arrive with years of supplier invoices where "vendor" is a free-text string and no managed record exists. One pass walks every unlinked invoice, matches against your existing vendors regardless of capitalisation, and (optionally) creates stub records for unmatched names.
- Case-insensitive match against your existing vendor list
- Auto-create off by default for cautious shops; flip it on for the fastest backfill
- Safe to run by two people at the same time — the system won't create the same vendor twice
- Result panel: created vs. linked counts, plus any unmatched names for manual review
Professional+
Fertilizer Auto-Decrement Bridge
Link a fertilizer product to its inventory SKU. When a crew completes a fertilizer application, RootControl writes one stock-consume entry per linked product line. A re-save of the completed record can't double-decrement; a cancel restores the stock automatically.
- Org-level toggle, on by default — turn it off if you run a separate stockroom
- A re-save of a completed application can't double-decrement — the system recognises the second write as a no-op
- Source location picks the right truck if the job is tied to one, otherwise falls back to your HQ yard
- Cancelling a completed application writes a compensating adjust entry that restores on-hand
Professional+
Low-Stock Notifications
Set a reorder point per product. When on-hand crosses below that line for the first time, one notification fires to your foremen. No re-firing on every page reload, no spam if the stock dips and recovers.
- Fires once on the way down, not every time someone loads the page
- A receipt that brings stock back above the threshold resets it — the next dip below fires again
- Same notification stream as expiring-lots so foremen see all stockroom alerts in one place
- Routed to foremen by default, keeping the office-admin inbox clean
Professional+