Versions Compared

Key

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

...

  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

...