FSP 1.0

FSP / Модули / core

stable версия 2.0

FSP Core 2.0

Общий язык: услуги, единицы начисления, категории товара, габаритные профили, оператор и склад.

Общий язык протокола. Всё остальное ссылается сюда: цена начисляется за услугу из каталога по единице из справочника метрик, мощность продаётся под категорию товара, заявка описывается теми же кодами.

Зависимостей нет. Объявить любой другой модуль без core нельзя.

Реестры

Каталог — что вообще делают на складе

Реестр Что внутри
catalog_services 61 услуга: 55 базовых и 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
destinations Пункты назначения: склады и сортировочные центры маркетплейсов. Код неизменяем (CAT-012)

Почему пункты назначения лежат здесь

«Доставка до Коледино» и «доставка до Каледино» — два разных прайса, которые невозможно сравнить, хотя склад один. Пока направление было свободной строкой, сравнение упиралось в орфографию.

Реестр даёт направлению код, на который ссылаются маршрут в FSP Capacity, условие цены в FSP Pricing и запрос сметы в FSP Quote. Название рядом остаётся, но идентификатором не является (CAP-005).

Реестр собран из официальных справочников маркетплейсов и содержит 1039 пунктов: склады поставок и точки сдачи Wildberries, фулфилмент-центры, сортировочные и распределительные центры, кросс-доки и точки приёма заказов Ozon. У каждой строки лежит идентификатор маркетплейса, поэтому ссылка однозначна и на его стороне.

У каждого пункта есть страна в коде ISO 3166-1. Это не формальность: в реестре уже лежат 31 точка Казахстана, Беларуси, Армении и Киргизии, и без страны склад в Алматы неотличим от склада в Астрахани по юрисдикции, валюте и режиму НДС. Страна обязательна и у склада оператора.

Список площадок не ограничен Россией: кроме Wildberries, Ozon, Яндекс Маркета, Авито, Ламоды, М.Видео и Леруа в нём есть Kaspi (Казахстан) и Uzum (Узбекистан).

Пункты выдачи покупателю и постаматы в реестр не заносятся. Их тысячи, состав меняется постоянно, и вести такой список внутри стандарта невозможно. Ссылка на них идёт внешним идентификатором маркетплейса — тем самым, которым он зовёт их у себя.

Правила

rules — нормативные правила модуля: CAT-* (каталог), SIZE-* (габариты), MAP-* (маппинг категорий), DATA-* (целостность), SCOPE-* (границы), PROFILE-* (манифест и согласование сторон).

Почему оператор и склад лежат здесь

operator_location нужен и мощностям, и смете, и будущим заказам. Здесь лежит только медленно меняющееся: кто это и где находится. Свободная площадь и пропускная способность меняются часто и описаны в FSP Capacity.

Что здесь принципиально

Каталог определяет смысл операции, но не её цену и не её исполнителя (CAT-002, CAT-011). Поэтому два прайса раскладываются в одни и те же коды и становятся сравнимыми.

Нормативные правила

Обязательны для соответствия модулю. Префиксы объявлены в манифесте: CAT-*, SIZE-*, MAP-*, DATA-*, SCOPE-*, PROFILE-*.

Схема

JSON Schema 2020-12: /1.0/core/schema.json. Определения: service_code, category_id, billing_metric, size_class_id, marketplace, scheme, country, destination_code, destination_type, destination, weekday, operator, operator_location.

Манифест модуля

{
  "module": "core",
  "title": "FSP Core",
  "version": "2.0",
  "versions": [
    "1.0",
    "1.1",
    "1.2",
    "1.3",
    "1.4",
    "2.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",
    "destinations",
    "operators",
    "rules"
  ],
  "rule_prefixes": [
    "CAT",
    "SIZE",
    "MAP",
    "DATA",
    "SCOPE",
    "PROFILE"
  ],
  "schema": "schema.json",
  "profile": "../../profile/fsp-profile.schema.json"
}