6 Commits

Author SHA1 Message Date
Andrey Epifancev
dec3f5224f feat(normalizer): точка — тысячи при любом числе цифр до неё, если после неё ровно три (AURORA-1405, #37)
Решение владельца 16.10.2026 (R-3): шаблон точки [+-]?[1-9]\d*(\.\d{3})+ —
«1 234.567», «1234.567», «12345.678», «(1 234.567)» -> тысячи. Дробная часть
не из трёх цифр, ведущий ноль, смешанные записи — как раньше. Правило для
запятой не расширено.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 13:35:31 +04:00
Andrey Epifancev
68ffc5bc24 feat(normalizer): точка — разделитель тысяч в суммах OCR (AURORA-1405, #37)
«4.200» разбирался как 4.200 с тремя знаками и отсекался решением №30
(amount = null, текст в string_value). Теперь точки строго через три цифры
([+-]?[1-9]\d{0,2}(\.\d{3})+, скобки на всю строку) — разделители тысяч,
как для запятой (#35): 4.200 -> 4200, (4.200) -> -4200, 1.234.567 -> 1234567,
verified не страдает. Дроби и смешанные записи (1.234,56) — как раньше.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 13:29:09 +04:00
Andrey Epifancev
9dd568ce44 fix(normalizer): правило тысяч только при скобках на всю строку, спека и README (AURORA-1405, #35)
I-1: «(4,200) руб», «1,234(5,678)» и т. п. разбираются как прежде; I-2/I-3: спека и README;
M-1..M-3: docstring, комментарий регулярки, тесты крайних случаев.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 16:59:32 +04:00
Andrey Epifancev
1f308ddfe3 feat(normalizer): запятая-разделитель тысяч в суммах OCR (AURORA-1405, #35)
«4,200» в PDF — это 4200: запятые вида [+-]?[1-9]\d{0,2}(,\d{3})+ (полное совпадение, с учётом скобок)
удаляются до замены запятой на точку, verified сохраняется. Решение владельца 15.10.2026.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 16:56:58 +04:00
Andrey Epifancev
c1288d08fb fix(normalizer): итоги финального ревью — Money, статус при ошибочном файле, пропущенные строки, длина дат, дубли yaml
- C-1 (№30): сумма с более чем двумя знаками после запятой не принимается (amount=null, string_value, is_recognized=false);
  confidence ячеек и шапки приводится к [0, 100], NaN и бесконечность дают 0
- F-A (№28): ошибочный файл набора при успешном понижает статус до needs_check
- F-B: «ИНН не распознан» только когда ИНН не извлечён, иначе «ИНН распознан неуверенно»
- №29: предупреждения «строк с нечисловым кодом пропущено: N» и «строк без кода с суммами пропущено: N»
- I-3 (№31): тексты дат длиннее 200 символов не разбираются и не проходят fix_lookalikes
- T1.3 (№33): загрузчик yaml отклоняет повторяющиеся ключи; тавтологичный тест дублей заменён настоящим
- гигиена: докстринг amounts.py описывает фактическое поведение (все точки удаляются), мёртвые noqa в ocr/__init__.py

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 03:35:10 +04:00
Andrey Epifancev
60092b8293 feat(normalizer): разбор сумм OCR — перенос _parse_amount (§11.1 п. 7)
Переносим функции парсинга сумм и проверки пустоты из старого ядра:
замена запятой, удаление пробелов, извлечение круглых скобок (отрицательное),
множественные точки как разделители тысяч. Отличие: verified вычисляется
ДО постановки минуса (решение №13 design.md), чтобы не отмечать суммы
в скобках как неверифицированные.
2026-10-07 00:10:20 +04:00