Bank Reconciliation

Match internal cash records to bank statements, identify outstanding items, and maintain accurate account balances using Plaid bank feed integration and systematic reconciliation workflows.

Purpose

Bank reconciliation ensures that CEF Core's internal cash records match the bank's actual records. Discrepancies arise from timing differences (deposits in transit, outstanding checks) and occasionally from errors or unauthorized transactions. Regular reconciliation is a fundamental internal control for any financial institution.

CEF Core tracks reconciliation status in the cash.reconciliation table, which records the bank statement balance, the book balance, the reconciliation status, and the user who performed the reconciliation.

Plaid Bank Feed Integration

CEF Core integrates with Plaid to automatically import bank transactions, eliminating the need for manual statement uploads in most cases:

Automatic Import Schedule

JobSchedulePurpose
syncBankTransactionsEvery hourPull new transactions from Plaid for near-real-time visibility
importBankActivityDaily at 2:05 AM UTCComprehensive daily pull for full reconciliation coverage

Imported bank transactions are stored and compared against internal cash transactions. The system flags matches, partial matches, and unmatched items for review.

Reconciliation Process

Follow these steps to reconcile an account for a given statement period:

  1. Review the bank statement balance: Plaid imports the closing balance automatically. For manual reconciliation, enter the statement ending balance and date.
  2. Match transactions: The system automatically matches internal transactions to bank transactions using three criteria:
    • Amount: Exact match between the internal transaction amount and the bank transaction amount.
    • Date proximity: Transaction dates within 1-3 business days of each other.
    • Reference number: Check numbers, wire references, or ACH trace IDs compared for positive identification.
  3. Review unmatched items: Items that cannot be auto-matched appear for manual review. Common reasons include timing differences, bank fees not yet recorded, or data entry discrepancies.
  4. Identify outstanding items: Categorize unreconciled differences as deposits in transit or outstanding checks/payments.
  5. Record adjustments: If bank fees, interest, or other items appear on the bank statement but not in CEF Core, record them as new cash transactions via POST /api/v1/cash/transactions.
  6. Finalize reconciliation: When the adjusted book balance equals the adjusted bank balance, mark the reconciliation as complete.

API Endpoints

View Reconciliation History

GET /api/v1/cash/reconciliation?accountId={uuid}

Response:
{
  "reconciliations": [
    {
      "account_id": "uuid",
      "reconciliation_date": "2026-02-28",
      "bank_balance": "1245890.50",
      "book_balance": "1245890.50",
      "status": "RECONCILED",
      "reconciled_by": "user-uuid",
      "created_at": "2026-03-05T10:15:00Z"
    },
    {
      "account_id": "uuid",
      "reconciliation_date": "2026-03-31",
      "bank_balance": "1312450.75",
      "book_balance": "1298720.25",
      "status": "IN_PROGRESS",
      "reconciled_by": null,
      "created_at": "2026-04-02T09:00:00Z"
    }
  ],
  "count": 2
}

Reconciliation Status Values

StatusDescription
PENDINGBank statement imported but reconciliation not started
IN_PROGRESSReconciliation started, items being matched
RECONCILEDBook balance matches bank balance, all items accounted for
EXCEPTIONUnresolvable discrepancy requiring investigation

Outstanding Items

Outstanding items are transactions recorded in CEF Core that have not yet appeared on the bank statement. These are normal timing differences:

Deposits in Transit

Cash receipts recorded in CEF Core but not yet credited by the bank. Common for check deposits (1-2 day clearing) and late-day deposits received after the bank's cutoff time.

Outstanding Checks

Checks issued and recorded in CEF Core but not yet presented to the bank for payment. These can remain outstanding for days or weeks. Checks outstanding over 90 days should be investigated.

Pending ACH Payments

ACH disbursements initiated but not yet settled. Typically clear within 1-2 business days.

Pending Wire Transfers

Wire transfers that have been initiated but not yet confirmed by the receiving bank. Same-day wires typically clear within hours.

Reconciliation Formula

The standard bank reconciliation formula used by CEF Core:

Bank Statement Balance

+ Deposits in Transit

- Outstanding Checks/Payments

+/- Other Adjustments

= Adjusted Bank Balance

Book Balance (CEF Core)

+ Bank Interest Earned (not yet recorded)

- Bank Fees (not yet recorded)

+/- Error Corrections

= Adjusted Book Balance

Adjusted Bank Balance MUST equal Adjusted Book Balance

Best Practices

  • Reconcile monthly at minimum: Complete each month's reconciliation within 5 business days of receiving the bank statement. CEF Core's Plaid integration provides statements automatically.
  • Investigate stale outstanding items: Checks outstanding over 90 days and deposits in transit over 5 business days require investigation.
  • Record bank fees promptly: When Plaid imports bank service charges or fees, create a corresponding cash transaction immediately to keep the book balance current.
  • Use reference numbers consistently: Always include check numbers, wire references, or ACH trace IDs on disbursements to enable automatic matching.
  • Segregation of duties: The person reconciling the account should be different from the person who authorized the disbursements during that period.

Troubleshooting

Common Issues:

Issue: Bank balance and book balance do not match after reconciliation

Solution: Verify all outstanding items are accounted for. Check for bank fees or interest credits not yet recorded in CEF Core. Look for transactions recorded in the wrong period or with incorrect amounts. The difference often reveals itself when you compare the outstanding items list to the prior month.

Issue: Plaid import shows transactions that do not match any internal records

Solution: These are typically bank-initiated transactions such as service fees, interest payments, or automatic debits. Record them as new cash transactions in CEF Core. If they appear unauthorized, escalate to the fraud detection module immediately.

Issue: Duplicate transactions appearing in the bank feed

Solution: Plaid occasionally imports the same transaction twice during overlapping sync windows. Mark the duplicate as excluded during reconciliation. The hourly and daily import jobs include deduplication logic, but edge cases can occur around statement cutoff dates.

Related Documentation

Bank reconciliation works alongside cash receipts, disbursements, and the daily cash position dashboard.