Search by

Este projeto é um gerador de arquivos CNAB240 para pagamentos de DARF.

Package info

github.com/pereirapthiago/cnab240darf

pkg:composer/pereirapthiago/cnab240

Statistics

Installs: 4

Dependents: 0

Suggesters: 0

Stars: 0

v2.0.0 2026-07-29 12:58 UTC

This package is not auto-updated.

Last update: 2026-11-04 01:22:50 UTC


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/.