После merge test (ESLint + Prettier, #30): npm run format и правки,
без которых make check и синхронизация arm-core/web не проходят.
- Список ЮЛ: тип ответа — страница Page<ICatalogueJur> (items/total),
thunk с rejectValue: string, как в companyGroupsSlice.
- Склонения «организация/запись» — общая функция pluralRu в utils/labels
(с тестом) вместо вложенных тернарников; заодно верно для 11–14, 21–24.
- Список ГК: пункт — <button> вместо div с onClick (a11y), пустое
состояние и загрузка — без вложенного тернарника.
- Убраны лишние async, неиспользуемые импорты и проп companyId,
any в колонке «Основной РФ».
make check: tsc 0, biome 7 предупреждений (как на test), eslint 0 ошибок,
vitest 141/141, build ок.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ИНН-ячейка строк без сопоставления подсвечена, ссылка «Указать» рядом с ИНН из файла [32-osv-no-inn].
- Модалка «Выбор организации для связи с …» [32-osv-map-counterparty]: поиск с паузой 300 мс,
scope group / весь справочник (от 3 символов), блок «Рекомендуемые», «Связать».
- POST …/osv/entries/{последняя entry_id}/counterparty; 409 ALIAS_TAKEN → перенос алиаса (move_alias),
LOCK_REQUIRED → «Взять версию в работу?» → POST …/lock → повтор, LOCKED_BY_OTHER → имя держателя.
- После успеха перечитываются строки и сводка («Осталось N»).
- Чистые функции counterpartyMapping.ts + тесты; спека consolidated-osv-ui.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
- [39] таблица документов: формат, период, проверка Период/Контрагент, статус плашкой; шапка с ЮЛ и ИНН
- [30] шапка «ГК — год Кn» со статусом, вкладки (только ОСВ), баннер «Осталось N» с фильтром
несопоставленных, колонки и двухуровневые заголовки макета, фильтры в заголовках, «—» для нуля
- [41] карточки «Исходный документ» / «Результат распознавания», режим просмотра и «Редактировать»,
форма как бумажный документ, суммы без копеек
- [34] Дата создания, Дата верификации (—, в API нет), ГСК (—, П-3), квартал «К3»
- [03] Основной РФ — название филиала, а не UUID
- логотип АРМ КА, заголовок вкладки, «Отчётность»; [42] члены ГСК наверху списка
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
GET /directories/company-groups возвращает Page[CompanyGroupOut], но раньше типизировался как ICompanyGroup[].
Реализована пагинация: fetchCompanyGroups теперь читает все страницы по 200 и возвращает полный массив ICompanyGroup[].
Это позволяет thunk/slice получать честный массив с правильным total_groups = payload.length.
Исправлено:
- fetchCompanyGroups: async функция с циклом по total (как fetchAllLegalEntities)
- types.ts / companyGroupsSlice.ts / thunks.ts: типы честные (без приведений)
- потребители (NewConsoleModal, CompanyGroupsTable, Sidebar): используют raw_rows как массив
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
Удалены экраны и моки старого АРМ (FileViewer, FilesList, FileUploaderModel,
PDFResultViewer, mocks.ts), рендер PDF перенесён в widgets/DocumentReview/PdfPages.tsx.
Подключён vitest (npm test, make test, в make check). Исправлены все ошибки tsc и biome:
типизированы ответы api.get, слайсы и thunks, убраны console.log и пустые catch.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3