openboleto / OpenCnabPHP

Biblioteca multibanco para geração e leitura de arquivos Cnab240 e Cna400 de remessa e retorno
MIT License
192 stars 118 forks source link

Homologação de arquivo remessa SANTANDER CNAB 240 #65

Closed seventechsolucoes closed 6 years ago

seventechsolucoes commented 6 years ago

Não sei se aqui é o lugar certo p/ pedir ajudar mas se puderem me ajudar eu agradeço. Fiz o envio do arquivo remessa p/ banco p/ homologação e me retornaram às seguintes ocorrências. Estou usando o OpenBoleto p/ geração de boletos.

01 - Campo inválido na linha 3. Tipo de registro [Detalhe - Segmento P]. O campo [Identificação do título no Banco], posição 45 a 57, Digito verificador inserido: 4, Digito verificador valido: 0 [Digito verificador do nosso número é invalido.]. Valor atual [0000000000404].

02 - Campo inválido na linha 3. Tipo de registro [Detalhe - Segmento P]. O campo [Código do juros de mora], posição 118 a 118, deve ser [1] Valor por dia - Informar no campo o valor/dia a mora a ser cobrada. ou [2] Taxa Mensal - Informar no campo taxa mensal o percentual a ser aplicado sobre valor do titulo que será calculado por dia de atraso. ou [3] Isento ou [4] Utilizar comissão permanência do Banco por dia de atraso ou [5] Tolerância valor por dia (cobrar juros a partir de) ou [6] Tolerância taxa mensal (cobrar juros a partir de). Valor atual [0].

03 - Campo inválido na linha 5. Tipo de registro [Detalhe - Segmento P]. O campo [Identificação do título no Banco], posição 45 a 57, Digito verificador inserido: 5, Digito verificador valido: 0 [Digito verificador do nosso número é invalido.]. Valor atual [0000000000405].

04 - Campo inválido na linha 5. Tipo de registro [Detalhe - Segmento P]. O campo [Código do juros de mora], posição 118 a 118, deve ser [1] Valor por dia - Informar no campo o valor/dia a mora a ser cobrada. ou [2] Taxa Mensal - Informar no campo taxa mensal o percentual a ser aplicado sobre valor do titulo que será calculado por dia de atraso. ou [3] Isento ou [4] Utilizar comissão permanência do Banco por dia de atraso ou [5] Tolerância valor por dia (cobrar juros a partir de) ou [6] Tolerância taxa mensal (cobrar juros a partir de). Valor atual [0].

05 - Campo inválido na linha 7. Tipo de registro [Detalhe - Segmento P]. O campo [Identificação do título no Banco], posição 45 a 57, Digito verificador inserido: 6, Digito verificador valido: 0 [Digito verificador do nosso número é invalido.]. Valor atual [0000000000406].

06 - Campo inválido na linha 7. Tipo de registro [Detalhe - Segmento P]. O campo [Código do juros de mora], posição 118 a 118, deve ser [1] Valor por dia - Informar no campo o valor/dia a mora a ser cobrada. ou [2] Taxa Mensal - Informar no campo taxa mensal o percentual a ser aplicado sobre valor do titulo que será calculado por dia de atraso. ou [3] Isento ou [4] Utilizar comissão permanência do Banco por dia de atraso ou [5] Tolerância valor por dia (cobrar juros a partir de) ou [6] Tolerância taxa mensal (cobrar juros a partir de). Valor atual [0].

seventechsolucoes commented 6 years ago

Alguém pode me dar um ajuda ? Já tentei corrigir essas ocorrências e o banco está recusando o arquivo de remessa do Santander. Já foi recusado 3 vezes e cada vez retorna com ocorrências diferentes

Rctnet commented 6 years ago

Posta seu arquivo aqui para vermos

gildonei commented 6 years ago

Olá @guilherme00 realizamos um ajuste no arquivo Registro3P para que o dígito do nosso número seja calculado automaticamente e com isso alguns dos erros que você mencionou deverão ser corrigidos.

