FieldPro FSM — React + TypeScript + Vite + Supabase + Tailwind
- Build:
npm run buildmust pass before any commit - Supabase column names: always verify against actual DB schema (not assumptions)
van_stockshasvan_statusNOTstatus,technician_idNOTtechnician_name- Jobs use soft-delete (
deleted_at): all list queries MUST filter.is('deleted_at', null) - Inventory movements are immutable: DELETE trigger blocks removal, UPDATE only allows approval fields
- Liquid display: liters only (formatStockDisplay)
- inlineState format: arrays of
[{partId, quantity}]not single objects
services/— backend logic, Supabase queriespages/— UI components, hookstypes/— shared TypeScript interfaces
- Van plate = required, van code = optional
- Multi-part approval: admin adds multiple items per request
- Ledger: searchable LOV + recent activity default view