Сводная ОСВ: ячейка ИНН по макету — «Указать» только без ИНН, пересопоставление (#17) #18

Merged
aep merged 1 commits from feat/17-osv-inn-cell into test 2026-10-08 22:02:25 +03:00
Owner

Closes #17. Закрывает D-1 из #16.

Сливать после RSHB/arm-core#75: фронт считает «Указать» по новой семантике и читает counterparty_entity_inn. Со старым бэкендом строки с ИНН без ЮЛ останутся в «Осталось N», но «Указать» у них не будет, а у связанных без ИНН «таблетка» покажет «Изменить» вместо ИНН.

Что изменилось на экране (простыми словами)

  • Есть ИНН в файле — в ячейке просто ИНН. Кнопки «Указать» больше нет, даже если такой организации нет в справочнике (решение владельца: отмена П-1).
  • Строка связана с организацией, а ИНН в файле не было (система нашла по имени или алиасу) — в ячейке серая «таблетка» с ИНН этой организации из справочника. По клику открывается то же окно выбора, у текущей организации вместо «Связать» — неактивное «Связано». Так можно исправить ошибочное автосопоставление.
  • Нет ни связи, ни ИНН — подсвеченная ячейка и «Указать», как раньше.
  • Колонка ИНН — моноширинный шрифт по центру, ширина 140; у неё появилась воронка фильтра «Только без ИНН и без связи с ЮЛ» (тот же фильтр, что у кнопки в баннере), подсвечена, пока фильтр включён.
  • Баннер «Требуется указать соответствия» и кнопка «Показать ЮЛ без ИНН» — в цветах макета (жёлтый блок, белая кнопка с оранжевой рамкой).

Как устроено (для ревью)

  • counterpartyMapping.ts: needsMapping повторяет серверное правило (нет counterparty_id и нет ИНН без пробелов); новая чистая функция innCell(row) решает, что показать в ячейке: inn / mapped / required. Покрыта vitest.
  • OsvTable.tsx: InnCell рисует три вида; стили — из классов макета osv-table__inn-cell(--required), osv-inn-link-button, osv-inn-mapped-button.
  • CounterpartyMapModal.tsx: у кандидата, совпавшего с текущим counterparty_id, — «Связано».
  • types/api.ts: поле counterparty_entity_inn.

Rulings I made

  • R-1 Строка сопоставлена и ИНН в файле есть — показываем ИНН из файла (первичка), а не ИНН ЮЛ справочника; в макете при совпадении они одинаковы.
  • R-2 Ширина колонки ИНН 140 вместо макетных 128: «таблетка» с 12-значным ИНН ИП не помещается в 128.
  • R-3 Кнопка баннера по-прежнему переключает фильтр («Показать ЮЛ без ИНН» ↔ «Показать все строки»): в макете фильтр снимается кнопкой «Сбросить фильтры» в панели над таблицей, а панель владелец отложил.
  • R-4 Если сервер не прислал counterparty_entity_inn (старый бэкенд), «таблетка» показывает «Изменить».
  • R-5 Активная воронка ИНН — зелёная, как у остальных колонок, а не жёлтая подложка макета.

Сверка с макетом (Playwright, 1600×1000, стенд РБ 2025 К1, arm-core из ветки #75)

  • [30] все строки: строки с ИНН — ИНН без «Указать» ✔
  • [32-osv-no-inn] «Показать ЮЛ без ИНН»: «Строк: 1291» = «Осталось: 1291» (было 1371), в ячейках только «Указать» ✔
  • строки «Юг-Финанс / ПЕКАРНЯ СЧАСТЛИВОЧНАЯ» (ALIAS): «таблетка» 3528104476 ✔; клик — модалка, у «ПЕКАРНЯ СЧАСТЛИВОЧНАЯ, ООО» — «Связано» ✔
  • «Связать» не нажимался — данные демо не менялись.
  • Остаются расхождения вне объёма: панель над таблицей (единицы, знаки, настройка, на весь экран, «Сбросить фильтры») — решение владельца «не сейчас».

Проверки (make check)

biome — Checked 132 files, no fixes; tsc --noEmit — чисто; vitest — 119 passed; rsbuild build — ок.

Связано: RSHB/arm-core#75, RSHB/arm-ka-docs#72.

🤖 Generated with Claude Code

https://claude.ai/code/session_019qoydUVv8g1qHxc123u2RR

Closes #17. Закрывает D-1 из #16. **Сливать после RSHB/arm-core#75**: фронт считает «Указать» по новой семантике и читает `counterparty_entity_inn`. Со старым бэкендом строки с ИНН без ЮЛ останутся в «Осталось N», но «Указать» у них не будет, а у связанных без ИНН «таблетка» покажет «Изменить» вместо ИНН. ## Что изменилось на экране (простыми словами) - **Есть ИНН в файле** — в ячейке просто ИНН. Кнопки «Указать» больше нет, даже если такой организации нет в справочнике (решение владельца: отмена П-1). - **Строка связана с организацией, а ИНН в файле не было** (система нашла по имени или алиасу) — в ячейке серая «таблетка» с ИНН этой организации из справочника. По клику открывается то же окно выбора, у текущей организации вместо «Связать» — неактивное «Связано». Так можно исправить ошибочное автосопоставление. - **Нет ни связи, ни ИНН** — подсвеченная ячейка и «Указать», как раньше. - Колонка ИНН — моноширинный шрифт по центру, ширина 140; у неё появилась воронка фильтра «Только без ИНН и без связи с ЮЛ» (тот же фильтр, что у кнопки в баннере), подсвечена, пока фильтр включён. - Баннер «Требуется указать соответствия» и кнопка «Показать ЮЛ без ИНН» — в цветах макета (жёлтый блок, белая кнопка с оранжевой рамкой). ## Как устроено (для ревью) - `counterpartyMapping.ts`: `needsMapping` повторяет серверное правило (нет `counterparty_id` и нет ИНН без пробелов); новая чистая функция `innCell(row)` решает, что показать в ячейке: `inn` / `mapped` / `required`. Покрыта vitest. - `OsvTable.tsx`: `InnCell` рисует три вида; стили — из классов макета `osv-table__inn-cell(--required)`, `osv-inn-link-button`, `osv-inn-mapped-button`. - `CounterpartyMapModal.tsx`: у кандидата, совпавшего с текущим `counterparty_id`, — «Связано». - `types/api.ts`: поле `counterparty_entity_inn`. ## Rulings I made - **R-1** Строка сопоставлена **и** ИНН в файле есть — показываем ИНН из файла (первичка), а не ИНН ЮЛ справочника; в макете при совпадении они одинаковы. - **R-2** Ширина колонки ИНН 140 вместо макетных 128: «таблетка» с 12-значным ИНН ИП не помещается в 128. - **R-3** Кнопка баннера по-прежнему переключает фильтр («Показать ЮЛ без ИНН» ↔ «Показать все строки»): в макете фильтр снимается кнопкой «Сбросить фильтры» в панели над таблицей, а панель владелец отложил. - **R-4** Если сервер не прислал `counterparty_entity_inn` (старый бэкенд), «таблетка» показывает «Изменить». - **R-5** Активная воронка ИНН — зелёная, как у остальных колонок, а не жёлтая подложка макета. ## Сверка с макетом (Playwright, 1600×1000, стенд РБ 2025 К1, arm-core из ветки #75) - [30] все строки: строки с ИНН — ИНН без «Указать» ✔ - [32-osv-no-inn] «Показать ЮЛ без ИНН»: «Строк: 1291» = «Осталось: 1291» (было 1371), в ячейках только «Указать» ✔ - строки «Юг-Финанс / ПЕКАРНЯ СЧАСТЛИВОЧНАЯ» (ALIAS): «таблетка» 3528104476 ✔; клик — модалка, у «ПЕКАРНЯ СЧАСТЛИВОЧНАЯ, ООО» — «Связано» ✔ - «Связать» не нажимался — данные демо не менялись. - Остаются расхождения вне объёма: панель над таблицей (единицы, знаки, настройка, на весь экран, «Сбросить фильтры») — решение владельца «не сейчас». ## Проверки (`make check`) biome — Checked 132 files, no fixes; `tsc --noEmit` — чисто; vitest — 119 passed; `rsbuild build` — ок. Связано: RSHB/arm-core#75, RSHB/arm-ka-docs#72. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_019qoydUVv8g1qHxc123u2RR
aep added 1 commit 2026-10-08 18:59:46 +03:00
Решения владельца 08.10.2026 (arm-core #74, отмена П-1):
- ИНН из файла — просто текстом, без «Указать», даже если ЮЛ не найдено;
- строка сопоставлена без ИНН в файле — «таблетка» с `counterparty_entity_inn`, клик открывает выбор организации,
  у текущего ЮЛ — неактивное «Связано» (закрывает D-1 из #16);
- нет ни ЮЛ, ни ИНН — «Указать» на подсвеченной ячейке.
Колонка ИНН — моноширинный шрифт по центру, воронка фильтра `unmapped`; баннер и кнопка «Показать ЮЛ без ИНН» —
цвета `osv-mapping-alert` макета. Спека consolidated-osv-ui и README (1381 → 1260) обновлены.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019qoydUVv8g1qHxc123u2RR
aep merged commit e3a24a4fe1 into test 2026-10-08 22:02:25 +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-web#18
No description provided.