Os demais sobre multas e juros são parâmetros que você está informando de forma equivocada.

Para auxiliar melhor peço que você informe se:

1 - Irá cobrar multas? 1.1 - Se sim, a partir de quando? 1.2 - Irá cobrar valor fixo de multa ou percentual e qual o seu respectivo valor

21 - Irá cobrar juros? 2.1 - Se sim, a partir de quando? 2.2 - Irá cobrar valor fixo de juro ou percentual e qual o seu respectivo valor

seventechsolucoes commented 6 years ago

@Rctnet @gildonei Segue as ocorrências que o banco acusou e o código que estou utilizando

==> OCORRÊNCIAS 1- Registro inválido na linha 1. O tamanho do registro deve ser de 240 posições.

2 - Campo inválido na linha 1. Tipo de registro [Header de Arquivo]. O campo [Código de Transmissão], posição 33 a 47, deve ser [066000009452079. Definido em Cadastros > Empresas]. Valor atual [066000001300290].

3 - Campo inválido na linha 1. Tipo de registro [Header de Arquivo]. O campo [Reservado (uso Banco)], posição 48 a 72, deve ser [Brancos]. Valor atual [52 ].

4 - Campo inválido na linha 1. Tipo de registro [Header de Arquivo]. O campo [Código remessa], posição 143 a 143, deve ser [1]. Valor atual [ ].

5 - Campo inválido na linha 1. Tipo de registro [Header de Arquivo]. O campo [Data de geração do arquivo], posição 144 a 151, deve ser [DDMMAAAA]. Valor atual [ 1270420].

6 - Campo inválido na linha 1. Tipo de registro [Header de Arquivo]. O campo [Reservado (uso Banco)], posição 152 a 157, deve ser [Brancos]. Valor atual [18 ].

7 - Campo inválido na linha 1. Tipo de registro [Header de Arquivo]. O campo [Nº seqüencial do arquivo], posição 158 a 163, deve ser [diferente de zeros, maior que zero]. Valor atual [ 0000].

8 - Campo inválido na linha 1. Tipo de registro [Header de Arquivo]. O campo [Nº da versão do layout do arquivo], posição 164 a 166, deve ser [040] . Valor atual [340].

9 - Campo inválido na linha 1. Tipo de registro [Header de Arquivo]. O campo [Reservado (uso Banco)], posição 167 a 240, deve ser [Brancos]. Valor atual [40 ].

10 = Campo inválido na linha 3. Tipo de registro [Detalhe - Segmento P]. O campo [Espécie do título], posição 107 a 108, deve ser [02] DM Duplicata Mercantil ou [04] DS Duplicata de Serviço ou [07] LC - LETRA DE CÂMBIO (SOMENTE PARA BANCO 353) ou [12] NP Nota Promissória ou [13] NPR Nota Promissória Rural ou [17] RC Recibo ou [18] FAT Fatura ou [20] AP Apólice de Seguro ou [30] LC - LETRA DE CÂMBIO (SOMENTE PARA BANCO 008) ou [31] BCC - Boleto Cartão de crédito 'À partir de julho/2017' ou [32] BDP – BOLETO DE PROPOSTA ou [97] CH – CHEQUE ou [98] ND - NOTA PROMISSORIA DIRETA. Valor atual [01].

11 - Campo inválido na linha 3. Tipo de registro [Detalhe - Segmento P]. O campo [Código do juros de mora], posição 118 a 118, deve ser [1] Valor por dia - Informar no campo o valor/dia a mora a ser cobrada. ou [2] Taxa Mensal - Informar no campo taxa mensal o percentual a ser aplicado sobre valor do titulo que será calculado por dia de atraso. ou [3] Isento ou [4] Utilizar comissão permanência do Banco por dia de atraso ou [5] Tolerância valor por dia (cobrar juros a partir de) ou [6] Tolerância taxa mensal (cobrar juros a partir de). Valor atual [0].

12 - Campo inválido na linha 6. Tipo de registro [Detalhe - Segmento P]. O campo [Identificação do título no Banco], posição 45 a 57, Digito verificador inserido: 8, Digito verificador valido: 7 [Digito verificador do nosso número é invalido.]. Valor atual [0000000000338].

==> CÓDIGO public function gerar(){ $this->tipo = "remessa"; $this->data = date("Y-m-d"); $this->conteudo = ""; $this->path = ""; $this->status = 1;

    $this->adicionar();
    $responseEmpresa = $this->empresa->get(FALSE);

    $agencia = explode("-", $responseEmpresa->agencia);
    $conta = explode("-", $responseEmpresa->conta);
    $contaFidc = explode("-", $responseEmpresa->contaFidc);

    $arquivo = new Remessa("033", 'cnab240', array(
        'nome_empresa' => $responseEmpresa->nomeFantasia, // seu nome de empresa
        'tipo_inscricao' => 2, // 1 para cpf, 2 cnpj
        'numero_inscricao' => $responseEmpresa->cnpj, // seu cpf ou cnpj completo
        'agencia' => $agencia[0], // agencia sem o digito verificador
        'agencia_dv' => $agencia[1], // somente o digito verificador da agencia
        'conta' => $conta[0], // número da conta
        'conta_dv' => $conta[1], // digito da conta
        'codigo_beneficiario' => $conta[0],
        'codigo_beneficiario_dv' => $conta[1], // codigo fornecido pelo banco
        'codigo_transmissao' => $responseEmpresa->codigoTransmissao,
        'numero_sequencial_arquivo' => $this->id,
         'situacao_arquivo' =>'P' // use T para teste e P para produção
    ));

    $lote = $arquivo->addLote(array('tipo_servico' => 1, 'codigo_transmissao' => $responseEmpresa->codigoTransmissao)); // tipo_servico  = 1 para cobrança registrada, 2 para sem registro

    $responseBoletos = $this->boleto->getByIdsParcelas($dados["boleto"], FALSE);
    $idsBoletos = [];
    foreach ($responseBoletos as $boleto) {
        $lote->inserirDetalhe([
            'conta_cobranca' => $conta[0], //1 = Entrada de título, para outras opções ver nota explicativa C004 manual Cnab_SIGCB na pasta docs
            'codigo_movimento' => 1, //1 = Entrada de título, para outras opções ver nota explicativa C004 manual Cnab_SIGCB na pasta docs
            'nosso_numero' => $boleto->nossoNumero, // numero sequencial de boleto
            'seu_numero' => $boleto->idParcela, // numero sequencial de boleto
            'especie_titulo' => "DM", // Valor do boleto como float valido em php
            'valor' => $boleto->valor, // Valor do boleto como float valido em php
            'emissao_boleto' => 2, // tipo de emissao do boleto informar 2 para emissao pelo beneficiario e 1 para emissao pelo banco
            'nome_pagador' => $boleto->nome, // O Pagador é o cliente, preste atenção nos campos abaixo
            'tipo_inscricao' => 1, //campo fixo, escreva '1' se for pessoa fisica, 2 se for pessoa juridica
            'numero_inscricao' => $boleto->cpf, //cpf ou ncpj do pagador
            'cidade_pagador' => $boleto->cidade,
            'uf_pagador' => $boleto->uf,
            'data_vencimento' => $boleto->vencimento, // informar a data neste formato
            'data_emissao' => $boleto->dataEmissao, // informar a data neste formato
            'endereco_pagador' => "Endereço",
            'bairro_pagador' => 'Bairro',
            'cep_pagador' => '00000-000', // com hífem
            'mensagem' => "{$boleto->instrucao1}</br>"
            . "{$boleto->instrucao2}</br>"
            . "{$boleto->instrucao3}</br>"
            . "{$boleto->instrucao4}</br>",
            'vlr_juros' => 0, // Valor do juros de 1 dia'
            'data_multa' => date("Y-m-d", strtotime("+30 days", strtotime($boleto->vencimento))), // informar a data neste formato, // data da multa
            'vlr_multa' => 30.00, // valor da multa
            'taxa_multa' => 2.00, // taxa de multa em percentual
            'taxa_juros' => 4.00, // taxa de juros em percentual
        ]);
        array_push($idsBoletos, $boleto->id);
    }

    $resultado = utf8_decode($arquivo->getText()); // observar a header do seu php para não gerar comflitos de codificação de caracteres;
    $file = 'remessa-' . date("Y-m-d_H:i:s") . '.rem';
    file_put_contents("./assets/arquivos/remessas/{$file}", $resultado);

    if (file_exists("./assets/arquivos/remessas/{$file}")) {
        $this->conteudo = $resultado;
        $this->path = $file;
        $this->status = 1;
        $this->atualizar();

        $this->boleto->baixaRemessa($idsBoletos, $this->data);
        return ["resultado" => TRUE, "msg" => "Remessa gerada", "file" => $file];
    } else {
        return ["resultado" => FALSE, "msg" => "Falha ao gerar remessa"];
    }

}

