Real-World Example
Jane’s installment fails because the card is declined. The portal records the failure, schedules follow-up where appropriate, retries after the configured wait, and may auto-skip the failed installment when the next due date is too close.
Visual Flow
How It Should Work
- It should record failed payment attempts and communicate next steps to the consumer.
- It should retry eligible failed payments after the configured wait period.
- It should skip failed installments safely when the next due date is too close.
- It should track consecutive skips and send the correct communication when needed.
How It Should Not Work
- It should not retry failed payments immediately without respecting retry rules.
- It should not charge a skipped or held schedule transaction as if it were still due today.
- It should not leave consumers without communication after important payment failures.
Developer Notes
- ReprocessConsumerFailedPaymentsCommand is scheduled daily at 21:00.
- NextPaymentDueSoonSkipFailedScheduledCommand is scheduled daily at 2:30.
- RestartPaymentPlanCommand is scheduled daily at 4:00 for held plans with restart dates.
app/Console/Commands/ReprocessConsumerFailedPaymentsCommand.php
app/Console/Commands/NextPaymentDueSoonSkipFailedScheduledCommand.php
app/Console/Commands/RestartPaymentPlanCommand.php
app/Jobs/SkipScheduleTransactionJob.php
app/Services/ScheduledCommunicationService.php
Last modified on May 25, 2026