Availability Calculation for Bundled Products in Norce Commerce
This page explains how Norce Commerce calculates product availability for bundles, specifically for the product types ManagedStructure and ManagedERPPackageWithCalc (and their unmanaged legacy versions). These bundles have their availability values calculated based on their child products.
For availability calculations on ordinary (non-bundle) products, see Availability structures.
Overview: How Bundle Availability is Calculated
Bundles in Norce Commerce are products composed of multiple child products. The system calculates the bundle's availability fields by aggregating and processing the availability data from its children.
Calculated Fields for Bundles
The following fields are calculated for each bundle, per warehouse/location pair:
- OnHandValue: The lowest available quantity among the children, after dividing each child's on-hand value by the required quantity for the bundle.
- IncomingValue: The lowest incoming quantity among the children, after dividing by the required quantity (ignoring null values).
- NextDeliveryDate: The latest next delivery date among the children. If any child lacks a delivery date, the bundle's value is null.
- LeadTime: The largest lead time value among the children.
Note: Calculations are performed per warehouse/location pair. Bundles do not receive a total calculation across all warehouses.
Calculation Logic
- Only child products enabled for the same warehouse/location are included.
- If any required child is not enabled for a warehouse/location, the bundle is not available there.
- Calculations account for the required quantity of each child in the bundle.
- Reservation values are considered in on-hand calculations, but reservation is not stored on the bundle itself.
Example Scenarios
Below are examples illustrating how bundle availability is calculated in different scenarios. Each table is self-contained and includes all relevant context.
Example 1: Both Children Available
A bundle consists of 1 piece of Product A and 2 pieces of Product B.
| Product | OnHandValue | IncomingValue | NextDeliveryDate | LeadTime |
|---|---|---|---|---|
| Child A | 10 | Null | Null | 1 |
| Child B | 10 | Null | Null | 1 |
| Bundle (1 pc A, 2 pcs B) | 5 | Null | Null | 1 |
Explanation:
Child B has 10 units on hand, but the bundle requires 2. The bundle's on-hand value is the lowest available among the children after dividing by required quantity:
- Child A: 10 / 1 = 10
- Child B: 10 / 2 = 5
The bundle's on-hand value is 5.
Example 2: One Child Not Available
Child B is not active (not enabled) on the warehouse/location.
| Product | OnHandValue | IncomingValue | NextDeliveryDate | LeadTime |
|---|---|---|---|---|
| Child A | 20 | Null | Null | 1 |
| Child B | - | - | - | - |
| Bundle (1 pc A, 2 pcs B) | - | - | - | - |
Explanation:
If any required child is not enabled on the warehouse/location, the bundle is not available there.
Example 3: Incoming Value Used
| Product | OnHandValue | IncomingValue | NextDeliveryDate | LeadTime |
|---|---|---|---|---|
| Child A | 0 | 10 | 2022-01-01 | 1 |
| Child B | 20 | Null | Null | 1 |
| Bundle (1 pc A, 2 pcs B) | 0 | 10 | 2022-01-01 | 1 |
Explanation:
Child A has no on-hand value, so the bundle's incoming value and next delivery date are taken from Child A.
Example 4: Different Incoming Values and Dates
| Product | OnHandValue | IncomingValue | NextDeliveryDate | LeadTime |
|---|---|---|---|---|
| Child A | 0 | 10 | 2022-01-01 | 1 |
| Child B | 0 | 22 | 2022-02-01 | 1 |
| Bundle (1 pc A, 2 pcs B) | 0 | 10 | 2022-02-01 | 1 |
Explanation:
The bundle's incoming value is the lowest (after dividing by required quantity), which is 10 from Child A. The next delivery date is the latest among the children, which is 2022-02-01 from Child B.
Example 5: Lead Time Calculation
| Product | OnHandValue | IncomingValue | NextDeliveryDate | LeadTime |
|---|---|---|---|---|
| Child A | 10 | Null | Null | 5 |
| Child B | 10 | Null | Null | 1 |
| Bundle (1 pc A, 2 pcs B) | 5 | Null | Null | 5 |
Explanation:
The bundle's on-hand value is 5 (see Example 1). The lead time is the largest among the children, which is 5 from Child A.
Example 6: Reservations and OnHand Calculation
| Product | OnHandValue | Reservation |
|---|---|---|
| Child A | 10(*) | 5 |
| Child B | 25 | 0 |
| Bundle (1 pc A, 2 pcs B) | 5 | 0(**) |
Explanation:
On-hand values are calculated after subtracting reservations. Reservation values are not stored on the bundle itself.
Note:
(*) OnHandValue is shown with reservation subtracted in the Admin UI and Norce Commerce Services (but not in Norce Commerce Query).
(**) Reservation field is not used on ManagedStructure or ManagedERPPackageWithCalc products; it is only considered in the on-hand calculation.