# Brand-owner weekly summary — playbook

Plain-English definitions of every term, section, and threshold BIC needs to
produce or interpret a brand-owner weekly summary. One concept per paragraph
so each chunk stands on its own at retrieval time.


## What a brand-owner weekly summary is

A **brand-owner weekly summary** is the Monday-morning deck a single brand
owner (e.g. the owner of VALLI) gets covering the previous Monday-through-Sunday
of trading. It rolls up every store under that one `FORMAT` and shows
performance vs last year, vs ABP target, and vs the prior 13 weeks.

Each `FORMAT` (VALLI, KLM, VML, MANDIR, KM) gets its OWN summary — never
one mixed deck. The Chief Analyst writes a separate card per format so the
owner sees only their brand.

The pipeline runs every weekday at **08:30 IST** (raw computation) and
**09:00 IST** (Chief Analyst curation). Owners sign in by ~10:00 IST and
the homepage shows their cards.


## Week boundary

The weekly window is **Monday 00:00 IST through Sunday 23:59 IST** of the
PREVIOUS week. On Monday morning the summary covers the week that just
closed; it does NOT include any Monday-of-current-week numbers.

For comparisons, **PY-week** is the same Monday-through-Sunday window in the
previous calendar year, NOT the calendar week of last year. We compare
trading days to trading days, not week numbers.

If a Sunday in the previous year was a major festival (Diwali) and this
year's matching Sunday is not, expect a large negative growth artefact —
flag it as a calendar mismatch, do NOT call it degrowth.


## Per-format scope

When the summary says *"VALLI WTD net sales"* it means
`sum(SALE_NET_AMOUNT) WHERE FORMAT='VALLI' AND lower(trType)='sale'` over the
previous Mon–Sun window. ALL stores under that FORMAT roll up together.

When the summary breaks down BY store, it filters to the same FORMAT and
groups by `shortname`. When it breaks down BY section, it groups by
`SALE_SECTION` (or `ABP_Section` when joining with ABP).

Vendor breakdowns within a format use `SALE_VENDORGROUP_NAME` — that's the
"merchandise brand" hierarchy, distinct from the store-format brand
(VALLI/KLM are FORMATs, not vendor groups).


## Section 1 — Sales summary

**What it answers:** how big was the brand last week, compared to LY and to
ABP plan.

**KPIs reported:**
- Net sales for the week (in **crores** at brand level, two decimals)
- Net sales LY-week (same window, previous year)
- YoY growth % = (CY − LY) / LY × 100
- Net sales month-to-date and ABP achievement % MTD
- Bills (count distinct saleId) and units sold

**Anomaly flags raised here:** YoY growth < −10% → **warning**; < −20% →
**critical**. ABP achievement < 80% with > 25% of the month elapsed →
**warning**.


## Section 2 — KPI deep-dive

**What it answers:** are baskets getting heavier or lighter, and is ASP
moving.

**Metrics:**
- **ABS** (Average Basket Size) = `sum(SALE_QTY) / count(distinct saleId)`
- **ABV** (Average Basket Value) = `sum(SALE_NET_AMOUNT) / count(distinct saleId)`
- **ASP** (Average Selling Price) = `sum(SALE_NET_AMOUNT) / sum(SALE_QTY)`
- **SSPD** (Sales per sqft per day) = `sum(SALE_NET_AMOUNT) / sum(AREA) / days_in_window`

All four reported per FORMAT, with WoW % change and YoY % change.

**Anomaly flags raised here:** any KPI > 15% movement WoW → **warning**.
Bill count drop > 10% with ABV growth — flag as **traffic erosion masked
by basket inflation**.


## Section 3 — 13-week trend

**What it answers:** is last week part of a trend, or a one-off.

**Output:** weekly net sales for the last 13 weeks with PY overlay. Same
Monday-of-week boundary as the weekly summary.

**Anomaly flags raised here:**
- 4 consecutive weeks of negative growth → **SUSTAINED_DECLINE_4_WEEKS** (warning)
- WoW step change > 20% (positive or negative) → **STEP_CHANGE_>20%** (warning)
- One-off spike that does not repeat next week — note it but do not flag.


## Section 4 — Store grading

**What it answers:** which stores in this format are pulling the format up
or down.

**Grading scheme** based on YoY growth in the weekly window:
- **A** — growth > +10% AND ABP achievement > 95%
- **B** — growth between 0% and +10% AND ABP achievement > 80%
- **C** — growth between −10% and 0% OR ABP achievement 60–80%
- **D** — growth < −10% OR ABP achievement < 60%

**Anomaly flag:** any store classified D for two consecutive weeks →
**STRUCTURAL_DECLINE_SIGNAL** (critical). Card audience: persona:owner +
designation:area manager covering that store.


## Section 5 — Section / sub-section performance

**What it answers:** within the brand, which merchandise sections drove or
dragged growth.

**Output:** for each `SALE_SECTION` and the top 10 `SALE_SUBSECTION` lines
within it: net sales CY, net sales LY, growth %, contribution % of total
brand sales.

**Anomaly flags raised here:**
- Section growth < −50% week-on-week → **SEVERE_DEGROWTH_>50%** (critical)
- Section appearing in current week with no LY presence → **NEW_SECTION** (info)
- Section with ABP target set but zero sales → **NO_ABP_TARGET_SET** (warning)


