﻿---
title: Неуспешные платежи и возврат выручки
description: "Дашборд на Laravel + Filament: отказы по картам с причинами, выручка под риском, история повторных списаний, приоритеты и координация напоминаний клиентам."
---

## Что это за сервис

Операционный дашборд для финансовой команды и менеджеров по работе с клиентами в подписочном бизнесе. Он показывает каждое неуспешное списание с причиной, суммой и данными клиента, историю повторных попыток и то, что уже сделано для возврата оплаты.

Без такого сервиса отказы лежат в журналах платёжного сервиса по несколько дней, пока кто-то не посмотрит. Никто не знает, сколько выручки сейчас под риском. Повторные списания идут по настройкам платёжного провайдера, и неясно, что и когда уже пробовали. Потеря клиентов из-за истёкших карт и нехватки средств воспринимается как фоновый шум, хотя это заметная доля оттока. Письма-напоминания уходят по общему расписанию, не учитывая причину отказа и значимость клиента.

Сервис нужен компаниям с регулярными списаниями по карте: подписочным продуктам, онлайн-школам, сервисам с ежемесячной оплатой. Он работает поверх платёжного провайдера и не заменяет его механизм повторных списаний.

## Что он делает

- **Показывает каждый отказ сразу.** Неуспешное списание появляется в дашборде с причиной, суммой, тарифом и клиентом, как только приходит событие от провайдера.
- **Считает выручку под риском.** Общая сумма активных отказов видна на главном экране с разбивкой по причинам и возрасту.
- **Хранит историю попыток.** По каждой операции видно, какие повторные списания были, когда и с каким результатом, и что ещё запланировано.
- **Выделяет значимых клиентов.** Отказы по крупным суммам или у клиентов с высокой ценностью попадают в отдельную очередь с ответственным менеджером.
- **Координирует напоминания.** Автоматические письма и ручные контакты отмечаются в одной ленте, чтобы клиент не получал противоречивых сообщений.

## Нюансы и особенности

- **Причина определяет действие.** Истёкшей карте нужна просьба обновить данные, а не очередной повтор списания; нехватка средств — повтор позже. Отказы группируют по коду причины и направляют каждую группу на своё действие.
- **Повторы должны быть видны.** Каждую попытку провайдера и приложения записывают с временем и результатом, иначе команда не знает, что происходит автоматически.
- **Закрывайте неактуальные записи.** Отказ, по которому прошла повторная оплата или подписка отменена, закрывается автоматически: на экране остаётся только текущий риск.
- **Приоритет — не очередь по времени.** Пороги суммы и ценности клиента хранятся в настройках. Небольшой отказ получает автоматические повторы и письмо, крупный — сразу уведомление менеджеру.
- **Смену карты проводит провайдер.** Приложение отмечает, отправлена ли ссылка на обновление данных, а ввод карты остаётся на защищённой странице платёжного сервиса. Данные карт в базе не хранят.
- **Несколько провайдеров — одна схема.** События вебхуков разных сервисов приводятся к общей таблице отказов с единым справочником причин. Обработчик вебхуков проверяет подпись и не создаёт дубль при повторной доставке.
- **Когда хватит штатных средств.** Если провайдер уже даёт настраиваемые повторы и письма, а команде не нужны приоритеты и ручные контакты, отдельный дашборд может быть лишним.

## Как сгенерировать через ИИ-агентов

Промпты рассчитаны на AI-агента (Claude Code, Cursor и аналоги) в Laravel-проекте с установленным **Filament 4.x**. Отправляйте их по одному: каждый шаг даёт результат, который можно проверить до перехода к следующему.

### 1. Данные и модели

```text
Создай модели и миграции для дашборда неуспешных платежей: Customer
(ценность клиента, ответственный менеджер), Subscription (тариф, статус),
PaymentFailure (подписка, провайдер, внешний id операции, сумма, валюта,
код причины, нормализованная причина, статус: активен, восстановлен,
закрыт), RetryAttempt (отказ, время, результат, инициатор: провайдер или
приложение), Outreach (отказ, канал, тип: автоматическое письмо или
ручной контакт, автор, время). Добавь фабрики с демо-данными.
```

### 2. Приём событий провайдера

```text
Сделай контроллер вебхуков для платёжного провайдера с проверкой
подписи. Событие неуспешного списания создаёт PaymentFailure, событие
повторной попытки — RetryAttempt, успешная оплата или отмена подписки
закрывают активный отказ. Повторная доставка события не создаёт дубль.
Код причины переводи в нормализованную причину по таблице соответствия.
```

Отправьте одно и то же событие дважды и убедитесь, что запись одна.

### 3. Дашборд и очередь

```text
Сгенерируй Filament-ресурс для PaymentFailure с вкладками по
нормализованной причине и фильтрами по сумме, возрасту и менеджеру.
Добавь вкладку «Приоритетные» для отказов выше порога суммы или
ценности клиента из конфига. В карточке покажи историю попыток и
контактов через relation managers.
```

### 4. Действия по причине

```text
Добавь действия в карточке отказа: «Отправить ссылку на обновление
карты» (только фиксирует факт отправки и канал), «Записать ручной
контакт» и «Закрыть с причиной». Если за последние сутки уже был
контакт, перед новым показывай предупреждение.
```

### 5. Виджеты, уведомления и доступ

```text
Добавь виджеты выручки под риском по причинам и возрасту и доли
восстановленных платежей за период. Крупный отказ отправляет уведомление
в панели ответственному менеджеру. Настрой доступ: менеджер видит
своих клиентов, финансовая команда — все отказы.
```

## Похожие сценарии

- [Сверка подписок](https://wpcraft.ru/kb/stacks/filament/use-cases/finance/subscription-reconciliation.md) — расхождения между выставленными и полученными суммами.
- [Работа с просроченной дебиторской задолженностью](https://wpcraft.ru/kb/stacks/filament/use-cases/finance/collections-dashboard.md) — взыскание по счетам с отсрочкой платежа.
- [Состояние клиентской базы и риск оттока](https://wpcraft.ru/kb/stacks/filament/use-cases/sales/account-health-dashboard.md) — проблемы с оплатой как сигнал риска.

## Материалы и источники

- [Refine: Payment Failure Dashboard](https://refine.dev/use-cases/finance/payment-failure-dashboard/)
- [Filament 4.x: ресурсы](https://filamentphp.com/docs/4.x/resources/overview)
- [Filament 4.x: виджеты статистики](https://filamentphp.com/docs/4.x/widgets/stats-overview)
- [Filament 4.x: уведомления в базе данных](https://filamentphp.com/docs/4.x/notifications/database-notifications)