Pular para conteúdo

BRB — Banco de Brasília (070)

Manual oficial de referência: Layout de Remessa DCB — BRB / Banco de Brasília (obtido via canal de homologação do banco). Sem manual público localizado — layout portado por paridade byte a byte com os vetores de referência; ver fontes-oficiais.md.

Implementação: pycobranca/bancos/brb.py · Dígito do banco: 1 · PIX: —

Resumo

Campo livre no formato DCB com incremento (3) e dígito duplo.

Campo livre (posições 20–44 do código de barras)

Posições Tam. Conteúdo
1–3 3 Incremento
4–6 3 Agência
7–13 7 Conta
14 1 Carteira
15–20 6 Nosso número
21–23 3 070 (código do banco)
24–25 2 Dígito duplo (módulo 10 + módulo 11)

Dígitos verificadores

  • Dígito duplo do campo livre — calculado sobre as 23 posições anteriores: o 1º dígito por módulo 10; o 2º por módulo 11 (fatores 2..7, 11 - (soma % 11), mapa {10: 0, 11: 0}). Quando o 2º resulta em 1, incrementa o 1º (9→0) e recalcula.

Validação de campos (geração do boleto)

Tamanhos em dígitos (mín.–máx.); a máscara é descartada e o valor é preenchido com zero à esquerda. Violações vêm em BoletoInvalido.erros (lista) — ver o contrato de erros e a matriz completa.

Campo Regra
Incremento 1–3 dígitos
Agência 1–3 dígitos
Conta 1–7 dígitos
Nosso número 1–6 dígitos
Carteira conjunto: 1, 2

Formatos de exibição

  • Nosso número: carteira(1) + nosso número(6) + 070 + dígito duplo → 112345607075
  • Agência/conta: 000 - agência(3) - conta(7) → 000 - 123 - 1234567

Exemplo (saída da engine)

Entrada: incremento 123, agência 123, conta 1234567, carteira 1, nosso número 123456, R$ 127,50, vencimento 15/08/2026.

Campo livre:      1231231234567112345607075
Código de barras: 07097153900000127501231231234567112345607075
Linha digitável:  07091.23129 31234.567118 23456.070756 7 15390000012750

Remessa CNAB 400 (formato DCB) — implementada e validada byte a byte ✓

Implementação: pycobranca/cnab/cnab400/banco_brasilia.py · fixture: tests/fixtures/remessa_banco_brasilia_cnab400.rem

Layout DCB, não FEBRABAN. O header tem 39 posições; detalhe e trailer têm 400. Por isso tamanho_registro = (39, 400).

Correção de um registro anterior. Esta página dizia que o detalhe tinha 402 posições e que a conferência de tamanho ficava desligada (tamanho_registro=None) por causa disso. As 402 não eram do layout: o nosso número tem 6 posições aqui, e um valor de 8 dígitos atravessava para a posição seguinte, porque rjust preenche e não corta. A fixture não pegava — vem da implementação de referência, que estoura igual. Hoje o valor que não cabe é recusado e a conferência está ligada.

Estrutura do arquivo (CRLF, maiúsculas sem acentos):

Registro Tam. Conteúdo principal
Header 39 DCB001075 · agência(3) + conta(7) · data/hora de formação AAAAMMDDHHMMSS · quantidade de registros(6)
Detalhe (01) 400 agência(3) + conta(7) · sacado (doc 14/nome 35/endereço 35/cidade 15/UF/CEP) · nº documento(13) · carteira(1) · emissão (DDMMAAAA) · 21 · 02 · 070 + agência(4) · vencimento (DDMMAAAA) · valor(14) · nosso número · código/valor de juros(14) · abatimento(14) · código/data/valor de desconto(14) · empresa(40)
Trailer 400 393 brancos + sequencial(6)

Header determinístico: a data/hora de formação (AAAAMMDDHHMMSS) é injetável via o campo data_formacao — vazio usa o horário atual.

Nosso número (carteira ≠ 3): carteira(1) + nosso número(6) + 070, acrescido de módulo 10 e de módulo 11 (fatores 2..7, 11 - (soma % 11), mapa {10: 0, 11: 0}). Carteira 3 usa o nosso número com 12 posições, sem dígitos.

Códigos de juros/desconto: 50/52 quando há valor de mora/desconto, senão 00.