02 — Roadmap¶
As fases 0 a 6 do plano original estão concluídas — núcleo, boleto, CNAB 240/400, PIX, contrato REST e o release 1.0. O que elas entregaram é descrito nas páginas do recurso, que são onde os números ficam atualizados:
| O que | Onde |
|---|---|
| Escopo e arquitetura | 00 — Visão geral · 01 — Arquitetura |
| Tudo o que é chamável | 20 — Superfície pública |
| Bancos e o que cada um suporta | 05 — Bancos suportados |
| Remessa e retorno | 06 — CNAB |
| Bolepix | 07 — PIX |
| Extrato e conciliação | 13 — OFX |
| Contrato de dados | 04 — Contrato REST |
| Como cada afirmação é verificada | 17 — Compatibilidade |
Esta página guarda o resto: o que ainda não existe e o que ficou de fora por decisão. Os dois estão aqui para que a ausência seja explícita, não uma surpresa para quem avalia o projeto.
O critério de entrada¶
Vale para todo layout novo — banco, remessa, retorno: manual oficial com exemplo numérico validável e comparação byte a byte contra um vetor de referência. Sem os dois, o layout não é portado. Enviar ao banco um arquivo montado a partir de lógica não verificada é pior do que não suportar o layout.
Em aberto¶
CNAB 444 (Itaú) — remessa e retorno¶
O 444 é uma variante do Itaú: o registro de 400 posições acrescido de 44 posições de mensagem a serem impressas no boleto. Não há suporte na PyCobrança, nem na geração nem na leitura.
A lacuna foi identificada comparando a cobertura com a
BrCobrança, que oferece 400 e 444 na remessa do Itaú —
é a única diferença de layout a favor dela; nos demais 14 bancos em comum a cobertura de remessa
é idêntica.
conta_corrente sem ajuste de largura em parte dos layouts CNAB 400¶
Alguns layouts concatenam conta_corrente cru no registro, em vez de ajustá-lo à largura do
campo. Qualquer tamanho diferente do previsto desloca todas as posições seguintes — o registro que
o layout montaria fica assim:
conta_corrente no Sicoob 400 |
Registro que seria montado | Hoje |
|---|---|---|
"1" |
393 posições | recusado |
"12345" |
397 posições | recusado |
"12345678" |
400 posições | emitido |
"123456789012" |
404 posições | recusado |
Estado atual — nenhum layout emite mais registro deslocado. A varredura de valores-limite
(tests/test_limites_campos.py) percorre agência, conta e nosso número em todos os tamanhos de 0
a 20 dígitos, nos 14 layouts de 400 e nos 7 de 240, e o resultado é sempre um dos dois: registro
de 400/240 posições, ou recusa com BoletoInvalido. O arquivo malformado deixou de ser uma saída
possível.
Três coisas mudaram desde a medição original:
- Os quatro layouts que saíam fora de 400/240 voltaram ao tamanho do formato. Banco de
Brasília, Banco do Nordeste, CrediSIS e o segmento P do Santander 240 saíam com 401, 402 e 241
posições com os dados da própria fixture, e cada módulo anotava isso como desvio do layout
do banco, com
tamanho_registro = None. Não era desvio de layout: erarjustestourando o campo, e oNonedesligava a única conferência que pegaria. Hoje os quatro conferem o tamanho (o BRB com(39, 400), pelo header DCB) e um teste exige que nenhuma remessa desligue a checagem. - Agência, conta e nosso número passaram por
campo_numericoonde o valor podia não caber, e a recusa nomeia o campo:conta_corrente: '999999999999' não cabe em 7 posições. - A conferência de tamanho guarda todos os layouts, inclusive os quatro que antes escapavam.
O que continua aberto: nos campos que ainda não passam por campo_numerico, a recusa vem da
conferência de tamanho, cuja mensagem informa o registro (registro 2 com 393 posições) sem
apontar o campo responsável. O arquivo errado não sai — a mensagem é que é pior do que poderia.
Fechar isso é uma varredura por vinte módulos, e cada campo precisa do layout do banco para saber
a largura; entra por banco, junto com o manual.
A orientação para quem integra está em 19 — Integração.
Fora de escopo, por decisão¶
Bancos que emitem o boleto do próprio lado¶
Os 19 bancos cobertos são aqueles cujo campo livre é reproduzível fora do banco. O corte é por carteira, não por banco — o Inter (077) é o exemplo: a carteira 110 entra, porque o cliente numera a partir de uma faixa recebida antes; a 112 fica de fora, porque ali o nosso número é atribuído pela instituição depois de receber a remessa. Não há o que calcular client-side numa carteira assim, e a PyCobrança recusa a 112 na validação em vez de gerar um título com um número que o banco nunca emitiu.
Banco novo entra sob demanda, pelo critério de entrada.
Cliente HTTP¶
A biblioteca transforma dados em arquivos e documentos; não fala rede. O que ela oferece para quem quer expor isso por HTTP é o contrato de dados — schemas, serializadores, o caminho de volta e um validador leve, em 04. Servidor, autenticação, fila e persistência são de quem expõe, e 19 — Integração lista essa fronteira item a item.
Retrocompatibilidade com bibliotecas anteriores¶
Não há camada de compatibilidade com pyboleto, BrCobrança ou qualquer outra API. A dívida de
manter dois vocabulários não se pagaria, e a paridade que importa — o que sai no arquivo e no
código de barras — é verificada contra os vetores dessas implementações, não copiando a
interface delas. Ver 17 — Compatibilidade.