Skip to main content

tool for work with FNS API

Project description

NPDTools

Ищешь инструмент для удобного декларирования доходов? Хочешь автоматизировать выдачу чеков клиентам? Надоело заходить в Мой налог? Надоедает проверять, что каждый приход зарегистрирован в налоговой? Боишься ошибиться и получить безжалостный удар от ФНС кнутом без пряника?

ВЫХОД ЕСТЬ! Для этого потребуется простая питоняшая...

Нет, не сода. Либа. README которой ты сейчас читаешь. Да, она позволяет работать с API Федеральной налоговой службы (ФНС) в рамках возможностей приложения "Мой налог". Больше она не умеет. Столько же не умеет. Меньше умеет. Надеюсь, теперь все люди, что искали подобный инструмент в гугле, смогли его найти. Можно приступить к содержательной части.

Если ты не знаешь свой ⚠️ password ⚠️

Если входишь в lknpd.nalog.ru или "Мой налог" через Госуслуги (ЕСИА) или просто не помнишь пароль, надо зайти на lkfl2.nalog.ru и там по ситуации:

  • Войти так же через Госуслуги и сменить (установить) пароль в настройках профиля
  • Войти по электронной подписи и сменить пароль в настройках профиля
  • Нажать кнопочку "Восстановить пароль" и пройти процедуру восстановления
  • Не разобраться в ситуации и смириться со сложностью бытия

Прогресс разработки

  • Чеки
    • Создание чека
    • Аннулирование чека
    • Получение списка чеков
  • Счета
    • Создание счёта
    • Отметка оплаченным
    • Выдача чека по счёту
    • Смена способа оплаты
    • Отмена счёта
    • Получение способов оплаты счёта
  • Публичное
    • Проверка статуса самозанятого
    • Проверка чеков по токену
    • Проверка налогов по токену
    • Проверка оплат налогов по токену
  • Другое
    • Добавление способа оплаты счёта
    • Удаление способа оплаты счёта
    • Активация и деактивация автоплатежа
    • Удаление привязанной карты для автоплатежа
    • Изменение видов деятельности
    • Редактирование профессии
    • Редактирование текста в чеке
    • Удаление партнёров
    • Снятие с учёта НПД
    • Отображение номера и почты в чеке
    • Ключи доступа
    • Справки

Документация

Её в нормальном виде нет, но в коде описано детально, какие модели возвращает функция, можно смотреть на них. Когда-нибудь, возможно, добавлю больше.

Что может библиотека?

Собственно, всё сводится к выставлению, закрытию и получению счетов и чеков. Что? Примеров хочешь? Держи примеров. Обмажься.

Выставляем чек, как профи

from decimal import Decimal

from npdtools import NPDTools
from npdtools.types import Service, ClientType, ClientInfo

client = NPDTools(default_inn="123456789012")


async def main():
    await client.auth("123456789012", "~_ub&TS5RY~k9,czo(q*")

    # Как добавлять позиции в чек:
    # 1. Метод здорового человека
    cart = [Service(name="Прокладка с крылышками", amount=180.85, quantity=2)]
    cart.append(Service(name="Прокладкохолдер", amount=1234.56))
    await client.declare_income(*cart)

    # Вот так можно декларировать товары на развес: с ценой за грамм и указанием веса в граммах
    await client.declare_income(Service(name="Изюм", amount=Decimal("0.4"), quantity=856))

    # 2. Метод немного здорового человека
    await client.declare_income(Service(name="Доска", amount=600, quantity=2), Service(name="Udjplb", amount=4, quantity=10))

    # Как выставлять физлицам?
    # Применяется автоматически, так как никакие данные не требуются
    await client.declare_income(*cart)

    # Если хотите выдать чек физлицу с указанием его фио, телефона, инн или иных данных
    client_info = ClientInfo(
        type=ClientType.individual,  # это не обязательно, так как значение по умолчанию
        inn="012345678912",  # Как и поля ниже, можно указывать, если знаем, либо пропустить (или передать None)
        name="Зотов Данил Константинович",
        phone="79998887766",  # Допускается любой формат
        email="i@mhorny.gay",  # Туда может приходить чек от ФНС, но не факт
    )
    await client.declare_income(*cart, client=client_info)

    # ИП или ООО или прочая российская организация?
    client_info = ClientInfo(
        type=ClientType.legal,  # это не обязательно, так как значение по умолчанию
        inn="012345678912",  # Для ИП и ООО надо указать ИНН. Обязательно.
        name="ИП Колосов Илья Владимирович",  # Краткое название, указывать не обязательно, но желательно
        phone="79998887766",  # Контактный номер по желанию
        # email="i@mhorny.gay",  # Контактный email по желанию
    )
    await client.declare_income(*cart, client=client_info)

    # Если организация иностранная?
    client_info = ClientInfo(
        type=ClientType.foreign,  # это не обязательно, так как значение по умолчанию
        # inn="012345678912",  # ИНН можно указать, если он известен
        name="Rusalky Sosalky Davalky Inc.",  # Краткое название, указывать не обязательно, но желательно
        phone="+13053056699",  # Контактный номер по желанию
        # email="i@mhorny.gay",  # Контактный email по желанию
    )
    await client.declare_income(*cart, client=client_info)

