300 lines
14 KiB
Markdown
300 lines
14 KiB
Markdown
# 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**
|
||
|
||
Проверить вручную:
|
||
- менеджер видит только список заказов и поиск;
|
||
- логист видит готовые и запланированные доставки с датой/половиной дня;
|
||
- водитель видит свои доставки и состав заказов;
|
||
- клиент видит номер заказа, состав и выбор даты/половины дня.
|