79 Commits

Author SHA1 Message Date
a63701c8b2 added consolidation chess table 2026-10-19 17:09:17 +03:00
681697f728 fixed eslint bugs 2026-10-19 09:44:27 +03:00
e751c63c32 Merge branch 'feat/legalEntities' of https://git.aepif.ru/RSHB/arm-web into feat/legalEntities 2026-10-19 09:33:32 +03:00
25d2211ae6 fixed bugs 2026-10-19 09:33:27 +03:00
Andrey Epifancev
b1b9d219a4 Merge origin/test в feat/legalEntities (#31)
Конфликт в utils/labels: оставлены обе стороны — pluralRu ветки и
lineStatusLabel/severityLabel из test (контракт 2.0). make check зелёный:
eslint 0 ошибок (18 предупреждений, как до слияния), vitest 324/324, build ок.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 10:28:29 +04:00
Andrey Epifancev
4fb477d5c2 Подпись пустой цели «цель не заполнена», тесты null/null (ревью I-1, M-1, M-2, M-4)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 22:55:42 +04:00
Andrey Epifancev
cb36ec8840 Нарушения проверок: expected/actual и индекс колонки могут быть null (#45)
Типы FailedCheckOut по API ядра (P3-30, P3-60); подпись «нет строки цели», «Без колонки» для -1/null; общий ключ списка.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 22:52:29 +04:00
Andrey Epifancev
88a4920d7d fix(arm-web): нераспознанный текст суммы, пустые подстроки без расшифровок, свёрнутый список предупреждений (#43)
T11.5 valueCellText, T11.10 emptySublineKeys пропускает detail, T11.11 collapseIssues (3 записи + «Показать все»).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 20:06:02 +04:00
Andrey Epifancev
a3199d636e fix(arm-web): вёрстка экрана проверки формы — ширины колонок, значки в ячейке, шапка, ссылка кнопкой (#43)
T11.1–T11.4, T11.6–T11.8: короткая подпись кнопки даты, фиксированная раскладка таблиц, код без переноса, значок уровня внутри ячейки, подсказка на всю ячейку, отступ child-строки, ссылка «Разберите строки без кода» — Button type=link.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 20:06:02 +04:00
Andrey Epifancev
12fcea7560 fix(statement): защитные значения по умолчанию для ядра без v5.19 (M-2, #43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 14:03:33 +04:00
Andrey Epifancev
4783593fe6 fix(statement): ссылка на строки без кода всегда видна, сортировка по row_index, Alert для ошибки скрытого поля кода, постоянный aria-label (T9.1, T9.2, T9.4, T7.1, T8.1, T3.3, M-3, #43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 14:03:33 +04:00
Andrey Epifancev
d965fdc064 fix(statement): округление уверенности в подсказках шапки, пустые тексты в подсказках, комментарий шапки (T5.1, T5.2, M-1, T3.1, #43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 14:03:33 +04:00
Andrey Epifancev
6556e3d58d fix(statement): не отправлять поля шапки, равные текущим (I-2, #43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 14:03:33 +04:00
Andrey Epifancev
fc5cc16b3d fix(files): клики внутри popover не открывают строку, ключи и aria-label (#43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 13:47:21 +04:00
Andrey Epifancev
fdf9358b40 feat(files): предупреждения файла структурами и предупреждения документа в панели файлов и у ОСВ (#43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 13:45:27 +04:00
Andrey Epifancev
5b11f2d00a feat(statement): блокировка подтверждения при строках без кода, LINES_UNRESOLVED и DUPLICATE_FORM (#43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 13:42:32 +04:00
Andrey Epifancev
a779d2a04a feat(statement): подтверждение ячеек, дата колонки, наименование организации и подтверждение даты (#43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 13:39:34 +04:00
Andrey Epifancev
d416422e73 feat(statement): правка строк — код с подсказкой из справочника, меню строки, LINE_CODE_TAKEN (#43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 13:36:07 +04:00
Andrey Epifancev
ef4d32592e refactor(statement): один черновик правок и сборка единственного PATCH (#43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 13:31:51 +04:00
Andrey Epifancev
8ab116fdba feat(statement): шапка — организация, поля на проверку и подсказки распознанного текста (#43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 13:28:41 +04:00
Andrey Epifancev
4ae8643d78 feat(statement): предупреждения и нарушения у строк, ячеек, колонок и в списке документа (#43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 13:25:51 +04:00
Andrey Epifancev
34d523afc7 feat(statement): вид строк по статусам, подсветка по needs_review, переключатель расшифровок (#43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 13:22:26 +04:00
Andrey Epifancev
c2f33e7af2 feat(statement): раскладка строк без кода и расшифровок на своих местах (#43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 13:19:37 +04:00
Andrey Epifancev
e4ee7f09b2 fix(fixtures): коды соотношения, column_index, порядок edition_lines (#43)
- issue i6 и checks.failed: codes — коды строк соотношения, параллельно line_ids.
- issue i2: column_index 3 (индекс колонки c2).
- edition_lines: 1370 перед 1600, по порядку бланка.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 13:17:41 +04:00
Andrey Epifancev
f83b03543e feat(types): API формы v5.19 — статусы строк, needs_review, issues, предупреждения файла (#43)
- types/api.ts: LineStatus, Severity, IssueKind, PeriodKind, FileWarningOut, IssueOut, EditionLineOut,
  IssueCountsOut, CellTarget, LinePatch, ColumnPatch; новые поля StatementHeaderOut, ColumnOut, ValueOut,
  LineOut, FailedCheckOut, StatementOut (form_variant, issues, edition_lines), DocumentBrief (issue_counts),
  DocumentOut (issues), JobBrief.warnings — FileWarningOut[].
- statementGrid.ts: GridRow получает статус строки, номер строки, код как распознан, флаги needs_review /
  is_confirmed / codeModified; cellFlags: внимание только по needs_review, новый флаг confirmed.
- labels.ts: lineStatusLabel, severityLabel.
- фикстура __fixtures__/statement-v2.json (БАЛАНС 2025 Q3, NEEDS_CHECK): 16 строк × 2 колонки, у каждой пары ValueOut.
- тесты: переносы полей v2 и покрытие пар строка × колонка, cellFlags по needs_review, подписи; хелперы
  row() / v() / gridRow / doc() дополнены значениями по умолчанию.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 13:15:29 +04:00
Andrey Epifancev
b861646a86 Merge branch 'test' into feat/38-osv-virtual-table
Слияние с #39 (PR #40): scroll.x считается от фактических колонок, scroll.y — числом
для virtual. Колонки сумм расширены до 160 px: итоги из 17 цифр («Итого по документу»)
переносились на две строки и обрезались внизу таблицы (O-3). Спека: поиск — по аналитике.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 14:46:10 +04:00
Andrey Epifancev
a3e53c8cfc fix(DocumentReview): виртуализация таблицы ОСВ — большая ОСВ больше не роняет вкладку (#38, AURORA-1665)
Таблица строк ОСВ получила virtual (antd 6): в DOM только видимые строки.
Высота области прокрутки считается числом (osvBodyHeight) и обновляется при
изменении окна. В спеку document-review-ui добавлено требование про виртуализацию.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 12:08:22 +04:00
Andrey Epifancev
94cb0a4d74 fix(DocumentReview): заголовок колонки аналитики по виду, ИНН только при контрагентах (#39, AURORA-1666)
Заголовок колонки считается по видам строк-листьев (osvRows.analyticsHeading): «Контрагент»,
название вида из файла или «Аналитика» с подсказкой. Колонка ИНН и подсказка поиска — только при
контрагентах; labelSpan и ширина scroll.x зависят от числа колонок. Требование — в specs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 12:04:17 +04:00
Andrey Epifancev
a4f54818cf fix(DocumentReview): label переключателя пустых строк связан через htmlFor (#36, AURORA-1527)
biome lint/a11y/noLabelWithoutControl остановил перенос в arm-core (sync-web, arm-core #120):
<label> обёртывал antd Switch. Switch получил id, подпись — label htmlFor. Заодно Prettier
переформатировал строку заголовка в ChecksPanel (длиннее 140).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 19:40:08 +04:00
Andrey Epifancev
85e1b86bb1 fix(ChecksPanel): заголовок мягких проверок «Предупреждения проверок (N)» (#34, AURORA-1527)
В soft_failed попадают мягкие соотношения §7 и жёсткие в пределах округления, а не только округление.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 19:09:37 +04:00
Andrey Epifancev
54f88e9950 feat(DocumentReview): подстроки под родителем, пустые строки детализации свёрнуты (#34, AURORA-1527)
Строка с parent_code (его отдаёт ядро) выводится под родителем с отступом, в ББ и ОФР.
Пустые подстроки скрыты за переключателем с счётчиком; строка с правкой в черновике не скрывается.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 18:48:11 +04:00
Andrey Epifancev
f868a9250f Скан PDF с JBIG2 не рисовался: передать pdf.js wasmUrl и копировать wasm в сборку (#32)
pdf.js 5.x декодирует JBIG2/JPEG2000/ICC через wasm и без опции wasmUrl падает:
«JBig2 failed to initialize», «Unable to decode image» (AURORA-1635).
- rsbuild: output.copy node_modules/pdfjs-dist/wasm -> static/pdfjs/wasm;
- pdfjsOptions.ts: pdfjsWasmUrl(APP_ADDRESS) с учётом ROOT_PATH (+ тест);
- PdfPages: getDocument({ wasmUrl }). Legacy-сборка pdf.js сохранена (#22).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 13:28:29 +04:00
Andrey Epifancev
2cddb55a5b Форматирование под ESLint + Prettier и зелёный make check (#31)
После 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>
2026-10-15 18:28:53 +04:00
Andrey Epifancev
92e045a394 Merge remote-tracking branch 'origin/test' into feat/legalEntities 2026-10-15 18:23:52 +04:00
Andrey Epifancev
a8a6da0de3 Форматирование перед PR: ESLint + Prettier и npm run format (#29)
- Prettier — единственный форматтер (табы, 140, одинарные кавычки, в CSS — двойные);
  форматтер biome выключен, biome остаётся линтером и сортирует импорты.
- ESLint (flat config): js/typescript-eslint/react-hooks recommended + правила biome.json,
  eslint-config-prettier последним.
- npm run format / make format: eslint --fix → biome check --write → prettier --write.
- npm run lint: eslint + prettier --check; входит в make lint и make check.
- Разовое переформатирование 4 файлов, `(A | B)[]` вместо Array<…> в 3 местах,
  две находки ESLint в ConsoleTable (лишний `?? null`, тернарник-инструкция).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 17:15:14 +04:00
71dae2173d updated company group and forms 2026-10-15 16:11:02 +03:00
83d4c2b894 added company group table 2026-10-12 17:48:14 +03:00
d2dc230f10 fixed merge bug 2026-10-12 09:54:39 +03:00
e80f0a249f Merge branch 'test' of https://git.aepif.ru/RSHB/arm-web into feat/legalEntities 2026-10-12 09:54:28 +03:00
3977daebe5 added forms for catalogue jur 2026-10-12 09:45:31 +03:00
Andrey Epifancev
c5537d5a6b Правки финального ревью: обновление списка после создания консолидации, подсказка кнопки, решения R-4..R-8
- Sidebar: после создания консолидации перечитывается список группы
- useLegalEntityFiles: убран biome-ignore в зависимостях эффекта
- FilesDrawer: курсор и pointer-events у недоступной кнопки загрузки
- design.md: решения R-4..R-8

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-10 01:03:00 +04:00
Andrey Epifancev
6ee1d0e1cb drawer: рабочий стол консолидации, переключатель «Все документы организации», загрузка только в версии в работе (#26)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-10 00:55:28 +04:00
Andrey Epifancev
79278589d6 api: загрузка и список файлов по маршрутам консолидации (#26)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-10 00:53:59 +04:00
Andrey Epifancev
5b7b02a3f2 store: консолидация открытой версии и подпись консолидации у файла (#26)
Чистые функции findCurrentConsolidation, isInWork, consolidationLabel и хук
useCurrentConsolidation; FileOut.consolidation_id; тесты vitest.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-10 00:52:33 +04:00
Andrey Epifancev
822f758571 fix(auth): обратный поток из контура — vitest 3.1.4, форма dev-входа в любой сборке (#24)
Зеркало arm-core #92: vitest зафиксирован на 3.1.4 (в зеркале npm банка нет 3.2.x); DevLogin
не зависит от NODE_ENV — форма входа по email показывается всегда, заглушка «Вход выполняется
через РАИСА» появляется после 404 «Not Found» от бэкенда (dev-эмитент выключен). Признак вынесен
в isDevIssuerDisabled и покрыт тестами. CLAUDE.md: описание DevLogin обновлено.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-09 20:29:42 +04:00
Andrey Epifancev
0aa73f2289 fix(review): legacy-сборка pdf.js — «Не удалось открыть PDF» в Яндекс Браузере (#22)
Обычная сборка pdfjs-dist 5.7 в воркере вызывает Uint8Array.prototype.toHex (отпечаток документа) —
метод есть только в Chromium 140+, в Яндекс Браузере getDocument падает «a.toHex is not a function».
PdfPages берёт модуль и воркер из pdfjs-dist/legacy/build (с полифиллами core-js) через новый
widgets/DocumentReview/pdfjs.ts; регрессионный тест открывает PDF без Uint8Array.prototype.toHex.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-09 19:41:16 +04:00
Andrey Epifancev
9e89b9fde7 feat(review): шаблонные строки ББ/ОФР и выделение строк «БАЛАНС» (#19)
Фронт к RSHB/arm-core#80. Строки и ячейки с id = null (достроены сервером)
редактируются; правка уходит в PATCH по line_code, строки из БД — по line_id.
Ключ достроенной строки code-<код> (R-10). Строки 1600/1700 формы BALANCE
выделены фоном #f9f0ff и жирным (R-7). OpenSpec change statement-template-lines.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 12:18:44 +04:00
Andrey Epifancev
0f7a101161 feat(osv): ячейка ИНН по макету — «Указать» только без ИНН, ИНН сопоставленного ЮЛ с пересопоставлением (#17)
Решения владельца 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
2026-10-08 19:59:21 +04:00
8e8e46ecbc addded legalEntities table and move form 2026-10-08 17:04:35 +03:00
Andrey Epifancev
1249e2ff3b feat(osv): сопоставление контрагента в сводной ОСВ — «Указать» → «Связать» по макету [32] (#14)
- ИНН-ячейка строк без сопоставления подсвечена, ссылка «Указать» рядом с ИНН из файла [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
2026-10-08 17:39:23 +04:00