Отчёты
Раздел «Отчёты»: продажи, кассиры, клиенты, ABC-анализ, эффективность товаров, остатки, движение товаров, списания, акт сверки с поставщиком. Отчёты не кешируются; период по умолчанию — вся история до конца текущего месяца, большинство списков можно выгрузить в Excel через format=excel, а пара *-total отдаёт карточки итогов с теми же фильтрами.
Отчёт по кассирам
/company/stat/report/cashiersСтрока на кассира × филиал × кассу: число чеков completed, число возвратов, выручка, сумма возвратов, скидки и средний чек по валютам. Итоговые карточки — GET company/stat/report/cashiers-total.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_ids | array | Нет | ID филиалов для фильтра; по умолчанию — все доступные пользователю |
name | string | Нет | Название. Макс. 255 символов |
phone | string | Нет | Телефон. Макс. 255 символов |
cashbox_id | integer | Нет | Касса |
format | string | Нет | excel — скачать отчёт файлом Excel вместо JSON (не больше 30 000 строк) |
page | integer | Нет | Номер страницы, с 1 |
page-size | integer | Нет | Строк на странице, не больше 20 (по умолчанию 20) |
Ответ · 200
Постраничный ответ: записи в data[], пагинация в links и meta.
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array | Данные |
{
"data": [],
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"per_page": 20,
"to": null,
"total": 0
}
}Итоги по кассирам
/company/stat/report/cashiers-totalКарточки к отчёту GET company/stat/report/cashiers с теми же фильтрами: число кассиров, чеков и возвратов, выручка, сумма возвратов, чистая выручка, скидки и средний чек по валютам.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_ids | array | Нет | ID филиалов для фильтра; по умолчанию — все доступные пользователю |
name | string | Нет | Название. Макс. 255 символов |
phone | string | Нет | Телефон. Макс. 255 символов |
cashbox_id | integer | Нет | Касса |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
cashiers_count | integer | |
net_revenue | object | |
net_revenue.uzs | integer | |
net_revenue.usd | integer | |
net_revenue.eur | integer | |
net_revenue.rub | integer | |
average_check | object | Средний чек |
average_check.uzs | integer | |
average_check.usd | integer | |
average_check.eur | integer | |
average_check.rub | integer | |
total_receipts_count | integer | |
total_returns_count | integer | |
total_revenue | object | |
total_revenue.uzs | integer | |
total_revenue.usd | integer | |
total_revenue.eur | integer | |
total_revenue.rub | integer | |
total_returned_amount | object | |
total_returned_amount.uzs | integer | |
total_returned_amount.usd | integer | |
total_returned_amount.eur | integer | |
total_returned_amount.rub | integer | |
total_discounts | object | |
total_discounts.uzs | integer | |
total_discounts.usd | integer | |
total_discounts.eur | integer | |
total_discounts.rub | integer |
{
"cashiers_count": 0,
"net_revenue": {
"uzs": 0,
"usd": 0,
"eur": 0,
"rub": 0
},
"average_check": {
"uzs": 0,
"usd": 0,
"eur": 0,
"rub": 0
},
"total_receipts_count": 0,
"total_returns_count": 0,
"total_revenue": {
"uzs": 0,
"usd": 0,
"eur": 0,
"rub": 0
},
"total_returned_amount": {
"uzs": 0,
"usd": 0,
"eur": 0,
"rub": 0
},
"total_discounts": {
"uzs": 0,
"usd": 0,
"eur": 0,
"rub": 0
}
}ABC-анализ
/company/stat/report/abcКаждый товар доступных филиалов с проданным за период количеством, долей и накопленной долей продаж и сегментом a / b / c по порогам компании (GET company/stat/report/abc-thresholds). Фильтры name и segment сужают строки, не пересчитывая доли. Итоги — GET company/stat/report/abc-total.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_ids | array | Нет | ID филиалов для фильтра; по умолчанию — все доступные пользователю |
name | string | Нет | Название. Макс. 255 символов |
segment | string | Нет | Сегмент. Допустимые значения: a, b, c |
format | string | Нет | excel — скачать отчёт файлом Excel вместо JSON (не больше 30 000 строк) |
page | integer | Нет | Номер страницы, с 1 |
page-size | integer | Нет | Строк на странице, не больше 20 (по умолчанию 20) |
Ответ · 200
Постраничный ответ: записи в data[], пагинация в links и meta.
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array | Данные |
{
"data": [],
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"per_page": 20,
"to": null,
"total": 0
}
}Итоги ABC-анализа
/company/stat/report/abc-totalКарточки к отчёту GET company/stat/report/abc с теми же фильтрами: число товаров в сегментах a, b, c, всего товаров, проданное количество и текущие пороги сегментов.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_ids | array | Нет | ID филиалов для фильтра; по умолчанию — все доступные пользователю |
name | string | Нет | Название. Макс. 255 символов |
segment | string | Нет | Сегмент. Допустимые значения: a, b, c |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
a_count | integer | |
b_count | integer | |
c_count | integer | |
products_count | integer | |
sold_quantity | integer | Кол-во в продаже |
thresholds | object | |
thresholds.a | integer | |
thresholds.b | integer | |
thresholds.c | integer |
{
"a_count": 0,
"b_count": 0,
"c_count": 3,
"products_count": 3,
"sold_quantity": 0,
"thresholds": {
"a": 75,
"b": 15,
"c": 10
}
}Пороги сегментов ABC
/company/stat/report/abc-thresholdsПроценты сегментов a, b, c для ABC-анализа. Хранятся на головной компании (филиал читает пороги родителя); по умолчанию 75 / 15 / 10.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
a | integer | |
b | integer | |
c | integer |
{
"a": 75,
"b": 15,
"c": 10
}Изменить пороги ABC
/company/stat/report/abc-thresholdsСохраняет проценты сегментов на головной компании — они действуют для всех её филиалов. Сумма a + b + c должна быть ровно 100, иначе ответ 400.
Из формы (
multipart/form-data) методPUTотправляется какPOSTс параметром?_method=PUT.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Тело запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
a | integer | Да | Доля сегмента A, %. Не меньше 1. Не больше 100 |
b | integer | Да | Доля сегмента B, %. Не меньше 0. Не больше 100 |
c | integer | Да | Доля сегмента C, %. Не меньше 0. Не больше 100 |
Ответ
Пример ответа пока не записан тестами.
Отчёт по бонусным тарифам
/company/stat/report/bonus-tariffsПо каждому бонусному тарифу: филиал, начисленные (income) и списанные (outcome) за период бонусы клиентов этого тарифа и их текущий накопленный бонус. Без пагинации; фильтр name ищет по названию тарифа.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_ids | array | Нет | ID филиалов для фильтра; по умолчанию — все доступные пользователю |
name | string | Нет | Название. Макс. 255 символов |
product_category_id | integer | Нет | Категория |
product_brand_id | integer | Нет | ID бренда товара |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
[].id | integer | ID |
[].name | string | Название |
[].company_id | integer | Компания |
[].company_name | string | Компания |
[].income | string | Доход |
[].outcome | string | |
[].client_bonus_accumulations_amount | string |
[
{
"id": 2,
"name": "Tariff 2",
"company_id": 1,
"company_name": "Company 1",
"income": "0",
"outcome": "0",
"client_bonus_accumulations_amount": "0"
},
{
"id": 1,
"name": "Tariff 1",
"company_id": 1,
"company_name": "Company 1",
"income": "1000.00",
"outcome": "0",
"client_bonus_accumulations_amount": "1000.00"
}
]Отчёт по клиентам
/company/stat/report/clientsСтрока на клиента: куплено и возвращено (количество и сумма по валютам), число чеков и средний чек за период; учитываются чеки completed, partial_returned, full_returned. Итоговые карточки — GET company/stat/report/clients-total.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_ids | array | Нет | ID филиалов для фильтра; по умолчанию — все доступные пользователю |
name | string | Нет | Название. Макс. 255 символов |
phone | string | Нет | Телефон. Макс. 255 символов |
format | string | Нет | excel — скачать отчёт файлом Excel вместо JSON (не больше 30 000 строк) |
page | integer | Нет | Номер страницы, с 1 |
page-size | integer | Нет | Строк на странице, не больше 20 (по умолчанию 20) |
Ответ · 200
Постраничный ответ: записи в data[], пагинация в links и meta.
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array | Данные |
{
"data": [],
"links": {
"first": "https://api.wasyt.uz/company/stat/report/clients?page=1",
"last": "https://api.wasyt.uz/company/stat/report/clients?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [],
"path": "https://api.wasyt.uz/company/stat/report/clients",
"per_page": 20,
"to": null,
"total": 0
}
}Итоги по клиентам
/company/stat/report/clients-totalКарточки к отчёту GET company/stat/report/clients с теми же фильтрами: число клиентов, созданных в периоде, чистая сумма покупок и средний чек по валютам.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_ids | array | Нет | ID филиалов для фильтра; по умолчанию — все доступные пользователю |
name | string | Нет | Название. Макс. 255 символов |
phone | string | Нет | Телефон. Макс. 255 символов |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
clients_count | integer | |
income_amount | object | Выручка |
income_amount.uzs | string | |
income_amount.usd | string | |
income_amount.eur | string | |
income_amount.rub | string | |
average_check | object | Средний чек |
average_check.uzs | integer | |
average_check.usd | integer | |
average_check.eur | integer | |
average_check.rub | integer |
{
"clients_count": 0,
"income_amount": {
"uzs": "0",
"usd": "0",
"eur": "0",
"rub": "0"
},
"average_check": {
"uzs": 0,
"usd": 0,
"eur": 0,
"rub": 0
}
}Эффективность товаров
/company/stat/report/efficiencyКаждый товар доступных филиалов: начальный остаток, приход, продано за период и конечный остаток (по приходам, продажам и списаниям). Сортировка по названию; пары *-total нет.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_ids | array | Нет | ID филиалов для фильтра; по умолчанию — все доступные пользователю |
name | string | Нет | Название. Макс. 255 символов |
format | string | Нет | excel — скачать отчёт файлом Excel вместо JSON (не больше 30 000 строк) |
page | integer | Нет | Номер страницы, с 1 |
page-size | integer | Нет | Строк на странице, не больше 20 (по умолчанию 20) |
Ответ · 200
Постраничный ответ: записи в data[], пагинация в links и meta.
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array | Данные |
{
"data": [],
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"per_page": 20,
"to": null,
"total": 0
}
}Отчёт по проданным товарам
/company/stat/report/sale-productsСтрока на товар: чистое проданное количество, выручка, себестоимость, прибыль и рентабельность (%) по валютам за период. Фильтр категории включает подкатегории.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_ids | array | Нет | ID филиалов для фильтра; по умолчанию — все доступные пользователю |
name | string | Нет | Название. Макс. 255 символов |
product_category_id | integer | Нет | Категория |
product_brand_id | integer | Нет | ID бренда товара |
format | string | Нет | excel — скачать отчёт файлом Excel вместо JSON (не больше 30 000 строк) |
page | integer | Нет | Номер страницы, с 1 |
page-size | integer | Нет | Строк на странице, не больше 20 (по умолчанию 20) |
Ответ · 200
Постраничный ответ: записи в data[], пагинация в links и meta.
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array | Данные |
{
"data": [],
"links": {
"first": "https://api.wasyt.uz/company/stat/report/sale-products?page=1",
"last": "https://api.wasyt.uz/company/stat/report/sale-products?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [],
"path": "https://api.wasyt.uz/company/stat/report/sale-products",
"per_page": 20,
"to": null,
"total": 0
}
}Отчёт по продажам
/company/stat/report/salesСтрока на товар × филиал: категория, кассы, проданное и возвращённое количество, чистая выручка по валютам и дата последней продажи; услуги не входят, учитываются чеки completed, partial_returned, full_returned. Итоги — GET company/stat/report/sales-total.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_ids | array | Нет | ID филиалов для фильтра; по умолчанию — все доступные пользователю |
name | string | Нет | Название. Макс. 255 символов |
format | string | Нет | excel — скачать отчёт файлом Excel вместо JSON (не больше 30 000 строк) |
page | integer | Нет | Номер страницы, с 1 |
page-size | integer | Нет | Строк на странице, не больше 20 (по умолчанию 20) |
Ответ · 200
Постраничный ответ: записи в data[], пагинация в links и meta.
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array | Данные |
{
"data": [],
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"per_page": 20,
"to": null,
"total": 0
}
}Итоги по продажам
/company/stat/report/sales-totalКарточки к отчёту GET company/stat/report/sales с теми же фильтрами: чистое проданное количество, выручка и прибыль по валютам.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_ids | array | Нет | ID филиалов для фильтра; по умолчанию — все доступные пользователю |
name | string | Нет | Название. Макс. 255 символов |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
sold_quantity | integer | Кол-во в продаже |
income_amount | object | Выручка |
income_amount.uzs | integer | |
income_amount.usd | integer | |
income_amount.eur | integer | |
income_amount.rub | integer | |
profit_amount | object | Сумма прибыли |
profit_amount.uzs | integer | |
profit_amount.usd | integer | |
profit_amount.eur | integer | |
profit_amount.rub | integer |
{
"sold_quantity": 0,
"income_amount": {
"uzs": 0,
"usd": 0,
"eur": 0,
"rub": 0
},
"profit_amount": {
"uzs": 0,
"usd": 0,
"eur": 0,
"rub": 0
}
}Остатки товаров
/company/stat/report/stock-balanceОстаток каждого товара по филиалу и складу на дату date_to (приходы и входящие перемещения плюс, продажи, списания и исходящие перемещения минус), с ценой прихода, ценой продажи и статусом in_stock / low_stock / zero_stock / illiquid. Товар без движения — одна строка без склада с нулём; product_brand_id не применяется. Итоги — GET company/stat/report/stock-balance-total.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_ids | array | Нет | ID филиалов для фильтра; по умолчанию — все доступные пользователю |
name | string | Нет | Название. Макс. 255 символов |
product_category_id | integer | Нет | Категория |
product_brand_id | integer | Нет | ID бренда товара (в этом отчёте не применяется) |
company_ids[] | integer | Нет | ID филиала |
status | string | Нет | Статус. Допустимые значения: in_stock, low_stock, zero_stock, illiquid |
format | string | Нет | excel — скачать отчёт файлом Excel вместо JSON (не больше 30 000 строк) |
page | integer | Нет | Номер страницы, с 1 |
page-size | integer | Нет | Строк на странице, не больше 20 (по умолчанию 20) |
Ответ · 200
Постраничный ответ: записи в data[], пагинация в links и meta.
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array | Данные |
{
"data": [],
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"per_page": 20,
"to": null,
"total": 0
}
}Итоги по остаткам
/company/stat/report/stock-balance-totalКарточки к отчёту GET company/stat/report/stock-balance с теми же фильтрами: стоимость остатков по цене прихода в разрезе валют, число товаров и число товаров с малым, нулевым остатком и неликвидных (считаются уникальные товары).
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_ids | array | Нет | ID филиалов для фильтра; по умолчанию — все доступные пользователю |
name | string | Нет | Название. Макс. 255 символов |
product_category_id | integer | Нет | Категория |
product_brand_id | integer | Нет | ID бренда товара (в этом отчёте не применяется) |
company_ids[] | integer | Нет | ID филиала |
status | string | Нет | Статус. Допустимые значения: in_stock, low_stock, zero_stock, illiquid |
Ответ
Пример ответа пока не записан тестами.
Движение товаров
/company/stat/report/stock-movementТовары, сгруппированные по складам: начальный остаток, приход, расход (продажи и списания) и конечный остаток — количество и сумма по валютам, с итогами по складу и общими totals. Отдаётся целиком, без пагинации; фильтруется по company_ids[], stock_ids[], product_ids[] (name, product_category_id, product_brand_id не применяются).
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_ids | array | Нет | ID филиалов для фильтра; по умолчанию — все доступные пользователю |
name | string | Нет | Название. Макс. 255 символов |
product_category_id | integer | Нет | Категория |
product_brand_id | integer | Нет | ID бренда товара (в этом отчёте не применяется) |
stock_ids | array | Нет | ID складов для фильтра |
stock_ids[] | integer | Нет | ID склада |
product_ids | array | Нет | ID товаров для фильтра |
product_ids[] | integer | Нет | ID товара |
format | string | Нет | excel — скачать отчёт файлом Excel вместо JSON (не больше 30 000 строк) |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | object[] | Данные |
data[].stock_id | integer | Склад |
data[].stock_name | string | |
data[].products | object[] | Продукты |
data[].products[].product_id | integer | Продукт |
data[].products[].product_name | string | Наименование товаров |
data[].products[].initial_quantity | string | Начальный остаток |
data[].products[].initial_amount | object | |
data[].products[].initial_amount.uzs | string | |
data[].products[].initial_amount.usd | string | |
data[].products[].initial_amount.eur | string | |
data[].products[].initial_amount.rub | string | |
data[].products[].income_quantity | string | Приход |
data[].products[].income_amount | object | Выручка |
data[].products[].income_amount.uzs | string | |
data[].products[].income_amount.usd | string | |
data[].products[].income_amount.eur | string | |
data[].products[].income_amount.rub | string | |
data[].products[].outcome_quantity | string | |
data[].products[].outcome_amount | object | |
data[].products[].outcome_amount.uzs | string | |
data[].products[].outcome_amount.usd | string | |
data[].products[].outcome_amount.eur | string | |
data[].products[].outcome_amount.rub | string | |
data[].products[].final_quantity | integer | Конечный остаток |
data[].products[].final_amount | object | |
data[].products[].final_amount.uzs | integer | |
data[].products[].final_amount.usd | integer | |
data[].products[].final_amount.eur | integer | |
data[].products[].final_amount.rub | integer | |
data[].totals | object | |
data[].totals.initial_quantity | integer | Начальный остаток |
data[].totals.income_quantity | integer | Приход |
data[].totals.outcome_quantity | integer | |
data[].totals.final_quantity | integer | Конечный остаток |
data[].totals.initial_amount | object | |
data[].totals.initial_amount.uzs | integer | |
data[].totals.initial_amount.usd | integer | |
data[].totals.initial_amount.eur | integer | |
data[].totals.initial_amount.rub | integer | |
data[].totals.income_amount | object | Выручка |
data[].totals.income_amount.uzs | integer | |
data[].totals.income_amount.usd | integer | |
data[].totals.income_amount.eur | integer | |
data[].totals.income_amount.rub | integer | |
data[].totals.outcome_amount | object | |
data[].totals.outcome_amount.uzs | integer | |
data[].totals.outcome_amount.usd | integer | |
data[].totals.outcome_amount.eur | integer | |
data[].totals.outcome_amount.rub | integer | |
data[].totals.final_amount | object | |
data[].totals.final_amount.uzs | integer | |
data[].totals.final_amount.usd | integer | |
data[].totals.final_amount.eur | integer | |
data[].totals.final_amount.rub | integer | |
totals | object | |
totals.initial_quantity | integer | Начальный остаток |
totals.income_quantity | integer | Приход |
totals.outcome_quantity | integer | |
totals.final_quantity | integer | Конечный остаток |
totals.initial_amount | object | |
totals.initial_amount.uzs | integer | |
totals.initial_amount.usd | integer | |
totals.initial_amount.eur | integer | |
totals.initial_amount.rub | integer | |
totals.income_amount | object | Выручка |
totals.income_amount.uzs | integer | |
totals.income_amount.usd | integer | |
totals.income_amount.eur | integer | |
totals.income_amount.rub | integer | |
totals.outcome_amount | object | |
totals.outcome_amount.uzs | integer | |
totals.outcome_amount.usd | integer | |
totals.outcome_amount.eur | integer | |
totals.outcome_amount.rub | integer | |
totals.final_amount | object | |
totals.final_amount.uzs | integer | |
totals.final_amount.usd | integer | |
totals.final_amount.eur | integer | |
totals.final_amount.rub | integer |
{
"data": [
{
"stock_id": 1,
"stock_name": "Stock 1",
"products": [
{
"product_id": 1,
"product_name": "Product 1",
"initial_quantity": "-1.00000000",
"initial_amount": {
"uzs": "-1000.0000000000",
"usd": "0",
"eur": "0",
"rub": "0"
},
"income_quantity": "0",
"income_amount": {
"uzs": "0",
"usd": "0",
"eur": "0",
"rub": "0"
},
"outcome_quantity": "0",
"outcome_amount": {
"uzs": "0",
"usd": "0",
"eur": "0",
"rub": "0"
},
"final_quantity": -1,
"final_amount": {
"uzs": -1000,
"usd": 0,
"eur": 0,
"rub": 0
}
},
{
"product_id": 2,
"product_name": "Product 1-1 full text",
"initial_quantity": "-2.00000000",
"initial_amount": {
"uzs": "-4000.0000000000",
"usd": "0",
"eur": "0",
"rub": "0"
},
"income_quantity": "0",
"income_amount": {
"uzs": "0",
"usd": "0",
"eur": "0",
"rub": "0"
},
"outcome_quantity": "0",
"outcome_amount": {
"uzs": "0",
"usd": "0",
"eur": "0",
"rub": "0"
},
"final_quantity": -2,
"final_amount": {
"uzs": -4000,
"usd": 0,
"eur": 0,
"rub": 0
}
}
],
"totals": {
"initial_quantity": -3,
"income_quantity": 0,
"outcome_quantity": 0,
"final_quantity": -3,
"initial_amount": {
"uzs": -5000,
"usd": 0,
"eur": 0,
"rub": 0
},
"income_amount": {
"uzs": 0,
"usd": 0,
"eur": 0,
"rub": 0
},
"outcome_amount": {
"uzs": 0,
"usd": 0,
"eur": 0,
"rub": 0
},
"final_amount": {
"uzs": -5000,
"usd": 0,
"eur": 0,
"rub": 0
}
}
}
],
"totals": {
"initial_quantity": -3,
"income_quantity": 0,
"outcome_quantity": 0,
"final_quantity": -3,
"initial_amount": {
"uzs": -5000,
"usd": 0,
"eur": 0,
"rub": 0
},
"income_amount": {
"uzs": 0,
"usd": 0,
"eur": 0,
"rub": 0
},
"outcome_amount": {
"uzs": 0,
"usd": 0,
"eur": 0,
"rub": 0
},
"final_amount": {
"uzs": -5000,
"usd": 0,
"eur": 0,
"rub": 0
}
}
}Акт сверки с поставщиком
/company/stat/report/supplier-reconciliationОперации с поставщиком за период по порядку: приход, оплата, возврат поставщику, начальный остаток — с дебетом, кредитом и нарастающим сальдо по валюте, плюс ending_balance на date_to. Отменённые операции исключены; поставщик должен принадлежать доступному филиалу. По умолчанию до 1000 строк на странице.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
supplier_id | integer | Да | Поставщик. ID существующей записи |
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
format | string | Нет | excel — скачать отчёт файлом Excel вместо JSON (не больше 30 000 строк) |
page | integer | Нет | Номер страницы, с 1 |
page-size | integer | Нет | Строк на странице, не больше 1000 (по умолчанию 1000) |
Ответ · 200
Постраничный ответ: записи в data[], пагинация в links и meta.
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array | Данные |
{
"data": [],
"ending_balance": {
"uzs": 0,
"usd": 0,
"eur": 0,
"rub": 0
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"per_page": 1000,
"to": null,
"total": 0
}
}Итоги списка продаж
/company/stat/report/trade-sale-index-totalsПравая панель страницы «Все продажи» с теми же фильтрами, что у списка: показатели продаж (чеки, товары и услуги, возвраты, перемещения), суммы чеков и оплаты по способам, бонусы клиентов, погашения долгов и кредитные платежи ICAN (отдельно от выручки).
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_id | integer | Нет | Компания |
cashbox_id | integer | Нет | Касса |
creator_id | integer | Нет | Создатель |
stock_id | integer | Нет | Склад |
code | string | Нет | Код. Макс. 255 символов |
payment_type | string | Нет | Тип оплаты. Допустимые значения: bank, card, cash, bonus, debt, system |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
sales_metrics | object | |
sales_metrics.transactions_count | integer | |
sales_metrics.returns_count | integer | Возвраты (шт.) |
sales_metrics.returns_amount | integer | |
sales_metrics.products_sold_count | integer | |
sales_metrics.services_sold_count | integer | |
sales_metrics.transfers_count | integer | |
sales_metrics.transfers_amount | integer | |
transaction_amounts | object | |
transaction_amounts.total | integer | Всего записей |
transaction_amounts.by_payment_type | object | |
transaction_amounts.by_payment_type.bank | integer | Банк |
transaction_amounts.by_payment_type.card | integer | |
transaction_amounts.by_payment_type.cash | integer | |
transaction_amounts.by_payment_type.bonus | integer | |
transaction_amounts.by_payment_type.debt | integer | Долг |
transaction_amounts.by_payment_type.system | integer | |
client_balance | object | |
client_balance.total | integer | Всего записей |
client_balance.accrued | integer | |
client_balance.spent | integer | |
debt_repayment | object | |
debt_repayment.total | integer | Всего записей |
debt_repayment.by_payment_type | object | |
debt_repayment.by_payment_type.bank | integer | Банк |
debt_repayment.by_payment_type.card | integer | |
debt_repayment.by_payment_type.cash | integer | |
credit_payments | object | |
credit_payments.total | integer | Всего записей |
credit_payments.count | integer | Количество |
credit_payments.by_payment_type | object | |
credit_payments.by_payment_type.bank | object | Банк |
credit_payments.by_payment_type.bank.amount | integer | Сумма |
credit_payments.by_payment_type.bank.count | integer | Количество |
credit_payments.by_payment_type.card | object | |
credit_payments.by_payment_type.card.amount | integer | Сумма |
credit_payments.by_payment_type.card.count | integer | Количество |
credit_payments.by_payment_type.cash | object | |
credit_payments.by_payment_type.cash.amount | integer | Сумма |
credit_payments.by_payment_type.cash.count | integer | Количество |
credit_payments.by_payment_type.bonus | object | |
credit_payments.by_payment_type.bonus.amount | integer | Сумма |
credit_payments.by_payment_type.bonus.count | integer | Количество |
credit_payments.by_payment_type.debt | object | Долг |
credit_payments.by_payment_type.debt.amount | integer | Сумма |
credit_payments.by_payment_type.debt.count | integer | Количество |
credit_payments.by_payment_type.system | object | |
credit_payments.by_payment_type.system.amount | integer | Сумма |
credit_payments.by_payment_type.system.count | integer | Количество |
{
"sales_metrics": {
"transactions_count": 0,
"returns_count": 0,
"returns_amount": 0,
"products_sold_count": 0,
"services_sold_count": 0,
"transfers_count": 0,
"transfers_amount": 0
},
"transaction_amounts": {
"total": 0,
"by_payment_type": {
"bank": 0,
"card": 0,
"cash": 0,
"bonus": 0,
"debt": 0,
"system": 0
}
},
"client_balance": {
"total": 1000,
"accrued": 1000,
"spent": 0
},
"debt_repayment": {
"total": 0,
"by_payment_type": {
"bank": 0,
"card": 0,
"cash": 0
}
},
"credit_payments": {
"total": 0,
"count": 0,
"by_payment_type": {
"bank": {
"amount": 0,
"count": 0
},
"card": {
"amount": 0,
"count": 0
},
"cash": {
"amount": 0,
"count": 0
},
"bonus": {
"amount": 0,
"count": 0
},
"debt": {
"amount": 0,
"count": 0
},
"system": {
"amount": 0,
"count": 0
}
}
}
}Отчёт для печати
/company/stat/report/trade-sale-print-reportСводка для печати по списку продаж с теми же фильтрами: выручка, число чеков и средний чек, операции (продажи, возвраты), оплаты по способам, продажи по кассирам, топ товаров, движение кассы, долги и клиенты.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_id | integer | Нет | Компания |
cashbox_id | integer | Нет | Касса |
creator_id | integer | Нет | Создатель |
stock_id | integer | Нет | Склад |
code | string | Нет | Код. Макс. 255 символов |
payment_type | string | Нет | Тип оплаты. Допустимые значения: bank, card, cash, bonus, debt, system |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
summary | object | |
summary.revenue | integer | Выручка (всего) |
summary.checks_count | integer | |
summary.average_check | integer | Средний чек |
summary.net_profit | null | |
operations | object | |
operations.sales | object | |
operations.sales.count | integer | Количество |
operations.sales.amount | integer | Сумма |
operations.returns | object | |
operations.returns.count | integer | Количество |
operations.returns.amount | integer | Сумма |
operations.exchanges | object | |
operations.exchanges.count | integer | Количество |
operations.exchanges.amount | integer | Сумма |
by_payment_type | object | |
by_payment_type.total | integer | Всего записей |
by_payment_type.by_payment_type | object | |
by_payment_type.by_payment_type.bank | integer | Банк |
by_payment_type.by_payment_type.card | integer | |
by_payment_type.by_payment_type.cash | integer | |
by_payment_type.by_payment_type.bonus | integer | |
by_payment_type.by_payment_type.debt | integer | Долг |
by_payment_type.by_payment_type.system | integer | |
by_seller | array | |
top_products | array | |
cashbox_movement | object | |
cashbox_movement.opening_balance | integer | |
cashbox_movement.cash_revenue | integer | |
cashbox_movement.income | integer | Доход |
cashbox_movement.expenses | integer | |
cashbox_movement.closing_balance | integer | |
debt | object | Долг |
debt.issued | integer | |
debt.returned | integer | |
debt.total_remaining | integer | |
clients | object | |
clients.new_count | integer | |
clients.total_served | integer |
{
"summary": {
"revenue": 0,
"checks_count": 0,
"average_check": 0,
"net_profit": null
},
"operations": {
"sales": {
"count": 0,
"amount": 0
},
"returns": {
"count": 0,
"amount": 0
},
"exchanges": {
"count": 0,
"amount": 0
}
},
"by_payment_type": {
"total": 0,
"by_payment_type": {
"bank": 0,
"card": 0,
"cash": 0,
"bonus": 0,
"debt": 0,
"system": 0
}
},
"by_seller": [],
"top_products": [],
"cashbox_movement": {
"opening_balance": 0,
"cash_revenue": 0,
"income": 1000,
"expenses": 0,
"closing_balance": 1000
},
"debt": {
"issued": 0,
"returned": 0,
"total_remaining": 0
},
"clients": {
"new_count": 2,
"total_served": 0
}
}Отчёт по списаниям
/company/stat/report/writeoffsСтрока на позицию завершённого списания со склада: товар, количество, сумма по цене прихода и её валюта, причина, ответственный и филиал; сначала новые. Списания по приходу (возврат поставщику) не входят.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
date_from | string (date) | Нет | Дата (от). Формат Y-m-d |
date_to | string (date) | Нет | Дата (до). Формат Y-m-d |
company_ids | array | Нет | ID филиалов для фильтра; по умолчанию — все доступные пользователю |
name | string | Нет | Название. Макс. 255 символов |
format | string | Нет | excel — скачать отчёт файлом Excel вместо JSON (не больше 30 000 строк) |
page | integer | Нет | Номер страницы, с 1 |
page-size | integer | Нет | Строк на странице, не больше 20 (по умолчанию 20) |
Ответ · 200
Постраничный ответ: записи в data[], пагинация в links и meta.
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array | Данные |
{
"data": [],
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"per_page": 20,
"to": null,
"total": 0
}
}
