create_sale
Данный метод предназначен для совершения операции продажи.
Входные данные: SaleRequest
Возвращаемые данные: Sale
Важно: Для совершения данной операции требуется Авторизация в СКО, иначе будет
возвращена ошибка AVQFR_SESSION_NOT_AUTHORIZED
Важно: Для совершения данной операции требуется открытая смена, иначе будет возвращена
ошибка AVQFR_SHIFT_IS_CLOSED
Важно: Для совершения данной операции смена должна быть открыта менее 24 часов, иначе будет возвращена
ошибка AVQFR_SHIFT_IS_PENDING
Важно: После совершения продажи, сформированный объект Sale сохраняется, для дальнейшего возможного совершения операции аннулирования.
Осуществляемые действия перед операцией продажи
- Проверка заголовка чека
- Проверка кол-ва товарных позиций в поле
items
- Кол-во тов. позиций не равно
0
, иначе ошибкаTIN_NO_ITEMS
- Кол-во тов. позиций не превышает
140
, иначе ошибкаTIN_MAX_ITEMS
- Кол-во тов. позиций не равно
- Проверка скидки по чеку - Проверка суммы
- Проверка товарных позиций
- Проверка наименования тов. позиции
- Проверка цены (
item.price
) - Проверка суммы - Расчёт значений по полям товарной позиции
(формирование ItemCalculatedValues)
raw_sum = (item.price * item.quantity)
, значение округляетсяdiscount = item.discount ?: 0
(скидка/надбавка, если указана, иначе0
)sum = raw_sum - discount
tax = (sum * tax_rate_sum.sum) / (100 + tax_rate_sum.sum)
, значение округляется- Проверка значений
sum
иraw_sum
- Проверка суммы - Проверка значения
discount
- Проверка скидки тов. позиции
- Проверка суммы всех тов. позиций с учетом скидок по тов. позициям и скидки по чеку
- Проверка суммы всех наличных способов оплаты
- Проверка суммы всех безналичных способов оплаты
- Проверка суммы всех др. способов оплаты
- Вычисление сдачи:
change = cash + cashless + other - cheque_sum
, гдеcheque_sum
- сумма скидок всех товарных позиций с учетом скидок и с учетом скидки по чеку. - Проверка способов оплат и сдачи
Важно: если скидка на товарную позицию имеет отрицательное значение, скидка считается надбавкой
Примеры
Успех
Запрос:
{
"address": "ik.service.token.sales.retail",
"headers": {
"action": "create_sale",
"sid": "ed046722-8f66-4709-b087-3af224514802",
"token": "AVQ11031010703",
"printer.dummy": ""
},
"data": {
"sale": {
"header": {
"cashier": "Test",
"currency": "BYN"
},
"items": [
{
"price": "1.00",
"quantity": "1.000",
"code": {
"type": 3,
"value": 9999999999
},
"name": "длинное наименование товара на большом и маленьком чеках 11111",
"discount": "-1.02",
"tax_rate": "tax10"
}
],
"payments": [
{
"payment_type": "cash",
"value": "2.01"
}
],
"cheque_discount": "0.01"
}
},
"type": "send"
}
Ответ:
{
"type": "send",
"address": null,
"reply_address": null,
"data": {
"change": "0.00",
"extra": null,
"header": {
"cashier": "Test",
"company_name": "ИП Моров А.М.",
"currency": "BYN",
"date_time": "2021-09-27T18:25:23.523915+03:00",
"device_id": 131010703,
"number": 5979,
"serial_number": "AVQ11031010703",
"shift_number": 209,
"tax_number": 191832203,
"trade_point_name": null,
"type_id": "sale",
"uid": "D940E3560F346BAC07CF108F"
},
"items": [
{
"item": {
"code": {
"type": 3,
"value": 9999999999
},
"comment": null,
"discount": "-1.02",
"id": null,
"name": "длинное наименование товара на большом и маленьком чеках 11111",
"price": "1.00",
"quantity": "1.000",
"tax_rate": "tax10"
},
"values": {
"discount": "-1.02",
"raw_sum": "1.00",
"sum": "2.02",
"tax": "0.18"
}
}
],
"payments": [
{
"name": null,
"payment_type": "cash",
"ref": null,
"value": "2.01"
}
],
"rolled_back_by": null,
"sub_totals": {
"cheque_discount": "0.01",
"sum": "2.02",
"taxes": [
{
"sum": "0.18",
"tax_rate": "tax10"
}
]
},
"totals": {
"discount": "-1.01",
"sum": "3.03"
}
},
"headers": null
}