Skip to main content

tool for work with FNS API

Project description

NPDTools

Исправления:

  • Исправлено название ключа refreshToken
  • Использование стандартного json модуля
  • Установка модуля typing только для python<3.5 (возможно стоит совсем убрать)
  • Обновлен модуль httpx до 0.27.0
  • Обновлен юзерагент
  • Удалены print'ы

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

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

Нет, не сода. Либа. 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_fx-1.0.2.tar.gz (26.4 kB view details)

Uploaded Source

Built Distribution

npdtools_fx-1.0.2-py3-none-any.whl (29.1 kB view details)

Uploaded Python 3

File details

Details for the file npdtools_fx-1.0.2.tar.gz.

File metadata

  • Download URL: npdtools_fx-1.0.2.tar.gz
  • Upload date:
  • Size: 26.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.6

File hashes

Hashes for npdtools_fx-1.0.2.tar.gz
Algorithm Hash digest
SHA256 36423d06ddb53a1e7d93e5ca6730cac8bd4fd6008c094b611b030c689aa3d1a7
MD5 de4cf40e2ddbf887d57ddf4b3a20299c
BLAKE2b-256 e5e8c0f89e5c087a9ecca114a553bfc486989d9bc193a98228ac1c9916d48d25

See more details on using hashes here.

File details

Details for the file npdtools_fx-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: npdtools_fx-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 29.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.6

File hashes

Hashes for npdtools_fx-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 45d92292e90ff8747984dc48b88aeaf7465b522784ebc404f1108ded5a068765
MD5 426d116e2ce4191d5f0cedaf0d027b2c
BLAKE2b-256 93f2397b2ec35791678d5c2091232441691c6a45637aa2b9a89fd1fc868db895

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