Mandate Activity & Reconciliation Reports
Mandate Activity & Reconciliation Reports
Available from v1.0.78, the collections report dashboard at /dashboard/reports/collections includes two new tabs: Mandate Activity and Reconciliation. These join the four existing tabs (Summary, Clawbacks, Fund Flow, Reserve), bringing the total to six.
Mandate Activity Report
The Mandate Activity tab provides a complete picture of mandate lifecycle changes within a selected period.
Summary Stats
At the top of the tab, a row of stat cards shows counts for the selected date range:
| Stat | Description |
|---|---|
| New | Mandates created in the period |
| Activated | Mandates that moved to active status |
| Cancelled | Mandates cancelled in the period |
| Suspended | Mandates suspended in the period |
| Failed | Mandates that failed in the period |
Two additional snapshot cards show the current total of active and suspended mandates (not period-scoped — always reflects live state).
Daily Bar Chart
A stacked bar chart displays the last 30 days of mandate activity. Each bar is broken down by:
- New mandates
- Cancelled mandates
- Suspended mandates
Mandate Table
A paginated table lists all mandates created within the selected period. Columns include:
- Mandate ID
- Tenant name and email
- Property ref
- Status
- Collection amount (£)
- Collection frequency
- Created at
- Activated at
CSV Export
The export includes all table fields plus cancellation, suspension, failure timestamps, and failure reason. File is named mandate-activity-YYYY-MM-DD.csv.
Exported columns:
Mandate ID, Tenant Name, Tenant Email, Property Ref, Status,
Amount (£), Frequency, Created At, Activated At,
Cancelled At, Suspended At, Failed At, Failure Reason
Forward Reconciliation Report
The Reconciliation tab tracks the flow of funds from collection through to forwarding, highlighting any gaps at each stage of the pipeline.
Summary Stats
| Stat | Description |
|---|---|
| Total Collected | Funds debited from tenants in the period |
| Swept to Holding | Funds moved from Modulr to the Griffin holding account |
| Forwarded to Client | Funds released from holding to the agent's client account |
Gap Indicators
Two gap indicators sit between the summary stats:
- Collected → Swept gap — the difference between collected and swept amounts. Green when zero; amber when a gap exists.
- Swept → Forwarded gap — the difference between swept and forwarded amounts. Green when zero (all swept funds have been forwarded); amber when funds are still in holding.
These indicators make it easy to spot funds that are stuck at any stage of the pipeline.
Holding Account Balance Breakdown
A separate breakdown shows the all-time state of the Griffin holding account:
- Total swept in — cumulative amount swept from Modulr
- Clawback debits — total amount reversed due to clawbacks
- Net forwarded — total amount successfully forwarded to client accounts
Daily Bar Chart
A side-by-side bar chart shows collected vs. forwarded amounts per day, making timing differences between collection and forwarding visually apparent.
Daily Reconciliation Table
A per-day breakdown table with columns:
| Column | Description |
|---|---|
| Date | Calendar date |
| Collections Count | Number of collections on that day |
| Collected (£) | Total collected |
| Forwards Count | Number of forward transactions |
| Forwarded (£) | Total forwarded |
| Gap (£) | Collected minus forwarded for that day |
CSV Export
Exports the daily reconciliation table. File is named reconciliation-YYYY-MM-DD.csv.
Exported columns:
Date, Collections Count, Collected (£), Forwards Count, Forwarded (£), Gap (£)
API Endpoints
Both reports are exposed as tRPC endpoints under the reports router.
reports.mandateActivity
Returns mandate lifecycle counts, daily breakdown, and a paginated mandate list for the requested period.
Input parameters:
| Parameter | Type | Description |
|---|---|---|
from | string (ISO date) | Start of the reporting period |
to | string (ISO date) | End of the reporting period |
page | number | Page number for the mandate table (1-indexed) |
pageSize | number | Rows per page |
Response shape (summary):
{
"summary": {
"newCount": 12,
"activatedCount": 10,
"cancelledCount": 2,
"suspendedCount": 1,
"failedCount": 0,
"currentActiveCount": 84,
"currentSuspendedCount": 3
},
"daily": [
{ "date": "2025-06-01", "new": 3, "cancelled": 0, "suspended": 0 }
],
"mandates": [ /* paginated rows */ ],
"totalCount": 12
}
reports.reconciliation
Returns collected vs. swept vs. forwarded totals, gap indicators, holding account balance, and a daily breakdown.
Input parameters:
| Parameter | Type | Description |
|---|---|---|
from | string (ISO date) | Start of the reporting period |
to | string (ISO date) | End of the reporting period |
Response shape (summary):
{
"summary": {
"collectedPence": 1500000,
"sweptPence": 1500000,
"forwardedPence": 1480000,
"collectedSweptGapPence": 0,
"sweptForwardedGapPence": 20000
},
"holdingBalance": {
"totalSweptInPence": 5000000,
"clawbackDebitsPence": 25000,
"netForwardedPence": 4950000
},
"daily": [
{
"date": "2025-06-01",
"collectedPence": 75000,
"collectedCount": 3,
"forwardedPence": 75000,
"forwardedCount": 3
}
]
}
Notes
- All report tabs are scoped per customer — data is strictly isolated to the authenticated agent's account.
- Date inputs follow ISO 8601 format (
YYYY-MM-DD). - Amounts are returned in pence from the API and displayed in pounds (£) in the UI.
- CSV exports are generated client-side and downloaded directly in the browser — no server-side file storage is involved.