ОСВ: имена частей xlsx без учёта регистра, «Кол-во, <единица>» и «Кол. доп.» (#66, AURORA-1707, AURORA-1709) #67

Merged
aep merged 3 commits from feat/66-osv-quantity-sharedstrings into main 2026-10-20 12:09:06 +03:00
Owner

Closes #66. Jira: AURORA-1707, AURORA-1709. Документация: arm-ka-docs, ветка feat/66-osv-quantity-sharedstrings-docs (05-domain-rules §1).

Что сделано

  • AURORA-1707 (readers/xlsx.py): перед openpyxl собираются имена частей из [Content_Types].xml (Override PartName) и *.rels (Target внутренних связей). Если часть архива отличается от ссылки только регистром, книга пересобирается в памяти (без сжатия) с именами из ссылок. Обычные книги не пересобираются. Попутно выяснилось, что лист с именем в другом регистре (Sheet1.xml при ссылке на sheet1.xml) openpyxl терял молча: исправлено тем же механизмом и покрыто тестом.
  • AURORA-1709 (rules/data_types.yaml, без кода): row — «Кол-во, га», «Количество, шт.» → QUANTITY; indicator_column — «Кол. доп.» → QUANTITY.
  • Спека osv-parsing (требование «Форматы, лимиты, время» + сценарий; метки показателей), README сервиса и rules/README.md.

Проверка

  • TDD: тесты падали до исправления (KeyError … sharedStrings.xml; потеря листа; метки → None).
  • Реальные файлы выгрузки контура 20.10.2026 (в репозиторий не добавлены), main → ветка:
    • 6 xlsx ГК Крамаренко К10 (ОСВ 60/62/76 АПР и ПК НКС): error UNREADABLE → done;
    • ОСВ сч. 43 Хреновская Нива: needs_check → done («Кол-во, га/кг/ч/тн» — 9 строк QUANTITY);
    • ОСВ сч. 11 (Золотая Нива, Гончаровское, Чесменский): «Кол. доп.» QUANTITY, предупреждений 589/144/2131 → 3/3/3; контрагент «КОЛОС ООО» количеством не стал.
  • make check-full зелёный (3042 + 10 интеграционных, образ собирается); golden не изменились.

Rulings I made

  • R-1: две части архива под одну ссылку (различаются только регистром) не угадываются — книга читается как раньше (openpyxl сообщит об ошибке).
  • R-2: предупреждение о переименовании частей не добавляется: Excel открывает такие файлы молча, исправлять пользователю нечего.
  • R-3: bounded без OpenSpec change — спека osv-parsing поправлена прямо в PR (как в #47/#48).
  • R-4: реальные файлы в fixtures не добавлены — синтетика в unit-тестах, проверка на выгрузке вручную.

Findings

Маркер Суть Статус
O-1 Регистр имён самих *.rels и [Content_Types].xml не нормализуется rejected: в выгрузках не встречалось; openpyxl ищет их по вычисленному имени

🤖 Generated with Claude Code

Closes #66. Jira: AURORA-1707, AURORA-1709. Документация: arm-ka-docs, ветка `feat/66-osv-quantity-sharedstrings-docs` (05-domain-rules §1). ## Что сделано - **AURORA-1707** (`readers/xlsx.py`): перед openpyxl собираются имена частей из `[Content_Types].xml` (`Override PartName`) и `*.rels` (`Target` внутренних связей). Если часть архива отличается от ссылки только регистром, книга пересобирается в памяти (без сжатия) с именами из ссылок. Обычные книги не пересобираются. Попутно выяснилось, что лист с именем в другом регистре (`Sheet1.xml` при ссылке на `sheet1.xml`) openpyxl **терял молча**: исправлено тем же механизмом и покрыто тестом. - **AURORA-1709** (`rules/data_types.yaml`, без кода): `row` — «Кол-во, га», «Количество, шт.» → QUANTITY; `indicator_column` — «Кол. доп.» → QUANTITY. - Спека `osv-parsing` (требование «Форматы, лимиты, время» + сценарий; метки показателей), README сервиса и `rules/README.md`. ## Проверка - TDD: тесты падали до исправления (`KeyError … sharedStrings.xml`; потеря листа; метки → `None`). - Реальные файлы выгрузки контура 20.10.2026 (в репозиторий не добавлены), main → ветка: - 6 xlsx ГК Крамаренко К10 (ОСВ 60/62/76 АПР и ПК НКС): `error UNREADABLE` → `done`; - ОСВ сч. 43 Хреновская Нива: `needs_check` → `done` («Кол-во, га/кг/ч/тн» — 9 строк QUANTITY); - ОСВ сч. 11 (Золотая Нива, Гончаровское, Чесменский): «Кол. доп.» QUANTITY, предупреждений 589/144/2131 → 3/3/3; контрагент «КОЛОС ООО» количеством не стал. - `make check-full` зелёный (3042 + 10 интеграционных, образ собирается); golden не изменились. ## Rulings I made - R-1: две части архива под одну ссылку (различаются только регистром) не угадываются — книга читается как раньше (openpyxl сообщит об ошибке). - R-2: предупреждение о переименовании частей не добавляется: Excel открывает такие файлы молча, исправлять пользователю нечего. - R-3: bounded без OpenSpec change — спека `osv-parsing` поправлена прямо в PR (как в #47/#48). - R-4: реальные файлы в fixtures не добавлены — синтетика в unit-тестах, проверка на выгрузке вручную. ## Findings | Маркер | Суть | Статус | |---|---|---| | O-1 | Регистр имён самих `*.rels` и `[Content_Types].xml` не нормализуется | rejected: в выгрузках не встречалось; openpyxl ищет их по вычисленному имени | 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 3 commits 2026-10-20 12:07:00 +03:00
Часть, отличающаяся от ссылки [Content_Types].xml или *.rels только регистром
(xl/SharedStrings.xml при ссылке на sharedStrings.xml), до openpyxl
переименовывается по ссылке: раньше такая книга была UNREADABLE, а лист с
другим регистром имени openpyxl терял молча. Две части под одну ссылку не
угадываются.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Словарь data_types.yaml: row допускает единицу измерения после запятой
(«Кол-во, га» в ОСВ 43.1), indicator_column — «Кол. доп.» в колонке
«Показатели» (сч. 11). Код не меняется.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep merged commit 6c81199a1a into main 2026-10-20 12:09:06 +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-tabular-parser#67
No description provided.