Giter Site home page Giter Site logo

Comments (28)

insidewill avatar insidewill commented on June 2, 2024 1

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!

from opencnabphp.

Rctnet avatar Rctnet commented on June 2, 2024 1

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

from opencnabphp.

insidewill avatar insidewill commented on June 2, 2024 1

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

from opencnabphp.

seventechsolucoes avatar seventechsolucoes commented on June 2, 2024

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

from opencnabphp.

Rctnet avatar Rctnet commented on June 2, 2024

Posta seu arquivo aqui para vermos

from opencnabphp.

gildonei avatar gildonei commented on June 2, 2024

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

from opencnabphp.

seventechsolucoes avatar seventechsolucoes commented on June 2, 2024

@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%

from opencnabphp.

gildonei avatar gildonei commented on June 2, 2024

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.

from opencnabphp.

seventechsolucoes avatar seventechsolucoes commented on June 2, 2024

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

from opencnabphp.

seventechsolucoes avatar seventechsolucoes commented on June 2, 2024

@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

from opencnabphp.

gildonei avatar gildonei commented on June 2, 2024

@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

from opencnabphp.

seventechsolucoes avatar seventechsolucoes commented on June 2, 2024

https://github.com/kriansa/openboleto

from opencnabphp.

gildonei avatar gildonei commented on June 2, 2024

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.

from opencnabphp.

seventechsolucoes avatar seventechsolucoes commented on June 2, 2024

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

from opencnabphp.

gildonei avatar gildonei commented on June 2, 2024

from opencnabphp.

seventechsolucoes avatar seventechsolucoes commented on June 2, 2024

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 ?

from opencnabphp.

gildonei avatar gildonei commented on June 2, 2024

from opencnabphp.

seventechsolucoes avatar seventechsolucoes commented on June 2, 2024

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) ?

from opencnabphp.

gildonei avatar gildonei commented on June 2, 2024

from opencnabphp.

seventechsolucoes avatar seventechsolucoes commented on June 2, 2024

@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

from opencnabphp.

gildonei avatar gildonei commented on June 2, 2024

from opencnabphp.

seventechsolucoes avatar seventechsolucoes commented on June 2, 2024

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.

from opencnabphp.

seventechsolucoes avatar seventechsolucoes commented on June 2, 2024

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

from opencnabphp.

Rctnet avatar Rctnet commented on June 2, 2024

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

from opencnabphp.

seventechsolucoes avatar seventechsolucoes commented on June 2, 2024

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.

from opencnabphp.

insidewill avatar insidewill commented on June 2, 2024

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

from opencnabphp.

Rctnet avatar Rctnet commented on June 2, 2024

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

from opencnabphp.

insidewill avatar insidewill commented on June 2, 2024

Estranho, vou realizar novamente o teste e ver e retorno

from opencnabphp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.