EnglishOverview & PlatformBusiness FlowsERP — Order-to-Cash & Procure-to-Pay

ERP — Order-to-Cash & Procure-to-Pay

The Finance Pack covers the two fundamental commercial cycles every product-selling business runs: selling to customers (Order-to-Cash) and buying from suppliers (Procure-to-Pay). Both flows use the same Document Chain principle — each step is created from the previous one, quantities are tracked at line level, and every step is optional based on your configuration.

Apps involved: Sales · Finance · Accounting · Procurement · Inventory · CRM

ERP — Document chain from quote to payment
ERP — Document chain from quote to payment

Order-to-Cash (Sales)

The Order-to-Cash cycle covers everything from a customer request through to receiving payment.

Full flow

[Quote] → Sales Order → [Delivery Order] → Invoice → Payment

Steps in brackets are optional — toggle them on or off per your business rules. Each stage names the app that owns it.

Finance — Sales order with line-level delivery tracking
Finance — Sales order with line-level delivery tracking

Quote (optional) — Sales

Create a quote for the customer with proposed pricing, items, and validity date. The customer can approve or negotiate. Once approved, convert to Sales Order in one click — all lines, pricing, and customer data carry over.

  • Status: draftsentaccepted / rejected / expired
  • Supports multiple versions (revision history)
  • PDF generation for customer-facing output

Sales Order — Sales

The confirmed commitment to sell. Once confirmed, the SO drives inventory (if delivery is enabled) and invoicing.

  • Status: draftconfirmedpartially_deliveredfully_delivered / cancelled
  • Line-level qty tracking: ordered → delivered → invoiced
  • Multiple delivery orders per SO (partial shipments)

Delivery Order (optional) — Inventory

Records the physical movement of goods out of the warehouse.

  • Status: draftconfirmedshippedcompleted / cancelled
  • Confirms actual quantities shipped (may differ from ordered)
  • Triggers stock deduction in Inventory module
  • Connects back to SO to update delivery status

Invoice — Finance

The legal demand for payment, linked to the SO and DO.

  • Status: draftsentpartially_paidpaid / cancelled
  • Quantity validation: cannot invoice more than delivered (strict mode)
  • Recurring invoice support for subscription billing
  • e-Invoice integration (Vietnam: Viettel-CA, BKAV, MISA)

Payment — Finance / Accounting

Records cash received against the invoice.

  • Auto-reconciliation: system matches payments to open invoices
  • Partial payments supported
  • Payment triggers AR balance update in Accounting

When revenue is recognised

By default, revenue hits your books when you send the invoice. That is the right answer for most businesses, but not for all — so a sales order can be set to recognise earlier:

MethodRevenue is recognised when
On invoice (default)You send the invoice
On orderYou confirm the sales order
On shipmentEach time goods actually leave — partial deliveries recognise partially
On completionYou mark the order fulfilled
By milestoneYou record a milestone, on your own schedule
⚠️

This is an advanced setting, off by default. Leave it off and every order behaves exactly as it always has. Turn it on only if your accounting policy genuinely requires it — the choice belongs to your accountant, not to sales.

The important consequence: when revenue was already recognised earlier, the invoice posts only the remaining amount. If nothing remains, the invoice creates no accounting entry at all — it is still a valid legal document, it simply does not book the same revenue twice. Voiding an order reverses every entry it created, not just the latest one.


Procure-to-Pay (Purchasing)

The Procure-to-Pay cycle covers supplier management — from identifying a need through to paying the supplier.

Full flow

[PR] → [RFQ] → Purchase Order → [GRN] → Vendor Bill → Payment

Purchase Requisition (optional) — Procurement

An internal request to purchase something. Used when purchasing requires approval before an order is placed.

  • Status: draftsubmittedapproved / rejected
  • Approval workflow with multi-level sign-off
  • Once approved, converts to RFQ or PO directly

RFQ — Request for Quotation (optional) — Procurement

