Write token
Leave blank in sim. When OPS_IMPORT_TOKEN is set, posts must send it as x-ops-token.
What is still real-only
Import client prices
Button: POST /ops/import-prices. CSV or JSON. Rows are marked source=import and survive the next sim seed. This app does not scrape OrderSpace.
Add a client
POST /ops/accounts. Blank net days means Immediate (0).
Vendor bill
POST /ops/vendor-bills. Blank net days means Immediate. POST /vendor-bills stays closed.
Intake an order
POST /ops/intake. House SKUs map to packer SKUs. Missing prices come from the client contract. Missing terms become Immediate, or the contract's net days when the client is already saved.
Clients
| Name | Kind | Terms | Source | Prices |
|---|
Payables
| Vendor | Open cents | Due |
|---|
Margins
GET /ops/margins reads view_profit_margin_analysis. Drop-ship adjusted green is the green lot cost. Roast shrink is not applied. The $3/lb Colombia green figure is a simulated placeholder until a quote arrives. This desk does not write that view. POST /orders stays closed.
| SKU | Green $/lb | Adjusted green | Shrink % | COGS | Wholesale | Net / lb | Margin % |
|---|
Roast log
Parked. roast_runs and production_log_entries stay in the database and are not part of packing or shipping. GET /ops/roast-log returns a parked payload unless ROASTING_ENABLED is on.
Batches
Parked. production_batches stays. Batch tracking is not on the order path. GET /ops/batches returns a parked payload unless roasting is on.
Roaster temperature
Parked. There is no temperature table. GET /ops/roaster-temperature returns a parked payload unless roasting is on.
Orders
| Account | Status | Fulfillment | Due |
|---|