Aged Receivable/Payable Report Issues
The aged receivable and payable reports are critical for cash flow management. When they show wrong numbers:
Common symptoms:
- Report shows balance for a customer who has paid in full
- Amounts don't match the partner ledger
- Invoices appear in wrong aging bucket (30-60 instead of 0-30 days)
- Report total doesn't match the trial balance receivable account
- Fully reconciled invoices still appear as outstandingCause 1: Unreconciled Payments
The most common cause — payments exist but are not reconciled against invoices:
# Check for unreconciled payments for a partner
# Accounting > Customers > select partner > Partner Ledger
# Look for payments that are not matched to invoices
# In the aged report, unreconciled payments show as negative amounts
# while unpaid invoices show as positive — but they don't offset
# Fix: Reconcile payments with invoices
# Accounting > Customers > Payments > select payment
# Click "Reconcile" and match it to the correct invoice
# Bulk reconciliation:
# Accounting > Accounting > Reconciliation
# This shows all unreconciled items for automatic matchingCause 2: Wrong Receivable/Payable Account
If a partner has journal entries posted to different receivable accounts, the report may miss some:
# Check which accounts are used
sudo -u postgres psql -d mydb -c "
SELECT DISTINCT aa.code, aa.name, COUNT(aml.id)
FROM account_move_line aml
JOIN account_account aa ON aml.account_id = aa.id
WHERE aml.partner_id = PARTNER_ID
AND aa.account_type IN ('asset_receivable', 'liability_payable')
GROUP BY aa.code, aa.name;
"
# If entries are spread across multiple receivable accounts:
# Fix: Use the partner's default receivable account consistently
# Or ensure the report filters include all receivable accountsCause 3: Wrong Date Reference for Aging
The aging report uses the invoice due date (date_maturity) to calculate buckets. If due dates are wrong:
# Check invoice due dates
sudo -u postgres psql -d mydb -c "
SELECT am.name, am.invoice_date, aml.date_maturity, am.amount_residual
FROM account_move am
JOIN account_move_line aml ON aml.move_id = am.id
WHERE am.partner_id = PARTNER_ID
AND am.move_type = 'out_invoice'
AND am.payment_state != 'paid'
AND aml.account_type = 'asset_receivable'
ORDER BY am.invoice_date;
"
# If date_maturity is NULL or wrong:
# The payment terms on the invoice determine the due date
# Fix: Set correct payment terms before confirming invoices
# Accounting > Configuration > Payment TermsCause 4: Multi-Currency Differences
# Multi-currency invoices may show wrong amounts when:
# - Exchange rate differences are not posted
# - The report currency differs from the invoice currency
# Check for exchange rate entries
# Accounting > Miscellaneous > Exchange Rate Entries
# Fix: Run the "Unrealized Currency Gains/Losses" wizard
# Accounting > Accounting > Actions > Unrealized Currency Gains/LossesCause 5: Draft or Cancelled Invoices
# Draft invoices should NOT appear in aged reports
# But sometimes they do due to manual journal entries
# Check for unposted entries in receivable accounts
sudo -u postgres psql -d mydb -c "
SELECT am.name, am.state, am.date, aml.debit, aml.credit
FROM account_move_line aml
JOIN account_move am ON aml.move_id = am.id
JOIN account_account aa ON aml.account_id = aa.id
WHERE aa.account_type = 'asset_receivable'
AND am.state = 'draft'
AND aml.partner_id = PARTNER_ID;
"
# Fix: Either post or delete draft entries on receivable accountsCause 6: Report Date Parameter
# The aged report calculates aging FROM a specific date
# If you run it with "As of Date: 2026-03-24"
# An invoice due 2026-03-20 is 4 days overdue (0-30 bucket)
# An invoice due 2026-02-20 is 32 days overdue (30-60 bucket)
# Common mistake: running the report with a future date
# Fix: Set "As of Date" to today or the desired reporting dateVerification Steps
# Cross-check aged report with partner ledger:
# 1. Run Aged Receivable for a specific partner
# 2. Run Partner Ledger for the same partner
# 3. The total outstanding should match
# Cross-check with Trial Balance:
# Total of all aged receivable = Balance of Receivable account in Trial Balance
# If they don't match, look for:
# - Receivable account entries without a partner
# - Multiple receivable accounts
# - Unposted entriesPrevention
DeployMonkey's AI agent validates reconciliation status and monitors aged receivable accuracy. Automatic reconciliation suggestions and payment matching reduce manual errors that cause report discrepancies.