Send a price request to one or more suppliers. Compare responses, score vendors, and select the best offer.

  • Status: draftsentclosed
  • Multiple supplier quotes on a single RFQ
  • Vendor scoring: price, lead time, quality rating
  • Convert best response to Purchase Order

Purchase Order — Procurement

The confirmed commitment to buy from a specific supplier at agreed terms.

  • Status: draftconfirmedpartially_receivedfully_received / cancelled
  • Line-level tracking: ordered → received → billed
  • Automatic notifications to supplier on confirmation

Goods Receipt Note (optional) — Inventory

Records goods physically arriving at the warehouse.

  • Status: draftconfirmed / cancelled
  • Can receive partially (GRN qty ≤ PO qty remaining)
  • Confirms stock addition in Inventory module
  • Supports lot number and expiry date capture (if lot tracking is on)
  • Triggers 3-Way Match automatically

3-Way Match — Finance

Automated reconciliation of PO ↔ GRN ↔ Vendor Bill before payment is approved.

CheckPass condition
Quantity matchBill qty ≤ GRN qty
Price matchBill price ≤ PO price (within tolerance)
PO referenceBill references a valid PO

Discrepancies surface as exceptions requiring manual review. Matched bills flow to payment without friction.

Vendor Bill — Finance

The supplier’s invoice, recorded against the PO and GRN.

  • Status: draftsubmittedapprovedpartially_paidpaid
  • Must pass 3-Way Match (or manual override with reason)
  • Updates AP balance in Accounting

Payment — Finance / Accounting

Records cash paid to the supplier.

  • Batch payment support (pay multiple bills in one run)
  • Bank reconciliation: matches payments to bank statement lines
  • Updates AP balance on payment confirmation

Landed Costs

When purchasing physical goods, the true cost includes freight, insurance, import duties, and handling fees — not just the PO price. XBuddy lets you attach these costs to a GRN and allocate them across line items by quantity, value, or weight.

GRN (goods received)
  + Landed Cost document (freight, duties, insurance)
  = Adjusted unit cost used for inventory valuation and COGS

Landed cost journals post automatically to the configured GL accounts.


Data Integrity Rules

RuleBehaviour
Invoice > delivered qtyBlocked (strict mode) or warned (loose mode)
GRN > PO qtyBlocked — cannot receive more than ordered
Cancel confirmed SORequires all linked DOs and invoices to be cancelled first
Cancel paid invoiceMust create a credit note — cannot delete
Modify confirmed PORequires amendment workflow

Status Reference

Quote:          draft → sent → accepted / rejected / expired
Sales Order:    draft → confirmed → partially_delivered → fully_delivered / cancelled
Delivery Order: draft → confirmed → shipped → completed / cancelled
Invoice:        draft → sent → partially_paid → paid / cancelled
Purchase Req.:  draft → submitted → approved / rejected
Purchase Order: draft → confirmed → partially_received → fully_received / cancelled
GRN:            draft → confirmed / cancelled
Vendor Bill:    draft → submitted → approved → partially_paid → paid

Integration Points

ModuleWhat happens
InventorySO confirmation → Delivery Order queued; GRN confirmation → stock added
AccountingInvoice confirmed → AR entry; Bill approved → AP entry; Payment → cash account
CRMDeal won → Sales Order pre-filled from deal data
ProcurementApproved PR → RFQ or PO created
e-InvoiceConfirmed invoice → submitted to tax authority (VN: HHDDT)

These assistants automate the two commercial cycles above:

AgentWhat it doesCadence
AR CollectorSegments overdue invoices by risk tier and sends automated payment remindersDaily / event-driven
AP ManagerSchedules payments, flags 3-way-match exceptions, spots early-payment discountsDaily
Procurement AssistantReviews PR/RFQ/PO status, suggests reorders and vendor selectionDaily
Inventory PlannerForecasts demand so POs are raised before stockoutsWeekly
FP&A AnalystProjects 30/60/90-day cash position from open invoices and billsWeekly