Fluent Commerce Logo
Docs

Future Inventory - Data Model and API Overview

Essential knowledge

Intended Audience:

Technical User

Author:

Kirill Gaiduk

Changed on:

27 Mar 2026

Overview

Future Inventory extends the Inventory and Virtual Catalog data models to represent inventory that is not yet physically available but is expected to arrive at a known point in time. It enables availability and reservation decisions against future stock using explicit dates and quantities.Future Inventory supports scenarios such as pre-orders and wholesale commitments, where inventory must be promised before receipt, while preserving a single physical inventory model per product and location.This document explains the data model and GraphQL API capabilities introduced for Future Inventory.

Key points

  • Prerequisites: You should have knowledge of Inventory Module, GraphQL API (Fluent Platform Integrations), and Workflow Framework
  • Future Inventory represents expected stock with defined arrival dates, not forecasts
  • Future Inventory can be reserved and committed prior to physical receipt
  • Available-to-Promise (ATP) quantities can be queried as of a future date, accounting for on-hand, expected, and already-reserved inventory
  • Inventory lifecycle states (for example: on order → in transit → received) are represented explicitly within the data model

Data Model

The following mind map shows where the Future Inventory solution sits in the Fluent platform.No alt providedThe following data model outlines the entities available to manage Future Inventory.No alt provided

Entities

These are the core entities involved in Future Inventory.
EntityDescription
`InventoryPosition`1Inventory Position is the core aggregate entity representing the complete inventory state for a specific product (SKU) at a specific inventory node: a warehouse, store, fulfillment centre, or drop-ship supplier. It is the primary unit of inventory tracking in the platform. A single Inventory Position consolidates all the granular stock information for that product-location combination into one addressable record.
`InventoryQuantity`2A single inventory state record within a position, representing a lifecycle state such as on-hand, on-order, in-transit, or reserved. Quantities can nest under a parent quantity to model derived states, for example a reservation against an on-hand or on-order quantity.
`VirtualPosition`3Virtual availability record for a product at a location. Represents the current Available-to-Sell quantity after reservations and buffers, and serves as the point from which future availability segments project forward.
`VirtualSegment`4Time-based availability projection for a virtual position. It creates a logical subdivision within a virtual position, enabling multiple distinct availability records to exist for the same product-location combination

Relationship Details

The following relationship patterns are foundational in the Future Inventory model.
RelationshipTypeDescription
Position to QuantitiesOne `InventoryPosition` to many `InventoryQuantity`A single position holds all inventory quantities for a product at a location across the full lifecycle, including on-hand, on-order, in-transit, and reserved. This is the foundation for cross-state aggregation at a product-location level.
Quantity to QuantitiesOne `InventoryQuantity` to many `InventoryQuantity`A parent quantity can hold child quantities representing derived states. For example, a `RESERVED` quantity sits under an `ON_HAND` or `ON_ORDER` parent to track a commitment against that specific stock. The link is maintained via `InventoryQuantity.parent`.
Quantities to Associated EntityMany `InventoryQuantity` to one associated entityLinks a quantity to an external entity via two fields that work as a pair: 
  • `associationType` identifies the kind of entity (for example `PURCHASE_ORDER` or `FULFILMENT`)
  • `associationRef` identifies which specific one
Virtual Position to SegmentsOne `VirtualPosition` to many `VirtualSegment`Each segment is anchored to a specific date via `availableOn` and represents the total available-to-promise quantity at that point in time. Together they project availability forward from the position's current available-to-sell quantity.

GraphQL Operations

This section summarizes the GraphQL queries and mutations commonly used to work with Future Inventory.

Mutations

OperationDescriptionCommon Future Inventory InputsReturnsComment
`createInventoryQuantity`Creates an Inventory Quantity record, including future-dated and association-linked quantities
  • Future arrivals:
    • `expectedOn`
    • `quantity`
  • Derived quantities:
    • `parent`
  • Reservations / commitments:
    • `associationType`
    • `associationRef`
  • Lifecycle constraints:
    • `expiresOn`
`InventoryQuantity`Use to represent planned arrivals, reservations, and other lifecycle events
`updateInventoryQuantity`Updates an existing Inventory Quantity as inventory progresses through its lifecycle
  • State transitions:
    • `status`
`InventoryQuantity`Use when arrival dates shift, quantities change, or reservations are created/released
`updateInventoryQuantityChildren`
  • Bulk updates direct child Inventory Quantities under a specified parent
  • Supports updating status and reassigning children to a different parent using filter criteria
  • Filter criteria - `UpdateInventoryQuantityChildrenFilterInput`:
    • `parent`
      identifies the parent Inventory Quantity that scopes the operation
    • Child quantities to update selection filters:
      • `type`
      • `status`
      • `expectedOn`
      • `expiresOn`
      • `associationType`
      • `associationRef`
  • Updates to apply definition - `UpdateInventoryQuantityChildrenPatchInput`:
    • `status`
    • `parent`
List of updated `InventoryQuantity`
  • Recommended for bulk operations on child quantities in future inventory hierarchies, including:
    • reservation reassignment
    • lifecycle status transitions
  • Supersedes `updateInventoryQuantitiesStatus` for new implementations
