CHAPTER 05Disaggregation Rules
Req. prefix: DRv0.5 draft
This chapter defines how weights are formed at each stage. Ch. 06 defines the order in which
stages run and the arithmetic (rounding, invariants). One default rule family — forecast-proportional —
plus two overrides, each owning exactly one stage: phase profiles (UPC→product) and
split tables (location).
5.1Default rule: forecast-proportional
DR-01Unless overridden by DR-05…DR-09, the basis at every stage is the
current forecast, aggregated to the granularity of that stage and restricted to the entry's scope:
- Time stage: forecast summed over all in-scope products and locations, per week of the entry period.
- Attribute→UPC stage: per week — forecast of in-scope products, summed over in-scope locations, aggregated per UPC. Only UPCs containing at least one in-scope product participate.
- UPC→product stage: per UPC and week — forecast per in-scope product of that UPC (fallback when no phase profile resolves, DM-15).
- Location stage: per product and week — forecast per location in scope.
Forecast bases are raw weights and need not sum to any particular value; only their proportions matter.
DR-02Bases are computed on the fly from the current forecast at the moment
of disaggregation. No intermediate aggregates are persisted.
DR-03Zero total basis = error, not fallback. If the basis for a
required split sums to zero (e.g. no forecast anywhere in scope for the period, or — at the attribute→UPC
stage — every UPC under the attribute aggregates to zero), the entry goes
InError per GL-05/HE-08. The system MUST NOT fall back to even splits.
Individual elements with zero weight are NOT an error: they simply receive nothing (e.g. an attribute-scoped
entry is valid as long as at least one of its UPCs has forecast in the period).
DR-04Customer scope does not filter the forecast (the forecast has no
customer dimension). A customer-scoped entry uses the same forecast bases; customer affects only the
resolution of phase profiles (DM-15) and split tables (DM-09).
5.2Phase profiles: NPI & EOL at the UPC→product stage
DR-05At the UPC→product stage, for each (UPC, week): resolve a phase-profile
row set per DM-15. If found, product weights are the profile fractions restricted to the entry's in-scope
products, renormalized over that in-scope subset — if the surviving fractions sum to s with
0 < s < 1 (the entry's attribute filter cuts through a phasing UPC), each is
divided by s, so the full UPC-week amount is placed on the in-scope products and
Σ LO = value_su holds (DF-04). If the surviving fractions sum to zero for that (UPC, week), the
usual zero-total rule applies (DR-03/DR-07). The forecast is not consulted where a profile resolves. If no
profile resolves, product weights are forecast proportions per DR-01. Profiles are in week-range form
(DM-14/16) and MAY be customer-specific — different customers may run different introduction schedules.
[Q-10 resolved → D-24]
DR-06NPI and EOL are expressions of this one mechanism, not separate
machinery: a new product is a product whose profile share ramps up from zero (it typically has no own
forecast — its volume reaches it precisely through the profile); a phase-out product is one whose
share ramps down to zero. A UPC-level or attribute-level entry therefore transitions volume between old and
new products automatically, because forecast aggregated to UPC level (driven by the outgoing product)
supplies the upper-stage bases, and the profile re-divides it below.
DR-07For weeks where a resolved profile gives an in-scope product the share
0 — before its phase-in or after its phase-out — that product receives nothing (no LO rows, DM-11). This is
the regular zero-weight case of DR-03, not an error. If all in-scope products of a UPC have share 0 in
a week that carries volume, that (UPC, week) has a zero total basis → InError
(DR-03, DR-05).
DR-08At the
location stage, a product with no own forecast (a typical
NPI product) resolves its location weights in this order:
- Own split-table rows (DM-09): if the product has resolved split-table rows for the (week, customer), those fractions are used.
- UPC-sibling location mix (fallback): otherwise the basis is the aggregate forecast location mix of all the product's UPC siblings — the other products under the same UPC that have forecast in the period — summed per location across those siblings and normalised. The NPI product is placed by this combined sibling mix.
- InError: only if the UPC has no sibling with any forecast in the period (a rare case) does the location basis sum to zero and the entry go InError per DR-03, with the proper missing-basis message (HE-08).
A sibling here means a product sharing the same UPC. The MINI dataset seeds an explicit split-table row for its NPI (path 1); the sibling-mix fallback (path 2) is the default when none is supplied.
[Q-03 resolved → D-21]
Example E5-A — U2's phase profile (dataset of Ch. 02)
U2's forecast basis (all from P2, only L1): W1 20, W2 20, W3 30, W4 30. The profile divides each week's
UPC amount among P2/P3:
| Week | Rule used | P2 share | P3 share |
| W1 | profile (row W1) | 1.00 | 0.00 |
| W2 | profile (rows W2) | 0.50 | 0.50 |
| W3 | profile (range W3–W4) | 0.00 | 1.00 |
| W4 | profile (range W3–W4) | 0.00 | 1.00 |
U1 has no profile: DM-15(3) applies and its single product P1 takes weight 1 from forecast
proportions. No fake profiles for stable products.
Renormalization (DR-05): suppose an entry's attribute filter matched only P2. In W2
the surviving fraction is 0.5 → renormalized to 1.0: P2 receives the full U2 amount of that week. In W3–W4
the surviving total is 0 → InError if those weeks carry volume (DR-07).
5.3Split tables: forward-looking sourcing
When the sourcing network changes, historical or forecast location proportions are wrong. Split tables
declare the future proportions explicitly, per product, in week-range form, optionally per customer.
DR-09At the location stage, for each (product, week): resolve a split-table
row set per DM-09. If found, location weights are the table fractions; the forecast is not consulted for this
(product, week). If not found, DR-01 applies (or, for a product with no own forecast, the sibling-mix fallback
of DR-08). No scope restriction arises here: the entry's location scope is either ALL (nothing to restrict)
or a single location — in which case the stage is skipped entirely (DR-10).
DR-10Explicit scope wins over splitting bases. An entry whose
location scope is a single location is already at the location stage's grain and passes that stage through
unchanged (DF-01): all volume is placed on the scoped location, even if the forecast or a split table gives
that location weight 0. The same principle holds in the product dimension: a product-scoped entry skips the
UPC→product stage, so phase profiles are never consulted for it — a planner MAY deliberately enter volume on
a product in weeks where its profile share is 0 (e.g. beyond its phase-out). Explicit low-level scope
expresses planner knowledge and MUST NOT be second-guessed; InError arises only
from genuinely zero total bases at stages that actually split (DR-03). [Q-08 resolved → D-22]
DR-11Split tables and phase profiles are independent overrides of their
respective stages and compose freely: e.g. an NPI product's volume arises from its UPC's phase profile and is
then placed by its split-table rows (or, absent those, by the UPC-sibling location mix of DR-08).
DR-12Split tables are defined at base-product level only. Hierarchy- or
attribute-level split tables do not exist; week-range rows are the native form (DM-08). [Q-01 resolved]
Example E5-B — sourcing change overrides forecast mix
Basis for P1's location stage, per week. Forecast mix (L1:L2) is 10:30, 20:20, 30:30, 40:20 for W1…W4.
The split table (Ch. 02) declares 50/50 for the range W3–W4.
| Week | Rule used | L1 weight | L2 weight |
| W1 | forecast (no table row) | 10 | 30 |
| W2 | forecast | 20 | 20 |
| W3 | split table (range W3–W4) | 0.50 | 0.50 |
| W4 | split table (range W3–W4) | 0.50 | 0.50 |
A customer-scoped entry on C1 would instead resolve the C1 row set for every week: 100% L1 (DM-09 step 1). P3 resolves its own row set: 100% L1 for W1–W4. An entry scoped to a single location skips this stage entirely (DR-10).
5.4Rule-resolution summary
| Stage | Weight source (in order) | On zero total basis |
| Time | forecast aggregated to scope | InError (DR-03), message per HE-08 |
| Attribute→UPC | forecast aggregated per UPC (in-scope products) |
| UPC→product | 1. customer profile rows → 2. null-customer profile rows (both renormalized over in-scope products, DR-05) → 3. forecast per product |
| Location | 1. customer split rows → 2. null-customer split rows → 3. forecast per location → 4. UPC-sibling location mix (products with no own forecast, DR-08) |
Symmetry: the two middle and bottom stages share one resolution pattern — explicit
customer rule, generic rule, forecast. The location stage adds one further fallback (sibling mix) for
forecast-less NPI products. Entries scoped at or below a stage's grain pass that stage through unchanged and
never consult its rules (DF-01, DR-10).