Respondendo as perguntas 1 - Sim, acredito que seja a mora diária após o vencimento 1.1 - No dia seguinte começa a cobrança da mora diária 1.2 - A cobrança de R$ 0,33 ao dia

2 - Sim 2.1 - Os juros serão cobrados 10 dias após o vencimento 2.2 - A cobrança será percentual. 2%

gildonei commented 6 years ago

Olá @guilherme00 , os erros ali em cima são auto-explicativos, vou repassar o exemplo de uso que acredito será mais fácil para você.

O Código de Transmissão é enviado pelo Santander e para o layout de 240 posições deve ter a seguinte regra:


//AGÊNCIA(4 dígitos) + 0000 (zeros fixo) + CONVENIO (6 dígitos) + DV Convênio (1 dígito)

//Exemplo de código de transmissão:
//AG: 1234
//Fixo: 0000
//Convênio: 123456
//Dv Convênio: 7
//Código de Transmissão será: 123400001234567

$arquivo = new Remessa('033', 'cnab240', [
    'nome_empresa'              => 'nome da sua empresa',
    'tipo_inscricao'            => 2, // CNPJ
    'numero_inscricao'          => 'Número do CNPJ da empresa',
    'codigo_transmissao'        => 'Código de Transmissão',// seria o 123400001234567
    'numero_sequencial_arquivo' => 'Código sequencial da sua remessa - pode ser o seu Id no banco de dados',
    'situacao_arquivo'          => 'T',
    'agencia'                   => 'Agencia', // No exemplo seria 1234
    'agencia_dv'                => 'Dígito da agência', 
    'conta'                     => 'Número da conta no banco',
    'conta_dv'                  => 'dv da conta no banco',
    'codigo_beneficiario'       => 'Convênio', // No exemplo seria 123456
    'codigo_beneficiario_dv'    => 'Dv do convênio', // No exemplo seria o 7
]);

$lote = $arquivo->addLote([
    'tipo_servico'=> 1,
    'codigo_transmissao' => 'Código de transmissao',// Seria 123400001234567
]);

