Pular para conteúdo

Sicredi (748)

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

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

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

Resumo

Nosso número com ano (AA) e byte identificador (1=agência, 2-9=beneficiário).

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

Posições Tam. Conteúdo
1 1 Carteira
2 1 1 (fixo)
3–4 2 Ano (2 últimos dígitos da data do documento)
5 1 Byte de identificação (1=agência, 2–9=beneficiário)
6–10 5 Nosso número
11 1 DV do nosso número (módulo 11)
12–15 4 Agência
16–17 2 Posto
18–22 5 Convênio (código do beneficiário)
23–24 2 10 (constante)
25 1 DV do campo livre (módulo 11)

Dígitos verificadores

  • DV do nosso número — módulo 11 sobre agência(4) + posto(2) + convênio(5) + ano(2) + byte(1) + nosso número(5) (pesos 9..2 cíclicos, direita→esquerda), DV = soma % 11; resultados 10 e 11 viram 0.
  • DV do campo livre — módulo 11 sobre as 24 primeiras posições do campo livre, mesmos parâmetros.

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
Posto até 2 dígitos (opcional)
Convênio 1–5 dígitos
Byte de identificação 1 dígito, obrigatório (1 = agência, 2–9 = beneficiário)
Nosso número 1–5 dígitos
Carteira conjunto: 1, 3

Formatos de exibição

  • Nosso número: AA/Bnnnnn-DV (AA = ano, B = byte identificador) → 26/212345-8
  • Agência/conta: agência(4).posto(2).convênio(5) → 0165.07.12345

Exemplo (saída da engine)

Entrada: agência 0123, posto 04, convênio 12345, byte identificador 2, nosso número 12345, carteira 1, data do documento e vencimento 15/08/2026, R$ 127,50.

Campo livre:      1126212345001230412345109
Código de barras: 74891153900000127501126212345001230412345109
Linha digitável:  74891.12628 12345.001239 04123.451090 1 15390000012750

Remessa CNAB 240 — implementada e validada byte a byte ✓

Implementação: pycobranca/cnab/cnab240/sicredi.py · fixture: tests/fixtures/remessa_sicredi_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. Densidade 01600, espécie 03, forma_cadastramento = 1, tipo_documento = 1.

Registro Conteúdo principal
Header de Arquivo (0) 748 · CPF/CNPJ · convênio em brancos(20) · info da conta (agência 5 + DV branco + conta 12 + dígito) · empresa(30) · SICREDI · 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 · conta 12 + dígito · nosso número (ljust 20) · vencimento (DDMMAAAA) · valor(15) · espécie 03 · mora/desconto (1)/IOF/abatimento · protesto · baixa (1 / 060)
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
Trailer de Lote (5) contadores (complemento com 4 blocos de 23 zeros)
Trailer de Arquivo (9) contadores de lotes/registros (variante Sicredi com 0*6 + brancos)

Observações: data_mora usa vencimento + 1 dia; código de desconto e de baixa fixos em 1; agência sem DV (branco). O CNAB 240 da Unicred (136) herda este mesmo layout — ver 136-unicred.md.

Retorno CNAB 400 — implementado

Layout: LAYOUTS_400["748"] em pycobranca/cnab/retorno/cnab400.py · fixture: tests/fixtures/retorno/externos/sicredi_cnab400.ret

Conforme a seção 9.2 do Manual CNAB 400 v2.4 (26/09/2022). O desvio decisivo:

Campo Sicredi Layout de reserva (Itaú)
Nosso número 048–062 (15 posições) 063–070 (8 posições)
Espécie do documento 175 (uma letra) 174–175 (dois dígitos)
Motivos da ocorrência 319–328 378–385
Data prevista de crédito 329–336 (AAAAMMDD) 296–301 (DDMMAA)

As posições 063–108 do Sicredi são filler. Sem a entrada 748, o parser lia ali e devolvia 00000000 — zeros lidos de espaço em branco, com toda a aparência de um nosso número válido. Uma conciliação compararia isso contra os títulos emitidos, não casaria nenhum, e não diria por quê.

Isso está medido sobre um arquivo de retorno real do banco, não sobre fixture construída aqui: test_sem_o_layout_proprio_o_sicredi_devolvia_zeros_de_filler lê o mesmo arquivo pelos dois caminhos e compara. É a evidência mais forte do projeto — manual oficial mais arquivo verdadeiro.

A data de crédito fica crua, em oito posições

O campo 329–336 vem em AAAAMMDD, enquanto o resto do layout usa DDMMAA em seis. data_credito entrega o que veio: converter aqui esconderia a diferença de quem lê.