Files
g2s-aggregator/spec/tasks/036_add_cse_delivery_provider_adapter.md
T

3.7 KiB
Raw Blame History

id, title, status, created
id title status created
036 Add CSE SOAP delivery provider adapter TODO 2026-05-30

Context

Нужен второй провайдер доставки CSE (система «Карго»). CSE предоставляет SOAP/1C web-сервис (namespace http://www.cargo3.ru, endpoint Web1C.1cws), авторизация — login/password строковыми параметрами в теле запроса. Данные передаются универсальными структурами Element/Row; справочные значения — GUID. Спецификация методов: Calc (расчёт стоимости) и SaveDocuments (регистрация заказа). Поллинг статуса и получение PDF в этой задаче не реализуются.

Goal

Реализовать adapter-пакет CSE: SOAP-транспорт и сериализация Element, CSEClient с методами calc()/save_order(), мапперы расчёта и регистрации, и CSEProvider, реализующий контракт DeliveryProvider плюс расчёт цены для валидации платежа и регистрацию заказа.

Constraints

  • Только Adapter layer; без business decisions, фильтрации и сортировки.
  • Весь XML/HTTP IO инкапсулирован в пакете cse/.
  • Параметры CSE (base_url, login, password, retry policy, timeout, cache TTL) приходят из секции adapter YAML-конфига; запрещён хардкод credentials.
  • Ошибки CSE (Properties.ErrorList[Description]) маппятся в иерархию ProviderClientError/ProviderRequestError.
  • Валюта RUR нормализуется в RUB; цена — Decimal в рублях.
  • Не изменять файлы в spec/.

Acceptance criteria

  • Существует пакет app/adapters/delivery_providers/cse/ с SOAP-сериализацией, клиентом, мапперами и CSEProvider (name = "cse").
  • CSEProvider.get_prices возвращает унифицированные DeliveryPrice из ответа Calc с provider="cse" и строковым tariff_code (GUID).
  • CSEProvider.get_payment_price возвращает выбранный тариф для валидации платежа.
  • CSEProvider.register_order выполняет SaveDocuments (DocumentType=Order) и возвращает результат регистрации с номером документа.
  • Адаптер использует значения из секции adapter YAML-конфига, включая cse_timeout_seconds и cse_cache_ttl_seconds.
  • Добавлены поля cse_* в AdapterConfig и шаблоны конфигов.

Definition of Done

  • Реализованы soap, client, errors, mapper, order_mapper, CSEProvider.
  • Добавлены cse_* поля в AdapterConfig, config.template.yaml, config.test.yaml.
  • Adapter unit-тесты покрывают сериализацию/парсинг, mapping Calc/SaveDocuments и обработку ошибок.

Tests

  • Unit-тесты SOAP-сериализации и парсинга Element.
  • Unit-тесты мапперов на XML-примерах из спецификации.
  • Тесты применения параметров CSE из секции adapter.
  • Для внешних HTTP взаимодействий использовать stubs/mocks.

Commands

  • poetry run pytest tests/adapters/delivery_providers/cse -q