Actions and results
What each Inventory button and automatic behaviour does, with worked numbers and what the system refuses.
On this page (76)
DashboardOverviewStock on handMovement historyWarehouse tasksWaves & batchesHandling unitsScannerHeld stockHeld in placeRecallsRevaluationsOpening stockCutover checkAvailabilityReceiptsReceipt exceptionsDeliveriesReceipts / DeliveriesInternal transfersAll transfersDrop shipmentsDrop-ship returnsIntercompany transfersCross-dockingReturnsCycle countsStock adjustmentsLanded costsAvailable to promiseReplenishment proposalsSoft reservationsAllocation & shortagesKitting & repackingTransfer through transitBarcode lookupStock valuationInventory valuation (R031) - AVCOGL reconciliation (R032)Inventory to ledger (as at a date)Count variances (R033)Inventory aging (R034)Replenishment proposals (R035)Lot / serial trace (R036)Warehouse productivityExpiryConsignment consumptionInventory 360Lot / serial 360Stock eventsException centreTurnover & fill rateProducts (list)Product recordStock and price history panelWarehousesWarehouse lifecycle barLocations & binsLocations lifecycle barZonesRoutes & operationsPutaway rulesDocks & stagingShelf-life rulesCount policy & ABCStock periodsLotsSerial numbersReorder & pick-face rulesDrop-ship routesWebhooksIntercompany linksStock policyUnits & packagingInventory featuresInventory fields
Dashboard
| Action | When | What you do | What happens |
|---|---|---|---|
| Dashboard figures | Stock in two warehouses | Open Dashboard; filter by one warehouse, then a category | Stock value equals Stock valuation for the same filter; charts change with filters; Below minimum lists products under their reorder minimum |
Overview
| Action | When | What you do | What happens |
|---|---|---|---|
| Operation cards and alerts | A late receipt; a count pending approval; a lot expiring in 20 days | Open Overview | Receipt card shows 1 late; alerts list 'operations past their scheduled date', 'stock counts pending approval', 'lots expire within 30 days'; clicking opens the filtered list |
| New Operation | New Operation > Receipt from Supplier | A new receipt form opens for the chosen warehouse |
Stock on hand
| Action | When | What you do | What happens |
|---|---|---|---|
| Quick stock adjustment | Admin user with stock.adjust; TEST-001 on hand 10 | Stock adjustment; product; -1; reason; Post adjustment | On hand 9; value reduced at average cost; journal Dr stock adjustment / Cr inventory; Movement history shows the row with its journal |
| List and pivot | Switch List / Pivot | Same totals in both views; Stock value = On hand x cost per row |
Movement history
| Action | When | What you do | What happens |
|---|---|---|---|
| Movements trace to the ledger | A receipt and a delivery done | Open Movement history; open the Journal of each | Each value change has its journal; quantity and value signs match the move |
Warehouse tasks
| Action | When | What you do | What happens |
|---|---|---|---|
| Tasks from a transfer | Operation with 'Work through tasks' on; a ready delivery | Open Warehouse tasks; Assign to me; Complete with done = asked | When the last task completes the transfer is validated with what the tasks recorded; stock moves |
| Block and unblock | An open task | Block without a reason; with a reason; Unblock | Without reason 'Say why the task is blocked.'; blocked task cannot be completed 'Only an open, unblocked task can be completed.' |
| Put away in another bin | A put-away task with a suggested bin | Complete into a different allowed bin; then into a bin of another warehouse | Allowed bin accepted; other warehouse refused 'Put it away inside the transfer's destination, in a bin that is not blocked.' |
Waves & batches
| Action | When | What you do | What happens |
|---|---|---|---|
| Create and release a wave | Three ready deliveries in one warehouse | New wave; Batch; pick two; Create wave; Release | Tasks released in pick-path order; transfers show in the wave; a released wave cannot be released again 'Only a draft wave can be released.' |
| Cancel a wave | A draft and a done wave | Cancel wave on each | Draft cancelled, transfers free again; done refused 'A finished wave cannot be cancelled.' |
Handling units
| Action | When | What you do | What happens |
|---|---|---|---|
| Pack, nest, seal | Open delivery with picked lines | New package Carton on the delivery; pack lines; New Pallet; nest the carton on it; Seal | Carton holds the lines; nested on the pallet; sealing empty refused 'An empty package cannot be sealed.'; packing more than picked refused 'You cannot pack more than was picked for that line.' |
| Move a whole package | A stored pallet at A-01 with stock | Move whole unit to B-02 | All contents move together; Stock by package shows B-02; a shipped package refused '<LPN> has shipped.' |
Scanner
| Action | When | What you do | What happens |
|---|---|---|---|
| Pick by scanning | A pick task assigned to you | Open Scanner on a phone; scan the bin, product, lot, enter quantity, confirm | Each step gives feedback ('At A-01. Scan the product.'); wrong bin/product is an error counted on the task, never accepted; task completes |
| Offline and replay | Turn the network off; scan a step; turn it on; Send now | 'Offline: saved, will send when the connection is back.'; on reconnect sent once; sending the same message again changes nothing |
Held stock
| Action | When | What you do | What happens |
|---|---|---|---|
| Move stock to quarantine and release | TEST-001 at WH/Stock | Change status: 2 units to Quarantine with a reason; then Release held stock as a user with inventory.quality.release | Quarantined units leave available stock (cannot be reserved or delivered); release returns them; without the right refused 'Releasing held stock needs the quality release right.' |
Held in place
| Action | When | What you do | What happens |
|---|---|---|---|
| Hold without moving | 4 free units of LOT-1 at A-01 | Hold stock: 4, Hold as Quarantine; try to deliver LOT-1; Release 4 | Units stay on the shelf but are not reservable or deliverable; release (with the right) makes them available |
| Change held status | An active hold | Change status Quarantine > Damaged | Hold kept with the new status; same status refused 'Choose another held status.' |
Recalls
| Action | When | What you do | What happens |
|---|---|---|---|
| Recall a lot | LOT-1 in stock, reserved on a ready delivery, and already shipped to a customer | New recall; product; LOT-1; reason; Create recall; Start the recall: hold the lots | Lot status Recall hold; the delivery's reservation is released (delivery back to Waiting); trace shows In stock, Shipped to customers, Still reserved |
| Clear or dispose a recalled lot | An active recall with two lots | Clear lot 1; Dispose lot 2 | Lot 1 back to its previous status; lot 2 blocked and its stock written off; recall Closed when all lots are closed |
Revaluations
| Action | When | What you do | What happens |
|---|---|---|---|
| Revalue with two people | TEST-001: 10 on hand at 12.50; users A and B with inventory.revalue | A: New revaluation 11.00; reason; Submit for approval. A: Approve. B: Approve | A refused 'A revaluation must be approved by somebody other than the person who asked for it.'; B posts: value -15.00, journal Dr stock adjustment / Cr inventory; Reject sets Rejected |
| Stock moved since asked | A submitted revaluation | Deliver 1 unit, then approve | Refused: '<code> has moved since this was asked for (... then, ... now). Raise it again.' |
Opening stock
| Action | When | What you do | What happens |
|---|---|---|---|
| Dry run and import | New company with warehouses and products | Paste 3 rows (one with a bad location); Dry run; fix; Dry run; Import; press Import again | First load lists the error per row; import refused '1 row(s) have errors. Correct them and load again.'; clean load imports once (quants, lots, serials, one journal to opening equity); second Import changes nothing |
Cutover check
| Action | When | What you do | What happens |
|---|---|---|---|
| Check against an opening load | An imported opening load | New check; An opening-stock load; Check | Everything matches. -> status checked; Sign off works |
| Differences need another person | Old system figures that differ by one row | Check; Only the differences; Sign off as the same user without and with a note | Without note '<n> difference(s) remain: say why they are accepted.'; same user 'Differences are accepted by somebody other than who ran the check.'; another user signs off; a signed-off check cannot be re-run 'A signed-off check is kept as it was; start a new one.' |
Availability
| Action | When | What you do | What happens |
|---|---|---|---|
| Availability report | Stock in two locations, some reserved | Open Availability; filter by warehouse; export | On hand - reserved = available per product/location; matches Stock on hand |
Receipts
| Action | When | What you do | What happens |
|---|---|---|---|
| Receipt raised by a purchase order | Purchase order confirmed for 10 units | Open Receipts | A receipt for the PO (Source document = PO number) is listed, ready to validate |
| Manual receipt: create, confirm, validate | A goods product | New receipt; warehouse; vendor; line 10 x 12.50; Save; Confirm; Validate with done 10 | Status Draft > Ready > Done; on hand +10; stock value +125.00; average cost recalculated; GRN printable |
| Partial receipt with backorder | Receipt for 10 | Validate with done 6; choose Create a backorder | Receipt done for 6; a new backorder for 4 opens (Backorder smart button links both) |
| Partial receipt, cancel the rest | Receipt for 10 | Validate with done 6; choose Cancel the rest | Done for 6; no backorder; remaining 4 cancelled (purchase order shows 6 received) |
| Over receipt within / beyond tolerance | Over-receipt tolerance 5% (stock policy or supplier) | Validate 10.4 of 10; then on another receipt 12 of 10 | 10.4 accepted and noted; 12 refused '...is over the 5% tolerance. Approve the over receipt to take it.'; the 'Approve over receipt and validate' button appears for a holder of the exception right and asks a reason |
| Lot and serial capture on receipt | Lot-tracked and serial-tracked products | Validate a lot product without a lot number; then a serial product with 2 serials for 3 units | Refused: '<code> is tracked by lot: enter the lot number received.' / '<code>: enter 3 serial number(s) for the 3 received ...'; with correct data lots/serials are created |
| Damaged and unexpected goods | Receipt for 5 | Validate done 5 with damaged 1; add an extra unexpected item | 4 to stock, 1 to the DAMAGED location; the extra goes to QUARANTINE; rows appear on Receipt exceptions |
| Edit only in draft | A confirmed receipt | Try to edit the lines (API or after confirming) | Refused: 'Only a draft picking can be edited. Cancel it, or return it.' |
Receipt exceptions
| Action | When | What you do | What happens |
|---|---|---|---|
| Resolve an exception | An open damaged / quarantine exception; user with the receipt exception right | Resolve > Accept into stock (or Return to supplier / Scrap) | Stock moves accordingly; status Accepted into stock / Returned to supplier / Scrapped; user without the right is refused 'Resolving a receipt exception needs the receipt exception right.' |
Deliveries
| Action | When | What you do | What happens |
|---|---|---|---|
| Delivery raised by a sale | A company default warehouse; sales order confirmed | Open Deliveries | Draft delivery from the default warehouse with the order's lines; Sales order smart button |
| Check availability and validate | Delivery for 5, stock 8 | Confirm; Check availability; Validate done 5 | Ready after reservation; on Done stock -5, cost of goods posted at average cost; sales order shows delivered |
| Negative stock refused / approved | Stock 2, delivery for 5; negative policy = refuse, then = approval | Validate done 5 | Refuse policy: 'Insufficient stock for <code> at <loc>: on hand 2, needed 5.'; approval policy: '...would go below zero. Somebody with the right to approve negative stock has to confirm it.' and 'Approve below zero and validate' works only for a stock.negative.approve holder |
| Held lot cannot ship | A lot on hold or expired | Deliver that lot | Refused: 'Lot <name> is <status> and cannot leave stock.' / 'Lot <name> expired before this movement date.' |
| Pack into a new carton | Operation requires packing | Validate without packing; then Pack into a new carton; Validate | First refused '<code> is not packed. Put every unit in a package before validating.'; then 'Packed into a new carton.' and validation works |
| Split and merge | Two open deliveries to the same customer and place | Split… 3 of 10 to a new transfer; then select two and Merge | Split creates a new transfer with 3; merge combines; merging a done one refused '<number> is done and cannot be merged.' |
Receipts / Deliveries
| Action | When | What you do | What happens |
|---|---|---|---|
| Cancel a transfer | A ready transfer; a done transfer | Cancel each | Ready: cancelled and reservations released; Done: 'A completed picking cannot be cancelled; use a return.' |
| Book a dock and work as tasks | Docks configured | Book a dock… choose dock and window; Save; then Work as tasks | 'Dock booked.'; tasks created on Warehouse tasks; on a draft 'Only a ready transfer can be turned into tasks.' |
Internal transfers
| Action | When | What you do | What happens |
|---|---|---|---|
| Move between bins | Stock at A-01 | New transfer From A-01 To B-02; 5 units; Confirm; Validate | A-01 -5, B-02 +5; total value unchanged; no journal entry |
| Frozen location | An open cycle count freezing A-01 | Validate a transfer from A-01 | Refused: 'A-01 is frozen by count <number>. Finish the count first.' |
All transfers
| Action | When | What you do | What happens |
|---|---|---|---|
| Closed stock period / backdating | Previous month hard-closed in Stock periods; backdate policy = permission | Validate a transfer dated in that month; then dated yesterday without stock.backdate | '<Month YYYY> is closed for stock. Post it in an open month.' / 'A stock movement dated before today needs the backdating right.' |
Drop shipments
| Action | When | What you do | What happens |
|---|---|---|---|
| Drop shipment needs the PO approved | A drop-ship sale raised a drop shipment and a draft PO | Validate the drop shipment before approving the PO; approve the PO; validate | First refused 'Approve purchase order <number> before confirming the drop shipment.'; then done, no stock change in our warehouse |
Drop-ship returns
| Action | When | What you do | What happens |
|---|---|---|---|
| Return drop-shipped goods | A done drop shipment | Return; to the supplier directly; 1 of 2; Raise the return | A drop-ship return is created; returning more than shipped refused 'Only <n> of <code> can still come back.' |
Intercompany transfers
| Action | When | What you do | What happens |
|---|---|---|---|
| Send goods to a group company | Two linked companies; you hold inventory.intercompany in both | New transfer; To company; warehouses; line; Send | Our sale + delivery and their purchase + receipt are raised; Sent tab shows it; after our delivery, their receipt can be validated (before: '<number>: the selling company has not shipped these goods yet.') |
| Cancel and write off transit | A transfer not shipped; another shipped but lost | Cancel the first; Write off transit on the second | First cancelled; a shipped one cannot be cancelled 'Only a transfer that has not shipped can be cancelled; return the goods instead.'; write-off posts the transit value |
Cross-docking
| Action | When | What you do | What happens |
|---|---|---|---|
| Arriving goods go to the dock | Rule for TEST-001; a delivery waiting for it within the horizon | Validate a receipt of TEST-001 | The needed quantity goes to the dock and is reserved for the delivery; the rest to stock; history row added |
Returns
| Action | When | What you do | What happens |
|---|---|---|---|
| Customer return end to end | A done delivery of 3 | New return From a customer; pick the delivery; Return now 1; Create; Authorise; Receive; inspection Condition New + Restock; Carry out | Goods land in the RETURNS location first; after Carry out they are restocked by an internal transfer; no customer credit is made by the stock movement |
| Credit note from a return | A received customer return of an invoiced order | Raise credit note | A draft credit note for the returned lines; a second time 'This return already has a credit note.' |
| Return to vendor | A done receipt | New return To a vendor; pick the receipt; 2 units; Authorise; Ship | Stock -2 at average cost; status Done |
Cycle counts
| Action | When | What you do | What happens |
|---|---|---|---|
| Count and approve by another person | Location with stock; users A and B | A: New count; Start count; enter counted; Save counts. B: Approve | 'Approved. The difference is posted.'; stock corrected; one journal for the net value (stock vs adjustment account); A approving their own count refused 'A cycle count must be approved by a different user than the counter.' |
| Recount above threshold | Count policy class A recount 5% | Count a 10-unit line as 8 and save; try Approve; save the count again; approve | First save sets Recount; approve refused 'The variance is past the recount threshold: count it again before approving.'; after the second count approval works |
Stock adjustments
| Action | When | What you do | What happens |
|---|---|---|---|
| Small adjustment posts at once | Approval threshold 1000 AED | New adjustment; reason Damage; -1 unit worth 12.50; Save; Submit | Posted immediately; journal entry linked; stock -1 |
| Large adjustment needs a second person | Threshold 1000 (or 0 = every adjustment) | A: adjustment worth 1500; Submit. A: try Approve and post. B: Approve and post | Submitted; A refused 'An adjustment must be approved by somebody other than the person who raised it.'; B posts; Send back returns it to draft |
| Posted adjustment cannot be cancelled | A posted adjustment | Cancel | Refused: 'A posted adjustment is corrected by another adjustment, not cancelled.' |
Landed costs
| Action | When | What you do | What happens |
|---|---|---|---|
| Capitalise freight on a receipt | Done receipt of 2 products (values 1000 and 3000) | New landed cost; receipt; 400 AED; By value; Save draft; check preview; Post | Preview shows 100 and 300 with Added per unit; on Post stock value +400, journal Dr Inventory / Cr expense account; status Posted |
| Estimate then actual | Posted estimate 400 on a receipt | New landed cost, Actual 450, Replaces the estimate; Post | Only the 50 difference reaches stock; the estimate's accrual is cleared |
| Late charge on goods already sold | Receipt of 10, 6 already delivered | Post a 100 AED landed cost | 40 capitalised to stock, 60 to cost of goods sold (or WIP/variance for manufacturing) |
Available to promise
| Action | When | What you do | What happens |
|---|---|---|---|
| ATP arithmetic | Product P-100 in DXB: on hand 100, reserved 30, open receipts due 50, open deliveries still unreserved 40 | Open the screen, pick P-100 and DXB | ATP = on hand 100 - reserved 30 + incoming 50 - demand 40 = 80. Soft-reserved 25 is shown beside it and 'ATP after soft reservations' = 55. Forecasts are never counted |
| Only usable stock counts | A quarantine bin, a held lot, an expired lot and consignment (supplier-owned) stock all hold P-100 | Open ATP for P-100 | On hand ignores stock in non-available locations, lots that are on hold or past expiry, and stock owned by a supplier. Hard reservations on the same quants are not subtracted twice |
| Timeline | Receipts and deliveries scheduled on different dates | Read the Date / Change / ATP table | One row per date: change (+ receipt, - delivery) and the running ATP starting from on hand minus reserved. With nothing moving it says 'Nothing coming in or going out.' |
| Services excluded | A service product exists | Open the product picker | Only goods products are listed |
Replenishment proposals
| Action | When | What you do | What happens |
|---|---|---|---|
| Run replenishment - proposal arithmetic | Rule for P-100 in DXB: min 50, safety 10, max 120, multiple 24, lead 7 days, supply Buy. Position: on hand 40, reserved 10, soft 5, incoming 20, demand 15 | Click Run replenishment | Projected = 40 - 10 - 5 + 20 - 15 = 30. Trigger = min 50 + safety 10 = 60; 30 is below it. Target = max(120, 60) = 120. Quantity = 120 - 30 = 90, rounded UP to a multiple of 24 = 96. Needed by = today + 7 days. Message '1 new, 0 updated, 0 withdrawn, 0 pick-face refill(s).' |
| Run is idempotent | A proposal exists and nothing has changed | Click Run replenishment again | '0 new, 0 updated, 0 withdrawn' - no second proposal (same fingerprint of the figures) |
| Proposal updates when figures change | Open proposal of 96; a 30-unit delivery is confirmed | Run again | The same proposal is updated (quantity recalculated, revision +1), message shows 1 updated; still one proposal |
| Withdraw when no longer needed | Open proposal; stock is received so projected rises to 65 (above the trigger 60) | Run again | The proposal becomes Withdrawn with a note 'Withdrawn <date>: projected 65 is back above 60.' |
| Pegging and explanation | An open proposal | Click the row | The dialog shows the sentence 'On hand 40 - reserved 10 - soft 5 + incoming 20 - demand 15 = projected 30, below min 50 + safety 10. Order up to 120 in multiples of 24: 96.' and the pegging table of orders behind the demand, plus Safety stock and Soft reservations lines |
| Approve a Buy proposal | Proposal with supplier on the rule; user holds inventory.replenish.approve | Open the proposal, click Approve | A draft purchase order is created for the supplier with the line (product, quantity, product cost) and the explanation in its notes; proposal becomes Approved and shows the purchase order number (or 'Draft PO') |
| Approve a Buy proposal with no supplier | The rule names no supplier | Click Approve | Refused: 'Choose the supplier to buy from.' (and the dialog gives no way to choose one) |
| Approve a Transfer proposal | Rule supply 'Transfer' from warehouse AUH | Click Approve | An internal transfer from AUH stock to DXB stock is created and confirmed, origin REPLENISH; the status shows its number. Rule without source warehouse: 'The rule names no warehouse to transfer from.' |
| Approve a Manufacture proposal | Rule supply 'Manufacture' | Click Approve | The proposal becomes Approved; no order is created here (handed to Manufacturing with the proposal as its reason). Check Manufacturing for the demand |
| Approve needs its own right | User can write in inventory but lacks inventory.replenish.approve | Approve a proposal | Refused: 'Approving a replenishment proposal needs a right you do not have.' |
| Dismiss | An open proposal | Click Dismiss | Proposal becomes Withdrawn; the audit trail records 'replenishment.dismissed'. A second Dismiss or Approve on it: 'Only an open proposal can be dismissed.' / 'That proposal is cancel.' |
| Stale screen on approve | Two users open the same proposal; the first approves; the second clicks Approve | Second user clicks Approve | Refused: 'That proposal is approved.' (or the edit-conflict message if the revision changed) |
| Pick-face refill | A pick-face rule: bin min 20, fill to 60, multiple 12, 15 in the bin, 500 in bulk | Run replenishment | One internal transfer (origin 'REFILL <code>') is created for 60 - 15 = 45 rounded up to 48 (capped by the 500 free in bulk), reserved or waiting; counted in 'pick-face refill(s)'. Running again while it is open makes no second one |
Soft reservations
| Action | When | What you do | What happens |
|---|---|---|---|
| Create a reservation | ATP after soft = 55 for P-100 in DXB | New reservation: P-100, DXB, quantity 25, customer, reference QT-1, hours 48 | Row Active; Expires = now + 48 h; ATP after soft reservations drops to 30 |
| Over-promise refused | ATP after soft = 55 | Reserve 60 | Refused: 'Only 55 of P-100 can still be promised.' |
| Expiry by itself | A reservation made for 1 hour, or an expiry in the past | Reload the list after the hour | State is expired and the quantity is available to promise again; 0 hours never expires |
| Release | An active reservation | Click 'Active - release' | State released; ATP after soft returns. A reservation that is not active: 'That reservation is released.' |
| Soft reservations and replenishment | Soft 25 on P-100 | Run replenishment | The soft quantity is subtracted in the projected figure and listed in the pegging as 'Soft reservations' |
Allocation & shortages
| Action | When | What you do | What happens |
|---|---|---|---|
| Allocate by priority | Stock 10; delivery D1 (priority 1, needs 8), D2 (priority 5, needs 8), D3 (priority 5, needs 2), all waiting | Allocate: Highest priority | Order D2, D3, D1 (priority first, then promised date). D2 gets 8, D3 gets 2, D1 stays waiting: '2 ready, 1 waiting' |
| Allocate by promised date and first come | Same data with different promised dates and creation times | Allocate: Earliest promised date, then First come | The order table follows the chosen rule; ready / waiting counts change accordingly |
| Take stock back | A low-ranked delivery holds reserved stock and has no started picking task; a high-priority delivery is waiting | Tick the checkbox and Allocate | Unstarted deliveries are un-reserved and everything is re-served in rank order, so the high-priority one now becomes ready. Deliveries with a task in progress or done keep their stock |
| Shortage list | Delivery lines short of stock | Open the screen | Per product and warehouse: Short = demand - reserved (summed), On hand, Next supply date from the nearest open receipt, Deliveries (numbers), and Do = 'Expedite the incoming supply' or 'Replenish: nothing is on the way'. Empty text 'No delivery is short of stock.' |
Kitting & repacking
| Action | When | What you do | What happens |
|---|---|---|---|
| Define a kit | Stocked kit product and parts | Kit definitions: kit product, components GIFT-A x2, GIFT-B x1, Save | Definition saved (re-saving the same kit replaces its components, revision +1); listed under 'Defined:' |
| Assemble kits - value in equals value out | Kit KIT-GIFT = 2 x A (AVCO 10.00) + 1 x B (AVCO 6.00); stock A 100, B 100 at DXB/Stock | New conversion: Assemble a kit, KIT-GIFT, quantity 5 | Consumes 10 A (100.00) and 5 B (30.00) = 130.00; produces 5 KIT-GIFT carrying 130.00 (26.00 each). Conversion number issued, value 130.00 |
| Break a kit apart | 5 KIT-GIFT in stock | New conversion: Break a kit apart, KIT-GIFT, quantity 2 | Consumes 2 kits at their average cost and produces 4 A and 2 B; the value is shared in proportion to cost x quantity (4 x 10 = 40 : 2 x 6 = 12 of 52) |
| Repack with two outputs | Consume 1 reel (value 90.00); produce 20 x cable A (cost 3.00) and 10 x cable B (cost 3.00) | Repack with those lines | Total 90.00 shared by weight 60 : 30 = 60.00 and 30.00; the last output takes the remainder so nothing is lost to rounding |
| Refusals | Various | Try: not enough parts; tracked product; frozen location; location not internal; period closed | 'Only 3 of P-100 at DXB/Stock.'; 'P-200 is tracked: convert it through a transfer that names its lots.'; 'DXB/Stock is frozen by count CNT-0007.'; 'Choose the internal location it happens at.'; closed-month refusal from the stock-period check |
| Retry safety | Press Convert twice quickly or resubmit after a timeout | Submit twice | Only one conversion exists (the dialog's request key makes a retry the same document) |
Transfer through transit
| Action | When | What you do | What happens |
|---|---|---|---|
| Create the two transfers | P-100 in DXB | From DXB, To AUH, line P-100 x 40, Create transfers | Message 'Shipped on <number>; received on <number> once it arrives.' Two internal transfers: DXB to Transit (reserved if stock) and Transit to AUH (waiting). Validate the first in Internal transfers; stock moves into Transit, keeps its value and still counts as company stock; validate the second to land it in AUH |
| Refusals | Same warehouse, no lines, service product | Submit each | 'Choose two different warehouses.'; 'A transfer needs at least one line.'; 'Each line is a stocked product.' |
Barcode lookup
| Action | When | What you do | What happens |
|---|---|---|---|
| Plain product barcode | Product P-100 has barcode 6291041500213 | Type the barcode, Look up | Shows Product 'P-100 - Cable 2m'; Print product label link appears. A packaging barcode shows the product (and the pack units) |
| GS1 string | GTIN of P-100 | Type (01)06291041500213(10)L-2026-07(17)270131 | Product, Lot (new) when the lot does not exist yet, plus GS1 elements such as expiry; an unreadable check digit is not parsed as GS1 |
| Bin and handling unit | A bin barcode and a package SSCC | Look each up | Location shows the bin code; Package shows the LPN with 'Print package label' |
| Unknown code | Nothing matches | Look up 000000 | 'Nothing matches that code.' |
Stock valuation
| Action | When | What you do | What happens |
|---|---|---|---|
| Which method does the valuation use | Categories set to AVCO, FIFO and standard | Compare the Stock valuation menu page with Valuation (AVCO) | R031 values every product from its layers under its own category method; the legacy page shows a Standard cost column and a footer 'standard cost valuation' |
Inventory valuation (R031) - AVCO
| Action | When | What you do | What happens |
|---|---|---|---|
| Moving average worked through | New AVCO product with no stock | Receive 100 at 10.00, then 50 at 16.00, open R031 | Quantity 150, value 1,800.00 (1,000 + 800), unit cost 12.00 |
| Issue at the average | The 150 units at 12.00 above | Deliver 60, open R031; then deliver all remaining 90 | After 60: value 720.00 leaves, 90 units worth 1,080.00 remain at 12.00. Delivering the last 90 takes exactly 1,080.00 (the held value, no rounding residue) and leaves 0 / 0.00 |
| Warehouse filter | Stock in two warehouses | Filter Warehouse = DXB | Rows show DXB's units at the product's company-wide average cost (e.g. 40 units x 12.00 = 480.00); total_value is that sum. Without a filter the value is the layer total |
| Category and lot filters | Lots exist | Filter Category, then Lot | Only matching products or lot rows; Clear filters restores all. No data: 'No data for this report yet.' |
GL reconciliation (R032)
| Action | When | What you do | What happens |
|---|---|---|---|
| Reconciled and not reconciled | Valuation 125,000.00; Inventory account balance 125,000.00, then a manual journal of 500.00 debit to the inventory account | Open R032 before and after the journal | Before: Difference 0.00 - Reconciled. After: Valuation 125,000.00, Ledger 125,500.00, Difference -500.00 - Not reconciled |
Inventory to ledger (as at a date)
| Action | When | What you do | What happens |
|---|---|---|---|
| Explain the difference | Same manual journal; a layer written without a journal | Open the screen, set As at | Difference per date; table 1 lists journals on the stock account that no stock posting made (date, journal, source, memo, amount); table 2 lists layers with no journal; table 3 valuation by product. Empty tables say 'None.' Changing the date changes all figures |
Count variances (R033)
| Action | When | What you do | What happens |
|---|---|---|---|
| Variance arithmetic and period | Count line: system 20, counted 17 | Open R033 and set From / To around the count date | variance = counted - system = -3.0000 (negative = shortage). Lines outside the dates are hidden |
Inventory aging (R034)
| Action | When | What you do | What happens |
|---|---|---|---|
| Age buckets | Product last received 45 days ago, value 2,400.00; another 100 days ago, value 800.00 | Open R034 | age_days 45 goes to bucket 31-60 and 100 to 90+. Age is days since the LAST inbound movement of the product, not per lot. Zero or negative stock is left out |
Replenishment proposals (R035)
| Action | When | What you do | What happens |
|---|---|---|---|
| Report arithmetic | Rule min 50 / max 120; free stock (on hand - reserved) 30, open receipts 10 | Open R035 | Projected = 30 + 10 = 40, below 50, so the row shows propose = 120 - 40 = 80. It ignores safety stock, order multiples, demand and soft reservations, so it can differ from the Replenishment screen (96 in the example above) |
Lot / serial trace (R036)
| Action | When | What you do | What happens |
|---|---|---|---|
| Movement history | Lot L-2026-07 received, transferred and delivered | Filter Lot = L-2026-07 | One row per movement with lot, serial, product, expiry, date, picking, from, to, quantity. Only done movements of positive quantity |
Warehouse productivity
| Action | When | What you do | What happens |
|---|---|---|---|
| Minutes per task | Person A completed 2 pick tasks of 6 and 10 minutes with 1 scan error in total | Open the screen, set the dates | Row for A / pick: Tasks 2, Minutes / task (6 + 10) / 2 = 8.0, Scan errors 1, Units = sum of done quantities, Lines = distinct move lines. Only completed tasks count; a task without start or finish time is not in the minutes average |
Expiry
| Action | When | What you do | What happens |
|---|---|---|---|
| Expiry list | Lots expiring in 20 days, 80 days and one already expired | Open with 60 days, then 0 | 60: expired lot (Days left shows Expired) and the 20-day lot, nearest first. 0: only the expired one. Only internal locations with quantity over 0 |
Consignment consumption
| Action | When | What you do | What happens |
|---|---|---|---|
| What was consumed | A transfer of 10 units from a supplier-owned location into company stock, move cost 4.50 | Open the screen | Row with date, supplier (owner), product, transfer number, quantity 10, unit cost 4.50, value 45.00 |
Inventory 360
| Action | When | What you do | What happens |
|---|---|---|---|
| Product 360 | Product in two warehouses with a rule and some history | Pick the product | Facts incl. On hand, Value, Average cost (value / quantity), ABC class, Turns and Days of cover; By warehouse table (same ATP as the ATP screen), Where it is (location, lot, serial, expiry, status, owner), Rules, last 20 movements |
| Print label | A product is picked | Click Print label and the ZPL link | A printable Code 128 label page; the ZPL link downloads a .zpl file for a Zebra-type printer |
Lot / serial 360
| Action | When | What you do | What happens |
|---|---|---|---|
| Lot 360 | A lot that was delivered and partly returned | Look up by Lot and pick it | Facts (on hand, reserved, available, value, unit cost, first received, supplier, expiry, best before, retest), Where it is, Reserved for, Customers it went to, Returns, Quality and recalls, Movements and Serials in this lot |
| Serial 360 and production links | A serial made by a manufacturing order | Look up by Serial | Shows its lot, condition, 'Made from' components and 'Went into' sections where they exist |
Stock events
| Action | When | What you do | What happens |
|---|---|---|---|
| Publish and read in sequence | Several postings made since the last publish | Click Publish waiting events | 'N event(s) published.' Events get numbers 1, 2, 3 without gaps in the order of publishing; 'waiting' disappears; the Readers table shows each reader's last sequence, Behind and last acknowledgement |
| Event content | A posted receipt | Click the event row | JSON with type inventory.receipt_posted.v1, subject reference, currency AED and lines (product, lot, quantity, value). A return points back at the original event |
Exception centre
| Action | When | What you do | What happens |
|---|---|---|---|
| What is listed | One of each: negative stock, expired-but-available lot, recall open, late transfer, blocked task, recount waiting, overdue proposal, stale landed estimate, held stock, reconciliation difference | Open the screen | Sorted High, Medium, Low. High: retest overdue, negative stock, expired lot still available, open recall, reconciliation difference. Medium: late transfer, blocked task, recount, proposal needed but not approved, retest within 7 days. Low: stale estimate over 30 days, held stock lines. Empty: 'Nothing needs attention.' |
Turnover & fill rate
| Action | When | What you do | What happens |
|---|---|---|---|
| Turnover worked through | Product: cost of goods issued in the last 365 days 120,000.00; stock value at the start 40,000.00 and now 60,000.00 | Open the Turnover tab | Average value = (40,000 + 60,000) / 2 = 50,000.00; Turns = 120,000 / 50,000 = 2.40; Days of cover = 365 / 2.40 = 152.1. No average value: Turns blank |
| Slow and dead stock | Products last moved 40, 100 and 200 days ago, threshold 90 | Open the Slow tab with 90, then 60 | 90: the 100-day product is Slow, the 200-day (and never-moved) product is Dead (idle at least 2 x 90), the 40-day product is not listed. 60: the 100-day one is still Slow (under 120), 40-day not listed |
| Fill rate worked through | Last 90 days: 20 deliveries done, 17 shipped complete first time, 18 on or before the scheduled date, 2 left a backorder; 60 lines, 54 in full | Open the Fill rate tab | Order fill 85.0 %, Line fill 90.0 %, On time 90.0 %, Backordered 10.0 %. Cancelled deliveries and backorder children are left out |
Products (list)
| Action | When | What you do | What happens |
|---|---|---|---|
| Open Inventory > Products | A few products incl. one service and one archived | 1. Open Inventory > Products. 2. Note the filter. 3. Clear Status filter. | Only active products at first; On hand shows for goods and a dash for the service; clearing the filter shows the archived one |
| On hand matches Stock on hand | Product with 40 on hand | 1. Open Inventory > Operations > Stock on hand and note the quantity. 2. Open Inventory > Products and compare. | Same quantity in both lists |
Product record
| Action | When | What you do | What happens |
|---|---|---|---|
| Adjust stock and View moves buttons | A goods product; user with stock.adjust | 1. Open the product. 2. Click View moves. 3. Go back, click Adjust stock. | Movement history opens with the code searched; Stock on hand opens with the code searched; nothing is changed by the click |
| Stock buttons absent for a service | A service product | Open the service product. | Adjust stock and View moves are not offered; Inventory tab is not shown |
Stock and price history panel
| Action | When | What you do | What happens |
|---|---|---|---|
| Available figure | Product: on hand 40, reserved 10, incoming 20 | Open the history panel from a sales line. | Available = 40 - 10 = 30 for the warehouse; Incoming 20 is shown separately and not added |
Warehouses
| Action | When | What you do | What happens |
|---|---|---|---|
| Create the first warehouse | A company with no warehouse | 1. New warehouse. 2. Code DXB1, name 'Dubai Main'. 3. Create. | Warehouse listed as Default; locations DXB1/STOCK, DXB1/IN and DXB1/OUT exist named 'Dubai Main - Stock / Input / Output'; Lifecycle Active (or Draft when review is on) |
| Second warehouse and default switch | One default warehouse exists | 1. Create DXB2 and tick Ships orders that name no warehouse. 2. Save. 3. Look at the list. | DXB2 is the only Default; DXB1 shows a dash |
| Duplicate and bad code | DXB1 exists | Create code DXB1; then code 'A'; then a 17-character code. | 'A warehouse with this code already exists.'; 'Use 2–30 letters, digits, underscores or hyphens.'; the 17-character code is refused or fails on save |
| Rename renames locations | DXB1 named 'Dubai Main' | Open DXB1, change name to 'Dubai Central', Save. Open Locations & bins. | Locations show 'Dubai Central - Stock / Input / Output'; a bin you named by hand is unchanged; code field is disabled |
| Edit conflict | Two sessions on the same warehouse | Session A saves a new name. Session B (opened earlier) saves another. | B is refused 'This record changed. Reload it before saving.' |
Warehouse lifecycle bar
| Action | When | What you do | What happens |
|---|---|---|---|
| Review flow when master review is on | Stock policy: New warehouses start as drafts | Create warehouse. Try to receive into it. Then Mark reviewed, Activate, retry. | Created as Draft; a receipt is refused 'Warehouse <code> is draft: activate it before stock moves through it.'; works after Activate |
| Archive refused with stock or open transfers | Warehouse holding 10 units | Click Archive and give a reason. | Refused '<code> still holds or reserves stock: move it out first.'; with stock gone but a draft transfer open: '<n> open transfer(s) still use <code>.' |
| Archive and reactivate empty warehouse | Empty warehouse, no open transfers | Archive with reason 'Lease ended'; then Reactivate. | Lifecycle Archived then Active; audit trail shows both with the reason |
Locations & bins
| Action | When | What you do | What happens |
|---|---|---|---|
| Create a bin | Warehouse DXB1 with zone BULK | New bin: code A-01-01, name 'Aisle A shelf 1', zone BULK, capacity 500, walk order 10. Save. | Bin appears under DXB1/STOCK with those values; Role shows Bin |
| Bin barcode unique | A bin with barcode LOC-1 | Give another bin the barcode LOC-1. | 'Another location already has this barcode.' |
| Parent loop refused | Bin A inside B | Open B and set Inside = A (API or screen). | 'A location cannot sit inside itself or one of its own children.' |
| Blocked bin never used | Two bins; one Blocked; putaway rule pointing to both | Receive 5 units. | Putaway suggests the open bin; the blocked bin is never picked from or put into |
| Capacity limit in putaway | Bin capacity 100 holding 90; a second bin with room | Receive 20 units with a First-bin-with-room rule. | 90 + 20 = 110 is above 100, so the first bin is skipped and the second is suggested |
| Mixed lots off | Bin with 'Allow mixed lots' off holding lot L1 | Put lot L2 of the same product with a zone rule. | The bin is skipped for L2; another bin is chosen |
| Status quarantine location | Bin with Stock here is = Quarantine | Move 5 units there; try to reserve for a sale. | Stock in it is held: not available to reserve or sell; shows under Held stock |
| Consignment owner required | - | Set Whose stock = A supplier's with no Owner. | Owner field is required; by API 'Say whose stock it is.' |
Locations lifecycle bar
| Action | When | What you do | What happens |
|---|---|---|---|
| Delete only untouched location | A new empty bin and a bin with history | Delete the new bin; then try the used one; then try DXB1/STOCK. | New bin deleted; used bin 'Stock has used <code> (or it has locations under it): archive it instead.'; the warehouse's own: '... archive the warehouse instead.' |
Zones
| Action | When | What you do | What happens |
|---|---|---|---|
| Create a zone and use it on a bin | Warehouse exists | New zone code COLD kind Cold storage priority 10; open a bin and choose it. | Zone listed; bin accepts it; a zone of another warehouse is refused 'Choose a zone of the location's warehouse.' |
| Duplicate zone code | Zone COLD in DXB1 | Create COLD again in DXB1, then in DXB2. | First refused 'That warehouse already has a zone with this code.'; second allowed |
Routes & operations
| Action | When | What you do | What happens |
|---|---|---|---|
| Two-step receiving | Warehouse on 1 step | Choose Receive in 2 steps. Create a receipt for 10 units and validate it. | Receipt lands in Input; a second transfer 'Put away' is raised Input > Stock with the 10 units; stock reaches Stock only when it is done |
| Three-step receiving with quality | Warehouse on 1 step | Choose Receive in 3 steps; receive 10 units. | Chain Input > Quality > Stock; a Quality location is created if missing; stock held in a non-available location is not forwarded |
| Two- and three-step shipping | Warehouse on 1 step | Choose Ship in 3 steps; confirm a delivery for 5 units. | Pick (Stock > Packing zone), Pack (Packing zone > Output) and Delivery (Output > customer) are raised and linked; delivery waits until pack is done |
| Change steps with documents in flight | Receipt released on 1-step route, then switch to 2 steps | Validate the old receipt after the switch. | It finishes on the route it started on (route version kept); new receipts follow the new route |
| Operation settings | - | Tick Work through tasks on Pick; tick Must be packed on Delivery; set Remainder to Cancel on Delivery. | Picks raise warehouse tasks; delivery cannot finish with unpacked items; short delivery leaves no backorder |
Putaway rules
| Action | When | What you do | What happens |
|---|---|---|---|
| Fixed bin rule | Bin A-01-01; product P | New rule: product P, Fixed bin, bin A-01-01, priority 10. Receive 5 of P. | Suggestion is A-01-01 |
| Priority order | Two rules: priority 10 (fixed bin full) and priority 50 (zone, room) | Receive 5 units. | Lower number tried first; as its bin does not fit, the priority-50 rule's bin is used |
| Next to the same product | Zone Z with bins; product P already in bin 2 | Rule: Next to the same product, zone Z. Receive P. | Bin 2 is suggested if it fits, then other bins in walk order |
| Rule validation | - | Fixed rule with a bin of another warehouse; zone rule with no zone. | 'A fixed bin must be an internal location of this warehouse.'; 'Choose a zone of this warehouse.' |
Docks & staging
| Action | When | What you do | What happens |
|---|---|---|---|
| Book a dock window | Dock D1 open; two draft transfers | Book transfer 1 on D1 10:00-11:00; book transfer 2 on D1 10:30-11:30. | Second is refused (one dock holds one open transfer at a time); D1 shows occupied during the window |
| Closed dock refused | Dock D2 status Closed | Book a transfer on D2. | 'Dock D2 is closed.' |
Shelf-life rules
| Action | When | What you do | What happens |
|---|---|---|---|
| Minimum days left blocks shipping | Product rule 90 days; lot expiring in 60 days | Deliver that lot. | The lot is not offered or is refused as it has only 60 of the 90 days; a lot with 120 days passes |
| Percentage of life | Rule 50 %; lot made 2026-01-01, expiry 2026-12-31 (364 days); today 2026-09-01 (121 days left) | Check the lot against the rule. | 121 / 364 = 33 %, below 50 %, so it fails; with 200 days left (55 %) it passes. Lot with no manufacture date is judged on days only |
| Most specific rule wins | Rules: product 30 d, category 90 d, country 180 d | Ship that product to a customer in that country. | The product rule (30 days) is used: order is product, category, customer, group, country |
| Validation | - | Save with 0 days and 0 %; country 'SAU'; group with no members. | 'Give the days or the percentage of life that must remain.'; 'Give the two-letter country code.'; 'List the group's customers, or choose a market.' |
Count policy & ABC
| Action | When | What you do | What happens |
|---|---|---|---|
| Classify ABC | Five goods products with issues over the last 365 days of 5,000 / 3,000 / 1,000 / 500 / 500 AED (total 10,000) | Click Classify ABC. | Shares 50, 30, 10, 5, 5 %. First two are A (running total below 80 before each), next two B (below 95), the last C; message 'Classified: A 2, B 2, C 1.' A product that never moved is C |
| Counts due by class interval | Class A every 30 days; product counted 40 days ago; another 10 days ago | Open Counts due. | The 40-day product is listed (40 >= 30); the 10-day product is not. A never-counted product with stock is listed with Last counted 'Never' |
| Edit a policy row | - | Set Class B Every to 60, tick Blind, Recount above 5, Freeze the location. | Saved with no page reload; a stale second session is refused; Every 0 is refused |
| Count this class | Two warehouses | Click Count this class for A. | A count is started for the stock location of the first warehouse only; message points to Cycle counts |
Stock periods
| Action | When | What you do | What happens |
|---|---|---|---|
| Soft close a month | Current month open | Click Soft close on the current month; post a receipt as a normal user; then as a user with the override right. | Normal user refused '<Month Year> is soft-closed. Only somebody who may post into a closing month can.'; override user posts |
| Hard close needs a clean reconciliation | Last month ended; Difference 0.00 | Click Hard close on last month. | Status Hard-closed; valuation and account balance are frozen on the row; every earlier month also becomes Hard-closed |
| Hard close refused on a difference or an unfinished month | (a) Difference 100.00; (b) current month | Click Hard close on each. | (a) 'Stock valuation ... and the inventory account ... differ by 100.00 at <date>. Reconcile before hard-closing.'; (b) 'A month is hard-closed only once it has ended.' |
| Posting into a hard-closed month | Last month Hard-closed | Post a receipt dated in last month, even as an administrator. | '<Month Year> is closed for stock. Post it in an open month.' |
| Reopen order | Two months hard-closed (Aug, Sep) | Reopen Aug first; then Sep; then Aug. | Aug refused 'Reopen 2026-09 first: a later month is hard-closed.'; Sep reopens; then Aug reopens |
Lots
| Action | When | What you do | What happens |
|---|---|---|---|
| Create a lot with expiry | Lot-tracked product with expiry management | New lot LOT-2026-001, expiry 2027-03-31. | Lot listed In use with that expiry; Open 360 link works |
| Lot rules | Product tracking expiry; a service | Create a lot with no expiry; a repeat number; a lot for the service; change the product on an existing lot. | 'This product requires an expiry date on every lot.'; 'This lot or serial already exists for the product.'; 'Only stocked goods carry lots or serials.'; 'A lot cannot be moved to another product.' |
| Dates default from the shelf-life policy | Product shelf life 365 days; receipt gives manufacture date only | Create lot with manufacture date 2026-01-10. | Best-before / removal / expiry are filled from the product's policy and follow the required order |
| Retest date blocks delivery | Lot with Retest by 2026-08-01; delivery scheduled 2026-09-01 | Validate a delivery of that lot. | 'Lot <name> was due for retest on 2026-08-01. Record the retest first.' |
| Status and retire | Lot with stock | Set Stock status to Quarantine; later Retired. | Stock of a quarantined lot is not available; a retired lot is no longer offered on new documents |
Serial numbers
| Action | When | What you do | What happens |
|---|---|---|---|
| Create serials | Serial-tracked product | New serial SN-0001, condition New, warranty end 2028-01-31; repeat SN-0001 for another product. | First saved; second 'This serial number already exists in the company.' (unique across the company) |
| Parent lot required | Product tracked by lot and serial | Create a serial with no parent lot; then with another product's lot. | 'This product requires a parent lot for every serial.'; 'Choose a lot belonging to the same product.' |
| Warranty order | - | Set warranty start 2027-01-01 and end 2026-01-01 (API). | 'Warranty end cannot precede warranty start.' |
Reorder & pick-face rules
| Action | When | What you do | What happens |
|---|---|---|---|
| Create a replenish rule | Product, warehouse | New rule: min 10, max 50, safety 5, multiple 12, lead 7, supply Buy, supplier S. | Rule listed; saving the same product / warehouse again updates the same rule (no duplicate) |
| Maximum below minimum | - | Min 20, Max 10. | 'Maximum must not be below minimum.' |
| Transfer supply needs another warehouse | Two warehouses | Supply by Transfer with the same warehouse, then DXB2. | 'Choose another warehouse to transfer from.'; DXB2 accepted |
| Pick-face rule | Bins A-01-01 (pick) and BULK-01 | Kind Pick face, bin A-01-01, refill from BULK-01. | Saved; same bin for both, or a bin of another warehouse, is refused 'A pick face needs its bin and the bulk location it refills from, both in this warehouse.' |
Drop-ship routes
| Action | When | What you do | What happens |
|---|---|---|---|
| Create a route and sell drop-ship | Drop shipments switch on; supplier S | New route for product P shipped by S, lead 5. Confirm a sale of P. | A drop shipment is raised (supplier ships to customer) instead of a warehouse delivery; a second route for P is refused |
| Inactive route | Route exists | Untick Active and confirm a sale. | The sale is delivered from stock as usual |
Webhooks
| Action | When | What you do | What happens |
|---|---|---|---|
| Create and see the secret once | Right inventory.events.manage; a reachable https test receiver | New webhook with address, tick two events, Create. | Signing secret shown once with 'copy it now'; reopening never shows it again |
| Address checks | - | Use http://x.example, https://user:pw@x.example, https://192.168.1.5, a non-resolving host. | 'Webhooks are sent over https.'; 'Put credentials in the signature secret, not the address.'; 'That address is on a private network.'; 'That address does not resolve.' |
| Delivery and signature | Webhook on receipt_posted | Validate a receipt; check the receiver. | One POST per event, in order; headers X-A2N-Event-Id, X-A2N-Timestamp, X-A2N-Signature = sha256 HMAC of '<timestamp>.<body>' with the secret; a repeat shows the same event id |
| Failure back-off and auto-pause | Receiver returns 500 | Validate receipts and watch the webhook. | Failures count up; wait grows 30 s, 60 s, 120 s... capped at 3,600 s; after 10 failures the status becomes Paused. Resume resets the failures and waiting time |
| Send test, send now, send again | Active webhook | Click Send test; Send now; Send again from sequence 0; sequence -1. | Test sends a ping (type inventory.ping.v1) without moving the cursor; Send now delivers pending; from 0 resends everything; -1 'That sequence has not been published.' |
| Rotate the secret | Webhook exists | Click New signing secret. | A new secret is shown once; the old secret no longer verifies new deliveries |
| Delete | Webhook with delivery history | Delete it. | The webhook, its delivery history and its cursor are removed; a webhook of the same name can be created again |
Intercompany links
| Action | When | What you do | What happens |
|---|---|---|---|
| Link two companies both ways | User is a member of both companies with the intercompany right in both; a partner standing for each company | Link company B: our customer for it = B-partner, its supplier for us = A-partner, Cost plus markup 8.5, goods on the way belong to the buyer. | A link row appears in both companies at once with the same pricing; a transfer priced from A at cost 100.00 sells at 100.00 x 1.085 = 108.50 |
| Linking refused without rights | User is not a member of the other company, or lacks the right there | Link that company. | 'You do not belong to that company, so you cannot link companies.' or 'You need the intercompany right in <code> to link companies.' |
Stock policy
| Action | When | What you do | What happens |
|---|---|---|---|
| Negative stock: block | Policy Block; product with 3 on hand | Deliver 5. | Refused: stock would go below zero |
| Negative stock: warn | Policy Warn | Deliver 5 of 3 on hand. | Allowed with the warning '<code> is now below zero.'; on hand shows -2 |
| Negative stock: approval | Policy Approval; user without stock.negative.approve and one with it | Deliver 5 of 3 on hand as each. | First: '<code> would go below zero. Somebody with the right to approve negative stock has to confirm it.'; second can confirm and it posts '<code> taken below zero with approval.' |
| Rule precedence | Company default Block; warehouse rule Warn; category rule Allow; product rule Block | Deliver more than on hand for a product in that category and warehouse. | Product rule wins (Block). Remove it and the category rule (Allow) wins; remove that and the warehouse rule (Warn) wins; then the company default |
| Tracked and FIFO stock never go negative | Policy Allow; a lot-tracked product; a FIFO-costed product | Deliver more than on hand of each. | Both refused whatever the policy says |
| One rule per target | A rule for product P | Create a second active rule for P. | 'That target already has a rule. Change it instead.'; an inactive second rule is allowed |
| Approval threshold for adjustments | Threshold 5,000.00 | Raise an adjustment worth 4,000.00 and another worth 6,000.00. | 4,000.00 posts without an approver; 6,000.00 waits for approval |
| Backdate policy | Today 2 Oct; policy Needs the backdating right | Post a movement dated 1 Oct as a user without and with stock.backdate; then set Is refused. | Without the right: 'A stock movement dated before today needs the backdating right.'; with it: posts and is audited; Refused: 'Stock movements cannot be dated before today in this company.' |
| Over-receipt tolerance | Tolerance 5 %; order of 100 | Receive 105 then 106. | 105 allowed (100 x 1.05); 106 refused |
| Defaults validation | - | Save approval value -1, over-receipt 101, GS1 prefix 'ABC12', empty transit account. | 'The approval threshold cannot be negative.'; 'The over-receipt tolerance is 0 to 100 percent.'; 'A GS1 company prefix is 6 to 12 digits.'; 'Give the goods-in-transit account code.' |
Units & packaging
| Action | When | What you do | What happens |
|---|---|---|---|
| Packaging conversion | Product in Piece | New packaging Carton, holds 12. Receive 5 Carton. | 60 pieces are booked (5 x 12); a unit of the same family (for example Dozen) converts by its ratio without packaging |
| Changed factor supersedes | Carton = 12 | Save Carton again with holds 24. | Old row becomes Superseded (shown with Show superseded); new row Current = 24; old documents keep 12; saving the same factor and barcode again changes nothing |
| Packaging validation and retire | - | Unit name equal to the product's unit; factor 0; then Retire a current row. | '<unit> is already the product's own unit.'; 'Enter a positive value.'; retired row becomes Superseded and cannot be used on new moves ('<name> is not a unit <code> can be moved in...') |
Inventory features
| Action | When | What you do | What happens |
|---|---|---|---|
| Turn a switch off | Administrator | Applications > Inventory > Features: turn Cross-docking off, save. Open Inventory menu; try to create a cross-dock rule by API. | Cross-docking menu disappears; existing records still readable; the change is refused 'Cross-docking is disabled for this company.' |
| Drop shipments off hides routes | Switch on with routes | Turn Drop shipments off. | Drop shipments, Drop-ship returns and Drop-ship routes menus go; sales no longer raise drop shipments for new entries |
Inventory fields
| Action | When | What you do | What happens |
|---|---|---|---|
| Hide and require fields | Administrator | Set Retest by (lot) Required; edit a lot without a date. Set Serial warranty end Hidden; create a serial with a date by API. | 'Retest by is required.'; 'Serial warranty end is turned off.' |
| Hide Source document | Administrator | Set Source document Hidden; create a transfer with an origin by API. | Refused 'Source document is turned off for this company.'; the transfer form no longer shows the field |