The Sales Order is always the destination. Two ways data gets there - manual SC translation at go-live, direct intake from requesters once streamlining is in place.
At Go-Live
Capture at the SO via SC manual entry
WhatsApp
Slack
Email
Voice / call
→
SC
Manual entry
→
SO
Sales Order
The bottleneck is the feature. SC's manual translation is the data-quality safeguard that keeps Odoo clean.
Post Go-Live
Streamline data directly into Odoo
Odoo Portal / web store
Web form submission
Slack pipe
WhatsApp ingestion
SO
Sales Order
Requesters submit structured data through whatever channel suits them. No SC re-typing. Triage stays human; intake gets automated.
Odoo + Sage | Finance Integration Briefing
04/10
+ Section 04 · Roles
Who does what
The record picks up data at each handoff. By the time it reaches Finance, the dimensions are stamped - Finance just runs the match.
01 · Request
Requester
Field · ROC · Partners
Adds to record
Activation Tag
Location
Items + qty
Need-by date
02 · Triage + Buy
Buyer / SC
Kim · Matty
Adds to record
Vendor
Functional Category
Department
GL · Fundderived from Tag
Commits at PO
03 · Receive
Receiver
Warehouse · Activation
Adds to record
Qty received
Discrepancies
Receive date
04 · Match + Pay
Finance
Greg + Team
Finance runs
3-way matchInvoice + PO + Goods Receipt
Disbursement
The shift: dimension coding moves from Finance's downstream cleanup to SC's upstream entry. Finance receives a packet that's already coded.
Odoo + Sage | Finance Integration Briefing
05/10
+ Section 05 · Capture Map
Where each finance dimension gets captured in Odoo
Each dimension is user-selected, derived, rule-defaulted, or inherited from the product - then reviewed by the buyer at PO commit.
Dimension
Captured at
How we capture it
Tags
SO creation
User-selected SC picks from the active subset of the Sage Tags ledger. Drives default Fund, Department, Functional Category.
Location
SO creation
Derived From Odoo warehouse (DC-HQ / ROC-E/W/S) or shipping address (country / US State).
Fund
SO creation
Rule from Tag Hazard-to-Fund mapping (Hurricane → 103, Wildfire → 104, etc.). 502 General Ops if no Tag.
Department
SO creation
Rule from Tag + purpose DU1-D108 Relief Ops for activations. Overrides for HEAT Training, ROC vehicles + rent, Receivables.
Functional Category
SO / PO line
Rule from line description Captured per line so an SO can span categories. AI reads each line's description: direct relief → Program Services; donor / campaign → Fundraising; admin → M&G.
GL Account
SO line
Inherited from product Default expense GL per the GL Reference Guide. Examples: 6409 / 6415 / 6303.
Expense Type
SO line
Inherited from product Default Expense. Fixed Asset for capital categories. Prepaid recognized at invoice in Sage.
Buyers can override any default at PO commit. Finance has final review at invoice posting. Functional Category at the line level means a single SO can carry mixed categories (e.g., a relief shipment line and a donor-event photography line on the same order).
Odoo + Sage | Finance Integration Briefing
06/10
+ Section 06
Two moments, not one: purchase vs. fulfillment
Moment 1
PURCHASE
ROC buys Cambros for general par stock
Tagblank or general
Fund502 General Ops
Time passesweeks, months
Moment 2
FULFILLMENT
Pulled from stock, shipped to Hurricane Y
TagRLF-### Hurricane Y
Fund?
The same physical goods · Different dimensions at two moments
For Finance to weigh in on
AttributionInter-fund transfer at deployment, or reporting-only?
Coding eventsDoes the SO override the PO dimensions, or run parallel?
Cost basisAVCO, current market, or replacement cost?
Odoo + Sage | Finance Integration Briefing
07/10
+ Section 07 · AI Assist · MVP scope
An AI assist, narrowly scoped
5 of 7 dimensions are deterministic - captured by rule, derivation, or product. Only 2 need interpretation.
5 Deterministic · No AI needed
Tags
User-selected
Location
Derived
Fund
Rule from Tag
GL Account
From product
Expense Type
From product
2 AI interpretation adds real value
AI assists
Functional Category
Why · Free-text reading required
"Photographer hired for Hurricane X" lands on Fundraising, not Program Services - even with an activation Tag. The AI reads each line's description to make the call.
AI assists
Department override
Why · Catch the few exceptions
Most lines default to the activation's Relief Ops dept. The AI catches the small set of explicit overrides (HEAT Training, ROC vehicles + rent, Receivables from Employees).
Priority · Fast-followCan be deferred from scope entirely. If we ship it, it runs at SO creation with no dependency on intake streamlining. Pure upside-only addition once the rest of the integration is wired.
Odoo + Sage | Finance Integration Briefing
08/10
+ Section 08 · The trickiest piece
Vendor master: starting simple, with room to grow
At Go-Live
MVP · one-way pull
Approved payable vendors flow from Sage to Odoo
SC's broader vendor universe stays Odoo-only, no expectation of Sage sync
No onboarding workflow, no status round-trip
Post Go-Live
Mid · onboarding handoff
Lifecycle status visible on both sides (pending / approved / rejected)