📄 Obligation: Review AR Aging in Xero (weekly)

Obligation: Review AR Aging in Xero (weekly)

Frequency: Weekly

Seat: Customer Support Admin


Why: Xero is our accounting source of truth. The per-event Ask for Deposit activity catches the deposit chase, but nothing catches a final-invoice balance that quietly slides past due. A weekly sweep of Xero's Aged Receivables closes that gap before any line ages into 60/90. "Hit Our Marks" on cashflow without surprising the client.

Critical prerequisite — sync first, age second:

Invoices originate in Flex Rental Solutions (and sometimes Odoo) before they ever reach Xero. Xero only knows about an invoice once it has been pushed across. An aging review on a Xero book that's missing recent invoices will under-report past-due exposure — you'll think a client is current when in fact you have an unsynced invoice already aging upstream.

As of 2026-05-16, the Flex ↔ Odoo half of this gap is automated:

  • When a quote is emailed from Flex to a client, the helpdesk ticket triggers ir.actions.server #2014, which pulls the quote total from Flex and writes it onto the linked x_events record's x_studio_event_gross_revenue_without_tax.
  • When an invoice is emailed from Flex to a client, ticket #2017 fires; it resolves the invoice's element_id via /api/search and pulls the invoice's current total (not the parent quote's), so any line-item edits made during invoicing flow through. Verified end-to-end on the 2026-05-16 MAYXX TEST EVENT round-trip.

So at the moment a quote or invoice is sent to the client, Odoo's event revenue should match Flex's. That removes the "did the Odoo record catch up?" question from this weekly review.

The remaining gap is Odoo → Xero, which is still manual via the Send-to-Xero server action (KB #804) and has known data-quality issues (customer-name merging, tax codes, line items). L10 task #6975 ("A/R invoices aren't getting into Xero consistently") tracks that remaining gap. Step 1 below is what protects us for the Odoo → Xero half until that's automated too.

Procedure:

  1. Sync invoices into Xero first. For each event closed in the past week:
  2. In Odoo, confirm the event's x_studio_event_gross_revenue_without_tax is non-zero (the auto-sync should have populated it when the invoice was emailed from Flex). If it's $0 and the event is closed, that's a red flag — check the helpdesk ticket chatter for an "Auto-sync revenue" line; if it's missing or shows an error, the auto-sync didn't run and the invoice may not exist in Flex yet.
  3. Confirm the invoice has been pushed to Xero (run the Send-to-Xero server action per KB #804, or post manually if the action errors). This step is still manual.
  4. In Xero, verify the invoice landed with the correct customer, line items, and tax codes (PST / GST). Fix any merge or tax issues immediately — see Odoo - Posting a Payment for tax-code conventions.
  5. Anything that should be in Xero but isn't is your highest-priority item — those invoices may already be past due upstream without showing up in the next step.
  6. In Xero, open Reports → Aged Receivables Summary (bucketed view) and Business → Invoices → Awaiting Payment sorted by Due Date ascending (line-by-line view).
  7. Work oldest lines first. For each past-due invoice:
  8. Identify the customer and the related event in Odoo.
  9. Apply the day-0/1/5 escalation from Reference: Deposit Collection Policy — the same chain (friendly nudge → Sales Manager → GM) applies to final-invoice AR.
  10. Log the chase round as a mail activity on the related event record so the next person picking it up has full history.
  11. Cross-check against the Events with Deposit Required scorecard (KB #1848) — any deposit-overdue line should appear in both views.
  12. Mark the recurring Odoo task complete with a short note ("3 past-due lines worked, 1 escalated to Sales Mgr; 2 unsynced invoices pushed to Xero").
  13. Surface any stuck lines (no client response after day-1) in the next L10 issues list. Also surface chronic sync failures — if you find more than 2 unsynced invoices in a given week, that's an L10 issue in its own right.

Source of truth: Xero. Flex job status and Odoo invoice records are operational mirrors only — if Xero and the others disagree, Xero is right for what has been synced. Anything not yet synced is invisible to Xero and must be pushed before this obligation can be considered complete. Reconcile via the Accounts Receivable Processing Guide.

Related: