pereirapthiago / cnab240
Este projeto é um gerador de arquivos CNAB240 para pagamentos de DARF.
v2.0.0
2026-07-29 12:58 UTC
Requires
- php: >=8.2
Requires (Dev)
- phpunit/phpunit: ^11.3
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Este projeto é um gerador de arquivos CNAB240 para pagamentos de DARF.
Instalação
Antes de usar o projeto, é necessário instalar as dependências via Composer.
composer require pereirapthiago/cnab240
A partir da versão atual, a API é baseada em DTOs (objetos), não mais em arrays associativos. Os dados abaixo são meramente ilustrativos (fictícios).
Gerando uma remessa
require __DIR__ . '/vendor/autoload.php'; use Atlantic\Cnab240\Dtos\Remessa\DadosBancarioDto; use Atlantic\Cnab240\Dtos\Remessa\DadosEmpresaDto; use Atlantic\Cnab240\Dtos\Remessa\EmpresaDto; use Atlantic\Cnab240\Dtos\Remessa\TributoDto; use Atlantic\Cnab240\Factory\RemessaFactory; // Dados da empresa e da conta debitada $dadosEmpresa = new DadosEmpresaDto( empresa: new EmpresaDto( razaoSocial: 'EMPRESA EXEMPLO LTDA', cnpj: '11222333000181', endereco: 'RUA EXEMPLO', numero: '100', bairro: 'CENTRO', cep: '01001000', complemento: 'SALA 1', cidade: 'SAO PAULO', uf: 'SP', ), // Bradesco usa digitoAgencia/digitoConta/codigoConvenioBanco; o Itaú usa apenas agencia/conta/digito dadosBancario: new DadosBancarioDto( agencia: '1234', conta: '56789', digito: '0', ), ); $numeroArquivo = 1; // Tributos do lote. Valores em REAIS (float); datas como DateTimeInterface. // A conversão para centavos/DDMMAAAA e o tipo de inscrição (CPF/CNPJ) são // tratados internamente. Dados inválidos lançam ValidacaoException na construção. // // Campos de texto livre (razaoSocial, endereco, numero, complemento, cidade, // contribuinte) são truncados automaticamente no tamanho do layout — não é // preciso cortar antes de chamar as DTOs. Já identificadores (documento, CEP, // UF, agência, conta, referência) lançam exceção se excederem, pois cortá-los // produziria outro valor. // // ATENÇÃO: valorTotal deve ser exatamente valorPrincipal + valorJuros + valorMulta. // Se não fechar, a construção falha com ValidacaoException (o banco rejeitaria o // pagamento ou debitaria valor divergente das parcelas informadas). $dadosLote = [ new TributoDto( contribuinte: 'FULANO DE TAL', documento: '11122233396', // CPF/CNPJ (com ou sem máscara) periodoApuracao: new DateTimeImmutable('2024-06-30'), dataVencimento: new DateTimeImmutable('2024-08-30'), dataPagamento: new DateTimeImmutable('2024-09-30'), valorPrincipal: 2500.50, // R$ 2.500,50 valorJuros: 12.34, valorMulta: 7.66, valorTotal: 2520.50, // 2500,50 + 12,34 + 7,66 codigoReceita: '0190', referencia: '01', ), ]; // 'itau' ou 'bradesco' $fabrica = RemessaFactory::create('itau'); $file = $fabrica->generateFile($dadosEmpresa, $numeroArquivo, $dadosLote); file_put_contents('CNAB2401.rem', $file);
Lendo um arquivo de retorno (.ret)
use Atlantic\Cnab240\Factory\RemessaReaderFactory; $retorno = RemessaReaderFactory::create('bradesco')->ler('arquivo.ret'); echo $retorno->tipoArquivo; // 'retorno' echo $retorno->empresa->nome; foreach ($retorno->pagamentos as $p) { echo $p->contribuinte; echo $p->numeroAtribuidoEmpresa; // nº do documento atribuído pela empresa echo $p->valorPagamento; // em reais (float) echo $p->status; // efetivado | agendado | rejeitado | cancelado | excluido echo $p->primeiraOcorrencia()?->descricao; } $retorno->pagamentosComSucesso(); $retorno->pagamentosRejeitados();
Exemplos completos e executáveis em exemplo/.