Сервис рассчитывает возможность и стоимость доставки по заданному тарифу, точке на карте и весу заказа. Также отдаёт «книгу тарифов» (полный справочник тарифных зон и сеток цен).
GetTariffsBookAsync(): TariffsBook - вернуть текущую конфигурацию: все тарифы и все зоны.SearchDeliveryInfoAsync(tariffName, pin, weight): DeliveryInfo - вычислить зону по координатам, подобрать подходящую «ступень» веса и вернуть цену. Если доставка недоступна - вернётся DeliveryInfo.NotAvailable (IsAvailable = false).Контроль доступа осуществляется из NBSession (как и в других сервисах): вызов выполняется от имени текущего пользователя.
TariffsBookСправочник, который агрегирует:
Tariff[] Tariffs - перечень тарифов (название + «сетка» цен).TariffZone[] Zones - перечень геозон (имя + полигон координат).Tariff и TariffNetTariff.Name - имя тарифа (например, «Курьер», «Самовывоз-город»).Tariff.Net[] - набор правил «до веса X → цена Y» в привязке к зоне:
ZoneName - имя зоны, к которой относится правило,UntilWeightKg - верхняя граница веса (включительно),Price - цена.TariffZoneName - идентификатор зоны (например, «City», «RegionA»).Coordinates[] - массив точек полигона зоны (для попадания по pin).DeliveryConfigКонфигурация, из которой формируется «книга тарифов»:
Zones[] - зоны,Tariffs[] - тарифы.DeliveryInfoРезультат поиска:
IsAvailable - доступна ли доставка,TariffName, ZoneName - что выбрано,UntilWeightKg - порог, сработавший по весу,Price - расчётная стоимость.Tariff.Net.ZoneName должен совпадать с TariffZone.Name - это ключ связывания.[0.5, 1, 2, 5, 10, 20, 999].DeliveryInfo.NotAvailable. Это унифицирует ответы.Сервис читает конфиг (зоны + тарифы) из config.json в DeliveryConfig и формирует TariffsBook. Изменение конфигурации осуществляется заменой json файла. Для обновления конфигурации требуется перезагрузка сервиса.