Skip to main content

SDK Python para integração com a API de retornos da Equals

Project description

integracaoequals

SDK Python para integração com a API de retornos da Equals.

Instalação

pip install integracaoequals

Início rápido

from retorno_sdk import EqualsRetornoSDK

sdk = EqualsRetornoSDK(api_token="SEU_TOKEN")

remessa = sdk.gerar_remessa(id_config=1234, data_inicial="01/05/2026", data_final="31/05/2026")

for registro in sdk.iter_todos_dados(remessa["id"]):
    print(registro)

Endpoints

get_configuracoes()

Lista as configurações de remessa disponíveis para o token.

configs = sdk.get_configuracoes()
# [{"id": 1234, "nome": "Vendas - Equals (API)"}, ...]

gerar_remessa(id_config, data_inicial, data_final)

Solicita a geração de uma remessa para um período. Retorna o ID da remessa criada.

remessa = sdk.gerar_remessa(
    id_config=1234,
    data_inicial="01/05/2026",
    data_final="31/05/2026",
)
# {"id": 7000000001110835}

Com filtros opcionais:

remessa = sdk.gerar_remessa(
    id_config=1234,
    data_inicial="01/05/2026",
    data_final="31/05/2026",
    filtro_estabelecimentos=[101, 102],
    filtro_adquirentes=[1, 2],
)

get_remessas()

Lista remessas existentes. Todos os parâmetros são opcionais.

# Todas as remessas
remessas = sdk.get_remessas()

# Por ID
remessa = sdk.get_remessas(id_remessa=7000000001110835)

# Só as concluídas
concluidas = sdk.get_remessas(situacao="CONCLUIDO")

# Por período de geração
remessas = sdk.get_remessas(
    data_geracao_inicial="01/05/2026",
    data_geracao_final="31/05/2026",
)

Situações possíveis: EM_PROCESSAMENTO, CONCLUIDO, ERRO.


get_dados_remessa(id_remessa, pagina)

Busca uma página específica de registros de uma remessa.

pagina = sdk.get_dados_remessa(id_remessa=7000000001110835, pagina=1)
# {"id": ..., "pagina": 1, "registros": {"registro": [...]}}

iter_todos_dados(id_remessa)

Itera por todos os registros de todas as páginas sem carregar tudo na memória. Recomendado para remessas grandes.

for registro in sdk.iter_todos_dados(id_remessa=7000000001110835):
    print(registro)

get_todos_dados(id_remessa)

Retorna todos os registros em uma lista. Use para remessas pequenas.

dados = sdk.get_todos_dados(id_remessa=7000000001110835)
# [{"NSR": 1, "VLBRUTO": 15000, ...}, ...]

processar_remessa(id_remessa, salvar_registro)

Itera sobre todos os registros e chama uma função para cada um. Ideal para salvar direto no banco.

sdk.processar_remessa(
    id_remessa=7000000001110835,
    salvar_registro=meu_banco.inserir,
)

deletar_remessa(id_remessa)

Remove uma remessa.

sdk.deletar_remessa(id_remessa=7000000001110835)

validar_webhook(payload, signature)

Valida a assinatura de um webhook recebido da Equals.

sdk = EqualsRetornoSDK(api_token="SEU_TOKEN", webhook_secret="SEU_WEBHOOK_SECRET")

valido = sdk.validar_webhook(payload=request.body, signature=request.headers["X-Hub-Signature-256"])

if valido:
    print("Webhook autentico")

Transformação de dados

criar_transformador — renomeia campos

from retorno_sdk import criar_transformador

parser = criar_transformador({
    "NSR":         "numero_sequencial",
    "VLBRUTO":     "valor_bruto",
    "VLLIQUIDO":   "valor_liquido",
    "DTMOVIMENTO": "data_movimento",
})

for registro in sdk.iter_todos_dados(id_remessa, parser=parser):
    print(registro["valor_bruto"])  # campo renomeado

transformar_campos — processa o valor de um campo

from retorno_sdk import transformar_campos

parser = transformar_campos({
    "VLBRUTO":     lambda v, _: round(v / 100, 2),   # centavos → reais
    "DTMOVIMENTO": lambda v, _: f"{str(v)[:4]}-{str(v)[4:6]}-{str(v)[6:]}",  # 20260501 → "2026-05-01"
})

O segundo argumento do lambda é o registro completo — útil para cálculos entre campos:

parser = transformar_campos({
    "VLLIQUIDO": lambda v, reg: f"{round(v / reg['VLBRUTO'] * 100, 1)}%"  # % do bruto
})

compor_transformadores — encadeia transformações

Primeiro renomeia, depois processa os valores com os nomes novos:

from retorno_sdk import compor_transformadores, criar_transformador, transformar_campos

parser = compor_transformadores(
    # 1. Renomeia as chaves da API para o nome do seu sistema
    criar_transformador({
        "NSR":         "numero_sequencial",
        "VLBRUTO":     "valor_bruto",
        "VLLIQUIDO":   "valor_liquido",
        "DTMOVIMENTO": "data_movimento",
        "BANDEIRA":    "bandeira",
        "ADQUIRENTE":  "adquirente",
        "PARCELA":     "parcela_atual",
        "PARCELAS":    "total_parcelas",
    }),
    # 2. Transforma os valores já com os nomes novos
    transformar_campos({
        "valor_bruto":    lambda v, _: round(v / 100, 2),
        "valor_liquido":  lambda v, _: round(v / 100, 2),
        "data_movimento": lambda v, _: f"{str(v)[:4]}-{str(v)[4:6]}-{str(v)[6:]}",
        "parcela_atual":  lambda v, reg: f"{v}/{reg['total_parcelas']}",  # "2/7"
    }),
)

for registro in sdk.iter_todos_dados(id_remessa, parser=parser):
    print(registro)

Cliente async

Para uso com FastAPI, Django async ou qualquer pipeline assíncrono:

from retorno_sdk import EqualsRetornoSDKAsync

async def baixar():
    async with EqualsRetornoSDKAsync(api_token="SEU_TOKEN") as sdk:
        remessa = await sdk.gerar_remessa(1234, "01/05/2026", "31/05/2026")

        async for registro in sdk.iter_todos_dados(remessa["id"]):
            print(registro)

Todos os métodos do cliente síncrono têm equivalente async.


CLI

Teste a integração sem escrever código:

# Verificar conexão e listar configurações
equals-sdk --token SEU_TOKEN testar

# Listar remessas concluídas
equals-sdk --token SEU_TOKEN remessas --situacao CONCLUIDO

# Gerar remessa
equals-sdk --token SEU_TOKEN gerar --config 1234 --inicio 01/05/2026 --fim 31/05/2026

# Baixar dados para arquivo
equals-sdk --token SEU_TOKEN baixar --id 7000000001110835 --output dados.json

O token também pode ser passado via variável de ambiente EQUALS_API_TOKEN.


Tratamento de erros

from retorno_sdk.exceptions import (
    AuthenticationError,   # Token inválido (401/403)
    RateLimitError,        # Limite de requisições (429) — o SDK reintenta automaticamente
    RemessaNotFoundError,  # Remessa não encontrada
    RemessaNotReadyError,  # Remessa ainda em processamento
    EqualsAPIError,        # Outros erros HTTP
)

try:
    dados = sdk.get_todos_dados(id_remessa)
except RemessaNotReadyError as e:
    print(f"Situação atual: {e.situacao}")  # EM_PROCESSAMENTO
except AuthenticationError:
    print("Verifique o token")
except EqualsAPIError as e:
    print(f"Erro HTTP {e.status_code}: {e}")

Testes

python -m pytest tests/

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

integracaoequals-1.0.1.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

integracaoequals-1.0.1-py3-none-any.whl (16.1 kB view details)

Uploaded Python 3

File details

Details for the file integracaoequals-1.0.1.tar.gz.

File metadata

  • Download URL: integracaoequals-1.0.1.tar.gz
  • Upload date:
  • Size: 14.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for integracaoequals-1.0.1.tar.gz
Algorithm Hash digest
SHA256 7a8cd4595fcf80a523be0a02970b7e1af30e4b4c37a376531ea59f365b5681e4
MD5 a81b1faf9ba3f6083b17ebaeb1d13c1c
BLAKE2b-256 77c724f9cadcc5e405b4a0ba82b313d6554f7f71ecd36459df25ce884047c6a4

See more details on using hashes here.

File details

Details for the file integracaoequals-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for integracaoequals-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 303f0cdbbc62ab71c1a03cf4d6ce5fce846c8e5827067a8bc45a1b0b80ada33a
MD5 c9e9d588cb2d62f8c9fd4a01c1d6ae8d
BLAKE2b-256 4a65e18eba0882a7fd0f367351c631f4b9c9fc2145a2e1909295960c61f32f08

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page