CREATE OR REPLACE PROCEDURE GRAVA_BENFEITORIA_CONTRIB(
   P_CDEMPRESA      IN EMPRESA.CDEMPRESA%TYPE,
   P_DTINICIAL      IN MAPAAPURAC.DTINIPERIODO%TYPE,
   P_DTFINAL        IN MAPAAPURAC.DTINIPERIODO%TYPE)
AS
   V_NRSEQCREDBENFEIT NUMBER;
BEGIN
   /*Deleta os registros com data inicial no período, para o caso de reapuração de mapas*/
   DELETE FROM CREDBENFEITAPUR
    WHERE DTINICREDITO = P_DTINICIAL
      AND CDEMPRESA    = P_CDEMPRESA;

   /*Busca os valores dos lançamentos no período para inserir na tabela*/
   FOR C_LANC IN (SELECT L.CDEMPRESA, L.NRLANCCONT, L.NRSEQLANC, L.CDCONTCTBL, L.VRLANCAMENT, L.DTLANCCONT,
                         B.CDNATUBCALC, B.CDTIPOBEM, B.IDORIGEMBEM, B.IDUTILIZACAO, B.CDSITUTRIB, B.CDTPCRED,
                         B.VRALIQPIS, B.VRALIQCOFINS, B.QTPARCELAS, FIRST_DAY(L.DTLANCCONT) AS DTINICREDITO,
                         LAST_DAY(ADD_MONTHS(L.DTLANCCONT,(B.QTPARCELAS -1))) AS DTFIMCREDITO,
                         ROUND((L.VRLANCAMENT/B.QTPARCELAS),2) AS VRPARCELA
                    FROM LANCCONT L, BENFEITORIA B
                   WHERE B.CDEMPRESA  = P_CDEMPRESA
                     AND L.CDEMPRESA  = B.CDEMPRESA
                     AND L.CDCONTCTBL = B.CDCONTCTBL
                     AND L.DTLANCCONT BETWEEN P_DTINICIAL AND P_DTFINAL
                     AND L.VRLANCAMENT > 0) LOOP

      NOVO_CODIGO('CREDBENFEITAPUR',V_NRSEQCREDBENFEIT);
      /*Insere os valores na tabela*/
      INSERT INTO CREDBENFEITAPUR
         (NRSEQCREDBENFEIT, CDEMPRESA, NRLANCCONT, NRSEQLANC, CDCONTCTBL,
          CDNATUBCALC, CDTIPOBEM, IDORIGEMBEM, IDUTILIZACAO, CDSITUTRIB,
          CDTPCRED, VRALIQPIS, VRALIQCOFINS, QTPARCELAS,
          DTINICREDITO, DTFIMCREDITO, VRLANCAMENT, VRPARCELA)
      VALUES
         (V_NRSEQCREDBENFEIT, C_LANC.CDEMPRESA, C_LANC.NRLANCCONT, C_LANC.NRSEQLANC, C_LANC.CDCONTCTBL,
          C_LANC.CDNATUBCALC, C_LANC.CDTIPOBEM, C_LANC.IDORIGEMBEM, C_LANC.IDUTILIZACAO, C_LANC.CDSITUTRIB,
          C_LANC.CDTPCRED, C_LANC.VRALIQPIS, C_LANC.VRALIQCOFINS, C_LANC.QTPARCELAS,
          C_LANC.DTINICREDITO, C_LANC.DTFIMCREDITO, C_LANC.VRLANCAMENT, C_LANC.VRPARCELA);
   END LOOP;
END;
/

CREATE OR REPLACE PROCEDURE GERA_APURACAO_CONTRIBUICOES(
   P_DTINICIAL      IN MAPAAPURAC.DTINIPERIODO%TYPE,
   P_DTFINAL        IN MAPAAPURAC.DTINIPERIODO%TYPE,
   P_IDIMPORECUPNFE IN IMPOSTONFE.IDIMPORECUPNFE%TYPE,
   P_CDIMPOSTONFE   IN IMPOSTONFE.CDIMPOSTONFE%TYPE,
   P_NRSEQUMAPAPU   IN MAPAAPURAC.NRSEQUMAPAPU%TYPE,
   P_CDEMPRESA      IN EMPRESA.CDEMPRESA%TYPE,
   P_BOBLOQUEIA     IN BOOLEAN)
AS
   V_IDFORMAPUR        VARCHAR2(1);/*INDICACAO DA FORMA DE APURAÇÃO*/
   V_IDFORMAPURCOMP    VARCHAR2(1);/*INDICAÇÃO DA FORMA DE APURAÇÃO DAS COMPENSAÇÕES*/
   V_IDNFFORAPERAPU    VARCHAR2(1);/*IDENTIFICADOR QUE VINCULA NFS AO MAPA DE APURAÇÃO*/
   V_VCENTR            FLOAT;/*VALOR CONTABIL DE ENTRADA*/
   V_BCENTR            FLOAT;/*BASE DE CALCULO DAS ENTRADAS*/
   V_VRIMPENTR         FLOAT;/*VALOR DO IMPOSTO DAS ENTRADAS - CREDITOS*/
   V_VCSAIDA           FLOAT;/*VALOR CONTÁBIL SAIDA*/
   V_BCSAIDA           FLOAT;/*BASE CALCULO SAIDA*/
   V_OUTRRECSAIDA      FLOAT;/*OUTRAS RECEITAS CONTAS CONTÁBEIS SAIDA*/
   V_IMPNCUMSAIDA      FLOAT;/*IMPOSTO NAO CUMULATIVO SAIDA*/
   V_IMPCUMSAIDA       FLOAT;/*IMPOSTO CUMULATIVO SAIDA*/
   V_VRIMPECF          FLOAT;/*VALOR DE IMPOSTO DOS ECFS*/
   V_SEQITCOMP         VARCHAR2(4);/*SEQUENCIAL DO ITEM DE COMPENSACOES*/
   V_COMPENSACOES      FLOAT;/*VALOR DAS COMPENSACOES*/
   V_VRTOTAIMPREC      FLOAT;/*VALOR DO IMPOSTO A RECOLHER*/
   V_VRCREMAPANT       FLOAT;/*VALOR DO CREDITO DO MAPA ANTERIOR*/
   V_SEQITCREANT       VARCHAR2(4);/*SEQUENCIAL DO ITEM DE CREDITO ANTERIOR*/
   V_VRCREPERANT       FLOAT;/*VALOR DO CREDITO DO PERIODO ANTERIOR*/
   V_VRSALDOCRED       FLOAT;/*VALOR DO SALDO CREDOR*/
   V_VRDEDUCAO         FLOAT;/*VALOR DAS DEDUCOES*/
   V_VRAJUSTREDCRED    FLOAT;/*VALOR DO AJUSTE DE REDUCAO DO CRÉDITO*/
   V_VRAJUSTREDDEB     FLOAT;/*VALOR DO AJUSTE DE REDUCAO DO DÉBITO*/
   V_VRAJUSTACRCRED    FLOAT;/*VALOR DO AJUSTE DE ACRÉSCIMO DO CRÉDITO*/
   V_VRAJUSTACRDEB     FLOAT;/*VALOR DO AJUSTE DE ACRÉSCIMO DO DÉBITO*/
   V_VRDEVOLVEND       FLOAT;/*VALOR DE CANCELAMENTOS/DEVOLUCOES DE VENDAS*/
   V_VRIMPDEVVEND      FLOAT;/*VALOR DE IMPOSTO DE CANCELAMENTOS/DEVOLUCOES DE VENDAS*/
   V_DTINIFORPER       DATE; /*DATA INICIAL PARA NOTAS FORA DO PERIODO*/
   V_CDIMPCOMPEN       VARCHAR2(2);/*IMPOSTO DE COMPENSACAOO(PIS RETIDO OU COFINS RETIDO)*/
   V_VRDEVCOMPR        FLOAT;/*VALOR DE DEVOLUCOES DE COMPRAS*/
   V_VRIMPDEVCOMP      FLOAT;/*VALOR DE IMPOSTO DAS DEVOLUCOES DE COMPRAS*/
   V_IDCONSVRIMPAG     VARCHAR2(1); /*IDENTIFICADOR DA FORMA DE CONSIDERAR O VALOR DO IMPOSTO NO REGIME DE CAIXA*/
   V_VRCREDMES         FLOAT;/*VALOR DO CREDITO DO MES*/
   V_VRDEBIMES         FLOAT;/*VALOR DO DEBITO DO MES*/
   V_VRCOMPMES         FLOAT;/*VALOR DAS COMPENSAÇÕES DO MÊS*/
   V_VRSALDOCREMES     FLOAT;/*VALOR DO SALDO CREDOR DO MES*/
   V_VRSALDOCREDUT     FLOAT;/*VALOR DO SALDO CREDOR UTILIZADO*/
   V_VRSALDOCREDUTANT  FLOAT;/*VALOR DO SALDO CREDOR UTILIZADO EM PERÍODOS ANTERIORES*/
   V_VRSALDOCREDFIN    FLOAT;/*VALOR DO SALDO CREDOR FINAL*/
   V_VRCOMPENSMES      FLOAT;/*VALOR DA COMPENSAÇÃO DO MES*/
   V_COMPENSACOESNC    FLOAT;/*VALOR DA COMPENSAÇÃO NO REGIME NÃO CUMULATIVO*/
   V_COMPENSACOESCUM   FLOAT;/*VALOR DA COMPENSAÇÃO NO REGIME CUMULATIVO*/
   V_VRCOMPENSUT       FLOAT;/*VALOR DA COMPENSAÇÃO UTILIZADO*/
   V_VRCOMPENSUTNC     FLOAT;/*VALOR DA COMPENSAÇÃO UTILIZADO NO REGIME NÃO CUMULATIVO*/
   V_VRCOMPENSUTCUM    FLOAT;/*VALOR DA COMPENSAÇÃO UTILIZADO NO REGIME CUMULATIVO*/
   V_VRCOMPENSUTANT    FLOAT;/*VALOR DA COMPENSAÇÃO UTILIZADO EM PERÍODO ANTERIOR*/
   V_VRCOMPENSFIN      FLOAT;/*VALOR DA COMPENSAÇÃO FINAL*/
   V_VRCOMPENSFINNC    FLOAT;/*VALOR DA COMPENSAÇÃO FINAL NO REGIME NÃO CUMULATIVO*/
   V_VRCOMPENSFINCUM   FLOAT;/*VALOR DA COMPENSAÇÃO FINAL NO REGIME CUMULATIVO*/
   V_NRSEQCREDANT      NOVOCODIGO.NRSEQUENCIAL%TYPE;/*SEQUENCIAL DA TABELA CREDANTSPED*/
   V_DTUTILIZACRED     DATE;/*DATA EM QUE O CRÉDITO FOI UTILIZADO*/
   V_VRPAGARMES        FLOAT;/*VARIAVEL QUE CONTROLA O VALOR DO IMPOSTO A PAGAR AINDA RESTANTE NO MÊS*/
   V_REGIMECOMP        VARCHAR2(1); /*VARIÁVEL QUE ARMAZENA O REGIME PRA O QUAL HOUVE VALOR DE COMPENSAÇÃO NO MÊS*/
   V_VRBENFEITORIA     FLOAT;/*VALOR DA BENFITORIA/AMORTIZAÇÃO NO PERÍODO*/
   V_TOTALCRED         FLOAT;/*VALOR TOTAL DO CRÉDITO NO MÊS (SEM CONSIDERAR DEDUÇÕES E COMPENSAÇÕES)*/
   V_DEBMENOSCRED      FLOAT;/*VALOR DO DÉBITO MENOS O CRÉDITO*/
   V_VRCTBLNFENTR      FLOAT;/*VALOR CONTÁBIL DAS NOTAS FISCAIS DE ENTRADA*/
   V_VRCTBLDVEND       FLOAT;/*VALOR CONTÁBIL DAS DEVOLUÇÕES DE VENDA*/
   V_VRTTBCCREDITO     FLOAT;/*VALOR TOTAL DA BASE DE CÁLCULO DO CRÉDITO*/
   V_VRBCCREDNF        FLOAT;/*BASE DE CÁLCULO DOS CRÉDITOS REFERENTES A NOTAS FISCAIS*/
   V_VRBCCREDBENF      FLOAT;/*BASE DE CÁLCULO DOS CRÉDITOS REFERENTES A BENFEITORIA*/
   V_VRCREDITOS        FLOAT;/*VALOR DOS CRÉDITOS DE ENTRADA DE NF, DEVOLUÇÃO E BENFEITORIA*/
   V_VRCTBLNFSAID      FLOAT;/*VALOR CONTÁBIL DAS NOTAS FISCAIS DE SAÍDA*/
   V_VRCTBLVENDAS      FLOAT;/*VALOR CONTÁBIL DAS VENDAS DO FORSALE*/
   V_VRCTBLDCOMP       FLOAT;/*VALOR CONTÁBIL DAS DEVOLUÇÕES DE COMPRA*/
   V_VRTTBCDEBITO      FLOAT;/*VALOR TOTAL DA BASE DE CÁLCULO DO DÉBITO*/
   V_VRBCDEBNF         FLOAT;/*BASE DE CÁLCULO DOS DÉBITOS REFERENTE A NOTAS FISCAIS*/
   V_VRBCDEBECF        FLOAT;/*BASE DE CÁLCULO DOS DÉBITOS REFERENTES AS VENDAS FORSALE*/
   V_VRBCDEBOUTREC     FLOAT;/*BASE DE CÁLCULO DOS DÉBITOS REFERENTE A OUTRAS RECEITAS*/
   V_VRDEBITOSNC       FLOAT;/*VALOR DOS DÉBITOS DE SAÍDA NO REGIME NÃO CUMULATIVO NF, FOS, DEVOLUÇÃO, OUTRAS RECEITAS*/
   V_VRDEBITOSCUM      FLOAT;/*VALOR DOS DÉBITOS DE SAÍDA NO REGIME CUMULATIVO NF, FOS, OUTRAS RECEITAS*/
   V_VRECFNCUMU        FLOAT;/*VALOR DOS DÉBITOS DAS VENDAS FOR SALE NO REGIME NÃO CUMULATIVO*/
   V_VRECFCUMU         FLOAT;/*VALOR DOS DÉBITOS DAS VENDAS FOR SALE NO REGIME CUMULATIVO*/
   V_VRDEBNFSAIDNC     FLOAT;/*VALOR DOS DÉBITOS DAS NOTAS FISCAIS NO REGIME NÃO CUMULATIVO*/
   V_VRDEBOUTRECNC     FLOAT;/*VALOR DOS DÉBITOS DE OUTRAS RECEITAS NO REGIME NÃO CUMULATIVO*/
   V_VRBEDNFSAIDCUM    FLOAT;/*VALOR DOS DÉBITOS DAS NOTAS FISCAIS NO REGIME CUMULATIVO*/
   V_VRDEBOUTRECCUM    FLOAT;/*VALOR DOS DÉBITOS DE OUTRAS RECEITAS NO REGIME CUMULATIVO*/
   V_IDTPCREDANTCONT   VARCHAR(02);/*IDENTIFICAÇÃO DA FORMA DE APROPRIAÇÃO DOS CRÉDITOS*/
   V_VRCREMAPANTUT     FLOAT;/*SALDO CREDOR DE PERIODO ANTERIOR JÁ UTILIZADO - COMPENSAÇÃO MANUAL*/
   V_VRCREMAPANTNUT    FLOAT;/*SALDO CREDOR DE PERIODO ANTERIOR NÃO UTILIZADO - COMPENSAÇÃO MANUAL*/
   V_IDUTCREDDIFER     VARCHAR2(01);/*IDENTIICADOR SE UTILIZA CRÉDITO DIFERIDO*/
   V_NRSEQCONTRDIF     NOVOCODIGO.NRSEQUENCIAL%TYPE;/*SEQUENCIAL DA TABELA DE CONTROLE DA CONTRIBUIÇÃO DIFERIDA*/
   V_NRSEQCREDDIF      NOVOCODIGO.NRSEQUENCIAL%TYPE;/*SEQUENCIAL DA TABELA DE CONTROLE DO CRÉDITO DIFERIDO*/
   V_PROPORCRED        FLOAT;/*VALOR PROPORCIONAL ENTRE O FATURAMENTO PÚBLICO NÃO RECEBIDO E O FATURAMENTO TOTAL - DIFERIMENTO*/
   V_VRTOTCREDITODIF   FLOAT;/*VALOR TOTAL DO CRÉDITO DIFERIDO REFERENTE A CONTRIBUIÇÃO DIFERIDA*/
   V_VRCONTABILREC     FLOAT;/*VALOR CONTÁBIL RECEBIDO - DIFERIMENTO ANTERIOR*/
   V_VRBASECALCREC     FLOAT;/*VALOR BASE DE CÁLCULO RECEBIDO - DIFERIMENTO ANTERIOR*/
   V_VRCONTNAOREC      FLOAT;/*VALOR CONTÁBIL NÃO RECEBIDO - DIFERIMENTO ANTERIOR*/
   V_VRBASENAOREC      FLOAT;/*VALOR BASE DE CÁLCULO NÃO RECEBIDO - DIFERIMENTO ANTERIOR*/
   V_NRSEQULTMAPA      VARCHAR2(10);/*SEQUENCIAL DO ÚLTIMO MAPA PARA A NF - DIFERIMENTO ANTERIOR*/
   V_VRCONTRIBDIFANT   FLOAT;/*VALOR CONTRIBUIÇÃO DIFERIDA ANTERIORMENTE - DIFERIMENTO ANTERIOR*/
   V_VRULTCONTNAOREC   FLOAT;/*VALOR NÃO RECEBIDO NA OCORRÊNCIA ANTERIOR DO DIFERIMENTO PARA A NF*/
   V_VRULTCONTRIBDIF   FLOAT;/*VALOR CONTRIBUIÇÃO DIFERIDA NA OCORRÊNCIA ANTERIOR DO DIFERIMENTO PARA A NF*/
   V_VRULTCREDDIFERIDO FLOAT;/*VALOR CRÉDITO DIFERIDO NA OCORRÊNCIA ANTERIOR DO DIFERIMENTO PARA A NF*/
   V_VRCREDDIFERIDO    FLOAT;/*VALOR DO CRÉDITO DIFERIDO NO PERÍODO, PARA ATUALIZAR A DETAPURACONTR*/
   V_VRCONTRIBDIF      FLOAT;/*VALOR DA CONTRIBUIÇÃO DIFERIDA NO PERÍODO, PARA ATUALIZAR A DETAPURACONTR*/
   V_VRCONTRDIFANT     FLOAT;/*VALOR DA CONTRIBUIÇÃO DIFERIDA ANTEIORMENTE, QUE FOI PAGA NO PERÍODO, PARA ATUALIZAR A DETAPURACONTR*/
   V_ULTNRSEQCONTRDIF  VARCHAR2(10);/*SEQUENCIAL DA TABELA DE CONTROLE DA CONTRIBUIÇÃO DIFERIDA NA ÚLTIMA VEZ QUE HOUVE ALTERAÇÃO NO DIFERIMENTO DA NF*/
   /*VARIÁVEIS PARA EXIBIR OS VALORES POR COMPETÊNCIA PARA QUEM UTILIZA REGIME DE CAIXA*/
   V_VCENTRRPAG         FLOAT;/*VALOR CONTABIL DE ENTRADA*/
   V_BCENTRRPAG         FLOAT;/*BASE DE CALCULO DAS ENTRADAS*/
   V_VRIMPENTRRPAG      FLOAT;/*VALOR DO IMPOSTO DAS ENTRADAS - CREDITOS*/
   V_VRDEVOLVENDRPAG    FLOAT;/*VALOR DE CANCELAMENTOS/DEVOLUCOES DE VENDAS*/
   V_VRIMPDEVVENDRPAG   FLOAT;/*VALOR DE IMPOSTO DE CANCELAMENTOS/DEVOLUCOES DE VENDAS*/
   V_VRCTBLNFENTRRPAG   FLOAT;/*VALOR CONTÁBIL DAS NOTAS FISCAIS DE ENTRADA*/
   V_VRCTBLDVENDRPAG    FLOAT;/*VALOR CONTÁBIL DAS DEVOLUÇÕES DE VENDA*/
   V_VRBCCREDNFRPAG     FLOAT;/*BASE DE CÁLCULO DOS CRÉDITOS REFERENTES A NOTAS FISCAIS*/
   V_VCSAIDARPAG        FLOAT;/*VALOR CONTÁBIL SAIDA*/
   V_BCSAIDARPAG        FLOAT;/*BASE CALCULO SAIDA*/
   V_OUTRRECSAIDARPAG   FLOAT;/*OUTRAS RECEITAS CONTAS CONTÁBEIS SAIDA*/
   V_IMPNCUMSAIDARPAG   FLOAT;/*IMPOSTO NAO CUMULATIVO SAIDA*/
   V_IMPCUMSAIDARPAG    FLOAT;/*IMPOSTO CUMULATIVO SAIDA*/
   V_VRIMPECFRPAG       FLOAT;/*VALOR DE IMPOSTO DOS ECFS*/
   V_VRDEVCOMPRRPAG     FLOAT;/*VALOR DE DEVOLUCOES DE COMPRAS*/
   V_VRIMPDEVCOMPRPAG   FLOAT;/*VALOR DE IMPOSTO DAS DEVOLUCOES DE COMPRAS*/
   V_VRCTBLNFSAIDRPAG   FLOAT;/*VALOR CONTÁBIL DAS NOTAS FISCAIS DE SAÍDA*/
   V_VRCTBLVENDASRPAG   FLOAT;/*VALOR CONTÁBIL DAS VENDAS DO FORSALE*/
   V_VRCTBLDCOMPRPAG    FLOAT;/*VALOR CONTÁBIL DAS DEVOLUÇÕES DE COMPRA*/
   V_VRBCDEBNFRPAG      FLOAT;/*BASE DE CÁLCULO DOS DÉBITOS REFERENTE A NOTAS FISCAIS*/
   V_VRBCDEBECFRPAG     FLOAT;/*BASE DE CÁLCULO DOS DÉBITOS REFERENTES AS VENDAS FORSALE*/
   V_VRBCDEBOUTRECRPAG  FLOAT;/*BASE DE CÁLCULO DOS DÉBITOS REFERENTE A OUTRAS RECEITAS*/
   V_VRECFNCUMURPAG     FLOAT;/*VALOR DOS DÉBITOS DAS VENDAS FOR SALE NO REGIME NÃO CUMULATIVO*/
   V_VRECFCUMURPAG      FLOAT;/*VALOR DOS DÉBITOS DAS VENDAS FOR SALE NO REGIME CUMULATIVO*/
   V_VRDEBNFSAIDNCRPAG  FLOAT;/*VALOR DOS DÉBITOS DAS NOTAS FISCAIS NO REGIME NÃO CUMULATIVO*/
   V_VRDEBOUTRECNCRPAG  FLOAT;/*VALOR DOS DÉBITOS DE OUTRAS RECEITAS NO REGIME NÃO CUMULATIVO*/
   V_VRBEDNFSAIDCUMRPAG FLOAT;/*VALOR DOS DÉBITOS DAS NOTAS FISCAIS NO REGIME CUMULATIVO*/
   V_VRDEBOUTRECCUMRPAG FLOAT;/*VALOR DOS DÉBITOS DE OUTRAS RECEITAS NO REGIME CUMULATIVO*/
   V_VRCREDMESRPAG      FLOAT;/*VALOR DO CREDITO DO MES*/
   V_VRDEBIMESRPAG      FLOAT;/*VALOR DO DEBITO DO MES*/
   V_VRTOTAIMPRECRPAG   FLOAT;/*VALOR DO IMPOSTO A RECOLHER*/
   V_VRSALDOCREDRPAG    FLOAT;/*VALOR DO SALDO CREDOR*/
   V_DEBMENOSCREDRPAG   FLOAT;/*VALOR DO DÉBITO MENOS O CRÉDITO*/
   V_IDNFFORAPERAPUIMP  VARCHAR2(1);/*IDENTIFICADOR QUE VINCULA NFS AO MAPA DE APURAÇÃO POR IMPOSTO*/
   V_VRTTBCCREDITORPAG  FLOAT;/*VALOR TOTAL DA BASE DE CÁLCULO DO CRÉDITO*/
   V_VRCREDITOSRPAG     FLOAT;/*VALOR DOS CRÉDITOS DE ENTRADA DE NF, DEVOLUÇÃO E BENFEITORIA*/
   V_VRTTBCDEBITORPAG   FLOAT;/*VALOR TOTAL DA BASE DE CÁLCULO DO DÉBITO*/
   V_VRDEBITOSNCRPAG    FLOAT;/*VALOR DOS DÉBITOS DE SAÍDA NO REGIME NÃO CUMULATIVO NF, FOS, DEVOLUÇÃO, OUTRAS RECEITAS*/
   V_VRDEBITOSCUMRPAG   FLOAT;/*VALOR DOS DÉBITOS DE SAÍDA NO REGIME CUMULATIVO NF, FOS, OUTRAS RECEITAS*/
