stable версия 1.0
FSP Core 1.0
Общий язык: услуги, единицы начисления, категории товара, габаритные профили, оператор и склад.
Общий язык протокола. Всё остальное ссылается сюда: цена начисляется за услугу из каталога по единице из справочника метрик, мощность продаётся под категорию товара, заявка описывается теми же кодами.
Зависимостей нет. Объявить любой другой модуль без core нельзя.
Реестры
Каталог — что вообще делают на складе
| Реестр | Что внутри |
|---|---|
catalog_services |
59 услуг: 53 базовых и 6 отраслевых. Код неизменяем после публикации (CAT-001) |
categories |
Классификатор товарных категорий, корень any |
parameters |
Варианты выполнения операции. Вариант не создаёт новую услугу (CAT-011) |
billing_metrics |
Закрытый справочник единиц начисления и правил округления |
materials |
Материалы отдельно от операций (CAT-003) |
exclusions |
Явные границы: что не получает код услуги (субаренда, штрафы, реклама, самовыкуп) |
Связи — нормализованные, проверяются на целостность
| Реестр | Что связывает |
|---|---|
category_links |
Услуга ↔ категория: применимость (CAT-006) |
service_parameters |
Услуга ↔ параметр, с признаком обязательности |
service_metrics |
Услуга ↔ допустимая единица начисления. Источник истины для billing_metric (CAT-010) |
category_mapping |
Категории маркетплейсов ↔ категории стандарта, версионируемо (MAP-001) |
Габариты и вычисления
| Реестр | Что задаёт |
|---|---|
size_profiles |
Размерные классы версионируемого профиля. Класс всегда квалифицирован как <profile>:<version>:<class> (SIZE-006) |
derived_metrics |
Канонические формулы: сумма сторон, объём, объёмный и тарифицируемый вес (SIZE-005) |
Стороны
| Реестр | Что задаёт |
|---|---|
operators |
Оператор и его склады. На operator_id ссылается rate_cards.provider_id в FSP Pricing |
Правила
rules — нормативные правила модуля: CAT-* (каталог), SIZE-* (габариты), MAP-* (маппинг категорий), DATA-* (целостность), SCOPE-* (границы), PROFILE-* (манифест и согласование сторон).
Почему оператор и склад лежат здесь
operator_location нужен и мощностям, и смете, и будущим заказам. Здесь лежит только медленно меняющееся: кто это и где находится. Свободная площадь и пропускная способность меняются часто и описаны в FSP Capacity.
Что здесь принципиально
Каталог определяет смысл операции, но не её цену и не её исполнителя (CAT-002, CAT-011). Поэтому два прайса раскладываются в одни и те же коды и становятся сравнимыми.
Нормативные правила
Обязательны для соответствия модулю. Префиксы объявлены в манифесте:
CAT-*, SIZE-*, MAP-*, DATA-*, SCOPE-*, PROFILE-*.
CAT-001Коды стандартных услуг неизменяемы после публикации.CAT-002Одна строка прайса ФФ может включать несколько стандартных услуг.CAT-003Материалы хранятся отдельно от операций.CAT-004Для каждой услуги в каталоге хранится полный закрытый список допустимых billing_metric v1: код и название. Значение вне списка требует новой версии стандарта.CAT-005Разделы каталога используются только для навигации и не определяют категорийную применимость услуги.CAT-006Применимость услуги к товарной категории задаётся только на реестре «Связи категорий» по кодам услуги и категории.SIZE-001Размерные классы принадлежат версионируемому профилю.SIZE-002ФФ может использовать собственный профиль размеров.SIZE-003Если товар совпал с несколькими классами профиля, выбирается класс с минимальным числовым priority. Если совпадений нет, возвращается SIZE_PROFILE_NO_MATCH.MAP-001Категории WB/Ozon сопоставляются отдельными версионируемыми строками.CAT-007Связь с категорией any распространяется на все дочерние категории; более специфичная связь не отменяет any.CAT-008Каждый параметр услуги обязан существовать на реестре «Параметры», а связь — на реестре «Параметры услуг».CAT-009Тип услуги хранится явно: base или industry. Положение строки и название раздела не являются типом.SIZE-004Отсутствие обязательного входа размерного правила возвращает SIZE_PROFILE_INPUT_MISSING; null никогда не считается совпадением.SIZE-005sum_sides_cm, max_side_cm, volume_m3, volumetric_weight_kg и chargeable_weight_kg вычисляются только по реестру «Расчётные метрики».MAP-002Для пары source_system + source_category_id периоды active-маппингов не пересекаются; результат сопоставления должен быть единственным.DATA-001Все id уникальны в пределах сущности; все ссылки обязаны существовать; публикация блокируется при любой ошибке на реестре «Проверки».CAT-010Источник истины для допустимых billing_metric — реестр «Метрики услуг»; строковые списки каталога являются только витриной.SIZE-006size_class_id всегда квалифицирован как <profile>:<version>:<class>; использование S/M/L без профиля запрещено.SIZE-007Договорный размерный профиль и фактическая логика калькулятора хранятся раздельно; расхождение блокирует публикацию тарифа.CAT-011Варианты материала, размера, маршрута и объёма не создают новую услугу: они задаются материалом, параметром, метрикой или условием цены.SCOPE-001Позиции из реестра «Исключения» не добавляются в каталог и при импорте получают статус out_of_scope.SCOPE-002Самовыкуп и стимулированный отзыв всегда отклоняются и не могут входить в коммерческий пакет MPFIT.PROFILE-001Манифест публикуется по адресу /.well-known/fsp и является единственным источником сведений о поддерживаемых модулях. Договорённость вне манифеста не заменяет его.PROFILE-002Объявлять модуль, чьи зависимости не объявлены, запрещено: манифест с таким набором модулей недействителен.PROFILE-003Активны только модули, объявленные обеими сторонами. Для каждого общего модуля берётся пересечение версий и выбирается наибольшая; при пустом пересечении модуль исключается.PROFILE-004Исключение модуля исключает все модули, которые от него зависят, и все расширения, чей родительский модуль исключён. Пересчёт повторяется до стабилизации.PROFILE-005Итог согласования вычисляет и фиксирует принимающая сторона, возвращая его в ответе. При расхождении сторон действует итог принимающей.PROFILE-006Для модуля с уровнями соответствия согласованным считается наименьший общий уровень. Требование уровня выше согласованного не исключает сторону из обмена, а возвращается кодом непокрытия.PROFILE-007Имя расширения имеет вид x-<vendor>:<code> и обязано указывать родительский модуль. Расширение только добавляет поля и никогда не переопределяет поля стандарта.PROFILE-008Неизвестное поле, модуль или расширение игнорируется и не является ошибкой обмена. Отсутствие у другой стороны объявленного модуля тоже не ошибка.
Схема
JSON Schema 2020-12: /1.0/core/schema.json.
Определения: service_code, category_id, billing_metric, size_class_id, marketplace, scheme, weekday, operator, operator_location.
Манифест модуля
{
"module": "core",
"title": "FSP Core",
"version": "1.0",
"status": "stable",
"summary": "Общий язык: услуги, единицы начисления, категории товара, габаритные профили, оператор и склад.",
"depends": [],
"registries": [
"catalog_services",
"categories",
"category_links",
"parameters",
"service_parameters",
"billing_metrics",
"service_metrics",
"materials",
"exclusions",
"size_profiles",
"derived_metrics",
"category_mapping",
"operators",
"rules"
],
"rule_prefixes": [
"CAT",
"SIZE",
"MAP",
"DATA",
"SCOPE",
"PROFILE"
],
"schema": "schema.json",
"profile": "../../profile/fsp-profile.schema.json"
}