Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Esse artigo descreve o processo de retorno do arquivo de pagamento eletrônico. Após esse processo o sistema irá gerar o extrato e enviá-lo automaticamente ao locador.

Regras de negócio

  1. O sistema não liquida duas vezes o mesmo documento a pagar;

  2. Não deve ser alterado o campo código de integração, pois é por ele que o sistema realizada a baixa.

Retornar arquivo de liquidação de Pagamento

Com o pagamento dos títulos no banco, é necessário retornar o arquivo de pagamento para o sistema realizar a liquidação dos documentos e, para isso, é necessário realizar o seguinte procedimento:

  1. Entre na guia "Documentos a pagar".

  2. Clique no botão "Enviar Retorno".

  3. Selecione a conta financeira que refere-se o arquivo .

  4. Clique em “Carregar Arquivos” e informe o arquivo que se deseja importar.

  5. Clique em enviar.

  6. Para baixar o arquivo de retorno bancário, se

...

  1. desejar, o sistema gravou uma cópia no no objeto “Contas Correntes”.

  2. Clique na conta financeira utilizada.

  3. Clique na guia “Retorno de Cobrança”.

Após o retorno o sistema realiza as seguintes alterações:

  1. No repasse:

    1. altera a situação do repasse para “Pago”;

    2. conta corrente: irá preencher com a conta corrente do pagamento;

    3. data do pagamento: irá preencher com a data do pagamento;

    4. valor total pago: irá preencher com o valor total pago;

  2. Na conta corrente:

    1. cria um lançamento do valor do crédito na conta corrente na data do pagamento;

  3. Na parcela do documento a pagar:

    1. altera a situação da integração para “efetuado”;

    2. altera a situação do pagamento para “Paga”;

    3. preenche o campo data de pagamento com a data do pagamento.

    4. preenche o campo Pagamento com o número do lançamento de gerado na conta corrente.

  4. No lançamento do contrato:

    1. altera a situação dos lançamentos do repasse para “Pago;

    2. preenche o campo data de pagamento com a data do pagamento, que será utilizado para o informe de rendimento.

  5. No contábil:

    1. criar um lançamento contábil, nas contas contábeis pré-configuradas, na data do pagamento e com o valor pago.

Notas para o desenvolvedor:

  1. Usuário selecionar o componente aura “pesquisarContaPagar“ do SnapERP para pesquisar os registros de pagamento.

  2. Usuário clica no botão “Enviar retorno“ para processar o arquivo de retorno.

    1. Sistema abre o componente “enviarRetornoPagamento“.

  3. Usuário selecionar a conta corrente e anexa o arquivo de retorno do banco.

  4. Usuário clica no botão “Enviar”.

  5. Sistema executa o método “salvarRetornoPagamento“ da classe “PagamentoController“.

    1. Sistema executa o método “carregarArquivoRetorno“ da classe “RetornoPagamentoServico“.

      1. Recupera o arquivo de retorno salvo

      2. Cria registro no objeto “snap_finan__retorno_pagamento__c” com a situação igual a “Aguardando processamento“ e o arquivo anexado.

      3. Executa o método (future) “processarArquivoRetorno“ da classe “RetornoPagamentoItauServico“.

        1. Para cada parcela de pagamento do arquivo:

          1. Código da ocorrência = '00' (pagamento efetuado):

            Code Block
            parcela.situacao__c = 'Paga';
            parcela.data_pagamento__c = Date.newInstance(Integer.valueOf(processamento.data_efetiva_pagamento.substring(4)), Integer.valueOf(processamento.data_efetiva_pagamento.substring(2,4)), Integer.valueOf(processamento.data_efetiva_pagamento.substring(0,2)));
            parcela.integracao_bancaria__c = 'Efetuado'; // situação da integração
            parcela.snap_finan__erro_pagamento_eletronico__c = false;
            item.snap_finan__operacao__c = 'Documento Pago'; //01012010
            item.snap_finan__data_prevista_pagamento__c = Date.newInstance(Integer.valueOf(processamento.data_efetiva_pagamento.substring(4)), Integer.valueOf(processamento.data_efetiva_pagamento.substring(2,4)), Integer.valueOf(processamento.data_efetiva_pagamento.substring(0,2)));
            temPagamento = true;
          2. Código da ocorrência = ‘BD’(pagamento agendado):

            Code Block
            parcela.integracao_bancaria__c = 'Agendado'; // situação da integração
            parcela.snap_finan__erro_pagamento_eletronico__c = false;
            item.snap_finan__operacao__c = 'Entrada Confirmada';
          3. Código da ocorrência = ‘RJ’ (pagamento rejeitado):

            Code Block
            parcela.integracao_bancaria__c = 'Rejeitado'; // situação da integração
            String mensagemErro = '';
            for (Integer i=0; i< processamento.codigo_ocorrencia.length()/2; i++){
                system.debug(processamento.codigo_ocorrencia.mid(i*2, 2));
                mensagemErro += mapa_ocorrencia.get(processamento.codigo_ocorrencia.mid(i*2, 2)) + '; ';
            }
            system.debug('mensagem de erro: ' + mensagemErro);
            parcela.mensagem_pagamento_eletronico__c = mensagemErro;
            parcela.snap_finan__erro_pagamento_eletronico__c = true;
            item.snap_finan__operacao__c = 'Erro';
        2. Cria os registros para novos itens do retorno de pagamento (snap_finan__item_retorno_pagamento__c)

        3. Atualiza o registro do retorno de pagamento com a situação igual a “Processado com sucesso“.

        4. Atualiza as parcelas de pagamento.

        5. Cria um evento de pagamento:

          Code Block
          Pagamento__e pagamento = new Pagamento__e();
          pagamento.id_registro__c = idRetorno;
          pagamento.origem_pagamento__c = PagamentoServico.origem_retorno;
          EventBus.publish(pagamento);

