Order Service

Ответственность

Управление заказами, статусная машина и фиксация факта оплаты:

  • Заказы (BR 2.1) — CRUD заказов, автоматическая нумерация per-store per-day
  • Позиции заказа (BR 2.1) — добавление/удаление позиций (только в статусе new)
  • Статусная машина (BR 2.1)new in_progress ready closed | cancelled
  • Фиксация оплаты (BR 2.1) — запись факта оплаты (способ, сумма, RRN), переход в ready

Phase 2+ (не реализовано): кухонный дисплей (in_progress), возвраты, скидки/промокоды, лояльность, авто-списание со склада, привязка клиента.

Отчёт по смене (BR 2.2)

  • Internal endpoint GET /internal/orders/shift-report — агрегация заказов за период для X/Z отчёта
  • Фильтрация по paid_at (дата оплаты), store_id, employee_id (optional)
  • Возвращает: выручку, разбивку по способам оплаты, количество заказов, топ товаров
  • Вызывается из User Service при формировании отчёта по смене

Функции

ФункцияОписание
Создание заказаСоздаёт заказ в статусе new с автогенерацией номера per-store per-day
Добавление позицииДобавляет товар в заказ (только new). Денормализует product_name, unit_price, модификаторы
Удаление позицииУдаляет товар из заказа (только new). Пересчитывает total
Фиксация оплатыЗаписывает payment_method, paid_amount, rrn, card_last4. Переводит в ready
Завершение заказаПереводит из ready в closed (выдан клиенту)
Отмена заказаПереводит в cancelled из new/in_progress/ready. Требует причину
Список заказовФильтрация по store_id, status, date_from, date_to. Ролевая фильтрация
Детали заказаЗаказ с позициями, данными оплаты
Агрегация для отчёта сменыФинансовая сводка за период (internal, BR 2.2)

Бизнес-правила

  1. Номер per-store per-day — формат “001”, “002”…, сбрасывается ежедневно для каждой ТТ
  2. Позиции только в new — добавлять/удалять можно пока статус new
  3. Отмена не из closed — после закрытия отмена невозможна (возврат — Phase 2)
  4. Оплата — фиксация факта — Order Service не проводит платёж, только записывает результат от POS
  5. Денормализация — product_name, unit_price, модификаторы копируются при создании позиции
  6. Пересчёт total — сумма заказа пересчитывается при добавлении/удалении позиций

Ролевой доступ

ДействиеФраншизаФранчайзиМенеджерКассир
GET /orders (список)Все ТТСвои ТТСвоя ТТСвоя ТТ
GET /orders/{id}Все ТТСвои ТТСвоя ТТСвоя ТТ
POST /ordersДа
POST /orders/{id}/itemsДа
DELETE /orders/{id}/items/{itemId}Да
POST /orders/{id}/payДа
POST /orders/{id}/completeДаДа
POST /orders/{id}/cancelДаСвои ТТСвоя ТТСвой заказ
PATCH /orders/{id}ДаДа

Зависимости

  • PostgreSQL (order_db) — основное хранилище
  • Auth Service — JWT-валидация (franchise_id, store_ids, role)
  • Catalog Service — товары и цены для денормализации в позиции (lookup при создании позиции не требуется — POS передаёт все данные)
  • Store Service — валидация store_id при создании заказа
  • User Service — вызывает internal endpoint shift-report (BR 2.2)

Конфигурация

ПеременнаяОписаниеDefault
DB_HOSTPostgreSQL hostlocalhost
DB_PORTPostgreSQL port5432
DB_NAMEDatabase nameorder_db
DB_USERDatabase userorder_service
DB_PASSWORDDatabase password
SERVER_PORTHTTP port3005
JWT_SECRETJWT signing key

Ссылки