`createVirtualPosition`Creates a Virtual Position and its future availability projections through Virtual Segments
  • Future projections:
    • `segments: [UpsertVirtualSegmentInput]`
      Each segment typically includes:
      • `availableOn`
      • `quantity`
      • optional `segment`
`VirtualPosition` (with segments)Preferred way to create virtual availability together with future segments
`updateVirtualPosition`Updates a Virtual Position and its future availability segments
  • Segment updates:
    • `segments` with revised values:
      • `availableOn`
      • `quantity`
`VirtualPosition` (updated segments)Use to maintain or adjust future availability projections over time

Queries

OperationDescriptionCommon Future Inventory Filters ReturnsComment
`inventoryPosition.quantitiesAggregate`Aggregates physical inventory quantities for a specific Inventory Position across lifecycle states and time windows
  • Lifecycle state:
    • `type`
    • `status`
  • Future window:
    • `expectedOn`
    • `expiresOn`
  • Reservation context:
    • `associationType`
    • `associationRef`
Aggregate totals (quantity summary)Use to calculate on-hand vs future totals at a product-location level
`inventoryQuantity.quantities`Retrieves the direct child quantities for a given parent Inventory Quantity
  • Hierarchy anchor:
    • Parent `InventoryQuantity` reference
List of child `InventoryQuantity`Returns one hierarchy level (direct children only). Useful for tracing derived states
`inventoryQuantity.quantitiesAggregate`Aggregates the direct child quantities for a given parent Inventory Quantity
  • Hierarchy anchor:
    • Parent `InventoryQuantity` reference
  • Lifecycle state:
    • `type`
    • `status`
  • Future window:
    • `expectedOn`
    • `expiresOn`
  • Reservation context:
    • `associationType`
    • `associationRef`
Aggregate totals (child summary)Summarizes lifecycle-derived layers such as reservations under an arrival quantity
`inventoryQuantities`Searches inventory quantities at a catalog level using filter criteria
  • Lifecycle state:
    • `type`
    • `status`
  • Future window:
    • `expectedOn`
    • `expiresOn`
  • Reservation context:
    • `associationType`
    • `associationRef`
List of `InventoryQuantity`Useful for cross-position reporting and reconciliation scenarios
`inventoryQuantityAggregate`Aggregates inventory quantities at a position level
  • Hierarchy anchor:
    • `position`
  • Lifecycle state:
    • `type`
    • `status`
  • Future window:
    • `expectedOn`
    • `expiresOn`
  • Reservation context:
    • `associationType`
    • `associationRef`
Aggregate totalsUse when totals are needed with scoping to a single Inventory Position
`virtualPosition`Retrieves virtual availability, including future availability evaluation
  • Time evaluation:
    • `availableOn`
  • Optional segmentation:
    • `segment`
`VirtualPosition`  (+ selected segment availability)Returns availability “as of” a specific date when `availableOn` is provided
`virtualPositions`Retrieves virtual availability across multiple positions
  • Time evaluation:
    • `availableOn`
  • Optional segmentation:
    • `segment`
List of `VirtualPosition`Use in sourcing and promising flows requiring multi-position evaluation
`virtualPosition.segments`Retrieves the Virtual Segment records attached to a specific Virtual Position
  • Future projections:
    • `availableOn`
    • `quantity`
    • `createdOn`
    • `updatedOn`
    • optional `segment`
`VirtualSegmentConnection`Use when underlying segment records are needed instead of only the resolved quantity returned by `virtualPosition`

Explanation Through An Example

This example serves as a practical walkthrough of how physical inventory quantities and future availability are intended to be represented for a single product and location

High-Level Example

Product GamingChair-Black is managed at location WH_EU.The business has inventory available today, additional inventory expected in the future, and existing reservations already created against upcoming fulfillments.No alt provided

Narrative Overview

  • Q001 represents 100 units of on-hand inventory. 
  • Two reservations are created under it: R001 for 5 units and R002 for 10 units, both linked to fulfillments.
  • As a result, Available-to-Sell is reduced from 100 to 85, which is reflected in the base Virtual Position (VP001).
  • In parallel, two purchase-order-backed inventory quantities represent future supply arriving on different dates.
  • Reservations can also be created directly against these future quantities, reducing what can be promised once the inventory is received.

Calculation Walkthrough

  • Available now (VP001)
    `LAST_ON_HAND` inventory is reduced by reservations already committed against it: VP001 = 100 − 5 − 10 = 85
  • Available as of 2026-01-01 (VS001)
    Availability builds on the baseline by adding the first purchase order quantity and subtracting reservations linked to that inbound supply: VS001 = 85 + (80 − 10) = 155
  • Available as of 2026-02-01 (VS002)
    Availability further increases once the second purchase order arrives: VS002 = 155 + 200 = 355

API Usage

The inventory quantities and availability shown in this example are created and retrieved using the GraphQL mutations and queries described in the GraphQL Operations section. In particular:

Key Insights

  • Future Inventory models future supply using standard Inventory Quantities with dates and hierarchy
  • Reservations can be created before inventory is received and explicitly linked to a specific inbound quantity, ensuring future promise is reduced correctly
  • Virtual Segments represent cumulative availability at a point in time, not individual arrivals