Skip to content

Товары приходов ​

Строки приходов и инструменты их заполнения: импорт из Excel (простой и полный с созданием номенклатуры) и распознавание фото накладной через AI. Импорт только разбирает файл и возвращает строки для формы прихода.

МетодАдресНазначение
POST/company/trade/purchase-product/importИмпорт товаров из Excel
POST/company/trade/purchase-product/full-importПолный импорт из Excel
POST/company/trade/purchase-product/ai-importРаспознать накладную по фото
GET/company/trade/purchase-product/download-exampleШаблон для импорта
GET/company/trade/purchase-product/download-full-exampleШаблон полного импорта
GET/company/trade/purchase-productСписок товаров приходов
GET/company/trade/purchase-product/{model}Строка прихода

Импорт товаров из Excel ​

POST/company/trade/purchase-product/import

Разбирает файл по шаблону (до 500 строк): товар ищется по полному названию, для каждой строки проверяются количество, приходная цена и наценка (процент или сумма). Возвращает products для формы прихода; ошибки указывают ячейку. Ничего не сохраняет.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Тело запроса ​

ПолеТипОбязательноОписание
filefileДаФайл. Форматы: xlsx. Макс. 1024 КБ
json
{
    "company_id": 1
}
bash
curl -X POST "https://api.wasyt.uz/company/trade/purchase-product/import" \
  -H "Accept: application/json" \
  -H "Accept-Language: ru" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"company_id":1}'

Ответ · 200 ​

Поля ответа
ПолеТипОписание
productsobject[]Продукты
products[].product_idintegerПродукт
products[].namestringНазвание
products[].quantityintegerКоличество
products[].purchase_priceintegerЦена при покупке
products[].markup_percentintegerНаценка %
products[].markup_fixedintegerНаценка
json
{
    "products": [
        {
            "product_id": 3,
            "name": "Product 2",
            "quantity": 2,
            "purchase_price": 1500,
            "markup_percent": 15,
            "markup_fixed": 0
        }
    ]
}

Пример ошибки · 422 ​

json
{
    "message": "Ошибка в ячейке D2 (Изменение значения поля markup percent запрещает присутствие markup fixed.) (and 1 more error)",
    "errors": {
        "file": [
            "Ошибка в ячейке D2 (Изменение значения поля markup percent запрещает присутствие markup fixed.)",
            "Ошибка в ячейке E2 (Изменение значения поля markup fixed запрещает присутствие markup percent.)"
        ]
    }
}

Полный импорт из Excel ​

POST/company/trade/purchase-product/full-import

Разбирает файл полного шаблона (до 1000 строк): товар ищется по штрихкоду, затем по названию; недостающие категории, бренды и товары создаются, пустой штрихкод генерируется. Возвращает products для формы прихода — сам приход не создаётся.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Тело запроса ​

ПолеТипОбязательноОписание
filefileДаФайл. Форматы: xlsx. Макс. 1024 КБ
json
{
    "company_id": 1
}
bash
curl -X POST "https://api.wasyt.uz/company/trade/purchase-product/full-import" \
  -H "Accept: application/json" \
  -H "Accept-Language: ru" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"company_id":1}'

Ответ · 200 ​

Поля ответа
ПолеТипОписание
productsobject[]Продукты
products[].product_idintegerПродукт
products[].namestringНазвание
products[].category_idintegerКатегория
products[].categorystringКатегория
products[].brand_idintegerБренд
products[].brandstringБренд
products[].unit_idintegerЕдиница измерения
products[].unitstring
products[].barcodestringШтрих-код
products[].quantityintegerКоличество
products[].purchase_priceintegerЦена при покупке
products[].markup_percentintegerНаценка %
products[].markup_fixedintegerНаценка
json
{
    "products": [
        {
            "product_id": 3,
            "name": "Product 2",
            "category_id": 5,
            "category": "Category 1-1-2 ru",
            "brand_id": 1,
            "brand": "Brand 1",
            "unit_id": 2,
            "unit": "Unit 2 ru",
            "barcode": "0000000000002",
            "quantity": 2,
            "purchase_price": 1500,
            "markup_percent": 15,
            "markup_fixed": 0
        },
        {
            "product_id": 90,
            "name": "Product 3",
            "category_id": 3,
            "category": "Category 1-1 ru",
            "brand_id": 1,
            "brand": "Brand 1",
            "unit_id": 50,
            "unit": "Шт",
            "barcode": "4780000000017",
            "quantity": 5,
            "purchase_price": 1000,
            "markup_percent": 0,
            "markup_fixed": 500
        }
    ]
}

Пример ошибки · 422 ​

json
{
    "message": "Ошибка в ячейке D2 (Выбранная запись не существует или была удалена)",
    "errors": {
        "file": [
            "Ошибка в ячейке D2 (Выбранная запись не существует или была удалена)"
        ]
    }
}

Распознать накладную по фото ​

POST/company/trade/purchase-product/ai-import

AI читает фото накладной поставщика (jpg/png до 8 МБ) и возвращает products: название, количество, приходную цену и совпавший товар каталога (по штрихкоду или названию). Не найденные строки приходят с product_id = null и matched = false; товары не создаются. Ошибка 400, если позиции не распознаны.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Тело запроса ​

ПолеТипОбязательноОписание
filefileДаФайл. Форматы: jpg, jpeg, png. Макс. 8192 КБ
json
{
    "company_id": 1
}
bash
curl -X POST "https://api.wasyt.uz/company/trade/purchase-product/ai-import" \
  -H "Accept: application/json" \
  -H "Accept-Language: ru" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"company_id":1}'

