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.
Статус документа
- Тип знания:
current service - Статус реализации: Engine always-on с дня one (ADR-0038); Layer 3c live-refresh per Live-C; concrete adapters etm/iek/systeme.
- Текущее место кода:
backend/internal/core/delivery/{domain,app,infra}/. - Что читать дальше:
../../20-architecture/adr/0038-delivery-rule-aggregate.md,../../20-architecture/adr/0035-proposal-pipeline-layering.md.
Область действия
Входит:
DeliveryRuleaggregate (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.go—DeliveryRuleaggregate.domain/applies_to.go— scope (canonical / manufacturer / category / supplier).domain/priority.go— priority resolution (specificity > priority > created_at).domain/breakdown.go—DeliveryBreakdown(per-warehouse lead-time).domain/result.go— финальный result для proposal.app/Engine— apply.infra/pg/— Repo.infra/live/— Layer 3c live-refresh adapters.
Зависимости
- PostgreSQL —
delivery_rule. - offers BC —
ObservationWriter.UpsertLiveDelivery(Live-C). - credentials BC —
Pool.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.
Связанные документы
- ADR:
0038,0035. - Memory:
tracium_p2c_delivery_execution.md,tracium_live_c_execution.md. - Соседи:
../stock/,../pricing/.