Skip to main content

Recalculation Triggers

Understanding what actions cause NetSuite to recalculate inventory costs.


Overview: Cost-Setting vs Cost-Consuming

TRANSACTION TYPES BY COST IMPACT
═══════════════════════════════════════════════════════════════════════════════

┌─────────────────────────────────────────────────────────────────────────────┐
│ COST-SETTING TRANSACTIONS │
│ (These ESTABLISH or CHANGE item cost) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Item Receipt │ │ Vendor Bill │ │ Inventory │ │
│ │ │ │ (Direct) │ │ Adjustment │ │
│ │ Sets cost at │ │ │ │ (QTY PLUS +) │ │
│ │ receipt rate │ │ Sets cost at │ │ │ │
│ │ │ │ bill rate │ │ Sets cost for │ │
│ └─────────────────┘ └─────────────────┘ │ new units │ │
│ └─────────────────┘ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Work Order │ │ Assembly │ │ Customer │ │
│ │ Completion │ │ Build │ │ Return │ │
│ │ │ │ │ │ │ │
│ │ Sets cost from │ │ Sets cost from │ │ Returns at │ │
│ │ components+WIP │ │ components │ │ original cost │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────────────────┐
│ COST-CONSUMING TRANSACTIONS │
│ (These USE the calculated item cost) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Item │ │ Invoice │ │ Cash Sale │ │
│ │ Fulfillment │ │ (Direct) │ │ │ │
│ │ │ │ │ │ │ │
│ │ COGS at │ │ COGS at │ │ COGS at │ │
│ │ current cost │ │ current cost │ │ current cost │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Work Order │ │ Vendor │ │ Inventory │ │
│ │ Issue │ │ Return │ │ Adjustment │ │
│ │ │ │ │ │ (QTY MINUS -) │ │
│ │ WIP at │ │ Returns at │ │ │ │
│ │ current cost │ │ current cost │ │ Uses current │ │
│ └─────────────────┘ └─────────────────┘ │ cost to remove │ │
│ └─────────────────┘ │
│ ┌─────────────────┐ │
│ │ Transfer │ │
│ │ Order │ │
│ │ │ │
│ │ Moves at │ │
│ │ current cost │ │
│ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘

Inventory Adjustment - Special Case

Inventory Adjustment can be either cost-setting OR cost-consuming depending on quantity direction:

Adjustment TypeDirectionCost BehaviorTriggers Recalc?
Positive (+)Adding unitsCost-Setting - You specify the cost for new unitsYes - affects average cost
Negative (-)Removing unitsCost-Consuming - Uses existing calculated costNo - just uses current cost
INVENTORY ADJUSTMENT EXAMPLES
═══════════════════════════════════════════════════════════════════════════════

POSITIVE ADJUSTMENT (+50 units @ $12.00):
─────────────────────────────────────────────────────────────────────────────
Before: 100 units @ $10.00 avg = $1,000
Adjustment: +50 units @ $12.00 = $600
After: 150 units @ $10.67 avg = $1,600

→ COST-SETTING: You specified $12.00 for new units
→ Recalculates average cost
→ Triggers recalculation of subsequent transactions


NEGATIVE ADJUSTMENT (-50 units):
─────────────────────────────────────────────────────────────────────────────
Before: 100 units @ $10.00 avg = $1,000
Adjustment: -50 units @ $10.00 (uses current avg)
After: 50 units @ $10.00 avg = $500

→ COST-CONSUMING: Uses existing $10.00 average cost
→ Does NOT change the average cost rate
→ Just removes value from inventory

Transactions That Trigger Recalculation

Primary Triggers (Cost-Setting)

TransactionTrigger ConditionWhat Gets Recalculated
Item ReceiptAny save/editItem cost, all subsequent transactions
Vendor Bill (Direct)Any save/editItem cost, all subsequent transactions
Vendor Bill (from IR)Rate differs from IRCost variance, subsequent transactions
Inventory AdjustmentWith cost specifiedItem cost layer, subsequent transactions
Work Order CompletionAny completionFinished goods cost
Assembly BuildAny buildAssembly item cost
Customer ReturnReturn acceptedAdds back to inventory at cost

Secondary Triggers (Date/Quantity Changes)

ActionEffectRecalculation Scope
Backdating a receiptChanges cost timelineAll transactions after backdated date
Changing quantityAffects average calculationRecalculates average cost
Changing rateDirect cost changeAll consuming transactions
Deleting transactionRemoves from cost flowRecalculates all subsequent

Flow: What Triggers What

TRIGGER FLOW DIAGRAM
═══════════════════════════════════════════════════════════════════════════════

TRIGGER EVENT RECALCULATION SCOPE

┌──────────────┴──────────────┐
│ │
▼ ▼
┌──────────┐ ┌──────────────┐
│ CREATE │ │ EDIT │
│ NEW │ │ EXISTING │
└────┬─────┘ └──────┬───────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ │
│ Is this a COST-SETTING transaction? │
│ (Receipt, Bill Direct, Adjustment with cost, WO Completion, Build) │
│ │
└────────────────────────────────┬────────────────────────────────────────────┘

