Чек коррекции
LifePay позволяет удаленно создать чек коррекции в соответствии с требованиями налоговой. Чек коррекции можно создать как посредством запроса по АПИ, так и в личном кабинете Lifepay:
Пример распечатанного чека по запросу:
Отправка чека на фискализацию
Тип запроса:
POST
Формат данных:
Данные в теле запроса предварительно сериализуются в json-формат
Адрес URL:
https://sapi.life-pay.ru/cloud-print/create-receipt-correction
Условные обозначения в формате данных
| Обозначение | Описание |
|---|---|
| Ц | Атрибут, обозначающий, что данные реквизита должны быть представлены в виде цифры |
| С | Атрибут, обозначающий, что данные реквизита должны быть представлены в виде символа |
| {} | Атрибут повторяемый |
Описание полей
| Параметр | Тег | Тип | Описание | Обязательный | Формат | Максимальная длина |
|---|---|---|---|---|---|---|
| apikey | Строка | АПИ-ключ компании в системе Lifepay. Узнать свой АПИ-ключ можно в личном кабинете Lifepay. | Да | {С} | 255 | |
| login | Строка | Логин администратора компании или торговой точки в системе Lifepay. Если логин относится к торговой точке, к которой привязан принтер, документ будет отправлен на этот принтер. | Да | 7{Ц} | 11 | |
| initiator | 1173 | Строка | Инициатор коррекции. Возможные значения:independently - самостоятельно (по умолчанию),directive - по предписанию. |
Да | ||
| doc_date | 1178 | Строка | Дата документа коррекции. | Да | ГГГГ-ММ-ДД | |
| doc_number | 1179 | Строка | Номер документа коррекции. | Да | {С} | 32 |
| test | Целое | Тестовый режим отправки запроса без фискализации. Может принимать значения 0, 1, или отсутствовать (фискализировать по умолчанию). В тестовом режиме uuid сгенерирован не будет, оповещения о результате фискализации отправляться не будут. |
Нет | |||
| type | 1054 | Строка | Тип коррекции. Возможные значения:sell_correction - коррекция прихода (по умолчанию),buy_correction - коррекция расхода. |
Нет | ||
| card_amount | 1081 | Вещественное | Сумма, оплаченная клиентом по карте. Особое значение - #. |
Нет | {Ц}.ЦЦ | {Ц} | |
| cash_amount | 1031 | Вещественное | Сумма, оплаченная клиентом наличными. Особое значение - #. |
Нет | {Ц}.ЦЦ | {Ц} | |
| prepayment_amount | 1215 | Вещественное | Сумма, внесенная авансом. Особое значение - #. |
Нет | {Ц}.ЦЦ | {Ц} | |
| credit_amount | 1216 | Вещественное | Сумма, внесенная кредитными средствами. Особое значение - #. |
Нет | {Ц}.ЦЦ | {Ц} | |
| other_amount | 1217 | Вещественное | Сумма иной формы оплаты (встречное предоставление). Особое значение - #. |
Нет | {Ц}.ЦЦ | {Ц} | |
| cashier_name | 1021 | Строка | Имя кассира. | Нет | {С} | 64 |
| cashier_inn | 1203 | Строка | ИНН кассира. | Нет | {Ц} | 12 |
| target_serial | Строка | Серийный номер принтера, на котором необходимо фискализировать данные. Если не задан, чек будет фискализирован на одном из подключенных (активных) фискальных принтеров. | Нет | {С} | ||
| target_kkt_group_uuid | Строка | Идентификатор группы касс для фискализации. При задании параметра чек будет фискализирован на одном из ККТ, входящих в указанную группу. Объединить кассы в группы, и получить идентификатор можно в Личном кабинете Lifepay. | Нет | {С} | ||
| ext_id | Строка | Идентификатор в сторонней системе. В случае, если в систему повторно передан запрос с одинаковым ext_id, документ создан не будет, сервер вернет uuid первого документа. | Нет | {С} | 50 | |
| order_number | Строка | Номер заказа в сторонней системе. Может использоваться для поиска чека в личном кабинете. | Нет | {С} | ||
| callback_url | Строка | URL для отправки уведомления об обработке документа. Уведомление будет сформировано при смене статуса обработки документа на “обработан”, “ожидает повтора”, “ошибка”. | Нет | {С} | 255 | |
| callback_data | Строка | Структура | Массив | Пользовательские данные, которые будут отправлены обратно на URL, указанный в параметре callback_url. | Нет | |||
| tax_system замечание |
1055 | Строка | Система налогообложения. Возможные значения: osn - ОСНusn6 - УСН доходusn15 - УСН доход-расходeshn - ЕСНpatent - Патент |
Нет | ||
| tax | 1199 | Строка | Налог на позицию. Возможные значения: none - НДС не облагается;vat0 - НДС по ставке 0%;vat5 - НДС чека по ставке 5%;vat7 - НДС чека по ставке 7%;vat10 - НДС чека по ставке 10%;vat20 - НДС чека по ставке 20%;vat105 - НДС рассчитанный 5/105;vat107 - НДС рассчитанный 7/107;vat110 - НДС рассчитанный 10/110;vat120 - НДС рассчитанный 20/120; |
Нет | ||
| tax_list | Массив | Список налоговых ставок и их значения | Нет | |||
| payment_place | 1187 | Строка | Место осуществления расчетов между пользователем и покупателем (клиентом) | Нет | {С} | 256 |
| customer_name | 1227 | Строка | Покупатель (клиент). | Нет | {С} | 256 |
| customer_inn | 1228 | Строка | ИНН покупателя. | Нет | {Ц} | 12 |
| additional_receipt_details | 1192 | Строка | Дополнительный реквизит чека (БСО) | Нет | {С} | 16 |
Описание элементов списка tax_list
| Параметр | Тег | Тип | Описание | Обязательный | Формат |
|---|---|---|---|---|---|
| tax | 1199 | Строка | Налог на позицию. Возможные значения: none - НДС не облагается;vat0 - НДС по ставке 0%;vat5 - НДС чека по ставке 5%;vat7 - НДС чека по ставке 7%;vat10 - НДС чека по ставке 10%;vat20 - НДС чека по ставке 20%;vat105 - НДС рассчитанный 5/105;vat107 - НДС рассчитанный 7/107;vat110 - НДС рассчитанный 10/110;vat120 - НДС рассчитанный 20/120; |
Да | |
| value | 1200 | Вещественное | Сумма НДС. | Да | {Ц}.ЦЦ | {Ц} |
Замечания
Параметр
tax_systemпозволяет фискализировать продажи в случае нескольких СНО. Если товары продаются по одной СНО, а услуги по другой, необходимо сформировать 2 чека с разными значениямиtax_system. Еслиtax_systemне будет указана в запросе, система применит значение СНО, установленное в личном кабинете Lifepay. Если в личном кабинете СНО не была установлена, будет применена СНО - ОСН.В запросе необходимо указывать один из параметров
tax(для автоматического расчета НДС на стороне ФР), либоtax_list(в случае расчета НДС на стороне клиента). Если указаны оба параметра, то приоритет отдаетсяtax_list.В случае, если товары/услуги не облагаются НДС (либо НДС 0%), в поле
valueиз спискаtax_listуказывается сумма, которая не облагается НДС (либо НДС 0%).
Пример успешного ответа:
формат json
Object
(
[code] => 0
[message] =>
[data] => Object
(
[uuid] => dabe3833-43ff-5e5c-a45e-9cff664503fd
)
)
uuid - уникальный идентификатор документа
Пример ответа при ошибке:
формат json
Object
(
[code] => 400
[message] => Ошибка данных.
[data] => Object
(
[target_serial] => Array
(
[0] => Принтер не найден.
)
)
)
Возможные значения поля code:
500Внутренняя ошибка сервера400Ошибка данных6000Неверный формат данных6009Не удалось найти пользователя по login6010Не удалось найти пользователя по login и apikey6080Облачная фискализация запрещена6095Доступ запрещен
При значении поля “code” = 500 необходимо обратиться в тех поддержку, уточнить причину появления данной ошибки.
Рекомендация:
Если http-код ответа (не путать с полем code) отличен от 200, необходимо повторять запрос с тем же ext_id через некоторые промежутки времени.
Промежутки повтора запроса могут быть, например, такими: 1 минута, 3 минуты, 5 минут, далее – один раз в 10 минут до получения http кода ответа 200.
Пример запроса на языке php:
$data = [];
$data['apikey'] = '{your_apikey}';
$data['login'] = '{your_login}';
$data['type'] = 'sell_correction';
$data['doc_date'] = "2017-01-01";
$data['doc_number'] = "3123";
$data['tax_list'] = '
[
{
"tax": "none",
"value": 1000
},
{
"tax": "vat10",
"value": 10.55
}
]
';
$data['test'] = 0;
$data['cash_amount'] = 500;
$data['card_amount'] = null;
$data['mc_amount'] = null;
$data['cashier_name'] = null;
$data['target_serial'] = null;
$data['payment_place'] = 'Станция метро Выхино (центр зала)';
$request = json_encode($data);
$url = "https://sapi.life-pay.ru/cloud-print/create-receipt-correction";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
$result = curl_exec($curl);
curl_close($curl);
$resultJson = @json_decode($result);
printf("Res: %s\n", print_r($resultJson ? : $result, true));

