Журнал изменений остатков
Endpoint /api/stock-movements предназначен для инкрементальной выгрузки складских изменений.
Он дополняет polling по inventoryUpdated: timestamp показывает, что товар изменился, а журнал показывает конкретные движения.
Постраничный append-only журнал движений. Нужен доступ offers.view.
| Основной polling | Клиент хранит последний полученный id и запрашивает after_id. Ответ обрабатывается строго по возрастанию id. |
|---|---|
| Фильтры | sm_offer_id, sm_base_offer_id, sm_wh_id, sm_doc_type, sm_doc_id, movement_type, from, to. |
| Пагинация | per_page максимум 500, по умолчанию 100. |
GET /api/stock-movements?after_id=12345&per_page=500
Алгоритм интеграции
- При первом запуске запросить
/api/stock-movements?after_id=0&per_page=500. - Обработать полученные строки в порядке возрастания
id. - Сохранить максимальный обработанный
idна стороне клиента. - Следующий запрос выполнять как
/api/stock-movements?after_id={last_id}. - Если ответ содержит полную страницу, продолжить читать следующую страницу с обновленным
after_id.
Не используйте только дату from/to как курсор. Для надежной инкрементальной выгрузки курсором должен быть id.
Поля ответа
id | Монотонный ID строки журнала, основной курсор интеграции. |
|---|---|
movement_type | Тип движения: acceptance, order, stock_transfer, inventory, quant_unpacking, movement. |
warehouse_id | ID склада. |
offer_id | Физический оффер, по которому было движение. |
base_offer_id | Базовый оффер. Для обычных товаров совпадает с товаром, для кванта указывает базовую единицу. |
quantity_delta | Изменение в физической единице оффера. Минус - списание, плюс - приход. |
base_quantity_delta | Изменение в базовой единице товара. Для кванта учитывает кратность. |
doc_type, doc_id, doc_offer_id | Документ-источник движения и строка документа. |
place_id | Место хранения, если движение привязано к полке. |
batch, production_date, expiration_date | Партия и сроки, если они были у складского остатка. |
occurred_at | Дата документа/движения. |
Кванты и разукомплектация
Для разукомплектации квантов используется movement_type=quant_unpacking и doc_type=8.
Одна строка документа создает минимум две строки журнала:
| Исходный квант | Отрицательное движение по offer_id кванта. |
|---|---|
| Выходной товар | Положительное движение по непосредственному родителю кванта. |
GET /api/stock-movements?movement_type=quant_unpacking&after_id=12345
Связь с inventoryUpdated
GET /api/products?inventoryUpdated_from=... подходит, когда нужно понять, какие товары изменились.
GET /api/stock-movements?after_id=... подходит, когда нужно получить сами причины изменения и точные дельты.