andersondanilo / CnabPHP

Projeto para criar arquivos de remessas e processar arquivos de retorno no formato CNAB, utilizado nos bancos geralmente para boleto bancário.
MIT License
328 stars 201 forks source link

Arquivo Remessa 240 CEF #64

Open NettoPassaro opened 7 years ago

NettoPassaro commented 7 years ago

Olá,

Estou tentando gerar um arquivo remessa para a Caixa, usando formato 240, mas quando uso o comando: $arquivo->save($pasta_destino.$nome_arquivo);

Ele sempre me retorna erro dizendo que o campo "codigo_cedente_dv" é nulo ou falso.

Já preenchi esse campo com um valor numérico válido, e mesmo assim ele continua me retornando o erro.

O que posso estar fazendo errado?

$codigo_banco = Cnab\Banco::CEF; $arquivo = new Cnab\Remessa\Cnab240\Arquivo($codigo_banco); $arquivo->configure(array( 'data_geracao' => new DateTime(), 'data_gravacao' => new DateTime(), 'nome_fantasia' => $empresa['razao'], 'razao_social' => $empresa['razao'], 'operacao' => '', 'numero_sequencial_arquivo' => 1, 'cnpj' => $empresa['cnpj_cpf'], 'banco' => $codigo_banco, 'agencia' => $primeiro['cod_agencia'], 'agencia_dv' => 0, 'conta' => $primeiro['nro_conta'], 'conta_dac' => $primeiro['dv'], 'codigo_cedente'=> $primeiro['cod_cedente'], 'codigo_cedente_dv' => 0,//$primeiro['cod_cedente_dv'], 'logradouro' => $empresa['logradouro']." ".$empresa['endereco'], 'numero' => $empresa['numero'], 'bairro' => $empresa['bairro'], 'cidade' => $empresa['cidade'], 'uf' => $empresa['cod_estado'], 'cep' => soNumero($empresa['cep']) ));

Fatal error: Uncaught exception 'InvalidArgumentException' with message 'codigo_cedente_dv dont be null or false' in /Sites/EasyWeb/vendor/andersondanilo/cnab_php/src/Cnab/Remessa/Cnab240/Arquivo.php:437 Stack trace: #0 /Sites/EasyWeb/vendor/andersondanilo/cnab_php/src/Cnab/Remessa/Cnab240/Arquivo.php(497): Cnab\Remessa\Cnab240\Arquivo->getText() #1 /Sites/EasyWeb/gera_arqremessa.php(746): Cnab\Remessa\Cnab240\Arquivo->save('temp/50712/RM20...') #2 {main} thrown in /Sites/EasyWeb/vendor/andersondanilo/cnab_php/src/Cnab/Remessa/Cnab240/Arquivo.php on line 437

pleiadess commented 7 years ago

Pq está fechado se o erro ocorro? O que eu não entendi?

PHP Fatal error: Uncaught exception 'InvalidArgumentException' with message 'codigo_cedente_dv dont be null or false' in

NettoPassaro commented 7 years ago

Olá @pleiadess ,

Eu não tinha fechado... ou se fechei, foi sem intenção.

Obrigado, já reabri.

Abraços.

pleiadess commented 7 years ago

Por fim quebrei a cabeça mais um pouco e resolvi o problema:

A confusão toda é pq o link https://github.com/andersondanilo/CnabPHP/wiki/Criando-um-arquivo-de-remessa mostra um exemplo pro Itau e para CEF precisamos de mais campos.

Usem isso:

`<?php include 'vendor/autoload.php';

$codigo_banco = Cnab\Banco::CEF; $arquivo = new Cnab\Remessa\Cnab240\Arquivo($codigo_banco); $arquivo->configure(array( 'data_geracao' => new DateTime(), 'data_gravacao' => new DateTime(), 'nome_fantasia' => 'Nome Fantasia da sua empresa', // seu nome de empresa 'razao_social' => 'Razão social da sua empresa', // sua razão social 'cnpj' => '111', // seu cnpj completo 'banco' => $codigo_banco, //código do banco 'logradouro' => 'Logradouro da Sua empresa', 'numero' => 'Número do endereço', 'bairro' => 'Bairro da sua empresa', 'cidade' => 'Cidade da sua empresa', 'uf' => 'Sigla da cidade, ex SP', 'cep' => 'CEP do endereço da sua cidade', 'agencia' => '1111', 'conta' => '22222', // número da conta 'conta_dac' => '2', // digito da conta 'codigo_cedente' => '123123', 'codigo_cedente_dv' => '4', 'agencia_dv' => '3', 'operacao' => '012', 'numero_sequencial_arquivo' => 1, ));

// você pode adicionar vários boletos em uma remessa $arquivo->insertDetalhe(array( 'codigo_ocorrencia' => 1, // 1 = Entrada de título, futuramente poderemos ter uma constante 'nosso_numero' => '1234567', 'numero_documento' => '1234567', 'carteira' => '109', 'modalidade_carteira' => '21', 'especie' => Cnab\Especie::CEF_DUPLICATA_DE_PRESTACAO_DE_SERVICOS, // Você pode consultar as especies Cnab\Especie 'aceite' => 'N', // "S" ou "N" 'registrado' => false, 'valor' => 100.39, // Valor do boleto 'instrucao1' => 2, // 1 = Protestar com (Prazo) dias, 2 = Devolver após (Prazo) dias, futuramente poderemos ter uma constante 'instrucao2' => 0, // preenchido com zeros 'sacado_nome' => 'Nome do cliente', // O Sacado é o cliente, preste atenção nos campos abaixo 'sacado_tipo' => 'cpf', //campo fixo, escreva 'cpf' (sim as letras cpf) se for pessoa fisica, cnpj se for pessoa juridica 'sacado_cpf' => '111.111.111-11', 'sacado_logradouro' => 'Logradouro do cliente', 'sacado_bairro' => 'Bairro do cliente', 'sacado_cep' => '11111222', // sem hífem 'sacado_cidade' => 'Cidade do cliente', 'sacado_uf' => 'SP', 'data_vencimento' => new DateTime('2014-06-08'), 'data_cadastro' => new DateTime('2014-06-01'), 'juros_de_um_dia' => 0.10, // Valor do juros de 1 dia' 'data_desconto' => new DateTime('2014-06-01'), 'valor_desconto' => 10.0, // Valor do desconto 'prazo' => 10, // prazo de dias para o cliente pagar após o vencimento 'taxa_de_permanencia' => '0', //00 = Acata Comissão por Dia (recomendável), 51 Acata Condições de Cadastramento na CAIXA 'mensagem' => 'Descrição do boleto', 'data_multa' => new DateTime('2014-06-09'), // data da multa 'valor_multa' => 10.0, // valor da multa ));

// para salvar $arquivo->save('cef.txt'); `

Alem disso a correção do luizjustino tem que ser aplicada:

Editem Arquivo.php e troquem null por 'sigcb' : public function __construct($codigo_banco, $layoutVersao = 'sigcb')

Fiz assim e finalmente consegui gerar o arquivo. Homologar é outra história.

murilosandiego commented 7 years ago

Não tem necessidade de editar o Arquivo.php. Você pode passar esse valor no construtor do arquivo $arquivo = new \Cnab\Remessa\Cnab240\Arquivo($codigoBanco, 'sigcb');

Fizemos assim e já foi homologado

danielcembranelli commented 7 years ago

@pleiadess você conseguiu homologar essa remessa?

murilosandiego commented 7 years ago

@danielcembranelli, nós conseguimos homologar

danielcembranelli commented 7 years ago

@murilosandiego o banco devolveu para: Segmento P: 222/223 – 30 dias; · Segmento Q: 137 tem que constar nome da cidade; · Segmento Q: 170 não pode ter sacador/avalista;

Teria como você esta enviando para eu olhar?

murilosandiego commented 7 years ago

$codigoBanco = \Cnab\Banco::CEF; $arquivo = new \Cnab\Remessa\Cnab240\Arquivo($codigoBanco, 'sigcb'); $arquivo->configure(array( 'data_geracao' => $hoje, 'data_gravacao' => $hoje, 'nome_fantasia' => $this->franchise->getName())), // seu nome de empresa 'razao_social' => $this->franchise->getName(), // sua razão social 'cnpj' => $this->franchise->getCnpj(), // seu cnpj completo 'banco' => $codigoBanco, //código do banco 'logradouro' => $this->franchise->getAddress()->getStreet())), 'numero' => $this->franchise->getAddress()->getNumber())), 'bairro' => $this->franchise->getAddress()->getDistrict())), 'cidade' => $this->franchise->getAddress()->getCity())), 'uf' => $this->franchise->getAddress()->getState())), 'cep' => $this->franchise->getAddress()->getZipCode(), 'agencia' => $accountBoleto->getAgency(), 'agencia_dv' => $accountBoleto->getAgencyDigits(), 'operacao' => $accountBoleto->getOperacao(), 'conta' => $accountBoleto->getNumber(), // número da conta 'conta_cedente_dv' => $accountBoleto->getDigits(), // digito da conta 'codigo_cedente' => $accountBoleto->getCodBeneficiario(), 'numero_sequencial_arquivo' => $sequencialRemessa));

$arquivo->insertDetalhe(array( 'modalidade_carteira' => '14', //14 (título Registrado emissão Beneficiário) 'aceite' => 'N', 'registrado' => 1, 'codigo_ocorrencia' => 1, // 1 = Entrada de título, futuramente poderemos ter uma constante 'nosso_numero' => $parcel->getNossoNumero(), 'numero_documento' => $parcel->getNossoNumero(), 'especie' => $accountBoleto->getEspecie(), // Você pode consultar as especies Cnab\Especie 'valor' => $parcel->getValue(), // Valor do boleto 'instrucao1' => 0, 'instrucao2' => 0, 'sacado_nome' => $client->getName(), 'sacado_tipo' => $tipo, //campo fixo, escreva 'cpf' (sim as letras cpf) 'sacado_cpf' => $documento, 'sacado_logradouro' => $client->getAddress()->getStreet()), 'sacado_bairro' => $client->getAddress()->getDistrict()), 'sacado_cep' => $client->getAddress()->getZipCode(), // sem hífem 'sacado_cidade' => $client->getAddress()->getCity()), 'sacado_uf' => $client->getAddress()->getState(), 'data_vencimento' => $parcel->getDueDate(), 'data_cadastro' => $parcel->getCreated(), 'juros_de_um_dia' => $this->calculaValorMoraMulta($parcel->getValue()), 'valor_desconto' => $parcel->getValueDiscountUntilDueDay(), // Valor do desconto 'data_desconto' => $parcel->getDueDate(), 'prazo' => 0, // prazo de dias para o cliente pagar após o vencimento 'taxa_de_permanencia' => '0', / 'mensagem' => ' ', 'data_multa' => $this->calculaDataMulta($parcel->getDueDate()), 'valor_multa' => $this->calculaValorMoraMulta($parcel->getValue()), 'baixar_apos_dias' => 120, 'identificacao_distribuicao' => 0 ), $this->codMovRemessa);

danielcembranelli commented 7 years ago

Muito obrigado!!!

pleiadess commented 7 years ago

Ainda não começamos o processo, mas até o final do mês estará homologado. ᐧ

2017-02-07 22:23 GMT-02:00 Daniel Cembranelli notifications@github.com:

@pleiadess https://github.com/pleiadess você conseguiu homologar essa remessa?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/andersondanilo/CnabPHP/issues/64#issuecomment-278189372, or mute the thread https://github.com/notifications/unsubscribe-auth/AC0c-3412UlT_jluKNTDHEySlb3cTEBjks5raQsDgaJpZM4KFSch .

alvarolordelo commented 6 years ago

@NettoPassaro eu estou criando a remessa e testando com o validador caixa, e esta acusando erro como se a linha não tivesse 240 posições. image estou usando a versão "andersondanilo/cnab_php": "1.3.*" Alguém mais fez esse teste com o validador caixa ? OBS: Vou marcar aqui pra garantir que o pessoal receba a notificação. @danielcembranelli @pleiadess

murilosandiego commented 6 years ago

@alvarolordelo, retira o caractere "~" da palavra Amanhã

alvarolordelo commented 6 years ago

@murilosandiego coloquei uma função na minha classe pra remover acentos e deu certo, obrigado! Há mais pontos a se modificar ? vocês tem algum grupo pra conversar ? slack ? Eu tenho algumas duvidas e sugestões, e gostaria de saber de vocês se podemos fazer um hangout etc.

alvarolordelo commented 6 years ago

@NettoPassaro ainda está com o problema ?

murilosandiego commented 6 years ago

@alvarolordelo, acredito que não há nada para modificar. Até então não temos nenhum grupo, mas é sempre bom trocarmos ideia.

alvarolordelo commented 6 years ago

+55 75 99169-0198 whats e phone. grupo do whats ou hangouts ?? o que o pessoal achar bom. tem outro repo bem mais completo sobre Cnab, que gostaria de conversar sobre.

murilosandiego commented 6 years ago

Por mim pode ser whats ou telegram, entre os dois prefiro telegram

murilosandiego commented 6 years ago

@alvarolordelo, está aparecendo uma foto de uma mulher no seu whats. É este número mesmo?

alvarolordelo commented 6 years ago

Errei o numero acima, trocar o ddd de 71 pra 75

JoaoTorres1 commented 6 years ago

Funcionou tranquilo aqui com a ajuda desses comentários. Essa semana realizo a homologação e volto aqui pra comentar.(volto mesmo! kkk)

rodrigopssilva commented 5 years ago

Valeu pessoal! A ajuda de vcs vale ouro! Tudo funcional aqui.

joaotorresmarques commented 5 years ago

Registro Tipo 1

Campo 07.1 - Nº da Versão do Layout do Lote - Posição 14 até 16 Preencher com "060" Registro tipo P

Campo 18.3P - Identificação da Entrega do Boleto - Posição 62 até 62 Encontrado: 2 Esperado: 0

Campo 27.3P - Código do Juros de Mora - Posição 118 até 118 Encontrado: "1" Esperado: "3"

Campo 28.3P e 293P - Juros - Posição 119 até 141 Preencher com Zeros

Campo 38.3P - Código para Baixa/Devolução - Posição 224 até 224 Encontrado: "0" Esperado: "1"

Campo 39.3P - Número de Dias para Baixa/Devolução - Posição 225 até 227 Preencher com "030"

Registro Q

Campo 17.3 Q, 18.3Q e 19.3Q - Dados do Sacador/ Avalista - Posição 154 até 209

Alguem me ajuda :(