Validação de campos e contrato de erro
A Cobranca-API valida os dados na geração (boleto e remessa CNAB) e devolve
os problemas como uma lista — uma entrada por campo violado. A validação em
si é da engine PyCobrança (doc
14-validacao-campos); a API apenas repassa os erros sem colapsá-los.
Requer PyCobrança ≥ 1.0.1: foi nela que
BoletoInvalidoganhou o atributo.erros(lista). Em 1.0.0 a validação existia, mas vinha como um texto único.
Contrato de erro
| Situação | HTTP | Corpo |
|---|---|---|
| Dados de boleto/pagamento inválidos | 400 | { "validation_errors": [ "…", "…" ] } |
| Banco não suportado | 400 | { "validation_errors": ["Banco não suportado: …"] } |
Arquivo OFX inválido (/api/ofx/parse) |
400 | { "erro": "Arquivo OFX inválido", "validation_errors": [...] } |
Arquivo de retorno CNAB inválido (/api/retorno) |
400 | { "error": "…", "details": [...] } |
validation_errors é sempre uma lista — mapeie cada item ao campo do seu
formulário. Um OFX válido sem transações não é erro (extrato vazio, 201).
// GET /api/boleto/validate (Itaú, 3 violações simultâneas)
{
"valid": false,
"validation_errors": [
"carteira '999' não suportada (use uma de: 104, 109, 112, 115, 175, 177, 188)",
"agência deve ter no máximo 4 dígitos",
"conta deve ter no máximo 5 dígitos"
]
}
Regras por banco (boleto)
Campos de agência/conta/convênio/nosso número são numéricos (a máscara é descartada; um valor sem nenhum dígito falha no mínimo). A carteira é um conjunto fechado por banco. Tamanhos abaixo são em dígitos (mín.–máx.).
| Banco (cód) | Agência | Conta | Convênio | Carteiras válidas | Nosso nº | Especiais / obrigatórios |
|---|---|---|---|---|---|---|
| Itaú (341) | 1–4 | 1–5 | — | 104, 109, 112, 115, 175, 177, 188 | 1–8 (+DAC) | — |
| Banco do Brasil (001) | 0–4¹ | 0–8¹ | 4 / 6 / 7 | 11, 12, 15, 16, 17, 18, 31, 51 | conv7→10 · conv6→5 · conv4→7 | nosso nº e layout dependem do convênio |
| Bradesco (237) | 1–4 | 1–7 | — | 03, 06, 09, 19, 21, 22, 25, 26 | 1–11 (+DV; pode ser P) |
— |
| Caixa (104) | 4² | —³ | 1–6 (cód. benef.) | 14, 24 | 1–15 | 2 DVs (benef. + campo livre) |
| Santander (033) | —³ | fallback⁴ | 1–7 (cód. cedente) | 101, 102, 121 | 1–12 (+DV) | cedente = convênio ou conta |
| Sicoob (756) | 1–4 | —³ | 0–7 (ou nº contrato) | 1, 3, 9, 09 | 1–7 (+DV) | numero_contrato na carteira 9 |
| Sicredi (748) | 1–4 | 1–5 (convênio) | 1–5 | 1, 3 | 1–5 (+ano+byte+DV) | byte_idt obrig.; posto; data_documento obrig. |
| Banrisul (041) | 1–4 | —³ | 1–7 | 1, 2 | 1–8 (+duplo dígito) | digito_convenio (impressão) |
| Ailos (085) | —³ | 1–7 (+DV) | 1–6 | 01, 1 | 1–9 | — |
| Unicred (136) | 1–4 | 1–9 (+digito_conta) |
— | 21 | 1–10 (+DV) | digito_conta obrig. |
| Citibank (745) | 1–4 | —³ | 1–10 | 3 | 1–11 (+DV) | portfolio |
| CrediSIS (097) | 1–4 | —³ | 1–6 | 18 | 1–6 | cedente_documento obrig. |
| BRB / Brasília (070) | 1–3 | 1–7 | — | 1, 2 | 1–6 (+duplo dígito) | incremento obrig. |
| Banco do Nordeste (004) | 1–4 | 1–7 (+digito_conta) |
— | 21, 31, 41, 51 | 1–7 (+DV) | digito_conta |
| Banestes (021) | (impressão) | 1–10 (+digito_conta) |
— | 11, 13 | 1–8 (+DV duplo) | digito_conta |
| C6 Bank (336) | 4 | —³ | 1–12 | 10, 20 | 1–10 (+DV; pode ser P) |
indicador conforme carteira |
| HSBC (399) | 4 | 1–7 | — | CNR, CSB (alfanum.) | 1–13 | CNR: data_vencimento obrig. |
| Safra (422) | 1–4 (+digito_agencia) |
1–8 (+digito_conta) |
— | 1, 2 | 1–8 (+DV) | digito_agencia, digito_conta obrig. |
¹BB só usa agência/conta nos convênios 4 e 6. ²Caixa: agência só na impressão.
³Não entra no campo livre (o beneficiário vem do convênio). ⁴Santander usa
convenio ou, na falta, conta.
Campos comuns
| Campo | Tipo | Regra |
|---|---|---|
valor |
número | > 0 |
data_vencimento |
data (YYYY-MM-DD) |
obrigatória |
cedente |
texto | obrigatório |
documento_cedente / sacado_documento |
texto | se informado, CPF, CNPJ numérico ou CNPJ alfanumérico válido |
carteira |
texto | deve pertencer ao conjunto do banco |
CNPJ alfanumérico (formato 2026): suportado. A engine valida o DV pelo algoritmo oficial (valor do caractere =
ord(c) − 48) e preserva as letras na geração do código de barras e do CNAB. DV inválido — alfanumérico ou numérico — é recusado. Requer a engine com suporte alfanumérico.
Regras da remessa CNAB (pagamento)
Além dos campos do sacado, a validação cobre a coerência dos encargos
(modelo de trio código/tipo → valor → data). Detalhe em
encargos.md e nas posições por banco na doc 06-cnab da engine.
| Regra | Erro |
|---|---|
nosso_numero, documento_sacado, nome_sacado, endereco_sacado, cep_sacado, data_vencimento ausentes |
campo obrigatório ausente: <campo> |
valor ≤ 0 |
valor deve ser positivo |
tipo_mora="1" sem valor_mora |
tipo_mora="1" (valor ao dia) exige valor_mora > 0 |
tipo_mora="2" sem percentual_mora |
tipo_mora="2" (taxa mensal) exige percentual_mora > 0 |
codigo_multa ≠ 0 sem percentual_multa |
codigo_multa != 0 exige percentual_multa > 0 |
| desconto indicado sem valor/data | Nº desconto indicado (cód. != 0) exige valor > 0 / exige data |
uf_sacado ≠ 2 letras |
uf_sacado deve ter 2 letras |
cep_sacado > 8 dígitos |
cep_sacado deve ter no máximo 8 dígitos |