Safety Gates
Five limits decide whether a run may order. A run that fails a gate does not order — depending on the gate it stops or waits for approval. The reason is always recorded on the run.
Every gate is switched off with 0.
Overview
| Gate | Field | Result on breach | Effect |
|---|---|---|---|
| Minimum margin | Minimum Margin % | Margin Too Low | stops |
| Offer age | Max. Offer Age (Hours) | Offer Too Old | stops |
| Order value | Max. Order Value (LCY) | Pending Approval | waits |
| Price deviation | Max. Price Deviation % | Price Deviation | waits |
| Daily limit | Max. Value per Vendor and Day (LCY) | Limit Exceeded | waits |
Stops means: the run ends, no purchase order is created. Waits means: the run lands in the approval worklist and can be released by hand.
Minimum margin
The margin an order must leave after the supplier's total landed cost.
Margin % = (Sales Amount − Landed Cost) ÷ Sales Amount × 100
The calculation uses the landed cost, not the goods value: freight and insurance are part of the margin. A vendor offering cheaper goods and charging more freight does not win here.
Below the limit the run stops with Margin Too Low instead of ordering at a loss.
The first gate you should set
The minimum margin catches the most common data error: a supplier price with a misplaced decimal. A cost of 900 against a sales value of 100 gives a margin of −800 % and is rejected before anyone looks.
Offer age
How old a supplier's offer data may be for an automatic order. Measured against the oldest offer used here, not the average.
Set it above the longest import interval
If your supplier imports twice a day, 24 hours is plenty. If it imports once a week and you set 24 hours, every run stops with Offer Too Old. The value has to exceed the longest interval between two imports.
If the timestamp is missing entirely, the gate does not apply — a blank date is not read as infinitely old.
Order value
The purchase value above which a single order needs approval instead of going out automatically.
This gate does not kill the run, it parks it: a large order is not a wrong order, it is one somebody should look at.
Price deviation
How far the supplier price may move between the offer Trading calculated with and the price at transmission time.
This gate does not apply at decision time but immediately before sending. It catches the case that would otherwise go unnoticed: an order sits in the approval worklist for two days, the supplier raises the price in the meantime, and the order goes out at the old one.
The run then ends with Price Deviation and names both prices.
Daily limit per vendor
How much Trading may order from one vendor in one day before further orders need approval.
The backstop
This is the only gate that helps against a runaway loop. Every other gate checks a single order; this one checks the total. An import error that makes a hundred orders look plausible passes every other gate — but not this one.
Set it even if you trust the rest. A value matching your usual daily volume with that supplier, plus some headroom, costs you nothing in normal operation.
Counted is the landed-cost value of every order transmitted to this vendor today.
Order of evaluation
The gates are checked in a fixed order, and the first breach is reported:
- Minimum margin
- Offer age
- Order value
- Daily limit per vendor
Margin comes first because "not worth ordering" is a harder no than "large enough to check": approving it would still leave a bad deal.
Price deviation sits outside this sequence — it is checked immediately before transmission.
Where you see the breaches
- "Blocked Today" cue — how many runs a gate stopped today; click opens the list
- Approval worklist — what was parked, with the reason next to it
- Sourcing log — every run with Result Details: which gate, and by how much