---
title: "Создать черновик складского документа"
method: POST
path: "/api/v1/stock/documents"
tags: ["Stock documents"]
---

# Создать черновик складского документа

`POST /api/v1/stock/documents`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/stock/documents`
- 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

Вид документа задаётся ключом `type_key`, а не идентификатором типа: тип
по ключу разрешает сам модуль. Пустая `date` означает рабочую дату
кабинета. `entity_refs` и `payload` разбираются строго — незнакомое поле
отклоняется. Инвентаризация принимает свой `payload` со снимком-фильтром;
снимок остатков сервер снимает сам в момент создания.

Читает `Idempotency-Key` — повтор того же запроса с тем же ключом
отдаёт созданный черновик, а не второй. Номер документа выдаёт
нумератор, поэтому своего замка от дубля у склада нет: без ключа сбой
сети или повтор вебхука заводит вторую отгрузку.

При включённом документообороте `stock_receipt` требует подтверждённую закупку в `basis_id`; свободное поступление и неподходящее основание дают `409 stock_receipt_purchase_required`. То же правило действует при правке и проведении ранее созданного черновика. Допоставка по претензии сохраняет основание-приёмку. Оприходование и режим без документооборота этим правилом не ограничиваются.

Поступление, перемещение и выпуск комплектации на склад внешней стороны
(`inbound_mode = external_receipt`) отклоняются с 409
`stock_external_inbound_only`: такой склад пополняет только приёмка
площадки. В ответе — `warehouse_id` склада-получателя; тем же кодом
отвечают правка черновика и проведение. Разрешён один путь —
перемещение со склада товаров в пути этой площадки.

## Headers

- `X-Tenant` string, required
- `Idempotency-Key` string

## Request body

- StockDocumentCreate
  - `type_key` 'stock_receipt' | 'stock_shipment' | 'stock_transfer' | 'stock_writeoff' | 'stock_capitalization' | 'stock_supplier_return' | 'stock_customer_return' | 'stock_purchase_request' | 'stock_supplier_order' | 'stock_inventory' | 'stock_reservation' | 'stock_assembly' | 'stock_disassembly' | 'stock_condition_change' | 'stock_regrade', required: Виды, которые создаются извне. Служебные снятие резерва и закрытие продажи или закупки в список не входят. Прежние накладные расходы `stock_landed_cost` новыми не заводятся (409 `stock.landed_cost.retired`): расход на товар — доп. расходы `/stock/receipt-costs`. Вид `stock_supplier_order` — прежнее имя закупки: запрос заводит продажу или закупку ядра `supplier_order` и отвечает его складским видом.
  - `date` string, date: Пусто или отсутствует означает рабочую дату кабинета
  - `basis_id` string, uuid
  - `entity_refs` StockDocumentRefs, required: Ссылки шапки складского документа. Набор допустимых полей зависит от вида — перемещению нужны склад-отправитель и склад-получатель, инвентаризации только юрлицо и склад.
    - `company` string, uuid, required
    - `warehouse` string, uuid
    - `warehouse_from` string, uuid
    - `warehouse_to` string, uuid
    - `contact` string, uuid
    - `marketplace_store` string, uuid
    - `department` string, uuid
    - `project` string, uuid
    - `cfo` string, uuid
  - `payload` union, required: Для инвентаризации — фильтр снимка, для остальных видов — содержимое документа
    - StockDocumentPayload: Содержимое складского документа. Разбор строгий — незнакомое поле отклоняется. У документа-факта, заявки, продажи или закупки и резерва `items` обязателен и не длиннее 1000 строк.
      - `version` 1, required
      - `reason` string
      - `marketplace_week_sale` boolean: Недельная продажа площадки (ERP-1819): отгрузка, которой модуль маркетплейсов списывает себестоимость выкупленного по недельному отчёту — со склада площадки (FBO) или со склада «В пути к покупателю» (FBS). Выручку по ней признают финансы, поэтому заказ ядра она не заводит и цену продажи не требует и после отсечки исполнения. Ставит только модуль маркетплейсов: присланное при создании значение отклоняется (400), правка сохраняет значение документа
      - `shelf_life` StockDocumentShelfLife: Порог остаточного срока годности, заданный в документе (ERP-1821). Только у отгрузки и перемещения. Поля нет — порог берётся лестницей «покупатель → кабинет» при проведении. Поле есть — действует оно; оба значения пусты — для этого документа порога нет. Правка (PATCH): поле не прислано — порог документа сохраняется; прислан объект — он заменяет прежний, в том числе порог магазина; прислан null — ручной порог снимается и документ возвращается на лестницу, а порог магазина (source store) null не снимает. У остальных видов документов поле отклоняется: 400 shelf_life_minimum_not_applicable.
        - `min_remaining_pct` string: Доля оставшегося срока, %: десятичная строка больше 0 и не больше 100
        - `min_remaining_days` integer: Дней до «годен до»
        - `scale` StockShelfLifeStep[]: Шкала порога остаточного срока по общему сроку годности партии (ERP-2182): ступени по возрастанию границы up_to_months, у последней границы нет. Общий срок ровно на границе — ступень этой границы. Общий срок не определить (нет даты изготовления и срока в карточке) — партия порог не проходит: no_production_date
          - `up_to_months` integer, nullable, required: Граница общего срока, месяцев, включительно; у последней ступени — null (всё, что длиннее предыдущей)
          - `min_remaining_pct` string, nullable, required: Доля оставшегося срока, %: десятичная строка больше 0 и не больше 100, не точнее сотых
          - `min_remaining_days` integer, nullable, required: Дней до «годен до»
        - `source` 'manual' | 'store' | 'contact': Кто записал порог. manual — человек; значение по умолчанию. contact — требование контрагента, только в ответе настроек магазина (ERP-2619). store — модуль маркетплейсов: требование контрагента магазина (ERP-2619), а у магазина без контрагента — порог самого магазина; присланное общей дверью значение store отклоняется (400 shelf_life_minimum_source_forbidden), правка сохраняет его, пока значения порога не тронуты
      - `ship_date` string, date: Плановая дата отгрузки (ERP-2182): только у stock_shipment и stock_transfer. Партии строк оцениваются правилом срока годности на неё — порог остаточного срока и просрочка; позже даты документа — на неё, пусто или раньше — на дату документа. Дата ложится в снимок проведения (posting.shelf_life.as_of). У прочих видов — 400 ship_date_not_applicable, не дата — 400 ship_date_invalid. Отгрузка по заказу покупателя берёт дату поставки заказа
      - `preferred_condition_id` string, uuid
      - `expired_writeoff` boolean: Черновик списания завело действие «Списать просроченное» (ERP-1821). По признаку повторный вызов действия узнаёт свой непроведённый черновик. Документ с признаком списывает только просрочку: если подбор взял бы слой, не просроченный на дату документа, проведение отвечает 400 с кодом expired_writeoff_stale. Ставит признак только само действие: присланный при создании признак отклоняется (400), правка документа сохраняет значение, уже лежащее в нём
      - `marketplace_shipment` object: Реквизиты «Отгрузки на маркетплейс» (ERP-2137): площадка и номер её поставки. Только у stock_transfer со ссылкой marketplace_store; получатель — склад «В пути на площадку», отправитель — свой склад. Номер необязателен: обход модуля маркетплейсов привязывает проведённую отгрузку к поставке по цифрам номера и второго перемещения не заводит
        - `platform` 'ozon' | 'wildberries', required
        - `supply_number` string: Номер поставки площадки, например WB-GI-12345678
      - `marketplace_claim` boolean: Списание недостачи приёмки площадки претензией к ней (ERP-2138): стоимость уходит в долг площадки по претензии (сторона расчётов claim, Дт 60.01 claim / Кт 41), а не в расход. Ставит только раздел «Расхождения приёмки»; присланное при создании значение отклоняется (400), правка сохраняет значение документа
      - `transit_receipt` boolean: Приёмка по перемещению (ERP-2179): перемещение со склада «В пути на <склад>» на сам склад на основании отправки. Ставит сервер по складам документа, присланное значение не читается. Серия, выпуск и срок строк — реквизиты принятой партии, а не ручной выбор
      - `receipt_for` string, uuid
      - `transit_final` boolean: У приёмки по перемещению — «приёмка закончена» (ERP-2179): что по отправке осталось в пути после неё — недостача, ждущая решения. Задаёт final запроса приёмки по отправке
      - `reason_id` string, uuid
      - `pnl_item_id` string, uuid
      - `desired_at` string, date
      - `delivery_at` string, date
      - `expires_at` string, date: Срок резерва; не раньше даты документа
      - `items` StockDocumentLine[]
        - `line_id` string, uuid, required
        - `product_id` string, uuid, required
        - `qty` string, required: Положительная decimal string в единице строки
        - `document_qty` string: Количество по документу поставщика (ERP-1230, ERP-2544): сумма строки и долг — по документу. Пришло меньше (недостача): склад и налог к вычету — по qty, разница — претензия поставщику (сторона claim, 60.01). Пришло больше (излишек): по документу товар встаёт в состояние строки, лишнее — в состояние «К разбору» по цене закупки, без налога, а в расчётах отмечается сумма «под вопросом» (сторона claim с обратным знаком, рабочее допущение до ответа главбуха, ERP-2565); решается в очереди расхождений. Только у stock_receipt; не у переменной меры (400)
        - `document_base_qty` string: Количество по документу поставщика в базовой единице (ERP-2544). Считает система из document_qty при сохранении, присланное значение перезаписывается; пусто, когда document_qty пусто; проведение его не пересчитывает. Закупка гасится и исполняется по нему, а не по qty: недостача ведётся только претензией поставщику. У допоставки по претензии 0: её количество уже учтено приёмкой-основанием
        - `picked_qty` string: Собрано (ERP-2423): у черновика сборки отгрузки по продаже qty — сколько нужно, picked_qty — сколько уже собрано, в единице строки; decimal string не меньше нуля, кратная шагу единицы, больше qty — законно (пересбор). Черновик «Собрать и отгрузить» ставит 0 строкам немаркированного товара. Проведение отгружает собранное: qty становится picked_qty, base_qty — в той же пропорции, строка с нулём не отгружается, поле снимается; ничего не собрано — 400. Строка с bin_allocations или handling_unit_allocations при собранном, отличном от qty, — 400. Нет поля — строка отгружается количеством qty. Только у stock_shipment
        - `unit_id` string, uuid
        - `product_uom_id` string, uuid
        - `base_qty` string: Количество в базовой единице номенклатуры; присланное значение обязано совпасть с серверным пересчётом. У прихода в единице с переменной мерой — сумма фактических мер handling_units
        - `variable_measure` boolean: Ставит сервер: строка введена в единице с переменной мерой. qty — число конкретных единиц, base_qty — сумма их фактических мер, price — цена за базовую единицу
        - `price` string: Decimal string; за единицу строки, а у единицы с переменной мерой — за базовую единицу
        - `amount` string: Decimal string
        - `amount_without_vat` string: Сумма строки без налога. Считает сервер из paper_vat_amount и перезаписывает присланное
        - `vat_amount` string: Доля налога документа в строке: пропорционально сумме строки, копеечный остаток — на самую крупную. Считает сервер и перезаписывает присланное; по её наличию судят о разбивке при перепроведении
        - `basis_line_id` string, uuid
        - `basis_document_id` string, uuid
        - `batch_code` string: У прихода — номер серии рождаемой партии. Серия в записи учётной системы разбирается (ERP-2199): «023 5L 031025 от 10.25 до 04.27» сохраняется номером «023 5L 031025», выпуск 03.10.2025 и срок 01.04.2027 ложатся в пустые produced_at и expires_at (месяц без дня — первое число; дата изготовления в номере ДДММГГ или ДД.ММ.ГГ — точная и записывается ДДММГГ). У расхода (stock_shipment, stock_writeoff, stock_transfer, stock_condition_change) — ручной выбор по серии (ERP-1788): строка списывается только из партий товара с этим номером серии (регистр и пробелы не важны), внутри серии — по методу учёта. Нужна настройка юрлица manual_batch_choice
        - `gtin` string: GTIN маркировки рождаемой партии (ERP-2134): у прихода (stock_receipt, stock_opening_balance, stock_capitalization, stock_marketplace_return) и приёмки по перемещению — один из действующих GTIN товара строки, 13 или 14 цифр, хранится 14. Уходит в УПД объёмно-сортового учёта строкой этой партии. Пусто — не задан: GTIN марок прихода, иначе основной GTIN товара. У расхода — 400
        - `batch_id` string, uuid
        - `batch_choice` 'manual': Ставит сервер: строка несёт ручной выбор партии. Присланное значение пересчитывается
        - `batch_selected_by` integer, nullable: Кто выбрал партию: id пользователя. Ставит сервер, пока выбор не меняется
        - `batch_selected_by_name` string: Имя выбравшего партию на момент выбора
        - `batch_selected_at` string, date-time, nullable: Когда выбрана партия
        - `produced_at` string, date
        - `expires_at` string, date
        - `handling_units` StockDocumentLineHandlingUnit[]
          - `id` string, uuid
          - `code` string: Пустой код сервер выдаёт сам из идентификатора
          - `initial_base_qty` string: Положительная decimal string в базовой единице; пусто — равная доля количества строки
          - `custom` object
        - `handling_unit_allocations` StockDocumentLineHandlingAllocation[]
          - `handling_unit_id` string, uuid, required
          - `qty` string, required: Положительная decimal string
        - `bin_allocations` StockDocumentLineBinAllocation[]: Ячейки строки (ERP-2144): у приёмки, оприходования, ввода остатков и возврата с площадки — куда кладут, у отгрузки и списания — откуда берут. Ячейка принадлежит складу документа, в нём включены ячейки. Сумма не больше base_qty строки: в режиме soft остаток строки считается «не размещённым», в режиме strict сумма обязана равняться base_qty при проведении (черновик сохраняется и недоразнесённым). Повтор ячейки в строке складывается. Названная ячейка расхода сужает подбор партий до того, что в ней лежит. У остальных видов документов не принимается
          - `bin_id` string, uuid, required
          - `qty` string, required: Положительная decimal string в базовой единице номенклатуры
          - `bin_code` string: Только в ответе: код ячейки. При сохранении игнорируется
          - `bin_name` string: Только в ответе: название ячейки. При сохранении игнорируется
          - `handling_unit_id` string, uuid
        - `from_floor` boolean: Расход только вне ячеек (ERP-2144): подбор партий сужается до «не размещённого». Только у отгрузки и списания, вместе с bin_allocations и выбором физических единиц нельзя
        - `bin_allocations_to` StockDocumentLineBinAllocation[]: Ячейки «куда» (ERP-2144), только у перемещения: для перемещения между местами — ячейки склада-получателя, для перекладки внутри одного места (склад «откуда» = склад «куда») — куда ставят. bin_allocations у перемещения — ячейки «откуда». Перекладка пишет только регистр ячеек: количество, стоимость и проводки не меняются. Остаток количества строки вне названных ячеек — «не размещено» (пол)
          - `bin_id` string, uuid, required
          - `qty` string, required: Положительная decimal string в базовой единице номенклатуры
          - `bin_code` string: Только в ответе: код ячейки. При сохранении игнорируется
          - `bin_name` string: Только в ответе: название ячейки. При сохранении игнорируется
          - `handling_unit_id` string, uuid
        - `condition_id` string, uuid
        - `condition_explicit` boolean: «Основное» выбрано в строке явно (ERP-2170): у отгрузки покупателю и перемещения на склад площадки — только оно, а не «Авто» по FIFO из всех годных состояний. Ставит сервер, когда в condition_id прислан id строки «Основное» (condition_id при этом хранится пустым); присланный признак при пустом condition_id сохраняется, при другом состоянии снимается
        - `expected_batch_code` string: Ожидаемая серия строки отправки на склад с приёмкой (ERP-2179): что по документам знает отправитель, если его склад серий не ведёт. Разбирается как серия прихода (ERP-2199): номер — сюда, даты — в пустые expected_produced_at и expected_expires_at. Партию не выбирает и не создаёт — приёмка сверяет с ней факт по номеру и помечает «серия не совпала». У прочих документов — отказ
        - `expected_produced_at` string, date: Ожидаемая дата выпуска строки отправки на склад с приёмкой (ERP-2179)
        - `expected_expires_at` string, date: Ожидаемый срок годности строки отправки на склад с приёмкой (ERP-2179)
        - `to_condition_id` string, uuid
        - `from_line_id` string, uuid
        - `share` string: Доля стоимости рождённой строки; только у разукомплектации без комплектации-основания на несколько частей. У разукомплектации на основании комплектации доли не присылают: присланная доля отклоняется, веса частей сервер берёт из проведения основания
        - `kit_component` object: Только у отгрузки (ERP-2184): строка «Комплекта» из одного компонента — комплект из N шт, «гель × 3». Своей марки у набора нет: марки сканируют на штуки компонента, и маркировка считает строку строкой компонента — qty × kit_component.qty марок. Снимок ставит сервер при сохранении черновика по действующему составу; присланное значение перезаписывается
          - `product_id` string, uuid, required
          - `qty` string, required: Сколько компонента в одном наборе в базовой единице
      - `produced` StockDocumentLine[]: Строки, которые документ РОЖДАЕТ на складе. Только у комплектации, разукомплектации и пересортицы: их `items` — сторона расхода. Цена и сумма здесь не задаются, стоимость выхода равна списанной. У пересортицы (stock_regrade, ERP-2198) строки — пары: каждая строка produced называет свою строку items полем from_line_id, товар другой, единица та же, количество то же; серия, выпуск и срок produced — реквизиты рождаемой партии (пусто — серия и срок самой ранней по сроку списанной партии)
        - `line_id` string, uuid, required
        - `product_id` string, uuid, required
        - `qty` string, required: Положительная decimal string в единице строки
        - `document_qty` string: Количество по документу поставщика (ERP-1230, ERP-2544): сумма строки и долг — по документу. Пришло меньше (недостача): склад и налог к вычету — по qty, разница — претензия поставщику (сторона claim, 60.01). Пришло больше (излишек): по документу товар встаёт в состояние строки, лишнее — в состояние «К разбору» по цене закупки, без налога, а в расчётах отмечается сумма «под вопросом» (сторона claim с обратным знаком, рабочее допущение до ответа главбуха, ERP-2565); решается в очереди расхождений. Только у stock_receipt; не у переменной меры (400)
        - `document_base_qty` string: Количество по документу поставщика в базовой единице (ERP-2544). Считает система из document_qty при сохранении, присланное значение перезаписывается; пусто, когда document_qty пусто; проведение его не пересчитывает. Закупка гасится и исполняется по нему, а не по qty: недостача ведётся только претензией поставщику. У допоставки по претензии 0: её количество уже учтено приёмкой-основанием
        - `picked_qty` string: Собрано (ERP-2423): у черновика сборки отгрузки по продаже qty — сколько нужно, picked_qty — сколько уже собрано, в единице строки; decimal string не меньше нуля, кратная шагу единицы, больше qty — законно (пересбор). Черновик «Собрать и отгрузить» ставит 0 строкам немаркированного товара. Проведение отгружает собранное: qty становится picked_qty, base_qty — в той же пропорции, строка с нулём не отгружается, поле снимается; ничего не собрано — 400. Строка с bin_allocations или handling_unit_allocations при собранном, отличном от qty, — 400. Нет поля — строка отгружается количеством qty. Только у stock_shipment
        - `unit_id` string, uuid
        - `product_uom_id` string, uuid
        - `base_qty` string: Количество в базовой единице номенклатуры; присланное значение обязано совпасть с серверным пересчётом. У прихода в единице с переменной мерой — сумма фактических мер handling_units
        - `variable_measure` boolean: Ставит сервер: строка введена в единице с переменной мерой. qty — число конкретных единиц, base_qty — сумма их фактических мер, price — цена за базовую единицу
        - `price` string: Decimal string; за единицу строки, а у единицы с переменной мерой — за базовую единицу
        - `amount` string: Decimal string
        - `amount_without_vat` string: Сумма строки без налога. Считает сервер из paper_vat_amount и перезаписывает присланное
        - `vat_amount` string: Доля налога документа в строке: пропорционально сумме строки, копеечный остаток — на самую крупную. Считает сервер и перезаписывает присланное; по её наличию судят о разбивке при перепроведении
        - `basis_line_id` string, uuid
        - `basis_document_id` string, uuid
        - `batch_code` string: У прихода — номер серии рождаемой партии. Серия в записи учётной системы разбирается (ERP-2199): «023 5L 031025 от 10.25 до 04.27» сохраняется номером «023 5L 031025», выпуск 03.10.2025 и срок 01.04.2027 ложатся в пустые produced_at и expires_at (месяц без дня — первое число; дата изготовления в номере ДДММГГ или ДД.ММ.ГГ — точная и записывается ДДММГГ). У расхода (stock_shipment, stock_writeoff, stock_transfer, stock_condition_change) — ручной выбор по серии (ERP-1788): строка списывается только из партий товара с этим номером серии (регистр и пробелы не важны), внутри серии — по методу учёта. Нужна настройка юрлица manual_batch_choice
        - `gtin` string: GTIN маркировки рождаемой партии (ERP-2134): у прихода (stock_receipt, stock_opening_balance, stock_capitalization, stock_marketplace_return) и приёмки по перемещению — один из действующих GTIN товара строки, 13 или 14 цифр, хранится 14. Уходит в УПД объёмно-сортового учёта строкой этой партии. Пусто — не задан: GTIN марок прихода, иначе основной GTIN товара. У расхода — 400
        - `batch_id` string, uuid
        - `batch_choice` 'manual': Ставит сервер: строка несёт ручной выбор партии. Присланное значение пересчитывается
        - `batch_selected_by` integer, nullable: Кто выбрал партию: id пользователя. Ставит сервер, пока выбор не меняется
        - `batch_selected_by_name` string: Имя выбравшего партию на момент выбора
        - `batch_selected_at` string, date-time, nullable: Когда выбрана партия
        - `produced_at` string, date
        - `expires_at` string, date
        - `handling_units` StockDocumentLineHandlingUnit[]
          - `id` string, uuid
          - `code` string: Пустой код сервер выдаёт сам из идентификатора
          - `initial_base_qty` string: Положительная decimal string в базовой единице; пусто — равная доля количества строки
          - `custom` object
        - `handling_unit_allocations` StockDocumentLineHandlingAllocation[]
          - `handling_unit_id` string, uuid, required
          - `qty` string, required: Положительная decimal string
        - `bin_allocations` StockDocumentLineBinAllocation[]: Ячейки строки (ERP-2144): у приёмки, оприходования, ввода остатков и возврата с площадки — куда кладут, у отгрузки и списания — откуда берут. Ячейка принадлежит складу документа, в нём включены ячейки. Сумма не больше base_qty строки: в режиме soft остаток строки считается «не размещённым», в режиме strict сумма обязана равняться base_qty при проведении (черновик сохраняется и недоразнесённым). Повтор ячейки в строке складывается. Названная ячейка расхода сужает подбор партий до того, что в ней лежит. У остальных видов документов не принимается
          - `bin_id` string, uuid, required
          - `qty` string, required: Положительная decimal string в базовой единице номенклатуры
          - `bin_code` string: Только в ответе: код ячейки. При сохранении игнорируется
          - `bin_name` string: Только в ответе: название ячейки. При сохранении игнорируется
          - `handling_unit_id` string, uuid
        - `from_floor` boolean: Расход только вне ячеек (ERP-2144): подбор партий сужается до «не размещённого». Только у отгрузки и списания, вместе с bin_allocations и выбором физических единиц нельзя
        - `bin_allocations_to` StockDocumentLineBinAllocation[]: Ячейки «куда» (ERP-2144), только у перемещения: для перемещения между местами — ячейки склада-получателя, для перекладки внутри одного места (склад «откуда» = склад «куда») — куда ставят. bin_allocations у перемещения — ячейки «откуда». Перекладка пишет только регистр ячеек: количество, стоимость и проводки не меняются. Остаток количества строки вне названных ячеек — «не размещено» (пол)
          - `bin_id` string, uuid, required
          - `qty` string, required: Положительная decimal string в базовой единице номенклатуры
          - `bin_code` string: Только в ответе: код ячейки. При сохранении игнорируется
          - `bin_name` string: Только в ответе: название ячейки. При сохранении игнорируется
          - `handling_unit_id` string, uuid
        - `condition_id` string, uuid
        - `condition_explicit` boolean: «Основное» выбрано в строке явно (ERP-2170): у отгрузки покупателю и перемещения на склад площадки — только оно, а не «Авто» по FIFO из всех годных состояний. Ставит сервер, когда в condition_id прислан id строки «Основное» (condition_id при этом хранится пустым); присланный признак при пустом condition_id сохраняется, при другом состоянии снимается
        - `expected_batch_code` string: Ожидаемая серия строки отправки на склад с приёмкой (ERP-2179): что по документам знает отправитель, если его склад серий не ведёт. Разбирается как серия прихода (ERP-2199): номер — сюда, даты — в пустые expected_produced_at и expected_expires_at. Партию не выбирает и не создаёт — приёмка сверяет с ней факт по номеру и помечает «серия не совпала». У прочих документов — отказ
        - `expected_produced_at` string, date: Ожидаемая дата выпуска строки отправки на склад с приёмкой (ERP-2179)
        - `expected_expires_at` string, date: Ожидаемый срок годности строки отправки на склад с приёмкой (ERP-2179)
        - `to_condition_id` string, uuid
        - `from_line_id` string, uuid
        - `share` string: Доля стоимости рождённой строки; только у разукомплектации без комплектации-основания на несколько частей. У разукомплектации на основании комплектации доли не присылают: присланная доля отклоняется, веса частей сервер берёт из проведения основания
        - `kit_component` object: Только у отгрузки (ERP-2184): строка «Комплекта» из одного компонента — комплект из N шт, «гель × 3». Своей марки у набора нет: марки сканируют на штуки компонента, и маркировка считает строку строкой компонента — qty × kit_component.qty марок. Снимок ставит сервер при сохранении черновика по действующему составу; присланное значение перезаписывается
          - `product_id` string, uuid, required
          - `qty` string, required: Сколько компонента в одном наборе в базовой единице
      - `spec` StockAssemblySpecRef: Снимок версии спецификации, по которой заполнен документ. Ссылка на версию, а не на справочник: состав уже скопирован в строки, и правка спецификации завтра не меняет смысл проведённого вчера. Версию сервер читает, только когда ссылка появляется — при создании документа и при правке, называющей другую версию: такая версия обязана быть действующей, черновая и архивная отклоняются. Правка черновика с прежним version_id версию не читает, и документ остаётся правимым, даже если версия ушла в архив или удалена; ссылку можно снять.
        - `spec_id` string, uuid, required
        - `version_id` string, uuid, required
        - `version` integer, required
        - `name` string
        - `kind` 'assembly' | 'production' | 'kit': Вид версии состава на момент заполнения документа; ставит сервер
      - `kind` 'assembly' | 'production' | 'kit': Вид комплектации (только stock_assembly): assembly — «Сборка», production — «Производство», kit — «Комплект» (набор, который собирается при расходе; ERP-2111). Документ, заполненный по составу (`spec`), получает вид версии состава — присланное значение, которое с ней расходится, отклоняется; без состава вид выбирает человек, пусто — assembly. Снимок: новая версия состава с другим видом документ не меняет. Документ без поля читается как assembly. У разукомплектации вида нет
      - `sellable_sources` boolean: Только stock_assembly (ERP-2170): строки компонентов без выбранного состояния берут годное по FIFO из всех состояний «можно отгружать / продавать», как отгрузка, а не только «Основное». Ставит сборка наборов под отгрузку или перемещение; у других видов — 400
      - `kit_source` string, uuid
      - `kit_shelf_life` object: Только stock_assembly с kit_source (ERP-2184 × ERP-2182): правило срока годности документа расхода, под который собран «Комплект», — те же поля, что у payload.posting.shelf_life: block_expired, min_remaining_pct, min_remaining_days, min_source (cabinet, contact, store, manual), basis, as_of (плановая дата отгрузки), soft. Сборка берёт компоненты только проходящие его (FEFO среди годных); не хватает — 400 shelf_life_below_minimum или batch_expired с партиями компонента. Ставит только сборка наборов под отгрузку или перемещение; присланное при создании отклоняется (400), правка сохраняет значение документа
      - `paper_amount` string: Итого по документу поставщика. Только проверка суммы строк: расхождение показывает экран, сохранение не останавливается
      - `paper_vat_amount` string: В т.ч. НДС документа поставщика, одна сумма (ERP-484, подшаг 5.3). Обязательна, если на дату документа бизнес очищает суммы и юрлицо принимает налог к вычету; 0 — налог не выделен. Вне этого периода непустое значение — 400. Сервер раскладывает сумму по строкам
      - `supplier_document` SupplierDocument: Номер и дата документа поставщика (ERP-484, подшаг 5.3): по ним входящий НДС сверяется с книгой покупок. Оба поля необязательны
        - `number` string
        - `date` string, date
      - `tax_currency` string: Налоговая валюта юрлица на дату приёмки (ERP-484, Р21). Пишет сервер вместе с разбивкой налога; присланное значение перезаписывается
      - `vat_from_lines` boolean: Налог строк взят из документа поставщика как есть (ERP-1230): сервер не раскладывает paper_vat_amount, а проверяет vat_amount строк и пишет их сумму в paper_vat_amount
      - `currency` string: Валюта приёмки (ERP-1230): ISO-код валюты документа поставщика; пусто или валюта учёта — документ в валюте учёта. Только у stock_receipt
      - `rate` string: Курс валюты документа: единиц валюты учёта за 1 единицу валюты документа. Без rate_manual сервер берёт его из справочника курсов на дату документа; нет курса — черновик без курса, проведение — 400
      - `rate_manual` boolean: Курс введён вручную: справочник его не перезаписывает
      - `amount` string: Decimal string; сумма накладных расходов
      - `work_amount` string: Стоимость работы смены состояния в валюте учёта (ERP-1977), только у stock_condition_change: делится по рождённым слоям пропорционально количеству. Счёт напротив и статью задаёт правило схемы проводок вида документа; без правила документ с суммой не проводится
      - `allocation_method` 'quantity' | 'cost' | 'manual'
      - `targets` StockDocumentLandedCostTarget[]
        - `batch_id` string, uuid, required
        - `product_id` string, uuid, required
        - `share` string: Decimal string; обязательна при ручном распределении
      - `posting` object: Разложение проведения по строкам и партиям, которое пишет сам движок. У разукомплектации на основании комплектации есть блок `disassembly_basis`: `document_id` и `number` основания, `amount` — фактически списанная сумма, `basis_amount` — сумма того же количества по основанию (рождённая сумма основания ÷ рождённое количество × разбираемое количество), `difference` — amount минус basis_amount, `weights` — веса частей по строкам (`line_id`, `weight`), по которым списанное разделено между частями. Веса и `basis_amount` — снимок первого проведения: пересчёт себестоимости цепочки их сохраняет и пересчитывает только `amount` и `difference`; отмена и повторное проведение считают всё заново. У приёмки по перемещению (ERP-2179) строка разложения несёт `surplus_qty` — принято сверх того, что было в пути (`qty` строки разложения меньше факта на эту величину), и `received_batch_id` — партию, рождённую серией по факту
    - StockInventoryCreatePayload: Содержимое инвентаризации при создании. Снимок остатков сервер снимает сам, поэтому строки в теле не передаются.
      - `version` 1, required
      - `filter` StockInventoryFilter: Отбор товаров в снимок. Пустой фильтр берёт весь склад.
        - `category_id` string, uuid
        - `product_ids` UUID[]
  - `comment` string

## Response `201`

Созданный черновик

- CoreDocument
  - `id` string, uuid, required
  - `type_id` string, uuid, required
  - `type_key` string, required
  - `type_name` string, required
  - `number` string, required
  - `date` string, date, required
  - `status` 'draft' | 'posted' | 'cancelled', required
  - `basis_type` string, uuid, required
  - `basis_id` string, uuid, required
  - `basis_number` string, required
  - `entity_refs` object, required
  - `payload` object, required
  - `comment` string, required
  - `is_marked_deleted` boolean, required
  - `created_by` integer, nullable, required
  - `created_by_name` string, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `posted_at` string, required
  - `cancelled_at` string, required
  - `custom` object: Значения своих полей кабинета (графы вида core.document.<ключ вида>). Отдаёт карточка документа; списки поле не несут

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `404`: Запись не найдена или не видима текущему пользователю
- `409`: Конфликт версии, идемпотентности или бизнес-состояния
- `422`: Idempotency-Key уже использован для другого запроса: другое тело, другой адрес или другая операция. Код `idempotency.key_mismatch`; сохранённый ответ не раскрывается. Для новой команды берут новый ключ.
- `503`: Хранилище ключей идемпотентности недоступно, команда с заголовком Idempotency-Key не выполнялась. Код `idempotency.unavailable`; Retry-After говорит, когда повторить.

---

[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)
