supersam/docs/superpowers/plans/2026-03-30-delivery-platfor...

270 lines
15 KiB
Markdown
Raw Permalink 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.

# Delivery Platform Contract 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:** Реализовать договорной объем проекта: self-hosted кабинет с ролями, клиентскую страницу согласования доставки, автоматизации на `n8n`/`Edge Functions`, ручную обработку логистом, платное хранение, интеграцию с `1С`, обучение и приемку по 3 этапам.
**Architecture:** Основа остается в существующем React + Supabase приложении. Внутренние рабочие места продолжают жить в текущем dashboard, а клиентский сценарий выносится в отдельный публичный route с серверной валидацией состояния заказа. Критичные бизнес-переходы и интеграционные контракты фиксируются в Supabase schema/Edge Functions, а `n8n` используется как orchestration-слой для SMS, напоминаний и обмена с `1С`.
**Tech Stack:** React 18, Vite, existing UI kit, Vitest, Supabase self-hosted, Supabase SQL/RLS, Supabase Edge Functions, `n8n`, self-hosted VPS deployment docs.
---
## File Structure
- Modify: `src/router.jsx` — добавить публичный клиентский route и сохранить текущую dashboard-навигацию.
- Create: `src/pages/ClientDeliveryPage.jsx` — страница выбора доставки по ссылке.
- Create: `src/components/client/DeliveryChoiceFlow.jsx` — основной клиентский flow выбора/подтверждения/информационных состояний.
- Create: `src/components/client/DeliveryStateNotice.jsx` — read-only состояния: уже согласовано, передано логисту, платное хранение, доставлено.
- Create: `src/components/client/DeliveryChoiceFlow.test.jsx` — UI/flow тесты клиентской страницы.
- Modify: `src/constants/deliveryWorkflow.js` — новые статусы и метаданные (`Ожидает ответа клиента`, `Передан логисту`, `Платное хранение`).
- Modify: `src/services/orderService.js` — чистые переходы статусов, напоминания, ручная передача логисту, исключения доставки.
- Modify: `src/services/orderService.test.js` — тесты на новые переходы и guard rules.
- Modify: `src/data/mockAppData.js` — договорные demo-сценарии ролей, логиста, клиента и неуспешной доставки.
- Modify: `src/pages/DashboardPage.jsx` — вывести логисту ручную обработку, платное хранение и delivery exceptions.
- Modify: `src/components/logistics/BotControlPanel.jsx` or split — логистические действия для ручного согласования и повторной доставки.
- Modify: `src/components/driver/DriverDeliveryPlanner.jsx`
- Modify: `src/components/driver/DriverDeliveryDetail.jsx` — фиксация успешной/неуспешной доставки и причины.
- Modify: `supabase/schema.sql` — invitation/session tables, integration event tables, дополнительные статусы/поля.
- Modify: `supabase/functions/_shared/workflow.ts` — серверная карта переходов для delivery agreement flow.
- Create: `supabase/functions/_shared/delivery-invitations.ts` — общая логика поиска/валидации активной клиентской ссылки.
- Create: `supabase/functions/create-delivery-invitation/index.ts` — создание активной клиентской ссылки для `n8n`.
- Create: `supabase/functions/get-delivery-invitation/index.ts` — отдача публичного состояния клиентской страницы.
- Create: `supabase/functions/confirm-delivery-choice/index.ts` — подтверждение half-day выбора клиента.
- Create: `supabase/functions/transfer-to-logistics/index.ts` — ручная передача заказа логисту/платное хранение по automation signals.
- Create: `supabase/functions/report-delivery-result/index.ts` — фиксация delivery result + payload для `1С`.
- Modify: `supabase/functions/README.md` — обновить serverless contracts.
- Create: `docs/operations/self-hosted-deploy.md` — требования к VPS, доменам, балансам, старту работ.
- Create: `docs/integrations/n8n-delivery-flow.md` — webhook contracts, reminder schedule, SMS/`1С` responsibilities.
- Create: `docs/training/logistics-playbook.md`
- Create: `docs/training/driver-playbook.md`
- Modify: `docs/scenarios.md`
- Modify: `docs/architecture.md`
## Chunk 1: Contract Stage 1 Foundation And Demo Approval
### Task 1: Зафиксировать self-hosted стартовые условия и договорные ограничения
**Files:**
- Create: `docs/operations/self-hosted-deploy.md`
- Modify: `README.md`
- [ ] Описать старт работ: VPS/Beget or agreed provider, домен/поддомен для app и Supabase, баланс минимум на 2 месяца.
- [ ] Зафиксировать, что `1С`, SMS и домены предоставляет/обеспечивает Заказчик.
- [ ] Прогнать sanity-check документации вручную.
### Task 2: Подготовить demo-модель статусов и ролей под договор
**Files:**
- Modify: `src/constants/deliveryWorkflow.js`
- Modify: `src/data/mockAppData.js`
- Modify: `src/services/orderService.js`
- Modify: `src/services/orderService.test.js`
- [ ] Написать падающие тесты на новые статусы:
- `Ожидает ответа клиента`
- `Передан логисту`
- `Платное хранение`
- повторная доставка после `Проблема доставки`
- [ ] Прогнать таргетированные тесты.
- Run: `npm test -- src/services/orderService.test.js`
- Expected: FAIL
- [ ] Реализовать минимальные переходы в `orderService`.
- [ ] Обновить workflow metadata и demo data под новые сценарии.
- [ ] Прогнать таргетированные тесты повторно.
- Run: `npm test -- src/services/orderService.test.js`
- Expected: PASS
### Task 3: Добавить публичный demo-route клиентского выбора доставки
**Files:**
- Modify: `src/router.jsx`
- Create: `src/pages/ClientDeliveryPage.jsx`
- Create: `src/components/client/DeliveryChoiceFlow.jsx`
- Create: `src/components/client/DeliveryStateNotice.jsx`
- Create: `src/components/client/DeliveryChoiceFlow.test.jsx`
- [ ] Написать падающие UI-тесты на:
- активный выбор half-day
- уже согласованную доставку
- передан логисту
- платное хранение
- [ ] Прогнать только новый клиентский набор тестов.
- Run: `npm test -- src/components/client/DeliveryChoiceFlow.test.jsx`
- Expected: FAIL
- [ ] Реализовать публичную страницу и базовые read/write состояния на demo data.
- [ ] Прогнать тесты повторно.
- Run: `npm test -- src/components/client/DeliveryChoiceFlow.test.jsx`
- Expected: PASS
### Task 4: Показать логисту ручную ветку в dashboard
**Files:**
- Modify: `src/pages/DashboardPage.jsx`
- Modify: `src/components/logistics/BotControlPanel.jsx`
- Modify: related test files if coverage already exists
- [ ] Вывести для логиста заказы в `Ожидает ответа клиента`, `Передан логисту`, `Платное хранение`, `Проблема доставки`.
- [ ] Добавить действия ручного согласования и передачи на следующий статус в demo mode.
- [ ] Ручная проверка stage 1 demo:
- login by role
- internal dashboard
- client page
- manual logistics branch
## Chunk 2: Contract Stage 2 Core Delivery Workflow
### Task 5: Спроектировать и внедрить schema changes для delivery invitation flow
**Files:**
- Modify: `supabase/schema.sql`
- Modify: `supabase/functions/_shared/workflow.ts`
- [ ] Написать SQL-план таблиц/полей для:
- client invitation/session
- event/audit integration state
- optional manual handling reason fields
- [ ] Обновить server-side workflow map под новые статусы.
- [ ] Проверить schema diff вручную на совместимость с текущими `orders`, `delivery_slots`, `order_history`.
### Task 6: Реализовать Edge Functions для клиентской ссылки и логистической передачи
**Files:**
- Create: `supabase/functions/_shared/delivery-invitations.ts`
- Create: `supabase/functions/create-delivery-invitation/index.ts`
- Create: `supabase/functions/get-delivery-invitation/index.ts`
- Create: `supabase/functions/confirm-delivery-choice/index.ts`
- Create: `supabase/functions/transfer-to-logistics/index.ts`
- Modify: `supabase/functions/README.md`
- [ ] Написать падающие tests for shared workflow/helpers where feasible.
- [ ] Реализовать создание активной ссылки без TTL-expiry logic, только по status guard.
- [ ] Реализовать confirm half-day choice и перевод в `Доставка согласована`.
- [ ] Реализовать transfer to logistics для reminder escalation.
- [ ] Обновить function README с request/response contract.
### Task 7: Перевести клиентский route с demo на реальный Supabase contract
**Files:**
- Modify: `src/pages/ClientDeliveryPage.jsx`
- Modify: `src/components/client/DeliveryChoiceFlow.jsx`
- Modify: `src/components/client/DeliveryStateNotice.jsx`
- Modify or Create: supporting client-side service file if needed
- [ ] Подключить загрузку invitation state из Edge Function.
- [ ] Подключить подтверждение выбора half-day.
- [ ] Показать серверные состояния:
- active choice
- already agreed
- transferred to logistics
- paid storage
- delivered
- [ ] Прогнать client flow tests и обновить их под реальный contract.
### Task 8: Описать `n8n` orchestration и внешние зависимости
**Files:**
- Create: `docs/integrations/n8n-delivery-flow.md`
- Modify: `docs/scenarios.md`
- [ ] Зафиксировать в docs:
- SMS #1
- SMS #2 after no click
- reminder after opened-but-not-confirmed
- transfer to logistics
- paid storage notification
- `1С` inbound/outbound responsibilities of customer
- [ ] Добавить webhook payload examples for `n8n`.
## Chunk 3: Contract Stage 3 End-To-End Integrations And Operations
### Task 9: Реализовать delivery result flow и integration payloads for `1С`
**Files:**
- Create: `supabase/functions/report-delivery-result/index.ts`
- Modify: `src/components/driver/DriverDeliveryPlanner.jsx`
- Modify: `src/components/driver/DriverDeliveryDetail.jsx`
- Modify: related driver tests if present
- [ ] Написать падающие tests на:
- `Доставлен`
- `Проблема доставки`
- возврат логисту после failed delivery
- [ ] Прогнать таргетированные driver/order service tests.
- [ ] Реализовать driver result payload preparation for `n8n`/`1С`.
- [ ] Обновить UI водителя для обязательной фиксации причины неуспешной доставки.
### Task 10: Завершить ручную ветку логиста и платное хранение
**Files:**
- Modify: `src/pages/DashboardPage.jsx`
- Modify: `src/components/logistics/BotControlPanel.jsx`
- Modify: `src/services/orderService.js`
- Modify: `src/services/orderService.test.js`
- [ ] Добавить логистические действия:
- ручное согласование
- перевод в платное хранение
- снятие с платного хранения после новой договоренности
- [ ] Закрепить audit entries/history comments for these transitions.
- [ ] Прогнать order/logistics tests.
### Task 11: Подготовить обучение и эксплуатационные документы
**Files:**
- Create: `docs/training/logistics-playbook.md`
- Create: `docs/training/driver-playbook.md`
- Modify: `docs/architecture.md`
- [ ] Описать сценарии логиста:
- auto agreement monitoring
- manual follow-up
- paid storage
- repeat delivery
- [ ] Описать сценарии водителя:
- confirmed route
- delivered
- failed delivery
- [ ] Обновить architecture doc под публичный client route и integrations layer.
## Chunk 4: Final Verification And Handoff
### Task 12: Полная техническая проверка
**Files:**
- Reference: `docs/superpowers/plans/2026-03-30-delivery-platform-contract-plan.md`
- [ ] Прогнать unit/integration tests.
- Run: `npm test`
- Expected: PASS
- [ ] Прогнать линтер.
- Run: `npm run lint`
- Expected: PASS
- [ ] Прогнать production build.
- Run: `npm run build`
- Expected: PASS
- [ ] Ручная проверка:
- role login
- demo/dashboard
- public client route
- logistics manual flow
- driver result flow
- integration payload visibility
### Task 13: Договорная приемка по этапам
**Files:**
- Reference: contract stage description
- Reference: `docs/training/logistics-playbook.md`
- Reference: `docs/training/driver-playbook.md`
- [ ] Подготовить demo checklist для Этапа 1.
- [ ] Подготовить production checklist для Этапа 2.
- [ ] Подготовить launch + training checklist для Этапа 3.
- [ ] Зафиксировать, какие входы со стороны Заказчика обязательны до каждой приемки:
- VPS and balance
- domain/subdomain
- SMS provider
- `1С` responsible person
- `1С` data contract