## Section 6 — Stock health

**What it answers:** is inventory positioned to support next week's sales.

**KPIs reported per format:**
- Total SOH units and value (in **lakhs**)
- SOH > 180 days as % of total (the "old stock" share)
- MBQ gap = `sumIf(Qty, Data_type='MBQ') − sumIf(Qty, Data_type='STOCK')`
  per (store × section), positive values are shortfalls
- Number of SKUs at zero stock with MBQ > 0 (the "stockout" count)

**Anomaly flags raised here:**
- Old-stock share > 30% → **INVENTORY_BUILDUP_RISK** (warning)
- 100% of brand stock in 180+ age bucket → **100_PCT_OLD_STOCK** (critical)
- Stockout count growing while sales declining → **STOCK_GROWING_REVENUE_DECLINING**
  (critical, cross-cutting)


## Section 7 — Staffing gaps

**What it answers:** are stores understaffed against MBQ.

**KPI:** `required_employees − current_employees` per
`Staff_MBQ_Vs_Current_Staff_Vs_Monthly_Staff` row, summed by store.

**Anomaly flags raised here:**
- Gap > 5 in any single store → **GAP_GREATER_THAN_5** (warning)
- Multiple sections in same store understaffed → **MULTI_SECTION_UNDERSTAFFED** (critical)

Card audience: persona:store_ops + designation:store manager for the affected
store, NOT the brand owner (operational, not strategic).


## Section 8 — CRM / customer retention

**What it answers:** is the brand losing or gaining repeat buyers, and is
the average ticket eroding within a customer segment.

**Metrics:**
- Retained customers / total LY customers (the retention ratio)
- New customers acquired this week
- Largest declining segment (by ASP or by bill count)

**Anomaly flags raised here:**
- Largest segment declining 4 weeks running → **LARGEST_SEGMENT_DECLINING** (warning)
- ASP within a previously-stable segment dropping > 10% → **ASP_EROSION_IN_SEGMENT** (warning)


## Section 9 — Cross-cutting anomalies

**What it answers:** patterns no single section can see.

**Composite flags:**
- All 3 KPIs (sales, units, bills) declining together → **ALL_3_KPIs_DECLINING** (critical)
- Stock growing while revenue declining → **STOCK_GROWING_REVENUE_DECLINING** (critical)
- A store with no sales at all in WTD → **NO_SALES_IN_WTD** (critical, store-ops)
- ABP target row missing for an active store → **ABP_TARGET_MISSING** (warning, data-quality)
- ASP eroding inside the CRM segments while net sales look flat at brand level →
  **CRM_ASP_EROSION** (warning) — masked margin compression.


## Section 10 — Synopsis (executive summary)

**What it answers:** the 30-second version for the brand owner.

**Format:** 4–6 bullet points. The Chief Analyst writes this — it must
NAME the number, NAME the comparison window, and NAME the action. Example:
*"VALLI WTD ₹3.42 Cr, down 8.4% vs PY-WTD; VAL-HYD store flagged D for
second week — area manager review by Wednesday."*

The synopsis is also the body of the homepage card; everything else is
drill-down. Length cap: 60 words.


## Lakhs vs crores in this report

Within a single format's weekly summary, headlines (brand-level totals)
are in **crores** to two decimals. Store-level figures are in **lakhs**.
Section-level breakdowns are in **lakhs**. Vendor-level breakdowns are in
**lakhs**.

Never mix units within one bullet. Always state the unit explicitly when
quoting a figure: `₹3.42 Cr`, `₹84.50 L`.


## Severity thresholds — quick reference

Card severity follows a single table the Chief Analyst applies:

- **critical** — directly affects revenue, target attainment, or stockout risk:
  YoY growth < −20%, ABP achievement < 60% with the month half-elapsed,
  100% old stock, all-3-KPIs declining, structural decline signal.
- **warning** — soft early signals: WoW step change > 20%, MBQ gap > 5 staff,
  ASP erosion in a segment, sustained 4-week decline, retention drop.
- **info** — noteworthy positives or context: new section appearing, growth
  > +20% in a section, new customer acquisition spikes.

Cards default to **info** when in doubt — over-warning erodes trust.


## Audience tagging conventions for the Chief Analyst

Each card the Chief Analyst writes from a brand-owner weekly summary should
carry one of:

- `persona:owner` — visible to every brand owner. Use for cross-brand patterns.
- `user:<id>` — visible only to the named brand owner. Use when the card is
  specific to that one brand and that one person should act on it. The
  pipeline knows: VALLI → user X, KLM → user Y, etc.
- `designation:area manager` — operational signals about a region (stockouts,
  store grading drops). Surface to area managers in addition to the owner.
- `designation:store manager` — store-specific operational items only.
  Brand owner generally does NOT need to see these.

A card can hold 1–3 audience tokens. Bias toward `user:<owner-id>` for the
weekly synopsis card; use `persona:owner` for items the whole owner cohort
benefits from seeing.


## Ask BIC about this playbook

- "What goes into a brand owner weekly summary?"
- "What week boundary does the weekly summary use?"
- "When is a store graded D?"
- "What threshold makes a sales drop critical?"
- "How are lakhs vs crores used in the weekly report?"
