Skip to content

Settings — Trust Accounting

The Settings ▸ Trust Accounting page is the admin surface for managing IOLTA trust accounts, monthly bank reconciliations, retention policy, and the manual two-admin purge workflow.

The single most important thing about this page: the platform never auto-purges. Every retention purge is an explicit two-admin decision captured in the audit log. This is by design to satisfy provincial bar expectations around evidence preservation and intentional destruction.

Settings Trust Accounting — Acme Financial Group demo tenant

Standard PageHeader with the title Trust Accounting and a multi-line description that emphasizes the never-auto-purge guarantee.

The page composes six independent surfaces under one Tabs container:

TabContents
DashboardTrust balances, last recon dates, pending purge counts
Trust AccountsCRUD on IOLTA account records + bank linkage
ReconciliationsMonthly bank-vs-ledger-vs-liability recon list
Retention PolicyOrg-wide policy radio group + Save
Purge EligibilityRecords past the retention window
Pending RequestsTwo-admin purge request queue

Tabs persist in the URL via the standard Tabs component pattern.

Each row captures:

  • Display name
  • Bank (selected from a jurisdiction-approved list)
  • Masked account number
  • Currency (CAD / USD typical)
  • Status (Active / Closed)
  • Last reconciled timestamp

The Add Account button opens an inline form. Edits and closures happen from the row menu.

A clean monthly recon ties three numbers:

bank statement balance == ledger debits − credits == Σ per-client liabilities

When all three match, the recon status is Reconciled. Any drift flips it to Discrepant, and the recon detail page surfaces a per-line-item breakdown to identify the source.

Policy options reflect Canadian provincial bar requirements:

PolicyWindowNotes
5 years5y from matter closeMinimum for several provinces; confirm with your bar
7 years7yCommon middle-ground (LSO, FLSC)
10 years10yCovers every Canadian provincial bar including BC LawSociety
Permanent holdTrust ledger never becomes purge-eligible

The default is 10 years. A change to the policy affects future eligibility — already-eligible records remain eligible until purged or held.

Each save emits org.trust_retention_updated to the audit log.

Records become eligible for purge <retention-window> after the matter closes. Eligibility surfacing is informational — nothing happens automatically. The Eligibility tab lists every eligible record with a Request purge button.

The deliberate two-admin gate:

  1. Admin A clicks Request purge on an eligible record
  2. A request lands in the Pending Requests tab
  3. Admin B (different user_id) reviews and either approves or declines
  4. On approve:
    • Trust ledger entries are cryptographically destroyed
    • The audit event captures both requested_by and approved_by
  5. On decline:
    • The request is closed with the decline reason
    • The record remains in the Eligibility queue

The same-admin guard is enforced server-side. Attempting to approve your own request returns a 403 with error: "self_approval_forbidden".

RoleViewConfigureRequest purgeApprove purge
Owner
Admin✓ (different admin from requester)
Member
Viewer

Every action emits an audit event:

  • org.trust_retention_updated — policy change with diff
  • trust.account_created / trust.account_closed
  • trust.reconciliation_completed / trust.reconciliation_discrepant
  • trust.purge_requested (with requester ID)
  • trust.purge_approved (with both requester and approver IDs)
  • trust.purge_declined (with decliner ID + reason)

Events surface in Settings ▸ Audit Log. Trust events are particularly important — exporting them is the easiest way to satisfy a bar audit’s evidence ask.

SymptomMost likely causeFix
Recon flagged DiscrepantThree balances divergeOpen detail; per-tab breakdown identifies the source
Cannot approve purgeYou requested itDifferent admin must approve
Record stays Eligible after purgeCache staleRefresh the tab
Permanent hold setting revertsSave failedRe-save; check toast for cause
Purge request reappears after declineWas re-submittedRe-evaluate or decline with a clearer reason