11 KiB
Delivery Orchestration 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: Реализовать рабочую orchestration-схему согласования доставки на базе Supabase + Edge Functions + n8n + FTP XML, включая SMS-тайминги, ручную работу логиста, платное хранение и передачу результата доставки во внешнюю систему.
Architecture: Supabase остается источником истины по заказам, приглашениям, статусам и истории. n8n становится orchestration-слоем: читает XML с FTP, вычисляет SLA по времени, вызывает Edge Functions, отправляет SMS и передает статусы во внешние системы. Приложение показывает оператору и клиенту только актуальное состояние из Supabase.
Tech Stack: React 18, Vite, Supabase SQL, Supabase Edge Functions, n8n, FTP XML polling, SMS provider, external accounting integration.
File Structure
- Create:
docs/integrations/delivery-orchestration.md— итоговая архитектура процесса и распределение ответственности. - Create:
docs/integrations/n8n-delivery-flow.md— рабочие contracts для n8n workflow и payload examples. - Modify:
docs/architecture.md— короткая ссылка на orchestration-слой. - Modify:
docs/scenarios.md— привести текстовые сценарии к фактической схеме. - Modify:
supabase/schema.sql— добавить недостающие orchestration fields, если они еще не добавлены. - Modify:
supabase/functions/_shared/delivery-invitations.ts— выровнять helper map под финальную схему. - Modify:
supabase/functions/create-delivery-invitation/index.ts - Modify:
supabase/functions/get-delivery-invitation/index.ts - Modify:
supabase/functions/confirm-delivery-choice/index.ts - Modify:
supabase/functions/transfer-to-logistics/index.ts - Modify:
supabase/functions/report-delivery-result/index.ts - Modify:
supabase/functions/README.md - Modify:
src/pages/ClientDeliveryPage.jsx— показать итоговые статусы и ошибки по production flow. - Modify:
src/components/logistics/BotControlPanel.jsx— ручные действия логиста. - Modify:
src/components/driver/DriverDeliveryPlanner.jsx - Modify:
src/components/driver/DriverDeliveryDetail.jsx - Modify:
src/services/deliveryInvitationApi.js - Modify: related tests for functions, client flow, logistics and driver behavior.
Chunk 1: Orchestration Contracts
Task 1: Зафиксировать архитектурное решение “n8n orchestrates, Supabase stores truth”
Files:
-
Create:
docs/integrations/delivery-orchestration.md -
Modify:
docs/architecture.md -
Step 1: Write the architecture document
Зафиксировать:
-
XML на FTP читает
n8n -
n8nзапускает сценарии по времени -
Supabaseхранит статусы и историю -
Edge Functionsвалидируют переходы -
клиентское приложение только читает/подтверждает состояние
-
Step 2: Add a short summary into
docs/architecture.md
Добавить отдельный блок про orchestration layer и связь с n8n.
- Step 3: Manual doc review
Проверить, что документ явно отвечает на вопрос:
- где живет расписание;
- кто читает XML;
- где отправляются SMS;
- кто возвращает статус в учетную систему.
Task 2: Подготовить n8n-контракт для XML и SLA
Files:
-
Create:
docs/integrations/n8n-delivery-flow.md -
Modify:
docs/scenarios.md -
Step 1: Describe
FTP XML Poller
Описать:
-
как читается XML;
-
какие поля заказа считаются сигналом “полностью готов”;
-
как
n8nпонимает, что заказ новый для delivery flow. -
Step 2: Describe timeout workflows
Зафиксировать:
-
первая SMS
-
повторная SMS через 3 часа
-
передача логисту еще через 3 часа
-
reminder через 1 час после opened/no-confirm
-
передача логисту через 2 часа после reminder
-
SMS о платном хранении
-
Step 3: Add payload examples
Добавить примеры payload между:
n8n -> create-delivery-invitationn8n -> transfer-to-logisticsn8n -> report-delivery-resultn8n -> SMS provider
Chunk 2: Supabase State Model
Task 3: Проверить, что в Supabase хватает данных для SLA-логики
Files:
-
Modify:
supabase/schema.sql -
Modify:
supabase/functions/README.md -
Step 1: Audit current schema against the flow
Проверить наличие/нехватку полей:
-
sent_at -
opened_at -
confirmed_at -
logistics_transferred_at -
paid_storage_at -
delivered_at -
reminder markers
-
export markers for external system
-
Step 2: Add missing fields if required
Если чего-то не хватает, добавить минимальные поля без дублирования уже существующих timestamps.
- Step 3: Update function README
Описать, какие функции вызываются n8n и какие timestamps/statuses они меняют.
Task 4: Выровнять Edge Functions под финальную схему
Files:
-
Modify:
supabase/functions/_shared/delivery-invitations.ts -
Modify:
supabase/functions/create-delivery-invitation/index.ts -
Modify:
supabase/functions/get-delivery-invitation/index.ts -
Modify:
supabase/functions/confirm-delivery-choice/index.ts -
Modify:
supabase/functions/transfer-to-logistics/index.ts -
Modify:
supabase/functions/report-delivery-result/index.ts -
Test:
supabase/functions/_shared/delivery-invitations.test.ts -
Test:
supabase/functions/_shared/workflow.test.ts -
Step 1: Write failing tests for missing state transitions
Покрыть:
-
awaiting response
-
reminder state
-
transfer to logistics
-
paid storage
-
delivered
-
failed delivery returning to logistics
-
Step 2: Run targeted function tests
Run: npm test -- supabase/functions/_shared/delivery-invitations.test.ts supabase/functions/_shared/workflow.test.ts
Expected: FAIL if contracts are incomplete.
- Step 3: Implement minimal changes
Довести helpers и functions до полного соответствия схеме.
- Step 4: Re-run targeted tests
Run: npm test -- supabase/functions/_shared/delivery-invitations.test.ts supabase/functions/_shared/workflow.test.ts
Expected: PASS
Chunk 3: App Operator Flows
Task 5: Довести клиентскую страницу до финального production behavior
Files:
-
Modify:
src/pages/ClientDeliveryPage.jsx -
Modify:
src/components/client/DeliveryChoiceFlow.jsx -
Modify:
src/components/client/DeliveryStateNotice.jsx -
Modify:
src/services/deliveryInvitationApi.js -
Test:
src/components/client/DeliveryChoiceFlow.test.jsx -
Step 1: Write or extend failing tests for all terminal states
Покрыть:
-
awaiting choice
-
agreed
-
transferred to logistics
-
paid storage
-
delivered
-
invalid/expired token
-
Step 2: Run targeted client tests
Run: npm test -- src/components/client/DeliveryChoiceFlow.test.jsx
Expected: FAIL if state rendering is incomplete.
- Step 3: Implement minimal UI changes
Сделать экраны и сообщения строго соответствующими схеме.
- Step 4: Re-run client tests
Run: npm test -- src/components/client/DeliveryChoiceFlow.test.jsx
Expected: PASS
Task 6: Довести ручную ветку логиста и ветку водителя
Files:
-
Modify:
src/components/logistics/BotControlPanel.jsx -
Modify:
src/pages/DashboardPage.jsx -
Modify:
src/components/driver/DriverDeliveryPlanner.jsx -
Modify:
src/components/driver/DriverDeliveryDetail.jsx -
Modify: related logistics/driver tests if needed
-
Step 1: Add logistics actions
Нужны действия:
-
согласовать вручную
-
перевести в платное хранение
-
повторно согласовать после проблемной доставки
-
Step 2: Add driver result actions
Нужны действия:
-
отметить
Доставлен -
отметить
Проблема доставки -
передать причину обратно в логистику
-
Step 3: Run targeted UI/service tests
Run: npm test -- src/services/orderService.test.js src/services/orderViews.test.js
Expected: PASS
Chunk 4: n8n Implementation And Launch Checklist
Task 7: Реализовать сами n8n workflows
Files:
-
Reference:
docs/integrations/n8n-delivery-flow.md -
Step 1: Build
FTP XML Pollerworkflow
Настроить:
-
cron trigger
-
чтение XML с FTP
-
парсинг готовых заказов
-
сверку с
Supabase -
Step 2: Build
Delivery Offer Dispatcher
Настроить:
-
вызов
create-delivery-invitation -
отправку первой SMS
-
Step 3: Build
Delivery Reminder Scheduler
Настроить:
-
повторную SMS
-
reminder после opened/no-confirm
-
передачу логисту по timeout
-
Step 4: Build
Paid Storage Notifier
Настроить SMS при статусе Платное хранение.
- Step 5: Build
Delivery Result Exporter
Настроить передачу результата доставки во внешнюю систему.
Task 8: Финальная проверка
Files:
-
Reference:
docs/integrations/delivery-orchestration.md -
Reference:
docs/integrations/n8n-delivery-flow.md -
Reference:
docs/superpowers/plans/2026-04-12-delivery-orchestration-implementation.md -
Step 1: Run full test suite
Run: npm test
Expected: PASS
- Step 2: Run linter
Run: npm run lint
Expected: PASS
- Step 3: Run production build
Run: npm run build
Expected: PASS
- Step 4: Execute manual end-to-end checklist
Проверить руками:
- XML отметил заказ как готовый
- ушла первая SMS
- открытие ссылки фиксируется
- reminder отправляется по времени
- заказ уходит логисту при timeout
- логист переводит в согласовано или в платное хранение
- водитель фиксирует доставку или проблему
- итоговый статус уходит во внешнюю систему