Добавлен провайдер доставки CSE: SOAP-адаптер (Calc + SaveDocuments), маршрутизация init-payment по провайдеру, обобщение tariff_code до строки, география CSE в cities_map
Deploy / deploy (push) Failing after 52s
Deploy / deploy (push) Failing after 52s
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
---
|
||||
id: 036
|
||||
title: Add CSE SOAP delivery provider adapter
|
||||
status: TODO
|
||||
created: 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.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`) и
|
||||
возвращает результат регистрации с номером документа.
|
||||
- Адаптер использует значения из секции `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`
|
||||
Reference in New Issue
Block a user