Sample output from the Supply Allocation Logic Evaluation prompt in the Sonar AI Prompt Library, run against a NetSuite test account. Every name and number here is test data. Back to the post · The library

πŸ” Supply Allocation Logic β€” Instance Evaluation

Account TD3095879 Β· "Stairway for Retail US v26.1" Β· Evaluated 2026-08-08 by Sonar AI (live configuration inspection + hands-on test orders)
βœ“ Supply Allocation (SUPPLYALLOCATION) βœ“ Sales Channel Allocation βœ“ Order Reservations (in use) βœ“ Available-to-Promise (ATP) βœ— Automatic Location Assignment βœ— Demand Planning βœ— Inventory Status
ELI5 β€” THE ONE-PARAGRAPH VERSION

This account uses NetSuite's modern Supply Allocation engine (not just the classic "commit what's on the shelf" logic). When a sales order is entered, NetSuite immediately promises inventory to it β€” and it's allowed to promise future inventory too: stock that hasn't arrived yet but is on an inbound purchase order, transfer order, or work order. It decides who gets what using allocation strategies (rulebooks), order priorities (1 = most important), and sales-channel reservations (e.g., a block of stock is fenced off for Amazon, and Amazon orders may only eat from that fence). Everything happens automatically at order entry, synchronously β€” there's no overnight batch allocation job.

1. Executive Summary

Supply Allocation
Primary engine β€” feature flag confirmed true at runtime
3 strategies
2 predefined + 1 custom ("ASAA-Available-Reserved")
Default: "Available"
New SO lines auto-assigned strategy id -2 (verified by test order)
Future supply: YES
POs / TOs / WOs / Inbound Shipments count as allocatable supply

Bottom line: This is a NetSuite Supply Allocation instance (the successor to plain item commitment), configured to allocate as-soon-as-available, partial-quantity, closest-to-ship-date, from both on-hand and future (inbound) supply, with ATP-based promise dates, line-level order priority, and channel-fenced supply via Order Reservations. The account is a retail vertical demo/dev build ("Stairway for Retail") that contains six purpose-built demonstration scenarios exercising each allocation capability β€” which made the behavior easy to verify empirically.

2. Feature Flags β€” What's ON and OFF

Probed live via N/runtime.isFeatureInEffect (not guessed from UI):

FeatureStateMeaning for allocation
SUPPLYALLOCATIONTRUEThe modern allocation engine is the system of record. Adds quantityallocated, allocation strategies, allocation alerts.
SALESCHANNELALLOCATIONTRUESupply can be fenced per sales channel; channels carry allocation priority.
AVAILABLETOPROMISETRUEPromise dates computed from cumulative supply/demand timeline.
MULTILOCINVTTRUEAllocation is per-location (13 locations; nearly all demo supply sits in 03: Chicago DC, id 5).
SUPPLYCHAINCONTROLTOWER / SUPPLYCHAINPREDICTEDRISKSTRUESupply Chain Control Tower surfaces allocation exceptions ("Reallocate" alerts observed on lines).
ORDERALLOCATION / AUTOLOCATIONASSIGNMENTFALSENetSuite does not pick the fulfillment location automatically β€” the location is whatever is entered on the line.
DEMANDPLANNINGFALSENo demand-plan-driven allocation; item replenishment fields (MRP / Reorder Point) exist but no planning engine runs.
INVENTORYSTATUSFALSENo status-based supply exclusion (e.g., "Quarantine" stock). The "Inspection" location (id 6) plays that role instead, with makeinventoryavailable = F.
WMSSYSTEM / FULFILLMENTREQUEST / CROSSSUBSIDIARYFULFILLMENTFALSENo WMS or store-fulfillment layer sitting on top of allocation.
ELI5

Think of the warehouse as a bakery. This bakery promises cakes to customers the moment they order β€” including cakes still in the oven (inbound POs). It does not automatically decide which branch bakes your cake (no Automatic Location Assignment), and it doesn't forecast how many cakes to bake next month (no Demand Planning).

3. The Commitment Engine Settings

Extracted from the hidden preference fields on /app/setup/acctsetup.nl (Accounting Preferences β†’ Order Management):

