Fee recovery in most schools is a memory problem, not a money problem. The parent intends to pay. The accountant intends to remind them. Between those two intentions sits a spreadsheet that nobody has time to sort, and by the time anyone looks, the balance is three months old and the conversation has become awkward.
The fee follow-up pack removes the remembering.
The Manual Follow-Up Loop and Where It Breaks
A typical manual cycle looks like this: pull the pending list at month-end, mark the obvious cases, ask a clerk to call them, get through perhaps a third, lose the rest to the next cycle. Three failure points repeat.
Recency bias. The list gets worked from the top. Whoever sits at the bottom is never called, month after month, and their balance compounds quietly.
No memory between cycles. Nobody records that a parent was already reminded on the 8th, so the next cycle either skips them or reminds them again with the same wording.
Escalation by mood. The tone of the third reminder depends on who is making the call and how their morning went, not on how overdue the fee actually is.
Each of those is a scheduling and bookkeeping failure, which is precisely the kind of thing software should absorb.
The Three-Tier Escalation Ladder: 7, 15, 30 Days
Enabling the pack writes three rules against your fee ledger, all sharing one daily schedule.
| Tier | Default trigger | Tone | Template |
|---|---|---|---|
| Soft | 7 days past due | Friendly nudge | Overdue reminder |
| Firm | 15 days past due | Businesslike | Overdue reminder |
| Final | 30 days past due | Final notice | Final-notice template |
Each rule reads ledger entries in pending or partial status, past due by its tier’s day count, above the minimum amount. Matching entries produce a WhatsApp message to the guardian on record with the parent’s name, the student’s name, the pending amount, the actual days overdue, and the school’s short name substituted in.
The day counts are the important part, and all three are yours to set. A school on quarterly billing may want 15, 30 and 45. A school with a tight cash cycle may want 3, 10 and 21. The escalation structure holds either way.
Thresholds a School Actually Controls
Beyond the three day counts, the pack exposes settings that decide who is in scope at all:
- Minimum amount, held in paise and defaulting to ₹100. Below this, nothing is sent.
- Exclude waived, on by default. A concession you have already granted is not chased.
- Exclude cancelled, on by default.
- Quiet hours, a start and end time recorded on the pack for schools that want an explicit no-send window alongside the scheduled 10:00 run.
Set these once, at enablement. They are the difference between a system that chases the right forty families and one that WhatsApps every parent in the school about a rounding error.
How the Same Parent Avoids a Second Message
This is the mechanism that makes the whole thing safe to leave running.
Every dispatched action carries a deduplication key built from the tier, the specific ledger entry, and the rule — and a window, which for fee follow-up defaults to 168 hours. Before the message goes out, that key is claimed atomically in Redis. If the key already exists, the action is recorded as a duplicate skip and nothing is sent.
Two consequences worth understanding. First, the key includes the tier, so an entry that ages from seven days to fifteen days genuinely escalates — the firm reminder is a different key from the soft one. Second, the key includes the ledger entry, so a family with three unpaid entries is treated as three cases, not one; if that is not what you want, the minimum-amount threshold and your billing structure are the levers.
If Redis is unreachable, the claim fails and the send is skipped rather than attempted. Under-sending recovers on tomorrow’s run. A duplicate final notice to a parent who paid last week does not recover at all.
Tone Selection When Agent Mode Is On
The fee pack also implements agent mode. Deterministic SQL selects a capped batch of overdue entries and enriches each one with context the flat day-count does not capture: whether a partial payment has been made, how many other entries are open for that student, when the family last paid anything.
A single structured call then assigns each entry a tone — soft, firm, or final — with a one-sentence reason. The instructions are explicit that a guardian who made a partial payment recently gets at most a soft tone, because they are visibly trying, and that a first-time delayer at eight days is never escalated to a final notice.
The model returns a tone; it does not compose free text and it does not choose recipients. The message still goes out through an approved template. Anything the model returns that does not match the expected shape is discarded before dispatch, and the WhatsApp send is the only action the fee agent is permitted to execute directly.
The Monday Defaulter Digest
Chasing parents is half the job. The other half is telling your own staff where to spend the week.
A companion pack sends the admin and accountant roles a digest every Monday at 09:00 local time, listing the top defaulters above a minimum days-overdue threshold. Both the count and the threshold are settings. In agent mode the ranking is holistic rather than a flat sort by amount — size, age, and how recently anyone made contact — and it arrives with a short analyst summary and a recommended next step per family.
For schools that want a daily rather than weekly rhythm, the collection morning briefing covers the same ground at 08:00, alongside yesterday’s collections and today’s expected amounts.
Reading the Firing Log After a Week
Do not trust this on the strength of a settings screen. After the first week, open the automations firing log and read it.
Each row records the rule, what the condition matched, the action dispatched, and the outcome — sent, skipped as duplicate, or failed. What you are checking for is proportion: if forty entries matched and thirty-eight were skipped as duplicates, your escalation windows are doing their job. If nothing has fired at all, your day counts are longer than your oldest overdue balance, which is a good problem.
Failures matter more than successes. Five consecutive errors on a rule trip its circuit breaker: the rule stops firing, admin and principal users are notified in-app, and the failed WhatsApp action is written to a dead-letter record. That is by design. A rule that is silently failing is worse than one that has visibly stopped.
For the mechanics shared by every pack, see school autopilot: operations that run without you.