Перейти к содержанию

Быстрый старт

Первый запрос

Давайте создадим простую программу, которая подключается к API и получает список чеков:

import asyncio
from nalogovich.lknpd import NpdClient

async def main():
    # Создаём клиента с вашими учетными данными
    async with NpdClient(
        inn="123456789012",  # Ваш ИНН
        password="your_password"  # Ваш пароль от ЛК НПД
    ) as client:
        # Выполняем авторизацию
        await client.auth()

        # Получаем список чеков
        response = await client.get_checks()

        # Выводим информацию о чеках
        print(f"Найдено чеков: {len(response.content)}")
        print(f"Есть ещё чеки: {response.has_more}")

        for check in response.content:
            print(f"Чек: {check.approved_receipt_uuid}")
            print(f"Сумма: {check.total_amount} ₽")
            print(f"Дата: {check.operation_time}")
            print(f"Тип оплаты: {check.payment_type}")

if __name__ == "__main__":
    asyncio.run(main())

Использование контекстного менеджера

Обратите внимание на использование async with — это автоматически закрывает сессию после завершения работы.

Создание чека

Теперь создадим чек (зарегистрируем доход):

from nalogovich.lknpd import NpdClient
from nalogovich.enums import PaymentType

async def create_receipt():
    async with NpdClient(inn="123456789012", password="your_password") as client:
        await client.auth()

        # Создаём чек
        income = await client.create_check(
            name="Консультация по Python",
            amount=5000.00,
            payment_type=PaymentType.CASH  # Наличные или карта
        )

        print(f"✅ Чек создан!")
        print(f"UUID: {income.approved_receipt_uuid}")

Чек создан

После выполнения этого кода чек будет зарегистрирован в системе ФНС.

Фильтрация чеков

Вы можете фильтровать чеки по различным параметрам:

from datetime import datetime, timedelta
from nalogovich.enums import SortBy, ReceiptType

async def filter_checks():
    async with NpdClient(inn="123456789012", password="your_password") as client:
        await client.auth()

        # Получаем чеки за последнюю неделю
        week_ago = datetime.now() - timedelta(days=7)

        response = await client.get_checks(
            from_date=week_ago,
            to_date=datetime.now(),
            sort_by=SortBy.total_amount_desc,  # Сортировка по сумме (по убыванию)
            receipt_type=ReceiptType.REGISTERED,  # Только действующие чеки
            limit=10  # Максимум 10 чеков
        )

        for check in response.content:
            print(f"{check.total_amount} ₽ — {check.name}")

Обработка ошибок

Всегда оборачивайте вызовы API в блоки try-except:

from nalogovich.lknpd import NpdClient
from nalogovich.exeptions import AuthenticationError, ApiError, ValidationError

async def safe_request():
    try:
        async with NpdClient(inn="123456789012", password="wrong_password") as client:
            await client.auth()

    except AuthenticationError as e:
        print(f"❌ Ошибка авторизации: {e}")
        print(f"Код ответа: {e.status_code}")

    except ApiError as e:
        print(f"❌ Ошибка API: {e}")
        print(f"Код: {e.status_code}")

    except ValidationError as e:
        print(f"❌ Ошибка валидации: {e}")

Дальше - больше, знакомимся с методами библиотеки