Возврат в другом месяце: отчет периода и итог заказа
Ноябрьский возврат уменьшает поток ноября, но остается связан с октябрьским заказом.
Задача и принятое решение
SALE-01 на 10000 ₽ проведен в октябре, возврат 2000 ₽ пришел в ноябре. Журнал также содержит ноябрьскую продажу и возврат без найденного заказа.
Я показываю одновременно два среза: движения выбранного месяца и накопленный результат каждого заказа. Связь возврата с продажей проверяется до расчета. Повтор события и неизвестный заказ не попадают в итог.
Правило периода явно задано: событие входит по своей дате; накопленный итог заказа показывается отдельно.
Проверить решение
Измените исходные строки или параметры и пересчитайте результат. Данные остаются в этой странице.
| Событие | Заказ | Дата | Движение, ₽ | В выбранном месяце | Статус |
|---|---|---|---|---|---|
| SALE-01 | O1 | 2026-10-28 | 10000 | Нет | Учтено |
| SALE-02 | O2 | 2026-10-29 | 5000 | Нет | Учтено |
| RETURN-01 | O1 | 2026-11-02 | -2000 | Да | Учтено |
| RETURN-01 | O1 | 2026-11-02 | 0 | Да | Повтор |
| SALE-03 | O3 | 2026-11-04 | 7000 | Да | Учтено |
| RETURN-02 | O3 | 2026-11-06 | -1000 | Да | Учтено |
| RETURN-X | OX | 2026-11-07 | 0 | Да | Нет исходной продажи |
O1: накопленный результат 8000 ₽
O2: накопленный результат 5000 ₽
O3: накопленный результат 6000 ₽
Исходный набор
Авторский контрольный набор; не клиентские документы и не результаты внешней модели.
Изменить входные строки
Посмотреть исходные строки
| Событие | Дата | Заказ | Тип | Сумма |
|---|---|---|---|---|
| SALE-01 | 2026-10-28 | O1 | продажа | 10000 |
| SALE-02 | 2026-10-29 | O2 | продажа | 5000 |
| RETURN-01 | 2026-11-02 | O1 | возврат | 2000 |
| RETURN-01 | 2026-11-02 | O1 | возврат | 2000 |
| SALE-03 | 2026-11-04 | O3 | продажа | 7000 |
| RETURN-02 | 2026-11-06 | O3 | возврат | 1000 |
| RETURN-X | 2026-11-07 | OX | возврат | 600 |
Что получилось
В ноябре учтено 4000 ₽: продажа 7000 минус возвраты 2000 и 1000. Накопленный итог октябрьского O1 равен 8000 ₽. Возврат OX на 600 ₽ оставлен на сверке, повтор RETURN-01 снят.
Выполненная проверка
| Проверка | Результат |
|---|---|
| Ноябрь 4000, накопленный O1 — 8000 | Пройдена |
| Октябрь сохраняет свои 15000 без переноса ноябрьского возврата | Пройдена |
| Повтор возврата исключен по ID события | Пройдена |
| Отрицательная сумма не становится учтенным движением | Пройдена |
| Нечисловая сумма останавливает расчет | Пройдена |
| Возврат сверх учтенного остатка не делает продажу отрицательной | Пройдена |
Возврат без продажи не считается нулевым навсегда: он ожидает установления связи. Налоговый учет не моделируется.
Скачать материалы и повторить проверку
source.json · source.csv · result.json · result.csv · engine.js · verify.cjs · checks.json · style.css
Локальная проверка: node verify.cjs. Нужен Node.js; сетевые обращения не выполняются.