Changelog¶
Todas as mudanças relevantes deste projeto são documentadas aqui.
O formato segue o Keep a Changelog e o projeto adota o Versionamento Semântico.
[Não lançado]¶
[0.4.0] - 2026-09-23¶
Pagamentos: boletos, contas e tributos, DARF e lotes, com os trilhos de segurança do Pix.
Adicionado¶
inter-pj pagamento boleto pagar <codigo>: paga ou agenda (--data) boletos, contas de consumo e tributos pela linha digitável ou pelo código de barras, conferidos localmente. Valor e vencimento vêm do código quando ele os traz, e o resumo avisa, mostrando os dois lados, quando--valorou--vencimentodiferem dele, e também quando o pagamento fica para depois do vencimento;--beneficiariopede à API que confira o CPF/CNPJ de quem recebe. Mesmos trilhos do Pix: confirmação,--sim,--simularelimite_por_operacao. Como a API não tem chave de idempotência, um resultado incerto sai com o código 9 e vem com o comando que confere o pagamento antes de repeti-lo, na mesma conta (com-p,--config,--ambientee as demais opções da linha de comando que escolheram a conta) e com o aviso de que uma lista vazia logo depois do erro não prova que nada foi pago (#23, #336).inter-pj pagamento boleto listar: pagamentos por código de barras de um período (até 90 dias; padrão: incluídos nos últimos 30 dias), por data de inclusão, pagamento ou vencimento (--filtrar-por), código (--codigo) ou transação (--codigo-transacao), em texto, JSON ou CSV (#24).inter-pj pagamento boleto cancelar <codigo-transacao>: cancela um agendamento depois de mostrá-lo (beneficiário, valor, data e status) e pedir confirmação; sem terminal, exige--sime não faz nenhuma requisição (#24).inter-pj pagamento darf pagar: DARF sem código de barras pelas opções ou por--arquivo(JSON com os campos da API, ou-para a entrada padrão), validado localmente com mensagens que apontam o campo; campos desconhecidos no arquivo são recusados. O resumo mostra principal, multa, juros e o total por extenso, e avisa sobre DARF vencido sem acréscimos. Mesmos trilhos dos demais pagamentos. Misturar--arquivocom uma opção do DARF, ou dar uma opção sem as outras, é recusado com o que fazer (--multavai emvalorMultano arquivo). Os textos da resposta aparecem sem quebras de linha nem caracteres de controle (#25, #355, #360).inter-pj pagamento darf listar: DARFs pagos em um período, ou incluídos nos últimos 30 dias, por código da receita ou da solicitação, em texto, JSON ou CSV; o CSV mostrado no terminal passa pelo filtro da saída em texto (#25, #355).inter-pj pagamento lote enviar --arquivo: lotes de 2 a 150 boletos, contas, tributos e DARFs a partir de um arquivo JSON (os campos da API, comtipoPagamento) ou de uma planilha CSV (,ou;, com ou sem BOM, como o Excel salva). O lote inteiro é conferido antes do envio, e todos os problemas são listados com a linha ou a posição e o campo, sem enviar nada; o resumo mostra os totais por tipo, cada pagamento e avisos (vencimentos passados, valores diferentes dos do código). Pagamentos repetidos no arquivo (o mesmo código, ou o mesmo DARF) são recusados, porque com--simum aviso não impediria o pagamento em dobro;--permitir-repetidosos aceita. Mesmos trilhos dos demais pagamentos; os comandos sugeridos levam as opções que escolheram a conta (#26, #372, #381).inter-pj pagamento lote consultar <id-lote>: status do lote e de cada pagamento; com--aguardar [--timeout 5m], decide pelo status de cada pagamento: sai com 0 quando todos foram pagos ou agendados (avisando dos agendados), 5 quando algum não foi feito ou tem um status desconhecido, e 8 quando o tempo acabou com o lote em processamento ou com pagamentos aguardando aprovação. Uma consulta que falha durante a espera (429,5xx, rede) não a interrompe (#26, #369, #376).inter-pj pagamento lote modelo [json|csv]: arquivos de exemplo com dados fictícios e os códigos de teste do sandbox. No CSV, as células que o Excel estraga ao abrir o arquivo (números longos em notação científica, códigos da receita sem o zero à esquerda) são recusadas com a explicação (#26).- Biblioteca:
boleto::CodigoBarrasvalida e decodifica localmente a linha digitável (47 dígitos para boletos, 48 para contas e tributos) e o código de barras (44 dígitos): dígitos verificadores (módulos 10 e 11), conversão entre linha e código, banco, segmento, valor e vencimento, considerando o reinício do fator de vencimento em 22/02/2025 (#23). - Biblioteca:
Banking::pagar_boleto(boletos, contas e tributos com código de barras, com validação local do valor),Banking::pagamentos(filtros por período, tipo de data, código e transação) eBanking::cancelar_pagamento(agendamentos) (#23, #24). - Biblioteca:
Banking::pagar_darf(DARF sem código de barras, com validação local do código da receita, da referência, dos textos e dos valores;PagamentoDarfError::campodiz qual campo falhou) eBanking::darfs(filtros por período, código da receita e solicitação) (#25). - Biblioteca:
Banking::enviar_lote(lotes de 2 a 150 boletos e DARFs, validados item a item) eBanking::consultar_lote(status do lote e de cada pagamento) (#26). - Biblioteca:
Error::may_have_been_processeddiz se uma operação pode ter sido processada apesar do erro (só depois que a requisição dela foi enviada), para quem decide se pode repeti-la (#338).
Alterado¶
limite_por_operacaovale também para os pagamentos: boletos, DARFs e cada pagamento de um lote.- Os códigos de saída 5 e 8 valem também para
pagamento lote consultar --aguardar(algum pagamento não foi feito; tempo esgotado, também com pagamentos aguardando aprovação). - Novo código de saída 9: um envio cujo resultado ficou incerto (tempo esgotado, erro 5xx, resposta ilegível depois do envio) sai com ele, e não mais com 6 ou 1, para que um script distinga "pode ter sido feito, confira" de "não foi feito, pode repetir" (um
429ou uma conexão recusada continuam com 6). Vale para os pagamentos e parapix enviar. Uma falha ao pedir o token de acesso não é mais tomada por um envio incerto, porque nada foi enviado (#335, #338). - Biblioteca: as falhas de rede do pedido do token de acesso são
Error::TokenTransport, e não maisError::Transport, que fica para as da própria operação (#338). - Os erros de uso (uma opção desconhecida, um valor inválido, opções que não combinam, um argumento que falta) saem em português, como todas as outras mensagens, com as mesmas dicas e a linha de uso; o clap os escrevia em inglês. O código de saída continua 2 (#360).
Corrigido¶
- As datas seguem o calendário do banco: "hoje" é o dia em Brasília, qualquer que seja o fuso da máquina, em
pagamento boleto pagar(agendamento, data passada, aviso de vencimento), nos períodos padrão das listagens e empix enviar. Num servidor em UTC perto da meia-noite, um agendamento para amanhã era tomado por um pagamento de hoje e pago na hora (#337). - A saída em texto troca por
�os caracteres de controle vindos da API (nomes, descrições, status, mensagens de erro): as sequências de escape não chegam mais ao terminal, onde poderiam reescrever a tela, e uma quebra de linha num campo do extrato ou das consultas não simula mais uma linha. O filtro tem limites: as mensagens de erro da API ainda podem ocupar mais de uma linha, e os caracteres que invertem ou escondem texto (bidirecionais, de largura zero) não são trocados. O JSON continua com o texto exato; o CSV também, salvo o apóstrofo que protege as planilhas de fórmulas (#403).
[0.3.0] - 2026-09-23¶
Pix: envio e consulta, com trilhos de segurança.
Adicionado¶
inter-pj pix enviar: Pix por chave (--chave), código copia e cola (--copia-e-cola) ou dados bancários (--ispb,--agencia,--conta,--tipo-conta,--documento,--nome), com descrição e agendamento (--data) (#20).- Trilhos de segurança do envio (#19):
- validação local da chave (CPF/CNPJ com dígitos verificadores, inclusive o CNPJ alfanumérico; e-mail; celular
+55; chave aleatória), do valor, da descrição e dos dados bancários; - resumo antes do envio, com o valor por extenso e o ambiente de produção em destaque;
- confirmação
[s/N]digitada em um terminal (respostas de pipe não valem) ou--simpara scripts; --simular, que mostra a requisição sem enviar nada;- chave de idempotência exibida e
--id-idempotentepara repetir um envio interrompido sem pagar duas vezes, com aviso quando o resultado é incerto (tempo esgotado,5xx); limite_por_operacaono perfil, que vale mesmo com--sim.- Copia e cola decodificado e conferido localmente (CRC16): o resumo mostra recebedor, cidade, chave ou cobrança, identificador e mensagem; o valor do código prevalece em códigos estáticos; textos do código passam por um filtro de caracteres de controle (#20).
inter-pj pix consultar <codigo>: status, recebedor, erros e histórico de um Pix enviado;--aguardar [--timeout 60s]consulta a cada 6 s até um status final (#21).- Valores em reais aceitos como
150,00,1.500,00ou150.00, recusando formas ambíguas (1.500). - Códigos de saída 7 (operação cancelada na confirmação) e 8 (tempo de espera esgotado em
pix consultar --aguardar). - Biblioteca:
Banking::enviar_pix(comx-id-idempotente; repetido automaticamente só quando certamente não foi processado) eBanking::consultar_pix;documento::Documento,pix::ChavePix,pix::BrCode,IdIdempotenteeError::InvalidInput. - Biblioteca:
documento::Documentovalida CPF e CNPJ (inclusive o CNPJ alfanumérico),pix::ChavePixreconhece e normaliza chaves Pix (CPF, CNPJ, e-mail, celular+55e chave aleatória) epix::BrCodedecodifica o Pix copia e cola, conferindo o CRC16 (#20). - Biblioteca:
Banking::enviar_pix(por chave, dados bancários ou copia e cola, comx-id-idempotente) eBanking::consultar_pix(status e histórico), com validação local do pagamento e repetição automática só quando o envio certamente não foi processado (#20, #21). - Site de documentação no GitHub Pages (
https://edusouza.github.io/inter-pj-cli/), construído com o Zensical a partir desite/, para quem usa a CLI e para quem a desenvolve: primeiros passos, guias, a referência de comandos, a segurança, a arquitetura e como contribuir. A referência de comandos é gerada da ajuda do binário e as demais páginas derivadas (changelog, segurança, arquitetura, roadmap, contribuição e biblioteca) são cópias dos arquivos do repositório, com os links reescritos. - O crate
sitegen, que gera essas páginas e confere os comandosinter-pj ...citados nas páginas escritas à mão: um comando que não existe mais reprova a construção do site. - O workflow
pages.yml: constrói o site em modo estrito nos pull requests e o publica a partir damain.
[0.2.0] - 2026-09-23¶
Extrato: consulta, extrato enriquecido, PDF e exportação.
Adicionado¶
inter-pj extrato [--inicio] [--fim] [--dividir-periodo]: transações do período (padrão: últimos 30 dias), com entradas, saídas e resultado; o limite de 90 dias da API é conferido antes da chamada e períodos maiores podem ser divididos (#13).inter-pj extrato completo: detalhes de cada transação (Pix, boletos, pagamentos, transferências, tarifas...), filtros--tipo-operacaoe--tipo-transacao, paginação manual (--pagina,--tamanho-pagina) ou--todas-paginas, com modo scroll acima de 10.000 transações e dicas para os erros de scroll (#14).inter-pj extrato pdf [--saida ARQUIVO|-] [--sobrescrever]: PDF do período gravado com permissão 600, sem sobrescrever arquivos por engano (#15).--formato csv(RFC 4180) parasaldoeextrato, com--separador ';'para o Excel em português e proteção contra fórmulas em textos de terceiros (#16).- Retentativas automáticas com espera exponencial e
Retry-Afterpara429,5xxe falhas de conexão, somente em requisições seguras de repetir;--tentativas N,INTER_TENTATIVASe--sem-retentativa(#17). - Biblioteca:
Banking::extrato,extrato_completo,extrato_completo_todas,iniciar_scroll,continuar_scrolleextrato_pdf;Periodo,FiltroExtrato,TipoTransacao,TipoOperacao,DetalheeRetryPolicy.
Alterado¶
- Tempo limite das requisições da CLI ampliado para 60 s (páginas de extrato e PDFs grandes).
[0.1.1] - 2026-09-25¶
Diagnóstico do arquivo de configuração.
Adicionado¶
inter-pj config verificar: confere o arquivo de configuração e o perfil. Mostra cada problema com a linha e a correção: caminhos do Windows entre aspas duplas, sintaxe do TOML, o que falta no perfil, arquivos que não existem, certificado e chave aceitos pela biblioteca TLS, conta corrente e permissões. Sai com código 3 quando encontra um erro, e--jsondá o resultado para scripts (#164).inter-pj config verificar --corrigir: troca as aspas duplas dos caminhos do Windows por aspas simples, mantendo recuo, comentários e fim de linha, e guarda o original emconfig.toml.bak(permissão 600, sem sobrescrever uma cópia anterior) (#164).
Corrigido¶
- Um caminho do Windows entre aspas duplas (
certificado = "C:\Users\...") deixava de ser um erro em inglês sobre dígitos unicode. Agora a mensagem, em português, explica o escape do TOML, indica as aspas simples e sugere oconfig verificar. O conteúdo da linha continua sem aparecer, porque pode ter oclient_secret(#164). - Os comandos avisam quando um caminho lido do arquivo tem um caractere de controle. Isso acontece quando
\nou\tentre aspas duplas viram uma quebra de linha ou uma tabulação (#164). - A linha informada num erro do arquivo de configuração saía com um a menos quando o erro apontava o início de uma linha, como numa chave desconhecida (#164).
- O modelo do
config inite o README usam aspas simples nos caminhos e explicam o motivo (#164).
[0.1.0] - 2026-09-23¶
Primeira versão: autenticação e saldo.
Adicionado¶
inter-pj saldo [--data AAAA-MM-DD]: saldo disponível, bloqueios e limite, em texto (R$ no formato brasileiro) ou JSON com valores exatos (#8).inter-pj auth token(escopos,--renovar,--exibir) einter-pj auth limpar [--todos](#6, #7).inter-pj config init|caminho|mostrar: modelo de configuração com permissão 600, locais padrão e configuração efetiva com a origem de cada valor e segredos ocultos (#5).- Perfis em arquivo TOML com precedência flag > variável de ambiente > arquivo;
client_secretapenas porINTER_CLIENT_SECRETou arquivo (#5, #4). - Autenticação OAuth2 client credentials com mTLS via rustls, escopos mínimos por comando, renovação automática após
401e verificação dos escopos concedidos (#6). - Cache local de tokens por integração (arquivo 600, gravação atômica), respeitando o limite de 5 chamadas/min do endpoint de token (#7).
- Mensagens de erro em português a partir do formato problem details da API, com dicas, e códigos de saída documentados (#9).
- Biblioteca
inter-pjreutilizável, com registro de endpoints verificado contra a especificação OpenAPI (#2, #10). - CI com formatação, clippy, testes em Linux/macOS/Windows, MSRV 1.88, documentação, cargo-deny e gitleaks; workflow de release com binários e checksums (#3, #11).