Automação para autônomos: como integrar impostos a um projeto de TI

Em 1 de janeiro de 2019, foi aprovada uma lei para quatro entidades constituintes da Federação Russa (regiões de Moscou, Moscou e Kaluga, bem como a República do Tartaristão), introduzindo um novo imposto profissional (NAP) como projeto piloto. Em suma, sua principal tarefa é salvar figuras profissionais de todas as dificuldades das pequenas empresas: imposto de 6% (no caso de empreendedores privados), contribuições obrigatórias para pensões, cujo montante a cada ano apenas para uma pessoa se aproxima da marca de 50 mil rublos, declaração de impostos. Assim, o estado apóia as pequenas empresas fornecendo aos empreendedores iniciantes um imposto baixo (4% para renda de pessoas físicas e 6% para pessoas jurídicas). Se você quiser mais detalhes, poderá ver informações detalhadas na Internet.

Mesmo as pessoas que trabalham na área de TI têm direito a usar NAPs. Como isso pode ajudar? Por exemplo, você desenvolveu um serviço que funciona na Internet e deseja aceitar pagamentos. Você não precisa registrar uma entidade legal para essa atividade empreendedora e resolver vários problemas desde o início. Basta registrar-se como trabalhador por conta própria e, em liberdade condicional, martelar manualmente em cada serviço ou produto. Nesse exato momento, o desenvolvedor do serviço pensa: "Esse processo pode ser automatizado?" E a resposta aqui é "Claro que você pode!" O artigo, na verdade, é para lhe dizer como fazê-lo.
Nota importante: o autor do artigo utiliza o conhecimento adquirido como resultado do estudo do aplicativo apenas para uma boa automação da rotina. Ele quer os mesmos motivos para você.

Etapa 1. Identifique o tráfego HTTP


Aqui você precisará do pedido de contribuinte oficial "Meu imposto". Você pode baixá-lo via Google Play.

Para este artigo, será suficiente determinar o sourceDeviceId (suspeito que seja o mesmo que o id do android) e o refreshToken, no entanto, você poderá explorar absolutamente todos os métodos de API propostos pelo aplicativo de estudo. Para determiná-lo, você precisa receber solicitações HTTPS do smartphone. Para um dispositivo de estoque sem direitos de root, você pode usar um computador, o programa gratuito Fiddler. Para entender o trabalho do programa, usei um guia não muito atualizado, mas foi suficiente para interceptar o tráfego https do smartphone e exibir o aplicativo na tela do computador.

Depois de instalar tudo, você precisa se registrar como contribuinte e fechar o aplicativo. Em seguida, ative o programa Fiddler, estabeleça uma conexão proxy no seu smartphone e inicie o aplicativo novamente. O aplicativo fará uma solicitação de autorização com um token de atualização, que no momento deste artigo é criado com uma duração ilimitada:

imagem

Como você pode ver na captura de tela, o aplicativo possui o domínio base lknpd.nalog.ru (subdomínio do site de serviço fiscal russo) e a versão 1. da API. A autorização para os métodos é usada pelo Bearer, o token é gerado pelo método / auth / token. Os dados dos campos de solicitação sourceDeviceId e refreshToken são extremamente necessários para você. Eu verifiquei o trabalho refreshToken 3 dias após o experimento - funciona, portanto, você pode levar o token com segurança por 1 hora, obviamente tendo um refreshToken real.

O próprio método de envio de encomendas se parece com isso e possui todos os campos necessários:

imagem

Observe que todos os campos são obrigatórios. O campo de serviços pode fazer com que você deseje enviar vários serviços na matriz; no entanto, apenas o primeiro serviço será exibido na verificação, embora o custo final esteja cheio. Ainda assim, o serviço é bastante úmido, e foi lançado recentemente, não vamos insistir nisso (embora seja uma pena, de fato, algumas posições serem necessárias).

Você também deve prestar atenção à resposta: allowedReceiptUuid: o campo contém um código de verificação exclusivo, que sem dificuldades pode ser obtido pelo seu NIF e UUID da verificação.

Etapa 2. Desenvolvimento de Script


Para demonstrar rapidamente o conceito de automação, o Python 3.7.2 é usado com a biblioteca de solicitações:

import requests import datetime import shutil TIME_OFFSET = '+03:00' DEVICE_ID = '' REFRESH_TOKEN = '' API_PROVIDER = 'https://lknpd.nalog.ru/api/v1/' TOKEN = '' INN = '' def DO(method, params): headers = {"Authorization":"Bearer "+TOKEN} if TOKEN != '' else {} r = requests.post(API_PROVIDER+method, json=params, headers=headers) print(r.text) return r.json() def get_token(): reqparam = { "deviceInfo": { "appVersion": "1.0.0", "metaDetails": { "browser": "", "browserVersion": "", "os": "android" }, "sourceDeviceId": DEVICE_ID, "sourceType": "android" }, "refreshToken": REFRESH_TOKEN } res = DO('auth/token', reqparam) # TODO:  tokenExpireIn       return res['token'] # TODO:    TOKEN = get_token() def new_transaction(service, amount): trans_time = datetime.datetime.now().isoformat()[:-3]+TIME_OFFSET reqparam = { "ignoreMaxTotalIncomeRestriction": False, "operationTime": trans_time, "paymentType": "CASH", "requestTime": trans_time, "services": [ { "amount": amount, "name": service, "quantity": 1 } ], "totalAmount": amount } res = DO('income', reqparam) return res['approvedReceiptUuid'] def get_receipt(receipt_uuid): headers = {"Authorization":"Bearer "+TOKEN} r = requests.get( 'https://lknpd.nalog.ru/api/v1/receipt/'+INN+"/"+receipt_uuid+"/print", stream=True, headers=headers ) with open('receipt.png', 'wb') as f: r.raw.decode_content = True shutil.copyfileobj(r.raw, f) if __name__ == '__main__': rec = new_transaction(' ', '1.00') get_receipt(rec) 

Substitua os valores necessários - o script funcionará como deveria. Você pode adicionar manipuladores de erros e melhorar a entrega - o script acima mostra apenas o princípio do trabalho com a NAP da API de impostos.
Nota Talvez no futuro o imposto publique a API, mas agora não faz isso apenas porque poucas pessoas precisam. Portanto, este negócio é adiado para mais tarde. No entanto, apresso-me a notar que, se o guia oficial for publicado, ele terá informações semelhantes ou um pouco melhor, em termos de autorização, com certeza.

UPD: Encontrei documentação sobre automação, que está escrita ... parece um assistente à mão: muito sofisticado e não estruturado. Haverá tempo - escreverei um artigo valioso sobre automação por meio da API oficial. Spoiler: tudo é quase o mesmo que aprendemos no tráfego, apenas os métodos oficiais com solicitações de email e outras dificuldades são descritos.


Conclusão


Concluindo, quero observar: não repita isso em casa, não há nada impossível. Mesmo uma coisa de rotina pode ser facilmente automatizada. Copie o código, modifique-o à sua maneira. Talvez então eu implemente a biblioteca para que a automação seja muito mais acessível a todos. Aguardo suas críticas objetivas e continuo buscando a API. Meu próximo objetivo é idealizar o princípio de autorização e criar uma biblioteca para Python.

Source: https://habr.com/ru/post/pt436656/


All Articles