Помощь кассиру

Обмен валюты без кассы

актуальная

Продажа и покупка валюты через receipt-v2 для обменных пунктов. Физическая касса не нужна.

Что умеет

Чек пробивается в валютном виде: валюта, курс, сумма в валюте и итог в сомах. В ГНС уходит обычный фискальный документ: тип продажа или покупка, наименование USD / Курс 87.5, сумма в сомах. Токен, адреса и общие правила те же, что в основном разделе.

Порядок работы

  1. Получить токен.
  2. Внести валюту: cash-v2 с ADD. Смена откроется сама.
  3. Пробивать чеки обмена: receipt-v2.
  4. Смотреть остаток.
  5. Изымать наличные: DEL, а когда забрали всё, RESET.
  6. В конце дня закрыть смену: shift-v2 с close.

Баланс смены

ОперацияЧто должно быть на балансе
Продажа валюты INCOMEдостаточно валюты
Покупка валюты EXPENDITUREдостаточно сомов
Возврат продажи INCOME_RETURNдостаточно сомов
Возврат покупки EXPENDITURE_RETURNдостаточно валюты

Если не хватает, чек не пробивается: ошибка На балансе недостаточно : USD. Это обычный отказ, а не сбой связи: повторять без пополнения бессмысленно.

Не путайте с get-balance: там лицевой счёт кассы, здесь наличная валюта за смену.

Чек

POST/gate/receipt-v2HTTPтокен V2

Валютным чек делает поле currency в позиции. Других признаков не нужно.

Продажа
curl -X POST 'https://ofd.yaros.kg:8143/ofd-0.0.1/gate/receipt-v2' \
  -H 'Content-Type: application/json' -H 'token: <токен>' \
  -d '{ "id": "<GUID>", "operation": "INCOME",
        "products": [ { "id": "1", "currency": "USD", "price": 87.50, "quantity": 100 } ] }'

Продажа 100 USD по курсу 87.50 приносит кассе 8750 сом. Покупка 50 USD по курсу 86.00 забирает 4300 сом. Возврат покупки делается операцией EXPENDITURE_RETURN.

Обмен валюты это наличная операция, поле cashless не используется и на движение по балансу не влияет.

Поле позицииТипОбяз.Описание
idStringдаидентификатор позиции в вашей базе
currencyStringдакод валюты. Именно он делает позицию валютной
priceDecimalдакурс: сомов за единицу валюты
quantityDecimalдасумма в валюте
nameStringнетнаименование. Без него сервер подпишет сам: USD / Курс 87.5
vat_value, st_valueDecimalнетставки, для обмена обычно 0, это значение по умолчанию

Ответ как у обычного чека, плюс balance с остатком после чека:

JSON
{
  "id": "07b2f33c-0eaf-4353-abbf-000000000101",
  "status": "OK",
  "qr": "https://…/ticket?date=20261102T183012&type=3&operation_type=1&…",
  "link": "https://ofd.yaros.kg:8143/ofd-0.0.1/gate/get-html-receipt/<id копии>",
  "amount": 8750.00,
  "shiftNumber": "550",
  "receiptNumber": "12",
  "balance": { "KGS": 21250.00, "USD": 400.00 }
}

При повторе с тем же id ответ тот же, что в первый раз, а balance текущий.

Округление и разрядность

Сумма каждой позиции считается отдельно: price × quantity переводится в тыйыны и округляется по правилу «половина вверх». Сумма чека это сумма уже округлённых позиций. Примеры: 0.1235 × 3 = 0.37, 0.125 × 1 = 0.13, 100 × 0.123456 = 12.35.

В price и quantity передавайте не больше 4 знаков после точки. Сервер лишние знаки не отрезает, но на большее гарантий нет.

Коды валют

KGS, USD, EUR, RUB, KZT, UZS, CNY, TRY, AED, GBP, CAD, JPY, KRW, CHF, SAR.

Правила

Смотрите также