PreferenceValueEffect
NEWITEMCOMMITMENTTThe new (Supply Allocation) commitment engine is active β€” this is the definitive marker that classic commitment has been superseded.
DELAYEDTRIGGERCOMMITMENTFCommitment/allocation runs synchronously at order save β€” verified: my test order had quantitycommitted=5 the instant it was created.
COMMITORDERSAFTERDECOMMITTINGTWhen stock is freed (de-committed), other open orders are automatically re-committed.
ENABLEINVENTORYALLOCATIONTRACKING
ENABLEINVFUTURESUPPLYTRACKING
ENABLEINVINSTOCKSUPPLYTRACKING
ENABLEINVDEMANDSUPPLYTRACKING
T (all)Full supply/demand pegging trails are being tracked, for both in-stock and future supply.
FULFILLCOMMITTED ("Fulfill Based on Commitment")ALLOW UNCOMMITTEDWarehouse can ship quantities even if not committed β€” allocation guides but does not hard-block fulfillment.
PICKINGTICKETUNCOMMITTEDFPicking tickets print committed lines only.
DROPSHIPINCLUDECOMMITTEDTDrop-ship PO quantity includes committed quantities.
VALIDATE_LOT_AVAIL_QTY_AT_COMMITFLot-level availability not enforced at commit time.
ALLOCATION_AUTO_FIX_DATA / ALLOCATION_WORK_QUEUE_THREAD_LIMITT / 25Background allocation data-repair enabled; work queue capped at 25 threads.

4. Allocation Strategies Defined

From the orderallocationstrategy table (SuiteQL):

IDNameFuture supply?Complete qty only?Closest to ship date?Uses ATP?Allowed future order types
-2Predefined Available Allocation Strategy ← DEFAULTYesNo (partial OK)YesYesInbShip, PurchOrd, TrnfrOrd, WorkOrd
-3Predefined Complete Allocation StrategyNoYes (all-or-nothing)NoYesβ€”
2ASAA-Available-Reserved (custom)YesNo (partial OK)NoYesInbShip, PurchOrd, TrnfrOrd, WorkOrd

Observed usage across all 26,800+ SO lines: 8,240 lines carry the default strategy -2, 11 lines use the custom strategy 2 (the demo scenarios), and ~18,550 older/non-inventory lines carry none. Line-level orderpriority values 0–6 are actively used (15,077 lines at priority 0; scattered 1–6 on the demo orders). My unmodified test order was stamped with strategy -2 automatically β€” confirming it is the account default (also visible as defaultorderallocationstrategy: "-2" in the SO line UI payload).

ELI5

A strategy is the rulebook NetSuite follows when handing out inventory. The default rulebook here says: "Give the order whatever you can, whenever you can β€” partial is fine, counting stock that's still on its way, and prefer supply that lands closest to the date the customer wants." The alternative rulebook (Complete Allocation) says "all-or-nothing", and the custom one is a variant used for reserved/channel scenarios.

5. Channel Fencing & Order Reservations

Sales ChannelIDAllocation priorityOnly use reservations as supply?
Retail Store1β€”No
Web Store2β€”No
Amazon32YES β€” fenced
Other Channels41 (highest)No
Wholesale5β€”No

Four live Order Reservation transactions (type = OrdResv) exist, reserving supply at Chicago DC for specific channels β€” e.g., reservation #3 holds 10 units of NS-SA-Channel for Amazon, and reservations #4/#5 hold 25/50 units of NS-SA-EIA for Amazon/Wholesale. Because Amazon is flagged "only use reservation as supply," Amazon orders can consume only their fenced stock β€” they can't raid general inventory. Accounting Preferences also shows an Order Reservations approval-routing section and a Supply Change Order section (default status: Pending Approval), both part of the Supply Allocation suite.

ELI5

Imagine roping off a section of the stockroom with a sign that says "AMAZON ONLY." Amazon orders shop only inside the rope; everyone else shops the rest of the room. "Other Channels" gets VIP treatment (priority 1) when inventory is scarce.

6. ATP β€” Promise Dates

All 157 configured items (100%) use atpmethod = CUMULATIVE_ATP_WITH_LOOK_AHEAD. This means when NetSuite computes an expected ship date, it builds a running supply/demand timeline and is allowed to "look ahead": future inbound supply can cover earlier demand as long as no intermediate demand is shorted. Verified in practice: a test order for an out-of-stock item (all supply already allocated to other orders) got expectedshipdate = 10/7/2026 β€” pushed past the last inbound PO (9/28) because that PO's units were already spoken for.

ELI5

ATP is the answer to "if you order now, when can we ship it?" β€” calculated from a calendar of everything arriving and everything already promised. This account uses the smartest of NetSuite's three ATP flavors.

7. Empirical Verification β€” Test Orders

I created three sales orders and one item fulfillment (all deleted afterward β€” zero residue) against the demo items, which live almost entirely at 03: Chicago DC (location 5):

