xMatix
Sign in Request demo
xMatix
PRODUCTS
SalesField SalesCRMRewardsClaimsInventoryProcurementWarehouse ManagementField ServiceServiceSupportTelephony & MessagingFinance & AccountingPayrollExpense ManagementCommercePortalsAnalytics & ReportingData StudioMobile AppSee all products →
PLATFORM
Platform overviewApp BuilderAutomationIntegrationsSecurity & GovernanceChange ManagementDevelopers
SENSE AI
Sense AI overviewSense AssistSense ControlSense VisionAI StudioTrust & governanceIn Claude & ChatGPTUse cases
SOLUTIONS
FMCG & DistributionManufacturing & Dealer NetworksAutomotive & DealershipsPharma & HealthcareConsumer DurablesAgri-InputsBuilding MaterialsService NetworksWarehousing & 3PLFinancial AccountingERP SoftwareIndia GST ComplianceUAE VAT & e-InvoicingSaudi ZATCA & VATAll solutions →
RESOURCES
Knowledge CenterDeveloper & CLIBlogGuidesWhat is xMatix?Company facts
COMPANY
AboutCareersPartnersEventsContactAuthorsLegal
Sign in Request demo
Home/Docs/Entity Reference/Inventory Valuation Policy — entity reference
REFERENCE · Last reviewed

Inventory Valuation Policy — entity reference

The rule that decides which cost-flow method the engine uses for a transaction, per accounting book. Resolution is most-specific-scope-wins: candidates are filtered to the book, to active rows and to the effective window, then a non-null scope key (business unit, branch, storage location, item group, item) must equal the transaction's value while a null key is a wildcard, with Priority and then a later EffectiveFrom breaking ties; when nothing matches the engine falls back to MovingAverage. CostingLevel is a separate axis setting the cost-pool boundary and takes no part in the scope match. Two traps: the seeded picklist stores Weighted Average and Moving Average with a space while the engine compares against unspaced constants, and the resolver's own validation (LIFO gating by GAAP framework, method-versus-level coherence, overlapping scopes) has no save-time caller, so contradictory or unusable policies can be saved.

Fields

FieldLabelTypeRequiredWhat it does
AccountingBookIdAccounting BookLookup → AccountingBookResolution is filtered to this book before anything else, so a policy on a different book is never considered. Because only the primary book persists cost layers, policies attached to a secondary book influence only the replay-driven overlay and the reporting paths, never the posted general ledger.
BranchIdBranchLookup → BranchA scope key matched against the transaction's branch; leaving it empty makes the policy apply across branches. Together with the item it is one of only two location-or-item keys the live posting path actually supplies.
BusinessUnitIdBusiness UnitLookup → BusinessUnitA scope key that matches only when the caller supplies a business unit. The live cost-posting path never does, so a policy scoped to a business unit does not participate in posting-time resolution.
CostingLevelCosting LevelTextThe boundary of a single cost pool - one FIFO queue or one average pool per this key - and it is a separate axis from the policy's scope, so it does not affect which transactions the policy matches.
CreatedByIdCreated ByLookup → UserAccountYes
CreatedDateTimeCreated DateDateAndTimeYes
EffectiveFromEffective FromDateThe policy is ignored for transactions dated before this, which is how a method change is applied prospectively rather than restating history. It is also the second tie-breaker at equal specificity and equal priority, where the later date wins.
EffectiveToEffective ToDateThe policy is ignored for transactions dated after this. The only validation on the window is that it must not precede EffectiveFrom, and even that check has no save-time caller, so an inverted or overlapping window will not be rejected.
IdIdGuidYes
IsActiveIs ActiveBooleanOnly an explicit false excludes the policy from resolution; an empty value is treated as active. Deactivating is the safe way to retire a rule, since deleting one changes which policy wins for historical replays too.
IsDefaultIs DefaultBooleanSetting it does not make a scoped policy behave as a default.
ItemGroupIdItem GroupLookup → ItemGroupA scope key that matches only when the caller supplies an item group in the resolution context.
ItemIdItemLookup → ItemA scope key rather than a filter on which items the policy covers: leaving it empty makes the policy apply to every item, and setting it makes the policy the most specific match available, outranking an item-group-scoped rule and every location-level rule.
ModifiedByIdModified ByLookup → UserAccountYes
NameNameTextYes
OwnerIdOwnerLookup → UserAccountYes
PartnerAccountIdPartner AccountLookup → AccountThe owning company or legal entity, and also matched as a scope key - a policy left empty here applies to any company within the book. It contributes nothing to the specificity score.
PriorityPriorityNumberTie-breaker between policies of equal specificity, where the lower number wins; an empty value is treated as the weakest possible precedence. It cannot promote a broadly scoped policy over a more specific one - specificity is decided first.
RecordTypeIdRecord TypeGuid, hidden
StorageLocationIdStorage LocationLookup → StorageLocationA scope key that matches only when the caller supplies a storage location.
UIPropsUI PropsText
UpdatedDateTimeModified DateDateAndTimeYes
ValuationMethodValuation MethodPickListThe cost-flow algorithm the engine runs for transactions this policy wins. FIFO, LIFO, MovingAverage, WeightedAverage (periodic) and SpecificIdentification are implemented; StandardCost is named in the taxonomy but the strategy factory refuses it outright as a later phase. The picklist also omits Specific Identification and Standard Cost. Values: FIFO, LIFO, Weighted Average, Moving Average.

Actions

ActionLabelTypeWhat it does
BulkDeleteDeleteDeleteDelete the selected records
CloneCloneServerAction (Clone)Create a copy of this record
DeleteDeleteDeleteDelete record
DeleteInListDeleteDeleteDelete record from the list
EditEditEditEdit record
EditInLineEditEditInlineEdit record inline
EditListRowEditEditEdit record from the list
NewNewNewCreate a new record