Skip to Content
Skip to content
Business flows

Core Cross-App Business Flows (with accounting impact)

Odoo order-to-cash, procure-to-pay, MTO manufacturing, subcontracting, month-end close and service billing, with the journal entries behind each step.

A functional consultant must explain what each click does to stock and to the books. These are the 7 flows that every implementation is built from.

Version note: Odoo 18 = perpetual (automated) valuation posts an entry at every stock move. Odoo 19/20 = no valuation layers and no entry at receipt/delivery; bills and invoices post, and a periodic closing entry + accruals (Accounting > Review > Inventory Valuation) align the stock account. Odoo 20 can post the accruals directly from the report, and late cost changes correct COGS.

Flow 1 · Order-to-Cash (O2C), make-to-stock

CRM Opportunity ─► Quotation ─► Sales Order ─► Delivery (WH/OUT) ─► Customer Invoice ─► Payment ─► Bank reconciliation
Step Menu Stock effect Accounting (Odoo 18, perpetual, Anglo-Saxon)
Quotation sent Sales > Quotations — —
SO confirmed Confirm Delivery created; forecast ↓ —
Delivery validated Inventory > Deliveries On-hand ↓ Dr Stock Output / Interim · Cr Stock Valuation
Invoice posted SO > Create Invoice — Dr Receivable · Cr Revenue · Cr Tax payable. Anglo-Saxon also: Dr COGS · Cr Stock Output
Payment registered Invoice > Register Payment — Dr Outstanding Receipts · Cr Receivable
Bank statement matched Accounting > Bank — Dr Bank · Cr Outstanding Receipts

Configuration you touch: customers (pricelist, payment term, fiscal position), products (Can be sold, invoicing policy, taxes, routes), sales teams, quotation templates, payment providers, follow-up levels.

Variants: down payment (Create Invoice > Down payment %), invoice before delivery (Ordered quantities), deliver from another warehouse, drop-ship (route Dropship: vendor ships to customer, no stock move in your warehouse).

Flow 2 · Procure-to-Pay (P2P)

Reordering rule / MTO / manual ─► RFQ ─► (Approval) ─► PO ─► Receipt (WH/IN) ─► Vendor Bill (3-way match) ─► Payment
Step Accounting (Odoo 18 perpetual)
Receipt validated Dr Stock Valuation · Cr Stock Input / Interim Received
Bill posted Dr Stock Input · Dr Input tax · Cr Payable (any price difference → price-difference account / revaluation under AVCO/FIFO)
Payment Dr Payable · Cr Outstanding Payments → bank

Landed costs (FIFO/AVCO): Inventory > Operations > Landed Costs → link the receipt, add freight/customs → Validate → stock value increases (v20: per product on the transfer).

Controls: PO double-validation threshold, vendor blocking warnings, bill control policy (ordered vs received), Should Be Paid flag, duplicate-bill detection (v19/20 red/yellow levels).

Flow 3 · Make-to-Order manufacturing

SO (product route: MTO + Manufacture) ─► MO auto-created ─► Components picked (1/2/3-step) ─► Work orders (Shop Floor)
   ─► Quality checks ─► Finished goods to stock ─► Delivery ─► Invoice
Step Accounting (Odoo 18)
Components consumed Dr WIP/Production · Cr Stock (component value)
Labour/work center cost Work center cost per hour → goes into the finished product cost (and analytic)
Finished product produced Dr Stock (FG) · Cr Production

Settings: Work Orders, By-products, Quality, MPS, Subcontracting, Unlock/Lock, Work-order dependencies. Odoo 20 adds continuous production: the next work order starts as soon as some quantity is produced, a work-order Gantt, a single Produce button, and forced flexible consumption.

Flow 4 · Subcontracting (job work)

  1. BoM type Subcontracting, subcontractor set on the BoM; product bought from the subcontractor (vendor price = service fee).
  2. PO to the subcontractor → on confirmation a Resupply Subcontractor transfer sends components (if the route is set).
  3. Receipt of finished goods → Odoo creates and closes the subcontract MO in the background, consuming the components at the subcontractor location.
  4. Bill for the service. Finished good cost = components + subcontract fee.

Flow 5 · Record-to-Report (month-end close)

Task Where
Bank reconciliation complete Accounting dashboard > bank journal
Post vendor bills received / accrue the missing ones Bills to receive; v19+ accruals from the Inventory Valuation report
Inventory closing entry (v19/v20) Accounting > Review > Inventory Valuation > set date > Generate/Post closing entry
Depreciation entries Assets > compute; posted automatically by date
Deferred revenue/expense Deferred entries (start/end dates on lines)
Currency revaluation Reporting > Unrealized currency gains/losses
Tax return Reporting > Tax return (v19: guided with checks)
Review P&L, balance sheet, aged AR/AP Reporting
Lock dates Accounting > Settings > Lock dates (sales / purchases / tax / everything / hard lock)

Flow 6 · Project / Service billing

SO line (service product) ─► Project + task auto-created ─► Timesheets / milestones / materials / expenses ─► Invoice
Service invoicing policy Invoiced quantity =
Prepaid / Fixed price Ordered qty (invoice up-front)
Based on Timesheets Approved timesheet hours
Based on Milestones Reached milestones (% of the line)
Based on Delivered Quantity (manual) What you type in Delivered

Profitability: project dashboard (revenues from invoiced SO lines, costs from timesheet cost = employee hourly cost, purchase bills and expenses on the analytic account). In Odoo 20 this moves into dedicated reports.

Flow 7 · Hire-to-Retire (HR)

Recruitment (job → applicant → contract offer) → Employee + contract → Attendance / Time Off / Expenses → Payroll (work entries in v18–19; removed in v20, pay runs rebuilt) → Payslip posting (Dr Salary expense / Cr Salary payable, statutory liabilities) → Payment → Appraisal → Departure (archive).

Odoo 20 licence warning: every active employee record not linked to a user is billed as a Light User. Archive former employees.

Need an Odoo expert on your project?

Implementation, migration, customisation or team training: tell me what you need and I will reply within 24 hours.