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

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

## Методы

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

## Поля производства

| Поле | Тип | Описание |
|---|---|---|
| id | int | ID производства |
| num | int | Номер. Присваивается автоматически: следующий по порядку |
| name | string | Название |
| date | string | Дата производства, YYYY-MM-DD |
| status | int | Код статуса из [v1/production/get_statuses](https://developers.controlata.ru/hc/api-docs/articles/production-get-statuses) |
| order_id | int | ID заказа, под который создано производство. 0, если производство не связано с заказом |
| produce_subproducts | int | 1, если заготовки производятся вместе с продуктами |
| materials_storage_id | int | Склад, с которого списываются материалы. 0, если склад выбирается автоматически |
| materials_storage_name | string | Название склада материалов |
| products_storage_id | int | Склад, на который поступают произведенные продукты |
| products_storage_name | string | Название склада произведенных продуктов |
| subproducts_storage_id | int | Склад, с которого списываются использованные продукты. 0, если склад выбирается автоматически |
| subproducts_storage_name | string | Название склада использованных продуктов |
| cost | float | Себестоимость всего производства, включая стоимость привязанных списаний |
| price | float | Стоимость произведенных продуктов по их цене продажи |
| amount | float | Общее количество продуктов. null, если у продуктов разные единицы измерения |
| lines | int | Количество строк продуктов |
| bom_changed | int | 1, если составы продуктов изменились после последнего расчета производства |
| notes | string | Заметки |

## Статусы

Статусы производства настраиваются в каждой компании: их число, названия и порядок задаются в Controlata в разделе **Настройки → Статусы производства**. По умолчанию их три: **План**, **В процессе** и **Сделано**. Не зашивайте коды статусов в интеграцию, получайте их методом [v1/production/get_statuses](https://developers.controlata.ru/hc/api-docs/articles/production-get-statuses). Коды идут по порядку статусов, начиная с 0.

Статус определяет, что уже произошло на складе. У каждого статуса есть четыре флага:

| Флаг | Что значит 1 |
|---|---|
| materials_fact | Материалы списаны со склада |
| subproducts_fact | Использованные продукты списаны со склада |
| resources_fact | Ресурсы учтены как использованные. У амортизируемых ресурсов уменьшается оставшийся срок службы |
| products_fact | Произведенные продукты поступили на склад |

Если флаг равен 0, движение только запланировано: остаток не меняется, а количество попадает в поле planned остатков (см. [Материалы](https://developers.controlata.ru/hc/api-docs/articles/materials)). Флаги отражают общие правила статусов. Если в настройках статусов заданы условные правила для категорий, позиции этих категорий списываются или поступают уже в более раннем статусе.

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

## Склады

У производства три склада:

* **materials_storage_id**: откуда списываются материалы. По умолчанию это **Склад по умолчанию для списания материалов при производстве**.
* **subproducts_storage_id**: откуда списываются продукты, которые входят в состав выпускаемых (использованные продукты). По умолчанию это **Склад по умолчанию для списания продуктов при производстве**.
* **products_storage_id**: куда поступают произведенные продукты. По умолчанию это **Склад по умолчанию для произведенных продуктов**.

Склады по умолчанию задаются в Controlata на странице **Склады**. Если там для списания выбрано **Автоматически**, каждый материал или продукт списывается со склада, где его остаток больше всего, и в поле склада производства хранится 0. Явно выбрать автоматический склад через API нельзя: он применяется, только если выбран в складах по умолчанию, а склад не передан при создании производства.

## Расход и себестоимость

Расход рассчитывается по составу каждого продукта на момент создания или редактирования производства. Материалы и использованные продукты списываются по FIFO, их себестоимость вместе с ресурсами составляет себестоимость производства. Если остатка не хватает, производство все равно проводится, а недостающее количество оценивается по цене последней партии.

Расход можно уточнить вручную только в Controlata (кнопка **Уточнить расход** в карточке производства). Ручные уточнения сохраняются при редактировании производства через API.

Если составы продуктов изменились после расчета, у производства появляется флаг bom_changed. Производство при этом не пересчитывается само: расход обновится при следующем вызове [v1/production/edit](https://developers.controlata.ru/hc/api-docs/articles/production-edit).

## Заготовки

Заготовки: продукты, которые входят в состав других продуктов. Поле produce_subproducts определяет, что с ними происходит:

* **0**: заготовки берутся готовыми, списываются со склада subproducts_storage_id;
* **1**: заготовки производятся вместе с основными продуктами. Вместо них списываются материалы и ресурсы из их состава, на любой глубине вложенности.

## Производство под заказ

Если в заказе включено производство, Controlata создает производство «Под заказ <номер>» и связывает его с заказом (поле order_id). Подробнее в статье [Заказы](https://developers.controlata.ru/hc/api-docs/articles/orders).

* Продукты такого производства задает заказ. Изменить их через [v1/production/edit](https://developers.controlata.ru/hc/api-docs/articles/production-edit) нельзя, а название, дату, заметки, склады и produce_subproducts можно.
* Удалить такое производство нельзя: оно удаляется вместе с заказом или при отключении производства в заказе.
* Произведенные продукты не поступают на склад, а сразу уходят в заказ. Поэтому products_storage_id на остатки не влияет.

## Привязанные списания

К производству можно привязать списание (поле production_id списания). Стоимость списания добавляется к себестоимости производства и распределяется между произведенными продуктами. Подробнее в статье [Списания](https://developers.controlata.ru/hc/api-docs/articles/writeoffs).
