Skip to content

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.