The Glass-Box PSL methodology, in full.
GobbleCube talks about "spotting leaks" without quantifying INR. Dcluttr names "PSL" but never shows methodology. Both keep the inputs opaque. We do the opposite — publish the formula, expose every input on per-row drill-down, prove tamper-evident continuity through a hash-chained audit ledger. This page is the public companion to the in-app per-row drill-down. Read it before you trust a single PSL number from anyone.
One line of math, expanded.
PSL_paise = lost_units × price_paise
where:
lost_units = max(0, expected_units − observed_units)
expected_units = velocity × stores_with_OOS × OOS_window_days
price_paise = MRP from market_price_snapshots at OOS-window start
OOS_window_days = exact OOS interval from market_stock_snapshotsInputs
- velocity (u/store/day, source-tagged)
- stores_with_OOS (count of dark stores in the OOS interval)
- OOS_window_days (precise interval duration)
- MRP from market_price_snapshots @ window start
- observed_units (real sales in the window, when available)
Outputs
- PSL_paise (integer, in paise)
- PSL_inr (₹ formatted for display)
- velocity source tag (tenant / admin / scrape-inferred)
- audit row chain hash (SHA-256)
- calculation breakdown (every term, expanded)
The lookup order, with source tags
velocity is the single biggest source of methodology disagreement in any PSL system. We resolve it in a strict, source-tagged order — and surface the tag on every row.
1. Tenant or admin override
tenant-configadmin-configThe brand enters per-SKU per-channel velocity directly, based on internal sell-through reports. Admin can override per-tenant from KAM conversations. Highest precedence — used whenever present.
2. Scrape-inferred fallback constant
scrape-inferred5 units / store / day, environment-overridable. Conservative; ensures the formula has a deterministic default for every PSL row even when no tenant override exists. Source-tagged so reviewers know it was the fallback.
imported and provenance evanik-bridge:<runDate>. Q-Radar reads the same collection — it does not know or care where the override came from.Honest about uncertainty
Every PSL row exposes a sensitivity toggle so reviewers can bound the upper edge of the estimate without modifying the ledger.
| Velocity assumption | Resulting PSL (relative) |
|---|---|
5 u/store/day | Baseline (scrape-inferred) |
10 u/store/day | 2× baseline |
15 u/store/day | 3× baseline |
20 u/store/day | 4× baseline |
The toggle is a local recompute — the ledger row is not modified, the audit chain is not broken. Customers use the toggle on internal reviews ("what if Q-Com velocity were 3× what scrape-inferred says") to defend the lower-bound PSL claim with their finance team.
From PSL row to tamper-evident evidence pack
The audit sink is what turns a PSL number into a CFO claim. Here is exactly how it works, end-to-end.
Append-only PSL row
Every PSL computation writes a row to qradar_psl_ledger keyed by (tenantId, masterProductId, channelCode, scrapeBatchId, oosWindowId). ULIDs are chronological + idempotent — re-runs do not duplicate rows.
SHA-256 of (prev_hash + canonical_row_json)
Each row carries chainHash computed as SHA-256(prevRowChainHash || JSON.stringify(rowFieldsCanonical)). Field ordering and serialization are fixed so the hash is reproducible by any reader holding the row data.
Mirror to S3 Compliance-mode bucket
Audit sink is an S3 bucket configured with Object Lock in COMPLIANCE retention mode. Once written, rows cannot be deleted or modified by anyone — including Zobrx engineers, including AWS account root — for the retention window.
Verifier script in the evidence pack
Customer evidence packs ship with a standalone Node.js verifier (~80 lines, no external deps) that walks the chain, recomputes every hash, and reports any break. Auditors run it against the downloaded pack without Zobrx access.
What Glass-Box PSL does NOT claim.
Methodology transparency cuts both ways. We name the things this approach cannot do.
We do not claim PSL equals actual lost sales
Actual lost sales is unobservable — it is the counterfactual where no OOS happened, which never existed. PSL is an estimate calibrated to give brands a defensible INR figure, with the velocity assumption disclosed. We err conservative on the fallback (5 u/store/day) so the unobserved upside, if any, lives in the tenant override.
We do not claim hash-chained audit prevents data corruption upstream
The chain proves continuity of the ledger after rows are written. It cannot prove that the scrape that produced the row was correct, or that the SKU master mapping was right. We harden those upstream pipelines separately (idempotent ULID keys, scrape-batch dedup, master-mapping versioning) but the audit chain is downstream of all that.
We do not claim every Q-Com platform shares the same velocity profile
5 u/store/day is a deliberately conservative default across the catalog. Real velocities on Blinkit vs Zepto vs Instamart for the same SKU can diverge 2–3× because of platform-specific shelf position, app surface area and replenishment cadence. Tenant overrides per-channel are how brands close this gap; the scrape-inferred fallback is only the floor.
We do not claim PSL replaces internal financial reporting
PSL is a forward-looking operational signal — it tells the brand team where to act. It is not GAAP-compliant lost revenue and does not flow into the brand's financial books. Some customers do use the Leak Ledger evidence pack as supporting documentation for KAM negotiations with Q-Com platforms; that is up to them.
When the methodology changes
Today: v1
Every PSL row records the methodology version that produced it. When we ship a v2 (planned: dual-track shelf-PSL + consumer-PSL on every row), v1 rows continue to be valid — the per-row version pin means CFO evidence packs already shared with customers stay defensible. We do not retroactively edit ledger rows; v2 starts a new chain at the v1→v2 boundary and the boundary itself is hash-chained.
Material changes to v1 between minor revisions (e.g. the scrape-inferred fallback constant) require a release-note entry on this page and a methodology-bulletin email to every Q-Radar tenant. Velocity-source-tag definitions are stable — a tag means the same thing forever.
Questions about the formula
Where to go from here
The full Q-Radar product — capabilities, OSA lenses, audit flow, design partners.
The category-defining pillar guide for Q-Com On-Shelf Availability in India.
Side-by-side comparison of the three named Q-Com shelf intelligence tools.
How the SOC 2 / DPDP-aligned audit sink works across all Zobrx surfaces.
Q-Radar's availability feeds the Brand Score availability lever.
Have a methodology question this page does not answer? Email mayank@evanik.ai.
See Q-Radar's PSL drill-down on your data.
The methodology page above is the public version. The in-app version expands every term, surfaces the velocity source tag, hosts the sensitivity toggle, and links to the audit row hash. Book a walkthrough to see it on your SKUs.
- ✓ 14-day free trial
- ✓ No credit card
- ✓ Cancel anytime