← SIMRANJAISWAL.INCASE · STUCK MONEY · 02

Fifty accounts, one ladder

A logistics business with fifty-plus client accounts, payment adherence in the seventies, and a finance executive chasing from memory. A reminder ladder, a tracker and two kinds of flexibility took adherence to 95% and receivables down 20%.

FIFTY ACCOUNTS · RED PAID LATE · GOLD PAID WITHIN TERMSMONTH 0 → MONTH 8
0PAYMENT ADHERENCE
0RECEIVABLES OUTSTANDING
0CLIENT ACCOUNTS
0CLIENT SATISFACTION
01 · THE BUSINESS QUESTION

Every client was invoiced on time. Roughly one in four paid on time. Nobody could say which ones, or why, until the month was already gone.

Shine Logistics moved freight for fifty-odd business clients on credit terms. Invoices went out promptly — this was not a billing problem. Payments came back on the client's schedule, not the contract's, and the only chase mechanism was a finance executive's memory and a spreadsheet she updated when she could. The founders' question: why does everyone owe us, and what would it take to be paid when we agreed?

02 · THE DATA

An invoicing register (invoice date, amount, agreed terms), a bank statement that had to be matched to it by hand, and a client list with no memory of its own — no record of who had been reminded, when, or by whom. Three sources; zero joins.

-- the table that did not exist: one row per invoice, with its promise and its reality
SELECT i.invoice_no, i.client, i.amount, i.invoice_date,
       i.invoice_date + i.terms_days          AS due_date,
       p.paid_date,
       p.paid_date - (i.invoice_date + i.terms_days) AS days_late,   -- negative = early
       r.last_reminder, r.reminder_step
FROM invoices i
LEFT JOIN payments  p ON p.invoice_no = i.invoice_no
LEFT JOIN reminders r ON r.invoice_no = i.invoice_no;
03 ·TRACEAGEWHERE THE MONEY WAITED, AND FOR HOW LONG

Fifty accounts, placed by how late they paid. Then the same fifty, eight months later.

PAID LATEWITHIN TERMS
−15 d DUE +15 +45 +75 +95 days EACH DOT IS ONE CLIENT ACCOUNT · POSITION = HOW MANY DAYS AFTER THE DUE DATE IT TYPICALLY PAID
BEFORE · 13 OF 50 ACCOUNTS PAID WITHIN TERMS · THE MEDIAN ACCOUNT PAID 24 DAYS LATE · SIX PAID MORE THAN 60 DAYS LATE. CLICK MONTH 8.

Placed on one axis, the accounts told on themselves. Lateness was not random — it was habitual. The same dozen accounts paid 30–90 days late every single month, and had been doing so long enough that nobody remembered it being otherwise. They were not struggling; they had simply learned that Shine did not chase. A handful of genuinely stretched clients sat among them, indistinguishable until someone looked.

04 ·RANKWHICH LEAKS TO SEAL FIRST
WHAT WAS FOUNDSHARE OF LATE VALUETHE FIXVERDICT
Habitual late payers, never chased≈ 55%A reminder ladder that runs itselfSeal first. Nothing to negotiate; they had never been asked.
Invoices nobody could find≈ 20%Statements with every open invoice attached, on a scheduleSeal with the ladder. Half the "we never got it" replies were true.
Genuinely stretched clients≈ 15%Part-payments and a shorter cycle, agreed in writingSeal second — flexibility that keeps the relationship.
Disputed amounts≈ 10%Reconciliation before the reminder, not afterFix the statement, then chase.
05 ·SEALTHE LADDER: SIX RUNGS, ONE TONE EACH

The fix was not a threat. It was a cadence — polite, predictable, and impossible to forget.

Every invoice now climbed the same six rungs unless it was paid. Each rung had a day, an owner, a channel and a tone that was written down once and never improvised again. Click a rung.

Two kinds of flexibility travelled with the ladder. For clients who were genuinely stretched, part-payments against an agreed schedule — half now, half in fifteen days beat all of it in ninety. For clients who wanted to pay but kept losing invoices, a shorter cycle: fortnightly statements with every open invoice attached, so the question "which one?" stopped being an excuse.

# the tracker: who is on which rung today (the daily job, simplified)
inv["days_late"] = (today - inv["due_date"]).dt.days
inv["rung"] = pd.cut(inv["days_late"], [-99, -4, 0, 6, 14, 29, 999],
                  labels=["quiet", "courtesy", "nudge", "call", "statement", "escalate"])
due_today = inv[(inv.paid_date.isna()) & (inv.rung != inv.last_rung_sent)]
for _, row in due_today.iterrows():
    send(TEMPLATES[row.rung], to=row.client_contact, attach=statement_for(row.client))
    log_reminder(row.invoice_no, row.rung, today)        # the memory the business never had
06 ·WATCHADHERENCE, MONTH BY MONTH
100% 90% 80% 70% Month 0 · 71% — baseline, chasing by memory Month 1 · 72% — tracker live, ladder written Month 2 · 76% — first full cycle of reminders Month 3 · 81% — statements attached; "which invoice?" stops Month 4 · 86% — part-payment plans agreed with six clients Month 5 · 90% Month 6 · 93% Month 7 · 95% Month 8 · 95% — holding 71% 95% M0M2 M4M6M8
PAYMENT ADHERENCE · INVOICES PAID WITHIN TERMS ÷ INVOICES DUE · HOVER A POINT FOR WHAT CHANGED THAT MONTH.
100 90 80 70 Receivables outstanding, month 0 · index 100 The reminder ladder · −9 points Part-payments and shorter cycles · −6 points Statements and reconciliation · −5 points Receivables outstanding, month 8 · index 80 100 −9 −6 −5 80 MONTH 0 LADDER FLEXIBILITY STATEMENTS MONTH 8
RECEIVABLES OUTSTANDING, INDEXED TO MONTH 0 = 100 · WHERE THE 20% CAME FROM · HOVER A BAR.

The watch had a second audience. The rebuilt tracker became the client reporting itself — every account got a clean statement on a schedule instead of a call when things went wrong — and client satisfaction scores rose 30% over the same period. Being chased politely and predictably turned out to be something clients preferred to being chased badly and late.

BEFOREAFTER (MONTH 8)
Payment adherence≈ 71%95%
Receivables outstandingIndex 10080 — down 20%
Accounts paying 60+ days lateSix, every monthNone on a standing basis
Who has been remindedWhoever she rememberedA log, per invoice, per rung
Client satisfaction scoreBaseline+30%
07 · THE TAKEAWAY

Late payment is mostly a habit you allowed. Fifty accounts, and the money was not stuck in disputes or in hardship — it was stuck in the absence of a cadence. Write the ladder down once, let a job climb it every morning, offer real flexibility to the few who need it, and the number that "everyone" said was just how the industry works moves twenty-four points in eight months.

FINANCE-ERA WORK (SHINE LOGISTICS, 2022–23) — OUTCOME FIGURES AS REPORTED: PAYMENT ADHERENCE TO 95%, RECEIVABLES DOWN 20%, CLIENT SATISFACTION UP 30% ACROSS 50+ ACCOUNTS. BASELINE RATE, ACCOUNT PLACEMENTS, LEAK SHARES AND THE WATERFALL SPLIT ARE REPRESENTATIVE RECONSTRUCTIONS; EMPLOYER DATA CONFIDENTIAL. THE LADDER IS THE REAL SHAPE OF THE PROCESS.

Have a ledger where everyone pays late and nobody knows why? This is what The Seal does — one chasing process, written down once, run every morning, with a check that tells you when it's not. It starts with a two-week TRACE.

Start with a TRACE → Read case 01 →