Sicoob (756)¶
Manual oficial de referência: Manual de Layout Sicoob — Cobrança (CNAB 400 e CNAB 240).
Fontes e portal (validador CNAB Sicoob) em fontes-oficiais.md — os PDFs
não são redistribuídos, apenas citados.
Implementação: pycobranca/bancos/sicoob.py ·
Dígito do banco: 0 · PIX: ✅
Logo empacotado: disponível via logo_do_banco("756") — a marca é do banco (uso nominativo); ver render/logos/NOTICE.md.
Resumo¶
DV do nosso número com fatores fixos 3-1-9-7 (da esquerda para a direita).
Campo livre (posições 20–44 do código de barras)¶
| Posições | Tam. | Conteúdo |
|---|---|---|
| 1 | 1 | Carteira — o dígito significativo (09 grava 9, não 0) |
| 2–5 | 4 | Agência |
| 6–7 | 2 | Variação (01 se ausente) |
| 8–14 | 7 | Convênio (ou número do contrato na carteira 9) |
| 15–21 | 7 | Nosso número |
| 22 | 1 | DV do nosso número (módulo 11, fatores 3-1-9-7) |
| 23–25 | 3 | Quantidade de parcelas (001 se ausente) |
Dígitos verificadores¶
- DV do nosso número — módulo 11 sobre
agência(4) + identificador(10) + nosso número(7), fatores fixos3, 1, 9, 7aplicados da esquerda para a direita,DV = 11 - (soma % 11); resultados 10 e 11 viram 0.
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 |
|---|---|
| Agência | 1–4 dígitos |
| Convênio | até 7 dígitos (opcional) |
| Número do contrato | até 7 dígitos (opcional) |
| Variação (modalidade) | até 2 dígitos, 01 quando ausente |
| Quantidade de parcelas | até 3 dígitos, 001 quando ausente |
| Nosso número | 1–7 dígitos |
| Carteira | conjunto: 1, 3, 9, 09 — 9 e 09 são a mesma carteira e geram o mesmo boleto |
Formatos de exibição¶
- Nosso número:
nosso_numero(7)DV→12345673 - Agência/conta:
agência / conta(formato base deBancoBase)
Exemplo (saída da engine)¶
Entrada: agência 1234, convênio 1234567, variação 01, nosso número 1234567, carteira
1, R$ 127,50, vencimento 15/08/2026.
Campo livre: 1123401123456712345673001
Código de barras: 75692153900000127501123401123456712345673001
Linha digitável: 75691.12340 01123.456715 23456.730011 2 15390000012750
Remessa CNAB 400 — implementada e validada byte a byte ✓¶
Implementação: pycobranca/cnab/cnab400/sicoob.py ·
fixture: tests/fixtures/remessa_sicoob_cnab400.rem
Estrutura do arquivo (registros de 400 posições, CRLF, maiúsculas sem acentos):
| Registro | Conteúdo principal |
|---|---|
Header (01REMESSA01COBRANCA) |
info da conta (agência + DV agência + convênio 9) · empresa(30) · 756 + BANCOOBCED · data (DDMMAA) · sequencial(7) |
| Detalhe (tipo 1) | tipo/CPF-CNPJ da empresa · agência + DV + conta + dígito · uso da empresa(25) · nosso número(12) + parcela(2) · modalidade da carteira + carteira(2) · ocorrência · nº documento(10) · vencimento (DDMMAA) · valor(13) · 756 + agência + DV · espécie · emissão · valor de mora(6)/multa(6) · distribuição do boleto · desconto/IOF/abatimento · sacado (doc/nome 40/endereço 37/bairro 15/CEP/cidade 15/UF) · sequencial(6) |
| Trailer (tipo 9) | 9 + 393 zeros + sequencial(6) |
DV da agência: módulo 11, mapa {10: "0"}.
Remessa CNAB 240 — implementada e validada byte a byte ✓¶
Implementação: pycobranca/cnab/cnab240/sicoob.py ·
fixture: tests/fixtures/remessa_sicoob_cnab240.rem
Estrutura em lotes (registros de 240 posições, CRLF, maiúsculas sem acentos). Versão do
layout de arquivo 081, de lote 040. forma_cadastramento = 0.
| Registro | Conteúdo principal |
|---|---|
| Header de Arquivo (0) | 756 · CPF/CNPJ · convênio em brancos(20) · info da conta (agência 5 + DV agência + conta 12 + DV conta) · empresa(30) · SICOOB · data + hora + sequencial · versão 081 |
| Header de Lote (1) | serviço 01 · convênio do lote em brancos · info da conta · empresa · versão 040 |
| Segmento P | ocorrência · agência 5 + DV · conta 12 + DV · nosso número(10) + parcela + modalidade + tipo de formulário · vencimento (DDMMAAAA) · valor(15) · mora/desconto/IOF/abatimento · protesto |
| Segmento Q | dados do sacado (tipo/doc 15/nome 40/endereço 40/bairro 15/CEP/cidade 15/UF) · avalista |
| Segmento R | multa e data da multa (variante Sicoob, sempre emitido) |
| Trailer de Lote (5) | contadores + totais de títulos/valores |
| Trailer de Arquivo (9) | contadores de lotes/registros (variante Sicoob com 0*6 + brancos) |
DVs (módulo 11): agência {10: "0"}; conta {10: "0"}.
Remessa CNAB 400 — auditada contra o layout oficial¶
As 54 posições do registro de detalhe são conferidas uma a uma contra a aba
03.Remessa - CNAB400 do Layout_Cobranca_CNAB400.xls (portal do banco, 19/05/2025), em
test_remessa_sicoob_posicoes_do_layout_oficial — um caso de teste por campo, com a máscara
que a planilha declara. A auditoria encontrou dois problemas que a paridade byte a byte não
pegava, porque a implementação de referência os reproduzia igual:
1. As posições 111–120 são X(10), e levavam zeros à esquerda.
O campo é Seu Número, alfanumérico. Preencher com zero um valor que tem letras produz outro
valor: DOC0001 virava 000DOC0001 — e é 000DOC0001 que o banco devolve no retorno. Quem
guardou DOC0001 não reencontra o título ao conciliar por esse campo.
Valor só de dígitos continua alinhado à direita com zeros: ali as duas convenções coincidem, e o comportamento anterior se mantém.
Por isso remessa_sicoob_cnab400.rem deixou de ser vetor de paridade. Onde manual e
implementação de referência discordam, vale o manual. A diferença é só naquelas dez
posições — 20 bytes nos dois registros de detalhe, nada mais se moveu.
2. Não existe "tipo de formulário" no layout 400.
O RemessaSicoob400 aceitava tipo_formulario e nunca o gravava: quem o informava mudava
nada. É campo do CNAB 240, onde segue em uso. Foi removido — aceitar um parâmetro inerte é
pior que recusá-lo.
modalidade_carteira aponta para o campo vizinho
Ela grava a posição 106, que a planilha chama de Tipo de Emissão (1 cooperativa,
2 cliente). Quem ocupa Carteira/Modalidade (107–108) é carteira. O nome ficou por
compatibilidade; a documentação diz o que ele faz.
A planilha oficial tem um erro de posição
O campo 53 declara início 394, fim 395 e tamanho 1 — os três não fecham entre si, e o campo 54 começa em 395. A transcrição segue o tamanho declarado (394–394), e um teste exige que a tabela cubra 1 a 400 sem buraco nem sobreposição.
Retorno CNAB 400 — implementado¶
Layout: LAYOUTS_400["756"] em
pycobranca/cnab/retorno/cnab400.py ·
fixture: tests/fixtures/retorno_sicoob_cnab400.ret
Conforme a aba 04.Retorno - CNAB400 do Layout_Cobranca_CNAB400.xls publicado no portal do
banco (19/05/2025). Dois desvios grandes em relação ao layout de reserva:
| Campo | Sicoob | Layout de reserva (Itaú) |
|---|---|---|
| Nosso número | 063–073 + DV em 074 (12) | 063–070 (8) |
| Data de crédito | 176–181 | 296–301 |
| Carteira/modalidade | 107–108 (duas posições) | 108 (uma) |
| Valor da tarifa | 182–188 (sete) | 176–188 (treze) |
| Motivo | 081–082 (código de baixa/recusa) | 378–385 |
Sem a entrada 756, o nosso número saía truncado em oito posições — três dígitos e o DV
perdidos — e a data de crédito vinha de 296–301, devolvendo zeros: indistinguível de "ainda não
creditado". test_sem_o_layout_proprio_o_sicoob_perdia_o_dv_e_a_data_de_credito mede as duas.
Correção de um diagnóstico anterior
A documentação chegou a registrar que o Sicoob não teria CNAB 400 de cobrança, porque o validador do banco só oferece CNAB240. Era inferência a partir de uma ausência, não fonte: o portal publica o layout 400 com data de 2025. O validador não aceitar o 400 e o layout continuar publicado são fatos compatíveis — e só o segundo diz o que o banco emite.
A fixture foi montada a partir do XLS
Não há arquivo de retorno 400 real do Sicoob aqui. A fixture prova o mapeamento, não o arquivo que o banco emite. Um retorno real fecharia essa lacuna.