supersam/docs/superpowers/specs/2026-04-13-1c-delivery-ui-d...

4.1 KiB
Raw Permalink Blame History

1C Delivery UI Design Spec

Overview

The frontend is a delivery workspace centered on logisticians, drivers, admins, and the public client delivery page. Orders are imported from 1C; the web app does not create orders. Delivery automation starts only when the full client order set is ready.

Key Principles

  1. 1C is the source of truth for order creation and production progress. The web app never creates new orders; it receives them via import.
  2. Supabase is the source of truth for delivery workflow state. Invitations, slots, delivery-set groupings, and operator actions all live in Supabase.
  3. Delivery sets, not individual orders, are the primary unit. A client delivery set groups all orders for the same client and becomes actionable when every order in the set is accepted by QC (source_accept_at present, source_ship_at absent).
  4. The legacy SMS field is informational only. It must not start the new delivery scenario.
  5. The client is not an authenticated user. The client uses a public invitation link.

Screen Flow

Operator Login

  • Email + OTP login via Supabase Auth.
  • Unknown email shows: "Email не найден в системе. Обратитесь к администратору."
  • After sending OTP, the UI tells the user to check inbox and Spam.
  • Roles: logistician, driver, admin (and legacy manager, production_lead).

Logistician Workspace

The logistician lands on the logistics section of the dashboard. The primary widget is the LogisticsReadinessBoard showing delivery sets grouped into buckets:

Bucket Russian Label Meaning
approaching На подходе Some orders in the set have not yet been accepted by QC
ready_to_launch Готово к запуску All orders accepted, delivery can be started
awaiting_client Ожидает клиента Invitation sent, waiting for client choice
manual_work Нужна ручная работа Transferred to logistician, paid storage, or problem
agreed Согласовано Client confirmed the delivery slot
completed Завершено All orders in the set delivered

Clicking a set opens the DeliverySetDetailPanel showing:

  • Set name, city, order count, linked bill texts
  • Per-order source fields: 1C order number, production steps (saw, glue, H-glue, curve, accept, ship)
  • Slot state if available
  • Manual action placeholders (future: start invitation, assign driver)

Driver Workspace

The driver sees assigned deliveries with:

  • Address, client name, phone, city
  • Delivery time slot (date + half-day)
  • Delivery set reference (1C number, set name)
  • Quick status transitions: Загружен → В пути → Доставлен / Проблема доставки

Client Delivery Page

Public page at /delivery/:token. States:

  • awaiting_choice / opened / reminder_sent: Shows DeliverySlotsPicker with date + half-day slots, then DeliveryChoiceFlow buttons.
  • transferred_to_logistics: "С вами свяжется логист"
  • paid_storage: "Платное хранение"
  • agreed: "Доставка уже согласована"
  • delivered: "Заказ уже доставлен"

Data Model Key Fields

public.orders source fields (imported from 1C)

  • source_order_number, source_order_date, source_customer_name, source_customer_phone, source_customer_email, source_customer_city, source_total_sum, source_paid_at, source_gateway, source_associated_bills_text, source_production_at, source_saw_at, source_glue_at, source_h_glue_at, source_curve_at, source_accept_at, source_ship_at, source_payload jsonb

public.orders delivery-set fields (computed/derived)

  • delivery_set_key, delivery_set_name, delivery_set_status, delivery_set_ready_at, delivery_ready_reason, source_sms_legacy_at

Readiness Rule

A single imported order is ready when source_accept_at IS NOT NULL AND source_ship_at IS NULL. A client delivery set is ready only when all linked imported orders are ready.