// Aqui você esta tendo problemas com os itens
$detalhe = [
    'tipo_cobranca'     => 5, // Carteira 5 é a registro simples, o banco informa a correta
    'nosso_numero'      => 'código do seu boleto',
    'seu_numero'        => 'código do seu boleto',// Repete

    'data_vencimento'   => date('Y-m-d'),
    'valor'             => '100.00',
    'data_emissao'      => date('Y-m-d'),

    'codigo_juros'      => '2', // Taxa Mensal (veja que estou cobrando % de juro)
    'data_juros'        => date('Y-m-d'),
    'vlr_juros'         => '33.3', // Valor da mora/dia ou Taxa mensal (equivale a 0,033% por dia de JURO)

    'codigo_multa'      => 2, // Percentual
    'data_multa'        => $dtVencimento->format('Y-m-d'),
    'vlr_multa'         => '2',

    'codigo_desconto'      => '0', // Valor fixo ate a data informada – Informar o valor no campo "valor de desconto a ser concedido"
    'data_desconto'        => '0',
    'vlr_desconto'         => '0',

    'protestar'         => '0', // NÃO PROTESTAR
    'prazo_protesto'    => '0', // Informar o número de dias apos o vencimento para iniciar o protesto

    'baixar'            => '2', // NÃO BAIXAR
    'prazo_baixar'      => '0',

    'nome_pagador'      => 'Nome do Pagador',
    'tipo_inscricao'    => 'Tipo de pagador', // 1 - CPF | 2 CNPJ
    'numero_inscricao'  => 'Número do documento', // CPF ou CNPJ do pagador
    'endereco_pagador'  => 'Logradouro',
    'bairro_pagador'    => 'bairro',
    'cep_pagador'       => 'cep', // 00000-000
    'cidade_pagador'    => 'cidade',
    'uf_pagador'        => 'Sigla do Estado', // SC- por exemplo
];
$lote->inserirDetalhe($arrDetalhe);

// Continue normalmente

Você pode inserir isto dentro de um loop ou qualquer outra estrutura de controle que tiver, o principal está ali nos códigos de multa e juros q vc não está informando nos detalhes, além do código de transmissão.

seventechsolucoes commented 6 years ago

@gildonei obrigado pelas instruções, vou aplicar as correções e dou um retorno.

seventechsolucoes commented 6 years ago

@gildonei a remessa passou no teste do Santander, porém está dando inconsistência na linha digitável e no código de barras, não bateu com a remessa. Alguma chance do problema ser na geração da remessa ? Estou usando o OpenBoleto p/ geração de boletos

gildonei commented 6 years ago

@guilherme00 A remessa não tem haver com o seu boleto. A remessa tem por finalidade apenas avisar ao banco os títulos que você deseja registrar para que o banco saiba de sua existência.

O problema está na sua biblioteca de geração de boleto.

Passe o link do projeto ou lib do OpenBoleto q vc está usando

seventechsolucoes commented 6 years ago

https://github.com/kriansa/openboleto

gildonei commented 6 years ago

Já utilizei este projeto com outros bancos e funcionou normalmente.

Certifique-se de estar informando os dados corretamente, em especial a carteira que para o Santander é diferente na Remessa e no Boleto. No boleto se não me engano a carteira é a 101, mas é bom confirmar com o banco.

Se possível imprima um boleto pelo sistema do banco e compare com o impresso pelo seu sistema próprio e coloque aqui a linha digitável, pois a representação do código de barras é padrão 2of5 independentemente do banco e é gerada a partir da linha digitável.

Se as linhas digitáveis forem iguais em ambos os bancos, o código de barras será o mesmo.

seventechsolucoes commented 6 years ago

Não acredito que seja o OpenBoleto, em um outro projeto que me passaram como modelo utilizam o projeto e fazem a geração da remessa com o código próprio deles, a carteira é a mesma deles 101. Essa foi a inconsistência que acusaram.

santander

gildonei commented 6 years ago

A data de vencimento e nosso número do título é o mesmo no boleto e na remessa?

Lembre-se q na remessa o Nosso Número vai com DV que é calculado no módulo 11 já no boleto não deve constar esta informação.

Em 4 de maio de 2018 11:39, Guilherme Mateus notifications@github.com escreveu:

Não acredito que seja o OpenBoleto, em um outro projeto que me passaram como modelo utilizam o projeto e fazem a geração da remessa com o código próprio deles, a carteira é a mesma deles 101. Essa foi a inconsistência que acusaram.

[image: santander] https://user-images.githubusercontent.com/6888653/39633879-3e812762-4f87-11e8-91c1-5101a05bc1d9.png

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/QuilhaSoft/OpenCnabPHP/issues/65#issuecomment-386622372, or mute the thread https://github.com/notifications/unsubscribe-auth/ABTrY1T5GOiO1Lnam7Be10I0jiXMnNrwks5tvGgYgaJpZM4TigDQ .

