diff --git a/openspec/changes/counter-pairs/design.md b/openspec/changes/counter-pairs/design.md index 9763fd0..cb701cd 100644 --- a/openspec/changes/counter-pairs/design.md +++ b/openspec/changes/counter-pairs/design.md @@ -46,7 +46,7 @@ - `useConsolidatedOsv` / `ConsolidatedOsvContent`: режим из `?view=pairs` (`useSearchParams`, `replace`). - Новый виджет `widgets/ConsolidatedOsv/CounterPairs*.tsx`: список пар + две таблицы (antd `Table`), колонки — счёт, контрагент, обороты Дт/Кт, сальдо на конец Дт/Кт; суммы — через существующий `useNumberDisplay` (единицы и знаки - из шапки). Правая таблица — постранично, `OSV_PAGE_SIZE`, «Указать» → `CounterpartyMapModal` (существующая). + из шапки). Вторая (нижняя) таблица — постранично, `OSV_PAGE_SIZE`, «Указать» → `CounterpartyMapModal` (существующая). - `ConsolidationReportPage` / `OsvTabs`: вместо `unmappedTotal` получают сводку (пары и `unmapped_total`); правило показа модалки — чистая функция в `utils/consolidations.ts` (`counterPairsKey(pairs)`, `shouldWarnCounterPairs(versionId, status, pairs, storage)`), с тестами vitest. Ключ `sessionStorage` — `armka:counter-pairs:`, значение — ключ списка @@ -68,7 +68,7 @@ ## Что оставлено исполнителю -Раскладка трёх колонок и ширины, тексты пустых состояний в пределах спеки, имена компонентов, вынос общих колонок сумм +Раскладка (пары сверху, две таблицы на всю ширину) и ширины, тексты пустых состояний в пределах спеки, имена компонентов, вынос общих колонок сумм между сводом и новым режимом. ## Риски @@ -94,6 +94,6 @@ | 27.10.2026 | R-3 (design #11): отдельное ревью Task 6 не проводится — её diff в arm-core (одна фраза в CLAUDE.md) и docs-PR #176 проверяются финальным ревью всей ветки | Задача не содержит кода; отдельный ревьюер дублировал бы финальный | Низкая | | 27.10.2026 | R-4 (design #12): подпись под парой в списке — «записей: N · без ИНН у <Б>: M» вместо служебных «держатель»/«Б» | Аналитик не знает ролей «держатель» и «Б»; название организации понятнее | Низкая | | 27.10.2026 | R-5 (design #13): раскладка режима «Встречные записи» — пары одной строкой «таблеток» с переносом, под ними две таблицы на всю ширину одна под другой (вместо трёх колонок) | В трёх колонках таблицам не хватало ширины: суммы обрезались, видны были только «Обороты Дт» (находка H-1) | Низкая | -| 27.10.2026 | R-6 (design #14): уход с «ОСВ» — закрытая версия (FINISHED_STATUSES) переходит без запроса сводки; при `summary = null` запрашивается сводка, при ошибке запроса переход идёт без модалки и без своего сообщения; на время догрузки переключатель вкладок блокируется; выбранная пара хранится в адресе и в режиме «Свод» (`?holder=&missing=` без `view`) | Модалка нужна только открытой версии; ошибку сводки показывает общий слой; блокировка исключает двойные клики; адрес — единственное хранилище состояния режима | Низкая | +| 27.10.2026 | R-6 (design #14): уход с «ОСВ» (продолжение: пока сводки режима нет — Spin и подпись «Встречные записи» без «(N)»; ошибка запроса сводки — Alert с «Повторить»; сводка, догруженная при уходе, не кешируется и живёт только на время модалки) — закрытая версия (FINISHED_STATUSES) переходит без запроса сводки; при `summary = null` запрашивается сводка, при ошибке запроса переход идёт без модалки и без своего сообщения; на время догрузки переключатель вкладок блокируется; выбранная пара хранится в адресе и в режиме «Свод» (`?holder=&missing=` без `view`) | Модалка нужна только открытой версии; ошибку сводки показывает общий слой; блокировка исключает двойные клики; адрес — единственное хранилище состояния режима | Низкая | Отложено решением владельца 27.10.2026: строки Б с ИНН вне справочника — AURORA-1866 (разбор); подсветка кандидата по сумме — AURORA-1867. diff --git a/openspec/changes/counter-pairs/proposal.md b/openspec/changes/counter-pairs/proposal.md index 33d0822..e276775 100644 --- a/openspec/changes/counter-pairs/proposal.md +++ b/openspec/changes/counter-pairs/proposal.md @@ -40,7 +40,7 @@ AURORA-1746 и замечание заказчика (Циликов А.В., 23. - Сверка по счетам и суммам внутри пары — это делает шахматка (§6). - Поиск участника, ошибочно сопоставленного с другим ЮЛ: во второй (нижней) таблице показываются только несопоставленные строки без ИНН. - Строки Б с ИНН из файла, которого нет в справочнике (старый ИНН, опечатка): по решению 08.10.2026 они не требуют - сопоставления, в правую таблицу не попадают, и такая пара из режима не закрывается. Оставлено как есть (решение + сопоставления, во вторую (нижнюю) таблицу не попадают, и такая пара из режима не закрывается. Оставлено как есть (решение владельца 27.10.2026), разбор — отдельная задача Jira; модалка и пустое состояние называют эту причину. ## Capabilities diff --git a/openspec/changes/counter-pairs/specs/consolidated-osv-ui/spec.md b/openspec/changes/counter-pairs/specs/consolidated-osv-ui/spec.md index 6d69a71..69cfd5d 100644 --- a/openspec/changes/counter-pairs/specs/consolidated-osv-ui/spec.md +++ b/openspec/changes/counter-pairs/specs/consolidated-osv-ui/spec.md @@ -26,11 +26,17 @@ - **вторая таблица** — «У <Б> — строки без ИНН и без сопоставления»: строки `GET …/osv?legal_entity_id=Б&unmapped=true` — счёт, контрагент, обороты Дт/Кт, сальдо на конец Дт/Кт и «Указать» в каждой строке; над таблицей — поиск по контрагенту (`q`, ≤ 500 символов, как фильтр свода); постранично, как таблица свода. Все четыре колонки - сумм MUST быть видны без горизонтальной прокрутки при ширине окна 1440 px. Если + сумм MUST быть видны без горизонтальной прокрутки при ширине окна 1440 px (на узком окне допустима прокрутка таблицы). Если `missing_rows_total = 0` — вместо таблицы текст «У <Б> в своде нет строк: ОСВ не привязаны или по ним пробелы»; если строки у Б есть, а без ИНН и без сопоставления нет (`missing_unmapped_rows = 0`) — текст «Строк без ИНН нет: возможно, ИНН контрагента из файла не найден в справочнике или это пропуск в учёте». +Обе таблицы и список пар MUST оставаться внутри белой карточки экрана: тело режима прокручивается по вертикали внутри +карточки, а не выходит за её границу. + +Пока сводки нет, вместо тела режима показывается индикатор загрузки, а подпись переключателя — «Встречные записи» без «(N)». +Если запрос сводки не удался, показывается ошибка с кнопкой «Повторить», повторяющей запрос. + «Указать» SHALL открывать модалку сопоставления из требования «Ручное сопоставление контрагента» с теми же ответами и ошибками; после «Связать» экран SHALL перечитывать сводку и обе таблицы. Если выбранная пара исчезла из списка, выбирается первая оставшаяся; пустой список — текст «Все участники периметра видят друг друга» (переключатель — «Встречные записи (0)»). @@ -46,6 +52,14 @@ - **THEN** после «Связать» список пар пуст, показан текст «Все участники периметра видят друг друга», переключатель — «Встречные записи (0)» +#### Scenario: Сводка ещё не получена +- **WHEN** открыт режим «Встречные записи», запрос сводки в пути +- **THEN** показан индикатор загрузки, подпись переключателя — «Встречные записи» без числа + +#### Scenario: Ошибка запроса сводки +- **WHEN** запрос сводки в режиме «Встречные записи» завершился ошибкой +- **THEN** показан Alert с текстом ошибки и кнопкой «Повторить»; нажатие повторяет запрос + #### Scenario: Режим из адреса - **WHEN** открыт адрес `…/versions/{id}/osv?view=pairs` - **THEN** показан режим «Встречные записи» с первой парой; кнопка «Назад» браузера не проходит по переключениям режимов