diff --git a/openspec/changes/checklist-documents-filter/.openspec.yaml b/openspec/changes/archive/2026-11-10-checklist-documents-filter/.openspec.yaml similarity index 100% rename from openspec/changes/checklist-documents-filter/.openspec.yaml rename to openspec/changes/archive/2026-11-10-checklist-documents-filter/.openspec.yaml diff --git a/openspec/changes/checklist-documents-filter/design.md b/openspec/changes/archive/2026-11-10-checklist-documents-filter/design.md similarity index 100% rename from openspec/changes/checklist-documents-filter/design.md rename to openspec/changes/archive/2026-11-10-checklist-documents-filter/design.md diff --git a/openspec/changes/checklist-documents-filter/proposal.md b/openspec/changes/archive/2026-11-10-checklist-documents-filter/proposal.md similarity index 100% rename from openspec/changes/checklist-documents-filter/proposal.md rename to openspec/changes/archive/2026-11-10-checklist-documents-filter/proposal.md diff --git a/openspec/changes/checklist-documents-filter/specs/consolidations-api/spec.md b/openspec/changes/archive/2026-11-10-checklist-documents-filter/specs/consolidations-api/spec.md similarity index 100% rename from openspec/changes/checklist-documents-filter/specs/consolidations-api/spec.md rename to openspec/changes/archive/2026-11-10-checklist-documents-filter/specs/consolidations-api/spec.md diff --git a/openspec/changes/checklist-documents-filter/specs/consolidations-ui/spec.md b/openspec/changes/archive/2026-11-10-checklist-documents-filter/specs/consolidations-ui/spec.md similarity index 100% rename from openspec/changes/checklist-documents-filter/specs/consolidations-ui/spec.md rename to openspec/changes/archive/2026-11-10-checklist-documents-filter/specs/consolidations-ui/spec.md diff --git a/openspec/changes/checklist-documents-filter/tasks.md b/openspec/changes/archive/2026-11-10-checklist-documents-filter/tasks.md similarity index 100% rename from openspec/changes/checklist-documents-filter/tasks.md rename to openspec/changes/archive/2026-11-10-checklist-documents-filter/tasks.md diff --git a/openspec/specs/consolidations-api/spec.md b/openspec/specs/consolidations-api/spec.md index a6633a4..174328e 100644 --- a/openspec/specs/consolidations-api/spec.md +++ b/openspec/specs/consolidations-api/spec.md @@ -198,6 +198,11 @@ account, status, missing_quarters, document_ids}`: `document_type` и `account` `CONFIRMED` «Загружен», `PROCESSING` «Обработка», `NEEDS_CHECK`/`RECOGNIZED` «Требуется проверка», `ERROR` «Ошибка загрузки», `MISSING` «Отсутствует» (с « (нет: Q1, Q2)» при `missing_quarters`); `Content-Disposition` — `attachment` с именем `checklist-<ГК>-<год>-<квартал>.csv` в RFC 5987. +Параметр `documents` (JSON и CSV) SHALL отбирать столбцы: список через запятую из `BALANCE`, `INCOME` и `OSV:<счёт>`; +в ответе остаются только названные правила (в порядке `rules`) и их ячейки у каждого ЮЛ, ЮЛ периметра не отбираются; +документ, которого нет в правилах подхода версии, столбца не добавляет. Без `documents` — все правила. Пустой список, +пустой токен, неизвестный документ и `OSV` без счёта SHALL давать 422 `INVALID_DOCUMENTS` (`detail.token`), значение +длиннее 500 символов — 422 валидации; проверка — до обращения к БД. #### Scenario: Пробел Q2 - **WHEN** у ЮЛ привязаны квартальные ОСВ 60 за Q1 и Q3 2024, версия за 2024 Q3 @@ -232,6 +237,19 @@ account, status, missing_quarters, document_ids}`: `document_type` и `account` - **WHEN** запрошен чек-лист версии с `format=csv`, у ЮЛ подтверждён ББ, ОСВ 60 отсутствует за Q2 - **THEN** файл начинается с BOM, первая строка — «Организация;ИНН;Бух. баланс;ОФР;ОСВ 60…», в строке ЮЛ — «Загружен» и «Отсутствует (нет: Q2)» +#### Scenario: CSV по выбранным документам +- **WHEN** запрошен чек-лист версии с `format=csv&documents=OSV:60,BALANCE,OSV:99`, у ЮЛ «А» подтверждена ОСВ 60 +- **THEN** заголовок — «Организация;ИНН;Бух. баланс;ОСВ 60», строки обоих ЮЛ периметра с двумя ячейками, у «А» — + «Отсутствует;Загружен» + +#### Scenario: JSON по выбранным документам +- **WHEN** запрошен чек-лист версии с `documents=INCOME,OSV:60` +- **THEN** `rules` — ОФР и ОСВ 60, у каждой строки две ячейки тех же правил + +#### Scenario: Неизвестный документ +- **WHEN** запрошен чек-лист с `documents=OFR` (или пустым, `OSV:`, `BALANCE,,INCOME`) +- **THEN** 422 `INVALID_DOCUMENTS`, файл не отдаётся + ### Requirement: Границы входных данных Входы консолидаций SHALL иметь верхние границы: `legal_entity_ids` тела `PUT …/members` и тела `POST /consolidations` — не больше 500 идентификаторов, `comment` тела `POST …/status` — не больше 1000 символов, `q` фильтров `GET …/osv` и diff --git a/openspec/specs/consolidations-ui/spec.md b/openspec/specs/consolidations-ui/spec.md index 8b7f26b..5772bad 100644 --- a/openspec/specs/consolidations-ui/spec.md +++ b/openspec/specs/consolidations-ui/spec.md @@ -293,3 +293,22 @@ SHALL быть неактивной с подсказкой «Возьмите #### Scenario: Показать пары - **WHEN** в модалке нажато «Показать пары» - **THEN** вкладка «ОСВ» остаётся, открыт режим «Встречные записи» с первой парой + +### Requirement: Окно «Чек-лист загруженных документов» +Кнопка «Скачать чек-лист» панели «Организации» SHALL открывать окно «Чек-лист загруженных документов» (макет [37]): +фильтр «Документы», легенда статусов и матрица «Организация» × «Бух. баланс», «ОФР», «ОСВ» по счетам правил версии. +Фильтр «Документы» — селект с подписью сверху, как фильтры отчётности: в списке пункт «Все документы» и по пункту на +столбец матрицы с флажками; в поле — «Все документы», «Документы не выбраны» или «N документ(а/ов)». При открытии +отмечены все документы. Матрица SHALL показывать только отмеченные столбцы (колонка «Организация» — всегда; группа «ОСВ» +без отмеченных счетов не показывается). «Скачать» SHALL выгружать CSV с теми же документами (`documents` запроса +`GET …/checklist?format=csv`; при всех отмеченных — без параметра) и неактивна, пока не отмечен ни один документ. +Фильтра «Группа компаний» из макета нет: окно открывается внутри версии одной ГК. + +#### Scenario: Выбраны два документа +- **WHEN** в фильтре «Документы» отмечены только «ОФР» и «ОСВ 01» +- **THEN** в поле «2 документа», в матрице колонки «Организация», «ОФР» и «ОСВ» → «01»; «Скачать» выгружает CSV с + `documents=INCOME,OSV:01` + +#### Scenario: Сняты все документы +- **WHEN** на «Все документы» нажали при всех отмеченных +- **THEN** в поле «Документы не выбраны», в матрице только «Организация», «Скачать» неактивна