Python SDK for KOMTET Kassa
Project description
Библиотека для интеграции вашего сайта с с облачным сервисом распределенной печати чеков КОМТЕТ Касса
Установка
С помощью pip:
# pip install komtet_kassa_sdk
Вручную:
$ git clone https://github.com/Komtet/komtet-kassa-python-sdk
$ cd komtet-kassa-python-sdk
# python setup.py install
Использование
from requests.exceptions import HTTPError
from komtet_kassa_sdk import (
Check, CorrectionCheck, Client, Intent, TaxSystem, VatRate, CorrectionType, PaymentMethod,
Agent, AgentType, CalculationSubject, CalculationMethod
)
shop_id = 'идентификатор магазина'
secret_key = 'секретный ключ'
client = Client(shop_id, secret_key)
oid = 'номер операции в вашем магазине'
email = 'E-Mail пользователя для отправки электронного чека'
intent = Intent.SELL # Направление платежа
# Используйте Intent.RETURN для оформления возврата
# Система налогооблажения
tax_system = TaxSystem.COMMON # ОСН
# tax_system = TaxSystem.SIMPLIFIED_IN # УСН доход
# tax_system = TaxSystem.SIMPLIFIED_IN_OUT # УСН доход - расход
# tax_system = TaxSystem.UTOII # ЕНВД
# tax_system = TaxSystem.UST # ЕСН
# tax_system = TaxSystem.PATENT # Патент
check = Check(oid, email, intent, tax_system)
position_name = 'Наименование позиции'
position_price = 100 # Цена позиции
check.add_position(position_name, position_price)
# Налоговая ставка
vat_rate = VatRate.RATE_20 # НДС 20%
# vat_rate = VatRate.RATE_NO # Без НДС
# vat_rate = VatRate.RATE_0 # НДС 0%
# vat_rate = VatRate.RATE_10 # НДС 10%
# vat_rate = VatRate.RATE_110 # НДС 10/110
# vat_rate = VatRate.RATE_120 # НДС 20/120
# Можно указать просто число:
# vat_rate = 20
# или строку:
# vat_rate = '10'
# или даже так:
# vat_rate = '20%'
# а ещё вот так:
# vat_rate = 0.20
# Добавление позиции
check.add_position(
'Наименование позиции',
oid=123, # Идентификатор позиции в магазине
price=100, # Цена за единицу
quantity=2, # Количество единиц (по умолчанию 1)
total=200, # Общая стоимость позиции (по умолчанию price * quantity)
vat=vat_rate # По умолчанию Без НДС (VatRate.RATE_NO),
calculation_method=CalculationMethod.FULL_PAYMENT, # По умолчанию FULL_PAYMENT
calculation_subject=CalculationSubject.PRODUCT, # По умолчанию PRODUCT
# Необязательный атрибут, указывается только при продаже комиссионером собственных и
# комиссионных товаров
agent = Agent(AgentType.COMMISSIONAIRE, '+77777777777', 'ООО "Лютик"', '12345678901')
)
# Добавление суммы расчёта
check.add_payment(300)
# Если нужно распечатать чек (по умолчанию False)
check.set_print(True)
# Если нужно задать данные по кассиру, по умолчанию возьмутся с ФН
check.set_cashier('Иваров И.П.', '1234567890123')
# Если нужно нужно передать данные клиента для фискализации
check.set_client('Пупкин П.П.', '123412341234')
# Отправка запроса
try:
task = client.create_task(check, 'идентификатор очереди')
except HTTPError as exc:
print(exc.response.text)
else:
print(task)
# Task(id=1, external_id=2, print_queue_id=3, state='new')
# id - идентификатор задачи
# external_id - идентификатор операции в магазине
# print_queue_id - идентификатор очереди
# state - состояние задачи
# Создание чека коррекции
printer_number = 'серийный номер принтера'
intent = Intent.SELL_CORRECTION # Направление коррекции
# intent = Intent.SELL_CORRECTION # Коррекция прихода
# intent = Intent.RETURN_CORRECTION # Коррекция расхода
check = CorrectionCheck(oid, printer_number, intent, tax_system)
payment_method = PaymentMethod.CARD # Метод оплаты, корректирующей суммы
# payment_method = PaymentMethod.CARD # электронные
# payment_method = PaymentMethod.CASH # наличные
# Установка суммы коррекции
check.set_payment(
correction_sum=12, # Сумма
vat_rate=vat_rate,
payment_method=payment_method
)
correction_type = CorrectionType.SELF # Тип коррекции
# correction_type = CorrectionType.SELF # Самостоятельно
# correction_type = CorrectionType.FORCED # По предписанию
# Установка данных коррекции
check.set_correction_data(
type=correction_type,
data='2017-09-28', # Дата документа коррекции в формате 'yyyy-mm-dd'
document='К111', # Номер документа коррекции
description='Отключение электричества' # Описание коррекции
)
# Указание уполномоченного лица
check.set_authorised_person(
name='Иванов И.И',
inn='123456789012'
)
# Отправка запроса
try:
task = client.create_task(check, 'идентификатор очереди')
except HTTPError as exc:
print(exc.response.text)
else:
print(task)
# Task(id=1, external_id=2, print_queue_id=3, state='new')
# id - идентификатор задачи
# external_id - идентификатор операции в магазине
# print_queue_id - идентификатор очереди
# state - состояние задачи
# Получение информации о поставленной на фискализацию задаче:
try:
task_info = client.get_task_info('идентификатор задачи')
except HTTPError as exc:
print(exc.response.text)
else:
print(task_info)
# TaskInfo(id=234, external_id='4321', state='done', error_description=None,
# fiscal_data={'i': '111',
# 'fn': '2222222222222222',
# 't': '3333333333333',
# 'n': 4,
# 'fp': '555555555',
# 's': '6666.77'})
# id - идентификатор задачи
# external_id - идентификатор операции в магазине
# state - состояние задачи
# error_description - описание возникшей ошибки, когда state=='error'
# fiscal_data - фискальные данные
# Чтобы проверить, является ли очередь активной, выполните:
client.is_queue_active('идентификатор очереди')
# Вы можете указать идентификатор очереди по умолчанию с помощью:
client.set_default_queue('идентификатор очереди по умолчанию')
# В этом случае можно не указывать идентификатор очереди всякий раз,
# когда нужно распечатать чек или проверить состояние очереди:
assert client.is_queue_active() is True
try:
task = client.create_task(check)
except HTTPError as exc:
print(exc.response.text)
else:
print(task)
Changelog
1.5.1 (24.06.2019)
Расширен класс Response методом _asdict
1.5.0 (24.06.2019)
Заменен базовый класс для Task, TaskInfo на собственную реализацию
1.4.0 (13.06.2019)
В класс Order добавлена возможность передать предоплату и тип платежа
1.3.0 (04.06.2019)
Класс Check расширен методами set_client и set_cashier для передачи дополнительных данных по чеку
1.2.0 (16.05.2019)
Класс Order расширен методом add_callback_url для оповещения магазина
1.1.1 (16.04.2019)
Изменен идентификатор позиции заказа
1.1.0 (15.04.2019)
Добавлен класс Order для создания и обновления заявок.
Класс Client расширен методами get_orders, get_couriers, create_order, update_order, get_order_info, delete_order для работы с заявками.
1.0.0 (18.01.2019)
Убраны атрибуты RATE_18 и RATE_118 у класса VatRate.
0.7.0 (10.12.2018)
Класс VatRate расширен атрибутами RATE_20 и RATE_120.
0.6.0 (20.11.2018)
Класс Agent расширен методами set_paying_agent_info, set_receive_payments_operator_info и set_money_transfer_operator_info для передачи дополнительных атрибутов платежного агента, оператора по приему платежей и оператора перевода, соответственно.
В класс Check добавлен необязательный параметр payment_address и метод set_callback_url.
0.5.0 (14.08.2018)
Добавлены направления платежа BUY и BUY_RETURN в класс Intent
0.4.0 (09.04.2018)
Добавлен метод set_authorised_person в класс CorrectionCheck
0.3.0 (20.03.2018)
Добавлена поддержка ФФД 1.0.5 (Признак рассчета, способ рассчета, данные по кассиру, данные по агенту)
0.2.2 (10.11.2017)
Добавлен метод Client.get_task_info
Добавлен необязательный параметр oid в Check.add_position
0.2.1 (28.09.2017)
Добавлен чек коррекции.
Добавлена возможность указать вид оплаты.
В позицию на чек фискализации добавлено необязательное поле единицы измерения.
0.2.0 (11.08.2017)
Для отправки запросов теперь используется класс Client.
При отправке запроса на добавление задачи в очередь теперь возвращается namedtuple вместо словаря.
Удалены исключения. Вместо них используются исключения из requests.
Константы сгруппированы в классы.
Убрана валидация параметров при создании экземпляра чека и его элементов. Валидация уже осуществляется на сервере.
В налогах теперь указывается только ставка (высчитывается на сервере).
В позиции убран параметр discount (высчитывается на сервере).
99.9% покрытие кода тестами.
Прочие небольшие изменения.
0.1.6 (31.07.2016)
print_out() теперь возвращает ответ от сервера.
0.1.5 (10.07.2017)
Исправлена возможность установки sno чека в ОСН.
0.1.4 (06.07.2017)
Добавлен новый параметр чека sno (система налогооблажения).
0.1.1 (26.06.2017)
Переезд на https.
0.1.0 (19.06.2017)
Первый релиз.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.