Odoo + Sage | Finance Integration Briefing
01/8

Why we're here

Confirming the 2025 design for how Odoo and Sage exchange data through Snowflake, before we wire it up.

Odoo
SC Operations
Snowflake
Data hub
Sage
Finance ledger

Each system gets what it needs.

Odoo + Sage | Finance Integration Briefing
02/8

How data moves between Odoo and Sage

SageFinance
OdooSC Operations
Master data via Snowflake
Vendors · GL · Funds · Departments · Locations · Tags
Available in Odoo
Pickers, defaults, dimension lookups
SO Created
Captures Tag · Location · Fund · Department · Functional Category (line-level)
PO commitment recorded
Stages the future 3-way match
PO header + lines
+ dimensions + SO ref
PO confirmed
Vendor + dimensions stamped at commit
Goods Receipt data recorded
Ready for match
Goods Receipt qty + discrepancies
+ SO ref
Goods Receipt
Warehouse validates qty, flags discrepancies
3-Way Match → AP
Invoice + PO + Goods Receipt matched · Disbursement triggered
Odoo + Sage | Finance Integration Briefing
03/8

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
04/8

Vendor master: starting simple, with room to grow

At Go-Live
MVP · one-way pull
Sage Odoo APPROVED PAYABLE VENDORS one direction only
  • 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
Odoo Sage SC SUBMITS PACKET SAGE_VENDOR_ID + STATUS
  • Lifecycle status visible on both sides (pending / approved / rejected)
  • Structured promote-to-payable workflow replaces ad-hoc email handoffs
  • Sage stays the system of record for diligence; Odoo gets the queue UI
Odoo + Sage | Finance Integration Briefing
05/8

Two SO states: MVP vs Streamlined

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
06/8

AI Assist

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-follow Can 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
07/8

Purchase vs Fulfillment

Moment 1
PURCHASE
ROC buys Cambros for general par stock
Tag blank or general
Fund 502 General Ops
Time passesweeks, months
Moment 2
FULFILLMENT
Pulled from stock, shipped to Hurricane Y
Tag RLF-### 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
08/8

Next steps

Locked · Required for Go-Live
Core integration
  • Master data from Sage → Odoo (Tags, Vendors, GL, Funds, Departments, Locations) via Snowflake
  • SO created in Odoo with line-level dimensions
  • PO → Sage with dimensions + SO ref
  • Goods Receipt → Sage with qty + discrepancies
  • 3-way match runs in Sage
  • Manual SC entry of Requests
  • One-way vendor pull from Sage's approved-payable list
Negotiable · Ride Along if Capacity Allows
Improvements
  • AI assist for Functional Category + Department overrides
  • Request auto-ingestion (direct into Odoo)
  • Round-trip vendor sync (promote-to-payable)
  • Purchase vs Fulfillment treatment (pending Finance guidance)