3.7 KiB
3.7 KiB
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) приходят из секцииadapterYAML-конфига; запрещён хардкод credentials. - Ошибки CSE (
Properties.Error→List[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) и возвращает результат регистрации с номером документа.- Адаптер использует значения из секции
adapterYAML-конфига, включая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