No SnapProperty (process builder “Pagamento”):

  1. Quando uma “Parcela a pagar” é atualizada e “Situação” for igual a “Paga” e o tipo de registro for igual a “Repasse”:

    1. Executa o método “parcelaPaga“ da classe “RepassePago“:

      1. Executa o método gerarLancamentoFinanceiro da classe “RepasseServico“:

        1. Para cada parcela:

          1. Cria um lançamento (snap_finan__Movimento__c)

            Code Block
            lancamento.snap_finan__Conta__c = parcela.snap_finan__modelo_pagamento__r.snap_finan__conta__c;
            lancamento.snap_finan__Contabilizado__c = false;
            lancamento.snap_finan__Data__c = parcela.snap_finan__data_pagamento__c;
            lancamento.snap_finan__Entidade__c = parcela.snap_finan__Empresa__c;
            lancamento.snap_finan__Historico__c = String.format('Pagamento da parcela: {0} - R$ {1}',
                    new String[]{parcela.Name, String.valueOf(parcela.snap_finan__Valor_total__c.setScale(2))});
            lancamento.snap_finan__Lancamento_contabil__c = null;
            lancamento.snap_finan__Documento__c = null;
            lancamento.snap_finan__Tipo__c = null;
            lancamento.snap_finan__Valor__c = (parcela.snap_finan__Valor_total__c * (-1));
            lancamento.snap_finan__Valor_saida__c = parcela.snap_finan__Valor_total__c;
        2. Cria os registros dos lançamentos.

        3. Atualiza as parcelas com o campo

          Code Block
          parcela.snap_finan__Movimento__c = lancamento.Id;
      2. Executa o método atualizarRepassesPagos da classe “RepasseServico“:

        1. Recupera os repasses relacionados com as parcelas pagas.

        2. Para cada repasse:

          Code Block
          // atualizar o regitro do repasse
          repasse.Conta_contabil_credito__c = parcela.snap_finan__movimento__r.snap_finan__Conta__r.snap_finan__Conta_contabil__c;
          repasse.Data_pagamento__c = parcela.snap_finan__data_pagamento__c;
          repasse.Situacao__c = 'Pago';
          repasse.Valor_desconto__c = parcela.snap_finan__desconto__c;
          repasse.Valor_juro__c = parcela.snap_finan__juros__c;
          repasse.Valor_multa__c = parcela.snap_finan__multa__c;
        3. Atualiza os repasses pagos.

      3. Executa o método contabilizarRepassesPagos da classe “RepasseServico“:

        1. Recupera os repasses pagos na etapa anterior.

        2. Para cada repasse:

          1. Executa o método “contabilizarPagamentoRepasse” da classe “ContabilidadeServico“:

            1. Cria objeto para lançamento contábil (snap_finan__lancamento_contabil__c) do repasse:

              Code Block
              lancamento.snap_finan__data__c = repasse.Data_pagamento__c;
              lancamento.snap_finan__entidade__c = repasse.Empresa__c;
              lancamento.snap_brok__Repasse__c = repasse.id;
              lancamento.snap_finan__historico__c = historico;
              lancamento.snap_finan__periodo__c = periodo.Id;
              lancamento.snap_finan__situacao__c = 'Contabilizado';
              lancamento.RecordTypeId = Schema.SObjectType.snap_finan__lancamento_contabil__c.getRecordTypeInfosByName().get('Pagamento do repasse').getRecordTypeId();
            2. Cria um item para debitar cada item do repasse:

              Code Block
              itens.add(debitarLancamento(lancamento, repasse.Locador__c, configuracao.Conta_contabil_debito__c, itemRepasse.Valor_item__c));
            3. Atualiza a situação do repasse para “Contabilizado”.

        3. Atualiza os registros dos repasses.

        4. Recupera os itens do repasse (Item_Repasse__c).

        5. Cria os registros dos lançamentos contábeis

        6. Cria os registros dos itens dos lançamentos contábeis.

Processo sistêmico após o pagamento de um repasse

...