docs: ББ/ОФР из Excel — значение как показывает числовой формат (tabular-parser #42) #106

Merged
aep merged 3 commits from feat/42-xls-number-format into main 2026-10-15 17:37:09 +03:00
Owner

Правило алгоритма для RSHB/arm-tabular-parser#42 (AURORA-1528): 05-domain-rules.md §12 п. 5 — значение ББ/ОФР из Excel = как показывает числовой формат ячейки; OQ-138 дополнен пересмотром владельца 15.10.2026; обновлены 06-test-data, 09-delivery-plan, qa-guide. source/** и контракты не тронуты.

Порядок слияния: этот PR первым, затем fixtures, затем tabular-parser.
Примечание: make check в docs не прошёл в моём окружении (нет модуля jsonschema) — к правкам .md не относится.

Rulings I made

  • R-1 Формат хранится в Cell.number_format (default None), не отдельной картой. Цена ошибки: изменение равенства Cell только у числовых ячеек с форматом; ОСВ поле не использует.
  • R-2 Выбор секции по Excel: без явных условий — умолчания по числу секций (1: все; 2: >=0/<0; 3: >0/<0/остальное); с явными — по порядку, неявное у нефинальной секции — умолчание по номеру, у финальной — «остальное»; ничего не подошло (в т.ч. единственная условная секция) — формат не разобран. Цена: редкие комбинации вида [>100]0;0;0 могут отличаться от Excel; значение почти не зависит от выбора секции (знак — от сырого).
  • R-3 Знак отображаемого значения — от сырого значения для числовых секций; в литеральных секциях знак из литерала.
  • R-4 Секция General -> сырое значение, не «не разобран».
  • R-5 Литерал, не превращающийся в число/пусто/прочерк (напр. «н/д») -> формат не разобран (сырое + предупреждение).
  • R-6 Неизвестные буквы/знаки вне кавычек (d m y h s, AM/PM, E+, %, @, /, «₽» без кавычек) -> не разобран.
  • R-7 Предупреждения по одному на документ ББ/ОФР с колонкой кодов, с префиксом sheet=<первый лист>: xlsb «формат чисел xlsb не читается: значения как в файле»; «формат чисел не разобран, значения как в ячейках: «ф1», «ф2»» (уникальные, по алфавиту, до 30 символов). Документы без колонки кодов и DISCLOSURE предупреждений не получают (значений нет).
  • R-8 Квантование результата и проверка диапазона numeric(18,2) — тем же кодом, что to_money (quantize_money).
  • R-9 (T4, fixed) Условия формата сравниваются с точностью 15 значащих цифр, как Excel (xls даёт -1486533582.3500001 против условия [=-1486533582.35]); то же — для округления при масштабировании. Цена: значение с 16+ значащими цифрами округляется до 15 (в реальных данных нет); при формате 0 и значении ≥1e15 результат выходит за numeric(18,2) -> «не разобран».
  • R-10 (fix-волна) Формат более чем из 4 секций -> не разобран (Excel такой не принимает). Скобка с оператором сравнения, не подошедшая под шаблон условия ([=1E-5]), -> не разобран, а не игнорируется.
  • R-11 Признак xlsb для предупреждения — из содержимого (read_book_detected -> detected == "XLSB"), а не из текста outline-предупреждения.
  • R-12 OpenSpec change не заводился (bounded по решению владельца), openspec/specs/{statement-parsing,tabular-recognition-service}/spec.md НЕ обновлены и частично противоречат коду — см. I-2 (deferred).

Находки

Маркер Суть Статус
T4.1 операнд условия не приводился к 15 цифрам fixed 904392d
T4.2 .15g округляет HALF_EVEN fixed 904392d
T4.3 неявные условия не описаны в docs fixed 20dd0fe
T4.4 [=5]0;[=5]1 unparsed без теста rejected: пример некорректен («1» вне плейсхолдеров -> R-6); добавлен тест [=5]0;[=5]0,
T4.5 «дубль пробела» в _PLAIN_CHARS rejected: второй символ NBSP
I-1 integration test_roundtrip ожидал устаревшие мягкие соотношения НПЗ fixed 904392d (make check-full: 10 integration passed)
I-2 openspec/specs содержат устаревшие сценарии (значения как в файле, 5852464.14, 1600=1700 1.94/9.02/2.48) deferred: нужна дельта OpenSpec к двум capability — решение владельца (change не заводился)
M-1 устаревшие комментарии манифеста/README fixed 904392d
M-2 детали алгоритма не попали в §12 п. 5 fixed 20dd0fe
M-3 неточности qa-guide, 06-test-data fixed 20dd0fe
M-4 непонятная скобка-условие молча игнорировалась fixed 904392d
M-5 xlsb-признак выведен из текста предупреждения fixed 904392d
M-6 округление без приведения к 15 цифрам fixed 904392d
O-1 ~600 нулей в golden стали null ([=0]"-"); UI покажет пустые/«—» deferred: сообщить фронту/владельцу
O-2 make check docs не прошёл: нет jsonschema в среде deferred (среда, к правкам не относится)
O-3 arm-core unit 1335 + integration 911 passed на новых golden (ARM_KA_FIXTURES=$W/fixtures) информация

🤖 Generated with Claude Code

Правило алгоритма для RSHB/arm-tabular-parser#42 (AURORA-1528): `05-domain-rules.md` §12 п. 5 — значение ББ/ОФР из Excel = как показывает числовой формат ячейки; OQ-138 дополнен пересмотром владельца 15.10.2026; обновлены 06-test-data, 09-delivery-plan, qa-guide. `source/**` и контракты не тронуты. **Порядок слияния:** этот PR первым, затем fixtures, затем tabular-parser. Примечание: `make check` в docs не прошёл в моём окружении (нет модуля jsonschema) — к правкам .md не относится. ## Rulings I made - R-1 Формат хранится в `Cell.number_format` (default None), не отдельной картой. Цена ошибки: изменение равенства Cell только у числовых ячеек с форматом; ОСВ поле не использует. - R-2 Выбор секции по Excel: без явных условий — умолчания по числу секций (1: все; 2: >=0/<0; 3: >0/<0/остальное); с явными — по порядку, неявное у нефинальной секции — умолчание по номеру, у финальной — «остальное»; ничего не подошло (в т.ч. единственная условная секция) — формат не разобран. Цена: редкие комбинации вида `[>100]0;0;0` могут отличаться от Excel; значение почти не зависит от выбора секции (знак — от сырого). - R-3 Знак отображаемого значения — от сырого значения для числовых секций; в литеральных секциях знак из литерала. - R-4 Секция `General` -> сырое значение, не «не разобран». - R-5 Литерал, не превращающийся в число/пусто/прочерк (напр. «н/д») -> формат не разобран (сырое + предупреждение). - R-6 Неизвестные буквы/знаки вне кавычек (d m y h s, AM/PM, E+, %, @, /, «₽» без кавычек) -> не разобран. - R-7 Предупреждения по одному на документ ББ/ОФР с колонкой кодов, с префиксом `sheet=<первый лист>`: xlsb «формат чисел xlsb не читается: значения как в файле»; «формат чисел не разобран, значения как в ячейках: «ф1», «ф2»» (уникальные, по алфавиту, до 30 символов). Документы без колонки кодов и DISCLOSURE предупреждений не получают (значений нет). - R-8 Квантование результата и проверка диапазона numeric(18,2) — тем же кодом, что `to_money` (`quantize_money`). - R-9 (T4, fixed) Условия формата сравниваются с точностью 15 значащих цифр, как Excel (xls даёт -1486533582.3500001 против условия `[=-1486533582.35]`); то же — для округления при масштабировании. Цена: значение с 16+ значащими цифрами округляется до 15 (в реальных данных нет); при формате `0` и значении ≥1e15 результат выходит за numeric(18,2) -> «не разобран». - R-10 (fix-волна) Формат более чем из 4 секций -> не разобран (Excel такой не принимает). Скобка с оператором сравнения, не подошедшая под шаблон условия (`[=1E-5]`), -> не разобран, а не игнорируется. - R-11 Признак xlsb для предупреждения — из содержимого (`read_book_detected` -> `detected == "XLSB"`), а не из текста outline-предупреждения. - R-12 OpenSpec change не заводился (bounded по решению владельца), `openspec/specs/{statement-parsing,tabular-recognition-service}/spec.md` НЕ обновлены и частично противоречат коду — см. I-2 (deferred). ## Находки | Маркер | Суть | Статус | |---|---|---| | T4.1 | операнд условия не приводился к 15 цифрам | fixed 904392d | | T4.2 | `.15g` округляет HALF_EVEN | fixed 904392d | | T4.3 | неявные условия не описаны в docs | fixed 20dd0fe | | T4.4 | `[=5]0;[=5]1` unparsed без теста | rejected: пример некорректен («1» вне плейсхолдеров -> R-6); добавлен тест `[=5]0;[=5]0,` | | T4.5 | «дубль пробела» в _PLAIN_CHARS | rejected: второй символ NBSP | | I-1 | integration test_roundtrip ожидал устаревшие мягкие соотношения НПЗ | fixed 904392d (make check-full: 10 integration passed) | | I-2 | openspec/specs содержат устаревшие сценарии (значения как в файле, 5852464.14, 1600=1700 1.94/9.02/2.48) | deferred: нужна дельта OpenSpec к двум capability — решение владельца (change не заводился) | | M-1 | устаревшие комментарии манифеста/README | fixed 904392d | | M-2 | детали алгоритма не попали в §12 п. 5 | fixed 20dd0fe | | M-3 | неточности qa-guide, 06-test-data | fixed 20dd0fe | | M-4 | непонятная скобка-условие молча игнорировалась | fixed 904392d | | M-5 | xlsb-признак выведен из текста предупреждения | fixed 904392d | | M-6 | округление без приведения к 15 цифрам | fixed 904392d | | O-1 | ~600 нулей в golden стали null (`[=0]"-"`); UI покажет пустые/«—» | deferred: сообщить фронту/владельцу | | O-2 | `make check` docs не прошёл: нет jsonschema в среде | deferred (среда, к правкам не относится) | | O-3 | arm-core unit 1335 + integration 911 passed на новых golden (`ARM_KA_FIXTURES=$W/fixtures`) | информация | 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 2 commits 2026-10-15 17:01:12 +03:00
aep added 1 commit 2026-10-15 17:37:03 +03:00
aep merged commit 47e79972b7 into main 2026-10-15 17:37:09 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-ka-docs#106
No description provided.