GRN (Goods Receipt Note)

Receive against a PO to post warehouse stock and update qtyReceived — without double-counting bill-posted qty.

Business Suite · Purchases

Ruta: Store → Purchases → [PO] → Receive

Definición

Store → Purchases → [PO] → Receive(acceptedQty[])

A GRN (Goods Receipt Note) records goods accepted from a supplier against an open PO (Purchase Order). When the GRN posts, stock increases (warehouse / inventory movement + sellable quantity) and PO line qtyReceived increases. Accepted quantity cannot exceed remaining receivable quantity.

Compatibility

  • Starter+ with purchases / inventory capability.
  • Requires an existing PO that still has remaining receivable quantity (PO approved/sent or already partially received — not draft/submitted/cancelled/closed).
  • Professional+ records the receive on the active / default warehouse ledger.
  • Double-stock rule: quantity already posted via bill-without-GRN must not be GRN’d again.

Prefer GRN before billing when the warehouse confirms physical receipt. That keeps stock, payables, and PO receive progress aligned with Flow A on Purchases and inventory.

Path, fields, and terminology

Store → Purchases → open PO → Receive
  lines[]: { poLine, acceptedQty }
  // business rule: acceptedQty ≤ remainingQty

Effect on post:
  stock +acceptedQty
  PO line qtyReceived += acceptedQty
  PO.status → partially_received | received

acceptedQty — quantity accepted on this GRN.

qtyReceived — cumulative received quantity on the PO line (prior GRNs + bill-posted receive).

remainingQty — orderedQty − qtyReceived (what you may still accept).

Business rule: acceptedQty ≤ remainingQty.

When stock posts (current BonikBiz UI)

  • On Store → Purchases → [PO] → Receive, the GRN is created and posted immediately (status completed, stockPosted true).
  • There is no separate “Save draft GRN” step in the current Purchases UI — Receive posts stock in the same action.
  • Default Receive (no custom lines) accepts all remaining receivable qty on the PO.
  • Partial receive: pass acceptedQty per line (≤ remainingQty) so leftover qty stays open for a later GRN.
Nota: If you only see one-click Receive, it posts all remaining qty. Use line-level acceptedQty when you need a short delivery.

Important: bill-without-GRN vs GRN (double-stock rule)

If a supplier bill already posted stock for a quantity (Flow B) and increased qtyReceived, that quantity is already received for stock purposes.

Do not create a GRN for the same quantity again — this is a hard double-stock prevention rule, not only a tip.

Nota: remainingQty already excludes bill-posted receive. If remaining is 0, there is nothing left to GRN.

Receive goods (GRN)

  1. Open Store → Purchases and select an approved / sent / partially_received PO with remaining qty.
  2. Choose Receive (GRN).
  3. Confirm receive — stock increases and qtyReceived updates (default: all remaining qty).
  4. Optionally create the supplier bill from the same PO page (Store → Purchases → [PO] → bill). Prefer billing after receive so you bill received qty. The API can also create a bill from grnId; the store UI bills from the open PO.
  5. Verify sellable quantity under Store → Inventory (and Warehouse balances on Professional+).

Examples

Full receive
  Ordered 20 → GRN accepted 20 → qtyReceived 20 → remaining 0 → PO.status received → stock +20

Partial then complete
  Ordered 20 → GRN-1 accepted 18 → qtyReceived 18 → remaining 2 → PO.status partially_received → stock +18
  → GRN-2 accepted 2 → qtyReceived 20 → remaining 0 → PO.status received → stock +2

Bill without GRN (do not GRN again)
  Ordered 20 → Bill posts stock for 20 → qtyReceived 20 → remaining 0 → no GRN for those 20

PO receive progress uses status values partially_received and received (same PO.status field as document workflow — see Purchases and inventory).

Corrections: do not delete posted GRNs

  • Do not delete posted GRN history to “fix” a mistake.
  • Correct wrong receives with void / reverse / inventory adjustment paths your store supports, so the audit trail stays intact.
  • Cancel on the PO stays blocked while any qtyReceived > 0 — unwind stock first.
Nota: Purchase ops covers cancel / reverse patterns after receive.

Common errors

  • Accepted qty too high — reduce to remainingQty (orderedQty − qtyReceived).
  • Stock looks doubled — same qty may have been billed without GRN and also GRN’d; check qtyReceived on the PO.
  • PO still not received after a bill — receive progress follows GRN or bill-posted stock receive, not a bill that did not post stock.
  • Cannot cancel PO after GRN — reverse/adjust stock before cancel is allowed.
Nota: Map: Purchases and inventory. Concepts: journals, stock, parties.

Where GRN sits in the purchase flow

Normal:    Supplier → PO → GRN → Stock → Bill → Payment
Exception: Supplier → PO → Bill → Stock/Received → Payment  (no second GRN for that qty)

This page is the operational GRN article. Use PO and Purchases and inventory for the wider map.

Véase también