v2.0

GoRules Version 2 is here - redesigned, now with managed cloud.GoRules Version 2 is here!

Watch the launch videoWatch

Account Dormancy Management

Proactive banking solution that identifies inactive accounts, determines appropriate interventions, and ensures compliance with regulatory requirements.

Solution

This account dormancy management system helps financial institutions identify and address inactive accounts before they become dormant. It calculates the time since last account activity and determines how close accounts are to reaching dormancy thresholds. Based on these calculations, the system assigns a status to each account: active, warning, at-risk, or dormant.

For accounts requiring attention, the system recommends specific actions based on the dormancy status and customer tier. Premium customers receive preferential treatment such as fee waivers and account reviews, while standard customers may receive final notices or automatic account closure procedures. Each recommended action includes a priority level to help bank staff efficiently allocate resources. This ensures regulatory compliance while maintaining positive customer relationships and reducing the administrative burden of managing dormant accounts.

How it works

The decision graph processes account information through these key steps:

  1. Input Processing: Receives account details including type, balance, customer tier, last activity date, and regional information.
  2. Dormancy Calculation: Computes days since last activity and days remaining until the account reaches dormancy threshold.
  3. Status Assignment: Categorizes accounts as "active," "warning" (60 days before threshold), "at_risk" (30 days before threshold), or "dormant" (past threshold).
  4. Status Routing: Directs active accounts to normal processing while flagging others for intervention.
  5. Action Determination: Recommends specific interventions based on dormancy status and customer tier, such as notifications, fee waivers, account reviews, or closure procedures.
  6. Priority Allocation: Assigns priority levels to each action, helping staff focus on the most urgent cases first.

Where teams use it

  • Retail banking account management
  • Corporate account administration
  • Credit union member services
  • Wealth management client monitoring
  • Digital banking platforms
  • Multi-regional financial institutions
  • Regulatory compliance programs

Inside the decision model

Account Dormancy Management ships as a JDM decision graph with 5 nodes, 2 decision tables and 9 rules. Download it, load it into GoRules, and run it as-is on Zen Engine.

Decision graph5 nodes · read-only
input requestexpression calculate_dormancytable dormancy_statusswitch route_by_statustable determine_action
01

Request

input

Flat request fields drive the flow: lastActivityDate and dormancyThreshold feed the day math, while customerTier steers the intervention choice and accountBalance, region, and regulatoryJurisdiction travel through as context.

Sample requestJSON
{
  "accountId": "ACC98765432",
  "accountType": "savings",
  "customerTier": "premium",
  "lastActivityDate": "2024-11-15",
  "dormancyThreshold": 180,
  "accountBalance": 25750.45,
  "currency": "USD",
  "region": "NORTH_AMERICA",
  "contactPreference": "email",
  "customerEmail": "[email protected]",
  "customerPhone": "+15551234567",
  "regulatoryJurisdiction": "US-NY"
}
02

Calculate Dormancy

expression

Elapsed time is computed first: daysSinceLastActivity subtracts date(lastActivityDate) from date('now'), and daysToThreshold subtracts that figure from the account's dormancyThreshold. A negative daysToThreshold therefore means the account has already crossed into dormancy, which is exactly the signal the status table keys on.

Expressions2 fields
daysSinceLastActivitydate('now') - date(lastActivityDate)
daysToThresholddormancyThreshold - $.daysSinceLastActivity
03

Dormancy Status

table

Status falls out of daysToThreshold with a first hit policy: below 0 the account is already 'dormant', under 30 days remaining marks it 'at_risk', under 60 'warning', and the empty catch-all leaves it 'active'. Ordering from most to least severe means each account receives exactly one dormancyStatus.

The escalating 60- and 30-day windows exist because dormancy carries real regulatory weight: once accounts go unclaimed long enough, unclaimed property laws in many jurisdictions require balances to be escheated to the state, and reactivating a customer beforehand is far cheaper than that process. Taking the threshold itself from the request (180 days in the sample) lets one table serve products and regions with different dormancy definitions.

Decision tablefirst hit policy
Days To ThresholddaysToThresholdStatusdormancyStatus
< 0'dormant'
< 30'at_risk'
< 60'warning'
-'active'
04

Route By Status

switch

A single condition splits the flow: dormancyStatus != 'active' routes accounts needing intervention to the action table, while the default branch lets active accounts pass with no further processing. Filtering here keeps the action logic from needing an explicit do-nothing row for healthy accounts.

Branches2 paths
dormancyStatus != 'active' Determine Action
otherwise
05

Determine Action

table

Interventions pair dormancyStatus with customerTier: 'dormant' premium accounts get a 'fee_waiver' at 'high' priority while other dormant accounts move to 'auto_close' at 'medium', 'at_risk' premium customers receive an 'account_review' and the rest a 'final_notice', both at 'high' priority, and every 'warning' account simply gets a 'notification'. Blank tier cells act as catch-alls, so with the first hit policy the premium rows must sit above them to take effect.

Splitting treatment by tier reflects retention economics: waiving fees or scheduling a review for a premium relationship costs less than losing the balances it represents, while automatic closure workflows are the standard low-cost path for unprofitable dormant accounts. The priority field maps to urgency sensibly, with 'at_risk' cases marked 'high' because they are the last window where outreach can still prevent dormancy.

Decision tablefirst hit policy
StatusdormancyStatusCustomer TiercustomerTierActionrecommendedActionPriorityactionPriority
'dormant''premium''fee_waiver''high'
'dormant'-'auto_close''medium'
'at_risk''premium''account_review''high'
'at_risk'-'final_notice''high'
'warning'-'notification''medium'

Make this template
your own.

Load Account Dormancy Management into GoRules, adjust the rules to your policy, and ship it behind your own API.