TestSetupResultConclusion
#1 β€” In-stock demand
SO 63174
5 Γ— NS-SA-Channel (30 available at Chicago DC) Instantly: quantitycommitted=5, quantityallocated=5, backordered=0, ship date = same day, strategy auto-set to -2 Allocation is synchronous at order entry; default strategy applied without user input.
#2 β€” Zero available
SO 63175
10 Γ— NS-SA-ASAA-RES (0 available; 150 inbound on 2 POs β€” but 200 already allocated to SO007462) allocated=0, backordered=10, ship date pushed to 10/7/2026, line flagged allocationalert = "Reallocate" Future supply is finite and first-come-first-served β€” once pegged to another order, it's gone. The engine raises a Reallocate exception instead of double-promising.
#3 β€” Custom strategy
SO 63176
Same as #2 but explicitly using strategy 2 (ASAA-Available-Reserved) Identical result β€” still nothing to give Strategy changes how supply is selected, but can't conjure supply that's already allocated.
#4 β€” Fulfillment
IF 63178
Transformed test SO #1 β†’ Item Fulfillment, shipped 5 units Fulfillment saved & shipped cleanly; line went isfullyshipped=T Committed/allocated stock flows straight through to fulfillment; "Allow Uncommitted" preference means no hard commitment gate.

The smoking gun: SO007462 (pre-existing demo order)

Order SO007462 wants 250 units of NS-SA-ASAA-RES. On hand at Chicago DC: 50. Inbound POs: 50 (9/10) + 100 (9/28). Its line shows quantitycommitted = 50 (physical stock) but quantityallocated = 200 (stock + both inbound POs) and backordered = 200. That 50/200 split is the signature of Supply Allocation: commitment covers only what's on the shelf, while allocation additionally pegs future supply β€” 200 = 50 + 50 + 100 exactly. The remaining 50 units of unmet demand triggered the "Reallocate" alert. My test orders #2/#3 then proved that this pegging is exclusive: no other order could touch those inbound units.

8. Demo Scenarios Found in the Instance

The account contains six purpose-built items (all named NS-SA-*, memo "Demo - Supply Allocations") each exercising one capability β€” useful as a living reference:

ItemScenarioWhat it demonstrates
NS-SA-ASAA-RESAs-Soon-As-AvailableAllocating on-hand + future PO supply to one large order (the 50/200 example above).
NS-SA-Fill RateFill-rate / prioritySix competing orders with priorities 1–6 splitting 3 on-hand + 13 inbound; higher priority lines got allocated first (priority 1 β†’ allocated 3; priority 5 β†’ allocated 0).
NS-SA-ReallocateReallocationMoving allocation between orders (one order allocated 100 incl. future; two others stripped to 0, priority 1 winning).
NS-SA-ChannelChannel fencingOrder Reservations per channel + "only use reservation as supply" on Amazon.
NS-SA-EIAEarliest Item AvailabilityReservation-backed supply consumed across channels with earliest-availability logic.
NS-SA-GP01Gross ProfitAllocation weighed against order profitability.

9. What is NOT in play

10. Methodology β€” How I Arrived at These Conclusions

1
Runtime feature probe
Executed N/runtime.isFeatureInEffect server-side for ~35 candidate features. This is authoritative β€” it reflects what the engine actually enforces, not what the UI implies. Result: SUPPLYALLOCATION=T, SALESCHANNELALLOCATION=T, AVAILABLETOPROMISE=T, with location-assignment/demand-planning/WMS all off.
2
Preference extraction from the live Accounting Preferences page
The N/config module was blocked in this session, so I loaded /app/setup/acctsetup.nl in a hidden iframe and read the actual form fields from the DOM β€” capturing NEWITEMCOMMITMENT=T, DELAYEDTRIGGERCOMMITMENT=F, FULFILLCOMMITTED=ALLOWUNCOMMITTED, the four allocation-tracking flags, and the Order Reservations / Supply Change Order approval sections.
3
Schema + data interrogation via SuiteQL
Queried orderallocationstrategy (3 strategies with full rule flags), saleschannel (priorities + reservation fencing), item.atpmethod (100% cumulative-ATP-with-look-ahead), location.makeinventoryavailable, per-location balances in inventoryitemlocations, and line-level quantitycommitted / quantityallocated / quantitybackordered / orderpriority / allocationalert / orderallocationstrategy across 26,800+ SO lines, plus all OrdResv transactions and inbound POs for the demo items.
4
Controlled experiments (created β†’ observed β†’ deleted)
Three test sales orders + one item fulfillment against the demo items proved: (a) allocation fires synchronously at save; (b) strategy βˆ’2 is auto-applied; (c) future supply is pegged exclusively to the first order that claims it; (d) shortage produces a "Reallocate" exception and a pushed-out ATP date; (e) fulfillment proceeds under "Allow Uncommitted." All four test records were deleted afterward β€” the account is exactly as I found it.
5
Cross-check arithmetic
Verified the pegging math independently: SO007462's quantityallocated (200) = on-hand 50 + inbound PO 50 + inbound PO 100 β€” an exact match, confirming the future-supply interpretation rather than coincidence.

11. Recommendations / Observations

Generated by Sonar AI Β· 2026-08-08 Β· All findings verified against live account data (SuiteQL, N/runtime, DOM inspection of Accounting Preferences) and empirical test transactions (created & removed). Test artifacts deleted: SO 63174, 63175, 63176; IF 63178.