feat(normalizer): точка — разделитель тысяч в суммах OCR (AURORA-1405, #37) #38
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/37-dot-thousands"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Суть
AURORA-1405, возврат с тестирования 16.10.2026: после #35 запятая как разделитель тысяч работает (43/43), но значения, где ИС Сканирование вернула точку («4.200», «837.994»), оставались текстом.
Причина. «4.200» проходил
parse_amountкакDecimal("4.200")(три знака после точки), аdocument._valueпо решению №30 (Money= numeric(18,2), не больше двух знаков) отсекал такую сумму:amount = null, текст вstring_value,is_recognized = false.Решение владельца
Тот же обработчик, что для запятой: точки строго через три цифры — разделители тысяч. Шаблон
[+-]?[1-9]\d*(\.\d{3})+(ровно три цифры после каждой точки, цифр до первой точки любое; первая цифра ненулевая — решение владельца 16.10.2026, R-3) применяется ко всему тексту ячейки (послеstripи удаления пробелов) или к содержимому пары скобок на всю строку; точки удаляются до остального разбора,is_recognizedопределяется толькоconfidence == 100.4.200→ 4200,837.994→ 837994,(4.200)→ −4200,-4.200→ −4200,1234.567,1 234.567→ 1234567,12345.678→ 12345678,(1 234.567)→ −1234567,1.234.567→ 1234567 (раньше при нескольких точкахis_recognized = false). Дроби (4.2,4.20,12.34,1234.56) и смешанные (1.234,56) — как раньше.Closes #37. Правило в docs: RSHB/arm-ka-docs, ветка
feat/37-dot-thousands(PR RSHB/arm-ka-docs#109). Продолжение #35 / PR #36. Jira AURORA-1405.Что изменено
api/src/normalizer/ocr/amounts.py—_DOT_THOUSANDS_REи ветка вparse_amount.api/tests/unit/normalizer/test_amounts.py,test_document.py— позитивные и негативные случаи, регресс по запятым.README.md,openspec/specs/image-recognition-gateway/spec.md— описание правила.Как проверить
make check-full(ниже). Вручную: прогнать ячейку «4.200» уверенностью 100 через нормализатор —amount = 4200,string_value = null,is_recognized = true.Проверки
make check-full: lint чист; unit 1137 passed; integration 11 passed;docker-buildуспешно.make golden-update: эталоны вfixtures/ocr/expected_normalize/не изменились (в реальных ответах нет сумм с точкой-тысячами; регрессии по запятым нет).Rulings I made
1.234,56,1,234.56,1.234,567,1.234.56) шаблону не соответствуют — разбор прежний (123456,is_recognized = false). Шаблон требует один и тот же разделитель на всю строку.68ffc5b4.2,4.20,12.34— дроби (до двух знаков принимаются),1.2345— текст (№30);0.125,01.234,1234.567(ведущий ноль или 4 цифры до точки) — не тысячи.68ffc5b1. 234→ 1234; точка с ровно тремя цифрами после неё — тысячи при любом числе цифр до неё (1 234.567,1234.567,12345.678→ тысячи; решение владельца 16.10.2026).dec3f52parse_amountвызывается только для ячеек колонок значений (document._value,layout— определение колонок значений,rows— подсчёт пропущенных строк). Даты (31.12.2024) шаблону не соответствуют.68ffc5b(тест на дроби/даты-подобное)1.234.567теперьis_recognized = true(былоfalse: точки считались «мусором»), как у1,234,567.68ffc5b1.234(формально может быть дробью с тремя знаками) → 1234: дробь с тремя знаками всё равно не помещалась вMoney(текст), потери нет.68ffc5b1234,567,1 234,567— по-прежнему дробь 1234.567 (отсекается №30); тысячи — только\d{0,2}цифр до первой запятой.dec3f52(тесты)0.125,01.234— не тысячи, как раньше. Дробная часть не из трёх цифр (4.2,4.20,1234.56) — дробь.dec3f521234.567) теперь читается как 1234567; раньше такая сумма всё равно отсекалась №30 (текст), поэтому «тихой» порчи нет, но число может не сойтись — аналитик увидит на проверках (по решению владельца).make checkв docs падает наvalidate-openspec(дефолтныйCHANGE=slice-0-skeletonуже в архиве) — не связано с этим PR.🤖 Generated with Claude Code
«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>Решение владельца 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>