Создает ресурс. Набор обязательных полей зависит от типа расчета, подробнее о типах в статье [Ресурсы](https://developers.controlata.ru/hc/api-docs/articles/resources).

```
v1/resources/add.php
```

## Параметры

| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| name | string | Да | Название |
| type | string | Да | Тип расчета: «rate», «percent» или «amortized» |
| dynamic | int | Нет | 1: цена фиксированной ставки или процент процентного ресурса указывается в составе продукта. По умолчанию 0. У амортизации не используется |
| unit | string | Для rate и amortized | Единица измерения, код из статьи [Единицы измерения](https://developers.controlata.ru/hc/api-docs/articles/units-get-list). У ставки с dynamic 1 не нужна |
| price | float | Для rate | Цена за единицу, 0 или больше. У ставки с dynamic 1 не нужна |
| base | string | Для percent | База расчета: «cost» (себестоимость) или «price» (цена продажи) |
| percent | float | Для percent | Процент, больше 0 и не больше 100. При dynamic 1 не нужен |
| initial_cost | float | Для amortized | Первоначальная стоимость, 0 или больше |
| useful_life | float | Для amortized | Срок службы в единицах unit, больше 0 |
| notes | string | Нет | Заметки |
| categories | array | Нет | ID категорий из [v1/categories/get_list](https://developers.controlata.ru/hc/api-docs/articles/categories-get-list) с type «resources» |

Цена амортизируемого ресурса рассчитывается автоматически: initial_cost / useful_life. Станок за 600000 рублей со сроком службы 2000 часов стоит 300 рублей за час работы.

Категории через API не создаются, можно назначить только существующие. В categories можно передать числа или объекты с полем id, как их возвращает [v1/resources/get_entry](https://developers.controlata.ru/hc/api-docs/articles/resources-get-entry).

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

Фиксированная ставка: часовая ставка столяра.

```
{
    "name": "Работа столяра",
    "type": "rate",
    "unit": "ч",
    "price": 600,
    "categories": [31]
}
```

Процент от себестоимости, одинаковый для всех продуктов:

```
{
    "name": "Накладные расходы",
    "type": "percent",
    "base": "cost",
    "percent": 10
}
```

Комиссия маркетплейса, процент которой задается в составе каждого продукта:

```
{
    "name": "Комиссия маркетплейса",
    "type": "percent",
    "dynamic": 1,
    "base": "price"
}
```

Амортизация оборудования:

```
{
    "name": "Фрезерный станок",
    "type": "amortized",
    "unit": "ч",
    "initial_cost": 600000,
    "useful_life": 2000
}
```

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

```
{
    "success": true,
    "resource_id": 57
}
```

## Ошибки

| Ошибка | Причина |
|---|---|
| No name in input | Не передано обязательное поле (вместо name будет имя поля: type или поле, обязательное для типа) |
| Name must not be empty | Пустое название |
| Name must be a string | Название передано не строкой, например массивом |
| Invalid type value. Must be one of: rate, percent, amortized | Неверный type |
| Unit not set | Передана пустая единица измерения |
| Unit not found | Неизвестная единица измерения |
| Invalid price value. Must be a number, 0 or greater | Цена не число или меньше 0 (так же для initial_cost) |
| Invalid base value. Must be one of: cost, price | Неверная база расчета |
| Percent must be greater than 0 and not exceed 100 | Процент 0, меньше 0 или больше 100 |
| Useful life must be greater than 0 | Срок службы 0 или меньше |
| Category 12 not found | Категория не найдена |
