From e20c1db7cd824f477fbbe6c4fcbe4bc7ae3e1f03 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Fri, 16 Oct 2026 13:29:12 +0400 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20=D1=82=D0=BE=D1=87=D0=BA=D0=B0=20?= =?UTF-8?q?=E2=80=94=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=20=D1=82=D1=8B=D1=81=D1=8F=D1=87=20=D0=B2=20?= =?UTF-8?q?=D1=81=D1=83=D0=BC=D0=BC=D0=B0=D1=85=20OCR,=20=C2=A711=20=D0=BF?= =?UTF-8?q?.=207=20(AURORA-1405,=20scan-gateway#37)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- context/05-domain-rules.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/context/05-domain-rules.md b/context/05-domain-rules.md index 3fda2e9..c6e7eb2 100644 --- a/context/05-domain-rules.md +++ b/context/05-domain-rules.md @@ -1033,6 +1033,18 @@ PDF-пути, решение №1 спеки 3a; `pages:…` — только е `confidence == 100`. Остальное без изменений: `4,2` → 4.2, `12,34` → 12.34, `0,125` → 0.125 (далее отсекается решением №30), `1,23` → 1.23, `1 234,56` → 1234.56, `1.234,56` и `1,234.56` → 123456 (`is_recognized = false`); `12,3456`, `4,200,`, `(4,200}`, `(4,200) руб`, `abc(4,200)` и `(4,200)(1,000)` шаблону не соответствуют, разбор прежний. + **Точка — разделитель тысяч** (AURORA-1405, scan-gateway#37, решение владельца 16.10.2026: ИС Сканирование местами + возвращает «4.200», «837.994»; такие суммы разбирались как 4.200 с тремя знаками и отсекались решением №30 в + `amount = null`, текст в `string_value`): то же правило с шаблоном `[+-]?[1-9]\d{0,2}(\.\d{3})+` — те же условия + (весь текст ячейки после `strip` и удаления пробелов или содержимое пары скобок на всю строку), точки удаляются, + `is_recognized` определяется только `confidence == 100`: `4.200` → 4200, `837.994` → 837994, `(4.200)` → −4200, + `-4.200` → −4200, `1.234.567` → 1234567 (раньше при нескольких точках — `is_recognized = false`). Остальное без + изменений: `4.2` → 4.2, `4.20` → 4.20, `12.34` → 12.34, `0.125`, `01.234`, `1234.567` (ведущий ноль или четыре цифры до + точки — не группа тысяч) → дробь, при трёх знаках отсекается решением №30; `1.2345` — текст. Смешанные записи + (`1.234,56`, `1,234.56`, `1.234,567`) и «грязные» (`4.200.`, `(4.200}`, `(4.200) руб`, `1.234.56`) шаблону не + соответствуют, разбор прежний. Правило действует только на ячейки колонок значений таблицы ББ/ОФР (`parse_amount` не + вызывается для дат, кодов строк, ОКЕИ, ИНН), где точка как десятичный разделитель дробей с тремя знаками и так не + принималась (`Money`, №30). **Отличия от источника под контракт** (решение №30 спеки 3a): сумма с **более чем двумя** знаками после запятой (например `0,125`, `12.3456`) не укладывается в `Money` контракта (`numeric(18,2)`) — `amount = null`, `string_value` — текст ячейки, `is_recognized = false` (иначе один артефакт OCR валил всю таблицу); `1,234` под это не попадает — From bca65ac51af8fe7922094da7c87bf2bcc18fd214 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Fri, 16 Oct 2026 13:35:36 +0400 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20=D1=82=D0=BE=D1=87=D0=BA=D0=B0=20?= =?UTF-8?q?=E2=80=94=20=D1=82=D1=8B=D1=81=D1=8F=D1=87=D0=B8=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=BB=D1=8E=D0=B1=D0=BE=D0=BC=20=D1=87=D0=B8=D1=81?= =?UTF-8?q?=D0=BB=D0=B5=20=D1=86=D0=B8=D1=84=D1=80=20=D0=B4=D0=BE=20=D0=BD?= =?UTF-8?q?=D0=B5=D1=91,=20=C2=A711=20=D0=BF.=207=20(AURORA-1405,=20scan-g?= =?UTF-8?q?ateway#37)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- context/05-domain-rules.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/context/05-domain-rules.md b/context/05-domain-rules.md index c6e7eb2..3e9c6ca 100644 --- a/context/05-domain-rules.md +++ b/context/05-domain-rules.md @@ -1035,16 +1035,18 @@ PDF-пути, решение №1 спеки 3a; `pages:…` — только е `4,200,`, `(4,200}`, `(4,200) руб`, `abc(4,200)` и `(4,200)(1,000)` шаблону не соответствуют, разбор прежний. **Точка — разделитель тысяч** (AURORA-1405, scan-gateway#37, решение владельца 16.10.2026: ИС Сканирование местами возвращает «4.200», «837.994»; такие суммы разбирались как 4.200 с тремя знаками и отсекались решением №30 в - `amount = null`, текст в `string_value`): то же правило с шаблоном `[+-]?[1-9]\d{0,2}(\.\d{3})+` — те же условия + `amount = null`, текст в `string_value`): то же правило, но шаблон шире (решение владельца 16.10.2026: если после точки ровно три цифры — это разделитель тысяч независимо от числа цифр до неё; если суммы не сойдутся, аналитик увидит это на проверках): `[+-]?[1-9]\d*(\.\d{3})+` — те же условия (весь текст ячейки после `strip` и удаления пробелов или содержимое пары скобок на всю строку), точки удаляются, `is_recognized` определяется только `confidence == 100`: `4.200` → 4200, `837.994` → 837994, `(4.200)` → −4200, - `-4.200` → −4200, `1.234.567` → 1234567 (раньше при нескольких точках — `is_recognized = false`). Остальное без - изменений: `4.2` → 4.2, `4.20` → 4.20, `12.34` → 12.34, `0.125`, `01.234`, `1234.567` (ведущий ноль или четыре цифры до - точки — не группа тысяч) → дробь, при трёх знаках отсекается решением №30; `1.2345` — текст. Смешанные записи + `-4.200` → −4200, `1.234.567` → 1234567 (раньше при нескольких точках — `is_recognized = false`), `1234.567` → + 1234567, `12345.678` → 12345678, `1 234.567` → 1234567, `(1 234.567)` → −1234567. Остальное без изменений: `4.2` → 4.2, + `4.20` → 4.20, `12.34` → 12.34, `1234.56` → 1234.56 (дробная часть не из трёх цифр — дробь); `0.125` и `01.234` (первая + цифра нулевая — не тысячи) → дробь, при трёх знаках отсекается решением №30; `1.2345` — текст. Правило для запятой + этим **не расширяется**: `1234,567` и `1 234,567` по-прежнему дробь 1234.567 (отсекается №30), тысячи — только + `\d{0,2}` цифр до первой запятой. Смешанные записи (`1.234,56`, `1,234.56`, `1.234,567`) и «грязные» (`4.200.`, `(4.200}`, `(4.200) руб`, `1.234.56`) шаблону не соответствуют, разбор прежний. Правило действует только на ячейки колонок значений таблицы ББ/ОФР (`parse_amount` не - вызывается для дат, кодов строк, ОКЕИ, ИНН), где точка как десятичный разделитель дробей с тремя знаками и так не - принималась (`Money`, №30). + вызывается для дат, кодов строк, ОКЕИ, ИНН); дробь с тремя знаками после точки и так не принималась (`Money`, №30). **Отличия от источника под контракт** (решение №30 спеки 3a): сумма с **более чем двумя** знаками после запятой (например `0,125`, `12.3456`) не укладывается в `Money` контракта (`numeric(18,2)`) — `amount = null`, `string_value` — текст ячейки, `is_recognized = false` (иначе один артефакт OCR валил всю таблицу); `1,234` под это не попадает —