semvec/pypi-packages huggingface dataset:
fnsapi 0.0.3
Russian Federal Tax Service API connector
Requires Python: >=3.6

# Коннектор к апи ФНС для проверки чеков от ОФД в ФНС

Проверяет данные чеков, полученных от оператора фискальных данных в Федерельной налоговой службе.

## Установка и настройка

[Получите](https://www.nalog.ru/files/kkt/pdf/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5%20%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%B8%D1%8F%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F.pdf) `master token` в Федеральной налоговой службе.
<br>
<br>
Установите пакет
```sh
pip install fnsapi
```

<br>

Добавьте переменную окружения в своё виртуально окружение
```sh
FNS_API_MASTER_TOKEN=master_token_from_fns
```

<br>

Если базовый адрес апи ФНС отличается от `https://openapi.nalog.ru:8090/`, то укажите его через перменную окружения
```sh
FNS_API_BASE_URL=https://openapi.nalog.ru:8090/
```

## Принцип работы

Чтобы запросить информацию о чеке в ФНС, нужно
1. Получить токен сессии
2. Сгенерерировать имя пользователя в вашей системе, от имени которого осуществляется запрос
3. Вызвать функцию проверки чека или получения информации о чеке

## Пример использования

<br>

Например, данные получены из qr-кода: 
```
t=20201225T1016&s=1113.99&fn=9282440300829880&i=10556&fp=189504453&n=1
```

<br>

```
t — timestamp, нужно переформатировать в %Y-%m-%dT%H:%M:%S — 2020-12-25T10:16:00
s — sum, нужно умножить на 100 — 1111399
fn - fiscal_number — 9282440300829880
i - fiscal_document_id — 10556
fp - fiscal_sign — 189504453
n - operation_type — 1
```

<br>

```python
from fnsapi.api import FNSApi

fns_api = FNSApi()

# получение сессионного токена
session_token = fns_api.get_session_token()
user_id = 'ofd_user' # любое текстовое значение на ваш вкус

# проверка существования чека
result = fns_api.check_ticket(
    session_token, 
    user_id, 
    sum, # сумма чека в формате РРРКК, 12 рублей 23 копейки передавайте как 1223
    timestamp, # дата и время в формате %Y-%m-%dT%H:%M:%S
    fiscal_number, # код ККТ
    operation_type, # тип операции
    fiscal_document_id, # номер фискального документа
    fiscal_sign # фискальный признак
)

# в результате придёт структура
status = result['status'] # success, если апи фНС отработало запрос, еrror, если нет.
code = result['code'] # код ошибки от апи ФНС.
message= result['message'] # сообщение от ФНС.


# получение информации о чеке
result = fns_api.get_ticket(
    session_token, 
    user_id, 
    sum, # сумма чека в формате РРРКК, 12 рублей 23 копейки передавайте как 1223
    timestamp, # дата и время в формате %Y-%m-%dT%H:%M:%S
    fiscal_number, # код ККТ
    operation_type, # тип операции
    fiscal_document_id, # номер фискального документа
    fiscal_sign # фискальный признак
)

# в результате придёт структура
status = result['status'] # success, если апи фНС отработало запрос, еrror, если нет.
code = result['code'] # код ошибки от апи ФНС.
message= result['message'] # сообщение от ФНС в случае ошибки или JSON-строка с информацией о чеке.
```