BEGIN
   /*----VERIFICA A FORMA DE APURACAO DOS IMPOSTOS(COMPETENCIA, PAGAMENTO, EMISSAO, ENTRADA/SAIDA)----*/
   /*VERIFICA A FORMA DE APURAÇÃO POR EMPRESA*/
   SELECT MAX(IDFORMAPUREMPR), 'P'
     INTO V_IDFORMAPUR, V_IDCONSVRIMPAG
     FROM EMPRESA
    WHERE CDEMPRESA = P_CDEMPRESA;
   /*SE NÃO TIVER FORMA DE APURAÇÃO PARAMETRIZADA POR EMPRESA VERIFICA DO CADASTRO DE IMPOSTO*/
   IF V_IDFORMAPUR IS NULL THEN
      SELECT MAX(IDFORMAPUR), MAX(IDCONSVRIMPAG)
        INTO V_IDFORMAPUR, V_IDCONSVRIMPAG
        FROM IMPOSTO I
       WHERE I.CDIMPOSTONFE = P_CDIMPOSTONFE;
   END IF;
   /*BUSCA A DATA INICIAL PARA AS NOTAS FORA DO PERIODO*/
   SELECT DTININFFORPER, NVL(IDTPCREDANTCONT,'A'), IDUTCREDDIFER
     INTO V_DTINIFORPER, V_IDTPCREDANTCONT, V_IDUTCREDDIFER
     FROM PARAMFISCAL;
   /*BUSCA O VALOR DOS AJUSTES DE REDUCAO DO CRÉDITO NO MAPA*/
   BEGIN
      SELECT SUM(VRAJUSTE)
        INTO V_VRAJUSTREDCRED
        FROM AJUSTEAPURCONTR
       WHERE NRSEQUMAPAPU  = P_NRSEQUMAPAPU
         AND IDTPAJUSTE    = '0'
         AND IDINDICAJUSTE = 'C';
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_VRAJUSTREDCRED := 0;
   END;
   /*BUSCA O VALOR DOS AJUSTES DE REDUCAO DO DÉBITO NO MAPA*/
   BEGIN
      SELECT SUM(VRAJUSTE)
        INTO V_VRAJUSTREDDEB
        FROM AJUSTEAPURCONTR
       WHERE NRSEQUMAPAPU  = P_NRSEQUMAPAPU
         AND IDTPAJUSTE    = '0'
         AND SUBSTR(IDINDICAJUSTE,1,1) = 'D';
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_VRAJUSTREDDEB := 0;
   END;
   /*BUSCA O VALOR DOS AJUSTES DE ACRESCIMO DO CRÉDITO NO MAPA*/
   BEGIN
      SELECT SUM(VRAJUSTE)
        INTO V_VRAJUSTACRCRED
        FROM AJUSTEAPURCONTR
       WHERE NRSEQUMAPAPU  = P_NRSEQUMAPAPU
         AND IDTPAJUSTE    = '1'
         AND IDINDICAJUSTE = 'C';
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_VRAJUSTACRCRED := 0;
   END;
   /*BUSCA O VALOR DOS AJUSTES DE ACRESCIMO DO DÉBITO NO MAPA*/
   BEGIN
      SELECT SUM(VRAJUSTE)
        INTO V_VRAJUSTACRDEB
        FROM AJUSTEAPURCONTR
       WHERE NRSEQUMAPAPU  = P_NRSEQUMAPAPU
         AND IDTPAJUSTE    = '1'
         AND SUBSTR(IDINDICAJUSTE,1,1) = 'D';
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_VRAJUSTACRDEB := 0;
   END;
----------------------------------------------------/*CRÉDITO ANTERIOR*/----------------------------------
   /*BUSCA O MAIOR SEQUENCIAL DE CREDITO DO PERIODO ANTERIOR DO MAPA*/
   SELECT MIN(NRSEQITDETAPU)
     INTO V_SEQITCREANT
     FROM ITDETAPUCONTR
    WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU
      AND IDTIPODETAPU = 'CA'
      AND DSITEMDETAPU IN ('SALDO CREDOR DO PERÍODO ANTERIOR');
   IF V_SEQITCREANT IS NOT NULL THEN
      /*APAGA O REGISTRO DE CREDITO DO PERIODO ANTERIOR*/
      DELETE FROM ITDETAPUCONTR
       WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU
         AND IDTIPODETAPU = 'CA'
         AND DSITEMDETAPU IN ('SALDO CREDOR DO PERÍODO ANTERIOR');
   END IF;
   IF V_SEQITCREANT IS NULL THEN
      /*GERA O PROXIMO SEQUENCIAL CASO NAO EXISTISSE O REGISTRO*/
      SELECT MAX(NRSEQITDETAPU)+1
        INTO V_SEQITCREANT
        FROM ITDETAPUCONTR
       WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU
         AND IDTIPODETAPU = 'CA';
   END IF;
   /*BUSCA O SALDO DO PERIODO ANTERIOR(SALDO CREDOR GRAVADO NO MAPA ANTERIOR).*/
   V_VRCREMAPANTNUT := 0;
   SELECT NVL(SUM(NVL(VRSALDOCRED,0)+NVL(VRCREDPERANTNUT,0)),0)
     INTO V_VRCREMAPANT
     FROM DETAPURACONTR D, MAPAAPURAC M
    WHERE M.CDEMPRESA    = P_CDEMPRESA
      AND M.CDIMPOSTO    = P_CDIMPOSTONFE
      AND M.NRSEQUMAPAPU = D.NRSEQUMAPAPU
      AND DTFIMPERIODO   = P_DTINICIAL - 1;
   IF V_IDTPCREDANTCONT = 'M' THEN
      IF P_BOBLOQUEIA THEN
         SELECT NVL(SUM(VRSALDOCREDORUT),0)
           INTO V_VRCREMAPANTUT
           FROM CREDANTSPED C, MAPAAPURAC M
          WHERE M.CDEMPRESA    = P_CDEMPRESA
            AND M.CDIMPOSTO    = P_CDIMPOSTONFE
            AND M.NRSEQUMAPAPU = C.NRSEQUMAPAPU
            AND C.CDEMPRESA    = M.CDEMPRESA
            AND C.IDTPCREDANT  = 'CA'
            AND C.CDREGISTRO   = DECODE(P_CDIMPOSTONFE,'50','1100','60','1500')
            AND C.DTUTILIZACRED = P_DTINICIAL;
         V_VRCREMAPANTNUT := V_VRCREMAPANT - V_VRCREMAPANTUT;
         V_VRCREMAPANT    := V_VRCREMAPANTUT;
      ELSE
         V_VRCREMAPANTNUT := V_VRCREMAPANT;
         V_VRCREMAPANT    := 0;
      END IF;
   END IF;
   IF V_VRCREMAPANT > 0 THEN
      /*INSERE NA TABELA DE ITENS O VALOR DO SALDO CREDOR DO MAPA ANTERIOR*/
      INSERT INTO ITDETAPUCONTR
         (NRSEQUMAPAPU, IDTIPODETAPU, NRSEQITDETAPU, DSITEMDETAPU, VRITEMDETAPU, IDCUMUPISCOFIL)
      VALUES
         (P_NRSEQUMAPAPU, 'CA', LPAD(NVL(V_SEQITCREANT,1),4,'0'), 'SALDO CREDOR DO PERÍODO ANTERIOR', V_VRCREMAPANT, 'S');
   END IF;
   /*BUSCA PARAMETRO PARA VINCULAR NF´S*/
   SELECT NVL(IDNFFORAPERAPU,'N')
     INTO V_IDNFFORAPERAPU
     FROM PARAMFISCAL;
   /*BUSCA PARAMETRO PARA VINCULAR NFS POR IMPOSTO*/
   BEGIN
      SELECT MAX(IDNFFORAPERAPU)
        INTO V_IDNFFORAPERAPUIMP
        FROM IMPOSTO
       WHERE CDIMPOSTONFE = P_CDIMPOSTONFE;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_IDNFFORAPERAPUIMP := '';
   END;
   /*I É INUTILIZADO, SE USAR O PARÂMETRO POR IMPOSTO ELE TEM PREFERÊNCIA*/
   IF V_IDNFFORAPERAPUIMP <> 'I' THEN
      V_IDNFFORAPERAPU := V_IDNFFORAPERAPUIMP;
   END IF;
   IF V_IDNFFORAPERAPU = 'N' THEN
      UPDATE IMPOSTONF
         SET DTREFMAPAPU = NULL
       WHERE (NRSEQUMAPAPU = P_NRSEQUMAPAPU OR NRSEQMAPOIMP = P_NRSEQUMAPAPU);
      UPDATE IMPBAIXAREC
         SET DTREFMAPAPU  = NULL
       WHERE (NRSEQUMAPAPU = P_NRSEQUMAPAPU OR NRSEQMAPOIMP = P_NRSEQUMAPAPU);
      UPDATE ITEMVENOUTIMPOS
         SET DTREFMAPAPU = NULL
       WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU;  
   END IF;
   /*UPDATE DAS NOTAS NA IMPOSTONF PARA NULL EM CASO DE REAPURACAO DE MAPAS */
   UPDATE IMPOSTONF
      SET NRSEQUMAPAPU = NULL
    WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU;
   /*UPDATE DAS NOTAS NA IMPOSTONF PARA NULL QUANDO FOI UTILIZADA A APURAÇÃO POR PARAGAMENTO EM CASO DE REAPURACAO DE MAPAS */
   UPDATE IMPOSTONF
      SET NRSEQMAPOIMP = NULL
    WHERE NRSEQMAPOIMP = P_NRSEQUMAPAPU
      AND CDIMPOSTO    IN (SELECT CDIMPOSTO FROM IMPOSTO WHERE CDIMPOSTONFE IN P_CDIMPOSTONFE);
   /*UPDATE DAS NOTAS NA IMPBAIXAREC (REGIME DE CAIXA) PARA NULL EM CASO DE REAPURAÇÃO DE MAPAS*/
   UPDATE IMPBAIXAREC
      SET NRSEQUMAPAPU = NULL
    WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU;
   /*UPDATE DOS ITENS DA ITEMVENOUTIMPOSPARA NULL EM CASO DE REAPURACAO DE MAPAS */
   UPDATE ITEMVENOUTIMPOS
      SET NRSEQUMAPAPU = NULL
    WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU;
