supersam/docs/superpowers/plans/2026-04-16-role-focused-del...

300 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Role Focused Delivery Simplification Implementation Plan
> **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Упростить продукт до рабочего delivery-контура из 4 ролей: менеджер, логист, водитель и клиент, убрав лишние разделы, действия и экраны, которые не входят в согласованный scope.
**Architecture:** Текущий `DashboardPage` работает как широкий универсальный центр управления заказами. В рамках этого плана он сужается до трёх role-specific рабочих зон: менеджер видит только реестр и поиск, логист видит готовность и план доставки по датам/половине дня, водитель видит свои доставки и состав заказов. Клиентский route `/delivery/:token` дополняется составом заказа и остаётся отдельным публичным экраном.
**Tech Stack:** React 18, Vite, existing UI kit, Supabase-backed orders/invitations, Vitest.
---
## File Structure
- Modify: `src/pages/DashboardPage.jsx` — убрать лишние секции (`production`, `admin`, `references`, избыточные tabs/orders views) и собрать role-focused рендеринг.
- Modify: `src/hooks/useOrders.js` — при необходимости сузить возвращаемые данные и убрать неиспользуемые callbacks.
- Modify: `src/components/dashboard/RoleWorkspacePanel.jsx` — переписать описания ролей под итоговый scope.
- Modify: `src/components/orders/OrderFilters.jsx` — оставить фильтры, которые реально нужны менеджеру/логисту.
- Modify: `src/components/orders/OrdersTable.jsx` — ориентировать таблицу на заказ доставки, номер, клиента, дату доставки и статус.
- Modify: `src/components/orders/OrderDetailPanel.jsx` — оставить просмотр деталей, состава заказа и базового статуса, без лишних командных функций.
- Delete or stop using: `src/components/orders/OrderEditorPanel.jsx` — создание/редактирование заказов должно уйти из продукта.
- Delete or stop using: `src/components/orders/OrdersKanbanBoard.jsx`
- Delete or stop using: `src/components/orders/OrdersCalendarView.jsx`
- Delete or stop using: `src/components/admin/AuditPanel.jsx`
- Delete or stop using: `src/components/admin/UserOnboardingPanel.jsx`
- Delete or stop using: `src/components/dashboard/ProductionQueuePanel.jsx`
- Modify or replace: `src/components/logistics/BotControlPanel.jsx` — вместо “управления ботами” сделать компактную панель логиста по доставке.
- Modify or replace: `src/components/logistics/DeliverySetDetailPanel.jsx` — если оставить, то только как простой delivery detail без производственного слоя; иначе убрать из сценария.
- Modify: `src/components/driver/DriverDeliveryPlanner.jsx` — упростить до списка доставок без kanban и reorder.
- Modify: `src/components/driver/DriverDeliveryDetail.jsx` — оставить адрес, состав заказа, слот доставки и минимальные действия водителя.
- Modify: `src/pages/ClientDeliveryPage.jsx` — показать клиенту состав заказа и информацию по заказу вместе с выбором даты/половины дня.
- Modify: `src/components/client/DeliveryChoiceFlow.jsx` — упростить copy и добавить summary по заказу.
- Modify: `src/components/client/DeliveryStateNotice.jsx` — оставить только states, которые нужны в реальном клиентском процессе.
- Modify: `src/services/supabase/orderRepository.js` — убедиться, что клиентская и role-specific UI берут состав заказа и доставочные поля из реальных данных.
- Modify: `docs/product-overview.md` — синхронизировать документ с новым узким scope.
- Modify: `README.md` — коротко обновить позиционирование и ссылку на новый scope.
## Chunk 1: Scope Guard In Tests
### Task 1: Зафиксировать тестами новый role-focused scope
**Files:**
- Modify: `src/components/orders/OrderFilters.test.jsx`
- Modify or Create: `src/pages/DashboardPage.test.jsx`
- Modify or Create: role-specific component tests
- [ ] **Step 1: Add failing tests for manager/logistician/driver visible sections**
Покрыть:
- менеджер видит только список заказов, поиск и карточку заказа;
- логист видит только список готовых/запланированных доставок;
- водитель видит только свои доставки и состав заказа;
- лишние секции (`production`, `admin`, `references`, `kanban`, `calendar`, `archive`, `history`) не рендерятся.
- [ ] **Step 2: Run targeted tests to verify current mismatch**
Run: `npm test -- src/components/orders/OrderFilters.test.jsx src/pages/DashboardPage.test.jsx`
Expected: FAIL на текущем широком dashboard.
### Task 2: Зафиксировать тестом клиентский заказный summary
**Files:**
- Modify: `src/components/client/DeliveryChoiceFlow.test.jsx`
- Modify or Create: `src/pages/ClientDeliveryPage.test.js`
- [ ] **Step 1: Add failing expectation for client order contents**
Покрыть:
- номер заказа;
- состав заказа;
- выбор даты и половины дня.
- [ ] **Step 2: Run targeted client tests and confirm failure**
Run: `npm test -- src/components/client/DeliveryChoiceFlow.test.jsx src/pages/ClientDeliveryPage.test.js`
Expected: FAIL
## Chunk 2: Simplify Dashboard By Role
### Task 3: Сузить навигацию и секции dashboard
**Files:**
- Modify: `src/pages/DashboardPage.jsx`
- Modify: `src/components/dashboard/RoleWorkspacePanel.jsx`
- [ ] **Step 1: Remove non-scope nav sections**
Убрать:
- `production`
- `admin`
- `references`
И свести менеджера/логиста к простым рабочим секциям без обзорного “комбайна”.
- [ ] **Step 2: Remove extra order tabs**
Для менеджера оставить только основной список заказов.
Убрать из пользовательского сценария:
- `calendar`
- `kanban`
- `history`
- `archive`
- [ ] **Step 3: Re-run dashboard tests**
Run: `npm test -- src/pages/DashboardPage.test.jsx`
Expected: PASS
### Task 4: Упростить экран менеджера
**Files:**
- Modify: `src/components/orders/OrderFilters.jsx`
- Modify: `src/components/orders/OrdersTable.jsx`
- Modify: `src/components/orders/OrderDetailPanel.jsx`
- [ ] **Step 1: Keep only filters manager really needs**
Оставить:
- поиск по номеру заказа;
- при необходимости телефон/клиент;
- статус доставки.
Убрать лишние фильтры и продуктовую лексику, которая больше не используется.
- [ ] **Step 2: Keep order details read-first**
В карточке заказа оставить:
- номер;
- клиент;
- адрес;
- состав;
- дата доставки;
- половина дня;
- текущий статус.
- [ ] **Step 3: Remove create/edit order entry points**
Убрать из пользовательского flow любые кнопки и панели создания/редактирования заказов.
- [ ] **Step 4: Re-run manager-facing tests**
Run: `npm test -- src/components/orders/OrdersTable.test.jsx src/components/orders/OrderDetailPanel.test.jsx src/components/orders/OrderFilters.test.jsx`
Expected: PASS
### Task 5: Упростить экран логиста
**Files:**
- Modify: `src/pages/DashboardPage.jsx`
- Modify or Replace: `src/components/logistics/BotControlPanel.jsx`
- Modify or stop using: `src/components/logistics/DeliverySetDetailPanel.jsx`
- [ ] **Step 1: Replace logistics board with practical delivery list**
Логист должен видеть:
- заказы, готовые на сегодня;
- доставки, запланированные на завтра/послезавтра;
- половину дня;
- текущий статус.
- [ ] **Step 2: Keep only logistics actions that are in scope**
Оставить:
- просмотр заказа;
- фиксацию/изменение даты;
- фиксацию половины дня;
- перевод по нужному delivery status.
Убрать:
- блок “Логика каналов”;
- широкую bot-control механику;
- лишние delivery-set детали производства.
- [ ] **Step 3: Re-run logistics-focused tests**
Run: `npm test -- src/services/orderService.test.js`
Expected: PASS
### Task 6: Упростить экран водителя
**Files:**
- Modify: `src/components/driver/DriverDeliveryPlanner.jsx`
- Modify: `src/components/driver/DriverDeliveryDetail.jsx`
- Modify: `src/pages/DashboardPage.jsx`
- [ ] **Step 1: Remove planner-heavy behaviors**
Убрать:
- `kanban` view;
- reorder drag-and-drop;
- лишние фильтры, которые не нужны для показа.
- [ ] **Step 2: Keep delivery essentials only**
Оставить:
- адрес;
- клиент;
- слот доставки;
- состав заказа;
- базовые статусы водителя.
- [ ] **Step 3: Re-run driver-facing tests**
Run: `npm test -- src/services/orderService.test.js`
Expected: PASS
## Chunk 3: Client Page Completion
### Task 7: Показать клиенту состав заказа и delivery summary
**Files:**
- Modify: `src/pages/ClientDeliveryPage.jsx`
- Modify: `src/components/client/DeliveryChoiceFlow.jsx`
- Modify: `src/components/client/DeliveryStateNotice.jsx`
- Modify: `src/services/supabase/orderRepository.js` if extra fields need mapping
- [ ] **Step 1: Add order items to invitation view model**
Убедиться, что клиентская страница получает:
- номер заказа;
- имя клиента;
- состав заказа;
- доступные даты;
- половины дня.
- [ ] **Step 2: Render order composition above slot choice**
Показать клиенту:
- номер заказа;
- адрес/краткое описание;
- список позиций заказа.
- [ ] **Step 3: Keep state notices minimal and product-focused**
Оставить только сообщения для:
- активного выбора;
- уже согласованной доставки;
- передачи логисту;
- доставленного заказа.
- [ ] **Step 4: Re-run client tests**
Run: `npm test -- src/components/client/DeliveryChoiceFlow.test.jsx src/components/client/DeliverySlotsPicker.test.jsx src/pages/ClientDeliveryPage.test.js`
Expected: PASS
## Chunk 4: Documentation Sync
### Task 8: Синхронизировать документацию с новым scope
**Files:**
- Modify: `docs/product-overview.md`
- Modify: `README.md`
- [ ] **Step 1: Update product overview**
Описать только:
- менеджера;
- логиста;
- водителя;
- клиента.
- [ ] **Step 2: Remove unsupported features from docs**
Убрать из описаний:
- производство;
- админку как отдельный пользовательский продукт;
- создание заказов;
- канбан/архив/историю как целевые экраны.
- [ ] **Step 3: Re-read docs against current UI**
Проверить, что документация описывает ровно тот интерфейс, который остался после упрощения.
## Chunk 5: Final Verification
### Task 9: Прогнать целевую регрессию после упрощения
**Files:**
- Reference: `src/pages/DashboardPage.jsx`
- Reference: `src/pages/ClientDeliveryPage.jsx`
- Reference: `docs/product-overview.md`
- [ ] **Step 1: Run focused UI suite**
Run: `npm test -- src/pages/DashboardPage.test.jsx src/components/orders/OrdersTable.test.jsx src/components/orders/OrderDetailPanel.test.jsx src/components/orders/OrderFilters.test.jsx src/components/client/DeliveryChoiceFlow.test.jsx src/components/client/DeliverySlotsPicker.test.jsx src/pages/ClientDeliveryPage.test.js`
Expected: PASS
- [ ] **Step 2: Run service regression tests**
Run: `npm test -- src/services/orderService.test.js src/services/deliveryInvitationApi.test.js src/context/AuthContext.test.js src/components/auth/OtpLoginForm.test.jsx`
Expected: PASS
- [ ] **Step 3: Manual acceptance check**
Проверить вручную:
- менеджер видит только список заказов и поиск;
- логист видит готовые и запланированные доставки с датой/половиной дня;
- водитель видит свои доставки и состав заказов;
- клиент видит номер заказа, состав и выбор даты/половины дня.