┌────────────┴────────────┐
│ │
YES NO
│ │
▼ ▼
┌───────────────────────────┐ ┌───────────────────────────┐
│ ITEM FLAGGED "IN QUEUE" │ │ No cost recalculation │
│ │ │ (but may update GL) │
│ Affected item(s) will │ │ │
│ be recalculated │ │ │
└─────────────┬─────────────┘ └───────────────────────────┘


┌───────────────────────────────────────────────────────────────┐
│ RECALCULATION IDENTIFIES ALL AFFECTED TRANSACTIONS │
│ │
│ From: Transaction date │
│ To: Current date │
│ │
│ All transactions with this item in this date range │
│ will have their COGS/WIP/Inventory values recalculated │
└───────────────────────────────────────────────────────────────┘

Detailed Trigger Matrix

When Item Receipt is Saved

ITEM RECEIPT TRIGGER CHAIN
═══════════════════════════════════════════════════════════════════════════════

Item Receipt Saved (100 units @ $10)


┌─────────────────────────────────────────────────────────────────────────────┐
│ STEP 1: Item X flagged "In Queue" │
└─────────────────────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────────────────────┐
│ STEP 2: Cost Engine collects all Item X transactions after receipt date │
│ │
│ Date Range: Receipt Date ──────────────────────────────────► Today │
│ │
│ Found: │
│ • Invoice #1001 (Date: Day 2) - Sold 30 units │
│ • Cash Sale #2001 (Date: Day 3) - Sold 20 units │
│ • Fulfillment #3001 (Date: Day 5) - Shipped 10 units │
│ • WO Issue #4001 (Date: Day 7) - Used 15 units │
│ │
└─────────────────────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────────────────────┐
│ STEP 3: Recalculate each transaction with new cost │
│ │
│ Invoice #1001: COGS = 30 × $10 = $300 (updated) │
│ Cash Sale #2001: COGS = 20 × $10 = $200 (updated) │
│ Fulfillment #3001: COGS = 10 × $10 = $100 (updated) │
│ WO Issue #4001: WIP = 15 × $10 = $150 (updated) │
│ │
└─────────────────────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────────────────────┐
│ STEP 4: GL entries adjusted via System COGS Adjustment │
│ │
│ Creates adjustment entries to correct GL to match new COGS values │
└─────────────────────────────────────────────────────────────────────────────┘

When Vendor Bill Rate Differs

VENDOR BILL VARIANCE TRIGGER
═══════════════════════════════════════════════════════════════════════════════

Item Receipt: 100 units @ $10.00 (estimated)


Vendor Bill Received: 100 units @ $12.00 (actual)


┌─────────────────────────────────────────────────────────────────────────────┐
│ VARIANCE DETECTED: $2.00 per unit │
│ │
│ Total Variance: 100 × $2.00 = $200.00 │
│ │
│ This triggers recalculation of all transactions that used this item │
│ between Receipt date and Bill date │
└─────────────────────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────────────────────┐
│ RECALCULATION OPTIONS (based on costing method): │
│ │
│ AVERAGE COSTING: │
│ New average = Previous avg adjusted by variance │
│ All subsequent COGS recalculated │
│ │
│ STANDARD COSTING: │
│ Variance posted to Purchase Price Variance account │
│ Standard cost unchanged │
│ │
│ FIFO/LIFO: │
│ Cost layer updated to $12.00 │
│ Transactions using that layer recalculated │
└─────────────────────────────────────────────────────────────────────────────┘

Non-Triggers (No Recalculation)

These actions do NOT trigger cost recalculation:

ActionWhy No Trigger
Creating Sales OrderNo inventory movement
Creating Purchase OrderNo inventory movement
Creating Invoice (from Fulfillment)Cost already set at fulfillment
Customer PaymentNo inventory impact
Vendor PaymentNo inventory impact
Editing memo/description fieldsNo cost-related data changed
Changing ship date (no inventory)No inventory movement

Trigger Timing by Preference

WHEN TRIGGERS ARE PROCESSED
═══════════════════════════════════════════════════════════════════════════════

PREFERENCE: "After Transaction Entry"
─────────────────────────────────────────────────────────────────────────────
9:00 AM ──▶ Receipt saved
9:00 AM ──▶ IMMEDIATE recalculation starts
9:02 AM ──▶ Recalculation complete, GL updated


PREFERENCE: "Every Hour"
─────────────────────────────────────────────────────────────────────────────
9:00 AM ──▶ Receipt saved (Item flagged "In Queue")
9:15 AM ──▶ Another receipt saved (Item flagged "In Queue")
9:30 AM ──▶ Invoice edited (Item flagged "In Queue")

10:00 AM ──▶ BATCH recalculation starts

├── All queued items processed together
├── Chronological order maintained
└── GL updated after completion

10:05 AM ──▶ Recalculation complete

Best Practices for Triggers

Do's

PracticeBenefit
Enter receipts with accurate ratesMinimizes variance recalculations
Process bills promptlyReduces variance window
Avoid backdating when possiblePrevents cascading recalculations
Batch similar transactionsMore efficient processing

Don'ts

AvoidConsequence
Frequent rate changesRepeated recalculations
Backdating across periodsCross-period GL adjustments
Editing old transactionsLarge recalculation scope
Deleting receipts with consumptionNegative inventory issues

Next Steps