---
title: "Провести задним числом с перестройкой цепочки"
method: POST
path: "/api/v1/stock/documents/post-rebuild"
tags: ["Stock documents"]
---

# Провести задним числом с перестройкой цепочки

`POST /api/v1/stock/documents/post-rebuild`

## Request

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

Документ (или пакет) задним числом, после даты которого уже есть расходы того же товара, обычное проведение отклоняет (409 stock_backdated_conflict с rebuild_available). Здесь — одно действие: документы пакета встают в цепочку бизнеса по (дата, создан, id), и перепроводится всё бизнеса с самой ранней даты пакета — склад, книга, деньги, недели площадок; себестоимость поздних отгрузок по FIFO и 90.02 меняются тем же проведением. Сначала всегда предпросмотр в откатываемой транзакции. preview=true отдаёт его: changes — у каких документов и на сколько меняется стоимость ушедшего, shortages — где остаток уходит в минус (товар, склад, дата, нехватка), failures — другие отказы. Без preview при любой нехватке или отказе — 409 stock_rebuild_refused с тем же перечнем, ничего не записано. Пакет — до 500 черновиков складских фактов одного бизнеса. action=cancel — «Распровести вместе с поздними»: проведённые документы пакета отменяются на их месте цепочки, и всё после них перепроводится; так снимается отказ отмены 409 stock_backdated_conflict с rebuild_action=cancel.

## Headers

- `X-Tenant` string, required

## Request body

- StockPostRebuildInput
  - `document_ids` UUID[], required: Складские факты одного бизнеса — пакет одной перестройки: черновики для post, проведённые для cancel
  - `preview` boolean: true — предпросмотр без записи
  - `action` 'post' | 'cancel': post (по умолчанию) — провести черновики задним числом; cancel — распровести проведённые вместе с поздними

## Response `200`

Предпросмотр или итог перестройки

- StockPostRebuildResult
  - `status` 'preview' | 'completed' | 'refused', required
  - `from` string, date, required: С какой даты перестраивается цепочка бизнеса
  - `documents` StockPostRebuildDocument[], required: Документы пакета
    - `id` string, uuid, required
    - `number` string, required
    - `type_key` string, required
    - `date` string, date, required
  - `reposted` integer, required: Сколько документов цепочки перепроведено
  - `changes` StockPostRebuildChange[], required: Документы, у которых меняется стоимость ушедшего
    - `id` string, uuid, required
    - `number` string, required
    - `type_key` string, required
    - `date` string, date, required
    - `before` string, required: Стоимость ушедшего со склада до перестройки
    - `after` string, required: Стоимость ушедшего после перестройки
    - `diff` string, required: after минус before
  - `total_before` string, required: Стоимость ушедшего по всей цепочке до перестройки
  - `total_after` string, required: Та же стоимость после
  - `shortages` StockPostRebuildShortage[]
    - `document` StockPostRebuildDocument, required
      - `id` string, uuid, required
      - `number` string, required
      - `type_key` string, required
      - `date` string, date, required
    - `date` string, date, required: Дата, на которую остаток уходит в минус
    - `product_id` string, uuid, required
    - `product_code` string
    - `product_name` string
    - `warehouse_id` string, uuid
    - `warehouse_name` string
    - `requested` string: Сколько нужно документу
    - `available` string: Сколько есть на дату
    - `shortage` string, required: Нехватка
  - `failures` StockPostRebuildFailure[]
    - `document` StockPostRebuildDocument, required
      - `id` string, uuid, required
      - `number` string, required
      - `type_key` string, required
      - `date` string, date, required
    - `detail` string, required: Причина отказа документа цепочки словами
  - `skipped` integer: Документы вида без транзакционного проводчика: остались как есть

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