# Finance Agent Research ## Odoo 18 Finance Domain — Key Models ### account.move (Invoices & Bills) - `move_type`: `out_invoice` (customer invoice), `in_invoice` (vendor bill), `out_refund`, `in_refund` - `state`: `draft`, `posted`, `cancel` - `payment_state`: `not_paid`, `in_payment`, `paid`, `partial`, `reversed` - `invoice_date_due`: payment due date - `amount_residual`: outstanding balance - `partner_id`: customer/vendor ### account.payment - Payments linked to invoices via `account.move` reconciliation - `payment_type`: `inbound` (receipts), `outbound` (payments) - `state`: `draft`, `posted`, `cancel` ### account.bank.statement.line - Bank statement lines for reconciliation - `is_reconciled`: bool — whether matched to a payment/invoice ### Key Search Domains - Overdue: `[('move_type','=','out_invoice'),('state','=','posted'),('payment_state','!=','paid'),('invoice_date_due','<', today)]` - Unreconciled bank lines: `[('is_reconciled','=',False),('journal_id','=',journal_id)]` ## HIPAA Constraints - Finance agent is HIPAA-locked — Ollama only, never cloud LLM - Do not expose partner financial data to non-finance agents via PeerBus - Aggregate/anonymise data in cross-agent responses ## Automation Thresholds (from spec) - Auto-send reminder: overdue > 30 days AND amount_residual > 1,000 - Flag for review: overdue > 90 days (regardless of amount) - Escalate to human: collection_rate < 70% OR overdue_total > 50,000 ## Tool Limits MAX_TOOLS_PER_AGENT = 8 (finance agent is at limit)