План: номера синтетики s33–s36 вместо s40–s43 (R-1, #58)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
656486a7d2
commit
d564d4998d
@ -12,7 +12,7 @@
|
||||
|
||||
**Worktree:** `/Users/andrey.epifancev/projects/awp-ca/.wt/osv-indicators/` — `tabular-parser/`, `docs/`, `fixtures/` на ветке `feat/58-osv-indicators`; `CLAUDE.md`, `.claude/`, `reference-old-arm/` — симлинки. Ниже `$WT` = этот путь. Git — только `git -C $WT/<repo>`. Команды Python — из `$WT/tabular-parser/api` с `ENV_FILE=.env.test .venv/bin/python -m pytest …`; `make` — из `$WT/tabular-parser` (сначала один раз `make venv`). codegraph: `codegraph_explore` с `projectPath` = `$WT/tabular-parser`.
|
||||
|
||||
**Параллельный трек B** (`/Users/andrey.epifancev/projects/awp-ca/.wt/osv-flat/`, плоская форма AURORA-1661) правит `header.py` (`_account_code`, `_organization`), `hierarchy.py` (стратегии, `resolve_levels`), `classify.py` (`_find_total`, `_trailing_totals`), `checks.py` (`_total`), синтетику s33–s39. Этот план в `hierarchy.py` добавляет только поля `BodyRow`, в `_trailing_totals` и `_total` — по одному условию. Его файлы не трогать сверх этого; при конфликте слияния второй вливающийся трек добавляет своё условие к версии первого.
|
||||
**Параллельный трек B** (`/Users/andrey.epifancev/projects/awp-ca/.wt/osv-flat/`, плоская форма AURORA-1661) правит `header.py` (`_account_code`, `_organization`), `hierarchy.py` (стратегии, `resolve_levels`), `classify.py` (`_find_total`, `_trailing_totals`), `checks.py` (`_total`), синтетику s37–s44. Этот план в `hierarchy.py` добавляет только поля `BodyRow`, в `_trailing_totals` и `_total` — по одному условию. Его файлы не трогать сверх этого; при конфликте слияния второй вливающийся трек добавляет своё условие к версии первого.
|
||||
|
||||
## Global Constraints
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
- Словари — данные (`api/rules/*.yaml`); каждая новая запись срабатывает хотя бы на одном файле (`tests/fixtures/test_rules_coverage.py`). Паттерны без дефисов, «ё» и переносов (текст нормализуется: дефис и перенос → пробел).
|
||||
- Контракт результата и DBML не меняются. `data_type` строки — только значения контракта (`BU`, `NU`, `SUM`, `CURRENCY`, `QUANTITY`, `null`).
|
||||
- Деньги — `Decimal`.
|
||||
- Golden-снимки реальных файлов и s01–s32 MUST NOT измениться. Любой diff по ним — стоп, отчёт контроллеру, вопрос владельцу. `make golden-update` — только для новых s40–s43, отдельным коммитом в fixtures.
|
||||
- Golden-снимки реальных файлов и s01–s32 MUST NOT измениться. Любой diff по ним — стоп, отчёт контроллеру, вопрос владельцу. `make golden-update` — только для новых s33–s36, отдельным коммитом в fixtures.
|
||||
- Файлы контура (`/Users/andrey.epifancev/projects/awp-ca/result_dir.zip`) в git MUST NOT попадать; распаковка — только во временный каталог вне репозиториев (`mktemp -d`).
|
||||
- Каждое решение без обсуждения — строкой в `openspec/changes/osv-indicator-column/design.md`, раздел `## Decisions made without discussion`. Маркеры находок T/C/I/M/R/O — по `~/.claude/CLAUDE.md`.
|
||||
- Перед каждым коммитом в tabular-parser — `make check` из `$WT/tabular-parser` зелёный. Коммиты заканчиваются строкой `Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>`.
|
||||
@ -117,12 +117,12 @@ indicator_column_untyped:
|
||||
|
||||
---
|
||||
|
||||
### Task 2: Синтетика s40–s43 и ожидания (модель: sonnet)
|
||||
### Task 2: Синтетика s33–s36 и ожидания (модель: sonnet)
|
||||
|
||||
**Files:**
|
||||
- Modify: `api/tests/synthetic/generate.py`
|
||||
- Modify: `api/tests/synthetic/test_synthetic_files.py`
|
||||
- Create: `$WT/fixtures/osv/synthetic/s40_indicator_column_bu_nu.xlsx`, `s41_indicator_column_qty_val_diff.xlsx`, `s42_currency_slices.xlsx`, `s43_no_data_type_header.xlsx`
|
||||
- Create: `$WT/fixtures/osv/synthetic/s33_indicator_column_bu_nu.xlsx`, `s34_indicator_column_qty_val_diff.xlsx`, `s35_currency_slices.xlsx`, `s36_no_data_type_header.xlsx`
|
||||
|
||||
- [ ] **Step 1: Построитель листа «по сетке».** В `generate.py` после `form_sheet` добавить (константы `ORG`, `GROUP_TITLES`, `DEBIT`, `CREDIT`, `D` — уже есть):
|
||||
|
||||
@ -193,7 +193,7 @@ def _grid_osv( # noqa: PLR0913 - лист описывается полност
|
||||
- [ ] **Step 2: Четыре файла** (суммы согласованы: родитель БУ = Σ детей БУ, «Итого» = корень, тождество строк выполняется у всех строк):
|
||||
|
||||
```python
|
||||
def _s40() -> list[SheetSpec]:
|
||||
def _s33() -> list[SheetSpec]:
|
||||
"""Колонка «Показатели» БУ/НУ (AURORA-1613): счёт 02, шапка без «Выводимые данные», название объединено на строки
|
||||
БУ и НУ, «Итого» по БУ и по НУ. Строки НУ — показатели строки БУ над ними."""
|
||||
rows = [
|
||||
@ -209,7 +209,7 @@ def _s40() -> list[SheetSpec]:
|
||||
return [_grid_osv(account="02", group_label="Основные средства", rows=rows, data_type_line=None, indicator_column=True)]
|
||||
|
||||
|
||||
def _s41() -> list[SheetSpec]:
|
||||
def _s34() -> list[SheetSpec]:
|
||||
"""Колонка «Показатели»: «Вал.», «Кол.», «ПР», «ВР» и неизвестная метка «Ед.» — показатели вне сверки родителя."""
|
||||
rows = [
|
||||
GridRow("60", ("1000.00", "400.00", "600.00", "300.00", "1200.00", "300.00"), "БУ"),
|
||||
@ -226,7 +226,7 @@ def _s41() -> list[SheetSpec]:
|
||||
return [_grid_osv(account="60", group_label="Контрагенты", rows=rows, data_type_line=line, indicator_column=True)]
|
||||
|
||||
|
||||
def _s42() -> list[SheetSpec]:
|
||||
def _s35() -> list[SheetSpec]:
|
||||
"""«Валюта <код>» — строка в рублях, «В валюте» — показатель (AURORA-1661): пары на одном outline-уровне."""
|
||||
rows = [
|
||||
GridRow("60", ("9000.00", "2000.00", "1000.00", "500.00", "10000.00", "2500.00")),
|
||||
@ -242,7 +242,7 @@ def _s42() -> list[SheetSpec]:
|
||||
return [_grid_osv(account="60", group_label="Контрагенты", rows=rows, data_type_line=line, indicator_column=False)]
|
||||
|
||||
|
||||
def _s43() -> list[SheetSpec]:
|
||||
def _s36() -> list[SheetSpec]:
|
||||
"""Шапка без «Выводимые данные», колонки «Показатели» нет: строки — BU по умолчанию с предупреждением."""
|
||||
rows = [
|
||||
GridRow("60", ("1000.00", "400.00", "600.00", "300.00", "1200.00", "300.00")),
|
||||
@ -256,25 +256,25 @@ def _s43() -> list[SheetSpec]:
|
||||
Добавить в `FILES`:
|
||||
|
||||
```python
|
||||
"s40_indicator_column_bu_nu.xlsx": (_s40, to_xlsx),
|
||||
"s41_indicator_column_qty_val_diff.xlsx": (_s41, to_xlsx),
|
||||
"s42_currency_slices.xlsx": (_s42, to_xlsx),
|
||||
"s43_no_data_type_header.xlsx": (_s43, to_xlsx),
|
||||
"s33_indicator_column_bu_nu.xlsx": (_s33, to_xlsx),
|
||||
"s34_indicator_column_qty_val_diff.xlsx": (_s34, to_xlsx),
|
||||
"s35_currency_slices.xlsx": (_s35, to_xlsx),
|
||||
"s36_no_data_type_header.xlsx": (_s36, to_xlsx),
|
||||
```
|
||||
|
||||
и поправить описание CLI в `main` («s01…s43»). Номера s33–s39 оставлены треку B.
|
||||
и поправить описание CLI в `main` («s01…s36»). Номера s37–s44 заняты треком B (#59); рулинг владельца R-1.
|
||||
|
||||
- [ ] **Step 3: Сгенерировать в fixtures:** `cd $WT/tabular-parser/api && .venv/bin/python -m tests.synthetic.generate $WT/fixtures/osv/synthetic` — проверить `git -C $WT/fixtures status`: изменены только четыре новых файла (s01–s32 побайтно те же; если нет — стоп, отчёт).
|
||||
|
||||
- [ ] **Step 4: Ожидания и сценарии** в `test_synthetic_files.py`:
|
||||
- `Expect.data_type: str | None = "BU"`;
|
||||
- `EXPECTED` — `"s40_indicator_column_bu_nu.xlsx": Expect("outline", 2025, "Q3", False, data_type=None)`, `"s41_indicator_column_qty_val_diff.xlsx": Expect("outline", 2025, "Q3", False)`, `"s42_currency_slices.xlsx": Expect("outline", 2025, "Q3", False)`, `"s43_no_data_type_header.xlsx": Expect("outline", 2025, "Q3", False, data_type=None)`; `EXPECTED_NAMES` — четыре имени; докстринг `test_synthetic_set_is_complete` — «s01…s43»;
|
||||
- `EXPECTED` — `"s33_indicator_column_bu_nu.xlsx": Expect("outline", 2025, "Q3", False, data_type=None)`, `"s34_indicator_column_qty_val_diff.xlsx": Expect("outline", 2025, "Q3", False)`, `"s35_currency_slices.xlsx": Expect("outline", 2025, "Q3", False)`, `"s36_no_data_type_header.xlsx": Expect("outline", 2025, "Q3", False, data_type=None)`; `EXPECTED_NAMES` — четыре имени; докстринг `test_synthetic_set_is_complete` — «s01…s36»;
|
||||
- сценарии (по образцу `test_s30_…`, хелперы `one_document`, `parse_named`, `warnings_of`):
|
||||
|
||||
```python
|
||||
def test_s40_indicator_column_bu_nu(fixtures_dir: Path) -> None:
|
||||
def test_s33_indicator_column_bu_nu(fixtures_dir: Path) -> None:
|
||||
"""AURORA-1613: строки «НУ» колонки «Показатели» — показатели строки БУ; две «Итого»; проверки сходятся."""
|
||||
outcome = parse_named(fixtures_dir, "s40_indicator_column_bu_nu.xlsx")
|
||||
outcome = parse_named(fixtures_dir, "s33_indicator_column_bu_nu.xlsx")
|
||||
doc = one_document(outcome)
|
||||
by_row = {row.row_number: row for row in doc.rows}
|
||||
nu = [row for row in doc.rows if row.data_type == "NU"]
|
||||
@ -294,9 +294,9 @@ def test_s40_indicator_column_bu_nu(fixtures_dir: Path) -> None:
|
||||
assert outcome.status is ResultStatus.DONE
|
||||
|
||||
|
||||
def test_s41_indicator_column_quantity_currency_differences(fixtures_dir: Path) -> None:
|
||||
def test_s34_indicator_column_quantity_currency_differences(fixtures_dir: Path) -> None:
|
||||
"""«Кол.» — QUANTITY, «Вал.» — CURRENCY, «ПР»/«ВР»/неизвестная метка — null; одно предупреждение о метке."""
|
||||
outcome = parse_named(fixtures_dir, "s41_indicator_column_qty_val_diff.xlsx")
|
||||
outcome = parse_named(fixtures_dir, "s34_indicator_column_qty_val_diff.xlsx")
|
||||
doc = one_document(outcome)
|
||||
types = {row.row_value: row.data_type for row in doc.rows if row.row_value in {"Вал.", "Кол.", "ПР", "ВР", "Ед."}}
|
||||
assert types == {"Вал.": "CURRENCY", "Кол.": "QUANTITY", "ПР": None, "ВР": None, "Ед.": None}
|
||||
@ -305,9 +305,9 @@ def test_s41_indicator_column_quantity_currency_differences(fixtures_dir: Path)
|
||||
assert outcome.status is ResultStatus.DONE
|
||||
|
||||
|
||||
def test_s42_v_valyute_is_currency_of_previous_row(fixtures_dir: Path) -> None:
|
||||
def test_s35_v_valyute_is_currency_of_previous_row(fixtures_dir: Path) -> None:
|
||||
"""AURORA-1661: «В валюте» — CURRENCY, родитель — «Валюта …» над ней; «Валюта …» — обычные строки в рублях."""
|
||||
outcome = parse_named(fixtures_dir, "s42_currency_slices.xlsx")
|
||||
outcome = parse_named(fixtures_dir, "s35_currency_slices.xlsx")
|
||||
doc = one_document(outcome)
|
||||
by_row = {row.row_number: row for row in doc.rows}
|
||||
in_currency = [row for row in doc.rows if row.row_value == "В валюте"]
|
||||
@ -318,9 +318,9 @@ def test_s42_v_valyute_is_currency_of_previous_row(fixtures_dir: Path) -> None:
|
||||
assert outcome.status is ResultStatus.DONE
|
||||
|
||||
|
||||
def test_s43_no_data_type_in_header_rows_are_bu(fixtures_dir: Path) -> None:
|
||||
def test_s36_no_data_type_in_header_rows_are_bu(fixtures_dir: Path) -> None:
|
||||
"""Шапка без «Выводимые данные»: строки — BU, предупреждение одно, `header.data_type` — null."""
|
||||
outcome = parse_named(fixtures_dir, "s43_no_data_type_header.xlsx")
|
||||
outcome = parse_named(fixtures_dir, "s36_no_data_type_header.xlsx")
|
||||
doc = one_document(outcome)
|
||||
assert doc.header.data_type is None
|
||||
assert {row.data_type for row in doc.rows} == {"BU"}
|
||||
@ -330,8 +330,8 @@ def test_s43_no_data_type_in_header_rows_are_bu(fixtures_dir: Path) -> None:
|
||||
|
||||
Если имена хелперов в модуле другие — взять существующие (`one_document`, `parse_named`, `warnings_of`, `ResultStatus` уже используются в s30/s31).
|
||||
|
||||
- [ ] **Step 5: Запустить — сценарии s40–s43 красные** (это и есть воспроизведение багов): `ENV_FILE=.env.test .venv/bin/python -m pytest tests/synthetic -q -k "s40 or s41 or s42 or s43"`. Записать в ledger, как именно падает каждый (до исправления).
|
||||
- [ ] **Step 6: Commit** в tabular-parser (`generate.py`, тесты; `make check` красный только на s40–s43 и покрытии словарей — допустимо с пометкой в ledger) и отдельный commit в fixtures (`git -C $WT/fixtures add osv/synthetic/s4*.xlsx`).
|
||||
- [ ] **Step 5: Запустить — сценарии s33–s36 красные** (это и есть воспроизведение багов): `ENV_FILE=.env.test .venv/bin/python -m pytest tests/synthetic -q -k "s33 or s34 or s35 or s36"`. Записать в ledger, как именно падает каждый (до исправления).
|
||||
- [ ] **Step 6: Commit** в tabular-parser (`generate.py`, тесты; `make check` красный только на s33–s36 и покрытии словарей — допустимо с пометкой в ledger) и отдельный commit в fixtures (`git -C $WT/fixtures add osv/synthetic/s3[3-6]*.xlsx`).
|
||||
|
||||
---
|
||||
|
||||
@ -430,7 +430,7 @@ def is_indicator_total(sheet: Sheet, row: int, header: TableHeader, rules: Rules
|
||||
- `_trailing_totals`: строка продолжает серию, если `_is_secondary_total(...)` **или** `is_indicator_total(sheet, row, header, rules)`; докстринг — «и итоговые строки-показатели («Итого» с меткой «НУ», AURORA-1613)»;
|
||||
- `collect_body_rows` передаёт `rules` в `_body_row`.
|
||||
- [ ] **Step 5: Тест в `test_classify.py`** — сетка с колонкой «Показатели» (строки БУ/НУ, объединённое название, «Итого» БУ+НУ): `collect_body_rows` — строки «НУ» с `indicator True`, `text == "НУ"`, `label_data_type == "NU"`; вторая «Итого» в `body`, предупреждения «ниже таблицы» нет.
|
||||
- [ ] **Step 6: `make check`** (сценарии s40–s43 ещё могут быть красными — отметить в ledger), **commit** «Строки-показатели: метка колонки «Показатели» при сборе строк (#58)».
|
||||
- [ ] **Step 6: `make check`** (сценарии s33–s36 ещё могут быть красными — отметить в ledger), **commit** «Строки-показатели: метка колонки «Показатели» при сборе строк (#58)».
|
||||
|
||||
---
|
||||
|
||||
@ -515,7 +515,7 @@ def levels_with_indicators(rows: Sequence[BodyRow], total_row: int | None, deadl
|
||||
```
|
||||
|
||||
`classify_rows(..., data_type, ...)`; после классификации, если `defaulted`, — `notes.append(OsvNote(OSV_HEADER, DEFAULT_DATA_TYPE_WARNING))` сразу после заметок шапки; константы в `osv.py`: `DEFAULT_DATA_TYPE: DataType = "BU"`, `DEFAULT_DATA_TYPE_WARNING = "вид данных в шапке не указан — строки без метки приняты как БУ"`. `header.data_type` (`_header(doc)`) не трогать.
|
||||
- [ ] **Step 3: Синтетика s40–s43 зелёная:** `ENV_FILE=.env.test .venv/bin/python -m pytest tests/synthetic -q`.
|
||||
- [ ] **Step 3: Синтетика s33–s36 зелёная:** `ENV_FILE=.env.test .venv/bin/python -m pytest tests/synthetic -q`.
|
||||
- [ ] **Step 4: `make check`, commit** «Классификация и проверки по признаку строки-показателя, BU по умолчанию (#58)».
|
||||
|
||||
---
|
||||
@ -523,11 +523,11 @@ def levels_with_indicators(rows: Sequence[BodyRow], total_row: int | None, deadl
|
||||
### Task 7: Регрессия, golden, файлы контура (модель: sonnet)
|
||||
|
||||
**Files:**
|
||||
- Modify: `$WT/fixtures/golden/expected_osv_parse/synthetic/s40…s43.json` (новые, `make golden-update`)
|
||||
- Modify: `$WT/fixtures/golden/expected_osv_parse/synthetic/s33…s36.json` (новые, `make golden-update`)
|
||||
|
||||
- [ ] **Step 1: `make golden-check`** из `$WT/tabular-parser`. Ожидание: diff только «нет снимка» для s40–s43. **Любой diff по реальным файлам или s01–s32 — стоп**: записать в ledger (файл, строки, что изменилось) и вернуть контроллеру; не перегенерировать.
|
||||
- [ ] **Step 2: `make golden-update`**, проверить `git -C $WT/fixtures status` — только четыре новых снимка; просмотреть их глазами (строки НУ/«В валюте» — показатели с верными родителями, две TOTAL в s40). Commit в fixtures «Golden s40–s43: колонка «Показатели», «В валюте» (#58)».
|
||||
- [ ] **Step 3: Покрытие словарей** — `ENV_FILE=.env.test .venv/bin/python -m pytest tests/fixtures/test_rules_coverage.py -q` зелёный (каждая новая запись срабатывает на s40–s42).
|
||||
- [ ] **Step 1: `make golden-check`** из `$WT/tabular-parser`. Ожидание: diff только «нет снимка» для s33–s36. **Любой diff по реальным файлам или s01–s32 — стоп**: записать в ledger (файл, строки, что изменилось) и вернуть контроллеру; не перегенерировать.
|
||||
- [ ] **Step 2: `make golden-update`**, проверить `git -C $WT/fixtures status` — только четыре новых снимка; просмотреть их глазами (строки НУ/«В валюте» — показатели с верными родителями, две TOTAL в s33). Commit в fixtures «Golden s33–s36: колонка «Показатели», «В валюте» (#58)».
|
||||
- [ ] **Step 3: Покрытие словарей** — `ENV_FILE=.env.test .venv/bin/python -m pytest tests/fixtures/test_rules_coverage.py -q` зелёный (каждая новая запись срабатывает на s33–s35).
|
||||
- [ ] **Step 4: Файлы контура (не в git).** `TMP=$(mktemp -d)`; извлечь из `/Users/andrey.epifancev/projects/awp-ca/result_dir.zip` файлы `files/3da66219-*.xlsx`, `files/86353387-*.xls` и все прочие файлы, где в заголовке таблицы есть «Показа» (найти перебором через `python -I`, без записи в репозитории), а также `files/270b41da-*.xlsx`, `files/738bfcf5-*.xlsx`. Для каждого: `cd $WT/tabular-parser/api && .venv/bin/python -m src.parser.cli "$TMP/<файл>"` на ветке и на `origin/main` (второй worktree не создавать: сравнить с выдачей `admin/1639-contour-run/parser-out/<id>*.json`, если она есть). Свести в ledger таблицу: файл, статус до/после, `parent_sum_violations` до/после, число строк NU/QUANTITY/CURRENCY, оборот Дт корня по BU. Ожидание по AURORA-1613: оборот по дебету БУ без удвоения. Для 270b41da/738bfcf5 (плоская форма, трек B) — только что строки «В валюте» стали CURRENCY; структура плоской формы — не цель этого плана. `rm -rf "$TMP"` в конце.
|
||||
- [ ] **Step 5:** если на файлах контура найден случай, который план не покрывает (новая метка, иная раскладка), — не чинить, записать находкой `O-n` в ledger и вернуть контроллеру.
|
||||
|
||||
@ -538,7 +538,7 @@ def levels_with_indicators(rows: Sequence[BodyRow], total_row: int | None, deadl
|
||||
**Files:**
|
||||
- Modify: `README.md` (раздел «Парсер ОСВ»: строки-показатели, колонка «Показатели», BU по умолчанию)
|
||||
- Modify: `openspec/changes/osv-indicator-column/tasks.md` (отметить выполненное)
|
||||
- Modify: `$WT/docs/context/06-test-data.md` (§7 синтетики: s40–s43 одной строкой каждый)
|
||||
- Modify: `$WT/docs/context/06-test-data.md` (§7 синтетики: s33–s36 одной строкой каждый)
|
||||
- Modify: `CLAUDE.md` tabular-parser (одна строка в «Модули»: `indicators.py` — строки-показатели)
|
||||
|
||||
- [ ] **Step 1:** README и CLAUDE.md — коротко, по образцу соседних абзацев; `06-test-data.md` — commit в docs (ветка `feat/58-osv-indicators`, там уже правка §1.3/§1.4).
|
||||
|
||||
@ -99,7 +99,7 @@ r31 (продолжение) | НУ | …
|
||||
| 19.10.2026 | Колонка «Показатели» остаётся в `extra` | Первичка не теряется, ядро `extra` хранит как есть | Дублирование метки в `extra` и `data_type` |
|
||||
| 19.10.2026 | Родитель показателя — предыдущая строка данных для всех показателей, включая «Вал.»/«Кол.» в колонке текста | Один механизм для колонки, «В валюте» и старых меток; каскад не видит строк, которые ломают дерево | Если показатель стоит не сразу под своей строкой, родитель будет неверным; ловит golden |
|
||||
| 19.10.2026 | Умолчание BU — только строкам без собственного вида; `header.data_type` остаётся `null` | Шапка действительно молчит; ядру нужен вид строки, не шапки | Предупреждение на листах без «Выводимые данные» (были без него) |
|
||||
| 19.10.2026 | Синтетика s40–s43 (s33–s39 оставлены треку B) | Параллельные треки не должны конфликтовать по именам файлов набора | Пропуск номеров в наборе |
|
||||
| 19.10.2026 | Синтетика s33–s36 (R-1: s40–s44 заняты треком B #59, s37–s39 резерв) | Рулинг владельца R-1: параллельные треки не конфликтуют по именам файлов набора | Пропуск номеров в наборе |
|
||||
| 19.10.2026 | Новый модуль `indicators.py` вместо правки `hierarchy.resolve_levels` | Трек B меняет каскад иерархии параллельно | Ещё один модуль конвейера |
|
||||
|
||||
Решения владельца 19.10.2026 (чат): п. 1 колонка «Показатели» как метки §1.3, НУ без своих проверок; п. 2 «В валюте» →
|
||||
|
||||
@ -35,7 +35,7 @@ AURORA-1534 показали два дефекта одного механизм
|
||||
остаётся `null` (шапка его не называет).
|
||||
- «Валюта <код>» — обычная строка (OTHER, рубли): поведение не меняется, закрепляется тестом.
|
||||
- §1.3/§1.4 `05-domain-rules.md` — отдельным PR в arm-ka-docs (ветка `feat/58-osv-indicators`).
|
||||
- Синтетика s40–s43 и golden — PR в arm-ka-fixtures.
|
||||
- Синтетика 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,
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
`indicator_column_untyped`, `row: «В валюте»`; `src/parser/rules.py` — поля `DataTypeRules`; тесты `test_rules.py`
|
||||
|
||||
## 2. Синтетика
|
||||
- [ ] 2.1 `tests/synthetic/generate.py` — s40–s43 (`_grid_osv`); `tests/synthetic/test_synthetic_files.py` — ожидания
|
||||
- [ ] 2.1 `tests/synthetic/generate.py` — s33–s36 (`_grid_osv`); `tests/synthetic/test_synthetic_files.py` — ожидания
|
||||
и сценарии (сначала красные); файлы в `../fixtures/osv/synthetic/`
|
||||
|
||||
## 3. Колонка «Показатели» в заголовке
|
||||
@ -26,7 +26,7 @@
|
||||
|
||||
## 7. Регрессия и реальные файлы
|
||||
- [ ] 7.1 Синтетика зелёная; `make golden-check` — снимки реальных файлов и s01–s32 без изменений; `make golden-update`
|
||||
только для s40–s43; локальная сверка файлов контура (не в git)
|
||||
только для s33–s36; локальная сверка файлов контура (не в git)
|
||||
|
||||
## 8. Документация и проверки
|
||||
- [ ] 8.1 README (раздел «Парсер ОСВ»), `../docs/context/06-test-data.md` §7 (s40–s43), `make check-full`
|
||||
- [ ] 8.1 README (раздел «Парсер ОСВ»), `../docs/context/06-test-data.md` §7 (s33–s36), `make check-full`
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user