seventechsolucoes commented 6 years ago

Quando gero a remessa, preciso setar o Nosso Número com o Módulo 11 ?

Atualmente, quando gero o boleto eu pego o Nosso Número que ele gera e salvo no banco, na geração da remessa apenas recupero o Nosso Número que está salvo e seto no array do detalhe, está correto ?

gildonei commented 6 years ago

O problema acho q está exatamente neste seu procedimento.

Imagine o seguinte, você tem uma Fatura (cobrança) em seu banco de dados, o ID (chave única e sequencial) dela é 3854, este valor você deve informar nos 2 casos:

A) Remessa no campo nosso_numero (3854) B) Boleto no campo *sequencial *(3854)

Se vc estiver informando valores diferentes você terá problemas inclusive na importação do retorno para realizar a compensação do seu título.

Em 4 de maio de 2018 14:49, Guilherme Mateus notifications@github.com escreveu:

Quando gero a remessa, preciso setar o Nosso Número com o Módulo 11 ?

Atualmente, quando gero o boleto eu pego o Nosso Número que ele gera e salvo no banco, na geração da remessa apenas recupero o Nosso Número que está salvo e seto no array do detalhe, está correto ?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/QuilhaSoft/OpenCnabPHP/issues/65#issuecomment-386677184, or mute the thread https://github.com/notifications/unsubscribe-auth/ABTrYw7ro23AqDqT33ixmAa0YfZFUDOcks5tvJSzgaJpZM4TigDQ .

seventechsolucoes commented 6 years ago

Provável que seja essa trocar de informações que esteja dando inconsistência entre os boletos e a remessa. Uma dúvida, Quando gero o boleto eu informo o número sequencial do boleto no meu sistema (ID:123), quando informar na remessa basta informar o numero sequencial direto ("nosso_numero"=>123) ?

gildonei commented 6 years ago

Exatamente, o nosso número para o boleto e a remessa devem ser exatamente os mesmos conforme você mencionou no seu exemplo.

Em 4 de maio de 2018 15:47, Guilherme Mateus notifications@github.com escreveu:

Provável que seja essa trocar de informações que esteja dando inconsistência entre os boletos e a remessa. Uma dúvida, Quando gero o boleto eu informo o número sequencial do boleto no meu sistema (ID:123), quando informar na remessa basta informar o numero sequencial direto ("nosso_numero"=>123) ?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/QuilhaSoft/OpenCnabPHP/issues/65#issuecomment-386698148, or mute the thread https://github.com/notifications/unsubscribe-auth/ABTrYxwvrtdutiptxKW8aEP5OWIEj3nYks5tvKJNgaJpZM4TigDQ .

seventechsolucoes commented 6 years ago

@gildonei realmente parece ser algo na geração da remessa. Fiz o teste com o Nosso Número processado e com o Sequencial e o resultado na remessa foi similar e a ocorrência persistiu, em contato com o analista de implantação do banco, o nosso número está contendo um número a mais, exemplo O boleto gera o Nosso Número: 0000000000404 E a remessa: 00000000004049

Está aparecendo mais um dígito dando a entender que o Nosso Número seria 4049 ao invés de 404.

