Python aplicado à contabilidade

Tudo joia, galera?
Alguém aqui trabalha na área contábil e usa python no dia a dia? Tem varias coisas pra se falar, mas a mais complicada na minha opinião é a integração do python com os web service da Receita. Alguém aqui já conseguiu fazer essa integração?

Tem um video no YT de um cara que mostra fazendo com a biblioteca pynfe mas carece de mais informações.

Tem também a integração pra monitorar a NF3-e.

import base64
import json
from requests_pkcs12 import post
from dotenv import load_dotenv
import os

load_dotenv()

def serpro_componentes_autenticacaoLoja():
    url = "https://autenticacao.sapi.serpro.gov.br/authenticate"

    caminho_arquivo = os.getenv('CAMINHO_CERTIFICADO_DIGITAL_AC')
    certificado = caminho_arquivo 
    senha = os.getenv('SENHA_CERTIFICADO_AC')

    consumer_key = os.getenv('CONSUMER_KEY')
    consumer_secret = os.getenv('CONSUMER_SECRET')

    def converter_base64(credenciais):
        return base64.b64encode(credenciais.encode("utf8")).decode("utf8")

    def autenticar(ck, cs, certificado, senha):
        headers = {
            "Authorization": "Basic " + converter_base64(ck + ":" + cs),
            "role-type": "TERCEIROS",
            "content-type": "application/x-www-form-urlencoded"
        }
        body = {'grant_type': 'client_credentials'}
        response = post(url,
                        data=body,
                        headers=headers,
                        verify=True,
                        pkcs12_filename=certificado,
                        pkcs12_password=senha)
        
        # Extrair as chaves de acesso
        data = json.loads(response.content.decode('utf8'))
        acess_token = data['access_token']
        jwt_token = data['jwt_token']
        
        return acess_token, jwt_token

    return autenticar(consumer_key, consumer_secret, certificado, senha)


if __name__ == '__main__':
    i, j = serpro_componentes_autenticacaoLoja()
    print(f'{i}\n{j}')
1 curtida

Consegue descrever com mais detalhes quais exatamente são as complicações? O que exatamente você não está conseguindo fazer?

from autenticar import serpro_componentes_autenticacaoLoja
import requests
import json

url = "https://gateway.apiserpro.serpro.gov.br/integra-contador/v1/Consultar"
acess_token, jwt_token = serpro_componentes_autenticacaoLoja()

headers = {
    "Authorization": f"Bearer {acess_token}",
    "Content-Type": "application/json",
    "jwt_token": jwt_token
}

payload = {

    "contratante": {
        "numero": "23931886000192",
        "tipo": 2
    },
    "autorPedidoDados": {
        "numero": "23931886000192",
        "tipo": 2
    },
    "contribuinte": {
        "numero": "28946456604",
        "tipo": 1
    },
    "pedidoDados": {
        "idSistema": "PAGTOWEB",
        "idServico": "CONTACONSDOCARRPG73",
        "dados": "{ \"intervaloDataArrecadacao\": {\"dataInicial\": \"2024-01-01\", \"dataFinal\": \"2024-10-22\"}}"
    }
}


try:
    response = requests.post(url, headers=headers, data=json.dumps(payload))
    response.raise_for_status()  # Levanta um erro se o status não for 200
    print("Status Code:", response.status_code)
    print("Response JSON:", response.json())
except requests.exceptions.HTTPError as http_err:
    print(f"HTTP error occurred: {http_err}")
    print("Response:", response.content)  # Exibe o conteúdo da resposta em caso de erro
except Exception as err:
    print(f"An error occurred: {err}")

numeros_documentos = [item['numeroDocumento'] for item in response]
print(numeros_documentos)

Opa, amigo! Eu trabalho. Trabalho com contabilidade há 8 anos, e crio automações em Python e programas em Flask para as demandas do meu escritório. Também enfrentei esse problema que você está relatando ao usar a API do Integra Contador da SERPRO.

Até hoje também tenho um pouco de dificuldades para fazer as requisições. Minha maior dificuldade é para solicitar as requisições com o certificado digital do cliente. Vou buscar alguns projetos anteriores para ver se consigo compartilhar aqui, quem sabe te ajuda.