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.
The following data model outlines the entities available to manage Future Inventory.

Entities
These are the core entities involved in Future Inventory.| Entity | Description |
`InventoryPosition`1 | Inventory 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`2 | A 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`3 | Virtual 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`4 | Time-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.| Relationship | Type | Description |
| Position to Quantities | One `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 Quantities | One `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 Entity | Many `InventoryQuantity` to one associated entity | Links a quantity to an external entity via two fields that work as a pair:
|
| Virtual Position to Segments | One `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
| Operation | Description | Common Future Inventory Inputs | Returns | Comment |
`createInventoryQuantity` | Creates an Inventory Quantity record, including future-dated and association-linked quantities |
| `InventoryQuantity` | Use to represent planned arrivals, reservations, and other lifecycle events |
`updateInventoryQuantity` | Updates an existing Inventory Quantity as inventory progresses through its lifecycle |
| `InventoryQuantity` | Use when arrival dates shift, quantities change, or reservations are created/released |
`updateInventoryQuantityChildren` |
|
| List of updated `InventoryQuantity` |
|
`createVirtualPosition` | Creates a Virtual Position and its future availability projections through Virtual Segments |
| `VirtualPosition` (with segments) | Preferred way to create virtual availability together with future segments |
`updateVirtualPosition` | Updates a Virtual Position and its future availability segments |
| `VirtualPosition` (updated segments) | Use to maintain or adjust future availability projections over time |
Queries
| Operation | Description | Common Future Inventory Filters | Returns | Comment |
`inventoryPosition.quantitiesAggregate` | Aggregates physical inventory quantities for a specific Inventory Position across lifecycle states and time windows |
| 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 |
| 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 |
| 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 |
| List of `InventoryQuantity` | Useful for cross-position reporting and reconciliation scenarios |
`inventoryQuantityAggregate` | Aggregates inventory quantities at a position level |
| Aggregate totals | Use when totals are needed with scoping to a single Inventory Position |
`virtualPosition` | Retrieves virtual availability, including future availability evaluation |
| `VirtualPosition` (+ selected segment availability) | Returns availability “as of” a specific date when `availableOn` is provided |
`virtualPositions` | Retrieves virtual availability across multiple positions |
| 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 |
| `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.
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:- future arrivals and reservations via
`createInventoryQuantity`mutation - availability “now” and “as of a date” via
`virtualPosition`/`virtualPositions`queries
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
