Ir para o conteúdo

Fluxo de Processamento

Ao receber um arquivo CNAB, o sistema executa um pipeline sequencial composto por seis etapas. Cada etapa é responsável por uma parte do processamento, do arquivo bruto até o retorno entregue ao cedente.


Diagrama Geral

flowchart TD
    A["📥 Recepção\nArquivo CNAB via SFTP / Tela"]
    B{"🔍 Identificação\ndo Layout"}
    C["📖 Leitura e\nMapeamento de Campos"]
    D["🔗 Enriquecimento\nde Ocorrências"]
    E["💾 Persistência\nno Banco de Dados"]
    F{"⚙️ Tipo de\nAdministrador"}
    G1["Processamento\nindividual por título"]
    G2["Processamento\npor arquivo"]
    H["⏳ Aguarda\nProcessamento"]
    I["📄 Geração do\nArquivo de Retorno"]
    J["📤 Envio do Retorno\nvia SFTP"]

    A --> B
    B -->|"CNABS 400"| C
    B -->|"CNAB 240 · BB Pagamentos"| C
    C --> D
    D --> E
    E --> F
    F -->|"Bankly"| G1
    F -->|"BV"| G2
    G1 --> H
    G2 --> H
    H --> I
    I --> J

Etapas do Processo

1. Recepção

O arquivo CNAB chega ao sistema por um dos canais disponíveis:

  • SFTP — O cliente deposita o arquivo na pasta CNAB do seu diretório no servidor SFTP. Um worker monitora continuamente o servidor e faz o download automaticamente.
  • Tela (em breve) — Upload manual pela interface web da plataforma.

Ao ser recebido, o arquivo é armazenado no Azure Blob Storage e um registro de Arquivo é criado no banco de dados com o status inicial de processamento.


2. Identificação do Layout

O sistema inspeciona as primeiras posições do arquivo para determinar o tipo de layout sem necessidade de configuração manual:

flowchart LR
    A["Primeira linha\ndo arquivo"]

    A -->|"400 caracteres\nPos. 78-80 = 001"| B1["CNAB 400\nBanco do Brasil"]
    A -->|"400 caracteres\nPos. 78-80 = 237"| B2["CNAB 400\nBradesco"]
    A -->|"400 caracteres\nPos. 78-80 = 655"| B3["CNAB 400\nBV"]
    A -->|"240 caracteres\nPos. 1-3 = 001"| B4["CNAB 240\nBB Pagamentos"]
Critério CNAB 400 CNAB 240
Tamanho da linha 400 caracteres 240 caracteres
Indicador no header Posição 2 = 1 (remessa) Posição 8 = 0 (header arquivo)
Código do banco Posições 78–80 Posições 1–3

Banco não identificado

Caso o banco ou o formato não seja reconhecido, o arquivo é rejeitado e o erro é registrado no log de integração. O cedente é notificado para verificar o layout enviado.


3. Leitura e Mapeamento de Campos

Com o layout identificado, um leitor especializado por banco realiza o parse do arquivo linha a linha, convertendo cada posição fixa em propriedades tipadas:

Linha CNAB (texto fixo, 400 chars)
DetalheRemessa400BB (objeto C# com propriedades tipadas)
Titulo (entidade de domínio do sistema)

O mapeamento entre o objeto de layout e a entidade de domínio é feito via AutoMapper, com perfis individuais por banco. Cada perfil define exatamente como cada campo do CNAB se traduz para os campos internos do sistema.


4. Enriquecimento de Ocorrências

O campo Comando do detalhe (ex: 01 = Registro, 02 = Baixa) é um código numérico que varia por banco. O sistema traduz esse código para uma ocorrência interna padronizada consultando o Mapa de Ocorrências.

flowchart LR
    A["Comando CNAB\n(ex: código '01')"]
    B[("Mapa de\nOcorrências\n(banco de dados)")]
    C["Ocorrência Interna\n(ex: RegistroDeTitulos)"]

    A -->|"Layout + Código"| B
    B --> C

Esse mapeamento é parametrizável: cada combinação de Layout + Código pode ser mapeada para uma ocorrência diferente, sem necessidade de alteração no código. Veja mais em Configuração.


5. Persistência

Após o mapeamento, o header e todos os títulos são gravados em lote no banco de dados (bulk insert), garantindo performance mesmo para arquivos com centenas de registros.

Em seguida, o sistema valida:

  • A conta corrente existe e está ativa no cadastro
  • O convênio de cobrança está vinculado à operação correta
  • Não há duplicidade de títulos (verificação por Nosso Número + Data de Emissão)

6. Processamento pelo Administrador

Após a persistência, jobs em background são agendados no Hangfire para enviar os títulos ao administrador financeiro configurado na operação:

Administrador Estratégia Descrição
Bankly Por título Cada título é enviado individualmente via API
BV Por arquivo O arquivo completo é enviado de uma vez

O status de cada título é atualizado conforme o retorno do administrador (via webhooks ou polling), registrando ocorrências como: entrada confirmada, liquidação, baixa, rejeição, etc.


7. Geração e Envio do Retorno

Quando todos os títulos de um arquivo estiverem processados, o sistema gera automaticamente o arquivo de retorno CNAB no formato configurado para a operação.

flowchart LR
    A["Títulos\nprocessados"]
    B["Mapa de\nOcorrências"]
    C["Arquivo de\nRetorno CNAB"]
    D["📤 SFTP\n(pasta RETORNO)"]

    A -->|"Ocorrência interna\n→ Código CNAB"| B
    B --> C
    C --> D

O retorno segue a mesma lógica do mapeamento de entrada, mas no sentido inverso: a ocorrência interna é convertida de volta para o código numérico esperado pelo banco/cedente. O arquivo é então depositado na pasta RETORNO do SFTP do cliente.


Rastreabilidade

Cada etapa gera registros de log no banco de dados:

Entidade O que registra
LogIntegracao Status geral do arquivo (recebido, processado, erro)
LogIntegracaoTitulo Status individual de cada título
Arquivo Referência ao blob no Azure Storage

Reprocessamento

Em caso de falha em qualquer etapa, o sistema registra o erro e pode reprocessar o arquivo ou título específico sem impacto nos demais.