# Две воспроизводимые проверки на синтетических данных

Версия `offline-control-v1`, выполнено 16.09.2026 на Python 3.9.6.
Это учебные проверки правил, а не клиентские внедрения, OCR или запуск LLM.
Все идентификаторы и суммы вымышлены. Сеть, платные API и production не используются.

Сохраните `run.py`, `ledger.csv`, `management-export.csv`, `specification.csv`
в одну папку. Требуется Python 3.9 или новее, сторонних библиотек нет:

```sh
python3 run.py
```

Скрипт создаст `output/result.json`, `output/ledger-decisions.csv` и
`output/specification-decisions.csv`. Повторный запуск перезапишет только эти
три результата; другую папку можно указать через `--output ./new-result`.
В result.json указаны версия Python и SHA256 всех входов и исходного кода.
Числа записаны в копейках, чтобы исключить округление двоичных дробей.

## Отчётность

Правило этого опыта: один документ, только posted, период сентябрь 2026,
отрицательные корректировки сохраняются. Повтор с тем же document_id и
одинаковыми полями исключается; конфликтующий повтор останавливает расчёт.
Сумма восьми строк без правил — 770 000 ₽; после правил — 350 000 ₽, четыре
документа. Управленческая выгрузка — 360 000 ₽. Единственное расхождение
A006: 70 000 против 80 000 ₽. Скрипт показывает конфликт, не выбирает
автоматически правильную сумму. Отдельная отрицательная проверка меняет
дубль A002 и подтверждает остановку, не исправляя исходный CSV.

Это не универсальное правило признания выручки/бухгалтерского учёта. Для
реального процесса нужны определения факта, версии, периода и источника.

## Спецификация

Шесть структурированных полей двух вымышленных версий. Сравниваются сумма,
валюта, дата, объём, идентификатор и часы поддержки. Для текста схлопываются
пробелы (регистр сохранён); сумма переводится в копейки; дата строго ISO.
Четыре буквальных различия превращаются в три содержательных исключения:
сумма +50 000 ₽, дата +14 дней, отсутствующий объём. Разница пробелов в
поддержке не считается изменением; отсутствующий объём не считается нулём.

Извлечение из PDF, таблицы со сложной вёрсткой, подписи, юридическое
толкование и качество AI этим опытом не измеряются. Неизвестный тип,
невалидная дата/сумма или повтор поля останавливают обработку.
