Andrey Epifancev ece851b0ed Архив OpenSpec: osv-indicator-column (#58)
Change перенесён в openspec/changes/archive/2026-10-19-osv-indicator-column,
дельта влита в openspec/specs/osv-parsing/spec.md (строки-показатели, колонка
«Показатели», «В валюте», BU по умолчанию, счёт 90 в OQ-132).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 13:05:49 +04:00

5.9 KiB
Raw Blame History

Колонка «Показатели» и валютные строки ОСВ (AURORA-1613, AURORA-1661 — валютная часть)

Issue: RSHB/arm-tabular-parser#58. Ветки feat/58-osv-indicators в tabular-parser, docs, fixtures.

Why

Прогон выгрузки тестового контура (AURORA-1639, свод admin/1639-contour-run/, находки O-7, O-8) и тестирование AURORA-1534 показали два дефекта одного механизма — вида данных строки ОСВ:

  • AURORA-1613. 1С печатает вид суммы строки отдельной колонкой «Показатели» (БУ / НУ / Кол. / Вал. / ПР / ВР; 31 файл контура). Парсер о колонке не знает: метка уходит в extra, data_type строк НУ/Кол. — null (шапка без «Выводимые данные»); строка НУ с пустым текстом получает текст из колонки «Показатели» и отступ «колонка глубже», становится ребёнком строки БУ — «дети = родитель» и «Итого» не сходятся, документ needs_check, на экране оборот удваивается. Вторая строка «Итого» (по НУ) обрезается как подвал с предупреждением «ниже таблицы есть числа».
  • AURORA-1661, валютная часть. Строки «В валюте» не распознаются как валютные: суммы в валюте (69,6 млн USD) записываются как рублёвые и попадают в свод.
  • Строки без вида данных (шапка без «Выводимые данные», нет метки) получают data_type = null, а ядро берёт в свод только BU/SUM — строки молча пропадают из сводной ОСВ.

Решения владельца 19.10.2026 — минимальное исправление: строки, которые не являются БУ, изолируются от данных БУ. Глубокая аналитика НУ и валют вынесена в AURORA-1669 и AURORA-1670 (бэклог аналитики).

What Changes

  • Колонка «Показатели» определяется по заголовку (словарь service_columns.indicator); метка строки читается по новому словарю data_types.indicator_column: «БУ» → BU (обычная строка), «НУ» → NU, «Кол.» → QUANTITY, «Вал.» → CURRENCY, «ПР»/«ВР»/метка не из словаря → data_type = null (метка не из словаря — с предупреждением).
  • Понятие строки-показателя (indicator) — признак строки, а не значение data_type: строки-показатели в колонке текста («Вал.», «Кол.», «Кол-во», код валюты, новое «В валюте») и строки с меткой колонки «Показатели», кроме «БУ». Строки-показатели не передаются в каскад иерархии; родитель — предыдущая строка данных, уровень на один глубже. В проверки «дети = родитель» и «Итого» не входят (как сейчас CURRENCY/QUANTITY); тождество строки — как у всех.
  • row_value строки с меткой колонки — метка (а не повтор текста объединённой ячейки строки БУ).
  • Итоговая строка с меткой показателя сразу за «Итого» — TOTAL, в подвал не уходит, в сверку не входит.
  • Строки без вида данных при шапке без «Выводимые данные» — data_type = BU с предупреждением; header.data_type остаётся null (шапка его не называет).
  • «Валюта <код>» — обычная строка (OTHER, рубли): поведение не меняется, закрепляется тестом.
  • §1.3/§1.4 05-domain-rules.md — отдельным PR в arm-ka-docs (ветка feat/58-osv-indicators).
  • Синтетика s33–s36 и golden — PR в arm-ka-fixtures.

Затронутые репозитории: arm-tabular-parser (код, словари, тесты, спека osv-parsing), arm-ka-docs (§1.3, §1.4), arm-ka-fixtures (синтетика, golden). Таблицы DBML v5.19 не меняются (osv_entry.data_type уже включает NU, CURRENCY, QUANTITY, NULL); контракт recognition-result не меняется. Срез: поддержка после Среза 2a (ошибки контура).

Non-goals

  • Собственные проверки по НУ, итоги по видам данных, хранение «ПР»/«ВР» отдельными значениями — AURORA-1669.
  • Код валюты строки, мультивалютные контрагенты, пересчёт; пересмотр «USD» как CURRENCY (в ТЗ — разрез с рублями) — AURORA-1670.
  • Плоская форма 1С (шапка «по счету: X», плоский список без строки счёта, «Итого развернутое» перед «Итого», контрагенты на расчётных счетах) — отдельный трек AURORA-1661 (.wt/osv-flat/).
  • Изменения arm-core: ядро уже берёт в свод только BU/SUM и пишет data_type как пришёл.