Reworks the demo seed and SPA to match the reference customer's
work-order management process (EBC-PP-001 from raw/ docs).
Demo seed (DemoSeedRunner):
- 7 printing-specific items: paper stock, 4-color ink, CTP plates,
lamination film, business cards, brochures, posters
- 4 partners: 2 customers (Wucai Advertising, Globe Marketing),
2 suppliers (Huazhong Paper, InkPro Industries)
- 2 warehouses with opening stock for all items
- Pre-seeded WO-PRINT-0001 with full BOM (3 inputs: paper +
ink + CTP plates from WH-RAW) and 3-step routing (CTP
plate-making @ CTP-ROOM-01 -> offset printing @ PRESS-A ->
post-press finishing @ BIND-01) matching EBC-PP-001 steps
C-010/C-040
- 2 DRAFT sales orders: SO-2026-0001 (100x business cards +
500x brochures, $1950), SO-2026-0002 (200x posters, $760)
- 1 DRAFT purchase order: PO-2026-0001 (10000x paper + 50kg
ink, $2550) from Huazhong Paper
SPA additions:
- New CreateSalesOrderPage with customer dropdown, item
selector, dynamic line add/remove, quantity + price inputs.
Navigates to the detail page on creation.
- "+ New Order" button on the SalesOrdersPage header
- Dashboard "Try the demo" section rewritten to walk the
EBC-PP-001 flow: create SO -> confirm (auto-spawns WOs) ->
walk WO routing -> complete (material issue + production
receipt) -> ship SO (stock debit + AR settle)
- salesOrders.create() added to the typed API client
The key demo beat: confirming SO-2026-0001 auto-spawns
WO-FROM-SO-2026-0001-L1 and -L2 via SalesOrderConfirmedSubscriber
(EBC-PP-001 step B-010). The pre-seeded WO-PRINT-0001 shows
the full BOM + routing story separately. Together they
demonstrate that the framework expresses the customer's
production workflow through configuration, not code.
Smoke verified on fresh Postgres: all 7 items seeded, WO with
3 BOM + 3 ops created, SO confirm spawns 2 WOs with source
traceability, SPA /sales-orders/new renders and creates orders.