Metadata-Version: 1.1
Name: komtet_kassa_sdk
Version: 0.6.0
Summary: Python SDK for KOMTET Kassa
Home-page: https://github.com/Komtet/komtet-kassa-python-sdk
Author: Guryev Konstantin
Author-email: kosmini4@gmail.com
License: MIT
Download-URL: https://pypi.python.org/pypi/komtet_kassa_sdk
Description-Content-Type: UNKNOWN
Description: =======================
        komtet-kassa-python-sdk
        =======================
        
        Библиотека для интеграции вашего сайта с с облачным сервисом распределенной печати чеков `КОМТЕТ Касса <http://kassa.komtet.ru>`_
        
        .. image:: https://img.shields.io/travis/Komtet/komtet-kassa-python-sdk.svg?style=flat-square
          :target: https://travis-ci.org/Komtet/komtet-kassa-python-sdk
        
        Установка
        =========
        
        С помощью pip:
        
        .. code:: bash
        
            # pip install komtet_kassa_sdk
        
        Вручную:
        
        .. code:: bash
        
            $ git clone https://github.com/Komtet/komtet-kassa-python-sdk
            $ cd komtet-kassa-python-sdk
            # python setup.py install
        
        Использование
        =============
        
        .. code:: python
        
            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_18  # НДС 18%
            # 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_118  # НДС 18/118
            # Можно указать просто число:
            # vat_rate = 18
            # или строку:
            # vat_rate = '10'
            # или даже так:
            # vat_rate = '18%'
            # а ещё вот так:
            # vat_rate = 0.18
        
            # Добавление позиции
            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.add_cashier('Иваров И.П.', '1234567890123')
        
            # Отправка запроса
            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
        =========
        
        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)
        ------------------
        
        - Первый релиз.
        
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: Russian
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Topic :: Software Development :: Libraries :: Python Modules
