diff --git a/context/05-domain-rules.md b/context/05-domain-rules.md index 3b4e5c6..a7fde57 100644 --- a/context/05-domain-rules.md +++ b/context/05-domain-rules.md @@ -1094,8 +1094,12 @@ PDF-пути, решение №1 спеки 3a; `pages:…` — только е масштабирующие запятые (`#,##0,` → тысячи, `0,` → тысячи), число знаков после точки (не больше 2 — `numeric(18,2)`), секции и условия (`[=0]"-"`, `[=-646532]"(647)"`); литерал условной секции разбирается как текстовая ячейка (скобки → минус, пробелы/NBSP — разделители, «-»/«–»/«—»/пусто → `null`); округление «половина от нуля» (как в Excel); знак — от - сырого значения. `General`/пустой формат — значение как в ячейке. Формат, который не удалось разобрать (`%`, экспонента, - дробь, даты, `@`), — значение как в ячейке и одно предупреждение на документ с перечнем форматов. xlsb: стили не читаются + сырого значения (для числовых секций; у секций-литералов значение берётся из литерала). Условия `[=x]` и значение + сравниваются с точностью 15 значащих цифр, как в Excel. Секция выбирается по порядку: при явных условиях ни одна не + подошла — формат не разобран, неявные условия у нефинальных секций — по умолчанию по числу секций. `General`/пустой + формат — значение как в ячейке. Формат, который не удалось разобрать (`%`, экспонента, дробь, даты, `@`, неизвестные + знаки вне кавычек вроде `₽`, больше четырёх секций, условие не по шаблону вроде `[=1E-5]`, литерал не число/пусто/ + прочерк, результат вне `numeric(18,2)`), — значение как в ячейке и одно предупреждение на документ с перечнем форматов. xlsb: стили не читаются — значения как в файле и одно предупреждение на документ «формат чисел xlsb не читается: значения как в файле». ОСВ правило не затрагивает. Единицы сверх формата не нормализуются: `header.units` — текст шапки; при «тыс.» и ≥ 10 % отображаемых значений с дробной частью — предупреждение «значений с дробной частью при единице тыс. руб.: N из M» diff --git a/context/06-test-data.md b/context/06-test-data.md index ea1beec..5136092 100644 --- a/context/06-test-data.md +++ b/context/06-test-data.md @@ -157,7 +157,7 @@ arm-tabular-parser#11, OQ-131…OQ-135. ИНН организаций в шап |---|---|---| | 1С-xls постранично | `unagrande-co/2024-FY/`, `unagrande-group/{2024-FY,2025-Q3}/` | один файл = одна страница формы; на странице 1 титул (организация, ИНН, ОКПО, единица «в тыс. рублей», ОКЕИ, аудитор со **своим** ИНН), на странице 2 только «Форма 0710001 с.2»; пятизначные подстроки (11101…), значения в ячейке — рубли с копейками, в тысячи их переводит числовой формат (`#,##0,`), парсер берёт значение как показывает формат (OQ-138, #42); страниц 1 ББ в пакете нет (только актив) и ОФР Групп 2024 — только стр. 2 | | Многолистовая xlsx ФСБУ 4/2023 | `npz/2025-Q3/` | ББ на 5 листах, ОФР на 3 (третий — одна строка 2400, присоединяется как продолжение); заголовок формы после титула; листы 2–5 без заголовка и маркера; строка 1105 «Гудвил», подстроки 12301…, строка без кода с суммами; лист ОФР с одной строкой 2400 (OQ-143) | -| `TDSheet` 66н | `mezheninovskaya/2025-Q3/` | вся форма на одном листе, дата тройкой «30 \| 9 \| 2025» числами, двухстрочные заголовки, строка нумерации колонок, значения — тысячи с дробной частью | +| `TDSheet` 66н | `mezheninovskaya/2025-Q3/` | вся форма на одном листе, дата тройкой «30 \| 9 \| 2025» числами, двухстрочные заголовки, строка нумерации колонок, значения — тысячи с дробной частью; формат `#,##0` показывает их целыми, парсер берёт показанное (OQ-138, #42) | | Шаблоны | `templates/` | 66н и ФСБУ 4/2023: коды есть, сумм и шапки нет; заголовок на две строки; в шаблоне ФСБУ «АКТИВ» и код 1110 в одной строке (OQ-142) | **Манифест** `tabular-parser/api/tests/statements_manifest.yaml`: для каждого из 18 файлов — организация, ИНН, документы по diff --git a/dev/qa-guide.md b/dev/qa-guide.md index e43276b..97bda5d 100644 --- a/dev/qa-guide.md +++ b/dev/qa-guide.md @@ -441,8 +441,10 @@ ENV_FILE=.env.test .venv/bin/python -m src.parser.cli "/путь/к/файлу.x дробной частью при единице тыс. руб.: N из M»: значения ББ/ОФР из Excel берутся как показывает числовой формат ячейки, OQ-138, #42; для xlsb — как в файле плюс предупреждение «формат чисел xlsb не читается», для неразобранных форматов — «формат чисел не разобран»), «колонка кодов не найдена», «страница-продолжение без шапки». Ожидания по реальным файлам — `../tabular-parser/api/tests/statements_manifest.yaml` и таблица «файл → статус» в README `tabular-parser`; файлы — `../fixtures/statements-xlsx/` (синтетика `st01…st07`). -Постраничные xls из 1С (страница 2 отдельным файлом, ББ только актив) и формы xlsb в рублях при шапке «тыс. руб.» (формат не читается) дают -`needs_check` — это штатно (OQ-138, OQ-140), не баг; `done` ожидается только у форм, где §7 сходится (Межениновская). +Постраничные xls из 1С (страница 2 отдельным файлом, ББ только актив) дают `needs_check` — это штатно (OQ-138, OQ-140), не баг. +`done` получают формы, где жёсткие соотношения §7 сходятся: Межениновская, НПЗ, ОФР Унагранде (страница 1); мягкие расхождения +(в пределах допуска) статус не меняют. Для xlsb числовой формат не читается (значения как в файле), поэтому при шапке «тыс. руб.» +и рублёвых значениях возможно `needs_check` или расхождение в пределах допуска округления — это следствие правила, не баг. **Как делать свои файлы.** Возьмите любую реальную ОСВ и меняйте по одному признаку, после каждого — прогон и чек-лист: