Сертификаты: деньги, оказанные услуги и остаток обязательств
Покупка сертификата, частичное погашение и возврат остатка проходят как разные события с проверяемым балансом.
Задача и принятое решение
В журнале двух сертификатов есть покупка, услуга, доплата и возврат. При сложении покупки и погашения оборот завысился бы; повтор погашения добавил бы еще одну несуществующую услугу.
Я веду три накопителя: денежный поток, оказанные услуги и обязательство по сертификату. Погашение переносит сумму из обязательства в услугу, не создает деньги. Возврат ограничен неиспользованным остатком.
Это управленческая модель заданного примера, без налогового и бухгалтерского заключения.
Проверить решение
Измените исходные строки или параметры и пересчитайте результат. Данные остаются в этой странице.
| Событие | Тип | Деньги, ₽ | Услуги, ₽ | Изменение обязательств, ₽ | Статус |
|---|---|---|---|---|---|
| E1 | продажа | 5000 | 0 | 5000 | Учтено |
| E2 | погашение | 0 | 3000 | -3000 | Учтено |
| E3 | доплата за услугу | 500 | 500 | 0 | Учтено |
| E4 | возврат остатка | -2000 | 0 | -2000 | Учтено |
| E5 | продажа | 4000 | 0 | 4000 | Учтено |
| E6 | погашение | 0 | 1500 | -1500 | Учтено |
| E6 | погашение | 0 | 0 | 0 | Повтор исключен |
| E7 | запись на визит | 0 | 0 | 0 | Учтено |
CERT-A: остаток 0 ₽
CERT-B: остаток 2500 ₽
Исходный набор
Авторский контрольный набор; не клиентские документы и не результаты внешней модели.
Изменить входные строки
Посмотреть исходные строки
| Событие | Дата | Сертификат | Тип | Сумма |
|---|---|---|---|---|
| E1 | 2026-10-01 | CERT-A | продажа | 5000 |
| E2 | 2026-10-03 | CERT-A | погашение | 3000 |
| E3 | 2026-10-03 | доплата за услугу | 500 | |
| E4 | 2026-10-05 | CERT-A | возврат остатка | 2000 |
| E5 | 2026-10-06 | CERT-B | продажа | 4000 |
| E6 | 2026-10-07 | CERT-B | погашение | 1500 |
| E6 | 2026-10-07 | CERT-B | погашение | 1500 |
| E7 | 2026-10-08 | CERT-B | запись на визит | 0 |
Что получилось
После возврата по CERT-A и частичного погашения CERT-B денежный поток равен 7500 ₽, услуги — 5000 ₽, обязательства — 2500 ₽. Контрольная разница нулевая; повтор E6 не изменил показатели.
Выполненная проверка
| Проверка | Результат |
|---|---|
| Деньги 7500 равны услугам 5000 плюс обязательствам 2500 | Пройдена |
| Повтор погашения не добавляет услугу | Пройдена |
| Возврат сверх остатка не уводит обязательство в минус | Пройдена |
| Отрицательная сумма не становится учтенным движением | Пройдена |
| Нечисловая сумма останавливает расчет | Пройдена |
Модель предполагает, что доплата сразу относится к оказанной услуге. Для аванса или иных условий нужен отдельный тип события.
Скачать материалы и повторить проверку
source.json · source.csv · result.json · result.csv · engine.js · verify.cjs · checks.json · style.css
Локальная проверка: node verify.cjs. Нужен Node.js; сетевые обращения не выполняются.