Financial anomaly library
Six catalogued anomaly patterns for the financial operations domain — revenue recognition cutoff, expense capitalization drift, related-party journal entries, duplicate vendor invoices, period-end manual-journal clustering, and bank reconciliation lag — each with the same sample-event shape the demo ingests and a drafted corrective-action plan your team can approve or amend.
- Each pattern lists the affected_system — Finance / Revenue, every time — that ClearOps routes the deviation to when the live detector runs.
- The sample JSON matches the demo PLACEHOLDER shape: one key per stream, a baseline array trailing into the detected value, and a top-level detected_value field.
- The drafted corrective-action plan follows the same affected-systems + root-cause-hypothesis + next-three-steps structure the pilot ships by default.
Pattern catalogue
6 patterns
Anomaly pattern
Revenue bookings fell outside the period the work was earned — a cut-off slip near period close distorts the recognized revenue line.
Sample event
{
"finance_revenue_recognition_cutoff_days": [
1,
1,
2,
1,
2,
1,
2,
1,
1,
2,
1,
1,
2,
1,
1,
2,
1,
1,
2,
1,
9
],
"detected_value": 9
}Stream: finance_revenue_recognition_cutoff_days · detected_value: 9
Drafted corrective-action plan
Hold period-close reporting, re-cut the revenue schedule around the actual delivery date, and document the slip for the auditor before the close locks.
- Affected systems: Finance / Revenue — cutoff slip on the latest revenue window is 9 days past the period boundary, well above the 2-day tolerance.
- Root-cause hypothesis: the delivery confirmation for the affected engagement posted after the period close and pulled the recognition date into the following period without an adjustment.
- Next three steps: (1) pull the engagement-level delivery log and re-derive the recognition cutoff against the actual service date, (2) raise a manual adjusting journal to reclassify the slipped revenue into the correct period, and (3) document the cutoff exception for the auditor so the period-close evidence chain is intact before lock.
Anomaly pattern
Long-tail capitalization ratios on capitalizable projects diverged from policy — too much landed in capex or too much slipped into opex.
Sample event
{
"finance_expense_capitalization_ratio": [
0.72,
0.71,
0.74,
0.73,
0.72,
0.71,
0.73,
0.74,
0.72,
0.71,
0.73,
0.72,
0.74,
0.73,
0.72,
0.71,
0.73,
0.74,
0.72,
0.71,
0.41
],
"detected_value": 0.41
}Stream: finance_expense_capitalization_ratio · detected_value: 0.41
Drafted corrective-action plan
Re-classify the affected project costs against the capitalization policy, refresh the project tagger, and flag the deviation for the close review.
- Affected systems: Finance / Revenue — capitalization ratio on the active capital project dropped to 0.41, well below the 0.71–0.74 policy band.
- Root-cause hypothesis: a recent project-code reassignment routed capitalizable labour into the shared opex pool instead of the project tag, draining the capitalization ratio for the close window.
- Next three steps: (1) pull the project's labour distribution for the close window and re-tag the capitalizable hours against the project code, (2) raise a reclassification entry that moves the slipped cost back into capex, and (3) flag the project-code routing rule for the close review so the next hit doesn't repeat the mis-tagging.
Anomaly pattern
Same vendor, same amount posted twice in the AP queue — a duplicate payment landed in the pending disbursement file before the daily review caught it.
Sample event
{
"finance_duplicate_vendor_invoice_count": [
0,
0,
1,
0,
0,
1,
0,
0,
1,
0,
0,
1,
0,
0,
1,
0,
0,
1,
0,
0,
6
],
"detected_value": 6
}Stream: finance_duplicate_vendor_invoice_count · detected_value: 6
Drafted corrective-action plan
Reverse the duplicate postings, run the vendor dedupe rule against the affected supplier, and tighten the AP intake checklist for the next batch.
- Affected systems: Finance / Revenue — 6 duplicate vendor invoices for the same supplier / same amount landed in the AP queue during the close window.
- Root-cause hypothesis: the supplier's invoicing template resubmitted the prior period's line items without an updated invoice number, so the AP intake rule did not catch the duplicate by invoice-id alone.
- Next three steps: (1) reverse the 6 duplicate postings before the disbursement file transmits and confirm with the AP specialist, (2) repoint the AP dedupe rule to include supplier + amount + service-period as the match key, and (3) tighten the supplier onboarding checklist so the next invoice carries a unique invoice id that the rule can lock onto.
Anomaly pattern
Manual journal volume concentrated in the last 3 days of the period — high reclass activity near close raises the audit-risk surface.
Sample event
{
"finance_period_end_manual_journal_volume": [
4,
3,
5,
4,
3,
4,
5,
3,
4,
4,
3,
5,
4,
3,
4,
5,
3,
4,
4,
3,
5,
4,
3
],
"detected_value": 5
}Stream: finance_period_end_manual_journal_volume · detected_value: 5
Drafted corrective-action plan
Cluster the late-window journals by account class, route each cluster to a dedicated reviewer, and capture an evidence note for the audit binder.
- Affected systems: Finance / Revenue — manual journal volume in the final 3 days of the period ran 5x normal, well above the 3–5 daily cadence.
- Root-cause hypothesis: a series of late-breaking reclassifications landed at once when the close forecast shifted, and each one became its own manual entry instead of consolidating into a single adjustment.
- Next three steps: (1) cluster the late-window manual journals by account class so the dominant reclass theme surfaces for the close reviewer, (2) consolidate any cluster with a shared account into a single adjusting journal before lock, and (3) capture the reclass evidence note for the audit binder so the manual-journal footprint is documented in the close file.
Anomaly pattern
Unreconciled GL / bank lines aged past the close tolerance — the cash position is no longer a settled number for the reporting window.
Sample event
{
"finance_bank_reconciliation_lag_days": [
1,
1,
2,
1,
2,
1,
2,
1,
1,
2,
1,
1,
2,
1,
1,
2,
1,
1,
2,
1,
7
],
"detected_value": 7
}Stream: finance_bank_reconciliation_lag_days · detected_value: 7
Drafted corrective-action plan
Page the on-call owner with the reconciliation breach flagged as CRITICAL, sweep the oldest unmatched lines first, and hold the close until the cash position is settled.
- Affected systems: Finance / Revenue — bank reconciliation lag reached 7 days, well past the 2-day close tolerance the team operates to.
- Root-cause hypothesis: a feed outage on the bank statement side left a window of unmatched disbursements against the GL, and the reconciliation rule could not settle the lines until the feed resumed.
- Next three steps: (1) page the on-call owner with the reconciliation lag flagged as CRITICAL before the close window transmits, (2) sweep the oldest unmatched disbursement lines first so the cash position settles ahead of the close, and (3) file a feed-availability incident with the bank so the gap is documented before the audit picks it up.
See this on your finance stream
The pilot connects one of your finance streams — revenue recognition, vendor invoices, journal entries, reconciliation — learns its baseline, and turns the same drafted-action-plan step above into a live ticket your team reviews in-channel.