Delivery

NOTE

Статус: Live (HEAD 5e4ce54, 2026-05-06). BC закрыт в P2c (Delivery Rule aggregate, ADR-0038, CLOSED 2026-04-25) + Live-C (Layer 3c live refresh, CLOSED 2026-04-28).

DeliveryRule aggregate + Layer 3c live refresh: сроки доставки от поставщика per-warehouse, обогащённые admin-правилами и live-pull через customer credential.

Назначение

Дать proposal pipeline актуальный delivery breakdown по каждому supplier-offer’у: lead-time, sla buckets, applicable scope (canonical/manufacturer/category), priority resolution. Layer 3c позволяет live-refresh при наличии customer credential.

Статус документа

Область действия

Входит:

  • DeliveryRule aggregate (scope + lead-time + priority).
  • Engine: применить rules к candidate’у proposal.
  • Layer 3c live refresh — fetch fresh delivery через customer credential.
  • Admin HTTP /api/v1/admin/delivery/rules/*.

Не входит:

  • Стоимость доставки — это pricing BC (delivery cost rule).
  • Маршрутизация / выбор склада — proposal-level.
  • Логистика physical (трекинг) — out of scope.

Публичный контракт

Внутренний Go API

  • Engine.Apply(ctx, candidate) — выдаёт DeliveryBreakdown с lead-time per-warehouse.
  • RuleRepo.Upsert/Delete — admin CRUD.
  • Layer 3c через LiveDeliveryRefresher.Refresh(ctx, request) — fetch + cache warm.

HTTP

  • Admin CRUD /api/v1/admin/delivery/rules/*.

Внутренняя архитектура

  • domain/rule.goDeliveryRule aggregate.
  • domain/applies_to.go — scope (canonical / manufacturer / category / supplier).
  • domain/priority.go — priority resolution (specificity > priority > created_at).
  • domain/breakdown.goDeliveryBreakdown (per-warehouse lead-time).
  • domain/result.go — финальный result для proposal.
  • app/Engine — apply.
  • infra/pg/ — Repo.
  • infra/live/ — Layer 3c live-refresh adapters.

Зависимости

  • PostgreSQLdelivery_rule.
  • offers BCObservationWriter.UpsertLiveDelivery (Live-C).
  • credentials BCPool.Pick для live-refresh.
  • supplier connectors — REST/JSON для direct fetch.

Хранилище

  • delivery_rule — (scope, applies_to, lead_time_min/max, priority, version).

Тестирование

  • Unit: go test ./internal/core/delivery/...
  • Integration: -tags=integration для Repo + Live-C adapters (3 поставщика).

Наблюдаемость

  • Metrics: delivery_rules_applied_total{source}, delivery_live_refresh_total{outcome}, delivery_lead_time_p95_hours{supplier}.
  • Phase logs: delivery.apply.phase, delivery.live_refresh.phase.

Связанные документы