GET /api/external/v2/sc/{sc_id}/reports/shops/{shop_id}/by_months BASIC +PRO поля
Параметры#
| Имя | Тип | Обяз. | Описание |
|---|---|---|---|
sc_id, shop_id | string, в пути | да | Идентификаторы центра и точки |
start_date | date | да | YYYY-MM-DD |
end_date | date | да | YYYY-MM-DD, не раньше start_date |
Период расширяется до целых месяцев. Запрос с 10 мая по 20 июня вернёт май и июнь целиком. Тарифное ограничение при этом проверяется по исходным датам, а не по расширенным.
Пагинации нет: даже год это двенадцать строк.
Ответ#
Суммы в копейках, строки отсортированы по возрастанию месяца.
| Поле | Тип | Тариф | Описание |
|---|---|---|---|
date | string | Месяц в формате YYYY-MM | |
receipts_count | integer | Всего чеков за месяц | |
income_receipts_count | integer | Чеков прихода | |
refund_receipts_count | integer | Чеков возврата | |
income_sum | integer | Приход, копейки | |
income_without_nds_sum | integer | Приход без НДС, копейки | |
refund_sum | integer | Возвраты, копейки | |
refund_without_nds_sum | integer | Возвраты без НДС, копейки | |
manual_turnover | integer | Задекларированный оборот офлайн-точки, копейки. 0, если точка на кассе | |
is_manual | boolean | Оборот внесён вручную, а не собран с кассы | |
visitors | integer | Посетители за месяц | |
area_size | number | Площадь точки, м² | |
is_outdoor | boolean | Точка вне здания центра | |
average_check_sum | integer | PRO | Средний чек, копейки |
revenue_per_area | integer | PRO | Выручка на м², копейки |
ocr | number | PRO | Доля аренды в товарообороте, проценты |
turnover | integer | PRO | Товарооборот по настройкам центра, копейки |
rent | integer | PRO | Начисленная аренда за месяц, копейки |
На Basic PRO-поля отсутствуют в объекте, а не приходят как null. Проверять нужно наличие ключа, а не значение.
Разница между turnover и manual_turnover в источнике. turnover считаем мы: берём
чеки и применяем настройки центра, решающие, что
делать с возвратами, НДС, авансами и корректировками. manual_turnover арендатор
или центр вносит сам через сдачу товарооборота либо
в интерфейсе Rentu.
is_manual показывает, что за этот месяц применяется внесённое вручную значение:
именно оно идёт в расчёт OCR. О наличии кассы флаг ничего не говорит. Месяц может
оказаться ручным и у точки с подключённой кассой. Тогда рядом с manual_turnover
придут receipts_count, income_sum и остальные кассовые поля, и им можно верить.
У офлайн-точки кассовых полей просто нет. Нули в них означают, что данных неоткуда взять, а не что продаж не было.
{
"success": true,
"data": [
{
"date": "2026-05",
"receipts_count": 8420,
"income_receipts_count": 8380,
"refund_receipts_count": 40,
"income_sum": 128430000,
"income_without_nds_sum": 107025000,
"refund_sum": 214000,
"refund_without_nds_sum": 178333,
"manual_turnover": 0,
"is_manual": false,
"visitors": 51200,
"area_size": 120.5,
"is_outdoor": false,
"average_check_sum": 15325,
"revenue_per_area": 106500,
"ocr": 12.5,
"turnover": 128216000,
"rent": 16027000
}
]
}Про revenue_per_area#
Считается как income_sum / area_size, то есть от выручки. Источник хранит результат
целыми рублями, наружу он отдаётся в копейках: значение всегда кратно 100, дробная
часть рубля отбрасывается. Для сравнения периодов эта потеря несущественна.
Для сверки берите ту же пару полей: поделите income_sum на area_size, отбросьте
копейки, умножьте на 100. Через turnover результат не сойдётся: он учитывает
настройки центра или подменяется ручным значением, и расхождение с выручкой доходит
до десятков процентов.
Про average_check_sum#
Приходит из месячной агрегации и из полей той же строки не выводится: деление
income_sum на income_receipts_count даёт другое число. Для сверки берите
продажи по дням.
Ошибки#
Те же, что у продаж по дням: not_found, period_too_long,
fresh_data_requires_pro, validation_error.