From f596e26153b324bac37ea1a92e189bb4e714288c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sat, 9 May 2026 14:39:08 +0300 Subject: [PATCH] =?UTF-8?q?docs(admin-tenant-detail-epic):=20=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D1=81=D0=B0=D1=86=D0=B8=D1=8F=20Post-MVP=20AdminTenantDe?= =?UTF-8?q?tailView=20=D0=B7=D0=B0=D0=BA=D1=80=D1=8B=D1=82=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Реестр v1.75→v1.76: запись о закрытии эпика, метрики Pest 416/416 + Vitest 416/416. - CLAUDE.md в этот раз не правлю: §5 п.11 — синхронизация при следующем /claude-md-management:claude-md-improver run'е. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/Открытые_вопросы_v8_3.md | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/docs/Открытые_вопросы_v8_3.md b/docs/Открытые_вопросы_v8_3.md index c0b29fc9..5b743daf 100644 --- a/docs/Открытые_вопросы_v8_3.md +++ b/docs/Открытые_вопросы_v8_3.md @@ -2,7 +2,30 @@ **Назначение:** единый рабочий список вопросов, требующих решения заказчика для разблокировки разработки. Разбит по адресатам, внутри — по приоритету. -**Версия:** 1.75 от 09.05.2026 — **Post-MVP: Reports backend epic закрыт** (4 этапа / 4 коммита `19f319c..e0ffe7e`). После MVP-closure (v1.74) заказчик инициировал работу с открытыми вопросами реестра; все unblocked внутри пусто, поэтому взяли Post-MVP TODO «Reports backend» (был один из P1-кандидатов). **Pest 403/403 (1343 assertions) + Vitest 393/393 + Histoire 21/28 зелёные**. +**Версия:** 1.76 от 09.05.2026 — **Post-MVP: AdminTenantDetailView epic закрыт** (2 этапа / 2 коммита `f9d8926..cab1f87`). Backend `GET /api/admin/tenants/{subdomain}` с 4 секциями (users/projects/balance_history/activity) + computed metrics; frontend AdminTenantDetailView переписан с mock на real API. **Pest 416/416 (1388 assertions) + Vitest 416/416 + Histoire 21/28 зелёные**. + +**Что изменилось в v1.76 относительно v1.75:** + +- **Эпик AdminTenantDetailView** (2 коммита, замена mock на real API): + + - **Этап A (backend)** `f9d8926` — `AdminTenantsController::show($subdomain)` под существующим `/api/admin/tenants/{subdomain}` route'ом. Lookup по subdomain (естественный URL slug) + `whereNull deleted_at`. Без auth-middleware — saas-admin SSO ⏸ Б-1. Возвращает: tenant base (15 полей включая mrr_rub derived) + users (LIMIT 50, ORDER last_active_at DESC) + projects (LEFT JOIN sub-queries для suppliers_count + leads_today) + balance_history (LIMIT 30) + activity (LEFT JOIN users для actor_email, LIMIT 20, json_decode context) + computed metrics (leads_today/week/month через FILTER, AVG(supplier_lead_costs.cost_rub) за 30 дней, runway_days = balance / (month_spend / 30)). 4 private fetcher'а + computeMetrics. Pest +13. + + - **Этап B (frontend)** `cab1f87` — `api/admin.ts +getAdminTenantDetail` + 5 типов; `composables/adminTenantDetailMapper.ts` (API → mockTenantDetail format: code=subdomain, deriveStatus 4 ветки, deriveTariff с Trial-fallback, users.fullName из first+last||email с role='manager' хардкод (schema users role нет — Post-MVP), projects.slug=tag, balance_history с TX- prefix + chargeback_*/trial_bonus/historical_import → ближайший UI-тип, activity.actor=actor_email||system + summary из context.from→to, activitySinceText). AdminTenantDetailView переписан: async loadTenant + 3 ветки template (loading/notFound/fetchError) + watch(code) для реактивной навигации. inn/contact_phone/legal_address скрыты через v-if (нет в schema). Vitest +23. + +- **Что НЕ сделано (вынесено в Post-MVP backlog):** + - **Поля inn/contact_phone/legal_address** требуют расширения tenants schema или JOIN на legal_entities (сейчас живёт только для оператора SaaS). + - **users.role** требует таблицы user_roles или enum-колонки в users (сейчас на UI хардкод 'manager'). + - **#6 Yandex 360 SSO** ⏸ ждёт Б-1. + - **#7 Pest browser-mode** — отложен (инфра). + +- **Регресс зелёный:** + - `npm run lint:vue` + `type-check` + `format` — passed. + - `npm run test:vue` — **416/416 за 21.90 сек** (+23 от 393). + - `npm run build` — vite OK 1.04 сек. + - `composer pint` + `composer stan` — passed. + - `composer test` — **Pest 416/416 за 45.48 сек** (+13 от 403, 1388 assertions). + +- **Сводка §0:** без изменений (70 ✅ / 5 🟦 / 4 ⏸ / 1 P0 + 3 P1 + 0 P2). AdminTenantDetailView не был open-вопросом реестра; это Post-MVP feature расширение (один из P1-кандидатов). **Что изменилось в v1.75 относительно v1.74:**