---
title: "Завести или переписать правило пополнения по ключу"
method: PUT
path: "/api/v1/stock/reorder-rules"
tags: ["Stock reorder rules"]
---

# Завести или переписать правило пополнения по ключу

`PUT /api/v1/stock/reorder-rules`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/stock/reorder-rules`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`
  - OAuth 2 (authorization code, authorization URL `https://erp.akeda.ru/oauth2/authorize`, token URL `https://erp.akeda.ru/oauth2/token`, scopes: `akeda:delegate`)
  - HTTP bearer

Заведение-или-перезапись по естественному ключу «бизнес + юрлицо + товар + склад»: если правило с таким ключом уже есть, оно переписывается целиком, иначе заводится новое. Правило принадлежит бизнесу, юрлицо — необязательный разрез, как у остатка: без company_id правило действует на товар бизнеса без юрлица и требует business_id, а с company_id бизнес выводится от юрлица (названный business_id обязан с ним совпасть). Правило без warehouse_id — отдельное правило «на все склады», оно не конфликтует со складским. Идентификатор правила здесь не передаётся и не выбирается: он приходит в ответе. Тело задаёт все поля сразу, пропущенное необязательное поле обнуляется, а is_active по умолчанию true. Чтобы поменять часть полей у известного правила или перенести его на другой ключ, берут PATCH /api/v1/stock/reorder-rules/{id}. При create_only=true существующий ключ возвращает 409 и сохраняет правило без изменений.

## Headers

- `X-Tenant` string, required

## Request body

- StockReorderRuleInput
  - `business_id` string, uuid
  - `company_id` string, uuid
  - `product_id` string, uuid, required
  - `warehouse_id` string, uuid
  - `min_qty` string, required: Decimal string неотрицательного порога пополнения.
  - `max_qty` string, nullable: Decimal string целевого остатка; не меньше min_qty, null — цель равна порогу.
  - `order_multiple` string, nullable: Совместимость со старыми правилами: положительная кратность либо null. Новые условия задаются в прайсе поставщика.
  - `lead_time_days` integer
  - `preferred_supplier_id` string, uuid
  - `is_active` boolean
  - `create_only` boolean: true создаёт только новое правило: существующий естественный ключ даёт 409 без изменения; false сохраняет прежний режим заведения или перезаписи.

## Response `200`

Заведённое или переписанное правило

- StockReorderRule
  - `id` string, uuid, required
  - `business_id` string, uuid, required
  - `business_name` string, required
  - `company_id` string, uuid, required
  - `company_name` string, required: Пустая строка у правила без юрлица
  - `product_id` string, uuid, required
  - `product_sku` string, required
  - `product_name` string, required
  - `warehouse_id` string, uuid, required
  - `warehouse_name` string, required
  - `min_qty` string, required: Порог пополнения: рекомендация появляется, когда доступное количество вместе с ожидаемой поставкой ниже порога.
  - `max_qty` string, nullable, required: Целевой остаток для пополнения при срабатывании порога; null — пополнять до порога.
  - `order_multiple` string, nullable, required: Сохранённая кратность старого правила. Новые условия партии и кратности задаются в прайсе поставщика.
  - `lead_time_days` integer, required
  - `preferred_supplier_id` string, uuid, required
  - `preferred_supplier_name` string, required
  - `is_active` boolean, required
  - `updated_at` string, date-time, required

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `404`: Запись не найдена или не видима текущему пользователю
- `409`: Конфликт версии, идемпотентности или бизнес-состояния
- `500`: Внутренняя ошибка без раскрытия server-only деталей

---

[API](https://skmtc.dev/akeda/apis/akeda-erp-client-api.md) · [All operations](https://skmtc.dev/akeda/apis/akeda-erp-client-api/llms.txt) · [OpenAPI document](https://skmtc.dev/akeda/apis/akeda-erp-client-api/revisions/3c60ded179f2?raw)
