Batch 42 · Synthetic · n=100 · 2026-09-02
Rulebook
Seven reasons not to spend an attempt.
Checked in this order, cheapest and most certain refusals first, so no work is done on a record that was never eligible. Whatever survives all seven is scheduled by rule 8 at the best moment inside its legal window.
Every count and rupee figure below is computed from the same batch file the rest of this site reads. The cost of removing a rule is measured by switching it off and re-running 40 seeds, not estimated.
- 01
Retry budget exhausted
PhysicalBasis
Razorpay Subscriptions retry limit. The debit is rejected on presentation. Attempting it cannot work.
The condition
The subscription has already used all three of its retries. A fourth attempt does not fail politely — it moves the subscription to halted, which stops automatic charging. It is not unrecoverable: Razorpay returns a halted subscription to active once the customer updates the payment method themselves. But the invoices it accrues meanwhile are never auto-charged, and the budget does not come back.
rec.attempts_remaining <= 0
→ STOP_EXHAUSTED · WINBACK_CAMPAIGN
In this batch
- Records stopped
- 13
- Value withheld
- ₹21,587
- Attempts preserved
- 0
Cost of removing it
No extra attempts — the money-side breaker catches these instead, refusing 5.9 debits per batch at the action boundary. The cost moves one layer down rather than disappearing.
See the 13 records → - 02
Terminal failure class
PhysicalBasis
Mandate lifecycle; issuer behaviour. The debit is rejected on presentation. Attempting it cannot work.
The condition
The bank told us why it failed, and the reason is one no retry can fix: the mandate was revoked, expired or paused, or the amount is above a limit registered on it. The money cannot move until something changes.
is_terminal(failure_class)
→ STOP_TERMINAL · RE_MANDATE_LINK / MANDATE_UPGRADE
In this batch
- Records stopped
- 20
- Value withheld
- ₹77,147
- Attempts preserved
- 44
Cost of removing it
+4.9 attempts per batch, averaged over 40 seeds.
See the 20 records → - 03
Mandate not active
PhysicalBasis
Mandate lifecycle. The debit is rejected on presentation. Attempting it cannot work.
The condition
The mandate itself is dead, whatever the error text said. A failure that reads as a low balance against a mandate the customer cancelled last week is still a debit that will be rejected.
rec.mandate_status is not MandateStatus.ACTIVE
→ STOP_TERMINAL · RE_MANDATE_LINK
In this batch
- Records stopped
- 5
- Value withheld
- ₹3,495
- Attempts preserved
- 11
Cost of removing it
Nothing measurable on this data, and that is reported rather than dropped. See the note below.
See the 5 records → - 04
Failure unclassified
Our policyBasis
Vasooli design constraint. Our choice. A merchant could reasonably set this differently.
The condition
Neither the code dictionary nor the language model could say what went wrong. We refuse to spend a scarce attempt on a guess, so it goes to a person with the bank's own words attached.
failure_class is FailureClass.UNKNOWN
→ HUMAN_REVIEW · HUMAN_REVIEW
In this batch
- Records stopped
- 3
- Value withheld
- ₹1,497
- Attempts preserved
- 5
Cost of removing it
+5.4 attempts per batch, averaged over 40 seeds.
See the 3 records → - 05
Above the mandate's own cap
PhysicalBasis
Per-mandate maximum registered at authorisation. The debit is rejected on presentation. Attempting it cannot work.
The condition
The customer authorised debits up to a ceiling and this invoice is above it — usually because the plan price rose after the mandate was signed. The issuer rejects it on presentation every time.
rec.amount_paise > rec.mandate_max_amount_paise
→ HUMAN_REVIEW · MANDATE_UPGRADE
In this batch
- Records stopped
- 1
- Value withheld
- ₹299
- Attempts preserved
- 3
Cost of removing it
+7.3 attempts per batch, averaged over 40 seeds.
See the 1 record → - 06
Above the RBI AFA-free cap
RegulationBasis
RBI e-mandate framework, ₹15,000 AFA threshold. Imposed from outside. Breaking it is non-compliance, not a trade-off.
The condition
Above ₹15,000 a recurring debit requires additional factor authentication. An unattended presentation is not merely against the rules — it is declined, so the attempt is spent for nothing. The right answer is not to give up but to ask the customer.
rec.amount_paise > RBI_STANDARD_CAP_PAISE
→ HUMAN_REVIEW · AFA_PAYMENT_LINK
In this batch
- Records stopped
- 2
- Value withheld
- ₹73,653
- Attempts preserved
- 2
Cost of removing it
No extra attempts — the money-side breaker catches these instead, refusing 4.8 debits per batch at the action boundary. The cost moves one layer down rather than disappearing.
See the 2 records → - 07
No lawful window before expiry
RegulationBasis
RBI pre-debit notice (24h) vs mandate validity. Imposed from outside. Breaking it is non-compliance, not a trade-off.
The condition
A debit must be preceded by a pre-debit notification. If the mandate expires before that notice period can elapse, there is no moment at which this debit would be lawful, so none is scheduled.
earliest_legal_retry(rec, now) > rec.mandate_valid_until
→ STOP_TERMINAL · RE_MANDATE_LINK
In this batch
- Records stopped
- 0
- Value withheld
- ₹0
- Attempts preserved
- 0
Cost of removing it
Nothing measurable on this data, and that is reported rather than dropped. See the note below.
Which of these are law, and which are ours
Rules 6 and 7 come from the RBI e-mandate framework. They are not tunable: a merchant who relaxes them is non-compliant, and in the case of rule 6 the debit is declined anyway, so relaxing it buys nothing but a wasted attempt.
Rules 1, 2, 3 and 5 are physical. They describe debits the network rejects on presentation. A merchant could attempt them and would simply lose the attempt.
Rule 4 is the only one that is genuinely our policy. A merchant with a higher appetite could guess at unclassified failures instead of routing them to a person. Switching it off costs +5.4 attempts per batch and recovers nothing extra, which is the argument for keeping it — but it is an argument, not a regulation.
Rules 3 and 7 stop nothing measurable in the ablation, for different reasons. Rule 3 is redundant with the pre-flight mandate check at the action boundary, deliberately — the rule is what produces the re-mandate escalation, the boundary check is what survives the world changing after the decision was made. Rule 7 never fires on this generated data at all: no record here has a mandate expiring inside the notice window. It is kept because an audit found the scheduler placing a retry six days past a mandate’s expiry, and a rule guarding a rare and expensive mistake still earns its place. Both facts are reported rather than quietly dropped.