﻿---
title: Сверка подписок
description: "Сервис на Laravel + Filament: сопоставление подписок, счетов и поступлений между биллингом, ERP и банком с допусками, частичными оплатами и очередью расхождений."
---

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

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

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

Сервис нужен, когда подписок сотни и больше, есть несколько тарифов, скидки, возвраты и оплата через разных провайдеров. При десятке клиентов на одном тарифе хватит отчёта в учётной системе. Результат работы сервиса — не ещё один отчёт, а короткий список позиций, по которым нужно принять решение, и история того, кто и почему его принял.

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

- **Даёт каждой подписке статус сверки.** Данные биллинга, ERP и банка соединяются, и подписка получает статус «Сверено», «Ожидает» или «Расхождение».
- **Сопоставляет автоматически.** Счета и поступления связываются по идентификатору подписки, клиенту, сумме и периоду с настраиваемым допуском.
- **Ведёт очередь расхождений.** Несопоставленные счета и платежи появляются ежедневно с возрастом и ответственным.
- **Проводит исправления через согласование.** Списание разницы или ручная привязка платежа требуют решения с владельцем шага и сроком.
- **Следит за разницей выставленного и полученного.** Расхождение по периоду видно постоянно, а при превышении порога приходит уведомление.

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

- **Разные идентификаторы — нормальная ситуация.** Если биллинг и ERP нумеруют подписки по-разному, таблица соответствия хранится в приложении, а сопоставление может идти по сочетанию полей: клиент, сумма, период.
- **Частичные оплаты и допуски.** Один счёт может закрываться двумя платежами, а комиссия провайдера создаёт небольшую разницу. Правила разбиения и допуск задаются в настройках, точное совпадение не требуется.
- **Возвраты и кредит-ноты — отрицательные строки.** Их учитывают в сверке как отдельные записи, а не правят исходный счёт. Так история остаётся полной, а аудитор видит и исходную сумму, и корректировку.
- **Статус тоже устаревает.** Позицию, которая не менялась больше недели, выводят на экран отдельно, а не прячут в отчёте.
- **Предзакрытие каждый день.** Расхождения разбирают в течение месяца, тогда к закрытию остаются только новые.
- **Запуск параллельно с текущим процессом.** Сначала сервис работает как проверка поверх таблиц, а от ручной сверки отказываются, когда цифры начинают сходиться. Биллинг, ERP и банк остаются главными системами.
- **Аудитору — доступ на чтение.** Отдельная роль видит статусы и историю сверки без права изменений, а выгрузка отчёта ограничена так же, как экран.

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

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

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

```text
Создай модели и миграции для сверки подписок: Subscription (клиент,
тариф, категория из справочника, идентификаторы в биллинге и ERP),
BillingInvoice (подписка, период, сумма, валюта, внешний id), LedgerEntry
(подписка, сумма, дата, внешний id в ERP), BankReceipt (сумма, дата,
плательщик, назначение), Match (счёт, связанные поступления и проводки,
разница, статус), ReconciliationRule (допуск в деньгах и процентах,
окно в днях). Добавь фабрики с демо-данными.
```

### 2. Загрузка источников

```text
Сделай фоновые задачи по расписанию для загрузки счетов из биллинга,
проводок из ERP и банковских поступлений через API или импорт CSV.
Категорию подписки проверяй по справочнику при загрузке, повторная
загрузка той же записи не создаёт дубль. Время последней загрузки
каждого источника сохраняй и показывай в панели.
```

### 3. Сопоставление

```text
Сделай сервис сопоставления: связывай счёт с поступлениями и проводками
по подписке, клиенту, сумме и периоду с допуском из
ReconciliationRule, поддержи закрытие одного счёта несколькими
платежами и возвраты как отрицательные строки. Всё, что не
сопоставилось, помечай статусом «Расхождение».
```

Проверьте на демо-данных счёт, оплаченный двумя платежами с комиссией провайдера в пределах допуска: он должен получить статус «Сверено».

### 4. Очередь расхождений и исправления

```text
Сгенерируй Filament-ресурс для Match с вкладками по статусу, колонками
возраста и ответственного и фильтром «Не менялось больше 7 дней».
Добавь действия «Привязать платёж вручную» и «Списать разницу» с
обязательной причиной; оба проходят согласование контролёра со сроком
и уведомлением в панели.
```

### 5. Виджеты, доступ и выгрузка

```text
Добавь виджеты доли сверенных подписок и разницы выставленного и
полученного за период с уведомлением при превышении порога. Настрой
роли: бухгалтер, контролёр, аудитор только на чтение. Добавь экспорт
отчёта о сверке с историей решений в CSV.
```

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

- [Неуспешные платежи и возврат выручки](https://wpcraft.ru/kb/stacks/filament/use-cases/finance/payment-failure-dashboard.md) — отказы списаний, из которых вырастает разница выставленного и полученного.
- [Дашборд выручки](https://wpcraft.ru/kb/stacks/filament/use-cases/finance/revenue-dashboard.md) — подписочные показатели, которые опираются на сверенные данные.
- [Трекер закрытия месяца](https://wpcraft.ru/kb/stacks/filament/use-cases/finance/month-end-close-tracker.md) — сверка подписок как задача закрытия периода.

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

- [Refine: Subscription Reconciliation](https://refine.dev/use-cases/finance/subscription-reconciliation/)
- [Filament 4.x: ресурсы](https://filamentphp.com/docs/4.x/resources/overview)
- [Filament 4.x: импорт](https://filamentphp.com/docs/4.x/actions/import)
- [Filament 4.x: уведомления в базе данных](https://filamentphp.com/docs/4.x/notifications/database-notifications)
- [Filament 4.x: экспорт](https://filamentphp.com/docs/4.x/actions/export)