Atualmente gerando apenas algumas modalidades de CNAB 240 do Itaú.
ArquivoCNAB240
- Classe: Define um arquivo de remessa, que pode conter diversos lotes de operações bancárias. É necessário especificar um template de arquivo de remessa na criação.FileTemplate240
- Enum: Define os templates de arquivos de remessa prontos.LoteCNAB240
- Classe: Define um lote de registros de operações. É necessário especificar um template de lote na criação.BatchTemplate240
- Enum: Define os templates de lotes prontos.RegistroCNAB240
- Classe: Define um registro de operação bancária. É necessário especificar um template de registro na criação.RecordTemplate240
- Enum: Define os templates de registros prontos.
Como gerar um CNAB em 10 passos:
- Crie um
ArquivoCNAB240
. Altere o que for necessário com os dados da empresa. - Pegue os dados de um cliente e os seus pagamentos.
- Separe os pagamentos por tipo de operação. Vai depender da especificação do banco e do CNAB em uso. Por exemplo para um CNAB 240 Itaú, TEDs vão para um grupo e boletos vão para outro. Cada grupo vai para um lote diferente.
- Crie um
LoteCNAB240
para cada grupo de operações do cliente. Use os templates adequados e carregue noLoteCNAB240
os dados pertinentes. - Crie um
RegistroCNAB240
para cada pagamento/operação. Atenção para os tipos e use os templates adequados. - Carregue os dados do cliente e de seus pagamentos nos
RegistroCNAB240
, de acordo com cada tipo de pagamento. - Usando
LoteCNAB240.add(registro)
adicione os registros nos lotes adequados. - Usando
ArquivoCNAB240.add(lote)
adiciona todos os lotes do cliente no arquivo de remessa. - Repita os passos de 2 a 8 para todos os clientes.
- Gere a string final contendo o arquivo CNAB completo com
ArquivoCNAB240.make()
. Agora salve ou envie seu CNAB.
Exemplo:
from brbankingcnab.cnab240 import ArquivoCNAB240, LoteCNAB240, RegistroCNAB240,
BatchTemplate240, FileTemplate240, RecordTemplate240
... # Qualquer coisa que vem antes da criação do CNAB.
clientes = ... # Lista de clientes aqui e pagamentos em clientes[i]['pagamentos'] .
arquivo_cnab = ArquivoCNAB240(FileTemplate240.FileItau)
arquivo_cnab.header['...'] = ... # Altere o header no que for necessário.
arquivo_cnab.trailer['...'] = ... # Altere o trailer no que for necessário.
for cliente in clientes:
pagamentos_TED = ... # Pagametnos tipo TED.
lote_ted = LoteCNAB240(BatchTemplate240.Itau_SegA_Cheq_OP_DOC_TED_PIX_CredCC)
lote_ted.header['...'] = ... # Altere o header no que for necessário.
lote_ted.trailer['...'] = ... # Altere o trailer no que for necessário.
for ted in pagamentos_TED:
registro = RegistroCNAB240(RecordTemplate240.Itau_SegA_Cheq_OP_DOC_TED_PIX_CredCC)
registro.content['...'] = ... # Altere os campos que forem necessários.
lote_ted.add(registro)
arquivo_cnab.add(lote_ted)
pagamentos_blt = ... # Pagametnos tipo boleto.
lote_blt = LoteCNAB240(BatchTemplate240.Itau_SegA_Cheq_OP_DOC_TED_PIX_CredCC)
lote_blt.header['...'] = ... # Altere o header no que for necessário.
lote_blt.trailer['...'] = ... # Altere o trailer no que for necessário.
for blt in pagamentos_blt:
registro = RegistroCNAB240(RecordTemplate240.Itau_Boleto_PIXqrcode)
registro.content['...'] = ... # Altere os campos que forem necessários.
lote_blt.add(registro)
arquivo_cnab.add(lote_ted)
# O resultado é a string do arquivo de remessa CNAB 240.
final_cnab_string = arquivo_cnab.make()
Os templates são JSONs e estão em cnab/templates. Eles não são apenas para uso interno da lib, mas possúem documentação de todos os campos dos blocos CNAB implementados. Na dúvida, consulte o JSON do template que for usar.
Campos com valor inicial null
nos JSON dos templates são necessários e não possúem valor default válido.
Se precisar visualizar o estado do CNAB sendo montado, basta dar um print(cnab)
. Isso é válido para qualquer bloco CNAB. Campos com valor ausente serão preenchidos com ?
.
Ao chamar o método make()
de qualquer bloco CNAB, se houver algum campo vazio ou com valor inválido, ocorrerá um erro do tipo CNABInvalidValueError
.