Identifiers and periodicity¶
An integrated row must remain identifiable across retries, corrections, and reloads. Its date must also represent an event, a consolidated value, or a state snapshot correctly.
How to build an ID¶
Use the source system's natural, immutable identifier first. When the source does not provide one, concatenate the dimensions that define the row's grain.
The composition must be:
- unique: two distinct rows do not share the same ID;
- stable: the same row receives the same ID after a reload;
- reproducible: the rule can be applied again without a local sequence;
- readable: dates use ISO
YYYY-MM-DD, and components preserve leading zeroes.
Use a delimiter that does not occur in the components, or apply a documented
escaping rule. The transactional examples below use |.
Sales consolidated by day¶
When the source provides consolidated values, load one row for each combination of dimensions and day.
| Data set | Assumed grain | Example ID |
|---|---|---|
| Sell-out | date, selling location, and material | 2026-05-31|STORE-02|MAT-001 |
| Sell-in | date, origin, destination, and material | 2026-05-31|DC-01|CUSTOMER-07|MAT-001 |
These examples assume one consolidated row per combination and one unit. If the source keeps values separated by unit, channel, document, or another dimension, include that dimension in the ID or consolidate the values before loading.
Monthly processes¶
When a process uses monthly buckets only, the month's total can be loaded in a single row dated on either the first or the last day of the month. Monthly consolidation assigns the full value to the bucket; it does not spread the quantity across days.
For example, 2026-05-01|STORE-02|MAT-001 and
2026-05-31|STORE-02|MAT-001 belong to the same May bucket. Choose one
convention and preserve it across loads and reconciliations.
Do not use this line-reduction approach when the process must analyze days or weeks, distinguish events, or handle late data within the month.
Inventory is a snapshot, not a flow¶
Sales within a period can be summed. Inventory positions from different dates cannot: each row is a balance snapshot at a cut-off date.
For Supply Planning, load the snapshot at the start of each period:
- monthly buckets: first day of the month;
- weekly buckets: Monday, the first day of the ISO week;
- daily buckets: start of the day itself.
A monthly plan starting in May therefore uses the 2026-05-01 position; a
weekly bucket starting on Monday 2026-05-04 uses that date's snapshot. Later
movements belong to the period's flow and must not be added retroactively to
the opening position.
Relationship with source systems¶
An identifier may reuse compound ERP keys, but the final contract remains an OpsFactor contract. See the ERP integration references for mapping examples that do not move source-specific concepts into the core catalog.
Continue to sell-out, sell-in, inventory positions, and the Supply Planning data model.