Fulfillment Services Protocol
Общий язык для фулфилмента
Чтобы сравнить двух операторов, сегодня нужно созвониться и получить Excel. FSP описывает прайс, свободные мощности и заявку машиночитаемо: сравнение и смета считаются, а не выясняются перепиской.
Модули
Протокол собран из модулей, каждый со своей версией. Правка в описании цен не поднимает версию каталога услуг и не заставляет никого переделывать интеграцию.
FSP Core
Услуги, единицы начисления, категории товара, габаритные профили, оператор и склад
FSP Pricing
Тарифный план, предложения, правила цены, условия, модификаторы, ступени
FSP Capacity
Витрина склада, свободная площадь и пропускная способность, направления
FSP Quote
Запрос сметы операциями и объёмом, ответ со сметой и кодами непокрытия
FSP Order
Поставка на склад, отгрузка, возврат
FSP Tracking
События по заказу и остатки у оператора
order и tracking не описаны намеренно: спецификация вперёд спроса
переписывается после первой живой интеграции.
Три механики
Сторона объявляет, что умеет
Манифест по адресу /.well-known/fsp перечисляет поддерживаемые модули, версии и
уровни. Две стороны сводят манифесты и работают по пересечению — до первого запроса, а не
после. Как это устроено.
Уровни вместо порога входа
Требовать от всех максимальной глубины бессмысленно: прайс из Excel так и останется прайсом из Excel. Поэтому модуль цен определяет 3 уровня, и оператор объявляет достигнутый.
| Уровень | Название | Типичный источник |
|---|---|---|
| L1 | Плоский прайс | Прайс-лист, где у строки есть услуга, единица начисления и одна ставка |
| L2 | Условия и модификаторы | Ставка зависит от габаритов, схемы, маршрута или объёма; наценки за срочность и минимальный чек |
| L3 | Ступенчатые тарифы | Бесплатный период хранения, разная цена первой и последующих единиц, матрицы цены по количеству |
Запрос уровня выше не выкидывает оператора из выдачи, а возвращает код
pricing_level_insufficient: понятную задачу, а не отказ.
Промах объясняется кодом
Ответ на запрос сметы несёт причины непокрытия из закрытого реестра из 21 кода: не берёт категорию, нет режима хранения, объём ниже минимального. Заявитель понимает, почему выдача узкая; оператор видит, что поправить. Все коды.
Проверяемость
Стандарт, который нельзя прогнать, — это PDF. Здесь канон машиночитаем, а его целостность проверяет валидатор из 40 блокирующих проверок: ссылочная целостность реестров, состав и зависимости модулей, уровни соответствия, перечисления схем против реестров, разрешимость ссылок между схемами.
git clone https://github.com/open-fsp/fsp.git
cd fsp && python3 validate.py Проверяли не на придуманных примерах: 166 тарифных варианта из трёх реальных прайс-листов операторов разобраны в термины стандарта. Сами прайсы не публикуются — это данные их владельцев. Публично лежит результат: какие конструкции понадобились и что осталось непокрытым, 8 строк в реестре открытых дыр.
Машиночитаемые артефакты отдаются по постоянным адресам:
/1.0/<модуль>/schema.json,
реестры в JSON и CSV, схема манифеста. Список.