Pular para conteúdo

Caixa Econômica Federal (104) — SIGCB

Manuais oficiais de referência: Manual de Boleto de Cobrança CAIXA — SIGCB (2020) · Manual de Leiaute CNAB 240 · Manual de Leiaute CNAB 400. Fontes e portal em fontes-oficiais.md — os PDFs não são redistribuídos, apenas citados.

Implementação: pycobranca/bancos/caixa.py · Dígito do banco: 0 · PIX: ✅

Logo empacotado: disponível via logo_do_banco("104") — a marca é do banco (uso nominativo); ver render/logos/NOTICE.md.

Resumo

SIGCB: nosso número de 17 posições intercalado no campo livre; dois DVs (beneficiário e campo livre) por módulo 11 Caixa.

Nosso número (17 posições)

modalidade(2) + sequencial(15), onde a modalidade combina tipo de cobrança (1º dígito: 1 registrada, 2 sem registro) e identificador de emissão (2º dígito: 4 beneficiário). Modalidades usuais: 14 e 24. Na PyCobrança a modalidade é informada no campo carteira.

Campo livre (25 posições) — intercalação SIGCB

Posições Tam. Conteúdo
1–6 6 Código do beneficiário (convênio)
7 1 DV do código do beneficiário (módulo 11)
8–10 3 Nosso número — posições 3 a 5
11 1 Tipo de cobrança (1º dígito do nosso número)
12–14 3 Nosso número — posições 6 a 8
15 1 Identificador de emissão (2º dígito do nosso número)
16–24 9 Nosso número — posições 9 a 17
25 1 DV do campo livre (módulo 11 das 24 posições)

Módulo 11 Caixa

Pesos 2..9; DV = 11 - (soma % 11); DV > 9 vira 0 (mapeamento {10, 11} → 0 do manual).

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
Convênio 1–6 dígitos
Nosso número 1–15 dígitos
Carteira conjunto: 14, 24

Formatos de exibição — corrigido na validação cruzada

O manual SIGCB define o nosso número impresso com 17 posições + DV: 14000000000000123-1. A implementação inicial da PyCobrança omitia o DV; a divergência foi detectada na comparação com os vetores de referência e arbitrada pelo manual oficial (o vetor de referência estava correta) — corrigida em nosso_numero_formatado().

Exemplo validado (por vetores de referência ✓)

Entrada: código do beneficiário 123456, modalidade 14, nosso número 123, R$ 127,50, vencimento 15/08/2026.

Campo livre:      1234560000100040000001230
Código de barras: 10491153900000127501234560000100040000001230
Linha digitável:  10491.23456 60000.100044 00000.012302 1 15390000012750
Nosso número:     14000000000000123-1

Remessa CNAB 240 — implementada e validada byte a byte ✓

Implementação: pycobranca/cnab/cnab240/caixa.py · fixture: tests/fixtures/remessa_caixa_cnab240.rem

A Caixa opera apenas com CNAB 240 (SIGCB). Estrutura em lotes (registros de 240 posições, CRLF, maiúsculas sem acentos). Versão do layout de arquivo 050, de lote 030.

Registro Conteúdo principal
Header de Arquivo (0) 104 · CPF/CNPJ · convênio zerado(20) · info da conta (agência 5 + DV + convênio 6 + zeros) · empresa(30) · CAIXA ECONOMICA FEDERAL · data + hora + sequencial · versão 050 · versão do aplicativo(4) · uso da empresa REMESSA-PRODUCAO
Header de Lote (1) serviço 01 (exclusivo_servico = 00) · convênio do lote (convênio 6 + zeros) · info da conta · empresa · versão 030
Segmento P ocorrência · agência 5 + DV · convênio(6) · modalidade da carteira(2, ex. 14) + nosso número(15) · emissão 2 · vencimento (DDMMAAAA) · valor(15) · espécie 99 · mora/desconto/IOF/abatimento · protesto · baixa (código/dias derivados do protesto)
Segmento Q dados do sacado (tipo/doc 15/nome 40/endereço 40/bairro 15/CEP/cidade 15/UF) · avalista
Segmento R multa (quando houver), com data da multa = vencimento + 1 dia
Trailers de Lote (5) e de Arquivo (9) contadores

data_multa/data_mora usam vencimento + 1 dia; a baixa vira 1/120 quando o código de protesto é 3, senão 2/000.