Skip to content

Inventory Policy Engine

The Inventory Policy Engine is the configurable rule system that controls how the warehouse handles stock. Instead of hard-coding picking methods, putaway rules, and QC requirements into the application, these behaviors are driven by Inventory Policy records — one per client, zone, item group, or combination thereof.

What It Does

The Policy Engine provides configurable control over:

DecisionWithout Policy EngineWith Policy Engine
Picking methodHard-coded FIFOFIFO / FEFO / LIFO / Manual per client
Putaway zoneAny available binPreferred zone per item group
QC on receiptAlways on / always offPer client, per item category
Lot trackingSystem-wide settingPer client, per item
Temperature complianceHard-coded zonesFlexible per policy
Expiry managementNot enforcedFEFO enforced for cold chain

This means you can run:

  • TechGear Inc on FIFO with no lot tracking, no QC
  • FreshFoods Co on FEFO with mandatory lot tracking, temperature QC on receipt
  • All clients with a system default that covers anything not explicitly configured

...all within the same warehouse and the same application.


Resolution Priority

When the system needs to apply a policy (e.g., to allocate stock for a Client Order), it resolves the most specific applicable policy using a 5-tier priority:

| Priority | Matching Dimensions | Example | |----------|--------------------|---------|| | 1 (Highest) | Client + Item Group + Zone | FreshFoods + Food + Cold Store | | 2 | Client + Item Group | FreshFoods + Food | | 3 | Client + Zone | FreshFoods + Cold Store | | 4 | Client only | FreshFoods (all items, all zones) | | 5 (Lowest) | System default | No client set (fallback for all) |

The system always uses the first match going from priority 1 down to priority 5. If no policy matches at any level, the transaction fails with a configuration error.

TIP

Start with a System Default policy (no Client, no Item Group, no Zone) that sets safe defaults. Then add client-specific overrides only where behavior needs to differ.

Resolution Example

Given these policies:

PolicyClientItem GroupZonePicking Method
P1FreshFoodsFoodCold StoreFEFO
P2FreshFoodsFoodFEFO
P3FreshFoodsFIFO
P4FIFO (default)

For a FreshFoods order for a Food item in the Cold Store zone, the engine resolves P1 (most specific match). For a FreshFoods order for a non-Food item, it resolves P3.


Policy Fields Reference

Identification

FieldTypeDescription
Policy NameDataUnique identifier for this policy
ClientLink → CustomerScope to a specific 3PL client. Leave blank for system default
Item GroupLink → Item GroupScope to a specific item group (e.g., Food, Electronics)
Warehouse ZoneLink → WarehouseScope to a specific zone
ActiveCheckboxEnable / disable this policy without deleting it
NotesTextDescription of what this policy is for

Picking Rules

FieldTypeDescription
Picking MethodSelectFIFO — First In First Out (oldest batch first)
FEFO — First Expired First Out (soonest expiry first)
LIFO — Last In First Out
Manual — No system allocation; operator decides
Enforce Lot SelectionCheckboxIf Yes, picking must be done by specific lot number
Allow Mixed LotsCheckboxIf No, a single pick task cannot span multiple batches
Min Expiry DaysIntDo not allocate stock expiring within N days

Putaway Rules

FieldTypeDescription
Preferred ZoneLink → WarehouseDirect putaway to this zone by default
Fallback ZoneLink → WarehouseUse this zone if preferred zone is full
Max Fill PercentPercentDon't assign a bin above this fill level
Allow Mixed ItemsCheckboxIf No, a bin can only hold one item/client
Allow Mixed ClientsCheckboxMust be No for client isolation (recommended)

Quality Control

FieldTypeDescription
QC on ReceiptCheckboxIf Yes, all receivings require QC step before putaway
QC on DispatchCheckboxIf Yes, all outbound require QC check before ship
Temperature CheckCheckboxRecord and validate temperature on inbound
Min TemperatureFloatAcceptable minimum arrival temperature (°C)
Max TemperatureFloatAcceptable maximum arrival temperature (°C)

Lot & Expiry Control

FieldTypeDescription
Require Lot on ReceiptCheckboxLot number must be recorded during Receiving
Require Expiry on ReceiptCheckboxExpiry date must be recorded for every batch
Expiry Warning DaysIntFlag stock expiring within N days in reports
Auto-Quarantine ExpiredCheckboxAutomatically move expired stock to Quarantine

Example Scenarios

Scenario 1: FreshFoods Co (FEFO Cold Chain)

FreshFoods stores refrigerated food products that have strict expiry requirements.

Policy Configuration:

Client:             FreshFoods Co
Item Group:         Food
Zone:               (all)
Picking Method:     FEFO
Enforce Lot:        Yes
Allow Mixed Lots:   No
Min Expiry Days:    7
QC on Receipt:      Yes
Temperature Check:  Yes
Min Temperature:    2°C
Max Temperature:    8°C
Require Lot:        Yes
Require Expiry:     Yes
Expiry Warning:     14 days
Auto-Quarantine:    Yes

Effect:

  • Every receiving must record lot number and expiry date
  • Temperature on arrival must be 2–8°C; out-of-range goes to Quarantine
  • QC inspection required before putaway
  • Orders always pick the batch expiring soonest first
  • Stock expiring within 7 days is not allocated to orders
  • Stock reaching its expiry date is auto-quarantined overnight

Scenario 2: TechGear Inc (FIFO Standard)

TechGear stores electronics — no temperature requirements, no expiry dates, standard FIFO.

Policy Configuration:

Client:             TechGear Inc
Item Group:         (all)
Zone:               (all)
Picking Method:     FIFO
Enforce Lot:        No
Allow Mixed Lots:   Yes
QC on Receipt:      No
Temperature Check:  No
Require Lot:        No
Require Expiry:     No

Effect:

  • Receivings require no special lot or expiry data
  • No QC step — goods go straight to putaway after receiving
  • Orders pick the oldest stock first (by receipt date)
  • Multiple batches can be picked in a single Pick Task
  • No expiry monitoring

Scenario 3: System Default

A catch-all policy for any client or item not matched by a specific policy.

Client:             (blank — system default)
Item Group:         (blank)
Zone:               (blank)
Picking Method:     FIFO
QC on Receipt:      No
Temperature Check:  No
Require Lot:        No

WARNING

Always maintain a system default policy. Without it, any unmatched combination of client/item/zone will cause a configuration error at transaction time.


Managing Policies

Creating a New Policy

  1. Go to Warehouse 3PL → Inventory Policy → New
  2. Enter a descriptive Policy Name
  3. Set the scope (Client, Item Group, Zone — leave blank for broader scope)
  4. Configure picking, putaway, QC, and lot fields
  5. Save and Submit

Testing a Policy

Before going live with a new policy configuration, test it:

  1. Use Tools → Policy Resolver to input a Client + Item + Zone combination
  2. The tool shows which policy would be resolved and what rules would apply
  3. Verify the result is what you expect

Deactivating a Policy

To temporarily disable a policy without deleting it:

  1. Open the policy
  2. Uncheck Active
  3. Save

The system will skip this policy during resolution and fall through to the next match.

Inventory Policy

Built on Frappe/ERPNext