Acme multi-store
POS sell, receiving/putaway, warehouse→store transfer, ecommerce reserve, returns, and franchise
catalog publish — contested stock always goes through server fn + CAS.
App sign-in
Uses project app-auth (Console → Authentication). Soft email/SMS without provider credentials.
Or set VITE_CONFLUX_API_KEY for service-key mode.
Sell (POS)
Offline sells queue within risk budget. Never invents ATP.
Transfer
Requires connectivity — debit source / credit destination with CAS.
Receive / putaway
Goods receipt into a location (creates stock row if needed). Online only.
Purchase order
Create a supplier PO then receive into a location (CAS). Online only. Over-receipt rejected.
No open PO in this session.
Cycle count
Set on-hand to the counted quantity (CAS). Cannot go below reserved. Online only.
Franchise catalog publish
Upsert SKUs for this tenant and ensure zero balances at selected locations. Does not cross tenant walls.
Reserve / return
Ecommerce hold + full sale return (restock). Online only.
Catalog (local ATP cache)
Server search uses model searchable fields (?q= /{" "}
client.search.query). Empty query shows the local cache.
| SKU | Name | Local ATP |
|---|
Ops alerts (cron dogfood)
Same handlers as project cron: scanLowStock (daily) and
expireReservations (every 5m). Run manually for ops visibility.
No scan yet.
Locations
| Code | Name | Kind |
|---|