------------------------------------------------/*APURAÇÃO IMPOSTOS PRINCIPAIS(PIS OU COFINS)*/---------------------------
   /*GRAVA O SEQUENCIAL DO MAPA NA TABELA ITEMVENOUTIMPOS INDEPENDENTE DA FORMA DE APURAÇÃO*/
      UPDATE ITEMVENOUTIMPOS
         SET NRSEQUMAPAPU = DECODE(V_IDFORMAPUR,'P',NRSEQUMAPAPU,P_NRSEQUMAPAPU),
             NRSEQMAPOIMP = DECODE(V_IDFORMAPUR,'P',P_NRSEQUMAPAPU,NRSEQMAPOIMP)
       WHERE DECODE(V_IDFORMAPUR,'P',NRSEQMAPOIMP,NRSEQUMAPAPU) IS NULL
         AND NRLANCTONFFIS IS NOT NULL
         AND CDIMPOSTO IN (SELECT DISTINCT CDIMPOSTO
                             FROM IMPOSTO
                            WHERE CDIMPOSTONFE = P_CDIMPOSTONFE)
         AND (CDFILIAL, CDCAIXA, CDIMPOSTO, DTREDUCAOZ) IN (SELECT DISTINCT IP.CDFILIAL, IP.CDCAIXA, IP.CDIMPOSTO, IP.DTREDUCAOZ
                                                              FROM ITEMVENOUTIMPOS IP, FILIAL F, IMPOSTO I
                                                             WHERE F.CDEMPRESA = P_CDEMPRESA
                                                               AND F.CDFILIAL  = IP.CDFILIAL
                                                               AND IP.CDIMPOSTO = I.CDIMPOSTO
                                                               AND I.CDIMPOSTONFE = P_CDIMPOSTONFE
                                                               AND IP.NRLANCTONFFIS IS NOT NULL
                                                               AND (((V_IDNFFORAPERAPU='N') AND (TRUNC(IP.DTREDUCAOZ) BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                                   ((V_IDNFFORAPERAPU='S')  AND (IP.DTREFMAPAPU IS NULL) AND (TRUNC(IP.DTREDUCAOZ) BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                                   ((V_IDNFFORAPERAPU='S')  AND (IP.DTREFMAPAPU BETWEEN P_DTINICIAL AND P_DTFINAL) AND (TRUNC(IP.DTREDUCAOZ) BETWEEN V_DTINIFORPER AND P_DTFINAL))));
   /*-------------------APURACAO IMPOSTO POR DATA DE COMPETENCIA-------------*/
   /*NA APURAÇÃO POR PAGAMENTO GRAVA OS DADOS PARA PERMITIR VISUALIZAR O RESULTADO DA APURAÇÃO TAMBÉM POR COMPETÊNCIA*/
   IF V_IDFORMAPUR IN ('C','P') THEN
     /*UPDATE DAS NOTAS O NRSEQUMAPAPU ATUAL*/
      UPDATE IMPOSTONF
         SET NRSEQUMAPAPU = DECODE(V_IDFORMAPUR,'C',P_NRSEQUMAPAPU,NRSEQUMAPAPU),
             NRSEQMAPOIMP = DECODE(V_IDFORMAPUR,'C',NRSEQMAPOIMP,P_NRSEQUMAPAPU)
       WHERE DECODE(V_IDFORMAPUR,'C',NRSEQUMAPAPU,NRSEQMAPOIMP) IS NULL
         AND (NRLANCTONF, CDFILIAL, CDIMPOSTO) IN (SELECT IP.NRLANCTONF, IP.CDFILIAL, IP.CDIMPOSTO
                                                     FROM NOTAFISCAL N, TIPOOPERAC T, IMPOSTONF IP, IMPOSTO I
                                                    WHERE IDSTATUS IN ('E','A')
                                                      AND CDEMPRESA = P_CDEMPRESA
                                                      AND N.IDENTRSAIDOP = 'E'
                                                      AND N.CDTIPOOPER = T.CDTIPOOPER /*SÓ CONSIDERA OS TIPOS DE OPERAÇÃO QUE NA PARAMETROS DE FISCAL PARA COMPOR/DEDUZIR DO FATURAMENTO*/
                                                      AND N.IDENTRSAIDOP = T.IDENTRSAIDOP
                                                      AND T.IDTPFATAPURA IS NOT NULL
                                                      AND IP.CDFILIAL    = N.CDFILIAL
                                                      AND IP.NRLANCTONF  = N.NRLANCTONF
                                                      AND I.CDIMPOSTONFE = P_CDIMPOSTONFE
                                                      AND IP.CDIMPOSTO   = I.CDIMPOSTO
                                                      AND (((V_IDNFFORAPERAPU='N') AND (DTENTRSAID BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                           ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU IS NULL) AND (DTENTRSAID BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                           ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU BETWEEN P_DTINICIAL AND P_DTFINAL) AND (DTENTRSAID BETWEEN V_DTINIFORPER AND P_DTFINAL)))
                                                      AND IDSISTEMA <> 'PAG'
                                                      AND IDSISTEMA <> 'REC'
                                                      AND IDSISTEMA <> 'FIS'
                                                      AND IDSISTEMA <> 'TMP'
                                                      AND IP.NRSEQUMAPAPU IS NULL
                                                    UNION ALL
                                                   SELECT IP.NRLANCTONF, IP.CDFILIAL, IP.CDIMPOSTO
                                                     FROM NOTAFISCAL N, TIPOOPERAC T, IMPOSTONF IP, IMPOSTO I
                                                    WHERE IDSTATUS IN ('E','A')
                                                      AND CDEMPRESA = P_CDEMPRESA
                                                      AND N.IDENTRSAIDOP = 'S'
                                                      AND N.CDTIPOOPER = T.CDTIPOOPER /*SÓ CONSIDERA OS TIPOS DE OPERAÇÃO QUE NA PARAMETROS DE FISCAL PARA COMPOR/DEDUZIR DO FATURAMENTO*/
                                                      AND N.IDENTRSAIDOP = T.IDENTRSAIDOP
                                                      AND T.IDTPFATAPURA IS NOT NULL
                                                      AND IP.CDFILIAL    = N.CDFILIAL
                                                      AND IP.NRLANCTONF  = N.NRLANCTONF
                                                      AND I.CDIMPOSTONFE = P_CDIMPOSTONFE
                                                      AND IP.CDIMPOSTO   = I.CDIMPOSTO
                                                      AND IP.NRSEQUMAPAPU IS NULL
                                                      AND (((V_IDNFFORAPERAPU='N') AND (DTEMISSAO BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                           ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU IS NULL) AND (DTEMISSAO BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                           ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU BETWEEN P_DTINICIAL AND P_DTFINAL) AND (DTEMISSAO BETWEEN V_DTINIFORPER AND P_DTFINAL)))
                                                      AND IDSISTEMA <> 'PAG'
                                                      AND IDSISTEMA <> 'REC'
                                                      AND IDSISTEMA <> 'FIS'
                                                      AND IDSISTEMA <> 'TMP');
   END IF;
   /*-------------------APURACAO IMPOSTO POR DATA DE ENTRADA/SAIDA-------------*/
   IF V_IDFORMAPUR = 'D' THEN
      UPDATE IMPOSTONF
         SET NRSEQUMAPAPU = P_NRSEQUMAPAPU
       WHERE NRSEQUMAPAPU IS NULL
         AND (NRLANCTONF, CDFILIAL, CDIMPOSTO) IN (SELECT IP.NRLANCTONF, IP.CDFILIAL, IP.CDIMPOSTO
                                                     FROM NOTAFISCAL N, TIPOOPERAC T, IMPOSTONF IP, IMPOSTO I
                                                    WHERE IDSTATUS IN ('E','A')
                                                      AND CDEMPRESA = P_CDEMPRESA
                                                      AND N.CDTIPOOPER = T.CDTIPOOPER /*SÓ CONSIDERA OS TIPOS DE OPERAÇÃO QUE NA PARAMETROS DE FISCAL PARA COMPOR/DEDUZIR DO FATURAMENTO*/
                                                      AND N.IDENTRSAIDOP = T.IDENTRSAIDOP
                                                      AND T.IDTPFATAPURA IS NOT NULL
                                                      AND IP.CDFILIAL    = N.CDFILIAL
                                                      AND IP.NRLANCTONF  = N.NRLANCTONF
                                                      AND I.CDIMPOSTONFE = P_CDIMPOSTONFE
                                                      AND IP.CDIMPOSTO   = I.CDIMPOSTO
                                                      AND IP.NRSEQUMAPAPU IS NULL
                                                      AND (((V_IDNFFORAPERAPU='N') AND (DTENTRSAID BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                           ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU IS NULL) AND (DTENTRSAID BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                           ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU BETWEEN P_DTINICIAL AND P_DTFINAL) AND (DTENTRSAID BETWEEN V_DTINIFORPER AND P_DTFINAL)))
                                                      AND IDSISTEMA <> 'PAG'
                                                      AND IDSISTEMA <> 'REC'
                                                      AND IDSISTEMA <> 'FIS'
                                                      AND IDSISTEMA <> 'TMP');
   END IF;
   /*-------------------APURACAO IMPOSTO POR DATA DE EMISSAO-------------*/
   IF V_IDFORMAPUR = 'E' THEN
      UPDATE IMPOSTONF
         SET NRSEQUMAPAPU = P_NRSEQUMAPAPU
       WHERE NRSEQUMAPAPU IS NULL
         AND (NRLANCTONF, CDFILIAL, CDIMPOSTO) IN (SELECT IP.NRLANCTONF, IP.CDFILIAL, IP.CDIMPOSTO
                                                     FROM NOTAFISCAL N, TIPOOPERAC T, IMPOSTONF IP, IMPOSTO I
                                                    WHERE IDSTATUS IN ('E','A')
                                                      AND CDEMPRESA = P_CDEMPRESA
                                                      AND N.CDTIPOOPER = T.CDTIPOOPER /*SÓ CONSIDERA OS TIPOS DE OPERAÇÃO QUE NA PARAMETROS DE FISCAL PARA COMPOR/DEDUZIR DO FATURAMENTO*/
                                                      AND N.IDENTRSAIDOP = T.IDENTRSAIDOP
                                                      AND T.IDTPFATAPURA IS NOT NULL
                                                      AND IP.CDFILIAL    = N.CDFILIAL
                                                      AND IP.NRLANCTONF  = N.NRLANCTONF
                                                      AND I.CDIMPOSTONFE = P_CDIMPOSTONFE
                                                      AND IP.CDIMPOSTO   = I.CDIMPOSTO
                                                      AND IP.NRSEQUMAPAPU IS NULL
                                                      AND (((V_IDNFFORAPERAPU='N') AND (DTEMISSAO BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                           ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU IS NULL) AND (DTEMISSAO BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                           ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU BETWEEN P_DTINICIAL AND P_DTFINAL) AND (DTEMISSAO BETWEEN V_DTINIFORPER AND P_DTFINAL)))
                                                      AND IDSISTEMA <> 'PAG'
                                                      AND IDSISTEMA <> 'REC'
                                                      AND IDSISTEMA <> 'FIS'
                                                      AND IDSISTEMA <> 'TMP');
   END IF;
   /*-------------------APURACAO IMPOSTO POR DATA DE PAGAMENTO-------------*/
   IF V_IDFORMAPUR = 'P' THEN
      /*MARCA NOTAS ENTRADAS*/
      UPDATE IMPOSTONF
         SET NRSEQUMAPAPU = P_NRSEQUMAPAPU
       WHERE NRSEQUMAPAPU IS NULL
         AND (NRLANCTONF, CDFILIAL, CDIMPOSTO) IN (SELECT IP.NRLANCTONF, IP.CDFILIAL, IP.CDIMPOSTO
                                                    FROM NOTAFISCAL N, TIPOOPERAC T, IMPOSTONF IP, IMPOSTO I,
                                                         (SELECT C.CDFILIAL, C.NRLANCTONF, MIN(BX.DTBAIXAPAG) AS DTBAIXAPAG
                                                            FROM CONTAPAGAR C, BOLETPAGAR B, BAIXAPAGA BX
                                                           WHERE C.CDFILIBPAG   = B.CDFILIAL
                                                             AND C.NRLANBOLPAG  = B.NRLANBOLPAG
                                                             AND B.CDFILIBAIPAG = BX.CDFILIAL
                                                             AND B.NRBAIXAPAG   = BX.NRBAIXAPAG
                                                             AND BX.CDEMPRESA   = P_CDEMPRESA
                                                           GROUP BY C.CDFILIAL, C.NRLANCTONF
                                                           UNION ALL
                                                          SELECT D.CDFILIAL, D.NRLANCTONF, MIN(BX.DTBAIXAREC) AS DTBAIXAPAG
                                                            FROM BOLETRECEBER B, BAIXARECEBIDA BX, DEVOLUCAOREC D
                                                           WHERE D.CDFILIBOLREC = B.CDFILIAL
                                                             AND D.NRLANBOLREC  = B.NRLANBOLREC
                                                             AND B.NRBAIXAREC   = BX.NRBAIXAREC
                                                             AND B.CDFILIBAIREC = BX.CDFILIAL
                                                             AND BX.CDEMPRESA   = P_CDEMPRESA
                                                           GROUP BY D.CDFILIAL, D.NRLANCTONF) A
                                                   WHERE N.CDEMPRESA  = P_CDEMPRESA
                                                     AND IDSTATUS  IN ('A','E')
                                                     AND N.IDENTRSAIDOP = 'E'
                                                     AND N.CDTIPOOPER = T.CDTIPOOPER /*SÓ CONSIDERA OS TIPOS DE OPERAÇÃO QUE NA PARAMETROS DE FISCAL PARA COMPOR/DEDUZIR DO FATURAMENTO*/
                                                     AND N.IDENTRSAIDOP = T.IDENTRSAIDOP
                                                     AND T.IDTPFATAPURA IS NOT NULL
                                                     AND IP.CDFILIAL    = N.CDFILIAL
                                                     AND IP.NRLANCTONF  = N.NRLANCTONF
                                                     AND I.CDIMPOSTONFE = P_CDIMPOSTONFE
                                                     AND IP.CDIMPOSTO   = I.CDIMPOSTO
                                                     AND IP.NRSEQUMAPAPU IS NULL
                                                     AND N.CDFILIAL = A.CDFILIAL
                                                     AND N.NRLANCTONF = A.NRLANCTONF
                                                     AND (((V_IDNFFORAPERAPU='N') AND (A.DTBAIXAPAG BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                          ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU IS NULL) AND (A.DTBAIXAPAG BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                          ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU BETWEEN P_DTINICIAL AND P_DTFINAL) AND (A.DTBAIXAPAG BETWEEN V_DTINIFORPER AND P_DTFINAL)))
                                                     AND IDSISTEMA <> 'PAG'
                                                     AND IDSISTEMA <> 'REC'
                                                     AND IDSISTEMA <> 'FIS'
                                                     AND IDSISTEMA <> 'TMP'
                                                     AND V_IDCONSVRIMPAG = 'T');
      /*MARCA NOTAS SAIDAS*/
      UPDATE IMPOSTONF
         SET NRSEQUMAPAPU = P_NRSEQUMAPAPU
       WHERE NRSEQUMAPAPU IS NULL
         AND (NRLANCTONF, CDFILIAL, CDIMPOSTO) IN (SELECT IP.NRLANCTONF, IP.CDFILIAL, IP.CDIMPOSTO
                                                    FROM NOTAFISCAL N, TIPOOPERAC T, IMPOSTONF IP, IMPOSTO I,
                                                         (SELECT C.CDFILIAL, C.NRLANCTONF, MIN(BX.DTBAIXAREC) AS DTBAIXAREC
                                                            FROM CONTARECEBER C, BOLETRECEBER B, BAIXARECEBIDA BX
                                                           WHERE C.CDFILIBOLREC = B.CDFILIAL
                                                             AND C.NRLANBOLREC  = B.NRLANBOLREC
                                                             AND B.CDFILIBAIREC = BX.CDFILIAL
                                                             AND B.NRBAIXAREC   = BX.NRBAIXAREC
                                                             AND BX.CDEMPRESA   = P_CDEMPRESA
                                                           GROUP BY C.CDFILIAL, C.NRLANCTONF
                                                           UNION ALL
                                                          SELECT D.CDFILIAL, D.NRLANCTONF, MIN(BX.DTBAIXAPAG) AS DTBAIXAREC
                                                            FROM BOLETPAGAR B, BAIXAPAGA BX, DEVOLUCAOPAG D
                                                           WHERE D.CDFILIBOLPAG = B.CDFILIAL
                                                             AND D.NRLANBOLPAG  = B.NRLANBOLPAG
                                                             AND B.NRBAIXAPAG   = BX.NRBAIXAPAG
                                                             AND B.CDFILIBAIPAG = BX.CDFILIAL
                                                             AND BX.CDEMPRESA   = P_CDEMPRESA
                                                           GROUP BY D.CDFILIAL, D.NRLANCTONF) A
                                                   WHERE N.CDEMPRESA  = P_CDEMPRESA
                                                     AND IDSTATUS  IN ('A','E')
                                                     AND N.IDENTRSAIDOP = 'S'
                                                     AND N.CDTIPOOPER = T.CDTIPOOPER /*SÓ CONSIDERA OS TIPOS DE OPERAÇÃO QUE NA PARAMETROS DE FISCAL PARA COMPOR/DEDUZIR DO FATURAMENTO*/
                                                     AND N.IDENTRSAIDOP = T.IDENTRSAIDOP
                                                     AND T.IDTPFATAPURA IS NOT NULL
                                                     AND IP.CDFILIAL    = N.CDFILIAL
                                                     AND IP.NRLANCTONF  = N.NRLANCTONF
                                                     AND I.CDIMPOSTONFE = P_CDIMPOSTONFE
                                                     AND IP.CDIMPOSTO   = I.CDIMPOSTO
                                                     AND IP.NRSEQUMAPAPU IS NULL
                                                     AND N.CDFILIAL = A.CDFILIAL
                                                     AND N.NRLANCTONF = A.NRLANCTONF
                                                     AND (((V_IDNFFORAPERAPU='N') AND (A.DTBAIXAREC BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                          ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU IS NULL) AND (A.DTBAIXAREC BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                          ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU BETWEEN P_DTINICIAL AND P_DTFINAL) AND (A.DTBAIXAREC BETWEEN V_DTINIFORPER AND P_DTFINAL)))
                                                     AND IDSISTEMA <> 'PAG'
                                                     AND IDSISTEMA <> 'REC'
                                                     AND IDSISTEMA <> 'FIS'
                                                     AND IDSISTEMA <> 'TMP'
                                                     AND V_IDCONSVRIMPAG = 'T');
      /*REGIME DE CAIXA ATRAVÉS DA TABELA PREENCHIDA NO FINANCEIRO*/
      UPDATE IMPBAIXAREC
         SET NRSEQUMAPAPU = P_NRSEQUMAPAPU
       WHERE NRSEQUMAPAPU IS NULL
         AND (NRLANCTONF, CDFILIAL, CDIMPOSTO, DTBAIXAREC) IN (SELECT B.NRLANCTONF, B.CDFILIAL, B.CDIMPOSTO, B.DTBAIXAREC
                                                                 FROM NOTAFISCAL N, TIPOOPERAC T, IMPOSTO I, IMPBAIXAREC B
                                                                WHERE N.CDEMPRESA    = P_CDEMPRESA
                                                                  AND N.IDSTATUS     IN ('A','E')
                                                                  AND N.CDTIPOOPER   = T.CDTIPOOPER /*SÓ CONSIDERA OS TIPOS DE OPERAÇÃO QUE NA PARAMETROS DE FISCAL PARA COMPOR/DEDUZIR DO FATURAMENTO*/
                                                                  AND N.IDENTRSAIDOP = T.IDENTRSAIDOP
                                                                  AND T.IDTPFATAPURA IS NOT NULL
                                                                  AND B.CDFILIAL     = N.CDFILIAL
                                                                  AND B.NRLANCTONF   = N.NRLANCTONF
                                                                  AND I.CDIMPOSTONFE = P_CDIMPOSTONFE
                                                                  AND I.CDIMPOSTO    = B.CDIMPOSTO
                                                                  AND B.NRSEQUMAPAPU IS NULL
                                                                  AND (((V_IDNFFORAPERAPU='N') AND (B.DTBAIXAREC BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                                       ((V_IDNFFORAPERAPU='S') AND (B.DTREFMAPAPU IS NULL) AND (B.DTBAIXAREC BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                                       ((V_IDNFFORAPERAPU='S') AND (B.DTREFMAPAPU BETWEEN P_DTINICIAL AND P_DTFINAL) AND (B.DTBAIXAREC BETWEEN V_DTINIFORPER AND P_DTFINAL)))
                                                                  AND IDSISTEMA <> 'PAG'
                                                                  AND IDSISTEMA <> 'REC'
                                                                  AND IDSISTEMA <> 'FIS'
                                                                  AND V_IDCONSVRIMPAG = 'P'
                                                                  AND (B.NRLANCTONF, B.CDFILIAL) NOT IN (SELECT NRLANCTONF, CDFILIAL
                                                                                                           FROM IMPOSTONF IP, IMPOSTO IM
                                                                                                          WHERE IM.CDIMPOSTONFE = P_CDIMPOSTONFE
                                                                                                            AND IM.CDIMPOSTO    = IP.CDIMPOSTO
                                                                                                            AND IP.NRSEQUMAPAPU IS NOT NULL));
   END IF;
   /*---Grava os créditos de benfeitorias/amortização---*/
   GRAVA_BENFEITORIA_CONTRIB(P_CDEMPRESA, P_DTINICIAL, P_DTFINAL);
   /*---CALCULO DO VALOR CONTÁBIL, BASE DE CÁLCULO E IMPOSTO DAS ENTRADAS-----*/
   SELECT SUM(VRCONTABIL),   SUM(VRBASECALC),  SUM(VRIMPOSTO),  SUM(VRDEVOLVEND), SUM(VRIMPDEVVEND), SUM(VRBENFEITORIA),
          SUM(VRCTBLNFENTR), SUM(VRCTBLDVEND), SUM(VRBCCREDNF), SUM(VRBCCREDBENF)
     INTO V_VCENTR,          V_BCENTR,         V_VRIMPENTR,     V_VRDEVOLVEND,    V_VRIMPDEVVEND,    V_VRBENFEITORIA,
          V_VRCTBLNFENTR,    V_VRCTBLDVEND,    V_VRBCCREDNF,    V_VRBCCREDBENF
     FROM (/*ENTRADAS EXCETO DEVOLUCOES DE VENDAS/BASE E IMPOSTO SÃO ZERADO PARA REGIME CUMULATIVO*/
           SELECT SUM(VRCONTABILNF) AS VRCONTABIL,
                  SUM(CASE WHEN P_CDIMPOSTONFE IN ('55','65')
                           THEN DECODE(CDFISCALNF,'1', VRBASECALCNF,0)
                           ELSE DECODE(F.IDCUMUPISCOFIL,'S',DECODE(CDFISCALNF,'1', VRBASECALCNF,0),0)
                           END) AS VRBASECALC,
                  SUM(CASE WHEN P_CDIMPOSTONFE IN ('55','65')
                           THEN DECODE(CDFISCALNF,'1', VRIMPOSTONF,0)
                           ELSE DECODE(F.IDCUMUPISCOFIL,'S',DECODE(CDFISCALNF,'1', VRIMPOSTONF,0),0)
                           END) AS VRIMPOSTO,
                  0 AS VRDEVOLVEND,
                  0 AS VRIMPDEVVEND,
                  0 AS VRBENFEITORIA,
                  SUM(VRCONTABILNF) AS VRCTBLNFENTR,
                  0 AS VRCTBLDVEND,
                  SUM(CASE WHEN P_CDIMPOSTONFE IN ('55','65')
                           THEN DECODE(CDFISCALNF,'1', VRBASECALCNF,0)
                           ELSE DECODE(F.IDCUMUPISCOFIL,'S',DECODE(CDFISCALNF,'1', VRBASECALCNF,0),0)
                           END) AS VRBCCREDNF,
                  0 AS VRBCCREDBENF
             FROM IMPOSTONF I, NOTAFISCAL N, FILIAL F
            WHERE I.NRSEQUMAPAPU = P_NRSEQUMAPAPU
              AND I.NRLANCTONF   = N.NRLANCTONF
              AND I.CDFILIAL     = N.CDFILIAL
              AND N.IDENTRSAIDOP = 'E'
              AND N.CDFILIRECE   = F.CDFILIAL
              AND NOT EXISTS (SELECT CDCFOPPADRAO
                                FROM CFOPPADRAO C
                               WHERE C.CDCFOPPADRAO = I.CDFISCOPERNF
                                 AND C.IDTIPOCFOP = 'D')
           UNION ALL
           /*ENTRADAS NO REGIME DE CAIXA - TABELA DO FINANCEIRO*/
           SELECT SUM(ROUND(VRPROPREC,2)) AS VRCONTABIL,
                  SUM(CASE WHEN P_CDIMPOSTONFE IN ('55','65')
                           THEN ROUND(DECODE(CDFISCALNF,'1', VRPROPRECBC,0),2)
                           ELSE ROUND(DECODE(F.IDCUMUPISCOFIL,'S',DECODE(CDFISCALNF,'1', VRPROPRECBC,0),0),2)
                           END) AS VRBASECALC,
                  SUM(CASE WHEN P_CDIMPOSTONFE IN ('55','65')
                           THEN ROUND(DECODE(CDFISCALNF,'1', (VRPROPRECBC * VRALIQNF/100),0),2)
                           ELSE ROUND(DECODE(F.IDCUMUPISCOFIL,'S',DECODE(CDFISCALNF,'1', (VRPROPRECBC * VRALIQNF/100),0),0),2)
                           END) AS VRIMPOSTO,
                  0 AS VRDEVOLVEND,
                  0 AS VRIMPDEVVEND,
                  0 AS VRBENFEITORIA,
                  SUM(ROUND(VRPROPREC,2)) AS VRCTBLNFENTR,
                  0 AS VRCTBLDVEND,
                  SUM(CASE WHEN P_CDIMPOSTONFE IN ('55','65')
                           THEN ROUND(DECODE(CDFISCALNF,'1', VRPROPRECBC,0),2)
                           ELSE ROUND(DECODE(F.IDCUMUPISCOFIL,'S',DECODE(CDFISCALNF,'1', VRPROPRECBC,0),0),2)
                           END) AS VRBCCREDNF,
                  0 AS VRBCCREDBENF
             FROM IMPBAIXAREC I, NOTAFISCAL N, FILIAL F
            WHERE I.NRSEQUMAPAPU = P_NRSEQUMAPAPU
              AND I.NRLANCTONF   = N.NRLANCTONF
              AND I.CDFILIAL     = N.CDFILIAL
              AND N.IDENTRSAIDOP = 'E'
              AND N.CDFILIRECE   = F.CDFILIAL
              AND NOT EXISTS (SELECT CDCFOPPADRAO
                                FROM CFOPPADRAO C
                               WHERE C.CDCFOPPADRAO = I.CDFISCOPERNF
                                 AND C.IDTIPOCFOP = 'D')
            UNION ALL
           /*VENDAS CANCELADAS/DEVOLUCAO DE VENDAS - ACRESCEM NO VALOR CONTABIL POR SE TRATAR DE ENTRADAS*/
           SELECT SUM(VRCONTABILNF) AS VRCONTABIL,
                  0 AS VRBASECALC,
                  0 AS VRIMPOSTO,
                  SUM(DECODE(CDFISCALNF,'1', VRBASECALCNF,0)) AS VRDEVOLVEND,
                  SUM(DECODE(CDFISCALNF,'1', VRIMPOSTONF,0)) AS VRIMPDEVVEND,
                  0 AS VRBENFEITORIA,
                  0 AS VRCTBLNFENTR,
                  SUM(VRCONTABILNF) AS VRCTBLDVEND,
                  0 AS VRBCCREDNF,
                  0 AS VRBCCREDBENF
             FROM NOTAFISCAL N, IMPOSTONF I, CFOPPADRAO C
            WHERE I.NRSEQUMAPAPU = P_NRSEQUMAPAPU
              AND I.CDFILIAL     = N.CDFILIAL
              AND I.NRLANCTONF   = N.NRLANCTONF
              AND N.IDENTRSAIDOP = 'E'
              AND C.CDCFOPPADRAO = I.CDFISCOPERNF
              AND C.IDTIPOCFOP   = 'D'
            UNION ALL
           /*DEVOLUCAO DE VENDAS - REGIME DE CAIXA*/
           SELECT SUM(ROUND(VRPROPREC,2)) AS VRCONTABIL,
                  0 AS VRBASECALC,
                  0 AS VRIMPOSTO,
                  SUM(DECODE(CDFISCALNF,'1', ROUND(VRPROPRECBC,2),0)) AS VRDEVOLVEND,
                  SUM(DECODE(CDFISCALNF,'1', ROUND(VRPROPRECBC*VRALIQNF/100,2),0)) AS VRIMPDEVVEND,
                  0 AS VRBENFEITORIA,
                  0 AS VRCTBLNFENTR,
                  SUM(ROUND(VRPROPREC,2)) AS VRCTBLDVEND,
                  0 AS VRBCCREDNF,
                  0 AS VRBCCREDBENF
             FROM NOTAFISCAL N, IMPBAIXAREC I, CFOPPADRAO C
            WHERE I.NRSEQUMAPAPU = P_NRSEQUMAPAPU
              AND I.CDFILIAL     = N.CDFILIAL
              AND I.NRLANCTONF   = N.NRLANCTONF
              AND N.IDENTRSAIDOP = 'E'
              AND C.CDCFOPPADRAO = I.CDFISCOPERNF
              AND C.IDTIPOCFOP   = 'D'
            UNION ALL
           /*BENFEITORIA/AMORTIZAÇÃO*/
           SELECT 0 AS VRCONTABIL,
                  SUM(C.VRPARCELA) AS VRBASECALC,
                  0 AS VRIMPOSTO,
                  0 AS VRDEVOLVEND,
                  0 AS VRIMPDEVVEND,
                  SUM(ROUND(C.VRPARCELA * (DECODE(P_CDIMPOSTONFE,'50',C.VRALIQPIS,C.VRALIQCOFINS)/100),2)) AS VRBENFEITORIA,
                  0 AS VRCTBLNFENTR,
                  0 AS VRCTBLDVEND,
                  0 AS VRBCCREDNF,
                  SUM(C.VRPARCELA) AS VRBCCREDBENF
             FROM CREDBENFEITAPUR C
            WHERE C.CDEMPRESA = P_CDEMPRESA
              AND P_DTINICIAL BETWEEN C.DTINICREDITO AND C.DTFIMCREDITO);
   /*---CÁLCULO DO VALOR CONTÁBIL, BASE DE CÁLCULO E IMPOSTO DAS SAIDAS-----*/
   SELECT SUM(VRCONTABIL),    SUM(VRBASECALC),    SUM(VROUTRREC),      SUM(VRIMPNAOCUMU),
          SUM(VRIMPCUMU),     SUM(VRIMPECF),      SUM(VRDEVCOMPR),     SUM(VRIMPDEVCOMP),
          SUM(VRCTBLNFSAID),  SUM(VRCTBLVENDAS),  SUM(VRCTBLDCOMP),    SUM(VRBCDEBNF),
          SUM(VRBCDEBECF),    SUM(VRBCDEBOUTREC), SUM(VRECFNCUMU),     SUM(VRECFCUMU),
          SUM(VRDEBNFSAIDNC), SUM(VRDEBOUTRECNC), SUM(VRBEDNFSAIDCUM), SUM(VRDEBOUTRECCUM)
     INTO V_VCSAIDA,       V_BCSAIDA,       V_OUTRRECSAIDA,   V_IMPNCUMSAIDA,
          V_IMPCUMSAIDA,   V_VRIMPECF,      V_VRDEVCOMPR,     V_VRIMPDEVCOMP,
          V_VRCTBLNFSAID,  V_VRCTBLVENDAS,  V_VRCTBLDCOMP,    V_VRBCDEBNF,
          V_VRBCDEBECF,    V_VRBCDEBOUTREC, V_VRECFNCUMU,     V_VRECFCUMU,
          V_VRDEBNFSAIDNC, V_VRDEBOUTRECNC, V_VRBEDNFSAIDCUM, V_VRDEBOUTRECCUM
     FROM (/*NOTAS NAO CUMULATIVO*/
           SELECT SUM(VRCONTABILNF) AS VRCONTABIL,
                  SUM(DECODE(CDFISCALNF,'1', VRBASECALCNF,0)) AS VRBASECALC,
                  SUM(DECODE(CDFISCALNF,'1', VRIMPOSTONF,0)) AS VRIMPNAOCUMU,
                  0 AS VRIMPCUMU,
                  0 AS VROUTRREC,
                  0 AS VRIMPECF,
                  0 AS VRDEVCOMPR,
                  0 AS VRIMPDEVCOMP,
                  SUM(VRCONTABILNF) AS VRCTBLNFSAID,
                  0 AS VRCTBLVENDAS,
                  0 AS VRCTBLDCOMP,
                  SUM(DECODE(CDFISCALNF,'1', VRBASECALCNF,0)) AS VRBCDEBNF,
                  0 AS VRBCDEBECF,
                  0 AS VRBCDEBOUTREC,
                  0 AS VRECFNCUMU,
                  0 AS VRECFCUMU,
                  SUM(DECODE(CDFISCALNF,'1', VRIMPOSTONF,0)) AS VRDEBNFSAIDNC,
                  0 AS VRDEBOUTRECNC,
                  0 AS VRBEDNFSAIDCUM,
                  0 AS VRDEBOUTRECCUM
             FROM IMPOSTONF I, NOTAFISCAL N, FILIAL F
            WHERE NRSEQUMAPAPU     = P_NRSEQUMAPAPU
              AND I.NRLANCTONF     = N.NRLANCTONF
              AND I.CDFILIAL       = N.CDFILIAL
              AND F.CDFILIAL       = N.CDFILIEMIT
              AND N.CDEMPRESA      = P_CDEMPRESA
              AND N.IDENTRSAIDOP   = 'S'
              AND F.IDCUMUPISCOFIL = 'S'
              AND NOT EXISTS (SELECT CDCFOPPADRAO
                                FROM CFOPPADRAO C
                               WHERE C.CDCFOPPADRAO = I.CDFISCOPERNF
                                 AND C.IDTIPOCFOP = 'D')
            /*NOTAS CUMULATIVA*/
            UNION ALL
           SELECT SUM(VRCONTABILNF) AS VRCONTABIL,
                  SUM(DECODE(CDFISCALNF,'1', VRBASECALCNF,0)) AS VRBASECALC,
                  0 AS VRIMPNAOCUMU,
                  SUM(DECODE(CDFISCALNF,'1', VRIMPOSTONF,0)) AS VRIMPCUMU,
                  0 AS VROUTRREC,
                  0 AS VRIMPECF,
                  0 AS VRDEVCOMPR,
                  0 AS VRIMPDEVCOMP,
                  SUM(VRCONTABILNF) AS VRCTBLNFSAID,
                  0 AS VRCTBLVENDAS,
                  0 AS VRCTBLDCOMP,
                  SUM(DECODE(CDFISCALNF,'1', VRBASECALCNF,0)) AS VRBCDEBNF,
                  0 AS VRBCDEBECF,
                  0 AS VRBCDEBOUTREC,
                  0 AS VRECFNCUMU,
                  0 AS VRECFCUMU,
                  0 AS VRDEBNFSAIDNC,
                  0 AS VRDEBOUTRECNC,
                  SUM(DECODE(CDFISCALNF,'1', VRIMPOSTONF,0)) AS VRBEDNFSAIDCUM,
                  0 AS VRDEBOUTRECCUM
             FROM IMPOSTONF I, NOTAFISCAL N, FILIAL F
            WHERE NRSEQUMAPAPU     = P_NRSEQUMAPAPU
              AND I.NRLANCTONF     = N.NRLANCTONF
              AND I.CDFILIAL       = N.CDFILIAL
              AND F.CDFILIAL       = N.CDFILIEMIT
              AND N.CDEMPRESA      = P_CDEMPRESA
              AND N.IDENTRSAIDOP   = 'S'
              AND F.IDCUMUPISCOFIL = 'N'
              AND NOT EXISTS (SELECT CDCFOPPADRAO
                                FROM CFOPPADRAO C
                               WHERE C.CDCFOPPADRAO = I.CDFISCOPERNF
                                 AND C.IDTIPOCFOP = 'D')
            UNION ALL
            /*NOTAS NO REGIME DE CAIXA - TABELA DO FINANCEIRO*/
           SELECT SUM(ROUND(VRPROPREC,2)) AS VRCONTABIL,
                  SUM(DECODE(CDFISCALNF,'1', ROUND(VRPROPRECBC,2),0)) AS VRBASECALC,
                  SUM(DECODE(IDCUMUPISCOFIL,'N',0,DECODE(CDFISCALNF,'1',ROUND(VRPROPRECBC*VRALIQNF/100,2),0))) AS VRIMPNAOCUMU,
                  SUM(DECODE(IDCUMUPISCOFIL,'N',DECODE(CDFISCALNF,'1',ROUND(VRPROPRECBC*VRALIQNF/100,2),0),0)) AS VRIMPCUMU,
                  0 AS VROUTRREC,
                  0 AS VRIMPECF,
                  0 AS VRDEVCOMPR,
                  0 AS VRIMPDEVCOMP,
                  SUM(ROUND(VRPROPREC,2)) AS VRCTBLNFSAID,
                  0 AS VRCTBLVENDAS,
                  0 AS VRCTBLDCOMP,
                  SUM(DECODE(CDFISCALNF,'1', ROUND(VRPROPRECBC,2),0)) AS VRBCDEBNF,
                  0 AS VRBCDEBECF,
                  0 AS VRBCDEBOUTREC,
                  0 AS VRECFNCUMU,
                  0 AS VRECFCUMU,
                  SUM(DECODE(IDCUMUPISCOFIL,'N',0,DECODE(CDFISCALNF,'1',ROUND(VRPROPRECBC*VRALIQNF/100,2),0))) AS VRDEBNFSAIDNC,
                  0 AS VRDEBOUTRECNC,
                  SUM(DECODE(IDCUMUPISCOFIL,'N',DECODE(CDFISCALNF,'1',ROUND(VRPROPRECBC*VRALIQNF/100,2),0),0)) AS VRBEDNFSAIDCUM,
                  0 AS VRDEBOUTRECCUM
             FROM IMPBAIXAREC I, NOTAFISCAL N, FILIAL F
            WHERE NRSEQUMAPAPU     = P_NRSEQUMAPAPU
              AND I.NRLANCTONF     = N.NRLANCTONF
              AND I.CDFILIAL       = N.CDFILIAL
              AND F.CDFILIAL       = N.CDFILIEMIT
              AND N.CDEMPRESA      = P_CDEMPRESA
              AND N.IDENTRSAIDOP   = 'S'
              AND NOT EXISTS (SELECT CDCFOPPADRAO
                                FROM CFOPPADRAO C
                               WHERE C.CDCFOPPADRAO = I.CDFISCOPERNF
                                 AND C.IDTIPOCFOP   = 'D')
            UNION ALL
           SELECT 0 AS VRCONTABIL,
                  SUM(VRBASECALC) AS VRBASECALC,
                  SUM(VRIMPNAOCUMU) AS VRIMPNAOCUMU,
                  0 AS VRIMPCUMU,
                  SUM(VROUTRREC) AS VROUTRREC,
                  0 AS VRIMPECF,
                  0 AS VRDEVCOMPR,
                  0 AS VRIMPDEVCOMP,
                  0 AS VRCTBLNFSAID,
                  0 AS VRCTBLVENDAS,
                  0 AS VRCTBLDCOMP,
                  0 AS VRBCDEBNF,
                  0 AS VRBCDEBECF,
                  SUM(VRBASECALC) AS VRBCDEBOUTREC,
                  0 AS VRECFNCUMU,
                  0 AS VRECFCUMU,
                  0 AS VRDEBNFSAIDNC,
                  SUM(VRIMPNAOCUMU) AS VRDEBOUTRECNC,
                  0 AS VRBEDNFSAIDCUM,
                  0 AS VRDEBOUTRECCUM
             FROM (SELECT ROUND(SUM(  CASE WHEN CDSITUTRIBPICO IN ('01','02','03','05') THEN LC.VRLANCAMENT ELSE 0 END),4) AS VRBASECALC,
                          ROUND(SUM(((CASE WHEN CDSITUTRIBPICO IN ('01','02','03','05') THEN LC.VRLANCAMENT ELSE 0 END) * DECODE(P_CDIMPOSTONFE,'50',VRALIQPIS,VRALIQCOFINS))/100),2) AS VRIMPNAOCUMU,
                          SUM(LC.VRLANCAMENT) AS VROUTRREC, LC.CDCONTCTBL
                     FROM OUTRECCONT OT, OUTRECCONTCTBL OTC , LANCCONT LC
                    WHERE OT.CDEMPRESA    = P_CDEMPRESA
                      AND OT.CDEMPRESA    = OTC.CDEMPRESA
                      AND OT.CDOUTRECCONT = OTC.CDOUTRECCONT
                      AND LC.CDEMPRESA    = OTC.CDEMPRESA
                      AND LC.CDCONTCTBL   LIKE OTC.CDCONTCTBL||'%'
                      AND LC.IDLANCINTE   NOT IN ('F','S')
                      AND LC.DTLANCCONT   BETWEEN P_DTINICIAL AND P_DTFINAL
                      AND (OT.DTFIMVALID  >= LC.DTLANCCONT OR OT.DTFIMVALID IS NULL)
                      AND OT.IDCUMUPISCOFIL = 'S'
                      AND P_CDIMPOSTONFE  IN ('50','60')
                      AND ((LC.VRLANCAMENT > 0 AND OTC.IDCONSVRDEB = 'N') OR (OTC.IDCONSVRDEB = 'S'))
                    GROUP BY LC.CDCONTCTBL)
            WHERE VROUTRREC > 0
            UNION ALL
           /*OUTRAS RECEITAS CUMULATIVAS*/
           SELECT 0 AS VRCONTABIL,
                  SUM(VRBASECALC) AS VRBASECALC,
                  0 AS VRIMPNAOCUMU,
                  SUM(VRIMPCUMU) AS VRIMPCUMU,
                  SUM(VROUTRREC) AS VROUTRREC,
                  0 AS VRIMPECF,
                  0 AS VRDEVCOMPR,
                  0 AS VRIMPDEVCOMP,
                  0 AS VRCTBLNFSAID,
                  0 AS VRCTBLVENDAS,
                  0 AS VRCTBLDCOMP,
                  0 AS VRBCDEBNF,
                  0 AS VRBCDEBECF,
                  SUM(VRBASECALC) AS VRBCDEBOUTREC,
                  0 AS VRECFNCUMU,
                  0 AS VRECFCUMU,
                  0 AS VRDEBNFSAIDNC,
                  0 AS VRDEBOUTRECNC,
                  0 AS VRBEDNFSAIDCUM,
                  SUM(VRIMPCUMU) AS VRDEBOUTRECCUM
             FROM (SELECT ROUND(SUM(  CASE WHEN CDSITUTRIBPICO IN ('01','02','03','05') THEN LC.VRLANCAMENT ELSE 0 END),4) AS VRBASECALC,
                          ROUND(SUM(((CASE WHEN CDSITUTRIBPICO IN ('01','02','03','05') THEN LC.VRLANCAMENT ELSE 0 END) * DECODE(P_CDIMPOSTONFE,'50',VRALIQPIS,VRALIQCOFINS))/100),2) AS VRIMPCUMU,
                          SUM(LC.VRLANCAMENT) AS VROUTRREC, LC.CDCONTCTBL
                     FROM OUTRECCONT OT, OUTRECCONTCTBL OTC , LANCCONT LC
                    WHERE OT.CDEMPRESA    = P_CDEMPRESA
                      AND OT.CDEMPRESA    = OTC.CDEMPRESA
                      AND OT.CDOUTRECCONT = OTC.CDOUTRECCONT
                      AND LC.CDEMPRESA    = OTC.CDEMPRESA
                      AND LC.CDCONTCTBL   LIKE OTC.CDCONTCTBL||'%'
                      AND LC.IDLANCINTE   NOT IN ('F','S')
                      AND LC.DTLANCCONT   BETWEEN P_DTINICIAL AND P_DTFINAL
                      AND (OT.DTFIMVALID  >= LC.DTLANCCONT OR OT.DTFIMVALID IS NULL)
                      AND OT.IDCUMUPISCOFIL = 'N'
                      AND P_CDIMPOSTONFE  IN ('50','60')
                      AND ((LC.VRLANCAMENT > 0 AND OTC.IDCONSVRDEB = 'N') OR (OTC.IDCONSVRDEB = 'S'))
                    GROUP BY LC.CDCONTCTBL)
            WHERE VROUTRREC > 0
            UNION ALL
           /*RECEITAS ECF QUANDO NÃO É REGIME DE CAIXA*/
           SELECT SUM(VRCONTABIL) AS VRCONTABIL,
                  SUM(VRBASECALC) AS VRBASECALC,
                  0 AS VRIMPNAOCUMU,
                  0 AS VRIMPCUMU,
                  0 AS VROUTRREC,
                  SUM(TRUNC(VRIMPECF,2)) AS VRIMPECF,
                  0 AS VRDEVCOMPR,
                  0 AS VRIMPDEVCOMP,
                  0 AS VRCTBLNFSAID,
                  SUM(VRCONTABIL) AS VRCTBLVENDAS,
                  0 AS VRCTBLDCOMP,
                  0 AS VRBCDEBNF,
                  SUM(VRBASECALC) AS VRBCDEBECF,
                  0 AS VRBCDEBOUTREC,
                  SUM(DECODE(IDCUMUPISCOFIL,'S',TRUNC(VRIMPECF,2),0)) AS VRECFNCUMU,
                  SUM(DECODE(IDCUMUPISCOFIL,'N',TRUNC(VRIMPECF,2),0)) AS VRECFCUMU,
                  0 AS VRDEBNFSAIDNC,
                  0 AS VRDEBOUTRECNC,
                  0 AS VRBEDNFSAIDCUM,
                  0 AS VRDEBOUTRECCUM
             FROM (SELECT SUM(VRPRODUTO) AS VRCONTABIL,
                          SUM(DECODE(CDFISCALIT,1,I.VRPRODUTO,0)) AS VRBASECALC,
                          SUM((VRPRODUTO*(DECODE(CDFISCALIT,'1',VRALIQIT,0))/100)) AS VRIMPECF,
                          I.DTREDUCAOZ, I.CDFILIAL, I.CDCAIXA, F.IDCUMUPISCOFIL
                     FROM ITEMVENOUTIMPOS I, FILIAL F, IMPOSTO IM
                    WHERE I.CDFILIAL       = F.CDFILIAL
                      AND IM.CDIMPOSTONFE  = P_CDIMPOSTONFE
                      AND F.CDEMPRESA      = P_CDEMPRESA
                      AND TRUNC(I.DTREDUCAOZ) BETWEEN P_DTINICIAL AND P_DTFINAL
                      AND I.CDIMPOSTO      = IM.CDIMPOSTO
                      AND I.NRLANCTONFFIS IS NULL
                      AND NVL(V_IDFORMAPUR,'T')  <> 'P'
                      AND V_IDCONSVRIMPAG = 'T'
                      AND (I.IDORIGEMVENDA IS NULL OR I.IDORIGEMVENDA NOT IN ('SAT', 'NFCE'))
                    GROUP BY I.DTREDUCAOZ, I.CDFILIAL, I.CDCAIXA, F.IDCUMUPISCOFIL
                    UNION ALL
                   SELECT SUM(VRPRODUTO) AS VRCONTABIL,
                          SUM(DECODE(CDFISCALIT,1,I.VRPRODUTO,0)) AS VRBASECALC,
                          SUM((VRPRODUTO*(DECODE(CDFISCALIT,'1',VRALIQIT,0))/100)) AS VRIMPECF,
                          I.DTREDUCAOZ, I.CDFILIAL, I.CDCAIXA, F.IDCUMUPISCOFIL
                     FROM ITEMVENOUTIMPOS I, FILIAL F, IMPOSTO IM
                    WHERE I.CDFILIAL       = F.CDFILIAL
                      AND IM.CDIMPOSTONFE  = P_CDIMPOSTONFE
                      AND F.CDEMPRESA      = P_CDEMPRESA
                      AND TRUNC(I.DTREDUCAOZ) BETWEEN P_DTINICIAL AND P_DTFINAL
                      AND I.CDIMPOSTO      = IM.CDIMPOSTO
                      AND I.NRLANCTONFFIS IS NOT NULL
                      AND I.NRSEQUMAPAPU   = P_NRSEQUMAPAPU
                      AND NVL(V_IDFORMAPUR,'T')  <> 'P'
                      AND V_IDCONSVRIMPAG  = 'T'
                      AND (I.IDORIGEMVENDA IS NULL OR I.IDORIGEMVENDA NOT IN ('SAT', 'NFCE'))
                    GROUP BY I.DTREDUCAOZ, I.CDFILIAL, I.CDCAIXA, F.IDCUMUPISCOFIL)
            UNION ALL
           SELECT SUM(VRPRODUTO) AS VRCONTABIL,
                  SUM(DECODE(CDFISCALIT,1,I.VRPRODUTO,0)) AS VRBASECALC,
                  0 AS VRIMPNAOCUMU,
                  0 AS VRIMPCUMU,
                  0 AS VROUTRREC,
                  SUM(VRIMPOSTOIT) AS VRIMPECF,
                  0 AS VRDEVCOMPR,
                  0 AS VRIMPDEVCOMP,
                  0 AS VRCTBLNFSAID,
                  SUM(VRPRODUTO) AS VRCTBLVENDAS,
                  0 AS VRCTBLDCOMP,
                  0 AS VRBCDEBNF,
                  SUM(DECODE(CDFISCALIT,1,I.VRPRODUTO,0)) AS VRBCDEBECF,
                  0 AS VRBCDEBOUTREC,
                  SUM(DECODE(F.IDCUMUPISCOFIL,'S',VRIMPOSTOIT,0)) AS VRECFNCUMU,
                  SUM(DECODE(F.IDCUMUPISCOFIL,'N',VRIMPOSTOIT,0)) AS VRECFCUMU,
                  0 AS VRDEBNFSAIDNC,
                  0 AS VRDEBOUTRECNC,
                  0 AS VRBEDNFSAIDCUM,
                  0 AS VRDEBOUTRECCUM
             FROM ITEMVENOUTIMPOS I, FILIAL F, IMPOSTO IM
            WHERE I.CDFILIAL       = F.CDFILIAL
              AND IM.CDIMPOSTONFE  = P_CDIMPOSTONFE
              AND F.CDEMPRESA      = P_CDEMPRESA
              AND TRUNC(I.DTREDUCAOZ) BETWEEN P_DTINICIAL AND P_DTFINAL
              AND I.CDIMPOSTO      = IM.CDIMPOSTO
              AND I.NRLANCTONFFIS IS NULL
              AND NVL(V_IDFORMAPUR,'T')  <> 'P'
              AND V_IDCONSVRIMPAG = 'T'
              AND I.IDORIGEMVENDA IN ('SAT', 'NFCE')
            UNION ALL
           SELECT SUM(VRPRODUTO) AS VRCONTABIL,
                  SUM(DECODE(CDFISCALIT,1,I.VRPRODUTO,0)) AS VRBASECALC,
                  0 AS VRIMPNAOCUMU,
                  0 AS VRIMPCUMU,
                  0 AS VROUTRREC,
                  SUM(VRIMPOSTOIT) AS VRIMPECF,
                  0 AS VRDEVCOMPR,
                  0 AS VRIMPDEVCOMP,
                  0 AS VRCTBLNFSAID,
                  SUM(VRPRODUTO) AS VRCTBLVENDAS,
                  0 AS VRCTBLDCOMP,
                  0 AS VRBCDEBNF,
                  SUM(DECODE(CDFISCALIT,1,I.VRPRODUTO,0)) AS VRBCDEBECF,
                  0 AS VRBCDEBOUTREC,
                  SUM(DECODE(F.IDCUMUPISCOFIL,'S',VRIMPOSTOIT,0)) AS VRECFNCUMU,
                  SUM(DECODE(F.IDCUMUPISCOFIL,'N',VRIMPOSTOIT,0)) AS VRECFCUMU,
                  0 AS VRDEBNFSAIDNC,
                  0 AS VRDEBOUTRECNC,
                  0 AS VRBEDNFSAIDCUM,
                  0 AS VRDEBOUTRECCUM
             FROM ITEMVENOUTIMPOS I, FILIAL F, IMPOSTO IM
            WHERE I.CDFILIAL       = F.CDFILIAL
              AND IM.CDIMPOSTONFE  = P_CDIMPOSTONFE
              AND F.CDEMPRESA      = P_CDEMPRESA
              AND TRUNC(I.DTREDUCAOZ) BETWEEN P_DTINICIAL AND P_DTFINAL
              AND I.CDIMPOSTO      = IM.CDIMPOSTO
              AND I.NRLANCTONFFIS IS NOT NULL
              AND I.NRSEQUMAPAPU   = P_NRSEQUMAPAPU
              AND NVL(V_IDFORMAPUR,'T')  <> 'P'
              AND V_IDCONSVRIMPAG = 'T'
              AND I.IDORIGEMVENDA IN ('SAT', 'NFCE')
            UNION ALL
           /*COMPRAS CANCELADAS/DEVOLUCAO DE COMPRAS - ACRESCEM NO VALOR CONTABIL POR SE TRATAR DE SAIDAS - SÃO DESCONSIDERADAS PARA REGIME CUMULATIVO*/
           SELECT SUM(VRCONTABILNF) AS VRCONTABIL,
                  0 AS VRBASECALC,
                  0 AS VRIMPNAOCUMU,
                  0 AS VRIMPCUMU,
                  0 AS VROUTRREC,
                  0 AS VRIMPECF,
                  SUM(DECODE(CDFISCALNF,'1', VRBASECALCNF,0)) AS VRDEVCOMPR,
                  SUM(DECODE(CDFISCALNF,'1', VRIMPOSTONF,0)) AS VRIMPDEVCOMP,
                  0 AS VRCTBLNFSAID,
                  0 AS VRCTBLVENDAS,
                  SUM(VRCONTABILNF) AS VRCTBLDCOMP,
                  0 AS VRBCDEBNF,
                  0 AS VRBCDEBECF,
                  0 AS VRBCDEBOUTREC,
                  0 AS VRECFNCUMU,
                  0 AS VRECFCUMU,
                  0 AS VRDEBNFSAIDNC,
                  0 AS VRDEBOUTRECNC,
                  0 AS VRBEDNFSAIDCUM,
                  0 AS VRDEBOUTRECCUM
             FROM NOTAFISCAL N, IMPOSTONF I, CFOPPADRAO C, FILIAL F
            WHERE I.NRSEQUMAPAPU   = P_NRSEQUMAPAPU
              AND I.CDFILIAL       = N.CDFILIAL
              AND I.NRLANCTONF     = N.NRLANCTONF
              AND N.IDENTRSAIDOP   = 'S'
              AND C.CDCFOPPADRAO   = I.CDFISCOPERNF
              AND C.IDTIPOCFOP     = 'D'
              AND N.CDFILIEMIT     = F.CDFILIAL
              and F.IDCUMUPISCOFIL = 'S')DADOS;
   /*VISUALIZAÇÃO NO REGIME DE COMPETÊNCIA PARA QUEM É REGIME DE PAGAMENTO*/
   IF V_IDFORMAPUR = 'P' THEN
      /*---CÁLCULO DO VALOR CONTÁBIL, BASE DE CÁLCULO E IMPOSTO DAS ENTRADAS-----*/
      SELECT SUM(VRCONTABIL),   SUM(VRBASECALC),   SUM(VRIMPOSTO),   SUM(VRDEVOLVEND),
             SUM(VRIMPDEVVEND), SUM(VRCTBLNFENTR), SUM(VRCTBLDVEND), SUM(VRBCCREDNF)
        INTO V_VCENTRRPAG,       V_BCENTRRPAG,       V_VRIMPENTRRPAG,   V_VRDEVOLVENDRPAG,
             V_VRIMPDEVVENDRPAG, V_VRCTBLNFENTRRPAG, V_VRCTBLDVENDRPAG, V_VRBCCREDNFRPAG
        FROM (/*ENTRADAS DE NF E DEVOLUCOES DE VENDAS*/
              SELECT SUM(VRCONTABILNF) AS VRCONTABIL,
                     SUM(DECODE(C.IDTIPOCFOP,'D',0,DECODE(F.IDCUMUPISCOFIL,'S',DECODE(CDFISCALNF,'1', VRBASECALCNF,0),0))) AS VRBASECALC,
                     SUM(DECODE(C.IDTIPOCFOP,'D',0,DECODE(F.IDCUMUPISCOFIL,'S',DECODE(CDFISCALNF,'1', VRIMPOSTONF,0),0))) AS VRIMPOSTO,
                     SUM(DECODE(C.IDTIPOCFOP,'D',DECODE(CDFISCALNF,'1', VRBASECALCNF,0),0)) AS VRDEVOLVEND,
                     SUM(DECODE(C.IDTIPOCFOP,'D',DECODE(CDFISCALNF,'1', VRIMPOSTONF,0),0)) AS VRIMPDEVVEND,
                     SUM(DECODE(C.IDTIPOCFOP,'D',0,VRCONTABILNF)) AS VRCTBLNFENTR,
                     SUM(DECODE(C.IDTIPOCFOP,'D',VRCONTABILNF,0)) AS VRCTBLDVEND,
                     SUM(DECODE(C.IDTIPOCFOP,'D',0,DECODE(F.IDCUMUPISCOFIL,'S',DECODE(CDFISCALNF,'1', VRBASECALCNF,0),0),0)) AS VRBCCREDNF
                FROM IMPOSTONF I, NOTAFISCAL N, FILIAL F, CFOPPADRAO C
               WHERE I.NRSEQMAPOIMP = P_NRSEQUMAPAPU
                 AND I.NRLANCTONF   = N.NRLANCTONF
                 AND I.CDFILIAL     = N.CDFILIAL
                 AND N.IDENTRSAIDOP = 'E'
                 AND N.CDFILIRECE   = F.CDFILIAL
                 AND I.CDFISCOPERNF = C.CDCFOPPADRAO(+)
                 AND I.CDIMPOSTO    IN (SELECT CDIMPOSTO FROM IMPOSTO WHERE CDIMPOSTONFE = P_CDIMPOSTONFE));
              /*BENFEITORIA/AMORTIZAÇÃO
                     SUM(C.VRPARCELA) AS VRBASECALC,
                     SUM(ROUND(C.VRPARCELA * (DECODE(P_CDIMPOSTONFE,50,C.VRALIQPIS,C.VRALIQCOFINS)/100),2)) AS VRBENFEITORIA,
                     SUM(C.VRPARCELA) AS VRBCCREDBENF*/
      /*---CÁLCULO DO VALOR CONTÁBIL, BASE DE CÁLCULO E IMPOSTO DAS SAIDAS-----*/
      SELECT SUM(VRCONTABIL),    SUM(VRBASECALC),    SUM(VRIMPNAOCUMU),
             SUM(VRIMPCUMU),     SUM(VRIMPECF),      SUM(VRDEVCOMPR),     SUM(VRIMPDEVCOMP),
             SUM(VRCTBLNFSAID),  SUM(VRCTBLVENDAS),  SUM(VRCTBLDCOMP),    SUM(VRBCDEBNF),
             SUM(VRBCDEBECF),    SUM(VRECFNCUMU),    SUM(VRECFCUMU),
             SUM(VRDEBNFSAIDNC), SUM(VRBEDNFSAIDCUM)
        INTO V_VCSAIDARPAG,       V_BCSAIDARPAG,       V_IMPNCUMSAIDARPAG,
             V_IMPCUMSAIDARPAG,   V_VRIMPECFRPAG,      V_VRDEVCOMPRRPAG,   V_VRIMPDEVCOMPRPAG,
             V_VRCTBLNFSAIDRPAG,  V_VRCTBLVENDASRPAG,  V_VRCTBLDCOMPRPAG,  V_VRBCDEBNFRPAG,
             V_VRBCDEBECFRPAG,    V_VRECFNCUMURPAG,    V_VRECFCUMURPAG,
             V_VRDEBNFSAIDNCRPAG, V_VRBEDNFSAIDCUMRPAG
        FROM (/*NOTAS NAO CUMULATIVO*/
              SELECT SUM(VRCONTABILNF) AS VRCONTABIL,
                     SUM(DECODE(C.IDTIPOCFOP,'D',0,DECODE(CDFISCALNF,'1', VRBASECALCNF,0))) AS VRBASECALC,
                     SUM(DECODE(C.IDTIPOCFOP,'D',0,DECODE(F.IDCUMUPISCOFIL,'S',DECODE(CDFISCALNF,'1', VRIMPOSTONF,0),0))) AS VRIMPNAOCUMU,
                     SUM(DECODE(C.IDTIPOCFOP,'D',0,DECODE(F.IDCUMUPISCOFIL,'N',DECODE(CDFISCALNF,'1', VRIMPOSTONF,0),0))) AS VRIMPCUMU,
                     0 AS VRIMPECF,
                     SUM(DECODE(C.IDTIPOCFOP,'D',DECODE(CDFISCALNF,'1', VRBASECALCNF,0),0)) AS VRDEVCOMPR,
                     SUM(DECODE(C.IDTIPOCFOP,'D',DECODE(CDFISCALNF,'1', VRIMPOSTONF,0),0)) AS VRIMPDEVCOMP,
                     SUM(VRCONTABILNF) AS VRCTBLNFSAID,
                     0 AS VRCTBLVENDAS,
                     SUM(DECODE(C.IDTIPOCFOP,'D',VRCONTABILNF,0)) AS VRCTBLDCOMP,
                     SUM(DECODE(C.IDTIPOCFOP,'D',0,DECODE(CDFISCALNF,'1', VRBASECALCNF,0))) AS VRBCDEBNF,
                     0 AS VRBCDEBECF,
                     0 AS VRECFNCUMU,
                     0 AS VRECFCUMU,
                     SUM(DECODE(C.IDTIPOCFOP,'D',0,DECODE(F.IDCUMUPISCOFIL,'S',DECODE(CDFISCALNF,'1', VRIMPOSTONF,0),0))) AS VRDEBNFSAIDNC,
                     SUM(DECODE(C.IDTIPOCFOP,'D',0,DECODE(F.IDCUMUPISCOFIL,'N',DECODE(CDFISCALNF,'1', VRIMPOSTONF,0),0))) AS VRBEDNFSAIDCUM
                FROM IMPOSTONF I, NOTAFISCAL N, FILIAL F, CFOPPADRAO C, IMPOSTO IM
               WHERE I.NRSEQMAPOIMP   = P_NRSEQUMAPAPU
                 AND I.NRLANCTONF     = N.NRLANCTONF
                 AND I.CDFILIAL       = N.CDFILIAL
                 AND F.CDFILIAL       = N.CDFILIEMIT
                 AND N.CDEMPRESA      = P_CDEMPRESA
                 AND N.IDENTRSAIDOP   = 'S'
                 AND I.CDFISCOPERNF   = C.CDCFOPPADRAO(+)
                 AND I.CDIMPOSTO      = IM.CDIMPOSTO
                 AND IM.CDIMPOSTONFE  = P_CDIMPOSTONFE
                 AND I.CDIMPOSTO      IN (SELECT CDIMPOSTO FROM IMPOSTO WHERE CDIMPOSTONFE = P_CDIMPOSTONFE)
               UNION ALL
              /*OUTRAS RECEITAS
                     SUM(VRBASECALC) AS VRBASECALC,
                     SUM(DECODE(IDCUMUPISCOFIL,S,VRIMP,0)) AS VRIMPNAOCUMU,
                     SUM(DECODE(IDCUMUPISCOFIL,N,VRIMP,0)) AS VRIMPCUMU,
                     SUM(VROUTRREC) AS VROUTRREC,
                     SUM(VRBASECALC) AS VRBCDEBOUTREC,
                     SUM(DECODE(IDCUMUPISCOFIL,S,VRIMP,0)) AS VRDEBOUTRECNC,
                     SUM(DECODE(IDCUMUPISCOFIL,N,VRIMP,0)) AS VRDEBOUTRECCUM */
              /*RECEITAS ECF QUANDO NÃO É REGIME DE CAIXA*/
              SELECT SUM(VRCONTABIL) AS VRCONTABIL,
                     SUM(VRBASECALC) AS VRBASECALC,
                     0 AS VRIMPNAOCUMU,
                     0 AS VRIMPCUMU,
                     SUM(TRUNC(VRIMPECF,2)) AS VRIMPECF,
                     0 AS VRDEVCOMPR,
                     0 AS VRIMPDEVCOMP,
                     0 AS VRCTBLNFSAID,
                     SUM(VRCONTABIL) AS VRCTBLVENDAS,
                     0 AS VRCTBLDCOMP,
                     0 AS VRBCDEBNF,
                     SUM(VRBASECALC) AS VRBCDEBECF,
                     SUM(DECODE(IDCUMUPISCOFIL,'S',TRUNC(VRIMPECF,2),0)) AS VRECFNCUMU,
                     SUM(DECODE(IDCUMUPISCOFIL,'N',TRUNC(VRIMPECF,2),0)) AS VRECFCUMU,
                     0 AS VRDEBNFSAIDNC,
                     0 AS VRBEDNFSAIDCUM
                FROM (SELECT SUM(VRPRODUTO) AS VRCONTABIL,
                             SUM(DECODE(CDFISCALIT,1,I.VRPRODUTO,0)) AS VRBASECALC,
                             SUM((VRPRODUTO*(DECODE(CDFISCALIT,'1',VRALIQIT,0))/100)) AS VRIMPECF,
                             I.DTREDUCAOZ, I.CDFILIAL, I.CDCAIXA, F.IDCUMUPISCOFIL
                        FROM ITEMVENOUTIMPOS I, FILIAL F, IMPOSTO IM
                       WHERE I.CDFILIAL       = F.CDFILIAL
                         AND IM.CDIMPOSTONFE  = P_CDIMPOSTONFE
                         AND F.CDEMPRESA      = P_CDEMPRESA
                         AND TRUNC(I.DTREDUCAOZ) BETWEEN P_DTINICIAL AND P_DTFINAL
                         AND I.CDIMPOSTO      = IM.CDIMPOSTO
                         AND I.NRSEQMAPOIMP   = P_NRSEQUMAPAPU
                         AND I.CDIMPOSTO      IN (SELECT CDIMPOSTO FROM IMPOSTO WHERE CDIMPOSTONFE = P_CDIMPOSTONFE)
                         AND (I.IDORIGEMVENDA IS NULL OR I.IDORIGEMVENDA NOT IN ('SAT', 'NFCE'))
                       GROUP BY I.DTREDUCAOZ, I.CDFILIAL, I.CDCAIXA, F.IDCUMUPISCOFIL)
               UNION ALL
              SELECT SUM(VRPRODUTO) AS VRCONTABIL,
                     SUM(DECODE(CDFISCALIT,1,I.VRPRODUTO,0)) AS VRBASECALC,
                     0 AS VRIMPNAOCUMU,
                     0 AS VRIMPCUMU,
                     SUM(VRIMPOSTOIT) AS VRIMPECF,
                     0 AS VRDEVCOMPR,
                     0 AS VRIMPDEVCOMP,
                     0 AS VRCTBLNFSAID,
                     SUM(VRPRODUTO) AS VRCTBLVENDAS,
                     0 AS VRCTBLDCOMP,
                     0 AS VRBCDEBNF,
                     SUM(DECODE(CDFISCALIT,1,I.VRPRODUTO,0)) AS VRBCDEBECF,
                     SUM(DECODE(F.IDCUMUPISCOFIL,'S',VRIMPOSTOIT,0)) AS VRECFNCUMU,
                     SUM(DECODE(F.IDCUMUPISCOFIL,'N',VRIMPOSTOIT,0)) AS VRECFCUMU,
                     0 AS VRDEBNFSAIDNC,
                     0 AS VRBEDNFSAIDCUM
                FROM ITEMVENOUTIMPOS I, FILIAL F, IMPOSTO IM
               WHERE I.CDFILIAL       = F.CDFILIAL
                 AND IM.CDIMPOSTONFE  = P_CDIMPOSTONFE
                 AND F.CDEMPRESA      = P_CDEMPRESA
                 AND TRUNC(I.DTREDUCAOZ) BETWEEN P_DTINICIAL AND P_DTFINAL
                 AND I.CDIMPOSTO      = IM.CDIMPOSTO
                 AND I.CDIMPOSTO      IN (SELECT CDIMPOSTO FROM IMPOSTO WHERE CDIMPOSTONFE = P_CDIMPOSTONFE)
                 AND I.NRSEQMAPOIMP   = P_NRSEQUMAPAPU
                 AND I.IDORIGEMVENDA  IN ('SAT', 'NFCE'))DADOS;
   END IF;
--------------------------------------/*CALCULO DAS COMPENSACOES*/-------------------------------------------------------
   IF P_CDIMPOSTONFE = '50' THEN
      V_CDIMPCOMPEN := '56';
   ELSIF P_CDIMPOSTONFE = '60' THEN
      V_CDIMPCOMPEN := '66';
   END IF;
   /*SELECIONA A FORMA DE APURACAO DO IMPOSTO RETIDO NA FONTE*/
   SELECT MAX(IDFORMAPUR), MAX(IDCONSVRIMPAG)
     INTO V_IDFORMAPURCOMP, V_IDCONSVRIMPAG
     FROM IMPOSTO I
    WHERE I.CDIMPOSTONFE = V_CDIMPCOMPEN;
   /*UPDATE DAS NOTAS DE COMPENSACAO. APENAS NOTAS DE SAIDA, JA QUE TRATA-SE DE COMPENSACAO DE VALOR RETIDO POR CLIENTE*/
   /*ATUALIZA-SE NESTE CASO O CAMPO NRSEQMAPOIMP*/
   /*UPDATE DAS NOTAS NA IMPOSTONF PARA NULL EM CASO DE REAPURACAO DE MAPAS */
   UPDATE IMPOSTONF
      SET NRSEQMAPOIMP = NULL
    WHERE NRSEQMAPOIMP = P_NRSEQUMAPAPU
      AND CDIMPOSTO    IN (SELECT CDIMPOSTO FROM IMPOSTO WHERE CDIMPOSTONFE = V_CDIMPCOMPEN);
   /*UPDATE DAS NOTAS NA IMPBAIXAREC (REGIME DE CAIXA) PARA NULL EM CASO DE REAPURAÇÃO DE MAPAS*/
   UPDATE IMPBAIXAREC
      SET NRSEQMAPOIMP = NULL
    WHERE NRSEQMAPOIMP = P_NRSEQUMAPAPU
      AND CDIMPOSTO    IN (SELECT CDIMPOSTO FROM IMPOSTO WHERE CDIMPOSTONFE = V_CDIMPCOMPEN);
   /*APAGA OS ITENS DE COMPENSAÇÃO EXISTENTES NO MAPA, EM CASO DE REAPURAÇÃO*/
   DELETE FROM ITDETAPUCONTR
    WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU
      AND IDTIPODETAPU = 'CO';
   /*-------------------APURACAO IMPOSTO POR DATA DE COMPETENCIA-------------*/
   IF V_IDFORMAPURCOMP = 'C' THEN
      UPDATE IMPOSTONF
         SET NRSEQMAPOIMP = P_NRSEQUMAPAPU
       WHERE NRSEQMAPOIMP IS NULL
         AND (NRLANCTONF, CDFILIAL, CDIMPOSTO) IN (SELECT IP.NRLANCTONF, IP.CDFILIAL, IP.CDIMPOSTO
                                                     FROM NOTAFISCAL N, IMPOSTONF IP, IMPOSTO I
                                                    WHERE N.IDSTATUS IN ('E','A')
                                                      AND N.CDEMPRESA    = P_CDEMPRESA
                                                      AND N.IDENTRSAIDOP = 'S'
                                                      AND IP.NRSEQMAPOIMP IS NULL
                                                      AND I.CDIMPOSTONFE = V_CDIMPCOMPEN
                                                      AND IP.CDIMPOSTO   = I.CDIMPOSTO
                                                      AND IP.CDFILIAL    = N.CDFILIAL
                                                      AND IP.NRLANCTONF  = N.NRLANCTONF
                                                      AND (((V_IDNFFORAPERAPU='N') AND (N.DTEMISSAO BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                           ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU IS NULL) AND (N.DTEMISSAO BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                           ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU BETWEEN P_DTINICIAL AND P_DTFINAL) AND (N.DTEMISSAO BETWEEN V_DTINIFORPER AND P_DTFINAL)))
                                                      AND IDSISTEMA <> 'PAG'
                                                      AND IDSISTEMA <> 'REC'
                                                      AND IDSISTEMA <> 'FIS'
                                                      AND IDSISTEMA <> 'TMP');
   END IF;
  /*-------------------APURACAO IMPOSTO POR DATA DE ENTRADA/SAIDA-------------*/
   IF V_IDFORMAPURCOMP = 'D' THEN
      UPDATE IMPOSTONF
         SET NRSEQMAPOIMP = P_NRSEQUMAPAPU
       WHERE NRSEQMAPOIMP IS NULL
         AND (NRLANCTONF, CDFILIAL, CDIMPOSTO) IN (SELECT IP.NRLANCTONF, IP.CDFILIAL, IP.CDIMPOSTO
                                                     FROM NOTAFISCAL N, IMPOSTONF IP, IMPOSTO I
                                                    WHERE N.IDSTATUS IN ('E','A')
                                                      AND N.CDEMPRESA    = P_CDEMPRESA
                                                      AND N.IDENTRSAIDOP = 'S'
                                                      AND IP.NRSEQMAPOIMP IS NULL
                                                      AND I.CDIMPOSTONFE = V_CDIMPCOMPEN
                                                      AND IP.CDIMPOSTO   = I.CDIMPOSTO
                                                      AND IP.CDFILIAL    = N.CDFILIAL
                                                      AND IP.NRLANCTONF  = N.NRLANCTONF
                                                      AND (((V_IDNFFORAPERAPU='N') AND (N.DTENTRSAID BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                           ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU IS NULL) AND (N.DTENTRSAID BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                            ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU BETWEEN P_DTINICIAL AND P_DTFINAL) AND (N.DTENTRSAID BETWEEN V_DTINIFORPER AND P_DTFINAL)))
                                                      AND IDSISTEMA <> 'PAG'
                                                      AND IDSISTEMA <> 'REC'
                                                      AND IDSISTEMA <> 'FIS'
                                                      AND IDSISTEMA <> 'TMP');
   END IF;
  /*-------------------APURACAO IMPOSTO POR DATA DE PAGAMENTO-------------*/
   IF V_IDFORMAPURCOMP = 'P' THEN
      UPDATE IMPOSTONF
         SET NRSEQMAPOIMP = P_NRSEQUMAPAPU
       WHERE NRSEQMAPOIMP IS NULL
         AND (CDFILIAL,NRLANCTONF,CDIMPOSTO) IN (SELECT N.CDFILIAL, N.NRLANCTONF, IP.CDIMPOSTO
                                                   FROM NOTAFISCAL N, IMPOSTONF IP, IMPOSTO I,
                                                        (SELECT C.CDFILIAL, C.NRLANCTONF, MIN(BX.DTBAIXAREC) AS DTBAIXAREC
                                                           FROM CONTARECEBER C, BOLETRECEBER B, BAIXARECEBIDA BX
                                                          WHERE C.CDFILIBOLREC = B.CDFILIAL
                                                            AND C.NRLANBOLREC  = B.NRLANBOLREC
                                                            AND B.CDFILIBAIREC = BX.CDFILIAL
                                                            AND B.NRBAIXAREC   = BX.NRBAIXAREC
                                                            AND BX.CDEMPRESA   = P_CDEMPRESA
                                                          GROUP BY C.CDFILIAL, C.NRLANCTONF) A
                                                  WHERE N.CDEMPRESA    = P_CDEMPRESA
                                                    AND N.IDSTATUS     IN ('A','E')
                                                    AND N.IDENTRSAIDOP = 'S'
                                                    AND IP.CDFILIAL    = N.CDFILIAL
                                                    AND IP.NRLANCTONF  = N.NRLANCTONF
                                                    AND I.CDIMPOSTONFE = V_CDIMPCOMPEN
                                                    AND IP.CDIMPOSTO   = I.CDIMPOSTO
                                                    AND IP.NRSEQMAPOIMP IS NULL
                                                    AND N.CDFILIAL     = A.CDFILIAL
                                                    AND N.NRLANCTONF   = A.NRLANCTONF
                                                    AND (((V_IDNFFORAPERAPU='N') AND (A.DTBAIXAREC BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                         ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU IS NULL) AND (A.DTBAIXAREC BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                         ((V_IDNFFORAPERAPU='S') AND (IP.DTREFMAPAPU BETWEEN P_DTINICIAL AND P_DTFINAL) AND (A.DTBAIXAREC BETWEEN V_DTINIFORPER AND P_DTFINAL)))
                                                    AND IDSISTEMA <> 'PAG'
                                                    AND IDSISTEMA <> 'REC'
                                                    AND IDSISTEMA <> 'FIS'
                                                    AND IDSISTEMA <> 'TMP'
                                                    AND V_IDCONSVRIMPAG = 'T');
      /*TABELA PREENCHIDA NO FINANCEIRO*/
      UPDATE IMPBAIXAREC
         SET NRSEQMAPOIMP = P_NRSEQUMAPAPU
       WHERE NRSEQMAPOIMP IS NULL
         AND (NRLANCTONF, CDFILIAL, CDIMPOSTO, DTBAIXAREC) IN (SELECT B.NRLANCTONF, B.CDFILIAL, B.CDIMPOSTO, B.DTBAIXAREC
                                                                 FROM NOTAFISCAL N, TIPOOPERAC T, IMPOSTO I, IMPBAIXAREC B
                                                                WHERE N.CDEMPRESA    = P_CDEMPRESA
                                                                  AND N.IDSTATUS     IN ('A','E')
                                                                  AND N.IDENTRSAIDOP = 'S'
                                                                  AND N.CDTIPOOPER   = T.CDTIPOOPER /*SÓ CONSIDERA OS TIPOS DE OPERAÇÃO QUE NA PARAMETROS DE FISCAL PARA COMPOR/DEDUZIR DO FATURAMENTO*/
                                                                  AND N.IDENTRSAIDOP = T.IDENTRSAIDOP
                                                                  AND T.IDTPFATAPURA IS NOT NULL
                                                                  AND N.CDFILIAL     = B.CDFILIAL
                                                                  AND N.NRLANCTONF   = B.NRLANCTONF
                                                                  AND I.CDIMPOSTONFE = V_CDIMPCOMPEN
                                                                  AND B.CDIMPOSTO    = I.CDIMPOSTO
                                                                  AND B.NRSEQMAPOIMP IS NULL
                                                                  AND (((V_IDNFFORAPERAPU='N') AND (B.DTBAIXAREC BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                                       ((V_IDNFFORAPERAPU='S') AND (B.DTREFMAPAPU IS NULL) AND (B.DTBAIXAREC BETWEEN V_DTINIFORPER AND P_DTFINAL)) OR
                                                                       ((V_IDNFFORAPERAPU='S') AND (B.DTREFMAPAPU BETWEEN P_DTINICIAL AND P_DTFINAL) AND (B.DTBAIXAREC BETWEEN V_DTINIFORPER AND P_DTFINAL)))
                                                                  AND IDSISTEMA <> 'PAG'
                                                                  AND IDSISTEMA <> 'REC'
                                                                  AND IDSISTEMA <> 'FIS'
                                                                  AND V_IDCONSVRIMPAG = 'P'
                                                                  AND (B.NRLANCTONF, B.CDFILIAL) NOT IN (SELECT NRLANCTONF, CDFILIAL
                                                                                                           FROM IMPOSTONF IP, IMPOSTO IM
                                                                                                          WHERE IM.CDIMPOSTONFE = V_CDIMPCOMPEN
                                                                                                            AND IM.CDIMPOSTO    = IP.CDIMPOSTO
                                                                                                            AND IP.NRSEQMAPOIMP IS NOT NULL));
   END IF;
   /*--------------GERA ITENS DE COMPENSACAO-------------*/
   FOR C_COMP IN (SELECT I.CDFILIAL, I.NRLANCTONF, N.NRNOTAFISC, N.VRNOTAFISC,
                         DECODE(N.CDCLIENTE,NULL,DECODE(N.CDFORNECED,NULL,L.NRINSJURFILI,F.NRINSJURFORN),C.NRINSJURCLIE) AS INSCPART,
                         DECODE(N.CDCLIENTE,NULL,DECODE(N.CDFORNECED,NULL,L.NMFILIAL,F.NMFANTFORN),C.NMFANTCLIE) AS NOMEPART,
                         SUM(DECODE(P_IDIMPORECUPNFE,'S', DECODE(CDFISCALNF,'1',VRIMPOSTONF,0), VRIMPOSTONF)) AS VRCOMP,
                         DECODE(N.IDENTRSAIDOP,'E',L.IDCUMUPISCOFIL,A.IDCUMUPISCOFIL) AS IDCUMUPISCOFIL
                    FROM IMPOSTONF I, NOTAFISCAL N, CLIENTE C, FORNECEDOR F, FILIAL L, FILIAL A
                   WHERE I.NRSEQMAPOIMP = P_NRSEQUMAPAPU
                     AND I.CDFILIAL     = N.CDFILIAL
                     AND I.NRLANCTONF   = N.NRLANCTONF
                     AND N.IDENTRSAIDOP = 'S'
                     AND N.CDCLIENTE    = C.CDCLIENTE(+)
                     AND N.CDFORNECED   = F.CDFORNECED(+)
                     AND N.CDFILIRECE   = L.CDFILIAL(+)
                     AND N.CDFILIEMIT   = A.CDFILIAL(+)
                     AND I.CDIMPOSTO    IN (SELECT CDIMPOSTO FROM IMPOSTO WHERE CDIMPOSTONFE = V_CDIMPCOMPEN)
                   GROUP BY I.CDFILIAL, I.NRLANCTONF, N.NRNOTAFISC, N.VRNOTAFISC,
                         DECODE(N.CDCLIENTE,NULL,DECODE(N.CDFORNECED,NULL,L.NRINSJURFILI,F.NRINSJURFORN),C.NRINSJURCLIE),
                         DECODE(N.CDCLIENTE,NULL,DECODE(N.CDFORNECED,NULL,L.NMFILIAL,F.NMFANTFORN),C.NMFANTCLIE),
                         DECODE(N.IDENTRSAIDOP,'E',L.IDCUMUPISCOFIL,A.IDCUMUPISCOFIL)
                   UNION ALL
                  SELECT I.CDFILIAL, I.NRLANCTONF, N.NRNOTAFISC, N.VRNOTAFISC,
                         DECODE(N.CDCLIENTE,NULL,DECODE(N.CDFORNECED,NULL,L.NRINSJURFILI,F.NRINSJURFORN),C.NRINSJURCLIE) AS INSCPART,
                         DECODE(N.CDCLIENTE,NULL,DECODE(N.CDFORNECED,NULL,L.NMFILIAL,F.NMFANTFORN),C.NMFANTCLIE) AS NOMEPART,
                         SUM(ROUND(DECODE(P_IDIMPORECUPNFE,'S', DECODE(CDFISCALNF,'1',VRPROPRECBC*VRALIQNF/100,0), VRPROPRECBC*VRALIQNF/100),2)) AS VRCOMP,
                         DECODE(N.IDENTRSAIDOP,'E',L.IDCUMUPISCOFIL,A.IDCUMUPISCOFIL) AS IDCUMUPISCOFIL
                    FROM IMPBAIXAREC I, NOTAFISCAL N, CLIENTE C, FORNECEDOR F, FILIAL L, FILIAL A
                   WHERE I.NRSEQMAPOIMP = P_NRSEQUMAPAPU
                     AND I.CDFILIAL     = N.CDFILIAL
                     AND I.NRLANCTONF   = N.NRLANCTONF
                     AND N.IDENTRSAIDOP = 'S'
                     AND N.CDCLIENTE    = C.CDCLIENTE(+)
                     AND N.CDFORNECED   = F.CDFORNECED(+)
                     AND N.CDFILIRECE   = L.CDFILIAL(+)
                     AND N.CDFILIEMIT   = A.CDFILIAL(+)
                     AND I.CDIMPOSTO    IN (SELECT CDIMPOSTO FROM IMPOSTO WHERE CDIMPOSTONFE = V_CDIMPCOMPEN)
                   GROUP BY I.CDFILIAL, I.NRLANCTONF, N.NRNOTAFISC, N.VRNOTAFISC,
                         DECODE(N.CDCLIENTE,NULL,DECODE(N.CDFORNECED,NULL,L.NRINSJURFILI,F.NRINSJURFORN),C.NRINSJURCLIE),
                         DECODE(N.CDCLIENTE,NULL,DECODE(N.CDFORNECED,NULL,L.NMFILIAL,F.NMFANTFORN),C.NMFANTCLIE),
                         DECODE(N.IDENTRSAIDOP,'E',L.IDCUMUPISCOFIL,A.IDCUMUPISCOFIL)) LOOP
      IF C_COMP.VRCOMP > 0 THEN
         /*GERA O PRÓXIMO SEQUENCIAL*/
         V_SEQITCOMP := NVL(V_SEQITCOMP,0) + 1;
         INSERT INTO ITDETAPUCONTR
            (NRSEQUMAPAPU, IDTIPODETAPU, NRSEQITDETAPU, DSITEMDETAPU,
             VRITEMDETAPU, CDFILIAL, NRLANCTONF, IDCUMUPISCOFIL)
         VALUES
            (P_NRSEQUMAPAPU, 'CO', LPAD(NVL(V_SEQITCOMP,1),4,'0'),
             C_COMP.INSCPART||' - '||C_COMP.NOMEPART||' (VALOR NF: '||C_COMP.VRNOTAFISC||')',
             C_COMP.VRCOMP, C_COMP.CDFILIAL, C_COMP.NRLANCTONF, C_COMP.IDCUMUPISCOFIL);
      END IF;
   END LOOP;
-----------------------------------/*INSERT DOS DADOS CALCULADOS*/--------------------------------------------------------
   /*BUSCA O VALOR DE DEDUCAO E CREDITO DO PERIODO ANTERIOR DO MAPA(EM CASO RE-APURACAO)*/
   SELECT SUM(DECODE(IDTIPODETAPU,'CA',VRITEMDETAPU,0)),
          SUM(DECODE(IDTIPODETAPU,'DD',VRITEMDETAPU,0))
     INTO V_VRCREPERANT, V_VRDEDUCAO
     FROM ITDETAPUCONTR I
    WHERE I.NRSEQUMAPAPU = P_NRSEQUMAPAPU;
   SELECT SUM(DECODE(IDCUMUPISCOFIL,'S',VRITEMDETAPU,0)),
          SUM(DECODE(IDCUMUPISCOFIL,'N',VRITEMDETAPU,0))
     INTO V_COMPENSACOESNC, V_COMPENSACOESCUM
     FROM ITDETAPUCONTR I
    WHERE I.NRSEQUMAPAPU = P_NRSEQUMAPAPU
      AND I.IDTIPODETAPU = 'CO';
   V_COMPENSACOES := NVL(V_COMPENSACOESNC,0) + NVL(V_COMPENSACOESCUM,0);
   /*-----------CÁLCULO DO CRÉDITO DIFERIDO NO PERÍODO------------*/
   /*VERIFICA SE O IMPOSTO FOI APURADO POR COMPETÊNCIA E SE O PARÂMETRO DE UTILIZA CRÉDITO DIFERIDO ESTÁ MARCADO*/
   IF NVL(V_IDFORMAPUR,'C') <> 'P' AND V_IDUTCREDDIFER = 'S' AND P_CDIMPOSTONFE IN ('50','60') THEN
      /*APAGA OS DADOS DO CONTROLE DE DIFERIMENTO PARA ESTE MAPA EM UMA APURAÇÃO ANTERIOR*/
      DELETE FROM CONTRIBDIFERIDA
       WHERE NRSEQMAPADIF = P_NRSEQUMAPAPU;
      UPDATE IMPBAIXAREC
         SET NRSEQMAPADIF = NULL
       WHERE NRSEQMAPADIF = P_NRSEQUMAPAPU;
      /*BUSCA O VALOR DAS VENDAS PARA CLIENTES PESSOAS PÚBLICAS NO PERÍODO*/
      FOR C_NFDIFERIDA IN (SELECT NF.CDFILIAL, NF.NRLANCTONF, NF.CDCLIENTE, NF.NRNOTAFISC, SUM(IT.VRCONTITIMP) AS VRCONTABIL,
                                  SUM(IT.VRBASECALCIT) AS VRBASECALC, SUM(VRIMPOSTOIT) AS VRIMPOSTO, IT.CDSITUTRIBITNFE,
                                  IT.VRALIQITEM, IT.CDIMPOSTO, DECODE(FL.IDCUMUPISCOFIL,'S',DECODE(IT.VRALIQITEM,DECODE(IM.CDIMPOSTONFE,'50',1.65,'60',7.6),'01','02'),
                                                                                            DECODE(IT.VRALIQITEM,DECODE(IM.CDIMPOSTONFE,'50',0.65,'60',3  ),'51','52')) AS CDCONTRIBAPUR
                             FROM NOTAFISCAL NF, ITEMPROIMPOS IT, IMPOSTO IM, CLIENTE CL, FILIAL FL, CFOPPADRAO C,
                                  (SELECT DISTINCT CDFILIAL, NRLANCTONF
                                     FROM IMPOSTONF
                                    WHERE NRSEQUMAPAPU  = P_NRSEQUMAPAPU) IP
                            WHERE NF.CDFILIAL      = IP.CDFILIAL
                              AND NF.NRLANCTONF    = IP.NRLANCTONF
                              AND NF.CDCLIENTE     = CL.CDCLIENTE
                              AND CL.IDPRIPUBCLIE  = 'B'
                              AND NF.IDENTRSAIDOP  = 'S'
                              AND NF.CDFILIAL      = IT.CDFILIAL
                              AND NF.NRLANCTONF    = IT.NRLANCTONF
                              AND IT.CDIMPOSTO     = IM.CDIMPOSTO
                              AND IM.CDIMPOSTONFE  = P_CDIMPOSTONFE
                              AND NF.CDFILIEMIT    = FL.CDFILIAL
                              AND IT.CDFISCOPERIT  = C.CDCFOPPADRAO(+)
                              AND NVL(C.IDTIPOCFOP,'X') <> 'D'
                            GROUP BY NF.CDFILIAL, NF.NRLANCTONF, NF.CDCLIENTE, NF.NRNOTAFISC,
                                  IT.CDSITUTRIBITNFE, IT.VRALIQITEM, IT.CDIMPOSTO,
                                  DECODE(FL.IDCUMUPISCOFIL,'S',DECODE(IT.VRALIQITEM,DECODE(IM.CDIMPOSTONFE,'50',1.65,'60',7.6),'01','02'),DECODE(IT.VRALIQITEM,DECODE(IM.CDIMPOSTONFE,'50',0.65,'60',3),'51','52'))) LOOP
         /*INSERE A NOTA NO CONTROLE DE DIFERIMENTO*/
         NOVO_CODIGO('CONTRIBDIFERIDA',V_NRSEQCONTRDIF,1);
         INSERT INTO CONTRIBDIFERIDA
            (NRSEQCONTRDIF, NRSEQUMAPAPU, CDFILIAL, NRLANCTONF, CDCLIENTE,
             CDSITUTRIB, VRCONTABIL, VRCONTNAOREC, VRBASECALC, VRBASENAOREC,
             VRALIQUOTA, VRCONTRIBDIF, VRCREDDIFERIDO, VRCONTRIBDIFANT,
             VRCONTRIBDIFAT, VRCREDDIFAT, NRSEQMAPADIF, CDIMPOSTO, CDCONTRIBAPUR)
         VALUES
            (SUBSTR(V_NRSEQCONTRDIF,11,10), P_NRSEQUMAPAPU, C_NFDIFERIDA.CDFILIAL, C_NFDIFERIDA.NRLANCTONF, C_NFDIFERIDA.CDCLIENTE,
             C_NFDIFERIDA.CDSITUTRIBITNFE, C_NFDIFERIDA.VRCONTABIL, C_NFDIFERIDA.VRCONTABIL, C_NFDIFERIDA.VRBASECALC, C_NFDIFERIDA.VRBASECALC,
             C_NFDIFERIDA.VRALIQITEM, C_NFDIFERIDA.VRIMPOSTO, 0, 0,
             0, 0, P_NRSEQUMAPAPU, C_NFDIFERIDA.CDIMPOSTO, C_NFDIFERIDA.CDCONTRIBAPUR);
         /*BUSCA OS DADOS DE RECEBIMENTO REFERENTES A ESSAS NOTAS PARA ATUALIZAR OS DEMAIS CAMPOS DA TABELA*/
         FOR C_NF_DADOSREC IN (SELECT MAX(I.DTBAIXAREC) AS DTBAIXAREC, SUM(I.VRPROPREC) AS VRCONTABILREC,
                                      SUM(I.VRPROPRECBC) AS VRBASECALCREC, I.CDIMPOSTO
                                 FROM IMPBAIXAREC I
                                WHERE I.CDFILIAL        = C_NFDIFERIDA.CDFILIAL
                                  AND I.NRLANCTONF      = C_NFDIFERIDA.NRLANCTONF
                                  AND I.NRSEQMAPADIF    IS NULL
                                  AND I.DTBAIXAREC      BETWEEN P_DTINICIAL AND P_DTFINAL
                                  AND I.CDIMPOSTO       = C_NFDIFERIDA.CDIMPOSTO
                                  AND I.VRALIQNF        = C_NFDIFERIDA.VRALIQITEM
                                  AND I.CDSITUTRIBITNFE = C_NFDIFERIDA.CDSITUTRIBITNFE
                                GROUP BY I.CDIMPOSTO) LOOP
             UPDATE IMPBAIXAREC
                SET NRSEQMAPADIF    = P_NRSEQUMAPAPU
              WHERE CDFILIAL        = C_NFDIFERIDA.CDFILIAL
                AND NRLANCTONF      = C_NFDIFERIDA.NRLANCTONF
                AND NRSEQMAPADIF    IS NULL
                AND DTBAIXAREC      BETWEEN P_DTINICIAL AND P_DTFINAL
                AND CDIMPOSTO       = C_NFDIFERIDA.CDIMPOSTO
                AND VRALIQNF        = C_NFDIFERIDA.VRALIQITEM
                AND CDSITUTRIBITNFE = C_NFDIFERIDA.CDSITUTRIBITNFE;
             UPDATE CONTRIBDIFERIDA
                SET VRCONTABILREC   = C_NF_DADOSREC.VRCONTABILREC,
                    VRBASECALCREC   = C_NF_DADOSREC.VRBASECALCREC,
                    VRCONTNAOREC    = VRCONTABIL - C_NF_DADOSREC.VRCONTABILREC,
                    VRBASENAOREC    = VRBASECALC - C_NF_DADOSREC.VRBASECALCREC,
                    VRCONTRIBDIF    = ROUND((VRBASECALC - C_NF_DADOSREC.VRBASECALCREC) * VRALIQUOTA / 100,2),
                    DTRECEBIMENTO   = C_NF_DADOSREC.DTBAIXAREC
              WHERE NRSEQCONTRDIF   = SUBSTR(V_NRSEQCONTRDIF,11,10);
         END LOOP;
      END LOOP;
      /*------------CALCULA O CRÉDITO DIFERIDO NO PERÍODO----------*/
      /*BUSCA O VALOR DE PESSOA PÚBLICA QUE NÃO FOI RECEBIDO - APENAS PARA O CRÉDITO NÃO CUMULATIVO,
        NO REGIME CUMULATIVO O DIFERIMENTO É APENAS NO VALOR A RECEBER*/
      FOR C_FATNREC IN (SELECT NRSEQCONTRDIF, VRCONTNAOREC, VRCONTRIBDIF
                          FROM CONTRIBDIFERIDA C, NOTAFISCAL N, FILIAL F
                         WHERE NRSEQUMAPAPU     = P_NRSEQUMAPAPU
                           AND NRSEQMAPADIF     = P_NRSEQUMAPAPU
                           AND VRCONTNAOREC     > 0
                           AND C.CDFILIAL       = N.CDFILIAL
                           AND C.NRLANCTONF     = N.NRLANCTONF
                           AND N.CDFILIEMIT     = F.CDFILIAL
                           AND F.IDCUMUPISCOFIL = 'S') LOOP
          /*BUSCA O VALOR PROPORCIONAL REFERENTE AO VALOR NÃO RECEBIDO EM RELAÇÃO AO FATURAMENTO NO PERÍODO*/
          IF V_VCSAIDA > 0 THEN
             V_PROPORCRED  := C_FATNREC.VRCONTNAOREC / V_VCSAIDA * 100;
          ELSE
             V_PROPORCRED  := 0;
          END IF;
          /*BUSCA O VALOR DO CRÉDITO NO PERÍODO, POR TIPO DE CREDITO E NATUREZA PARA APLICAR A PROPORCIONALIDADE*/
          V_VRTOTCREDITODIF := 0;
          FOR C_CREDITO IN (SELECT SUM(IT.VRIMPOSTOIT) AS VRCREDITO, IT.CDTPCREDPICOITE,
                                   CASE WHEN (P_CDIMPOSTONFE = '50' AND IT.VRALIQITEM IN (0.65, 1.65)) OR
                                             (P_CDIMPOSTONFE = '60' AND IT.VRALIQITEM IN (3, 7.6))
                                        THEN '01' ELSE '02' END AS NATUCREDITO
                              FROM ITEMPROIMPOS IT, IMPOSTO IM, CFOPPADRAO C,
                                   (SELECT DISTINCT I.CDFILIAL, I.NRLANCTONF
                                      FROM IMPOSTONF I, NOTAFISCAL N
                                     WHERE I.NRSEQUMAPAPU = P_NRSEQUMAPAPU
                                       AND I.NRLANCTONF   = N.NRLANCTONF
                                       AND I.CDFILIAL     = N.CDFILIAL
                                       AND N.IDENTRSAIDOP = 'E') NF
                             WHERE IT.CDFILIAL     = NF.CDFILIAL
                               AND IT.NRLANCTONF   = NF.NRLANCTONF
                               AND IT.CDIMPOSTO    = IM.CDIMPOSTO
                               AND IM.CDIMPOSTONFE = P_CDIMPOSTONFE
                               AND IT.CDFISCALIT   = '1'
                               AND IT.CDFISCOPERIT = C.CDCFOPPADRAO(+)
                               AND NVL(C.IDTIPOCFOP,'X') <> 'D'
                             GROUP BY IT.CDTPCREDPICOITE,
                                   CASE WHEN (P_CDIMPOSTONFE = '50' AND IT.VRALIQITEM IN (0.65, 1.65)) OR
                                             (P_CDIMPOSTONFE = '60' AND IT.VRALIQITEM IN (3, 7.6))
                                        THEN '01' ELSE '02' END) LOOP
             /*INSERE OS DADOS NA TABELA PARA CONTROLE DO CRÉDITO*/
             NOVO_CODIGO('CONTROLCREDDIF',V_NRSEQCREDDIF,1);
             INSERT INTO CONTROLCREDDIF
                (NRSEQCREDDIF, NRSEQCONTRDIF, VRCREDDIFERIDO,
                 CDNATUCREDDIF, CDTPCREDITO, NRSEQMAPADIF,
                 VRCONTRIBDIFANT, VRCONTRIBDIFAT, VRCREDDIFAT)
             VALUES
                (SUBSTR(V_NRSEQCREDDIF,11,10), C_FATNREC.NRSEQCONTRDIF, ROUND(C_CREDITO.VRCREDITO * V_PROPORCRED / 100,2),
                 C_CREDITO.NATUCREDITO, C_CREDITO.CDTPCREDPICOITE, P_NRSEQUMAPAPU, 0, 0, 0);
             V_VRTOTCREDITODIF := NVL(V_VRTOTCREDITODIF,0) + ROUND(C_CREDITO.VRCREDITO * V_PROPORCRED / 100,2);
          END LOOP;
          /*ATUALIZA A TABELA DE DIFERIMENTO, COM O TOTAL DO CRÉDITO DIFERIDO, E O VALOR DO CONTRIBUIÇÃO DIFERIDA ANTERIORMENTE,
            A SER UTILIZADA EM PERÍODOS FUTUROS*/
          UPDATE CONTRIBDIFERIDA
             SET VRCREDDIFERIDO = V_VRTOTCREDITODIF
           WHERE NRSEQCONTRDIF  = C_FATNREC.NRSEQCONTRDIF;
          IF V_VRTOTCREDITODIF > 0 THEN
             /*ATUALIZA A TABELA DE CONTROLE DE CRÉDITO, PARA DEFINIR O VALOR DA CONTRIBUIÇÃO PROPORCIONAL A CADA TIPO DE CRÉDITO*/
             FOR C_CREDDIF IN (SELECT VRCREDDIFERIDO, NRSEQCREDDIF
                                 FROM CONTROLCREDDIF
                                WHERE NRSEQCONTRDIF = C_FATNREC.NRSEQCONTRDIF) LOOP
                 UPDATE CONTROLCREDDIF
                    SET VRCONTRIBDIF = ROUND((C_CREDDIF.VRCREDDIFERIDO/V_VRTOTCREDITODIF) * C_FATNREC.VRCONTRIBDIF,2)
                  WHERE NRSEQCREDDIF = C_CREDDIF.NRSEQCREDDIF;
             END LOOP;
          END IF;
      END LOOP;
      /*BUSCA OS VALORES DE PERÍODOS ANTERIORES QUE FORAM BAIXADOS NESSE PERÍODO*/
      FOR C_DIF_ANT IN (SELECT IB.NRSEQUMAPAPU, NF.CDFILIAL, NF.NRLANCTONF, NF.CDCLIENTE, SUM(IT.VRCONTITIMP) AS VRCONTABIL,
                               IB.VRCONTABILREC, SUM(IT.VRBASECALCIT) AS VRBASECALC, IB.VRBASECALCREC, SUM(VRIMPOSTOIT) AS VRIMPOSTO,
                               IT.CDSITUTRIBITNFE, IT.VRALIQITEM, IT.CDIMPOSTO, IB.DTBAIXAREC,
                               DECODE(FL.IDCUMUPISCOFIL,'S',DECODE(IT.VRALIQITEM,DECODE(P_CDIMPOSTONFE,'50',1.65,'60',7.6),'01','02'),
                                                            DECODE(IT.VRALIQITEM,DECODE(P_CDIMPOSTONFE,'50',0.65,'60',3  ),'51','52')) AS CDCONTRIBAPUR
                          FROM NOTAFISCAL NF, FILIAL FL, ITEMPROIMPOS IT, CLIENTE CL, CFOPPADRAO C,
                               (SELECT I.CDFILIAL, I.NRLANCTONF, I.CDIMPOSTO, MAX(I.DTBAIXAREC) AS DTBAIXAREC,
                                       SUM(I.VRPROPREC) AS VRCONTABILREC, SUM(I.VRPROPRECBC) AS VRBASECALCREC,
                                       I.VRALIQNF, I.CDSITUTRIBITNFE,
                                       MAX((SELECT MAX(NRSEQUMAPAPU)
                                              FROM IMPOSTONF
                                             WHERE CDFILIAL   = I.CDFILIAL
                                               AND NRLANCTONF = I.NRLANCTONF
                                               AND CDIMPOSTO  = I.CDIMPOSTO)) AS NRSEQUMAPAPU
                                  FROM IMPBAIXAREC I, NOTAFISCAL N, IMPOSTO IM
                                 WHERE I.NRSEQMAPADIF  IS NULL
                                   AND I.DTBAIXAREC    BETWEEN P_DTINICIAL AND P_DTFINAL
                                   AND I.CDIMPOSTO     = IM.CDIMPOSTO
                                   AND IM.CDIMPOSTONFE = P_CDIMPOSTONFE
                                   AND I.CDFILIAL      = N.CDFILIAL
                                   AND I.NRLANCTONF    = N.NRLANCTONF
                                   AND N.CDEMPRESA     = P_CDEMPRESA
                                 GROUP BY I.CDFILIAL, I.NRLANCTONF, I.CDIMPOSTO, I.VRALIQNF, I.CDSITUTRIBITNFE) IB
                         WHERE NF.CDCLIENTE       = CL.CDCLIENTE
                           AND CL.IDPRIPUBCLIE    = 'B'
                           AND NF.IDENTRSAIDOP    = 'S'
                           AND NF.CDFILIEMIT      = FL.CDFILIAL
                           AND NF.CDFILIAL        = IT.CDFILIAL
                           AND NF.NRLANCTONF      = IT.NRLANCTONF
                           AND IT.CDFILIAL        = IB.CDFILIAL
                           AND IT.NRLANCTONF      = IB.NRLANCTONF
                           AND IT.CDIMPOSTO       = IB.CDIMPOSTO
                           AND IT.VRALIQITEM      = IB.VRALIQNF
                           AND IT.CDSITUTRIBITNFE = IB.CDSITUTRIBITNFE
                           AND IB.NRSEQUMAPAPU    <> P_NRSEQUMAPAPU
                           AND IT.CDFISCOPERIT    = C.CDCFOPPADRAO(+)
                           AND NVL(C.IDTIPOCFOP,'X') <> 'D'
                           AND NF.CDEMPRESA       = P_CDEMPRESA
                         GROUP BY IB.NRSEQUMAPAPU, NF.CDFILIAL, NF.NRLANCTONF, NF.CDCLIENTE, IB.VRCONTABILREC,
                               IB.VRBASECALCREC, IT.CDSITUTRIBITNFE, IT.VRALIQITEM, IT.CDIMPOSTO, IB.DTBAIXAREC,
                               DECODE(FL.IDCUMUPISCOFIL,'S',DECODE(IT.VRALIQITEM,DECODE(P_CDIMPOSTONFE,'50',1.65,'60',7.6),'01','02'),DECODE(IT.VRALIQITEM,DECODE(P_CDIMPOSTONFE,'50',0.65,'60',3),'51','52'))) LOOP
         V_VRCONTABILREC := 0;
         V_VRBASECALCREC := 0;
         BEGIN
            SELECT SUM(VRCONTABILREC), SUM(VRBASECALCREC), MAX(NRSEQMAPADIF)
              INTO V_VRCONTABILREC, V_VRBASECALCREC, V_NRSEQULTMAPA
              FROM CONTRIBDIFERIDA
             WHERE CDFILIAL   = C_DIF_ANT.CDFILIAL
               AND NRLANCTONF = C_DIF_ANT.NRLANCTONF
               AND CDIMPOSTO  = C_DIF_ANT.CDIMPOSTO
               AND CDSITUTRIB = C_DIF_ANT.CDSITUTRIBITNFE
               AND VRALIQUOTA = C_DIF_ANT.VRALIQITEM
               AND NRSEQMAPADIF < P_NRSEQUMAPAPU;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_VRCONTABILREC := 0;
               V_VRBASECALCREC := 0;
               V_NRSEQULTMAPA  := NULL;
         END;
         BEGIN
            SELECT VRCONTNAOREC, VRCONTRIBDIF, VRCREDDIFERIDO, NRSEQCONTRDIF
              INTO V_VRULTCONTNAOREC, V_VRULTCONTRIBDIF, V_VRULTCREDDIFERIDO, V_ULTNRSEQCONTRDIF
              FROM CONTRIBDIFERIDA
             WHERE CDFILIAL     = C_DIF_ANT.CDFILIAL
               AND NRLANCTONF   = C_DIF_ANT.NRLANCTONF
               AND CDIMPOSTO    = C_DIF_ANT.CDIMPOSTO
               AND CDSITUTRIB   = C_DIF_ANT.CDSITUTRIBITNFE
               AND VRALIQUOTA   = C_DIF_ANT.VRALIQITEM
               AND NRSEQMAPADIF = V_NRSEQULTMAPA;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_VRULTCONTNAOREC   := 0;
               V_VRULTCONTRIBDIF   := 0;
               V_VRULTCREDDIFERIDO := 0;
               V_ULTNRSEQCONTRDIF  := NULL;
         END;
         V_VRCONTNAOREC := NVL(C_DIF_ANT.VRCONTABIL,0) - NVL(C_DIF_ANT.VRCONTABILREC,0) - NVL(V_VRCONTABILREC,0);
         V_VRBASENAOREC := NVL(C_DIF_ANT.VRBASECALC,0) - NVL(C_DIF_ANT.VRBASECALCREC,0) - NVL(V_VRBASECALCREC,0);
         IF V_VRCONTNAOREC = 0 THEN
            V_VRCONTRIBDIF    := 0;
            V_VRCREDDIFERIDO  := 0;
            V_VRCONTRIBDIFANT := NVL(V_VRULTCONTRIBDIF,0) - NVL(V_VRULTCREDDIFERIDO,0);
         ELSIF V_VRULTCONTNAOREC > 0 THEN
            V_VRCONTRIBDIF    := ROUND(V_VRCONTNAOREC / V_VRULTCONTNAOREC * NVL(V_VRULTCONTRIBDIF,0),2);
            V_VRCREDDIFERIDO  := ROUND(V_VRCONTNAOREC / V_VRULTCONTNAOREC * NVL(V_VRULTCREDDIFERIDO,0),2);
            V_VRCONTRIBDIFANT := (NVL(V_VRULTCONTRIBDIF,0) - NVL(V_VRULTCREDDIFERIDO,0)) - (NVL(V_VRCONTRIBDIF,0) - NVL(V_VRCREDDIFERIDO,0));
         END IF;
         IF V_VRCONTRIBDIFANT > 0 THEN
            /*INSERE A NOTA NO CONTROLE DE DIFERIMENTO*/
            NOVO_CODIGO('CONTRIBDIFERIDA',V_NRSEQCONTRDIF,1);
            INSERT INTO CONTRIBDIFERIDA
               (NRSEQCONTRDIF, NRSEQUMAPAPU, CDFILIAL, NRLANCTONF,
                CDCLIENTE, CDIMPOSTO, CDSITUTRIB, VRALIQUOTA,
                VRCONTABIL, VRCONTABILREC, VRBASECALC, VRBASECALCREC,
                VRCONTNAOREC, VRBASENAOREC, VRCONTRIBDIF, VRCREDDIFERIDO,
                VRCONTRIBDIFANT, VRCONTRIBDIFAT,
                VRCREDDIFAT, NRSEQMAPADIF, DTRECEBIMENTO, CDCONTRIBAPUR)
            VALUES
               (SUBSTR(V_NRSEQCONTRDIF,11,10), C_DIF_ANT.NRSEQUMAPAPU, C_DIF_ANT.CDFILIAL, C_DIF_ANT.NRLANCTONF,
                C_DIF_ANT.CDCLIENTE, C_DIF_ANT.CDIMPOSTO, C_DIF_ANT.CDSITUTRIBITNFE, C_DIF_ANT.VRALIQITEM,
                C_DIF_ANT.VRCONTABIL, C_DIF_ANT.VRCONTABILREC, C_DIF_ANT.VRBASECALC, C_DIF_ANT.VRBASECALCREC,
                V_VRCONTNAOREC, V_VRBASENAOREC, V_VRCONTRIBDIF, V_VRCREDDIFERIDO,
                V_VRCONTRIBDIFANT, (NVL(V_VRULTCONTRIBDIF,0) - NVL(V_VRCONTRIBDIF,0)),
                (NVL(V_VRULTCREDDIFERIDO,0) - NVL(V_VRCREDDIFERIDO,0)), P_NRSEQUMAPAPU, C_DIF_ANT.DTBAIXAREC, C_DIF_ANT.CDCONTRIBAPUR);
            /*INSERIR A TABELA DETALHADA POR CRÉDITO*/
            FOR C_CREDDIF IN (SELECT CDNATUCREDDIF, CDTPCREDITO, VRCREDDIFERIDO, VRCONTRIBDIF,
                                     VRCONTRIBDIFANT, VRCONTRIBDIFAT, VRCREDDIFAT
                                FROM CONTROLCREDDIF
                               WHERE NRSEQCONTRDIF = V_ULTNRSEQCONTRDIF) LOOP
               IF V_VRCONTNAOREC = 0 THEN
                  V_VRCONTRIBDIF    := 0;
                  V_VRCREDDIFERIDO  := 0;
                  V_VRCONTRIBDIFANT := NVL(C_CREDDIF.VRCONTRIBDIF,0) - NVL(C_CREDDIF.VRCREDDIFERIDO,0);
               ELSIF V_VRULTCONTNAOREC > 0 THEN
                  V_VRCONTRIBDIF    := ROUND(V_VRCONTNAOREC / V_VRULTCONTNAOREC * NVL(C_CREDDIF.VRCONTRIBDIF,0),2);
                  V_VRCREDDIFERIDO  := ROUND(V_VRCONTNAOREC / V_VRULTCONTNAOREC * NVL(C_CREDDIF.VRCREDDIFERIDO,0),2);
                  V_VRCONTRIBDIFANT := (NVL(C_CREDDIF.VRCONTRIBDIF,0) - NVL(C_CREDDIF.VRCREDDIFERIDO,0)) - (NVL(V_VRCONTRIBDIF,0) - NVL(V_VRCREDDIFERIDO,0));
               END IF;
               /*INSERE OS DADOS NA TABELA PARA CONTROLE DO CRÉDITO*/
               NOVO_CODIGO('CONTROLCREDDIF',V_NRSEQCREDDIF,1);
               INSERT INTO CONTROLCREDDIF
                  (NRSEQCREDDIF, NRSEQCONTRDIF, VRCREDDIFERIDO,
                   CDNATUCREDDIF, CDTPCREDITO, NRSEQMAPADIF,
                   VRCONTRIBDIF, VRCONTRIBDIFANT,
                   VRCONTRIBDIFAT, VRCREDDIFAT)
               VALUES
                  (SUBSTR(V_NRSEQCREDDIF,11,10),SUBSTR(V_NRSEQCONTRDIF,11,10), V_VRCREDDIFERIDO,
                   C_CREDDIF.CDNATUCREDDIF, C_CREDDIF.CDTPCREDITO, P_NRSEQUMAPAPU,
                   V_VRCONTRIBDIF, V_VRCONTRIBDIFANT,
                   (NVL(V_VRULTCONTRIBDIF,0) - NVL(V_VRCONTRIBDIF,0)),
                   (NVL(V_VRULTCREDDIFERIDO,0) - NVL(V_VRCREDDIFERIDO,0)));
            END LOOP;
         END IF;
      END LOOP;
   END IF;
   /*TOTALIZAÇÃO DOS VALORES DO DIFERIMENTO*/
   BEGIN
      SELECT SUM(DECODE(VRCONTRIBDIFANT,0,VRCREDDIFERIDO,0)) , SUM(DECODE(VRCONTRIBDIFANT,0,VRCONTRIBDIF,0)), SUM(VRCONTRIBDIFANT)
        INTO V_VRCREDDIFERIDO, V_VRCONTRIBDIF, V_VRCONTRDIFANT
        FROM CONTRIBDIFERIDA
       WHERE NRSEQMAPADIF = P_NRSEQUMAPAPU;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_VRCREDDIFERIDO := 0;
         V_VRCONTRIBDIF   := 0;
         V_VRCONTRDIFANT  := 0;
   END;
   /*---------------------------CÁLCUlO DO IMPOSTO TOTAL-----------------------------------------------------*/
   /*SOMA O VALOR DOS CREDITOS NO MÊS ATUAL*/
   V_VRCREDMES := NVL(V_VRCREPERANT,0) + NVL(V_VRIMPENTR,0) + NVL(V_VRIMPDEVVEND,0) - NVL(V_VRAJUSTREDCRED,0) + NVL(V_VRAJUSTACRCRED,0) - NVL(V_VRCREDDIFERIDO,0) + NVL(V_VRDEDUCAO,0) + NVL(V_COMPENSACOES,0) + NVL(V_VRBENFEITORIA,0);
   IF V_VRCREDMES < 0 THEN
      V_VRCREDMES := 0;
   END IF;
   /*SOMA O VALOR DOS DÉBITOS NO MÊS ATUAL*/
   V_VRDEBIMES := NVL(V_IMPNCUMSAIDA,0) + NVL(V_IMPCUMSAIDA,0) + NVL(V_VRIMPDEVCOMP,0) + NVL(V_VRIMPECF,0) - NVL(V_VRAJUSTREDDEB,0) + NVL(V_VRAJUSTACRDEB,0) - NVL(V_VRCONTRIBDIF,0) + NVL(V_VRCONTRIBDIFANT,0);
   IF V_VRDEBIMES < 0 THEN
      V_VRDEBIMES := 0;
   END IF;
   V_VRTOTAIMPREC := NVL(V_VRDEBIMES,0) - NVL(V_VRCREDMES,0);
   IF NVL(V_VRTOTAIMPREC,0) < 0 AND P_IDIMPORECUPNFE = 'S' THEN
      V_VRSALDOCRED := ABS(NVL(V_VRTOTAIMPREC,0));
      V_VRTOTAIMPREC := 0;
   ELSE
      V_VRTOTAIMPREC := ABS(NVL(V_VRTOTAIMPREC,0));
      V_VRSALDOCRED  := 0;
   END IF;
   /*GRAVA OS VALORES DA APURAÇÃO POR COMPETÊNCIA PARA PERMITIR A VISUALIZAÇÃO PARA QUEM TEM REGIME DE CAIXA*/
   IF V_IDFORMAPUR = 'P' AND P_CDIMPOSTONFE IN ('50','60') THEN
      /*SOMA O VALOR DOS CREDITOS NO MÊS ATUAL*/
      V_VRCREDMESRPAG := NVL(V_VRCREPERANT,0) + NVL(V_VRIMPENTRRPAG,0) + NVL(V_VRIMPDEVVENDRPAG,0) - NVL(V_VRAJUSTREDCRED,0) + NVL(V_VRAJUSTACRCRED,0) - 0 /*DIFERIDO*/ + NVL(V_VRDEDUCAO,0) + NVL(V_COMPENSACOES,0) + NVL(V_VRBENFEITORIA,0);
      IF V_VRCREDMESRPAG < 0 THEN
         V_VRCREDMESRPAG := 0;
      END IF;
      /*SOMA O VALOR DOS DÉBITOS NO MÊS ATUAL*/
      V_VRDEBIMESRPAG := NVL(V_IMPNCUMSAIDARPAG,0) + NVL(V_IMPCUMSAIDARPAG,0) + NVL(V_VRIMPDEVCOMPRPAG,0) + NVL(V_VRIMPECFRPAG,0) - NVL(V_VRAJUSTREDDEB,0) + NVL(V_VRAJUSTACRDEB,0) - 0 /*CONTRIB.DIF*/ + 0 /*DIFERIDO ANT*/;
      IF V_VRDEBIMESRPAG < 0 THEN
         V_VRDEBIMESRPAG := 0;
      END IF;
      V_VRTOTAIMPRECRPAG := NVL(V_VRDEBIMESRPAG,0) - NVL(V_VRCREDMESRPAG,0);
      IF NVL(V_VRTOTAIMPRECRPAG,0) < 0 AND P_IDIMPORECUPNFE = 'S' THEN
         V_VRSALDOCREDRPAG  := ABS(NVL(V_VRTOTAIMPRECRPAG,0));
         V_VRTOTAIMPRECRPAG := 0;
      ELSE
         V_VRTOTAIMPRECRPAG := ABS(NVL(V_VRTOTAIMPRECRPAG,0));
         V_VRSALDOCREDRPAG  := 0;
      END IF;
      V_VRCREDMESRPAG := NVL(V_VRCREPERANT,0) + NVL(V_VRIMPENTRRPAG,0) + NVL(V_VRIMPDEVVENDRPAG,0) - NVL(V_VRAJUSTREDCRED,0) + NVL(V_VRAJUSTACRCRED,0) + NVL(V_VRBENFEITORIA,0);
      IF V_VRCREDMESRPAG < 0 THEN
         V_VRCREDMESRPAG := 0;
      END IF;
      V_DEBMENOSCREDRPAG :=  NVL(V_VRDEBIMESRPAG,0) - NVL(V_VRCREDMESRPAG,0);
      IF V_DEBMENOSCREDRPAG < 0 THEN
         V_DEBMENOSCREDRPAG := 0;
      END IF;
   END IF;
   IF P_CDIMPOSTONFE IN ('50','60') AND (((V_IDTPCREDANTCONT = 'M') AND (NOT P_BOBLOQUEIA)) OR (V_IDTPCREDANTCONT = 'A')) THEN
      /*----------CÁLCULO DO SALDO CREDOR DE PERÍODO ANTERIOR E DAS COMPENSAÇÕES UTILIZADOS NO PRÓPRIO MES----------*/
      /*DELETA OS DADOS GERADOS NO MÊS ATUAL E AOS MAPAS POSTERIORES, EM CASO DE REAPURAÇÃO DE MAPAS*/
      DELETE FROM CREDANTSPED
       WHERE NRSEQUMAPAPU >= P_NRSEQUMAPAPU
         AND CDEMPRESA    = P_CDEMPRESA
         AND CASE WHEN CDREGISTRO IN ('1100','1300') THEN '50'
                  WHEN CDREGISTRO IN ('1500','1700') THEN '60' END = P_CDIMPOSTONFE;
      /*ATUALIZA OS CRÉDITOS ANTERIORES QUE FORAM GERADOS EM PERÍODOS ANTERIORES MAS QUE FORAM UTILIZADOS
        NO PERÍODO ATUAL OU EM PERÍODOS POSTERIORES, EM CASO DE REAPURAÇÃO DE MAPA*/
      UPDATE CREDANTSPED
         SET VRSALDOCREDORUT = 0,
             VRSALDOCREDFIN  = VRSALDOCREDORUT + VRSALDOCREDFIN,
             DTUTILIZACRED   = NULL
       WHERE DTUTILIZACRED   >= P_DTINICIAL
         AND CDEMPRESA       = P_CDEMPRESA
         AND CASE WHEN CDREGISTRO IN ('1100','1300') THEN '50'
                  WHEN CDREGISTRO IN ('1500','1700') THEN '60' END = P_CDIMPOSTONFE;
      /*NO CASO DE EXISTIR MAIS DE UM REGISTRO DE UM MESMO PERÍODO ANTERIOR QUE TENHA SIDO UTILIZADO
        EM MAIS DE UMA DATA EM MAPAS POSTERIORES, APENAS O PRIMEIRO DELES DEVE PERMANECER*/
      FOR C_ATUREG IN (SELECT MIN(NRSEQCREDANT) AS NRSEQCREDANT, NRSEQUMAPAPU, IDTPCREDANT
                         FROM CREDANTSPED
                        WHERE DTUTILIZACRED IS NULL
                          AND CDEMPRESA     = P_CDEMPRESA
                          AND CASE WHEN CDREGISTRO IN ('1100','1300') THEN '50'
                                   WHEN CDREGISTRO IN ('1500','1700') THEN '60' END = P_CDIMPOSTONFE
                        GROUP BY NRSEQUMAPAPU, IDTPCREDANT
                        ORDER BY NRSEQUMAPAPU, IDTPCREDANT) LOOP
          DELETE FROM CREDANTSPED
           WHERE DTUTILIZACRED IS NULL
             AND NRSEQUMAPAPU  = C_ATUREG.NRSEQUMAPAPU
             AND CDEMPRESA     = P_CDEMPRESA
             AND IDTPCREDANT   = C_ATUREG.IDTPCREDANT
             AND NRSEQCREDANT  <> C_ATUREG.NRSEQCREDANT
             AND CASE WHEN CDREGISTRO IN ('1100','1300') THEN '50'
                      WHEN CDREGISTRO IN ('1500','1700') THEN '60' END = P_CDIMPOSTONFE;
      END LOOP;
      /*BUSCA O VALOR DOS CREDITOS NO MÊS ATUAL, DESCONSIDERANDO O CREDITO ANTERIOR E AS COMPENSAÇÕES, QUE TEM CONTROLE PRÓPRIO*/
      V_VRCREDMES := NVL(V_VRCREDMES,0) - NVL(V_VRCREPERANT,0) - NVL(V_COMPENSACOES,0);
      IF V_VRCREDMES < 0 THEN
         V_VRCREDMES := 0;
      END IF;
      /*GUARDA O VALOR DAS COMPENSAÇÕES NO MÊS ATUAL*/
      V_VRCOMPMES := NVL(V_COMPENSACOES,0);
      /*VERIFICA SE HOUVE VALOR DE CRÉDITO NO PROPRIO MÊS*/
      IF (V_VRDEBIMES - V_VRCREDMES) < 0 THEN
         /*O CONTROLE DO SALDO CREDOR É DE PERÍODO ANTERIOR, ENTÃO SE HOUVE CRÉDITO NO PRÓPRIO PERÍODO
           ELE NÃO PODE SER CONSIDERADO COMO UTILIZADO*/
         V_VRSALDOCREMES    := V_VRCREDMES - V_VRDEBIMES;
         V_VRSALDOCREDUT    := 0;
         V_VRSALDOCREDUTANT := 0;
         V_VRSALDOCREDFIN   := V_VRSALDOCREMES;
         V_DTUTILIZACRED    := NULL;
         /*VERIFICA SE TEVE COMPENSAÇÃO NO MÊS ONDE HOUVE APENAS SALDO CREDOR, E PORTANTO A COMPENSAÇÃO TAMBÉM NÃO FOI UTILIZADA*/
         IF (V_VRCOMPMES) > 0 THEN
            V_VRCOMPENSMES   := V_VRCOMPMES;
            V_VRCOMPENSUT    := 0;
            V_VRCOMPENSUTANT := 0;
            V_VRCOMPENSFIN   := V_VRCOMPMES;
            V_DTUTILIZACRED  := NULL;
         END IF;
      /*SE NÃO RESTOU SALDO CREDOR NO MÊS, VERIFICA AS COMPENSAÇÕES*/
      ELSE
         /*O VALOR DAS COMPENSAÇÕES VAI SER O VALOR NO MÊS, INDEPENDENTE SE UTILIZOU OU NÃO, ESSE REGISTRO DEVE EXISTIR*/
         V_VRCOMPENSMES := V_VRCOMPMES;
         /*SE APÓS REDUZIR A COMPENSAÇÃO AINDA HOUVE DÉBITO NO MÊS, O VALOR DAS COMPENSAÇÕES FOI TOTALMENTE UTILIZADO*/
         IF (V_VRDEBIMES - V_VRCREDMES - V_VRCOMPMES) >= 0 THEN
            V_VRCOMPENSUT  := V_VRCOMPMES;
            V_VRCOMPENSFIN := 0;
         /*CASO CONTRÁRIO CALCULA O VALOR UTILIZADO E O QUE SOBROU PARA O PERÍODO SEGUINTE*/
         ELSE
            V_VRCOMPENSUT  := V_VRDEBIMES - V_VRCREDMES;
            V_VRCOMPENSFIN := V_VRCOMPENSMES - V_VRCOMPENSUT;
         END IF;
         /*MESMO QUE NÃO HOUVE COMPENSAÇÃO UTILIZADA NO MÊS, O REGISTRO SERÁ GRAVADO COM A DATA DO MÊS ATUAL PREENCHIDA,
           PARA NÃO PERDER A REFERÊNCIA NA HORA DE GERAR O SPED DE MESES ANTERIORES*/
         V_DTUTILIZACRED := P_DTINICIAL;
         /*COMO O VALOR ESTÁ SENDO GERADO NESSE MÊS, ELE TAMBÉM NÃO PODE TER SIDO UTILIZADO EM MESES ANTERIORES*/
         V_VRCOMPENSUTANT := 0;
      END IF;
      /*INSERE NA TABELA OS DADOS REFERENTES AO MÊS ATUAL*/
      /*CRÉDITO ANTERIOR*/
      IF V_VRSALDOCREMES > 0 THEN
         NOVO_CODIGO('CREDANTSPED',V_NRSEQCREDANT,1);
         INSERT INTO CREDANTSPED
            (NRSEQCREDANT, IDTPCREDANT, CDREGISTRO, NRSEQUMAPAPU, CDEMPRESA, VRSALDOCREDOR,
             VRSALDOCREDORUT, VRSALDOCREDUTANT, VRSALDOCREDFIN, DTUTILIZACRED)
         VALUES
            (SUBSTR(V_NRSEQCREDANT,11,10), 'CA', DECODE(P_CDIMPOSTONFE,'50','1100','1500'), P_NRSEQUMAPAPU, P_CDEMPRESA,
             V_VRSALDOCREMES, V_VRSALDOCREDUT, V_VRSALDOCREDUTANT, V_VRSALDOCREDFIN, V_DTUTILIZACRED);
      END IF;
      /*COMPENSAÇÕES*/
      IF V_VRCOMPENSMES > 0 THEN
         /*Separa o Valor das Compensações Por Regime - A prioridade de Utilização é do Não Cumulativo Primeiro*/
         IF (V_COMPENSACOESNC > 0) AND (V_COMPENSACOESCUM > 0) THEN
            IF (V_VRCOMPENSUT - V_COMPENSACOESNC) >= 0 THEN
               V_VRCOMPENSUTNC   := V_COMPENSACOESNC;
               V_VRCOMPENSFINNC  := 0;
               V_VRCOMPENSUTCUM  := V_VRCOMPENSUT - V_COMPENSACOESNC;
               V_VRCOMPENSFINCUM := V_COMPENSACOESCUM - V_VRCOMPENSUTCUM;
            ELSE
               V_VRCOMPENSUTNC   := V_COMPENSACOESNC + (V_VRCOMPENSUT - V_COMPENSACOESNC);
               V_VRCOMPENSFINNC  := ABS(V_VRCOMPENSUT - V_COMPENSACOESNC);
               V_VRCOMPENSUTCUM  := 0;
               V_VRCOMPENSFINCUM := V_COMPENSACOESCUM;
            END IF;
            /*Insere um registro com o valor para cada regime*/
            /*Não Cumulativo*/
            NOVO_CODIGO('CREDANTSPED',V_NRSEQCREDANT,1);
            INSERT INTO CREDANTSPED
               (NRSEQCREDANT, IDTPCREDANT, CDREGISTRO, NRSEQUMAPAPU, CDEMPRESA, VRSALDOCREDOR,
                VRSALDOCREDORUT, VRSALDOCREDUTANT, VRSALDOCREDFIN, DTUTILIZACRED, IDCUMUPISCOFIL)
            VALUES
               (SUBSTR(V_NRSEQCREDANT,11,10), 'CO', DECODE(P_CDIMPOSTONFE,'50','1300','1700'), P_NRSEQUMAPAPU,
                P_CDEMPRESA, V_COMPENSACOESNC, V_VRCOMPENSUTNC, V_VRCOMPENSUTANT, V_VRCOMPENSFINNC, V_DTUTILIZACRED, 'S');
            /*SE A COMPENSAÇÃO FOI UTILIZADA NO PERÍODO MAS AINDA RESTOU CRÉDITO PARA UTILIZAR EM PERÍODO FUTURO,
              INSERE UM NOVO REGISTRO COM ESSE VALOR COMO UTILIZADO EM PERÍODOS ANTERIORES E A DATA DE UTILIZAÇÃO NULA,
              PARA UTILIZAR EM UM PERÍODO FUTURO*/
            IF (V_DTUTILIZACRED IS NOT NULL) AND (V_VRCOMPENSFIN > 0) THEN
               NOVO_CODIGO('CREDANTSPED',V_NRSEQCREDANT,1);
               INSERT INTO CREDANTSPED
                  (NRSEQCREDANT, IDTPCREDANT, CDREGISTRO, NRSEQUMAPAPU, CDEMPRESA, VRSALDOCREDOR,
                   VRSALDOCREDORUT, VRSALDOCREDUTANT, VRSALDOCREDFIN, DTUTILIZACRED, IDCUMUPISCOFIL)
               VALUES
                  (SUBSTR(V_NRSEQCREDANT,11,10), 'CO', DECODE(P_CDIMPOSTONFE,'50','1300','1700'),
                   P_NRSEQUMAPAPU, P_CDEMPRESA, V_COMPENSACOESNC, 0, V_VRCOMPENSUTNC, V_VRCOMPENSFINNC, NULL, 'S');
            END IF;
            /*Cumulativo*/
            NOVO_CODIGO('CREDANTSPED',V_NRSEQCREDANT,1);
            INSERT INTO CREDANTSPED
               (NRSEQCREDANT, IDTPCREDANT, CDREGISTRO, NRSEQUMAPAPU, CDEMPRESA, VRSALDOCREDOR,
                VRSALDOCREDORUT, VRSALDOCREDUTANT, VRSALDOCREDFIN, DTUTILIZACRED, IDCUMUPISCOFIL)
            VALUES
               (SUBSTR(V_NRSEQCREDANT,11,10), 'CO', DECODE(P_CDIMPOSTONFE,'50','1300','1700'), P_NRSEQUMAPAPU,
                P_CDEMPRESA, V_COMPENSACOESCUM, V_VRCOMPENSUTCUM, V_VRCOMPENSUTANT, V_VRCOMPENSFINCUM, V_DTUTILIZACRED, 'N');
            /*SE A COMPENSAÇÃO FOI UTILIZADA NO PERÍODO MAS AINDA RESTOU CRÉDITO PARA UTILIZAR EM PERÍODO FUTURO,
              INSERE UM NOVO REGISTRO COM ESSE VALOR COMO UTILIZADO EM PERÍODOS ANTERIORES E A DATA DE UTILIZAÇÃO NULA,
              PARA UTILIZAR EM UM PERÍODO FUTURO*/
            IF (V_DTUTILIZACRED IS NOT NULL) AND (V_VRCOMPENSFIN > 0) THEN
               NOVO_CODIGO('CREDANTSPED',V_NRSEQCREDANT,1);
               INSERT INTO CREDANTSPED
                  (NRSEQCREDANT, IDTPCREDANT, CDREGISTRO, NRSEQUMAPAPU, CDEMPRESA, VRSALDOCREDOR,
                   VRSALDOCREDORUT, VRSALDOCREDUTANT, VRSALDOCREDFIN, DTUTILIZACRED, IDCUMUPISCOFIL)
               VALUES
                  (SUBSTR(V_NRSEQCREDANT,11,10), 'CO', DECODE(P_CDIMPOSTONFE,'50','1300','1700'),
                   P_NRSEQUMAPAPU, P_CDEMPRESA, V_COMPENSACOESCUM, 0, V_VRCOMPENSUTCUM, V_VRCOMPENSFINCUM, NULL, 'N');
            END IF;
         ELSE
            IF V_COMPENSACOESNC > 0 THEN
               V_REGIMECOMP := 'S';
            ELSE
               V_REGIMECOMP := 'N';
            END IF;
            NOVO_CODIGO('CREDANTSPED',V_NRSEQCREDANT,1);
            INSERT INTO CREDANTSPED
               (NRSEQCREDANT, IDTPCREDANT, CDREGISTRO, NRSEQUMAPAPU, CDEMPRESA, VRSALDOCREDOR,
                VRSALDOCREDORUT, VRSALDOCREDUTANT, VRSALDOCREDFIN, DTUTILIZACRED, IDCUMUPISCOFIL)
            VALUES
               (SUBSTR(V_NRSEQCREDANT,11,10), 'CO', DECODE(P_CDIMPOSTONFE,'50','1300','1700'), P_NRSEQUMAPAPU,
                P_CDEMPRESA, V_VRCOMPENSMES, V_VRCOMPENSUT, V_VRCOMPENSUTANT, V_VRCOMPENSFIN, V_DTUTILIZACRED, V_REGIMECOMP);
            /*SE A COMPENSAÇÃO FOI UTILIZADA NO PERÍODO MAS AINDA RESTOU CRÉDITO PARA UTILIZAR EM PERÍODO FUTURO,
              INSERE UM NOVO REGISTRO COM ESSE VALOR COMO UTILIZADO EM PERÍODOS ANTERIORES E A DATA DE UTILIZAÇÃO NULA,
              PARA UTILIZAR EM UM PERÍODO FUTURO*/
            IF (V_DTUTILIZACRED IS NOT NULL) AND (V_VRCOMPENSFIN > 0) THEN
               NOVO_CODIGO('CREDANTSPED',V_NRSEQCREDANT,1);
               INSERT INTO CREDANTSPED
                  (NRSEQCREDANT, IDTPCREDANT, CDREGISTRO, NRSEQUMAPAPU, CDEMPRESA, VRSALDOCREDOR,
                   VRSALDOCREDORUT, VRSALDOCREDUTANT, VRSALDOCREDFIN, DTUTILIZACRED, IDCUMUPISCOFIL)
               VALUES
                  (SUBSTR(V_NRSEQCREDANT,11,10), 'CO', DECODE(P_CDIMPOSTONFE,'50','1300','1700'),
                   P_NRSEQUMAPAPU, P_CDEMPRESA, V_VRCOMPENSMES, 0, V_VRCOMPENSUT, V_VRCOMPENSFIN, NULL, V_REGIMECOMP);
            END IF;
         END IF;
      END IF;
      /*SE O DÉBITO FOI MAIOR QUE O CRÉDITO E AS COMPENSAÇÕES DO PERÍODO É NECESSÁRIO VERIFICAR SE EXISTE
        SALDO CREDOR OU COMPENSAÇÕES A UTILIZAR DE PERÍODOS ANTERIORES, CASO A COMPENSAÇÃO SEJA AUTOMÁTICA*/
      IF V_IDTPCREDANTCONT = 'A' THEN
         V_VRPAGARMES := V_VRDEBIMES - V_VRCREDMES - V_VRCOMPMES;
         /*-CONSIDERA APENAS SALDOS QUE NÃO FORAM UTILIZADOS OU QUE FORAM UTILIZADOS APENAS EM PARTE EM PERÍODO ANTERIOR
           (DATA DE UTILIZAÇÃO É NULA PORQUE CRÉDITO UTILIZADO EM PARTE INSERE UM NOVO REGISTRO NA TABELA)
           -A ORDENAÇÃO É PARA CONSIDERAR PRIMEIRO O MAPA DE MENOR DATA, E, EM SEGUIDA O CRÉDITO ANTERIOR (CA) TEM PRIORIDADE
           SOBRE O CRÉDITO DAS COMPENSAÇÕES (CO)*/
         FOR C_CREDANT IN (SELECT NRSEQCREDANT, IDTPCREDANT, CDREGISTRO, NRSEQUMAPAPU,
                                  VRSALDOCREDOR, VRSALDOCREDFIN, IDCUMUPISCOFIL
                             FROM CREDANTSPED
                            WHERE VRSALDOCREDFIN > 0
                              AND DTUTILIZACRED IS NULL
                              AND NRSEQUMAPAPU  <> P_NRSEQUMAPAPU
                              AND CDEMPRESA     = P_CDEMPRESA
                              AND ((P_CDIMPOSTONFE = '50' AND CDREGISTRO IN ('1100','1300')) OR
                                   (P_CDIMPOSTONFE = '60' AND CDREGISTRO IN ('1500','1700')))
                            ORDER BY NRSEQUMAPAPU, IDTPCREDANT, IDCUMUPISCOFIL) LOOP
             /*SE AINDA HOUVER DÉBITO NO MÊS, REALIZA OS CÁLCULOS*/
             IF V_VRPAGARMES > 0 THEN
                /*SE O CRÉDITO DISPONÍVEL FOR MAIOR OU IGUAL AO DÉBITO DO MÊS SIGNIFICA QUE ELE JÁ ABATE TODO O DÉBITO*/
                IF V_VRPAGARMES <= C_CREDANT.VRSALDOCREDFIN THEN
                   V_VRSALDOCREDUT    := V_VRPAGARMES;
                   V_VRSALDOCREDFIN   := C_CREDANT.VRSALDOCREDFIN - V_VRSALDOCREDUT;
                   V_VRPAGARMES       := 0;
                   /*ATUALIZA A DATA DE UTILIZAÇÃO E OS VALORES*/
                   UPDATE CREDANTSPED
                      SET VRSALDOCREDORUT  = V_VRSALDOCREDUT,
                          VRSALDOCREDFIN   = V_VRSALDOCREDFIN,
                          DTUTILIZACRED    = P_DTINICIAL
                    WHERE NRSEQCREDANT     = C_CREDANT.NRSEQCREDANT;
                   /*SE AINDA SOBROU SALDO, INSERE UM NOVO REGISTRO PARA UTILIZAR EM PERÍODO FUTURO*/
                   IF V_VRSALDOCREDFIN > 0 THEN
                      NOVO_CODIGO('CREDANTSPED',V_NRSEQCREDANT,1);
                      INSERT INTO CREDANTSPED
                        (NRSEQCREDANT, IDTPCREDANT, CDREGISTRO, NRSEQUMAPAPU, CDEMPRESA, VRSALDOCREDOR,
                         VRSALDOCREDORUT, VRSALDOCREDUTANT, VRSALDOCREDFIN, DTUTILIZACRED, IDCUMUPISCOFIL)
                      VALUES
                        (SUBSTR(V_NRSEQCREDANT,11,10), C_CREDANT.IDTPCREDANT, C_CREDANT.CDREGISTRO, C_CREDANT.NRSEQUMAPAPU,
                         P_CDEMPRESA, C_CREDANT.VRSALDOCREDOR, 0, (C_CREDANT.VRSALDOCREDOR - V_VRSALDOCREDFIN), V_VRSALDOCREDFIN, NULL, C_CREDANT.IDCUMUPISCOFIL);
                   END IF;
                /*CASO CONTRÁRIO, O CRÉDITO NESSA LINHA FOI TOTALMENTE UTILIZADO E É NECESSÁRIO FAZER OS CÁLCULOS
                  PARA SABER QUANTO AINDA EXISTE DE DÉBITO*/
                ELSE
                   V_VRPAGARMES := V_VRPAGARMES - C_CREDANT.VRSALDOCREDFIN;
                   /*ATUALIZA A DATA DE UTILIZAÇÃO E OS VALORES*/
                   UPDATE CREDANTSPED
                      SET VRSALDOCREDORUT = C_CREDANT.VRSALDOCREDFIN,
                          VRSALDOCREDFIN  = 0,
                          DTUTILIZACRED   = P_DTINICIAL
                    WHERE NRSEQCREDANT    = C_CREDANT.NRSEQCREDANT;
                END IF;
             /*SE NÃO EXISTIR MAIS DÉBITO NO MÊS*/
             ELSE
                /*ATUALIZA OS REGISTROS PARA GRAVAR A DATA DESSE MAPA, POIS NO SPED ELES DEVEM APARECER MESMO SEM UTILIZAR CRÉDITO.
                  SE APENAS ALTERAR A DATA E OS VALORES QUANDO UTILIZAR PERDE A REFERÊNCIA NA HORA DE GERAR O SPED DE MESES ANTERIORES*/
                UPDATE CREDANTSPED
                   SET DTUTILIZACRED = P_DTINICIAL
                 WHERE NRSEQCREDANT  = C_CREDANT.NRSEQCREDANT;
                /*INSERE UM NOVO REGISTRO COM A DATA NULA PARA MANTER O CRÉDITO A SER UTILIZADO EM PERÍODO FUTURO*/
                NOVO_CODIGO('CREDANTSPED',V_NRSEQCREDANT,1);
                INSERT INTO CREDANTSPED
                  (NRSEQCREDANT, IDTPCREDANT, CDREGISTRO, NRSEQUMAPAPU, CDEMPRESA, VRSALDOCREDOR,
                   VRSALDOCREDORUT, VRSALDOCREDUTANT, VRSALDOCREDFIN, DTUTILIZACRED, IDCUMUPISCOFIL)
                VALUES
                  (SUBSTR(V_NRSEQCREDANT,11,10), C_CREDANT.IDTPCREDANT, C_CREDANT.CDREGISTRO, C_CREDANT.NRSEQUMAPAPU, P_CDEMPRESA,
                   C_CREDANT.VRSALDOCREDOR, 0, (C_CREDANT.VRSALDOCREDOR - C_CREDANT.VRSALDOCREDFIN), C_CREDANT.VRSALDOCREDFIN, NULL, C_CREDANT.IDCUMUPISCOFIL);
             END IF;
         END LOOP;
      END IF;
   END IF;
   /*---------------------------UPDATE DA MAPAAPURAC COM OS VALORES APURADOS--------------------------------*/
   UPDATE MAPAAPURAC
      SET VRTTCTBLDEB  = NVL(V_VCSAIDA,0),
          VRTTBACALDEB = NVL(V_BCSAIDA,0),
          VRTTCTBLCRE  = NVL(V_VCENTR,0),
          VRTTBACALCRE = NVL(V_BCENTR,0),
          VRTOTAIMPOS  = NVL(V_VRTOTAIMPREC,0),
          VRTOTAGUIA   = (NVL(V_VRTOTAIMPREC,0) + NVL(VRMULTAGUIA,0) + NVL(VRJUROGUIA,0)),
          IDBLOQMAPAPU = 'A',
          IDFORMAPUR   = V_IDFORMAPUR
    WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU;
   /*PREENCHE OS CAMPOS PARA AS INFORMAÇÕES DETALHADAS (MOBILE)*/
   V_TOTALCRED := NVL(V_VRCREPERANT,0) + NVL(V_VRIMPENTR,0) + NVL(V_VRIMPDEVVEND,0) - NVL(V_VRAJUSTREDCRED,0) + NVL(V_VRAJUSTACRCRED,0) + NVL(V_VRBENFEITORIA,0);
   IF V_TOTALCRED < 0 THEN
      V_TOTALCRED := 0;
   END IF;
   V_DEBMENOSCRED :=  NVL(V_VRDEBIMES,0) - NVL(V_TOTALCRED,0);
   IF V_DEBMENOSCRED < 0 THEN
      V_DEBMENOSCRED := 0;
   END IF;
   V_VRTTBCCREDITO := NVL(V_BCENTR,0) + NVL(V_VRDEVOLVEND,0);
   V_VRCREDITOS    := NVL(V_VRIMPENTR,0) + NVL(V_VRIMPDEVVEND,0) + NVL(V_VRBENFEITORIA,0);
   V_VRTTBCDEBITO  := NVL(V_BCSAIDA,0) + NVL(V_VRDEVCOMPR,0);
   V_VRDEBITOSNC   := NVL(V_IMPNCUMSAIDA,0) + NVL(V_VRIMPDEVCOMP,0) + NVL(V_VRECFNCUMU,0);
   V_VRDEBITOSCUM  := NVL(V_IMPCUMSAIDA,0) + NVL(V_VRECFCUMU,0);
   V_VRTTBCCREDITORPAG := NVL(V_BCENTRRPAG,0) + NVL(V_VRDEVOLVENDRPAG,0);
   V_VRCREDITOSRPAG    := NVL(V_VRIMPENTRRPAG,0) + NVL(V_VRIMPDEVVENDRPAG,0) + NVL(V_VRBENFEITORIA,0);
   V_VRTTBCDEBITORPAG  := NVL(V_BCSAIDARPAG,0) + NVL(V_VRDEVCOMPRRPAG,0);
   V_VRDEBITOSNCRPAG   := NVL(V_IMPNCUMSAIDARPAG,0) + NVL(V_VRIMPDEVCOMPRPAG,0) + NVL(V_VRECFNCUMURPAG,0);
   V_VRDEBITOSCUMRPAG  := NVL(V_IMPCUMSAIDARPAG,0) + NVL(V_VRECFCUMURPAG,0);
   /*---------------------------INSERCAO DA TABELA DE DETALHES----------------------------------------------*/
   DELETE FROM DETAPURACONTR
    WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU;
   INSERT INTO DETAPURACONTR
      (NRSEQUMAPAPU, VRCANCDEVOL, VRCREDPERANT, VRCREDENTR, VRCREDDEVOL, VRCREDATIVIMOB, VROUTRECCONT,
       VRDEVOLCOMP, VRDEBNCUMULA, VRDEBCUMULA, VRDEBIDEVOL, VRDEBECF, VRCOMPENSA, VRDEDUCAO, VRSALDOCRED,
       VRBENFEITORIA, VRAJUSTECREDENTR, VRAJUSTEDEBENTR, VRAJUSTECREDSAID, VRAJUSTEDEBSAID, VRTOTCRED,
       VRTOTDEB, VRTOTCONTR, VRCTBLNFENTR, VRCTBLDVEND, VRTTBCCREDITO, VRBCCREDNF, VRBCCREDBENF, VRCREDITOS,
       VRCTBLNFSAID, VRCTBLVENDAS, VRCTBLDCOMP, VRTTBCDEBITO, VRBCDEBNF, VRBCDEBECF, VRBCDEBOUTREC, VRDEBITOSNC,
       VRECFNCUMU, VRDEBITOSCUM, VRECFCUMU, VRDEBNFSAIDNC, VRDEBOUTRECNC, VRBEDNFSAIDCUM, VRDEBOUTRECCUM,
       VRCREDPERANTNUT, VRCREDDIFERIDO, VRCONTRIBDIF, VRCONTRIBDIFANT,
       VRTTCTBLDEBRPAG, VRTTBACALDEBRPAG, VRTTCTBLCRERPAG, VRTTBACALCRERPAG, VRCANCDEVOLRPAG,
       VRDEVOLCOMPRPAG, VRCREDENTRRPAG, VRCREDDEVOLRPAG, VRTOTCREDRPAG,
       VRDEBNCUMULARPAG, VRDEBCUMULARPAG, VRDEBIDEVOLRPAG, VRDEBECFRPAG, VRTOTDEBRPAG,
       VRSOMADEBCREDRPAG, VRTOTAIMPOSRPAG, VRSALDOCREDRPAG, VRTTBCCREDITORPAG, VRCREDITOSRPAG,
       VRTTBCDEBITORPAG, VRDEBITOSNCRPAG, VRDEBITOSCUMRPAG, VRCTBLNFENTRRPAG, VRCTBLDVENDRPAG,
       VRBCCREDNFRPAG, VRCTBLNFSAIDRPAG, VRCTBLVENDASRPAG, VRCTBLDCOMPRPAG, VRBCDEBNFRPAG,
       VRBCDEBECFRPAG, VRDEBNFSAIDNCRPAG, VRECFNCUMURPAG, VRBEDNFSAIDCUMRPAG, VRECFCUMURPAG)
   VALUES
      (P_NRSEQUMAPAPU, NVL(V_VRDEVOLVEND,0), NVL(V_VRCREPERANT,0), NVL(V_VRIMPENTR,0), NVL(V_VRIMPDEVVEND,0), 0,
       NVL(V_OUTRRECSAIDA,0), NVL(V_VRDEVCOMPR,0), NVL(V_IMPNCUMSAIDA,0), NVL(V_IMPCUMSAIDA,0), NVL(V_VRIMPDEVCOMP,0),
       NVL(V_VRIMPECF,0), NVL(V_COMPENSACOES,0), NVL(V_VRDEDUCAO,0), NVL(V_VRSALDOCRED,0), NVL(V_VRBENFEITORIA,0),
       NVL(V_VRAJUSTACRCRED,0), NVL(V_VRAJUSTREDCRED,0), NVL(V_VRAJUSTACRDEB,0), NVL(V_VRAJUSTREDDEB,0),
       NVL(V_TOTALCRED,0), NVL(V_VRDEBIMES,0), NVL(V_DEBMENOSCRED,0), NVL(V_VRCTBLNFENTR,0), NVL(V_VRCTBLDVEND,0),
       NVL(V_VRTTBCCREDITO,0), NVL(V_VRBCCREDNF,0), NVL(V_VRBCCREDBENF,0), NVL(V_VRCREDITOS,0), NVL(V_VRCTBLNFSAID,0),
       NVL(V_VRCTBLVENDAS,0), NVL(V_VRCTBLDCOMP,0), NVL(V_VRTTBCDEBITO,0), NVL(V_VRBCDEBNF,0), NVL(V_VRBCDEBECF,0),
       NVL(V_VRBCDEBOUTREC,0), NVL(V_VRDEBITOSNC,0), NVL(V_VRECFNCUMU,0), NVL(V_VRDEBITOSCUM,0), NVL(V_VRECFCUMU,0),
       NVL(V_VRDEBNFSAIDNC,0), NVL(V_VRDEBOUTRECNC,0), NVL(V_VRBEDNFSAIDCUM,0), NVL(V_VRDEBOUTRECCUM,0),
       NVL(V_VRCREMAPANTNUT,0), NVL(V_VRCREDDIFERIDO,0), NVL(V_VRCONTRIBDIF,0), NVL(V_VRCONTRDIFANT,0),
       NVL(V_VCSAIDARPAG,0), NVL(V_BCSAIDARPAG,0), NVL(V_VCENTRRPAG,0), NVL(V_BCENTRRPAG,0), NVL(V_VRDEVOLVENDRPAG,0),
       NVL(V_VRDEVCOMPRRPAG,0), NVL(V_VRIMPENTRRPAG,0), NVL(V_VRIMPDEVVENDRPAG,0), NVL(V_VRCREDMESRPAG,0),
       NVL(V_IMPNCUMSAIDARPAG,0), NVL(V_IMPCUMSAIDARPAG,0), NVL(V_VRIMPDEVCOMPRPAG,0), NVL(V_VRIMPECFRPAG,0), NVL(V_VRDEBIMESRPAG,0),
       NVL(V_DEBMENOSCREDRPAG,0), NVL(V_VRTOTAIMPRECRPAG,0), NVL(V_VRSALDOCREDRPAG,0), NVL(V_VRTTBCCREDITORPAG,0), NVL(V_VRCREDITOSRPAG,0),
       NVL(V_VRTTBCDEBITORPAG,0), NVL(V_VRDEBITOSNCRPAG,0), NVL(V_VRDEBITOSCUMRPAG,0), NVL(V_VRCTBLNFENTRRPAG,0), NVL(V_VRCTBLDVENDRPAG,0),
       NVL(V_VRBCCREDNFRPAG,0), NVL(V_VRCTBLNFSAIDRPAG,0), NVL(V_VRCTBLVENDASRPAG,0), NVL(V_VRCTBLDCOMPRPAG,0), NVL(V_VRBCDEBNFRPAG,0),
       NVL(V_VRBCDEBECFRPAG,0), NVL(V_VRDEBNFSAIDNCRPAG,0), NVL(V_VRECFNCUMURPAG,0), NVL(V_VRBEDNFSAIDCUMRPAG,0), NVL(V_VRECFCUMURPAG,0));
   /*---------------------------UPDATE DA IMPOSTONF E ITEMVENOUTIMPOS QUANDO O PARAMETRO VINCULA NF AO MAPA ESTA MARCADO--------------------------------*/
   IF V_IDNFFORAPERAPU = 'S' THEN
      UPDATE IMPOSTONF
         SET DTREFMAPAPU  = P_DTINICIAL
       WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU OR NRSEQMAPOIMP = P_NRSEQUMAPAPU;
      UPDATE IMPBAIXAREC
         SET DTREFMAPAPU  = P_DTINICIAL
       WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU OR NRSEQMAPOIMP = P_NRSEQUMAPAPU;
      UPDATE ITEMVENOUTIMPOS
         SET DTREFMAPAPU = P_DTINICIAL
       WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU;
   END IF;
END;