Проверяемый демонстрационный отчёт руководителю

Все числа, счета и операции искусственные. Они созданы для объяснения
проверки отчёта и не относятся к бизнесу Анатолия или его клиентам.

В архиве:
- demo-input.json: исходные счета и события, период и момент выгрузки;
- calculate-demo.py: расчёт и проверки через стандартную библиотеку Python;
- demo-result.json: сохранённый результат конкретного прогона;
- demo-readme.txt: эта инструкция для повторения расчёта.

Как повторить:
1. Распакуйте все файлы в одну папку.
2. Нужен Python 3.9 или новее с доступной базой часовых поясов IANA.
   Программа использует стандартную библиотеку Python. При отсутствии
   системной базы нужна установка tzdata; пояснение и ссылка ниже.
3. В терминале этой папки выполните: python3 calculate-demo.py
4. Результат появится в demo-result.json и в терминале.

Контрольные значения:
Поступления за 03.10.2026 по Москве: 180000 рублей.
Возвраты: 15000 рублей.
Чистые поступления: 165000 рублей.
Неоплаченные счета на конец периода: 55000 рублей.
В том числе просрочено: 30000 рублей, один счёт.

Период от 03.10.2026 00:00 включительно до 04.10.2026 00:00
исключительно (Europe/Moscow). Остатки считаются на конец периода,
а не на момент выгрузки 04.10.2026 08:55.

Проверки: контрольные суммы; начальная/конечная границы; одинаковый
повтор события; неподтверждённый платёж; дата просрочки; полный
источник без операций; конфликт повтора; отсутствующая сумма; сбой источника.

Счёт demo-05 скорректирован с 25000 до 10000 одновременно с возвратом
15000 из ранее полученных денег. Это допущение данного примера;
не универсальное правило бухгалтерского учёта.

Пример не подключается к CRM, банку, ИИ или мессенджеру и ничего не
отправляет. Комиссии, налоги, валюты, взаимозачёт и отгрузки не считаются.
Чистые поступления здесь не означают прибыль или бухгалтерскую выручку.

Данные намеренно фиксированы: проверки сравнивают их с контрольным
примером. Для своего процесса нужно отдельно согласовать источники,
формулы, правила сроков и проверки. Простая замена сумм в JSON не
превращает этот пример в готовую интеграцию с вашим бизнесом.

Требование среды: Python 3.9+ и доступная база IANA для Europe/Moscow.
Если появляется ZoneInfoNotFoundError, нужна системная база либо пакет tzdata.
Описание Python: https://docs.python.org/3/library/zoneinfo.html
Установка при отсутствии базы: python3 -m pip install tzdata
На Windows установка/команда python3 этим примером не проверялись; используйте имя своего Python.