Канселим чеки, как Италию на Евровидении 2021

from datetime import datetime, timedelta

from npdtools import NPDTools
from npdtools.types import Service

client = NPDTools(default_inn="123456789012")


async def main():
    await client.auth("123456789012", "~_ub&TS5RY~k9,czo(q*")
    
    cart = [Service(name="Прокладка с крылышками", amount=180.85, quantity=2)]
    await client.declare_income(*cart)

    declare_response = await client.declare_income(*cart)
    await client.cancel_income(declare_response.receipt_id)

    # С комментарием:
    await client.cancel_income(declare_response.receipt_id, comment="Этот мудень попросил вернуть деньги")

    # Возврат за вчерашний день
    await client.cancel_income(declare_response.receipt_id, comment="Не подошёл размер", cancellation_time=datetime.now() - timedelta(days=1))

Счета

from npdtools import NPDTools
from npdtools.types import Service, BankAccount, BankPhone, ClientInfo, ClientType

client = NPDTools(default_inn="123456789012")


async def main():
    await client.auth("123456789012", "~_ub&TS5RY~k9,czo(q*")
    options = await client.get_payment_options()
    if len(options) == 0:
        # По СБП
        payment_option = BankPhone(
          name="Банк Хaйс",
          phone="79998887766",
        )

        # По реквизитам счёта
        payment_option = BankAccount(
          name="Точка Банк",
          bik="044525104",
          account="40802810201500127107",
          corr="30101810745374525104",
        )
    else:
        payment_option = options[0]
    
    # Для физлица обязательно указать ФИО. Для ИП и ООО - ИНН. Для зарубежных - название (тоже name)
    client_info = ClientInfo(
      name="Карасуков Владимир Ярославович",
      type=ClientType.individual,  # Для ИП, ООО и зарубежных указать свой тип
      phone="79998887766",  # Необязательно
      email="i@mhorny.gay",  # На этот адрес должен будет прийти чек после его выдачи, необязательно
    )

    cart = [Service(name="Прокладка с крылышками", amount=180.85, quantity=2)]
    invoice = await client.create_invoice(
        *cart,
        bank=payment_option,
        client=client_info,
    )

    invoice = await client.invoice_paid(invoice.invoice_id)
    invoice = await client.invoice_complete(invoice.invoice_id)
    # or
    invoice = await client.cancel_invoice(invoice.invoice_id)

Я буду ещё дописывать библиотеку, да. Но пока так. Она не такая простая, как кажется.

Буду рад конструктивным пул реквестам и иссуям.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

npdtools-1.0.1.tar.gz (25.7 kB view details)

Uploaded Source

Built Distribution

npdtools-1.0.1-py3-none-any.whl (28.6 kB view details)

Uploaded Python 3

File details

Details for the file npdtools-1.0.1.tar.gz.

File metadata

  • Download URL: npdtools-1.0.1.tar.gz
  • Upload date:
  • Size: 25.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.1

File hashes

Hashes for npdtools-1.0.1.tar.gz
Algorithm Hash digest
SHA256 ea4cfba7318b3e8b0a8be0b2bfa4fa2efc7c9ba446f713f10dbe809f61a131e3
MD5 1c375f9b12a2ac562d26f3bd11ac9b13
BLAKE2b-256 50c89959eb544574c683f4717d8c6f4bf29940a42cbef580175b160387c34ae0

See more details on using hashes here.

File details

Details for the file npdtools-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: npdtools-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 28.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.1

File hashes

Hashes for npdtools-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 336461bb55b33053e98289c9917a4020c39171883f30f52e2c99250b683303a9
MD5 479eb68839302f46badc2dae3dbb998f
BLAKE2b-256 8a4a32326826370229c5110149901708b7eaf8ca4c31e082cd9e3dbcadb53a52

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page