Создает производство. Расход материалов, использованных продуктов и ресурсов Controlata рассчитывает сама по составам продуктов, передавать его не нужно.

```
v1/production/add.php
```

## Параметры

| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| products | array | Да | Выпускаемые продукты, см. ниже |
| date | string | Нет | Дата производства, YYYY-MM-DD. По умолчанию сегодня |
| name | string | Нет | Название |
| notes | string | Нет | Заметки |
| produce_subproducts | int | Нет | 1: производить заготовки вместе с продуктами. По умолчанию 0 |
| materials_storage_id | int | Нет | Склад, с которого списываются материалы |
| subproducts_storage_id | int | Нет | Склад, с которого списываются использованные продукты |
| products_storage_id | int | Нет | Склад, на который поступают произведенные продукты |

Строка products:

| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | int | id или sku | ID продукта |
| sku | string | id или sku | Артикул продукта |
| amount | float | Да | Количество, больше 0 |

Как указывать продукт по id или артикулу, описано в статье [Общие правила](https://developers.controlata.ru/hc/api-docs/articles/rules). Один продукт можно указать в нескольких строках.

## Как работает

* **Статус** берется из настройки **Статус нового производства по умолчанию**. От него зависит, списываются ли материалы и поступают ли продукты на склад сразу (см. [Производство](https://developers.controlata.ru/hc/api-docs/articles/production)).
* **Склады.** Если склад не передан или равен 0, берется склад по умолчанию из настроек складов. Если для списания там выбрано **Автоматически**, каждый материал или продукт списывается со склада с наибольшим остатком.
* **Заготовки.** Настройка компании **Производить заготовки по умолчанию** в API не применяется: без produce_subproducts заготовки списываются со склада готовыми.
* **Номер** присваивается автоматически, задать его нельзя.
* **Нехватка остатка** не мешает созданию: материалы списываются в минус.

## Пример запроса

```
{
    "date": "2026-10-06",
    "name": "Партия столов",
    "products": [
        {
            "id": 512,
            "amount": 10
        },
        {
            "sku": "P-CHAIR-01",
            "amount": 40
        }
    ],
    "materials_storage_id": 3998,
    "products_storage_id": 4001,
    "produce_subproducts": 1
}
```

## Пример ответа

```
{
    "success": true,
    "production_id": 39978,
    "num": 152,
    "status": 0
}
```

В ответе приходят ID, номер и код статуса нового производства.

## Ошибки

| Ошибка | Причина |
|---|---|
| No products in input | Не передан products или передан пустой массив |
| Products is not an array | products не массив |
| Line 0 of products must be an object | Строка products не объект (вместо 0 будет номер строки) |
| SKU or id not set for product 0 | В строке нет ни id, ни sku |
| Product with id 512 not found | Продукт не найден или удален (для артикула: Product with SKU "P-CHAIR-01" not found) |
| Amount must be greater than 0 for product with id 512 | Количество не число или не больше 0 после округления |
| Storage ID not found | Склад не найден или удален |
| Date is not a valid date in format YYYY-MM-DD | Неверный формат даты |
