--- id: 038 title: Route init-payment validation and registration by provider status: TODO created: 2026-05-30 --- ## Context С появлением второго провайдера CSE `AggregatorService` должен выбирать адаптер валидации цены и регистрации заказа по провайдеру выбранного тарифа. Сейчас сервис жёстко использует единственный CDEK-адаптер. Поле `provider` уже присутствует в `DeliveryPrice`/`SystemDataTariff`. Регистрация заказа выполняется при уведомлении об оплате TBank. Поллинг статуса и email в этой задаче не затрагиваются. ## Goal Маршрутизировать валидацию цены и регистрацию заказа по `request.system_data.tariff.provider`, подключить `CSEProvider` в DI рядом с CDEK, сохранять выбранного провайдера и номер заказа CSE в persistence. ## Constraints - Controller вызывает Service без бизнес-ветвления. - Service не содержит чистых бизнес-правил; маршрутизация — оркестрация. - Не изменять контракт API, кроме уже обобщённого `tariff_code`. - Колонки `cdek_*` не изменять; добавить `provider` и `cse_order_number` миграцией. - Не изменять файлы в `spec/`. ## Acceptance criteria - `GET /api/v1/delivery/calculate` возвращает агрегированные тарифы CDEK и CSE. - `AggregatorService` выбирает адаптер валидации/регистрации по имени провайдера тарифа; общий тип результата регистрации не привязан к CDEK. - При оплате заказа с тарифом CSE регистрация выполняется через `CSEProvider`; в `orders` сохранены `provider` и `cse_order_number`. - DI в контроллере доставки инстанцирует и подключает `CSEProvider`. ## Definition of Done - [ ] `AggregatorService` маршрутизирует по провайдеру (mapping адаптеров). - [ ] Обобщён тип результата регистрации заказа. - [ ] Модель `Order` и репозиторий дополнены (`provider`, `cse_order_number`, `mark_cse_order_registered`); добавлена миграция. - [ ] DI контроллера подключает CDEK и CSE. - [ ] Тесты маршрутизации валидации/регистрации по провайдеру проходят. ## Tests - Service unit-тесты маршрутизации (моки CDEK/CSE адаптеров). - Тесты persistence для `provider`/`cse_order_number`. ## Commands - `poetry run pytest tests/services -q`