Ответ · 200 ​

Поля ответа
ПолеТипОписание
productsobject[]Продукты
products[].product_idintegerПродукт
products[].namestringНазвание
products[].quantityintegerКоличество
products[].purchase_priceintegerЦена при покупке
products[].matchedboolean
json
{
    "products": [
        {
            "product_id": 3,
            "name": "Product 2",
            "quantity": 3,
            "purchase_price": 1500,
            "matched": true
        }
    ]
}

Шаблон для импорта ​

GET/company/trade/purchase-product/download-example

Скачивает пример Excel-файла для простого импорта товаров прихода.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Ответ · 200 ​

Ответ — файл или текст, не JSON.

Шаблон полного импорта ​

GET/company/trade/purchase-product/download-full-example

Скачивает пример Excel-файла для полного импорта с созданием номенклатуры.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Ответ · 200 ​

Ответ — файл или текст, не JSON.

Список товаров приходов ​

GET/company/trade/purchase-product

Строки приходов с пагинацией и фильтрами; с format=excel — выгрузка в Excel.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры запроса ​

ПолеТипОбязательноОписание
formatstringНетФормат ответа: excel — скачать список файлом Excel вместо JSON (учитывает те же фильтры)
filter[id]—НетID — точное значение
filter[company_id]—НетКомпания — одно значение или список filter[company_id][]
filter[purchase_id]—НетОприходывание — точное значение
filter[product_id]—НетПродукт — точное значение
filter[quantity]—НетКоличество — диапазон: [0] — от, [1] — до
filter[actual_quantity]—НетФактическое количество — диапазон: [0] — от, [1] — до
filter[created_at]—НетСоздано — период: [0] — с, [1] — по (Y-m-d)
filter[product.category_id]—НетКатегория — точное значение (с учётом вложенных)
filter[product.brand_id]—НетБренд — точное значение
sort[]—НетСортировка, - — по убыванию: id, -id
with[]—НетПодгрузить связи: company, purchase, purchase.stock, purchase.supplier, product, product.parent, product.category.ancestors, product.brand, product.unit
page—НетНомер страницы, с 1
page-size—НетЗаписей на странице, не больше 50

Ответ · 200 ​

Постраничный ответ: записи в data[], пагинация в links и meta.

Поля ответа
ПолеТипОписание
dataobject[]Данные
data[].idintegerID
data[].company_idintegerКомпания
data[].purchase_idintegerОприходывание
data[].product_idintegerПродукт
data[].purchase_pricenumberЦена при покупке
data[].sale_pricenumberЦена при продаже
data[].quantityintegerКоличество
data[].actual_quantityintegerФактическое количество
data[].created_atstringСоздано
data[].updated_atstringОбновлено
data[].currencystringВалюта
data[].purchase_price_uzsinteger
data[].sale_price_uzsinteger
data[].purchase_price_usdnumber
data[].sale_price_usdnumber
data[].purchase_price_eurnumber
data[].sale_price_eurnumber
data[].purchase_price_rubnumber
data[].sale_price_rubnumber
json
{
    "data": [
        {
            "id": 120,
            "company_id": 1,
            "purchase_id": 139,
            "product_id": 1,
            "purchase_price": 8.5,
            "sale_price": 10.12,
            "quantity": 1,
            "actual_quantity": 0,
            "created_at": "2026-09-30 12:54:37",
            "updated_at": "2026-09-30 12:54:37",
            "currency": "usd",
            "purchase_price_uzs": 8500,
            "sale_price_uzs": 10120,
            "purchase_price_usd": 8.5,
            "sale_price_usd": 10.12,
            "purchase_price_eur": 8.5,
            "sale_price_eur": 10.12,
            "purchase_price_rub": 8.5,
            "sale_price_rub": 10.12
        }
    ],
    "links": {
        "first": "https://api.wasyt.uz/company/trade/purchase-product?page=1",
        "last": "https://api.wasyt.uz/company/trade/purchase-product?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [],
        "path": "https://api.wasyt.uz/company/trade/purchase-product",
        "per_page": 50,
        "to": 1,
        "total": 1
    }
}

Строка прихода ​

GET/company/trade/purchase-product/{model}

Одна строка прихода: товар, количество, приходная и продажная цена.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Ответ · 200 ​

Поля ответа
ПолеТипОписание
idintegerID
company_idintegerКомпания
purchase_idintegerОприходывание
product_idintegerПродукт
purchase_priceintegerЦена при покупке
sale_priceintegerЦена при продаже
quantityintegerКоличество
actual_quantityintegerФактическое количество
created_atstringСоздано
updated_atstringОбновлено
currencystringВалюта
purchase_price_uzsinteger
sale_price_uzsinteger
purchase_price_usdinteger
sale_price_usdnumber
purchase_price_eurinteger
sale_price_eurnumber
purchase_price_rubinteger
sale_price_rubnumber
json
{
    "id": 1,
    "company_id": 1,
    "purchase_id": 1,
    "product_id": 1,
    "purchase_price": 1000,
    "sale_price": 1100,
    "quantity": 1,
    "actual_quantity": 1,
    "created_at": "2026-09-30 12:47:59",
    "updated_at": "2026-09-30 12:47:59",
    "currency": "uzs",
    "purchase_price_uzs": 1000,
    "sale_price_uzs": 1100,
    "purchase_price_usd": 1,
    "sale_price_usd": 1.1,
    "purchase_price_eur": 1,
    "sale_price_eur": 1.1,
    "purchase_price_rub": 1,
    "sale_price_rub": 1.1
}