Инвентаризации: сверка фактических остатков на складе с остатками в Controlata. Вы передаете фактическое количество, а Controlata сравнивает его с ожидаемым остатком и корректирует остаток на разницу. Через API инвентаризации можно создавать, редактировать и удалять, менять их статус, получать список и данные инвентаризации.

Пути методов указаны относительно базового адреса API, а общие для всех методов правила (авторизация, формат запросов, частичное редактирование, строки операций, постраничная выдача) описаны в статьях [Обзор API](https://developers.controlata.ru/hc/api-docs/articles/overview) и [Общие правила](https://developers.controlata.ru/hc/api-docs/articles/rules).

## Методы

| Метод | Что делает |
|---|---|
| [v1/audits/add](https://developers.controlata.ru/hc/api-docs/articles/audits-add) | Создает инвентаризацию |
| [v1/audits/edit](https://developers.controlata.ru/hc/api-docs/articles/audits-edit) | Изменяет строки инвентаризации |
| [v1/audits/delete](https://developers.controlata.ru/hc/api-docs/articles/audits-delete) | Удаляет инвентаризацию |
| [v1/audits/update_status](https://developers.controlata.ru/hc/api-docs/articles/audits-update-status) | Меняет статус инвентаризации |
| [v1/audits/get_list](https://developers.controlata.ru/hc/api-docs/articles/audits-get-list) | Возвращает список инвентаризаций |
| [v1/audits/get_entry](https://developers.controlata.ru/hc/api-docs/articles/audits-get-entry) | Возвращает инвентаризацию со строками |

## Поля инвентаризации

| Поле | Тип | Описание |
|---|---|---|
| id | int | ID инвентаризации |
| num | int | Номер. Присваивается автоматически: следующий по порядку |
| date | string | Дата инвентаризации, YYYY-MM-DD |
| status | int | Статус: 0 План, 1 Проведена |
| storage_id | int | Склад, на котором проводится инвентаризация |
| storage_name | string | Название склада |
| lines | int | Количество строк |
| surplus_cost | float | Излишки по себестоимости |
| shortage_cost | float | Недостачи по себестоимости, отрицательное число |
| total_cost | float | Итог по себестоимости: surplus_cost + shortage_cost |
| surplus_price | float | Излишки по цене продажи. Считается только для продуктов, у материалов 0 |
| shortage_price | float | Недостачи по цене продажи, отрицательное число. Только для продуктов |
| total_price | float | Итог по цене продажи: surplus_price + shortage_price |

## Материалы или продукты

Одна инвентаризация считает либо материалы, либо продукты на одном складе. Строки передаются только в одном из массивов: materials или products. Тип определяется при создании и потом не меняется.

## Ожидаемый и фактический остаток

* **Фактический остаток** (actual) передаете вы: сколько позиций насчитали на складе.
* **Ожидаемый остаток** (expected) рассчитывает Controlata: сумма всех проведенных движений позиции на этом складе по дату инвентаризации включительно. Запланированные операции не учитываются. Передавать ожидаемый остаток не нужно.

Ожидаемый остаток фиксируется в строке при ее добавлении. Если потом появится операция с более ранней датой, ожидаемый остаток уже добавленной строки не пересчитается.

Разница между фактом и ожиданием становится корректировкой остатка:

* **излишек** (факт больше) добавляется на склад. Материалы оцениваются по цене из карточки материала. Продукты по себестоимости последнего прихода на этот склад до даты инвентаризации, а если приходов не было, по себестоимости из карточки продукта;
* **недостача** (факт меньше) списывается со склада по FIFO.

## Статусы

| Код | Статус | Остатки |
|---|---|---|
| 0 | План | Корректировки только запланированы: остаток не меняется, разница учитывается в поле planned остатков |
| 1 | Проведена | Остатки скорректированы на разницу |

Новая инвентаризация создается в статусе из настройки **Статус новой инвентаризации по умолчанию**. Сменить статус можно методом [v1/audits/update_status](https://developers.controlata.ru/hc/api-docs/articles/audits-update-status).

## Что можно изменить

После создания у инвентаризации меняются только строки: их фактические остатки, заметки и состав. Дату, склад и тип изменить нельзя. Чтобы провести инвентаризацию на другую дату или на другом складе, удалите ее и создайте новую.
