Seventeen views on one business, from the sales of the week down to the operating result, the stock behind them and the plan in front of them. Every figure comes from the same weekly data set, and every filter recomputes the whole page, so no two views can disagree.
Sales by channel, the decision brief, the scorecard by channel, turnover against budget by country and channel, the weekly series and its plan-to-actual waterfall, the commercial equation, the operations bridge by mechanic, store clusters, month and year to date, the digital layer, store labour productivity, the country map.
The turnover read control in the filter bar changes the tax basis of the turnover, the average basket and the average price on this tab only — the till number a trading meeting uses, or the net number finance declares. Nothing is recomputed: transactions, conversion, items per basket, shares and growth rates are identical on both bases, and Financials, S&OP and every cost figure stay net of VAT whatever is selected, because a P&L is declared net and five markets taxed between 0% and 15% cannot be compared any other way.
Every figure in this brief is computed, not written. Change the data in the Data tab and the brief changes with it.
Turnover and the average basket are both net of VAT, so basket times transactions returns turnover on this table and on every other one; the turnover read control shows the tax-inclusive equivalent of the same three figures on this tab alone and recomputes nothing behind it. Store conversion is transactions divided by people entering the store, counted at the door — not mall passers-by. On that basis the specialty-retail band is roughly 15% to 35%, and it moves with the format: a flagship in a mall carries browsers and converts near the bottom of the band, a small local store is visited to buy something specific and converts near the top. The cluster table on S&OP & Stock shows the spread behind this group average. One row per channel, one column per KPI, so a channel reads across and a KPI reads down. The demand base and the conversion column carry different units by channel — footfall and buyers per visitor in store, sessions and orders per session online, active accounts and order rate in wholesale — because that is what those channels actually count. The levels are therefore not comparable across rows; the movements are, which is what the vs LY and vs budget columns are for.
Country and sales channel come from the filter bar at the top of the tab; cluster and category are set here. Store conversion is deliberately not scaled by the category filter — the same people walk through the door whatever category is being read — while the basket is, because the goods differ. A country total is an average of four formats that do not behave alike, and the category filter is where that shows: the same market buys a different assortment depending on which format it walks into.
Definitions: Online sales = digital demand across own sites, app and marketplace (GMV basis) — the line plan and targets are set on; Contribution is what a served order leaves: gross margin, which is already after the markdown granted and the goods that came back, less the variable cost of serving it. CR = orders per session. Store-fulfilled share = orders a shop floor picks — Click & Collect and ship-from-store — over online orders; the endless aisle is excluded because it ships from the warehouse and is only handed over in store. It is a fulfilment measure and not the Omnichannel channel, which is Click & Collect alone. Discount penetration = share of orders carrying a discount; suppliers fund most of the face value — only the retailer-funded cost enters Contribution. CAC = digital media per new customer acquired through media; media over every new customer, whatever brought them, is a different figure and is named cost per new customer, all channels, wherever it appears. All data synthetic.
Payroll is the largest line in a store P&L and the only one that can be re-deployed inside a week, so it is read per hour rather than per head. Selling capacity is the share of paid hours actually spent in front of a customer, divided by the average time a transaction takes; utilisation is the transactions actually taken against that capacity. A store running under capacity does not need more people, it needs its hours moved; a store running at capacity is turning customers away and the conversion figure will never show it, because a customer who leaves without being served was still counted at the door.
Stylised vector map, not to scale. Colour = growth vs the “Compare vs” reference; click again on a country to reset.
Ordered-to-invoiced erosion and the VAT bridge, gross margin by category, its bridge and margin by fulfilment hub, channel economics and cost to serve, banner context, the operating result weekly and its waterfall, working capital, the full-year landing and the P&L down to operating result, retail and web side by side.
Backlog P−1 adds last week's ordered-not-yet-shipped volume invoiced this week; Backlog P removes this week's. Over a quarter the two roughly cancel; a widening gap between them is the early warning on warehouse throughput.
The commercial basket is tax-inclusive, the declared margin is net of VAT. The rate is not constant across the region — zero in Qatar and Kuwait, 15% in Saudi Arabia — so a country ranking built on tax-inclusive turnover can be in the wrong order, not merely inflated. Every sales, margin, contribution and open-to-buy figure on this dashboard is net of VAT. Input VAT on purchases is recoverable, so the intake side of the OTB is net of it as well.
Rates at full ticket price by category, the budget-to-actual bridge in four families, and margin by fulfilment hub.
Rates are stated at full ticket price, before any markdown is granted off it — the basis a ticket price is derived from, which is why the cost layers, the Markdown Engine and the bundle panel all read these rates and not the gross margin of the P&L. The bridge beside it opens and closes on the P&L's gross margin instead, which is after the markdown, after the goods that came back and after the supplier funding credited, with the marketplace stated on its commission. One movement vs budget on this tab: the two movement columns of the table are recentred on the movement the bridge closes on, so the level here is a ticket rate and the movement is the statement's. The two answer different questions and the gap between them is the markdown itself. The spread between categories is the stated parameter; the level is not: the rates are renormalised so the sales-weighted blend is the gross margin of the selection, and the two movement columns are recentred so their weighted averages are the movements the bridge shows. The category-mix step of that bridge is the shift of sales weight toward, or away from, the high-margin categories.
Same discipline as the monthly margin reviews this page imitates: mix (market and category), rate (discount rate, supplier margins by range), cost and supplier (what the goods cost, split between the current intake layer and the older layers actually consumed), technical (NIP & expiries, accounting timing). Every step is signed, grouped and sums exactly to the GM movement — nothing is left in an unexplained bucket, and the opening and closing bars are the budget and actual gross margin of the selection above.
Margin is recognised where the order is invoiced, which is the hub that shipped it — so a hub's margin rate is really a statement about the mix of countries, categories and promotions it serves. Read it next to the warehouse orchestration table on S&OP: the node with the worst capacity and split-order rate is also the one carrying the lowest margin, and neither fact causes the other, they share a cause.
The arbitrage that decides where the omnichannel investment goes. Variable cost to serve, P&L basis: fulfilment and packaging, the last mile with its cash-on-delivery and failed-delivery share, reverse logistics, payment fees and customer care — the variable block of the statement, and not the delivery leg alone, which is what the carrier table on Logistics prints. The figure is stated in the read below. Contribution is after that cost, after returns and after payment fees. A route that is cheaper to serve but slower is not automatically better — the promise column is what the customer buys.
Commercial margin is stated before and after the discount granted, with promo penetration alongside, because depth and penetration move independently: the same margin rate can be reached by discounting a few lines heavily or many lines lightly, and the two need different corrections. Share of group margin against share of group sales says whether a banner is accretive or dilutive to the group margin rate. Every other view on this dashboard is calibrated on the fashion, beauty and home banner; the reconciliation identities, chained bridges, funding classes and cover bands transfer to every banner, the parameters are re-calibrated per banner.
Three legs, and two bases, because that is what the three balances are: a book of stock and a supplier invoice are at what the goods cost, a receivable is at what the customer pays. The inventory leg is the inventory scorecard's own figure — average book at cost over the cost-of-goods cell of the P&L annualised — read here and not restated, and the reconciliation page tests the two against each other. Every weight below is derived: the payment mix from the payment-methods table, the channel mix from the net sales of the statement, the country and category mix of the cost of goods from the category matrix. Every duration is announced in the working-capital inputs, because this page states shares, failure rates, fees and baskets and never a number of days — and the two extractions that would replace them with measured figures are on the day-one list of Data & Method. Working capital is a property of the whole book: a country filter selects which row of it to read, it does not rescale it.
Every line of the register is a signal this dashboard already carries, and its amount is read from the function that states it — the rule of the decision board, the affinity exposure, the media payback floors, the transfer pool. The probability is the only declared figure, one declared per line in the inputs, because nothing in this model records how often a signal of this kind turned into money. The two chains are not interchangeable: a clearance route gives up trading margin and moves no turnover, a transfer moves turnover and not margin, and a lost sale moves both — the same discipline the S&OP reconciliation review prints two bridges for. The Latest Estimate is called and never modified: it is the same object the statement above prints.
Identical line labels on both sides, and n/a where a line genuinely does not exist for that channel — a store has no last mile, a website has no shop floor to staff. The point of reading them together is the shape, not the level: the two channels reach a similar result through cost structures that have almost nothing in common, which is why a single group cost ratio is meaningless and why a channel that looks expensive per order can be the more profitable of the two.
Reconciliation: "Unit contribution before offers & media" is the same figure the Sales Overview steers with; this table expands it into its cost lines. Each cost line is stated per channel and blended on the selected mix, which is why a line disappears when the channel that carries it is filtered out.
Best and worst cells vs LY, sales by route, country, category and cluster, top and opportunity brands, then offer by brand, promoted stock velocity, price position on four shelves, price architecture, market share by country, bundles, brand power and basket quality.
Turnover reads on the 20 country × channel cells including stores; traffic, conversion and basket read at country level on the digital layer, where session-level data exists. The bar on each box is the share of cells growing vs LY.
Every route of the business, each sitting under the channel where the sale is created: the shop floor and endless aisle under retail, web, app and ship-from-store under web & app, Click & Collect on its own. The columns total the country and the corner totals the group. Splits inside the digital layer are modelled from each country's channel mix (app and marketplace maturity differ by market; endless aisle counts in-store digital orders); v2 replaces them with tagged order data. The country and category filters at the top of the tab apply here too.
Category mixes are modelled per market and reconcile to the country and group totals on the whole business, stores included. The country and category filters at the top of the tab apply here too — selecting a category leaves its own row as the total.
Clusters on the rows, countries in the columns, so the question becomes "which format works where" rather than "which country is up". Click a cluster row to open its categories in the same grid — the sub-rows sum back to the cluster line, and the cluster lines sum back to the group, so a drill-down never invents volume. Every cell is store sales for the latest week with growth against the same week last year; the country and category filters at the top of the tab apply.
The commercial reading of the range: which stock is on offer and how fast it moves, what each brand earns and costs, the quality of the basket it produces, and where the price sits against the market. The markdown engine decides the depth; this section decides where the range is working and where it is not.
Dynamic discount rate is the discount actually granted on the brand's sales this week, not the shelf mechanic. Cash margin index is margin in dirhams per unit of sales relative to the group — the number that decides which brand a point of extra promotional weight should go to. Surge brands are those beating budget on falling discount intensity: they earn the space, they do not buy it.
Three different speeds, deliberately separated. Promo stock speed = weekly units sold from promoted stock ÷ promoted stock — how fast the discounted assortment actually moves. Promo contribution to category speed = the same promoted outbound divided by the WHOLE category stock, promoted and not — what the promotion is worth to the category's overall rotation, which is the number buying and planning care about. The two never say the same thing: a deep promo on a small slice can look fast and move the category barely at all. The blend of promoted and non-promoted speed reconciles exactly to the category speed on the S&OP tab.
Our index against each shelf, on the lines that shelf can actually be compared on. The four coverages overlap: the matched share of a category is the part of its range matched by at least one of them, never the sum of the four, and the reconciliation page holds that as three bounds rather than as an equality. The four indices are recentred on the lines matched, so their matched-weighted mean is the category index in the table above — they say where the category sits against each shelf, not how high it sits.
Index 100 = market median shelf price on comparable items. Own-label sits far below market by design — a markdown point there costs less margin per unit of demand than the same point on selective brands, which is why the engine's funding classes matter as much as its depths.
Panel-based market share against a price index on comparable items. Read the two columns together: share gained while priced above the market is pricing power; share lost while priced below it is an assortment or availability problem that no further discount will fix.
A bundle is priced below the sum of its parts, and the first column of any bundle report says it sells. The column that decides is the substitution rate: how many of those buyers would have bought the hero on its own, at full price, if the bundle had not been there. Those buyers cost margin rather than making it.
A "perfect" basket is not the biggest one: it is the one that carries full-price value, breadth across categories and newness. Tracking the share of transactions meeting each condition tells you whether growth is being bought or earned, one criterion at a time.
Revenue, traffic, cost and ROAS by source, the dynamic budget and ROAS maturation, payback floors, share of voice, owned channels, client value and cohorts, loyalty economics, the path to Gold and what rewards cost, CRM programmes, the cardholder bridge, web recruitment.
CAC is media spend per new customer media brought — an announced 62% of the week’s recruits, because the model carries new customers by commercial mechanic and never by media source. Media over every new customer, whatever brought them, is stated beside it under its own name. NCAC isolates the cost of a customer genuinely new to the brand; RCAC is what it costs to bring a lapsed one back — they are different budgets solving different problems and blending them hides which one is working. All four are stated on the same numerator, the week’s whole media spend, and the card prints it: what changes between them is only who is counted in the denominator. NCAC cannot read below CAC: a customer new to the brand is a subset of the customers media brought, so a cost per rarer customer must be higher. Media revenue share is the share of online sales the platforms claim; the contribution line on Financials charges the full spend against total sales instead, which is the harsher test.
This is the table that has to be read before the two below it. Paid media and owned channels each get their own deep dive further down, but neither can be judged without knowing what share of the business arrives without either — a paid ROAS of 6 means nothing if the same customer would have arrived through organic search or walked into a store. The incremental view applies the holdout results to each source and is the one to take into a budget discussion; last-touch is the one the platforms report.
A dirham of media pays for itself when it covers what is left of the order after it has been served, not when it covers the gross margin: delivery, payment, returns and customer care come out of the same margin and on a digital order they are not a rounding error. And a source that recruits is not judged on the order it brings, because a new customer comes back. Two floors, weighted by how much of what each source brings is genuinely new.
The table above is this week. This one is the year, and it is built before the year starts. Two layers: share of voice protection pre-books the weeks where the category was lost or seriously challenged last year, and opportunity windows pre-books the periods where extra spend historically paid — the last days of a month, the seasonal peaks, the late-conversion window. Both are agreed with finance in advance, so a trading meeting releases a tranche instead of negotiating a budget. Anything beyond the two layers stays available in-year when the trigger conditions are met.
The trigger column is the discipline: a window is not released because the month is behind, it is released because the condition written down twelve months earlier is true. Windows whose condition is not met stay unspent, and that is the point — the value of the framework is as much in the tranches it stops as in the ones it releases.
Three tranches per lever. Base is the committed always-on budget. Dynamic is released day by day only while week-to-date ROAS holds above the plan threshold — it buys volume on the days the auction is cheap and stops on the days it is not. Brand equity is defended share of voice, judged on presence rather than on last-click return, which is why its ROAS is structurally the lowest and why mixing it into the blended number makes the whole budget look worse than it is.
Owned channels have almost no media cost, so ROAS on them is a large and misleading number: the real cost is the file, the platform, the creative and the permission to send. Cost per contactable customer is the column that makes them comparable with paid, and unsubscribes are the price of over-sending — a channel that beats budget on revenue while burning the file is spending an asset that does not appear in this week's P&L.
The customer-level mirror of the commercial equation on Sales Overview: the same multiplication, one level down. Turnover per client = frequency × basket, and basket = items × price — so a tier can grow on any of the three and the action is completely different in each case.
Incremental sales are measured against a holdout on every programme, so the "sales" column is what would not have happened otherwise — not everything the recipients bought. Cost includes the offer funded by us plus the send cost; ROI is incremental contribution over that cost.
Store journey by country and cluster, digital journey and site funnel, app and web funnels step by step, traffic sources and devices, the sales equation by device, cross-channel customers, attach at Click & Collect pickup, top products, web and retail by country.
Read down this row before anything on the site: eighty-three per cent of the business happens here, and every digital number further down is a fraction of the same customer. Footfall is people entering a store counted at the door, not mall passers-by.
Bars are strictly proportional to sessions — no visual distortion. The thin bar under each step is the comparison period at the same scale, so a step that looks small is judged on whether it is normally that small. The right column carries the number that actually decides: the step-to-step pass rate and its movement, because a 3.0% → 2.3% drop only means something next to the 3.0% → 2.4% it used to be.
The site funnel above can be filtered by device, but filtering does not surface what is specific to an app: the install, the account creation and the first session are steps a website simply does not have, and they are where an app loses most of the people it paid to acquire. Steps that exist on only one side are marked; the shared steps are directly comparable.
Three horizons on purpose: the ISO week is noisy, month to date is the trading conversation, year to date is the structural one. A device losing ground on all three is a platform decision; one losing only on the week is a calendar effect.
The store funnel does not have sessions and add-to-cart, it has footfall, advisor engagement and fitting or demo. The steps are different; the diagnosis is the same — find the step that loses ground against last year. Advisor engagement is the store's equivalent of the recommendation surface online, and it is the single biggest driver of the basket gap between the two channels.
The second sale a collection triggers on the shop floor. The attach rate and the size of that second basket are stated per store cluster and weighted here by the clusters each country operates; the basket is applied to the average value of the Click & Collect order itself. This sale is created in store, so it is booked in Retail and counted once — it is never added to the omnichannel line it comes from.
Every line here is a customer who used both channels in the same journey. The omnichannel customer is not a third segment: it is the store customer and the site customer being the same person, and the value of that overlap is what pays for the endless aisle, the ship-from-store and the click and collect operation on Logistics.
A flagship carries browsers, so it converts lowest and sells the largest basket; a local store is visited to buy a known item, so it converts highest and sells the smallest. Averaging the two produces a store that does not exist and a conversion target no manager can hit.
Store conversion counts buyers per store visitor (footfall), online CR counts orders per session — the levels are not comparable, the GAPS between countries are. Digitally-influenced retail = store sales where the journey started online (viewed availability, C&C research, wishlist).
Entry path to the product page, the homepage block by block and read as a page, onsite search with its zero-result and top queries, recommendation surfaces, the commercial offer by axis, app push and in-app cards, ratings and reviews, product affinity, site components.
Four questions in order: how the customer finds the product (search and navigation), what is put in front of them (recommendation surfaces, editorial blocks, the offer by axis), what brings them back (push and in-app cards), and what reassures them before they buy (reviews, advisors). Every figure is a share of the same weekly digital business used elsewhere on the dashboard.
Every cell is a cell of the table above, drawn in the order of the page rather than in the order of a table: the colour scale is per reading and spans that reading's own cells, both ends of it are printed, and the reconciliation page holds all 72 cells against the row they were read from. The blocks anchored on another panel — the search bar and the recommendation carousel — are drawn like the other seven, because the question here is what the page does and not where the model got it.
Conversion of searchers and non-searchers is derived from the site conversion of the surface and the observed ratio between the two populations, so the two lines always reconcile to the surface conversion shown in Customer Journey. Search-attributed revenue is the revenue of sessions that used search at least once, not a last-click attribution to the query.
Attributed revenue is the revenue of orders containing a product clicked from the surface. Tested uplift is the difference measured against a held-out control group, which is the only figure that can be added to a plan: attribution counts sales the customer might have made anyway, the control group does not.
One row per axis, one column per week, each cell carrying the mechanic in place that week. The right-hand block reads the current week: the share of the axis sold on a mechanic, its movement against last year, sales, the discount rate and the margin left after it. An axis on a mechanic every week is not on promotion, it is on a new price.
Coverage is the share of active references carrying at least one review. Collection rate is reviews received per post-purchase solicitation sent. Syndicated share is the part of the review base received from brand partners rather than collected by us, which costs nothing to obtain and carries no proof of purchase.
What is derived and what is an input, in one sentence each. Derived: the categories and the category pairs a transaction carries, the probability a basket contains each category, the independence baseline and the scale factor that makes a lift readable, the confidence, the attach value, the revenue of every pair and the availability of every pair. Input: the fifteen sub-family pairs and their support, announced and annotated line by line — because this model carries how wide a basket is and never which two categories are in it, and the cross-channel table on Customer Journey crosses store and site customers, not categories. Labels are generic by sub-family and no brand is named, the same rule the query and top-product tables follow. The pairs are held to three identities on the reconciliation page and the panel states the one they are not held to.
Seen = share of sessions exposed to the component; CTR = clicks per exposure; CVR = conversion of sessions that engaged with it; sales share = last-touch attribution inside the session. Central vs local mirrors the homepage governance model — most blocks are centrally driven with defined local slots.
The fulfilment promise by country and its root-cause triage, Click & Collect cancelled before pickup and its intraday operations, carrier mix, contact rate by carrier, warehouse operations, store logistics by cluster, returns by category, the fulfilment mix, the availability lift from unified inventory.
The operational base of the report, read before anything commercial: click-to-delivery is what the customer experiences, promise respected is whether we did what we said, and the warehouse and carrier lines say which of the two is responsible when we did not. Forecast deviation (WAPE) belongs here because a warehouse cannot staff to a plan it does not believe.
Ranked from the signals: the fastest-moving signal comes first. H3 is explicitly marked not derivable from this data.
Cost per order here is the delivery leg only — the carrier's charge for moving the parcel. Picking, packing and the store fee sit in the variable cost to serve of the P&L on Financials, which states the whole of it, so the two labels describe two different perimeters and never the same figure. The AOV column matters because carriers do not carry the same baskets: the express lane takes the high-value orders and the post takes the light ones, so a cheap cost per order on a cheap basket is not the saving it looks like. Cost as a share of order value is the column that makes them comparable. Cash-on-delivery share is shown per carrier because COD is where the delivery failure, the cash handling and the refusal risk all concentrate.
The allocation view on S&OP asks which channel each node is holding stock for. This one asks whether the node can physically move it: storage density is how much of the racking is actually used, throughput is units in and out against the capacity of the shift pattern, and cost per movement is what the variable labour and handling contract charges for it. A node can be perfectly allocated and still be the reason the delivery promise breaks.
A flagship converts a collection into a second purchase twice as often as a local store, and on a bigger basket. That is the argument that pays for the preparation time above it, and it is booked in Retail rather than in Omnichannel.
The intraday curve is an operations decision, not a reporting curiosity: orders peak in the evening, preparation capacity is staffed to the afternoon, and collection peaks an hour after the order peak — which is exactly where the two-hour promise breaks. The additional-sale column is the argument that pays for the whole service: a customer collecting in store buys something else roughly a third of the time in flagships.
Three omni routes that are constantly confused and cost completely different things. Click & Collect is picked from the store's own stock and never touches a carrier. Endless aisle — ordered at the counter for a line the store does not carry — is shipped from the warehouse inside the normal store replenishment flow: no carrier cost at all, because the parcel travels on a truck that was going to the store anyway, but it does add goods-in handling, a holding area and a customer hand-off that the store has to staff. It is named the same here as everywhere else on the page, because it is one flow. Ship from store is the expensive one: the store picks, packs and hands to a carrier, so it carries both the labour and the last mile. Replenishment completion is the share of the allocated replenishment actually put on the shelf in the week it arrived — the number that decides whether the store fill rate below is a buying problem or an execution one.
Category return rates rescale to the group return rate on the scorecard. Reasons reuse the ordered→invoiced classification on the Financials tab, extended to post-delivery returns; refund lead time is the days from carrier scan-in to money back.
The argument that pays for routing an order to a shop floor. A line is servable if the stock exists anywhere the order can be routed to, so a network holding one book serves demand that a warehouse-only network would have had to turn away — and the value of that is not the cost of the pick, it is the sale that did not disappear. The two legs run in opposite directions and both are printed. Ship from store is an online order picked on a shop floor: store stock serving a web line. Endless aisle is a store order shipped from the warehouse: warehouse stock serving a counter line. They are the same decision read from its two ends. The turnover cell is the route book’s own — ship-from-store and endless-aisle orders at the order value the route table already states — and the reconciliation page tests it against the route sales of the week rather than restating them here.
Cost to serve per order and its build-up by country, the authorisation funnel, payment methods by country, other costs below the margin line, the contact centre by channel with its deflection potential, contacts in the seven days after an order.
Every figure is a cost per order stated against net-of-VAT order value, with one correction: the payment fee is charged by the scheme on the amount actually collected, tax included, so it is grossed up by each market’s VAT rate before being expressed here — which is why it costs more in Saudi Arabia than the headline rate suggests. Every line here sits below the gross margin and above the operating result, and none of them is decided by the commercial team: they are the invoice for the payment mix, the carrier mix and the contact volume the business generates. Read against the average basket, because a cost per order only means something next to the order it serves.
Delivery and pick & pack tie to the carrier and warehouse views on Logistics; payment fees and cash handling come from the mix below; contact centre is the weekly contact volume costed at the channel rates further down. The last column is the one that decides where to act — a market can be expensive per order and still cheap per dirham of sales.
Deflection potential is the share of that channel’s contacts whose reason has a self-serve answer today (tracking, return label, refund status) — it is a reachable number, not a theoretical one. Bot contacts are cheap per contact but resolve worst, so a bot that fails simply re-books the same contact into voice at fifteen times the cost.
NPS by country and voice of customer, the operational panel each detractor theme is owned by, resolution outcome by channel including the bot lane, resolution time against satisfaction.
Each theme is mapped to the tab that owns its fix — satisfaction is an outcome, the levers live elsewhere.
The cost of these contacts sits on the Payment, Service & Costs tab; what is measured here is what the customer is left with afterwards. The repurchase column is the reason the service line is not a cost line: a contact resolved at the first touch leaves the customer buying again at close to the never-contacted rate, and one closed unresolved does not.
The merchandise book as it trades: out-of-stock lines, the category control table, inventory policy and forward cover, planned productivity, stock flow and stock speed, the season mix, the store network, the warehouse and the top stores. Then markdown exposure and write-off, cost layers, the provision ledger and returns. The buy that put the book there, the markdown envelope beside it and the inventory control scorecard are on Merchandise Planning.
The book here is the whole merchandise book, shop floor and warehouse together, and the cover bands are network bands. Stock identity, applied weekly per category: closing = opening + inbound + returns to stock − outbound gross. Forward cover = closing stock ÷ trailing 4-week outbound. Stock speed = outbound ÷ opening stock. Outbound gross is every unit the group sells in the week, across the five channels — orders times items per basket on each of them — which is the same figure the warehouse ships and the same one the Logistics tab reads, so the two tabs cannot disagree. The warehouse is a node inside this book, not a second one: it holds what the shop floor does not, and its own cover is on the network panel below.
Lost sales are estimated as pageviews while out of stock × product-page conversion × price — the demand was measured, the stock was not there. The list feeds the expedite queue on inbound and the substitution rules in site merchandising.
The Depreciation column is the provision ledger — the ledger by category, cause and location, the same cells the provision-ledger panel, the cost layers, the old-stock table and the net charge on the P&L read — and it names the cause on each row, which is why Beauty appears under expiry and not under age. It is not recomputed here. Opening stock and inbound are printed next to speed and sell-through because both ratios are defined on the opening book: speed ÷ sell-through − 1 is inbound ÷ opening, and a reader with only the closing column cannot rebuild it. Actions are rule-based from the numbers on the row.
Cover is not one number for the group. Each market carries its own lead time, demand variability and service target; the target below is computed from them, the gap is what planning acts on.
One line per category. The vertical axis is weeks of forward cover — closing stock divided by the average outbound of the last four weeks, so it reads as "at the current rate of sale, this category lasts N more weeks". The solid part is history, the dashed part applies the committed PO book to the demand plan. The shaded horizontal band is the target range. The question it answers is not how much stock there is but when a category runs out or drowns, and because intake has a lead time, a line heading for the floor six weeks out has to be acted on today, not when it gets there.
Projection chains the same stock identity forward: outbound follows each category's demand plan including the seasonal peak, inbound follows the current PO book. The "recommended intake" column is the intake level that lands cover in the middle of the target band by W+6 — the number the next S&OP cycle has to sign.
This is the table the S&OP meeting actually runs on. Actual weeks are computed from the stock identity; forward weeks apply the committed intake plan to the demand plan, including the sales peak in W36–W37, so a problem that only appears in six weeks is visible today. Rows flag themselves: cover out of band, a stock-out risk, or an intake pulse landing on top of an already-full category.
The right-hand line is stock speed, not closing stock: the share of opening stock that leaves each week. A value line rises whenever intake lands and says nothing about whether the book is working; a speed line answers the only question the meeting has, which is whether the stock currently owned is moving faster or slower than the same week last year. Bars are units, the line is a percentage, and the shaded block on the right is the committed plan rather than history.
Sell-through and closing stock answer where the season ends. Stock speed answers what is happening now: the share of opening stock that leaves in the window selected in the Horizon filter. A category can close the season on healthy cover and still be selling half its opening stock in a single week, which means the best-selling sizes and shades are already gone even though the total looks fine.
One point per category. Horizontal is weeks of cover, vertical is the share of opening stock sold this week. The shaded column is the target cover band. The faint point is where the category sat last year and the line is the move since. Each quadrant carries one decision, which is the whole reason for plotting the two together: a category can be fast and still be a problem if it is short, and slow is only a problem when it is also long.
Two stock books share one warehouse and they are on opposite trajectories. The current season is being sold down and its residual is what the Markdown Engine has to clear; the incoming season is being received and has to reach the shop floor while it is still full price. A single stock total nets the two and hides the moment they cross, which is the week the markdown calendar and the newness push have to be set against each other.
The same stock identity applied to the physical network: stores hold the majority of the units and are the reservoir the omnichannel promise draws on. Ship-from-store and Click & Collect only work if store cover holds — a store that is short cannot serve a digital order, and a store that is long is where the markdown starts. Inter-store transfers are the cheapest correction available before any markdown.
One warehouse is a simplification no multi-country retailer can afford. Capacity used is the constraint that turns a commercial plan into a CAPEX decision; split-order rate is what it costs the customer when a basket has to be served from two nodes; transfers are the correction that keeps the promise alive when allocation was wrong. The allocation columns carry no omnichannel ring-fence: Click & Collect is picked on a shop floor out of stock this building already replenished, so reserving warehouse units for it reserved the same units twice and priced a two-hour promise the building never serves. The lanes are the ones units actually leave on.
A cluster average still hides the spread inside it. Ranked on sales, with the operating metrics that decide whether the ranking is earned: a store high on sales and low on sell-through is carrying stock that belongs somewhere else, and it is the first candidate for a transfer rather than a markdown.
The excess is measured per category: the stock, in units and in AED at cost, sitting above the target cover the inventory policy sets for the category. It is the same object the aged-stock rule on the action board prices and the same block the Markdown Engine runs on, so a planner never reads two sizes for one problem. The provision carried on it is the category’s own rate on that excess, bounded by the ledger. “Flagged clear now” is the subset past the materiality line, shown as a subset. The depth is the Markdown Engine’s own optimum on the same block measured from the depth it is already running at, and the last column is the provision that clearance actually releases — the flagged block’s provision times the expected sell-through of the ladder, which is deliberately not equal to the column beside it.
A return is two events on two clocks. The sale is reversed the moment the customer sends the parcel back; the unit only becomes sellable again when it has been received, inspected and put away. The lag curve below is the share of a category's returns that is back in stock in W+1, W+2, and W+3 or later, stretched by the market's own reverse-logistics speed. Units still in transit are stock the business owns, pays to carry and cannot sell, and they are invisible to any model that credits a return in the week it was created.
The buy, and what it costs on the margin side. Open-to-buy states the season budget at cost, what is committed on signed purchase orders, what has already landed and what is still free to move between categories, with the intake reconciled to the season sales plan and the free open once the pipeline and the safety-stock target are named. The markdown envelope beside it is the promotional weight the plan allowed, what the season has spent of it to date and what is left of it. The sell-through checkpoints between the two state where the buy said the season would be at each milestone of it, and how far the book is from that line today. Old stock prices the block the buy has to draw the book down to. The assortment plan splits the same money between breadth, depth and store cluster. The inventory control scorecard states the standard set on this plan, and the learning loop carries each error the season showed into the next buy.
Every card above is a cell of a table on this tab, printed once more at the head of it and lifted character for character rather than formatted again — the link under each one opens the table it was taken from.
The OTB is a purchase budget at cost over a defined season, stated net of recoverable input VAT — the tax on a purchase is reclaimed, so including it would inflate the buy by the VAT rate of whichever market the goods happen to clear in. Season sales at cost are larger than the intake because the difference is taken out of stock already owned: the plan closes the season on less cover than it opened with, and the gap is deliberately drawn from the ageing stock shown below. An OTB equal to season COGS would mean the group intends to end the season carrying exactly what it started with — which is only correct if there is nothing old to clear.
The OTB derived above is the total intake the season needs. It is not what a buyer can commit this week: stock already on the water has been bought, and the safety-stock target is not available to spend either. Open OTB is what is left after both, and it is the only line a buying meeting can act on.
The path is a policy, not a forecast. It is where the buy said the season would be at each milestone, stated before any of it traded, and it does not move when the book moves — which is the only reason a checkpoint can say “behind” rather than “different”. The projection is a separate object and is printed on a separate line: the closing-stock columns of the buy table above run the committed purchase-order book forward to the last week of the season, and the two are never added. A milestone the season has not reached prints an em dash and no status, because a control that fills its empty cells with a forecast has stopped being a control. Sell-through here is the S&OP definition — outbound ÷ (opening + inbound) — cumulated from the first week of the season, with the denominator taken over the whole season rather than over the weeks that have traded: everything the season has to sell, measured in weeks of its own demand, the season’s own weeks plus the cover the buy has to end holding. A denominator that grows with the numerator is not a path anybody can be held to. The closing milestone is not a second target. The open-to-buy closes on a cover, never on a sell-through, so the last point is derived from that cover and nothing is typed twice: a season of N weeks ending on T weeks of cover has by definition sold N ÷ (N + T) of everything it held or bought.
The open-to-buy is the money going into the season; the envelope is the margin coming back out of it, and both are held before the season trades. Both sides of the panel are on one perimeter of discount: all discount the statement deducts, at the plan rate by category. The envelope is the model’s own planned discount rate — the rate the discount rule fires on when the actual runs above it — applied to each category’s share of the season sales plan above; what the season has spent of it is the face value the statement already deducts, carried back over the weeks of the season that have traded on the weekly series’ own shape. The signal is read against the share of the season that has traded and never against the level: sixty per cent of the envelope at sixty per cent of the weeks is on plan and the same sixty per cent at a fifth of them is not. Both lines are read on one scope — the country and the channel the bar at the top of this tab carries, with the category off it, because a plan rate the model reconciles to the statement is only a rate once no single category is selected. A buy signed inside its budget and a margin given away outside its envelope are the same decision read from two sides.
Open = budget − committed on signed POs − already received. It is the only number in the whole plan that is still arbitrable: once it is committed it becomes cover, and once it is received it becomes markdown exposure. A category running out of open cannot chase demand; a category sitting on too much open is holding money the group could spend where demand actually is.
Breadth (how many options) and depth (how many units per option) are the two halves of the buy: the same OTB spent on breadth buys choice and markdown risk, spent on depth it buys availability and re-order simplicity. Cluster A carries the flagship and high-throughput stores, C the smallest — allocation at buy time is what makes or breaks store cover four months later.
Every line states its own formula so the number can be re-derived rather than trusted. Turnover, DIO and carrying cost are computed on average inventory at cost across the period, not on the closing snapshot, because a closing figure taken the week after a large intake flatters both. Service level, fill rate and stockout rate are three different questions and are not interchangeable: an order can be delivered late but complete, or on time but short.
Post-season is not a post-mortem, it is the input to the next pre-season. Each line ties an observed error to the parameter it should move in the next OTB and assortment plan.
A single depth against a step-by-step ladder on a sell-through target, the engine’s recommendation per product state, the ladder week by week, what the residual is worth, the optimum depth by category, discount funding by source, the acceleration test.
Markdown depth on this tab is expressed off the ticket price, tax included, because that is how a discount is granted and how a customer reads it. The margin and contribution consequences of that depth, here and on Financials, are computed on net-of-VAT sales. The two bases are reconciled on the Financials tab.
Two ways to clear the same stock, side by side, on the same block and the same window. On the left, the depth is chosen once and applied to everything until the window closes — the benchmark, and the way most discount tools frame the question. On the right, the depth is raised step by step until the block reaches the sell-through the business unit committed to. The table underneath puts both on the same four measures, and the ladder wins on all of them, which is the point of showing them together rather than one after the other.
The optimum is the peak of the blue curve, not where the two curves cross. The curves are on two different axes and two different units, so the crossing moves if either axis is rescaled and means nothing. The peak does not move: it sits where one more point of depth costs the discount on every unit that was already going to sell, and earns the margin on the incremental units it releases plus the provision those units no longer carry.
The two panels are not measuring the same thing. The optimiser's depth is applied to every unit, every week. A ladder's terminal depth is granted only in the last weeks and only to the units nobody wanted at the shallower steps, so the number that compares with the optimiser is not the last step but the average depth actually paid, on the total line below.
The step response is the part of this model that cannot be derived from a price elasticity, and it is the reason a ladder is not just a slower version of the same discount: each new depth is an announcement, and the week it lands sells above the steady-state rate of that depth before settling back. It is a stated parameter here, and it is the first thing to fit against real markdown history — set it to zero to see the ladder's advantage on elasticity alone.
One row per week of the clearance window: the depth in force, whether that week carries an announcement, what moved, and what it earned. The four summary lines are in the comparison table above.
A sell-through target below 100% is a decision, not a failure: clearing the last units costs more margin on the units that were selling than the residual is worth. That residual then has to go somewhere, and each route has a stated recovery and a stated cost. The provision the units carry is released whichever route is taken — which is why a route recovering less than cost can still be the right answer.
Set a depth and the panel reads the same scope as the curve above: units, speed, sell-through, margin per unit and total contribution, before and after. The question it answers is not whether sales rise — at any depth they do — but whether the volume gained pays for the margin given away, once the supplier's share and the provision the stock would otherwise have carried are both counted.
This panel answers one question: at what depth does a retailer-funded discount make money, given what the stock would otherwise do? Bars show the weekly contribution impact at 10% / 20% / 30% depth; the chip shows the profit-maximising depth found by the engine. The three sliders are the model's assumptions — move them to stress-test the conclusion, not to set policy.
The four-quarter plan by lever, the growth bridge from baseline to plan, the initiative portfolio with its capital, the lever ranking, the quarterly trajectory, the store opening and closing calculator, and the known limitations of the model.
Every lever below lands on a number the rest of the dashboard can reconcile: the market and share block sizes the pool, the commercial drivers move the sales equation, the CRM and media block converts spend into revenue at a marginal return that falls as spend rises, and the store blocks build an opening or a closing from a surface, a format and an assortment rather than from a store count, then state the capital and the running cost it needs — the detail is in the store panel below the bridge. Nothing here creates demand out of nothing — media buys share of an existing market, and a push moves a purchase forward rather than inventing one, which is why the owned-channel returns below are stated net of the demand that would have arrived anyway, at the incrementality the holdouts on CRM & Media measure and not at a rate typed in here.
The plan below is built from levers. This table is built from projects, because that is what gets funded and staffed. Each line states the part of the business it touches, the effect on sales and on margin in the first full year, the capital it needs to build and the cost of running it for a year kept apart — they are approved by different people at different moments — and the one prerequisite without which the rest of the line is fiction. Sales and margin effects are expressed against the current run-rate of the business the initiative touches, so they move with the country and channel filters.
Confidence is stated, not implied: high means the mechanism is already measured somewhere on this dashboard, medium means it is measured elsewhere in the market but not here, low means it is a judgement. A low-confidence line is not a line to drop, it is a line to test before it is sized.
Sales density is not assumed: it is the sales per m² per year that the selected format already produces in the current country and channel scope. The assortment adjustment is not linear — a store carrying 65% of the range does not sell 65% of a full-range store, because the range it drops is the slowest-selling part of it. The exponent used here is 0.55, which is a stated assumption rather than a measured one, and it is the first thing to fit against real openings. Cannibalisation is subtracted from the programme, not from the store: the store sells what it sells, and part of it comes from the store or the website next door. And it is only one of the two directions an opening runs in. A shop front also raises the digital demand of its own catchment — the brand becomes visible, a delivery becomes returnable and a collection becomes convenient — so the halo row is printed above the cannibalisation row, on its own base, and the net of the two is stated underneath them. They are never blended before both are shown, because they do not move together: cannibalisation scales with what the new store sells, the halo with how much digital demand its zone already carries. Neither is inside the programme line, which is the store line as the statement books it.
Stated up front because they are the first things to fix with real data, and they all push in identifiable directions.
| Margin held flat across channels Marketplace orders carry commission economics and ship-from-store moves cost per order with store density; both are held at the blended margin here, so the marketplace initiative's ROI is optimistic and the SFS wave's likely conservative. |
| Store P&L interactions not modelled Click & Collect and endless aisle move footfall and store labour; the model stops at digital contribution. |
| Elasticities assumed, not fitted Markdown response by product state and channel is a prior to calibrate on transaction history. |
| Country, channel and loyalty splits are modelled All dimensional splits are deterministic models for the demo, built to reconcile exactly to the weekly group totals; the first job on real data is replacing them with observed splits. |
Three panels on the conversation a customer has before the order. Conversational commerce splits the week’s conversations between the copilot and the advisors and states the order rate, the basket, the cost and what is left after it on each side. The conversation funnel reads the same week from the digital session down to the order and names the step where the advisor takes over. The copilot case carries three routings to 2027 on one conversation volume and prices what each of them leaves unresolved.
Each card takes the string the panel under it has already printed rather than formatting a figure of its own: the share is the started step of the funnel, the order rate is the total line of the conversational-commerce table, the unresolved share is the last row of the copilot case, which the card names exactly as the table names it. The reconciliation page holds the three cards against those three cells, character for character.
Advisor cost per conversation is held constant across the three paths; only the routing changes. Three effects are modelled separately, because a table that nets a cost saving against a wage bill always reaches the same conclusion. Selection: advisors are handed the conversations with the strongest intent, so their order rate and basket rise as their share falls, with no change in skill. Handler skill: the copilot converts a comparable conversation less well, and the factor is solved from today's two order rates once selection is removed rather than assumed. Escalation: a copilot pushed past its competence leaves conversations unresolved that come back as a contact-centre contact and a lost sale, and that cost rises faster than the volume automated. The third effect is what makes the answer a routing line rather than a slope.
The planning process of the same merchandise book S&OP & Stock carries, on the same selection. The IBP cycle states the four reviews of one month — demand, supply, reconciliation and exec — and the two bridges that subtract them, on net sales and on gross margin. The rolling horizon states the weeks left of the year by nature, the frozen window against the open to buy. Forecast versions prints the statistical carry, the planner’s own lines and the signed consensus of the same weeks, with the step each review changed. The stress test re-runs the six-week stock identity under an intake, a demand, a warehouse-capacity and a transfer lever. Under it, the buy-budget lever asks what a percentage more of the open to buy is worth: nothing at all inside the frozen weeks, because an order raised in this cycle lands after them, and a table on the year chain states what it moves in units, in net sales, in margin and in unserved demand where it does land. Under both of them, three named scenarios — a late pipeline, a soft season and a warehouse ceiling — run the same chain on three stated sets of those levers, so a review reads the cases it holds itself to before it invents a fourth on a slider. The new-product launch panel reads plan against actual week by week on the launch’s own book. The launch calendar above it prints the launches the book has declared and the week each one has to be on a purchase order by, derived from the order cycle rather than typed, so a launch that is still buyable and one that can only be served off the book are told apart on the page rather than in the meeting. The planning calendar at the head of the tab states the cycle those panels belong to: one row per review, the week it falls in, the panels it reads, what it settles and the owners of the rules that fire on those panels.
A table of renvois, and nothing else on it is a figure. Each row is one review of the cycle: the week it falls in, stated relative to the cycle and never as a date, the panels it reads — each one a link that lands on the panel itself, on whichever tab and whichever phase of the planning cycle it sits in — the one thing it settles, and who has to answer for it. The owner column is not typed. It is the owners of the rules that fire on the panels that review reads, read from the rules themselves under the names they already carry on the action board, so a rule moved or retired moves this column with it; a review whose panels no rule fires on says so rather than naming somebody. No cell restates a figure another panel prints, because a second place printing one quantity is the place that goes stale, and the whole purpose of a table of renvois is that the figures stay where they are computed.
The four reviews of an integrated business planning cycle, on the first four forward weeks and not on the calendar month the year-to-date panel names: that month is entirely banked, and a demand review held on a banked month has no demand left to revise. Each row is the row above it with one more constraint on it, so the four are subtractable and the bridge under the table subtracts them. Demand is the forward demand chain, the same chain the table above prints. Supply is that demand run through the stock identity on the intake the buying constraints say is buyable, with the constraint that binds named per category; the warehouse throughput ceiling is named beside it, from the Logistics tab's own capacity model, and is deliberately not inside that test, which answers the buyer's two constraints and no third one. Reconciliation prices the levers that already exist on the page — the stress test's transfer pool and the aged-stock rule's own clearance routes — each on its own line of the P&L: a transfer moves turnover, a clearance route moves margin, and they are never added together. Exec produces no fifth number; it signs the reconciled one and carries the board's lines under these filters, with the status held on the same key the Actions tab writes. Volumes and the closing book are the network's, which is what the whole S&OP tab counts; the money is the selection's, at one price per category renormalised so the latest week's units return the selection's own net sales to the dirham. The budget these rows are read against is this month’s share of one annual profile, and it has to be: the demand carries the season curve and an average week does not, so comparing them compared a peak against an average. The year budget now carries a weight for every week of the year — the plan’s own week where the plan has one, the declared annual shape damped where it does not — and this month takes the four weights its own weeks carry. The year budget does not move; only its distribution across the weeks does, and the reconciliation page tests that, block by block. What is left between the two curves is the damping, which is a property of a plan rather than an artefact: the budget carries six tenths of the season’s deviation and the demand carries all of it. The bridge is printed twice, on net sales and on gross margin, because the levers do not all act on the same measure: a transfer moves stock to where the demand is and therefore moves turnover, a clearance route gives up trading margin to remove holding cost and therefore moves margin. One chain alone would print a lever term of zero beside a reconciliation row that had just added margin. Both close, and both are tested.
Demand, budget and the constrained plan by thirteen-week block over the weeks left of the year — the same weeks the Latest Estimate runs on, with each block taking its own weeks out of the one annual budget profile, so the blocks still add to the forward share of the year the rest of the page states. Eighteen months was asked for and is not printed. Past the sixth week nothing carries the line but a six-week season curve rebooked at a constant weekly trend; over seventy-eight weeks that compounds Beauty to four times its level and Home & Lifestyle to two thirds of it, and there is no budget beyond week 52 to read any of it against. The modelled and the extrapolated part of every block is stated in its own column rather than blended into one number.
Three versions of the same four weeks. Statistical is the naive carry — last actual week × season × trend, the demand leg of the forward chain with no judgement in it. Planner is the plan's own lines for those weeks, phased on the same season curve and split on the plan's category mix, so its net sales are the month's budget by construction and the step from the statistical version is a comparison at equal scope rather than a calendar difference. Consensus is the planner run through the same supply constraint the review above applies. The step between two versions is what that review changed, in units and in money. What this table does not print is a measured WAPE per step, which is what forecast value added is: that needs the forecast versions themselves recorded at line × week over past cycles, and this dataset carries one demand history and no version history. The two quality columns are therefore the declared ones the rest of the page already prints, named for what they are.
The scenario re-runs the same six-week chain on the same identity — no separate model, no different numbers. It answers the three questions a planning review actually asks: what happens to cover, where does the first stock-out land, and what does it cost in lost sales.
This table runs on the weeks left of the year and not on the six above, because that is where the money lands. Two bases, both named, and never subtracted from one another. Net sales is the volume at the book’s own realised net price, the price rule R9, the decision board and the six-week chain above all value a unit at. Gross margin is the same volume at the plan’s gross margin per unit, renormalised so the selection’s units return the selection’s own gross margin. They answer two questions and neither is the other’s complement: a margin taken on one base and subtracted from a turnover taken on the other is a row that does not add up, which is why the two columns sit side by side and nothing subtracts them. Every column is a movement against the same chain with the lever at nought, except the closing cover, which is the level the year closes on under the lever. A category that sells nothing more than it already does is not a category the money is wasted on — it is a category whose shelf was never the constraint, and the read names it.
Each row is the four levers of the stress test above set to a stated place, and every figure beside them is that chain run on exactly those numbers — on the whole book, at the same scope, with the line at rest as the first row. A named case is a preset of levers and never a figure of its own: nothing here was written down, so the day the book moves these rows move with it. The buy budget stays at nought in all three, because a named case asks what happens to the book and not what is bought against it — that question has its own lever and its own horizon on the panel above, and a row mixing the two would price a shock and a purchase order on one line. No rule fires on a named scenario; R9 reads the book at rest. The decision board, the register and the action board are all built on the line at rest, and a case that fired a rule would put an instruction on the page for a week that has not happened. Set the sliders writes the four controls above to the row’s preset and repaints that panel: one state, the sliders already there, and no copy of them. It moves a reading and settles nothing.
One row per launch the book has declared, in the order the book declares them and not in the order they go on sale — the read below takes them in launch-week order, which is a different question from the order they were signed in. The order window is derived and never typed: it is the launch week, less the order cycle in whole weeks, less one — the same order cycle the rolling horizon, the buyable-intake test and the verdicts of the launch panel below all read, so a cycle that lengthens by a week moves every window on this table with it. A launch that has not traded a week prints nothing that would need one. Sell-through, availability and the re-forecast are reads on weeks that have happened; they stay on the launch panel below, beside the weeks that produced them, and a plan quoted in their place would be printing an intention as a measurement. What a launch that has not traded states is what a buy needs: the shelf it lands on, the week it goes on sale, the weeks it is planned over and the units the plan calls for. The status is the book’s own latest week held against that window, and a window closing does not stop a launch — it stops it being bought, which is a different sentence and a harder one. Every row carries the renvoi to the panel that answers it: the launch that is trading to the launch review under this table, the ones that are not to the buy that has to place them.
Closing stock is the same identity the rest of this tab runs on, on the launch's own book: opening + received − the units drawn. A week that has traded draws its actual, a week that has not draws its plan, which is why the four forward lines move with the curve rather than with the sell-out. Cover is closing stock over the mean weekly rate of sale so far, capped at the trailing window — a launch has no four weeks behind it until its fourth. The verdict is a rule and not a colour, and for a forward week the rule is the order cycle rather than the cover on its own. A traded week is ahead of or behind its own plan. A forward week at or above the cover floor is a hold. A forward week under it closes too thin to hold a facing, so it runs short in the week after it, and which of three things is true of that week decides the verdict: a committed receipt lands in it and the shortfall is already bought (thin, covered); nothing is committed into it and a purchase order raised today is not sellable until after it, so no order can reach it and the levers are a transfer or an accepted shortfall (thin, frozen); or an order raised today does reach it, which is the only case that is a reorder. Each cell carries the whole sentence for its own week. The re-forecast column is the two-week re-base and starts where the re-base does; the plan column is what the buy was signed on and never moves.
What the week decides, priced. Every line is produced by a rule reading a panel of this dashboard under the filters below; nothing on this tab is typed in.
Each line is produced by a rule reading the panels of the other tabs; nothing is typed in. Rules, units and value formulas are listed in Data & Method. Two columns of value, and they are never added. P&L / wk is a result the week actually carries: holding cost avoided, the contribution of the clearance route, margin on sales not made, media to reallocate, contacts avoided. The board is ranked on it and the card states it against the operating result of the same week and the same selection. One-off is money recognised once: a provision released when a block clears. A one-off divided by a clearance window and printed as a weekly result is the single most common way an action board over-states itself, and it is why the two columns exist. Stock at cost is never a value here — it is a balance, it appears in the signal, and it is what the P&L column is computed from rather than a substitute for it.
The reconciliation checks, the calculation method, the decision rules, the day-one extraction list, the weekly data set the page recomputes from, and the tax basis.
This page claims that two panels cannot show two different totals. This is where the claim is tested rather than asserted: every identity below is computed at load and at every repaint, from the same functions the panels read. The ones that fail stay on the page and say so.
One calculation contract for the whole page: the weekly group rows above are the only input; country, channel, funding and loyalty splits are modelled on top and rescaled so every table reconciles to the group totals in all directions. The Decision Brief follows the same contract — it is generated from the computed aggregates only, so it can never quote a figure that is not on the page, and anything the data cannot support is flagged as not derivable rather than guessed.
Conventions: growth attribution in pp on a common group base (additive in both directions); the commercial equation runs a chained four-factor bridge, traffic → conversion → items per basket → average price, whose steps sum exactly to the gap (the reference-to-actual waterfall on the Overview tab runs the same bridge in its three-factor form, traffic → conversion → basket, since basket depth is not modelled per channel); comparisons only on comparable periods (same week vs Plan or vs LY), and a return rate compared with last year is stated on one announced deterioration in points — the same one on the channel cut, the category cut and the group row, so both sides of the comparison come from one book; contribution = gross margin, itself net sales less cost of goods plus the supplier funding credited less the marketplace payout, less the variable cost of serving the order.
The book and the warehouse node. The S&OP model is the whole merchandise book, shop floor and warehouse together, and the cover bands, the presentation floors of the policy matrix and the opening stock of the open-to-buy are all read against it. Outbound is every unit the group sells in the week across the five channels; the weekly row carries digital orders only, so the level comes from the five channel equations and the shape from the row. The warehouse is a node inside that book, not a second book: it holds what the shop floor does not, and it ships store replenishment for every unit that left a shop floor — sold across the counter, collected, or picked for a ship-from-store order — plus everything that goes direct to a customer or a wholesale account. Those two lanes add to the units the group sells, which is why one outbound figure now serves S&OP and Logistics. Its cover falls out of the book rather than being stated, and it reads as what it is: a flow-through building, not where the stock sits. And the book has no channel. Stock in units and at cost, cover, the age of the layers, the provision, the carrying and the open money are the NETWORK’s under every channel and every store-cluster filter: the same carton serves the shop floor, the site and the marketplace, and a flagship and a local store draw on one book. Only the sales and the outflows follow those two filters. Cover is therefore network stock over network outflow — a “retail cover” is not a quantity this book has — and rotation, days on hand and the provision share are numerator and denominator on one population. The country and the category stay on the book, because a market has its stock and a category has its stock.
The provision ledger. One function, provisionOf(category, cause, location), read by the cost layers, the old-stock table, the markdown exposure, the inventory scorecard and the P&L. Three rules. A provision is taken at the book's own average unit cost, because splitting the book into an old and a current layer changes what a unit costs and never what it is provisioned at. A category has one cause: Beauty is provisioned on expiry, and the near-expiry units leave the over-twenty-six-week block first, so its age provision is nil rather than charged as well. And a provision has a location, so the shop-floor and warehouse lines add to the book. The P&L takes the movement of that ledger and never its level, which is why a provision released by a markdown appears once, as a smaller charge, and never again as extra margin on a cost-layer panel or as a saving on the action board.
S&OP identities: outbound gross units = the units the group sells, split by category share; closing stock = opening + inbound + returns to stock − outbound; forward cover = closing ÷ trailing 4-week outbound, on a trailing window that walks out of the actual weeks into the projected ones, computed by one function, projectCover(category, week), on the committed PO book and read by the stock flow, the planned-productivity table, the forward-cover chart and the scenario; sell-through = outbound ÷ (opening + inbound). The ordered → invoiced bridge applies stated erosion factors (shipping fees, gift cards, cancellations by origin, fraud, backlog in/out, returns by reason) to ordered value excluding Click & Collect, and reconciles demand-side sales to invoiceable revenue. Brands, media levers and care reasons are modelled splits that rescale to the group weekly totals, like every other dimension on the page.
Financials & CRM: the P&L expands the steering margin into stated cost ratios (customer care computed from the care model) and reconciles to the same contribution figure as the Sales Overview; the GM bridge and operations bridge are weight-based decompositions whose steps sum exactly to the movement they explain; recruitment, multi-category baskets, funnel steps and top products rescale to the week's new customers, transactions, sessions and AOV respectively. The S&OP forward projection chains the stock identity six weeks ahead at the committed intake, and solves the intake ratio that lands cover mid-band — a deterministic calculation, not a forecast model.
Onsite, merchandising and the initiative portfolio: search conversion is solved, not typed — given the share of sessions that use search and the observed ratio between searchers and non-searchers, the two conversions are the pair that reconciles to the conversion of the surface, so the panel can never contradict the funnel. Recommendation surfaces carry two figures on purpose: attributed revenue, which counts orders containing a clicked product, and the part of it proved incremental against a held-out control, which is the only one used in a plan. Push and in-app send volumes are built from an app base derived from app sessions and visits per user, so they move with the same traffic as every other panel; the orders and the revenue those sends produce are levelled to the owned-channel table on CRM & Media, which is the one place owned channels are sized, so this tab and that one cannot state two figures for the same notification. The copilot paths model three effects separately — selection (advisors receive the conversations with the strongest intent, so their order rate rises as their share falls), handler skill (solved from today's two order rates once selection is removed), and escalation (unresolved conversations return as a contact-centre contact and a lost sale, at a rate that rises faster than the volume automated). The initiative portfolio sizes each line against the run-rate of the business it touches, separates the contribution of incremental sales from the effect on the rate of the business that already exists, and states a confidence weight rather than implying one.
Channel taxonomy. A sale belongs to the channel where it is created; how it is served is a route. Endless aisle is a store sale served from the warehouse, so it is retail. Ship-from-store is an online sale served from a shop floor, so it is web & app. Omnichannel is Click & Collect and nothing else. Digital stays web & app + omnichannel + marketplace, which is why digital penetration reads 11.1% of total business rather than the 11.5% it read when endless aisle was counted online. The three routes keep their own panels on Logistics with their cost to serve and their promise, because the route is what the operation is planned on even when the sale is booked elsewhere.
How the cost ratios followed the sales. The P&L carries a cost ratio per channel, not per route, so the old omnichannel column had to be split before it could move. Each line of it is shared across the three routes by the store cost the route actually incurs — AED 6.2 an order for Click & Collect, 21.8 for ship-from-store, 9.4 for the endless aisle — times the volume of the route, and each part is then attached to the channel the sale is created in. Two rules are stated rather than weighted: a Click & Collect order is never delivered, so it takes none of the last-mile line, which goes to ship-from-store and endless aisle only; and gross margin follows the sales rather than the cost, so it is split on volume. Orders are taken proportional to sales inside the omnichannel layer, the only order split the model supports. The identity the split preserves, verified at load: for every line of the P&L, the AED charged across all channels is the same before and after, to the dirham.
Attach at Click & Collect pickup. A customer collecting an order buys something else on the shop floor often enough to change the economics of the service. The attach rate and the size of that second basket are stated per store cluster; a country reading weights them by the clusters that country operates, on the same store matrix every other store panel uses. The basket is applied to the average value of a collected Click & Collect order, which is the announced base. That second sale is created in store, so it is booked in Retail and counted once: it is shown beside the omnichannel line as a consequence of the service, never added to it. The attach is earned at the counter, so it is stated on the orders that reach it. An order cancelled before pickup produces no second basket, so the rate applies to the orders collected and the basket to what a collected order is worth. The order counter itself does not move — it is the created book, the same 12,980 the route counters and the channel equation read — and both are printed, because a panel that shows one of the two invites the reader to divide by the wrong one.
Click & Collect cancelled before pickup. This event was carried four times and no two agreed: the country table stated 1.9% to 4.8% of orders, the store-cluster table 1.2% to 4.1%, the order-to-pickup distribution a flat 2% “not collected — cancelled”, and the ordered-to-invoiced bridge on Financials −2.3% of ordered value. One event, four rates, three tabs. ccCancel(country) is the one counter: the country table is the anchor because it is the operational figure a market owns, the cluster rates keep their own shape and are rescaled onto it exactly as the fulfilment mix is rescaled onto the route counters, and the bridge step is derived from it on the stated assumption that a cancelled order carries the basket of a collected one. Not collected is a different event and keeps its own line: the customer never came, the order was picked, held and restocked. The cause split is not stated per market. One announced input gives the group share caused by preparation — a line short at the moment of picking, or a promise out of time — and it is distributed across markets on the availability the inventory policy computes, which is itself built from that market's lead time, review period and service target. Egypt is served on a five-week lead time at a 93% target and holds the lowest availability of the five, so it cancels most in preparation; the UAE, one week from the hub at 97%, cancels least. The spread is a consequence of the stock policy rather than a second opinion about it, and the deviations are scaled rather than clipped so the weighted mean stays exactly the input. What it costs is three kinds of money and they are named apart: the contribution on turnover that never invoiced — the turnover itself is not a value, it was never recognised; the pick already done, at the same 9.5 minutes a collect pick takes on the labour panel and the market's own loaded hourly rate; and the attach that never happens. The second announced input is the share of customer cancellations that arrive after the pick has started — a preparation cancellation is picked by definition.
Price position by category. The page carried a price index twice before this panel: by country on the market-share panel, with its own online and store columns, and by range family on the price-architecture panel. Neither is by category, which is the grain a trading meeting decides in, and a third free-standing index would have put three price positions on one tab. So the category index is an announced deviation and it is recentred: the sales-weighted blend of the six categories is the country panel's index on whatever scope is selected — the blend of the five markets, one market under a country filter, the online column under a digital channel and the store column under retail. It is the same recentring the inventory policy uses to spread availability across markets without moving the level, and it is a check. Brand deviations are recentred the same way onto the index of the category each brand sells in, so the cloud describes the dispersion inside a shelf rather than restating its level; the brand table labels its categories differently from the stock model, so nothing maps onto Menswear and that is stated rather than papered over. The horizontal axis of the cloud is the share of sales of the latest week, which is what the model carries: it holds no twelve-month brand history and inventing one from a growth rate would be a figure nobody could reconcile. The SKU matching rate is part of the reading: an index on 47% of an assortment is a weaker statement than the same index on 76%. Announced input: the full-price elasticity, stated as a share of the aged-block elasticity the Markdown Engine already carries, because CAT_EL is the response of a stuck unit — one that only moves on price — and using it on full-price demand would price every price move at roughly twice what it earns. One ratio rather than six new numbers. What a permanent move is worth is a margin figure and not a volume one: closing the gap costs the price on every unit that was going to sell anyway, which is pure margin, and buys elasticity times the gap in extra units at the category's own contribution. It is positive only where the elasticity clears one over the contribution, which is why most price moves are a share decision taken with the margin cost in front of you — and why the two halves are printed apart.
The loyalty programme is a cost, and it is not the discount. The offer table already carries a Loyalty rewards mechanic, 7% of the face value granted: that is a discount off a ticket and it is already inside the markdown, the gross margin and discountFacts(). The line added to the P&L is a different object — the value a member earns on spend and later collects as goods. It never touches a ticket, it leaves the building as merchandise and it costs what merchandise costs: the cost of goods of the channels a member shops on, at the cost layer the accounts recognise. The two are disjoint by construction. Loyalty rewards — collected, at cost sits under CRM & owned channels in the variable block and is read by the columns on the member orders each one takes, which is why the store column carries most of it: members shop mostly across a counter. It is 2% of member spend collected at a stated rate, so it moves with the sales that earn it; putting it below the contribution line so the media payback floors would not move was a convenience rather than a treatment. The floors move, and the payback panel states the movement. A point is a material right, and the statement says so (IFRS 15). The same standard is applied two paragraphs away to state the marketplace as an agent, and it applies here too. Part of the transaction price is allocated to the point and deferred until it is redeemed or expires, and the three movements are stated in the memo under the P&L: the value granted and deferred out of net sales, the value redeemed and recognised as the goods go out, and breakage recognised at the rate the redemptions run — the part expected never to be collected, which is a product of the measurement and not "information". In a steady state the three offset, so the operating result does not move; what changes is that the balance sheet stops being silent and carries the contract liability outstanding, a week's grant over the weeks a point stays alive, which is the one announced input the treatment needs. The other-costs panel keeps gift-card breakage separately, because a gift card is cash received and a point is revenue deferred. The member base is derived rather than stated: member turnover divided by what a member of each status spends, summed. A base that cannot place the turnover its own members are credited with is a base that is wrong, not a base that needs a scaling factor. The frequency and the basket cancel in that derivation, so the tier mix comes out exactly as the tier table states it, and the card bridge keeps its movements' shape levelled onto the derived base. Announced inputs: the earn rate on member spend and the collection rate by status. The threshold to the next status is not announced: a member reaches it by spending what that status spends, which the tier table already carries. The programme has no budget version anywhere in the model, so its rates are held across the scenarios and only the sales they apply to move — the same treatment the return rate and the shipping rate get.
One device split for the page. The sales equation by device is the source of truth: the onsite surface table and the funnel step multipliers are both derived from it at load, so the funnel, the search panels and the device table cannot state three different conversions. The step multipliers keep their stated shape — which step each device wins or loses on — and their level is calibrated so the product of the five steps equals that device’s conversion index. The app and web funnels are levelled the same way and on the same source: the typed pass rates are the shape, one factor per branch is solved so the product of the branch’s steps is that surface’s conversion in the device table — the app against its own row, the single web branch against mobile web and desktop blended on their sessions — and the factor multiplies each step’s loss rather than its rate, because a rate rescaled upward can pass 100% and a loss cannot. The install and the first open keep their announced level: they are per-impression acquisition steps above the session a conversion is measured on. The account screen is a step of the app funnel and a share of the web’s checkout step, printed beside it and never multiplied into the chain, because the app asks at the first open and the web asks at checkout. Tablet and other surfaces, 2% of sessions, are folded into desktop on a session-weighted blend rather than shown as a fourth line nobody acts on. Search behaviour is measured on two surfaces only, the app and the web, so mobile web and desktop share the web search profile; that is stated rather than split into a third row nobody measured. Frequency by device is an announced input, not a derived one: the model carries frequency by loyalty tier and by banner and never by device, and the case for an app cannot be argued without it.
Failing search queries are priced by intent. A product question that finds nothing costs a sale, and is priced on the demand behind it: queries × exit rate × searcher conversion × searcher basket. A service question typed into a search box costs a contact, and is priced on the contacts it creates at the blended cost per contact of the care model. The two are never added: one is revenue at risk, the other is cost avoided, and putting them in one column is how a search backlog gets mis-ranked.
The window a release decision is allowed to read. A dynamic tranche is released day by day on a ROAS that is not finished: conversions land after the click and the platforms backfill them, so the same spend reads 62% of its eventual value at D+1 and 94% at D+7. The curve and its day grid are an announced input and there is one of them on the page — the stabilisation chart, the maturation panel and the release rule all read it. Two rules follow and both are written down rather than assumed: the decision window closes at D+7, because earlier than that the reading is noise dressed as a number and later than that the tranche has already been spent; and the floor is compared to the mature figure, the observed one divided by the share of the return the curve says has arrived. Reading yesterday's number against a floor is not a stricter policy, it is a different and wrong one, and it is biased against precisely the levers with the longest consideration window. The maturation and the incrementality are two different corrections applied in that order and never blended into one fudge.
The contact belongs to a lane, and the refund to a reason. The care panel says how many contacts there are and what they cost; the carrier table says who delivers. Neither said which carrier the contacts come from, which is the number that decides a lane change — and a contact is what a broken promise costs after the delivery has already been paid for, charged to customer care rather than to the lane that caused it, which is how a cheap lane keeps winning a cost-per-order comparison. The rate here is derived and not stated: a contact for “order not received” scales with the lane's own late rate, one for “improper order received” with its damage and loss rate, and the rest of the care mix is carrier-neutral — three figures the care model and the carrier table already carry. The volume is the care panel's: the lanes are normalised onto the digital contact volume, so the table redistributes contacts and never creates any, and the lines that travel on no carrier of ours — collect and the marketplace — are on the table rather than dropped, which is what makes the total the whole digital book. A ship-from-store parcel is handed to the same carriers and travels in the same mix. The refunds are the ordered-to-invoiced classification the Financials tab already carries, applied to the returns the statement credits on the two channels we deliver ourselves — a marketplace return goes back to the seller and never touches our cash — and the refund float below the other-costs table is that same base carried for 12 days. A marketplace refund never touches our cash, so it is not in that book.
Who a brand actually recruits. The brand table says what a brand sells and at what margin, and the recruitment split says how many customers the week brought; neither said which brands did the recruiting, which is the question a delisting conversation turns on. Nothing new is stated: a brand's share of the week's new customers is its share of sales times the recruitment power the brand-power panel already plots, renormalised so the twelve brands and the long tail add to the week exactly — so the index printed on the brand table is that panel's, and its sales-weighted mean is one by construction. The split between a customer new to the brand and a store customer new to the channel follows the brand's own web share of its sales, the column two places to the left: a brand sold across a counter converts the customers it already has, one sold online has to win them. It is renormalised onto the group's new-to-brand share from the recruitment split table, scaled rather than clipped, so the two tabs share one recruitment book. The long tail carries the group index because no recruitment is measured on it, and it sits in the total row rather than in a row of its own.
Generative AI referrals. An assistant that answers a shopping question and links a product sends a visit that lands in the analytics as organic search: no campaign, and a referrer nobody has a bucket for. It is small and it grows at a rate nothing else on the acquisition table grows at, which is exactly the combination that stays invisible inside a big line until it is no longer small. It is carved out of organic search and never added beside it — the shares of sessions and of revenue come off the organic line, so the table still adds to one hundred and the digital week is untouched. Its share, its growth and its incrementality are announced: the model carries no referrer-level split of its own, and a server-log or analytics export would replace them. Its incrementality is the earned figure of the line it comes from, because it is the same kind of visit.
Next iterations: v2 fits channel and country elasticities from transaction history instead of assumed parameters; v3 automates the weekly refresh and posts the brief to the trading channel.
The seven rules behind This week’s decisions on the Sales Overview tab are deliberately simple and readable: each one is a test on figures another panel already computes, and a value formula built from the same figures. The threshold of every test is a stated parameter rather than a hidden one, so a rule can be argued with, moved, or switched off without touching the rest of the page.
Two columns of value, and one of them is not a weekly result. Every rule states its unit, and the board carries two: P&L / wk, a result the week actually carries, and One-off, money recognised once. Stock at cost is neither and is never a value on the board — it is a balance, it belongs in the signal, and pricing an action at stock times margin values the same dirham again every week it stays unsold. The provision a cleared block releases is a balance-sheet movement and belongs in the one-off column, not divided across the weeks of a clearance window. The release is now in the one-off column, capped at what the provision ledger has actually taken on the category, and the weekly column carries the holding cost avoided and the trading contribution of the clearance route and nothing else. The total of the weekly column is stated against the operating result of the same week and the same selection, so the board can be read as a share of what the business earns rather than as a number with no denominator.
Grain is stated per rule because it is not always the grain the question is asked at. Assortment ratios are a group discipline; stock ratios are set by market. Sell-through and buying depth answer how well a range was chosen and bought, and that judgement does not change at a border, so they stay group. Cover and availability answer how much stock a market has to hold to serve its customers, and lead time, demand variability and the service level the business is willing to pay for all differ by country, so they are computed per market by the inventory policy and read through coverOf(category, country), targetCoverOf(category, country) and availOf(category, country). The discount rate is carried by channel and country and not by category, so the discount rule is stated where the figure lives. The out-of-stock panel has no country dimension, so its rule names no country to expedite from.
The P&L, and where the markdown is deducted. The statement is structured the way an omnichannel retailer closes one: a gross-to-net bridge, a gross margin, a contribution after the cost of serving the order, an operating result after the costs that do not move with it, in six columns because a store, a website, a click-and-collect counter, a marketplace and a wholesale account do not share a cost structure. The turnover every other tab carries is ordered demand, net of VAT and after the discount the customer received at the till, so gross sales at full ticket is derived from it: turnover plus the face value of the markdown granted. The markdown is deducted once, in that bridge, at face value; the part the supplier funds comes back below as a credit to cost of goods, because a supplier-funded markdown is a reduction of the purchase price and not a sale. Charging it a second time as a cost line under a gross margin labelled "at full ticket price", applied in AED to a turnover already net of it, would deduct AED 14.5M a week twice. Returns are the second correction. Ordered demand is gross of returns and the statement deducted them nowhere, so the credited sale appeared only as a processing cost; they are now a deduction from gross sales at one rate per channel, read from the channel-economics table that already states it, and the goods that come back release their cost of goods with them. Cost of goods is the full-ticket cost of what shipped at the layer the cost method recognises, so the FIFO / weighted-average / lot toggle on the cost-layer panel moves the statement, which is the point of having it. The marketplace is stated as the agent position it is (IFRS 15): net sales there IS the commission, the merchandise value and the seller payout are the seller’s and sit in a memo under the statement rather than inside our revenue. Stating the gross merchandise value as net sales consolidated a seller’s turnover into ours and made the group operating margin read on a base that included it. A line a channel does not have prints an em dash and never a zero, because zero is a measurement and an em dash is a structure. Two gross margins exist on purpose and both are labelled: the full ticket rates, which are the rate a ticket price is derived from and which the cost layers, the Markdown Engine and the bundle panel read, and the P&L's own gross margin, after markdown, returns, supplier funding and payout, which the bridge and every panel valuing a revenue at a margin read.
The store network is generated once, and everything about it is an aggregation. Four hundred and thirty-five stores, each with a country, a cluster, a turnover, a selling area, a week of paid hours and an opening date. The cluster scorecard, the store journey, the labour panel, the store S&OP table, the Top 20, the like-for-like, the route counters and the two store keys of the P&L all read that one list. The turnover spread inside a cell is a symmetric ladder ordered by a hash of the store index, so its mean is exactly one and the cell sums to the dirham, no two stores share a turnover, and the modulo of period eleven that made three pairs of stores identical is gone. Openings are dated, ten of them, and the like-for-like falls out of the dates rather than being stated: a store that opened this year has no same week last year, so its whole turnover is the network effect and the comparable base is what is left. A new store trades on a ramp, an announced 55% of the cluster mean at opening rising to the mean at one year.
One growth against last year, at country × format. growthOf(cluster, country) is the only derivation now, and it is stated at the grain the network is run at. For every country × format cell the opening effect is the turnover of the stores that have no last year over the turnover of the ones that have one, read from the dated opening list; the like-for-like is the announced shape of the format plus one adjustment per market, solved so the cells of that market close exactly on that market’s own retail line; the total is their sum, and the cell’s last year is its turnover divided by it, so nothing is renormalised afterwards. Cluster, country and network rows are aggregations of those cells: the total is turnover over last year, the opening effect is new over comparable, the like-for-like is the difference. That is why like-for-like + openings = total on every row that is printed, why the country columns of the Deep Dive matrix are the retail lines of those markets, and why the Overview text now states the effect its own cells produce instead of a share of the store count. The like-for-like rule on the action board reads the same cells, at country × format, because a format average hides a spread three times wider than itself.
One session book, and there is no such thing as an omnichannel session. There is one session total and one marketplace base.sessionFacts() starts from one base, the digital sessions of the input file on the taxonomy the page uses, and splits it in two: the marketplace, a different catalogue and a different visit, carries its own sessions solved from its own conversion index; what is left is the own-site base, and Web & App and Click & Collect share it. A customer opens one session and chooses at the checkout whether the parcel is delivered or collected, so the collect route is stated as a share of the digital checkouts and as a conversion on the shared base — never as traffic of its own. The omnichannel equation is flagged shared, so the group visit base counts that session once, the same discipline the marketplace already had. The order counters are the route counters, 73,894 / 12,980 / 14,011, so the rows of the digital-layer table add to its total instead of being sessions times an index under a total read from the raw input column. Every share “of online sales” — media, CRM, the Journey segment table — is taken on the same digital week, and the app base is derived once from the app sessions and read by both the Onsite cards and the owned-channel table.
One attach book, on one grid. The second basket a collection triggers on the shop floor is built on a country × cluster grid and every panel is an aggregation of it: the created orders are the country’s, split on the same catchment key the route model uses; the cancellations carry the cluster’s own shape rescaled onto that market’s rate; the attach rate applies to the orders collected, because a cancelled order never reaches a counter; and the second basket is the cluster’s index on orderValue("cc"), the one order value the Overview, the channel-economics table and this panel read. The consequence is that the NETWORK row is the collected-weighted average of the four rows above it, on the rate and on the basket, and sits inside their range. The intraday table states the execution and reads the money, instead of building a second total 32% larger three panels below.
One parcel count, one contact base, one book of returns. The parcels that travel are the route counters, home delivery plus ship-from-store. The last-mile line of the statement is two lanes — the parcels a customer receives and the freight that moves a wholesale order — and only the first is what the carrier panel prices, which is what the reconciliation page now tests rather than comparing two perimeters that happened to add up. Contacts are stated per 100 digital orders on a named base, the same order book on the Financials cost-to-serve panel, the D+7 table and the lane table. The returns are one book: the units come from the rates the statement charges each channel times the units those orders carry, valued at each channel’s own realised net price, so the S&OP panel returns the units the accounts pay for. The marketplace is absent from both sides, because the goods are the seller’s and the credit never reaches our statement. The planning model keeps the category shape and the reverse-logistics lag; only the level is the statement’s — and since a return is credited to the stock book, correcting it also removes the carrying cost of units that were being credited to stock and to no line of the accounts.
The routes are counted once, per store. Click & Collect, ship-from-store and the endless aisle are carried by each of the four hundred and thirty-five stores, on one key: the cell’s own digital demand times the country’s route rate, so a store serves the collect orders of its own catchment. The store-logistics table, the attach table and the intraday table read that one split. One order value per route, its own sales over its own orders, and the Omnichannel channel and the Click & Collect route state the same basket because they are the same object. Home delivery is Web & App less ship-from-store and nothing else. A marketplace order is shipped by the seller, so it is not a fulfilment route of ours at all: it carries its own counter, it has no lane in the warehouse allocation, and that is the same reason the P&L gives it no cost of goods and no warehouse.
One session split, and it is derived. The share of sessions is derived, not stated.The inputs are now what a session of each kind is worth: a conversion index — App 1.18, Desktop 1.14, Mobile web 1.02, in that order, because an app session is opened by a customer who is already signed in, a desktop session is deliberate, and a mobile-web session is the unauthenticated end of a search click — and a basket index, App 1.06, Mobile web 0.86, Desktop 1.26, a desktop basket being the largest and a mobile-web one the smallest. The share of sessions is solved from those indices and from the app turnover the route model carries: there is exactly one app share that produces it. The relative split of the non-app sessions, mobile web against desktop, is the announced input that closes the system. The result is that the app is under half the sessions and not seven tenths of them, which is the difference between counting app opens and counting sessions that reach the site. The sales equation by device, the device table beside it, the onsite surfaces and the traffic-source panel all read that one split; the App line of the route table on Deep Dive is the route alone and is labelled that way. The ordering of the three conversions is an identity on the reconciliation page, so the solve cannot invert what the inputs state.
Replenishment is solved from a rate. The share is now whatever ninety units an hour requires, an announced input, and the hours that frees go to selling, where the labour panel already shows the network short. The payroll does not move: it is hours times the country rate, and neither changes. The warehouse has one stock. The inventory control scorecard reads the orchestration’s own units for stock speed, turnover and days on hand, so a flow-through node the same tab describes as 2.2M units and 1.4 weeks can no longer be stated at 14.7% speed and 53 days. Days on hand decompose rather than average: the days a unit spends in the building plus the days it spends on the shop floor are the days it spends in the book.
Fixed costs are allocated on what drives them. A fixed cost spread pro rata of sales says the marketplace consumes a warehouse it never touches and that a click-and-collect counter is free because its turnover is small. Each family is allocated on its own driver, and the family total is unchanged by the allocation, which is one check per family on the reconciliation page. Stores — Retail and Omnichannel only. The shop floor is retail’s except for the standing capacity the collect service occupies: the counter hours the rota reserves, taken from the picking hours the Logistics tab already computes as orders times minutes per route, against the paid store hours of the same store model; and the collect desk and holding shelf, an announced input of 14 m² a store, against the sales area of the network. The payroll and occupancy halves of the block are split from the store model’s own rota and hourly rates, and each half takes its own driver. The pick of each order is a variable cost and sits in fulfilment above; this line is the space and the rota, which is a different cost. Warehouse fixed and inventory carrying — the channels with a stock flow, on units through the building from the warehouse flow: store replenishment and the endless aisle to Retail, home delivery and ship-from-store to Web & App, click-and-collect to Omnichannel, the wholesale lane to Wholesale. The marketplace holds no stock and moves none of ours, so it carries none of this and prints an em dash, the same as its cost of goods. Technology and platform — the digital channels, on orders, because a till transaction does not call the order-management system. CRM and owned channels — Retail, Web & App and Omnichannel, on the orders the owned channels are credited with, with an announced input of 35% of them redeemed in a store rather than online. Brand and commercial animation and overhead — every channel, on net sales, because neither has a causal driver in this model and saying so is better than inventing one; with one exception that is not a convenience: on the marketplace, net sales is the seller’s merchandise value and not our revenue, so the key there is the commission we keep. Allocating group overhead on somebody else’s turnover charged the marketplace eight times what it earns.
Media payback floors. One definition of contribution, and it is a line of the P&L. A dirham of media does not pay for itself when it covers the gross margin. It pays for itself when it covers what the order leaves once it has been served and once the discount that won it has been granted. That line is the Web & App column of the P&L on Financials, printed as a memo under the statement: gross margin — already after the markdown granted, the goods that came back and the supplier funding credited — less the variable cost of serving the order: fulfilment and packaging, the last mile including its cash-on-delivery and failed-delivery share, reverse logistics, payment fees including cash handling, and customer care. Media is not deducted, because media is what the floor is judging, and nothing else is deducted, because nothing else moves when one more order is served. It is stated on the column's ordered turnover and not on its net sales, because a ROAS is measured on the order value the platform attributes and the same dirham has to be on both sides of the division. The transactional floor is one over that contribution. It reads 2.72, against 3.43 when the markdown was still being charged twice, 2.86 when the markdown was left out of the base entirely and 2.19 when the floor was one over the budget gross margin; and it is the same number on the payback panel, on the dynamic budget and on the year secured in advance.
The acquisition floor, and the input it rests on. A source that recruits is not judged on the order it brings. R = 26% × 3.01 × 0.982 = 0.769: the eight-week repurchase rate of a new customer, read from the loyalty-state table on Journey, times the orders a repeating customer places over the following twelve months less the first, times their basket index. Announced input: the model carries no order frequency of its own for the new-customer cohort, so the frequency and the basket index stay the loyalty tiers’ figures, which describe a customer who has come back; cohort frequency and cohort basket from transaction history would replace them, and they are the first two numbers to fit against real data. The acquisition floor is one over the contribution times (1 + R), 1.94, and the effective floor of a source is the two weighted by the share of its attributed orders that come from a customer new to the brand. That share is an announced input too — Paid search 34%, Paid social 62%, Affiliation 41%, Retargeting 11%, Display 48% — because the model carries new customers by commercial mechanic and never by media source. The acquisition floor is a twelve-month contribution floor, not a cash floor: the first order alone returns the transactional floor and the rest arrives over the year, so acquisition spend is capped by working capital as well as by this floor. CAC is stated beside it, media over the new customers media brought, so the two are read together. The point of the two floors is that an acquisition source is judged on the value of the customer and not on the value of the order, which is why retargeting carries the highest floor of the five: it re-sells to customers the business already owns.
Owned channels are sized once. Email, app push, in-app messages, SMS, the loyalty statement and web push are sized on the owned-channel table of CRM & Media and nowhere else. The push and in-app panels on Onsite keep their own shape — which notification carries the volume, which one earns its sends, which one burns the file — and their orders and revenue are levelled to that table, scaled to the share of the digital week the Onsite selection covers. One owned-channel incrementality, the revenue-weighted holdout result of the owned lines on the acquisition table, 65.1%: the growth bridge opens its slider on it rather than on a typed 28%, and both pages now say the same thing about how much of a push is demand created rather than demand moved forward.
Discount by category. The rate is carried by channel and country. The offer calendar carries, by category, the mechanic run each week, the participation of the category and a depth index against the group rate, and that is enough to derive a rate by category, channel and country. It is only worth having if it reconciles, so one scale factor ties the discount it implies in AED to the discount the channel-and-country table already states, and the factor and the identity are printed on the offer panel. The plan side carries no discount by category anywhere, so the same offer structure is assumed on the plan as on the actual; a plan built by category would replace that assumption. The rule that reads it keeps the channel in its grain, because retail is four fifths of the base and runs a small gap to plan: a rate blended across channels never reaches the threshold, and blending would hide exactly the cells that matter.
Promoted stock velocity. The ratio between a promoted and a non-promoted unit is not a stated constant per category. It is now read from the price response the Markdown Engine already uses to clear a block, (1 − depth) to the power of minus the category’s elasticity, evaluated at the depth the category actually runs — its reconciled discount rate divided by the share of it sold on a mechanic, because a rate on all sales understates the depth granted on the slice that carries it. The consequence is the one a trading meeting needs: a deep markdown on a slow category still turns slowly. Home & Lifestyle at 36% depth moves 9.7% of its stock a week against Beauty at 15% depth moving 30.2%, so the response factor is higher on Home and the speed is three times lower.
Bundles. Incremental units = units × (1 − substitution rate). Margin after substitution = incremental units × the bundle’s cash margin, less substituted units × the margin given up when a full-price hero becomes a discounted bundle. Substitution rates are an announced input in the 45 to 75 per cent band; measured rates from a held-out control would replace them. Kit availability is the minimum of the components’ category availability, read from the market inventory policy, because a bundle is only sellable when every part of it is. Bundle revenue is a reallocation of the categories’ existing sales and not an addition: the turnover of the six is already inside the sales of their hero categories, nothing on this page is grossed up by them, and the incremental units are attach units financed by the hero’s margin rather than new demand. The fifth clearance route on the Markdown Engine is priced the same way, on the margin after substitution and never on the units.
Cost layers. The same SKU enters the book at different costs depending on when it was received, and the model carries one cost per category, which is the blend. It is split into the two layers the ageing data distinguishes, the block over twenty-six weeks old and the rest, solved so their weighted average is exactly that blend: ccurrent = cbook ÷ (1 − share over 26 w × inflation), cold = ccurrent × (1 − inflation). Intake inflation between the oldest and the current layer is an announced input per category — Womenswear 9%, Menswear 8%, Kidswear 7%, Footwear 11%, Beauty 5%, Home & Lifestyle 14% — and the old layer carries the whole gap. Break-even discount d* = (ccurrent − cold) ÷ ticket, the depth at which a discounted old unit stops matching a new one at full price on cash. Economic margin = ticket margin on the units, minus the holding cost over the remaining cover at the scorecard’s own rate. The provision released is not added here — it is a balance-sheet movement recognised once, it is stated on its own line under the ledger and in the one-off column of the action board, and adding it to a trading result is how the same money came to be counted twice. The ticket is derived exactly as the Markdown Engine derives it, cost over one minus the renormalised category margin, so the two panels price the same unit at the same shelf price.
The accounting distinction, which is the point of the panel. Under strict FIFO on one SKU the accounts deplete the oldest layer whatever unit physically ships, so choosing to sell the old carton does not change the cost of goods recognised: what the decision is worth is the provision not taken or released, the holding cost avoided, and the pace, because selling faster consumes the cheap layers sooner. The cost-of-goods lever is real only where the layer is a different accounting object — lot costing or specific identification, where the season code changes the SKU — or under weighted average, where the blend itself moves. Intake inflation between layers is a pricing question and not a rotation one: at the same ticket the new layer earns less, and the answer is the price. The method toggle recomputes the columns on all three bases, and the three answers are deliberately different.
Layer mix on the margin bridge. The layer effect is not a step added to the bridge, it is a sub-line of the supplier-cost step. That step is split into what the current intake costs against plan and what consuming the old, cheaper layers gave back, and the two sum to the step: the eight stated steps keep their own values and their signs, nothing is rescaled to make room, and the bridge still closes on its own sum. When the layer line is larger than the step the intake line turns negative, and that is the true reading rather than an artefact — the old layers helped the rate, the current intake costs more. The effect itself is computed on the cost of goods, so it does not depend on which sales base is read: the book sits older than the excess-and-obsolete target the plan was built on, so it draws on cheap layers the budget did not price. Under FIFO this is a pace effect and not a choice of unit: the accounts deplete the oldest layer whatever ships, so selling faster consumes the cheap layers sooner and the gain runs out earlier; it is not earned by picking the old carton.
Beauty is provisioned on expiry, not on age. The share of its book inside six months of expiry is an announced input, 9%, provisioned in full. Those units are taken out of the over-twenty-six-week block first, so the age provision applies only to whatever is left of that block, which on the current book is nothing. Age is secondary for a dated product: a unit is not written down because it is old, it is written down because it will not be sellable.
The inventory policy. Weekly demand d is the category’s trailing four-week outbound, split across markets on that category’s own country mix, so the group cover of every category is exactly the one the stock flow panel states and the policy only distributes it. σd = d × the category’s coefficient of variation × the variability factor of the market. Cycle stock = d × R ÷ 2. Safety stock = z × √((LT + R) × σd² + d² × σLT²), z being the normal quantile of the service target, computed from a rational approximation rather than a table: z(93%) = 1.48, z(95%) = 1.65, z(97%) = 1.88. Target cover = assortment cover + (cycle + safety) ÷ d. Actual cover = stock ÷ d, the stock being the target times an execution factor and renormalised, one factor per category, so each category ties to its own line of the group book. Expected availability = Φ(z of the actual position), taken on one option of the assortment plan rather than on the category aggregate, because availability is a shelf measure and a category holding eighteen weeks of cover can still be out of the middle of its size curve; the spread is then recentred on the availability the control table states, so the policy sets the difference between markets and not the level.
Seasonal and replenishable. A seasonal category is bought once for a season, so the middle of its cover band is the assortment it has to present and the replenishment component sits on top. A replenishable category is reordered continuously, so its target is a presentation floor — the bottom of its band, the least a shelf can hold and still be shoppable — plus the replenishment cycle and its safety stock, capped by shelf life rather than by a season, Beauty at 26 weeks. The two kinds therefore answer the same question with different weights: for Beauty the floor is 6 weeks and the market component adds between 1.5 and 3.6 depending on the lead time it is served on, so a market with a five-week lead time has to hold materially more of the same category than one replenished weekly from the hub.
Execution factors e(c,k) above: what the book actually carries against the policy it should carry, stated and relative within a category. The unit costs of the categories are calibrated once at load by a single factor, currently 1.57, so that units × unit cost equals the cost of goods implied by the plan at plan margin; cover, sell-through and every ratio are unaffected by it, only the valuation is.
Product affinity — what the transactions identify, and what they do not.
Integrated business planning — the four reviews, and what forecast value added would need.
The risk & opportunity register — the amount is a function, the probability is the input.
Working capital — three legs, two bases, and what is deliberately not recomputed.
Four rules read panels that carry no category dimension at all: the out-of-stock lines, media, onsite search and the delivery promise. Under a category filter their value is shared out on that category’s weight in the turnover of the selection, and the line itself says so. That weight is an allocation key and not a measurement — it is there so that the six categories add back to the group rather than each carrying the whole of it. The out-of-stock lines do carry a product category, but named on a different taxonomy than the six categories of this page, so they are shared out with the others until the two are reconciled. Note also that a category filter can produce more lines than the group rather than fewer, and that is the point of it: a category can be behind plan in a market whose overall achievement looks perfectly healthy, and a rule reads the cell rather than the average above it.
Everywhere this page states an announced input, it says so on the panel that uses it. This is the shorter list: the extractions that would let a figure be measured rather than declared, each with the panel that is waiting for it and what would change when it lands. It is not a wish list — every line here is something a panel already names as its own limitation, and nothing is added to it that the page does not already admit.
It is stated tab by tab, because a request is accepted or refused by the team that owns the system it comes out of, and because the reader who cares about one of these views should be able to see what it would take to rebuild that view on real data without reading the others. Five columns, and each of them is there because a request without it cannot be costed: the grain — “order line” and “orders by day” are not the same extract, and the second cannot answer a question the first can; the dimensions that have to travel with the row for these panels to filter it the way they filter today; the frequency, because a weekly panel fed monthly is a monthly panel; the kind of system it comes out of, never a product name; and the registry entries that stop being assumptions when it lands. Every path in the last column is resolved against INPUTS at paint time and the reconciliation page fails on one that does not exist, because a request naming a number nobody can find is a request nobody can accept. The five entries above the fold keep their own words and their own place, underneath the row that summarises them.
The list opens at one entry and grows with the sends. A limitation that is written on a panel and nowhere else is a limitation that is read once; collecting them here is what turns them into a request somebody can act on.
Schema: week, sessions, new_customers, orders, sales_aed, retailer_discount_aed, media_spend_aed, plan_sessions, plan_cr_pct, plan_aov, discount_penetration_pct — one row per week, oldest first. Every group-level view and the brief recompute; country, channel and loyalty splits are modelled on top and rescale to your totals.
Every currency figure on this dashboard is net of VAT — turnover, average basket, margin, contribution, cost to serve, Open-to-Buy, stock value. There is one basis and no mixed reading: sales ÷ average basket gives the transaction count on every panel, which is not true of a page that states sales net and the basket tax-inclusive. The reason for choosing the net basis is on the Financials tab: these five markets are taxed at 15%, 14%, 5%, 0% and 0%, so a tax-inclusive comparison between them measures the tax as much as the business, and a P&L is declared net in any case.
This is a deliberate departure from how a commercial team usually reads its week. A trading meeting reads the till — tax included, because that is what the customer paid and what the store manager sees — and finance converts to net afterwards. Both are right, they are not the same number, and the gap on this week is AED 18.3M: 248.9M tax included, 230.5M net. The bridge between the two, country by country, is the first table of the Financials tab.
Two exceptions, labelled where they appear. Markdown depth is expressed off the ticket price, tax included, because that is how a discount is granted and how a customer reads it; its margin consequences are computed net. Payment fees are charged by the scheme on the amount actually collected, which includes the tax, so a fee costs more as a percentage of net sales than its headline rate — that gross-up is applied on the Payments tab rather than ignored.