The story
The bank. The second bank. The pension. The insurer. The energy company. The mobile provider. The council.
Each has its own department, its own document requirement, its own view on whether a certified copy will do, and its own answer about what happens to the direct debits meanwhile. Each one puts somebody three days into a bereavement in a hold queue and asks them to say it again.
Britain solved part of this. In the government's own words, "Tell Us Once is a service that lets you report a death to most government organisations in one go." Most government organisations. Everything commercial is still one call at a time.
What it does
Afterword calls each institution and captures four things: which department handles it, which documents they need, whether a certified copy is accepted, and what happens to the direct debits. Plus any reference number they open.
Those become one consolidated pack the family can print and work through in an afternoon.
Five outcomes per institution: REQUIREMENTS_CAPTURED, PARTIAL, DISPUTED, REFERRED, UNREACHED.
It asks, it never does
The agent never states the death as established fact. It says an executor has reported one and asks what is required.
It cannot close an account, cancel a service, move money, redirect post, accept
terms, or agree a settlement. closes_account and accepts_terms are
hard-wired False and swept by property tests over thousands of generated calls.
Anything an institution offers stops at the family for a decision.
That boundary is the product. Automating the asking is easy. Knowing where to stop is the part worth building.
Contradictions are the signal
Two agents at the same bank give different document requirements, and nobody writes down who said what. So when it changes, you have nothing.
When a stated requirement conflicts with an earlier call or with the institution's own recorded policy, Afterword marks it DISPUTED and keeps both sides. It picks no winner. Quietly choosing one is how a family posts an original death certificate that then goes missing.
Document sets are compared in both directions, because under-sending and over-sending are both dangerous.
A disclosure budget, enforced in code
The agent says the minimum: the deceased's name, the family's reference, the executor's name. Nothing else about the estate.
A cause of death, a date of birth, an account balance and a telephone number are forbidden categories. A script that would name one cannot be built. The recipient's number travels in the request instead of the spoken text, so a preview can show the whole script without disclosing the line.
The docstring is honest that this is two things that can actually be checked, no withheld value appearing verbatim and no forbidden category matching by pattern, rather than a proof of completeness over free text.
The honest ratio
The demo ends with one institution finished and five still needing a person.
That is deliberate and it is shown. REFERRED is not a failure. Many institutions are right to refuse to discuss an account with anybody but the named executor, and the pack says so rather than working around it. DISPUTED outranks REFERRED, because an institution can contradict itself on the way to refusing.
A tool reporting six of six finished would be lying, and a bereaved family is the wrong audience to lie to.
Challenges
The pack claimed "quoted and dated" and stamped the reader's clock. Open it a month later and a month-old answer carried the date you opened it. It now dates from the call, and every section shows its own "asked on".
That one bothered me most. The whole product is a promise about provenance, and the date was decoration.
Where does a contradiction rank against a refusal? An institution can contradict itself on the way to refusing to speak to us. Letting the refusal swallow the contradiction was simpler and threw away the signal the project exists to capture. DISPUTED wins, and a test pins it.
What counts as a completed capture? Requiring a reference number would have pushed the model into inventing one, because most institutions only open a case when the paperwork arrives. Completeness means department, at least one document, the certified-copy question answered and the direct-debit question answered. A reference is recorded when given and never required.
A security review from the maintainer. The base_url override could send the
API key anywhere, and provider errors and call evidence could carry phone
numbers into logs and HTTP responses. Both fixed. The redirect case was the
sharper half: urllib re-sends the Authorization header across hosts, so a single
302 hands over the key with nothing looking wrong.
What I learned
Every design question turned into the same question: is this asking, or is this doing? Once that line was drawn, the grades fell out of it.
What's next
Real institution directories instead of a fictional registry, a written-record request on every call so a verbal answer can be confirmed in writing, and retrying an unreached institution on a decaying cadence.
Built With
- call-e-api
- python
Log in or sign up for Devpost to join the conversation.