Списания
Списание товара со склада (порча, брак, истёк срок и т. п.) или возврат части прихода поставщику. Остаток уменьшается только после завершения документа.
| Метод | Адрес | Назначение |
|---|---|---|
| PATCH | /company/trade/writeoff/{model}/complete | Завершить списание |
| PATCH | /company/trade/writeoff/{model}/cancel | Отменить списание |
| GET | /company/trade/writeoff | Список списаний |
| GET | /company/trade/writeoff/{model} | Детали списания |
| POST | /company/trade/writeoff | Создать списание |
| PUT | /company/trade/writeoff/{model} | Изменить списание |
Завершить списание
/company/trade/writeoff/{model}/completeПереводит списание из waiting_for_confirmation в completed: остаток уменьшается со склада; для списания по приходу (source_type = purchase) создаётся операция по балансу поставщика.
Из формы (
multipart/form-data) методPATCHотправляется какPOSTс параметром?_method=PATCH.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры пути
| Параметр | Описание |
|---|---|
model | ID записи |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
message | string | Сообщение |
{
"message": "Success"
}Отменить списание
/company/trade/writeoff/{model}/cancelПереводит списание в canceled. Завершённое списание можно отменить только в день завершения: товар возвращается на склад, операция поставщика удаляется.
Из формы (
multipart/form-data) методPATCHотправляется какPOSTс параметром?_method=PATCH.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры пути
| Параметр | Описание |
|---|---|
model | ID записи |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
message | string | Сообщение |
{
"message": "Success"
}Список списаний
/company/trade/writeoffДокументы списания с пагинацией и фильтрами.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Параметр | Описание |
|---|---|
filter[id] | ID — точное значение |
filter[creator_id] | Создатель — точное значение |
filter[company_id] | Компания — точное значение |
filter[source_type] | Источник — точное значение |
filter[source_id] | Источник — точное значение |
filter[name] | Название — поиск по части строки |
filter[status] | Статус — точное значение |
filter[created_at] | Создано — период: [0] — с, [1] — по (Y-m-d) |
sort[] | Сортировка, - — по убыванию: id, -id |
with[] | Подгрузить связи: creator.profile, company |
page | Номер страницы, с 1 |
page-size | Записей на странице, не больше 20 |
GET /company/trade/writeoff?sort[0]=id&sort[1]=-idОтвет · 200
Постраничный ответ: записи в data[], пагинация в links и meta.
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | object[] | Данные |
data[].id | integer | ID |
data[].creator_id | integer | Создатель |
data[].company_id | integer | Компания |
data[].source_type | string | Источник |
data[].source_id | integer | Источник |
data[].name | string | Название |
data[].status | string | Статус |
data[].created_at | string | Создано |
data[].updated_at | string | Обновлено |
{
"data": [
{
"id": 1,
"creator_id": 2,
"company_id": 1,
"source_type": "stock",
"source_id": 1,
"name": "Writeoff 1",
"status": "waiting_for_confirmation",
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59"
}
],
"links": {
"first": "https://api.wasyt.uz/company/trade/writeoff?page=1",
"last": "https://api.wasyt.uz/company/trade/writeoff?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [],
"path": "https://api.wasyt.uz/company/trade/writeoff",
"per_page": 20,
"to": 1,
"total": 1
}
}Детали списания
/company/trade/writeoff/{model}Один документ списания: источник (склад, приход или инвентаризация), название и статус.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры пути
| Параметр | Описание |
|---|---|
model | ID записи |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | integer | ID |
creator_id | integer | Создатель |
company_id | integer | Компания |
source_type | string | Источник |
source_id | integer | Источник |
name | string | Название |
status | string | Статус |
created_at | string | Создано |
updated_at | string | Обновлено |
{
"id": 1,
"creator_id": 2,
"company_id": 1,
"source_type": "stock",
"source_id": 1,
"name": "Writeoff 1",
"status": "waiting_for_confirmation",
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59"
}Создать списание
/company/trade/writeoffСоздаёт списание в статусе waiting_for_confirmation со склада (source_type = stock) или по завершённому приходу (purchase). Количество строки не больше остатка её партии; товар из активной продажи списать нельзя. Причина строки зависит от источника, для stock_industrial_usage, purchase_incorrect_description и common_other обязателен комментарий.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Тело запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
source_type | string | Да | Источник. Допустимые значения: stock, purchase |
source_id | integer | Да | Источник. ID существующей записи, доступной пользователю |
name | string | Да | Название. Макс. 255 символов |
products | object[] | Да | Продукты. Макс. 1000 элементов |
products[].id | integer | Нет | ID |
products[].product_id | integer | Да | Продукт. Без повторов |
products[].source_product_id | integer | Да | ID строки прихода (партии), из которой списывается товар |
products[].quantity | number | Да | Количество. До 4 знаков после запятой. Не меньше 0.0001 |
products[].reason | string | Да | Причина. Допустимые значения: stock_damage, stock_defect, stock_overdue, stock_industrial_usage, common_loss, common_other |
products[].comment | string | Нет | Комментарий. Макс. 1000 символов |
{
"name": "Writeoff 3",
"products": [
{
"product_id": 1,
"source_product_id": 1,
"quantity": 1,
"reason": "stock_damage",
"comment": "Comment 1"
},
{
"product_id": 2,
"source_product_id": 2,
"quantity": 0.5,
"reason": "common_other",
"comment": "Comment 2"
}
],
"source_type": "stock",
"source_id": 1
}curl -X POST "https://api.wasyt.uz/company/trade/writeoff" \
-H "Accept: application/json" \
-H "Accept-Language: ru" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"name":"Writeoff 3","products":[{"product_id":1,"source_product_id":1,"quantity":1,"reason":"stock_damage","comment":"Comment 1"},{"product_id":2,"source_product_id":2,"quantity":0.5,"reason":"common_other","comment":"Comment 2"}],"source_type":"stock","source_id":1}'Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
source_type | string | Источник |
source_id | integer | Источник |
name | string | Название |
updated_at | string | Обновлено |
created_at | string | Создано |
creator_id | integer | Создатель |
company_id | integer | Компания |
id | integer | ID |
{
"source_type": "stock",
"source_id": 1,
"name": "Writeoff 3",
"updated_at": "2026-09-30 12:56:04",
"created_at": "2026-09-30 12:56:04",
"creator_id": 2,
"company_id": 1,
"id": 26
}Пример ошибки · 422
{
"message": "Этот товар участвует в активной продаже, поэтому его нельзя списать",
"errors": {
"products.0.product_id": [
"Этот товар участвует в активной продаже, поэтому его нельзя списать"
]
}
}Изменить списание
/company/trade/writeoff/{model}Перезаписывает списание и его строки по правилам создания. Только в статусе waiting_for_confirmation.
Из формы (
multipart/form-data) методPUTотправляется какPOSTс параметром?_method=PUT.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры пути
| Параметр | Описание |
|---|---|
model | ID записи |
Тело запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
source_type | string | Да | Источник. Допустимые значения: stock, purchase |
source_id | integer | Да | Источник. ID существующей записи, доступной пользователю |
name | string | Да | Название. Макс. 255 символов |
products | object[] | Да | Продукты. Макс. 1000 элементов |
products[].id | integer | Нет | ID |
products[].product_id | integer | Да | Продукт. Без повторов |
products[].source_product_id | integer | Да | ID строки прихода (партии), из которой списывается товар |
products[].quantity | number | Да | Количество. До 4 знаков после запятой. Не меньше 0.0001 |
products[].reason | string | Да | Причина. Допустимые значения: stock_damage, stock_defect, stock_overdue, stock_industrial_usage, common_loss, common_other |
products[].comment | string | Нет | Комментарий. Макс. 1000 символов |
{
"name": "Writeoff 1",
"products": [
{
"product_id": 1,
"source_product_id": 1,
"quantity": 1,
"reason": "stock_damage",
"comment": "Comment 1"
},
{
"product_id": 2,
"source_product_id": 2,
"quantity": 0.5,
"reason": "common_other",
"comment": "Comment 2"
}
],
"source_type": "stock",
"source_id": 1
}curl -X PUT "https://api.wasyt.uz/company/trade/writeoff/1" \
-H "Accept: application/json" \
-H "Accept-Language: ru" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"name":"Writeoff 1","products":[{"product_id":1,"source_product_id":1,"quantity":1,"reason":"stock_damage","comment":"Comment 1"},{"product_id":2,"source_product_id":2,"quantity":0.5,"reason":"common_other","comment":"Comment 2"}],"source_type":"stock","source_id":1}'Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | integer | ID |
creator_id | integer | Создатель |
company_id | integer | Компания |
source_type | string | Источник |
source_id | integer | Источник |
name | string | Название |
status | string | Статус |
created_at | string | Создано |
updated_at | string | Обновлено |
{
"id": 1,
"creator_id": 2,
"company_id": 1,
"source_type": "stock",
"source_id": 1,
"name": "Writeoff 1",
"status": "waiting_for_confirmation",
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:56:06"
}