Aqui a geração do boleto p/ persistiu no banco $boleto = new Santander([ // Parâmetros obrigatórios 'dataVencimento' => new DateTime($dados["vencimento"]), 'valor' => $dados["valor"], 'sequencial' => $dados["idParcela"], // Até 13 dígitos 'sacado' => $sacado, 'cedente' => $cedente, 'agencia' => $agencia[0], // Até 4 dígitos 'carteira' => $responseEmpresa->carteira, // 101, 102 ou 201 'conta' => $responseEmpresa->codigoPsk, // Código do cedente: Até 7 dígitos // IOS – Seguradoras (Se 7% informar 7. Limitado a 9%) // Demais clientes usar 0 (zero) 'ios' => $responseEmpresa->ios, // Apenas para o Santander // Parâmetros recomendáveis 'logoPath' => base_url("assets/img/marca.png"), // Logo da sua empresa 'agenciaDv' => $agencia[1], 'contaDv' => $conta[1], 'descricaoDemonstrativo' => [// Até 5 "Parcela {$dados["parcela"]}/{$dados["totalParcelamento"]}", "Após vencimento, juros de 1,99% ao mês" ], 'instrucoes' => [// Até 8 "Parcela {$dados["parcela"]}/{$dados["totalParcelamento"]}", $dados["instrucao1"], $dados["instrucao2"], $dados["instrucao3"], $dados["instrucao4"] ] ]);

Aqui a geração da remessa $lote->inserirDetalhe([ 'especie_titulo' => "DS", 'tipo_cobranca' => 5, //COM O NOSSO NÚMERO PURO 'nosso_numero' => $boleto->nossoNumero, // numero sequencial de boleto 'seu_numero' => $boleto->nossoNumero, // numero sequencial de boleto //COM O CÓDIGO SEQUENCIAL DO BOLETO // 'nosso_numero' => $boleto->idParcela, // numero sequencial de boleto // 'seu_numero' => $boleto->idParcela, // numero sequencial de boleto 'data_vencimento' => $boleto->vencimento, // informar a data neste formato 'valor' => $boleto->valor, // Valor do boleto como float valido em php 'data_emissao' => $boleto->dataEmissao, // informar a data neste formato 'codigo_juros' => '2', 'data_juros' => date("Y-m-d", strtotime("+1 days", strtotime($boleto->vencimento))), 'vlr_juros' => "199", 'codigo_multa' => '2', 'data_multa' => date("Y-m-d", strtotime("+30 days", strtotime($boleto->vencimento))), 'vlr_multa' => 200, 'codigo_desconto' => '0', // Valor fixo ate a data informada – Informar o valor no campo "valor de desconto a ser concedido" 'data_desconto' => '0', 'vlr_desconto' => '0', 'protestar' => '0', // NÃO PROTESTAR 'prazo_protesto' => '0', // Informar o número de dias apos o vencimento para iniciar o protesto 'baixar' => '2', // NÃO BAIXAR 'prazo_baixar' => '0', 'nome_pagador' => $boleto->nome, // O Pagador é o cliente, preste atenção nos campos abaixo 'tipo_inscricao' => 1, //campo fixo, escreva '1' se for pessoa fisica, 2 se for pessoa juridica 'numero_inscricao' => $boleto->cpf, //cpf ou ncpj do pagador 'cidade_pagador' => $boleto->cidade, 'uf_pagador' => $boleto->uf, 'endereco_pagador' => "Endereço", 'bairro_pagador' => 'Bairro', 'cep_pagador' => '00000-000', // com hífem 'mensagem' => "Após vencimento, juros de 1,99% ao mês" ]);

Aqui as duas remessas geradas com o Nosso Número processado e com o Sequencial do boleto COM NOSSO NUMERO PROCESSADO.txt COM NUMERO SEQUENCIAL.txt

gildonei commented 6 years ago

OI Guilherme, não esqueça que no Arquivo de Remessa é incluído o DV do nosso número que é calculado seguindo o módulo 11. Se você olhar na documentação do manual verá que deve ser incluído o DV e na documentação do projeto existe o arquivo calculadora do Santander onde vc informa o nosso número e ele irá lhe mostrar o DV.

A remessa e retorno estão corretas, eu implementei e utilizo eles. Inclusive foi homologada recentemente e adaptada junto com Rogério Muniz autor do projeto.

Em 7 de maio de 2018 11:49, Guilherme Mateus notifications@github.com escreveu:

@gildonei https://github.com/gildonei realmente parece ser algo na geração da remessa. Fiz o teste com o Nosso Número processado e com o Sequencial e o resultado na remessa foi similar e a ocorrência persistiu, em contato com o analista de implantação do banco, o nosso número está contendo um número a mais, exemplo O boleto gera o Nosso Número: 0000000000404 E a remessa: 00000000004049

Está aparecendo mais um dígito dando a entender que o Nosso Número seria 4049 ao invés de 404.

Aqui a geração do boleto p/ persistiu no banco $boleto = new Santander([ // Parâmetros obrigatórios 'dataVencimento' => new DateTime($dados["vencimento"]), 'valor' => $dados["valor"], 'sequencial' => $dados["idParcela"], // Até 13 dígitos 'sacado' => $sacado, 'cedente' => $cedente, 'agencia' => $agencia[0], // Até 4 dígitos 'carteira' => $responseEmpresa->carteira, // 101, 102 ou 201 'conta' => $responseEmpresa->codigoPsk, // Código do cedente: Até 7 dígitos // IOS – Seguradoras (Se 7% informar 7. Limitado a 9%) // Demais clientes usar 0 (zero) 'ios' => $responseEmpresa->ios, // Apenas para o Santander // Parâmetros recomendáveis 'logoPath' => base_url("assets/img/marca.png"), // Logo da sua empresa 'agenciaDv' => $agencia[1], 'contaDv' => $conta[1], 'descricaoDemonstrativo' => [// Até 5 "Parcela {$dados["parcela"]}/{$dados["totalParcelamento"]}", "Após vencimento, juros de 1,99% ao mês" ], 'instrucoes' => [// Até 8 "Parcela {$dados["parcela"]}/{$dados["totalParcelamento"]}", $dados["instrucao1"], $dados["instrucao2"], $dados["instrucao3"], $dados["instrucao4"] ] ]);

Aqui a geração da remessa

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/QuilhaSoft/OpenCnabPHP/issues/65#issuecomment-387089487, or mute the thread https://github.com/notifications/unsubscribe-auth/ABTrY3gp6N_N-HC8BkxSyNMZ2RduYpIVks5twF73gaJpZM4TigDQ .

seventechsolucoes commented 6 years ago

Em contato com o Analista deles, a remessa está correta. O problema está na impressão do boleto mesmo, esse dígito verificador não está sendo gerado na linha digitável por isso a inconsistência. Mas sinceramente, não entendo por que está acusando essa ocorrência sendo que testei no outro sistema e o boleto não continua o DV na impressão do boleto.

seventechsolucoes commented 6 years ago

@gildonei onde encontro no projeto essa calculadora, procurei e não encontrei

Rctnet commented 6 years ago

https://github.com/QuilhaSoft/OpenCnabPHP-Docs

seventechsolucoes commented 6 years ago

Ontem remessa e boletos foram aprovados pelo Santander, vamos avançar p/ os testes de retorno mas acredito que vá dar tudo certo. O problema estava no Nosso Número que vai no boleto, eu não sabia que o Sequencial deveria ir junto com o DV do Nosso Número. Assim que os testes forem concluídos dou um retorno p/ fechar esse tópico.

insidewill commented 6 years ago

Boa tarde, estou com uma duvida, o codigo_juros no que estou fazendo porém ele não aparece na remessa 'codigo_juros' => array( 'tamanho' => 1, 'default' => '0', 'tipo' => 'int', 'required' => true ),

poderia me dar uma luz

Rctnet commented 6 years ago

Bom dia @insidewill , fiz um teste simples adicionando 'codigo_juros'=> 2, no array de inserirDetalhe e funcionou certingo.

insidewill commented 6 years ago

Estranho, vou realizar novamente o teste e ver e retorno

insidewill commented 6 years ago

Olá amigos, boa tarde, venho informar que a remessa foi homologada e colocada em produção, por falta de tempo ainda não pude ajudar na implementação do registro S, mas irei ajudar.

Obrigado a todos, sempre!

Rctnet commented 6 years ago

Boa tarde @insidewill , já atualizei a readme da biblioteca com a homologação do santander cnab240

insidewill commented 6 years ago

Obrigado a todos vocês pela disposição e ajuda!