From 67bc2c801b6a225f5402253b2c7aea6cd758dd47 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Thu, 8 Oct 2026 01:54:43 +0400 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=B4=D0=B5=D0=BC=D0=BE-=D1=81=D1=86?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=D1=80=D0=B8=D0=B9=20=D0=BF=D0=BE=D0=B4=20?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20=D1=81=D1=82=D0=B5=D0=BD?= =?UTF-8?q?=D0=B4=D0=B0,=20CLAUDE.md;=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BD=D0=B5=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D1=83=D0=B5=D0=BC=D1=8B=D0=B5=20css-=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=81=D1=8B=20Sidebar=20(I-2,=20M-1,=20M-2,=20M-6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3 --- CLAUDE.md | 8 ++- README.md | 26 ++++++--- openspec/changes/demo-prototype/design.md | 16 +++-- src/widgets/Sidebar/styles.module.css | 71 ----------------------- 4 files changed, 33 insertions(+), 88 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 1eaf294..43004c4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -18,7 +18,8 @@ SPA кредитного аналитика АРМ КА: справочники повторяют схемы бэка (`arm-core/api/src/schemas/`), поля не придумываем. 2. Пользовательский путь — `../docs/context/10-user-journey.md`; макет — `../docs/mockup/` (по одному экрану через `../docs/mockup/INDEX.md`). -3. Права — данные: меню скрывается по кодам прав из `/me`, доступ решает сервер (`src/auth/permissions.ts`). +3. Права — данные: доступ решает сервер (403). Меню пока не скрывается по правам (`Sidebar` не применяет permission); + коды прав из `/me` лежат в `src/auth/permissions.ts`. - `../reference-old-arm/` — только чтение: инфраструктурные идеи (PDFResultViewer) можно смотреть, эндпоинты старого АРМ (`/fsl/...`, `/osv/by-file-id`, `POST /files`) в arm-core не существуют. @@ -38,7 +39,7 @@ SPA кредитного аналитика АРМ КА: справочники - `src/services/api/` — функции по ресурсам arm-core (consolidations, files, documents, osv, directories/…). - `src/utils/` — чистые функции без React/store/API: деньги (`money.ts`, суммы — строки), подписи статусов/типов/периодов (`labels.ts`), скачивание и имя файла (`download.ts`). - `src/auth/` — `AuthGate` (профиль `/me`), `DevLogin` (`POST /dev/token`, только не в production), `token.ts`. -- `src/store/` — Redux Toolkit: `store.ts`, слайсы `companyGroupsSlice`, `consolidations`, `files` (+ `thunks.ts`). +- `src/store/` — Redux Toolkit: `store.ts`, слайсы `companyGroupsSlice` и `consolidations` (+ `thunks.ts`). - `src/layouts/` — страницы (маршруты в `src/App.tsx`, в т.ч. `/documents/:document_id` и `/groups/:group_id/versions/:version_id/osv`), `src/widgets/` — блоки экранов (`DocumentReview` — проверка ББ/ОФР/ОСВ со сканом, `ConsolidatedOsv` — сводная ОСВ, `FilesDrawer` — файлы ЮЛ), `src/components/` — примитивы (`GenericTable`, `TableTag`, `PageTitle`), `src/types/` — DTO API. @@ -47,7 +48,8 @@ SPA кредитного аналитика АРМ КА: справочники - `make test` — vitest (`npm test`). - `make check` — install + biome + `tsc --noEmit` + vitest + `rsbuild build`. Зелёным считается только всё вместе; **перед PR**, вывод — в описание PR. -- `make start` — dev-сервер (`rsbuild dev`) с proxy `/api` → `ARM_CORE_URL` (по умолчанию `http://localhost:8000`); бэкенд — локальный стенд arm-core по `../docs/dev/qa-guide.md`. +- `make start` — dev-сервер (`rsbuild dev`, цель сама задаёт `REACT_APP_ROOT_PATH=/`: без него приложение ждёт префикс + `/aurora/apps/fastapi-dkb-armka` и открывается белый экран; `qa-guide` §4.3) с proxy `/api` → `ARM_CORE_URL` (по умолчанию `http://localhost:8000`); бэкенд — локальный стенд arm-core по `../docs/dev/qa-guide.md`. ## Тесты Unit-тесты — vitest на чистых функциях (`src/**/*.test.ts`, `npm test` / `make test`); компоненты не тестируются — ручной демо-сценарий по стенду arm-core с фикстурами из `../fixtures` (README, `scripts/demo-prepare.sh`). diff --git a/README.md b/README.md index 902f344..3001d09 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,9 @@ SPA кредитного аналитика поверх API `arm-core` (`/api/v 1. `make install`. 2. Стенд arm-core — по `../docs/dev/qa-guide.md` §4 (ядро на `localhost:8000`, `DEBUG=true`, `make seed-dev`); для распознавания PDF — профиль `services` (§6.8: tabular-parser, scan-gateway, scan-emulator). -3. `make start` — dev-сервер rsbuild. Запросы `/api` проксируются на `ARM_CORE_URL` (по умолчанию - `http://localhost:8000`), `REACT_APP_API_URL` в dev не нужен. +3. `make start` — dev-сервер rsbuild (сам ставит `REACT_APP_ROOT_PATH=/`; без этого приложение ждёт префикс + `/aurora/apps/fastapi-dkb-armka` и показывает белый экран, см. `qa-guide` §4.3). Запросы `/api` проксируются на + `ARM_CORE_URL` (по умолчанию `http://localhost:8000`), `REACT_APP_API_URL` в dev не нужен. 4. Вход — через dev-форму (`POST /dev/token`), например `ka_go@armka.local`. ## Проверка @@ -20,13 +21,20 @@ SPA кредитного аналитика поверх API `arm-core` (`/api/v Пользователь с правами на ГК «Русский бисквит» (`ka_go@armka.local`). -1. Группы → «Русский бисквит» → «Новая консолидация»: ГСК, 2024, Q3 → члены ГСК отмечены → «Создать» → открыта версия №1. -2. Загрузить квартальные ОСВ РБ и Счастливочной за 2024 Q1–Q3 (`../fixtures/osv/{rb,schastl}/2024-Q{1,2,3}/*`) и подтвердить - ОСВ-документы. Вручную — панель «Организации» → ЮЛ → «Файлы», подтверждение на экране документа; быстро — скрипт: - `scripts/demo-prepare.sh [email]` (каталог фикстур — `FIXTURES_DIR`, по умолчанию `../../fixtures` - относительно репозитория). В конце скрипт печатает сводку. -3. Загрузить `../fixtures/ocr/aep_6.pdf` одному из ЮЛ → ББ и ОФР «Требуется проверка» → открыть ББ: скан слева, форма - справа, исправить ячейку, принять нарушения с комментарием (если есть), подтвердить. +Данные стенда уже подготовлены: консолидация РБ ГСК 2024 Q3 создана (версия `0437f8be-019c-4dbb-9776-08c306aa38cc`, +ОСВ загружены и подтверждены), `aep_6.pdf` уже загружен Счастливочной. Повторы дают штатные ошибки (409 +`CONSOLIDATION_EXISTS`, `DUPLICATE_FILE`) — их можно показать как обработку ошибок. + +1. Кнопка «Новая консолидация» — в боковом меню (действует на всё приложение, не на выбранную группу); в модалке выбирается + ГК «Русский бисквит», ГСК, период — **другой**, например 2024 Q2 или 2025 Q3 (для 2024 Q3 вернётся 409 + `CONSOLIDATION_EXISTS`) → члены ГСК отмечены → «Создать» → открывается страница группы с новой версией. +2. Дальше работаем на подготовленной версии 2024 Q3 (`/groups/?version=0437f8be-019c-4dbb-9776-08c306aa38cc`): + панель «Организации» → ЮЛ → «Файлы» → документы ОСВ в статусе «Загружен». Загрузка ОСВ вручную — + `../fixtures/osv/{rb,schastl}/2024-Q{1,2,3}/*`; для новой версии быстро — `scripts/demo-prepare.sh [email]` + (каталог фикстур — `FIXTURES_DIR`, по умолчанию `../../fixtures` относительно репозитория; в конце печатает сводку). +3. ББ/ОФР: открыть уже загруженный ББ Счастливочной (или загрузить `../fixtures/ocr/aep_6.pdf` РБ) → скан слева, форма справа, + исправить ячейку. ИНН и дата отчёта в aep_6 не распознаются: в шапке ввести дату строго `2024-09-30` (ГГГГ-ММ-ДД) и + нажать «Сохранить», иначе «Подтвердить данные» даст 409 `PERIOD_REQUIRED`. Принять нарушения с комментарием (если есть), подтвердить. 4. «К отчётности» → сводная ОСВ; фильтр «Счастливочная» + «бисквит» → строка `60.01` (сальдо нач. Кт 4 454 151.93, обороты Дт 128 058 143.65, Кт 125 950 450.77, сальдо кон. Кт 2 346 459.05, `GSK`); «Скачать xlsx». diff --git a/openspec/changes/demo-prototype/design.md b/openspec/changes/demo-prototype/design.md index 8f3d2c3..40d89f0 100644 --- a/openspec/changes/demo-prototype/design.md +++ b/openspec/changes/demo-prototype/design.md @@ -85,11 +85,17 @@ docs#58 O-1 на фронте обходится). В контуре SPA отд Стенд по `../docs/dev/qa-guide.md` §4 и §6.8 (профиль `services`: tabular-parser, scan-gateway, scan-emulator), `make seed-dev`, вход `ka_rf@armka.local` (или пользователь из гайда с правами EDIT на ГК «Русский бисквит»). -1. Группы → «Русский бисквит» → «Новая консолидация»: ГСК, 2024, Q3 → члены ГСК отмечены → «Создать» → открыта версия №1. -2. Панель «Организации» → РБ → «Файлы»: загрузить `fixtures/osv/rb/2024-Q{1,2,3}/*`; то же для Счастливочной - (`fixtures/osv/schastl/2024-Q{1,2,3}/*`). Дождаться «Требуется проверка», подтвердить ОСВ-документы (экран ОСВ). -3. Загрузить `fixtures/ocr/aep_6.pdf` одному из ЮЛ → ББ и ОФР «Требуется проверка» → открыть ББ: скан слева, форма - справа, исправить ячейку, принять нарушения с комментарием (если есть), подтвердить. +Данные стенда уже подготовлены: консолидация РБ ГСК 2024 Q3 создана (версия `0437f8be-019c-4dbb-9776-08c306aa38cc`), +`aep_6.pdf` уже загружен Счастливочной; повторы дают штатные 409 `CONSOLIDATION_EXISTS` / `DUPLICATE_FILE`. + +1. Кнопка «Новая консолидация» — в боковом меню (действует на всё приложение); ГК «Русский бисквит» выбирается в модалке: + ГСК, период 2024 Q2 или 2025 Q3 (для 2024 Q3 — показать 409 как штатную ошибку) → члены ГСК отмечены → «Создать». +2. Шаги 2–4 — на подготовленной версии `0437f8be-…`. Панель «Организации» → РБ → «Файлы»: ОСВ + `fixtures/osv/rb/2024-Q{1,2,3}/*` и Счастливочной (`fixtures/osv/schastl/2024-Q{1,2,3}/*`) загружены, документы + подтверждены (на новой версии — загрузить и подтвердить на экране ОСВ). +3. ББ/ОФР: открыть уже загруженный ББ Счастливочной (или загрузить `fixtures/ocr/aep_6.pdf` РБ) → скан слева, форма справа, + исправить ячейку; ИНН и дата отчёта не распознаны — ввести в шапке дату `2024-09-30` (ГГГГ-ММ-ДД) и «Сохранить», иначе + 409 `PERIOD_REQUIRED`; принять нарушения с комментарием (если есть), подтвердить. 4. «К отчётности» → сводная ОСВ: 1385 строк, 22 документа, 7 пробелов; фильтр Счастливочная + «бисквит» → строка `60.01` по `qa-guide` §7.2; «Скачать xlsx». diff --git a/src/widgets/Sidebar/styles.module.css b/src/widgets/Sidebar/styles.module.css index 8e3de53..8278b7a 100644 --- a/src/widgets/Sidebar/styles.module.css +++ b/src/widgets/Sidebar/styles.module.css @@ -1,15 +1,3 @@ -.company_group_item { - border: 2px solid grey; - border-radius: 2px; - height: 50px; - width: 90%; - cursor: pointer; - background-color: lightgray; -} -.active_cg { - background-color: white; -} - .topbar { display: flex; align-items: center; @@ -17,19 +5,6 @@ margin-bottom: 12px; } -.brand { - font-weight: 700; - white-space: nowrap; -} - -.collapsedList { - display: flex; - flex-direction: column; - gap: 8px; - align-items: center; - margin-top: 8px; -} - .section { margin-bottom: 0px; padding: 12px; @@ -46,32 +21,6 @@ margin-bottom: 10px; } -.search { - margin-bottom: 10px; -} - -.subgroupToggle { - width: 100%; - display: flex; - align-items: center; - justify-content: space-between; - border: 0; - background: transparent; - padding: 6px 10px; - margin-bottom: 6px; - cursor: pointer; - color: rgba(0, 0, 0, 0.88); - font-weight: 600; -} - -.subgroup { - /* padding-left: 8px; */ - display: flex; - flex-direction: column; - /* gap: 10px; */ - margin-bottom: 12px; -} - .linkBase { display: inline-flex; gap: 10px; @@ -98,17 +47,6 @@ background: #edf8ee; } -.state { - display: flex; - align-items: center; - gap: 8px; - padding: 8px 0; -} - -.emptyWrap { - padding-top: 8; -} - .wrapper { height: 100%; display: flex; @@ -123,15 +61,6 @@ align-items: center; } -.collapsedList { - display: flex; - flex-direction: column; - gap: 8px; - width: 100%; - align-items: center; - margin-top: 8px; -} - .iconBtn { width: 40px; height: 40px;