Derives human-readable manual test cases from a business-rule spec via a decision table: identify conditions and actions, build the full 2^n-column matrix, collapse columns with irrelevant entries, strike infeasible combinations, then emit one test case per remaining column (each feasible column is one coverage item per ISTQB CTFL v4.0 section 4.2.3). A deep single-technique walkthrough rather than a broad multi-lens case matrix; the output is manual step/expected cases rather than parameterized test code, and it covers how cases are derived rather than how a case record is structured. Use when a spec's outcome depends on interacting conditions (pricing, eligibility, discounts, routing rules) rather than the boundaries of a single input.
93
93%
Does it follow best practices?
Impact
94%
1.02xAverage score across 10 eval scenarios
Passed
No findings from the security scan
The runbook below is what the billing team wrote when we moved off the payment provider's own dunning. It is what our retry service implements, and it is what support reads when a customer calls about a suspended account.
It reads as six flat statements, but they are not the same kind of statement. Some of them are decidable from one failed charge in front of you: the decline reason, the plan, whether there is a backup card. Others are about where the customer is in a longer story, and you cannot look at a single decline and say whether they hold.
That distinction is the reason I am asking for this. Our current regression pack treats all six as if they were switches on a single event, and it passes while the actual behaviour we get complaints about - accounts suspended earlier than the customer expected - is not covered by any of its cases.
I want a document that is honest about which part of this runbook a single-event check can verify and which part it cannot, plus the part QA can start on immediately.
Produce payment-failure-analysis.md containing:
Out of scope: the payment provider's own retry behaviour, card-network decline codes beyond the two named, invoicing, and any code change.
Extract the following files before beginning.
=============== FILE: docs/payment-failure-runbook.md ===============
When a charge fails because of insufficient funds, retry the card after three days.
When a charge fails because the card has expired, do not retry. Email the customer to ask them to update the card.
When a backup card is on file, charge the backup card immediately instead of retrying the primary. A successful backup charge closes the incident: no grace period runs and no dunning email is sent.
Annual plans get a 14-day grace period before the account is suspended. Monthly plans get 5 days.
On the third failed attempt within a billing cycle the account is suspended, whatever the plan's grace period says.
An account that was suspended in an earlier billing cycle is suspended on the first failure instead of the third.
Only two decline reasons reach this runbook: insufficient funds and expired card. Anything else is handled by the provider.