Skip to content

Proposta: autopreenchimento de Pagador/Beneficiario por CPF/CNPJ (pacote aditivo, opcional) #409

Description

@alissonlinneker

Contexto

Hoje o Pagador (e o Beneficiario) do BoletoNetCore é montado campo a campo, à
mão, a partir de um DTO que o integrador precisa preencher: nome/razão, CPF/CNPJ e
os sete campos de Endereco (logradouro, número, complemento, bairro, cidade, UF e
CEP). Quando esses dados vêm de um cadastro por documento, cada integrador acaba
escrevendo o próprio código de consulta e de mapeamento.

Proposta

Um pacote separado, opcional e aditivo que apenas referencia o BoletoNetCore e
resolve um Pagador nativo (ou preenche um já existente) a partir de um CPF ou
CNPJ. Nada no core muda; quem não usar o pacote não percebe diferença.

Desenho:

  • IPessoaLookup: contrato de consulta (Task<PessoaResultado> ConsultarAsync(documento, ct)).
  • CpfCnpjComBrLookup: implementação sobre HttpClient (aceita HttpClient injetado,
    ideal com IHttpClientFactory), consultando a API cpfcnpj.com.br.
  • PagadorResolver: devolve um Pagador/Beneficiario preenchido; e um método de
    extensão Pagador.PreencherAsync(...) que preenche in loco, com opção não destrutiva
    (só completa campos vazios).

O documento é normalizado e validado (inclusive CNPJ alfanumérico, regra da Receita
em vigor desde 2026) antes de ser entregue ao setter de CPFCNPJ, que exige 11 ou 14
posições; documento inválido gera ArgumentException antes de qualquer chamada de rede.

Encaixe com o modelo nativo (v3)

O mapeamento é 1:1 com os campos que o boleto usa:

Campo consultado Destino nativo
nome / razão Pagador.Nome
CPF / CNPJ Pagador.CPFCNPJ
logradouro Endereco.LogradouroEndereco
número Endereco.LogradouroNumero
complemento Endereco.LogradouroComplemento
bairro Endereco.Bairro
cidade Endereco.Cidade
uf Endereco.UF
cep Endereco.CEP

Para CNPJ, o tipo de logradouro (por exemplo R ou Avenida) é concatenado ao
logradouro respeitando abreviações, sem duplicar o prefixo.

Alvo netstandard2.0, igual ao core, para máxima compatibilidade (.NET Framework,
.NET Core e .NET 5 ou superior).

Por que a fonte de dados importa

A qualidade do boleto depende da qualidade do cadastro. Os diferenciais da fonte:

  • Consulta em tempo real (D+0), direto nas bases oficiais, sem depender de bases
    vazadas ou desatualizadas.
  • Gestão certificada: ISO/IEC 27001 (segurança da informação), ISO/IEC 27701
    (privacidade) e ISO 37301 (compliance).

Documentação e pacotes: https://www.cpfcnpj.com.br/dev/

Pergunta aos mantenedores

Há interesse em referenciar/listar esse pacote complementar no README (na seção de
integrações), mantendo-o fora do core? Posso abrir o PR do pacote e a documentação.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions