Fast food restaurant delivery operations - promotion stacking payout audit - walk every order back down the chain from list price through discounts, coupons, subsidies, and commission to actual payout, and find the batch of orders that lose money as they sell
You are a merchant-side operations auditor for a food delivery platform. I will give you this store's order settlement detail for the last [7] days (per order: list-price total, each promotion's discount amount, coupons, delivery-fee subsidy, commission, packaging fee, merchant payout), plus our current commission rate and coupon cost-share. Audit the promotion stacking structure and find the orders with abnormally low payout, along with the stacking paths that produced them.
Set the anchor first: the "revenue" on the dashboard home page is list-price revenue. Every order a merchant actually gets paid walks down this chain - list price -> discounts and threshold offers (merchant-funded) -> coupons (merchant share) -> delivery-fee subsidy (merchant share) -> commission -> packaging fee. The audit's subject is the number at the end of that chain.
Audit method (three fixed steps):
1. Per order, compute payout ratio = merchant payout / list price; sort the store; take the worst 10%
2. Cluster those orders by stacking path: how many merchant-funded layers one order hits at once (discounted item + threshold offer + coupon + subsidy); count orders per combination
3. For each layer of give-away, compute two numbers: its contribution at store-average, and its contribution within the worst 10% of orders - the two must always appear side by side; averaged alone, every layer looks small, because bad orders are a minority
Decision rules:
- If I give you our food cost rate of [X]%: orders whose payout ratio falls below (1 - food cost rate) are judged "each sale loses money" - output the order IDs
- Without a cost rate, judge only "abnormally low payout" - never assume a cost rate and run with it; cost structures differ by double digits between kitchens, and one wrong assumption flips the entire loss list
Output format:
- Chain table: each layer / store-average share of list price / worst-10% share - the layer with the biggest gap between the two is the stacking culprit
- Bad-order cluster table: stacking path / order count / average payout ratio / promotions involved
- Action list: layers ranked by appearance rate in bad orders, each with three treatments and their reasoning - remove it / raise the entry threshold (retune the spend tier, restrict to items) / make it mutually exclusive with another layer - describe only the rule change; do not forecast volume or ranking after the change
Constraints:
- Cite no specific platform's rule names or numbers - configurations differ; the rules that bind are the ones actually set in my back end
- No predictions of volume or ranking after removing a promotion - nobody knows, and a made-up answer misleads
- The average must always sit next to the worst 10%; reporting the average alone is forbidden
- If the order data is missing a layer, mark that layer "no data" - no estimating
- No pleasantries; start directly with the chain table
Why it is written this way
The number-one root of delivery losses is not selling too little - it is stacking. Item discounts, threshold offers, coupons, and subsidies are each configured on its own screen, each defensible on its own, and together they punch through the payout of a single order. The dashboard's list-price revenue covers the whole thing, so the first move is walking each order back down the chain: the audit subject shifts from "how much we sold today" to "how much this order actually paid". The chain is fixed at six layers because platforms name things differently while the structure is the same - anchoring the structure is what makes this usable across platforms.
"The average must sit next to the worst 10%" is this audit's most important rule. Under the average alone, every layer's contribution looks modest, because the damaged orders are few and get diluted. Pull the worst decile out and recompute each layer's contribution inside it, and the culprit surfaces. The reading instruction is written straight into the output: the layer with the biggest gap between the two views is the one recurring in bad orders.
Actions come as three treatments, not one answer: removal stops the bleeding fastest but costs volume; raising thresholds keeps traffic but complicates configuration; exclusivity is the finest instrument but needs testing. Whether today calls for traffic or for margin is the operator's call, not the model's - the model's job is to lay out each layer's appearance rate in bad orders. Forecasting the volume impact is banned because that is not analysis; it is invention.
The cost rate must come from the operator for the same reason: the "losing money" line compares payout against variable cost, and a from-scratch kitchen and a prepped-ingredients kitchen differ by double-digit points. Let the model assume one, and the entire loss list can point the wrong direction.
Variables
| Variable | Notes |
|---|---|
| Settlement detail export | 7 days, per order: list price, each deduction layer, payout - exportable from the merchant settlement page; a missing layer gets "no data" |
| Commission rate and cost shares | This store's commission rate and the merchant share of coupons and subsidies - the basis for judging each give-away layer |
| Food cost rate | This cuisine's ingredient cost as a share of an order - without it the audit judges "abnormally low" only, never "losing money" |