CREATE OR REPLACE PROCEDURE APURACAO_SIMPLESNACIONAL(
   P_NRSEQUMAPAPU   IN MAPAAPURAC.NRSEQUMAPAPU%TYPE,
   P_CDEMPRESA      IN EMPRESA.CDEMPRESA%TYPE,
   P_DTINICIAL      IN NOTAFISCAL.DTENTRSAID%TYPE,
   P_DTFINAL        IN NOTAFISCAL.DTENTRSAID%TYPE,
   P_NRORG          IN NOTAFISCAL.NRORG%TYPE DEFAULT 1,
   P_RETORNO        OUT VARCHAR2)
AS

   V_FATURA_ST                  FLOAT;
   V_DEDUZ_FATURA_ST            FLOAT;
   V_FATURA_SEMST               FLOAT;
   V_DEDUZ_FATURA_SEMST         FLOAT;
   V_FATURA_ISENTO              FLOAT;
   V_DEDUZ_FATURA_ISENTO        FLOAT;
   V_FATURA_EXPORTACAO          FLOAT;
   V_DEDUZ_FATURA_EXPORTACAO    FLOAT;
   V_FATURA_RETIDO              FLOAT;
   V_DEDUZ_FATURA_RETIDO        FLOAT;

   V_DEDUZBCST                  FLOAT;
   V_DEDUZBCSEMST               FLOAT;
   V_DEDUZBCISENTO              FLOAT;
   V_RETIDONPROV                FLOAT;
   V_COMPBCST                   FLOAT;
   V_COMPBCSEMST                FLOAT;
   V_COMPBCISENTO               FLOAT;
   V_VRDEDUZBCEXP               FLOAT;
   V_VRCOMPBCEXP                FLOAT;

   V_VRFATURAMENTO              FLOAT;
   V_ALIQUOTA12MESES            FLOAT;
   V_RECEITAANUAL               FLOAT;
   V_ALIQST                     FLOAT;
   V_RECEITA12MESES             FLOAT;
   V_ALIQMAJORADA               FLOAT;
   V_IMPOSTOEXCEDENTE           FLOAT;
   V_PARCEXCEDENTE              FLOAT;
   V_RBAPROP                    FLOAT;
   V_ALIQUOTARET                FLOAT;
   V_ALIQUOTAMAX                FLOAT;
   V_VRULTIMAFAIXA              FLOAT;
   V_VRINIFAIXA                 FLOAT;
   V_VRFINALFAIXA               FLOAT;
   V_VRPARCDEDUZIR              FLOAT; 
   V_RECEITATOTAL               FLOAT;
   V_VRRECEITAMES               FLOAT;
   V_VRBASECALCSEMST            FLOAT;
   V_VRSEMDEDUCAOST             FLOAT;
   V_VRBASECALCST               FLOAT;
   V_VRDEDUCAOST                FLOAT;
   V_VRBASECALCISENTO           FLOAT;
   V_VRDEDUCAOISENTO            FLOAT;
   V_VRDEDUCAORET               FLOAT;
   V_VRBASECALCRET              FLOAT;
   V_ALIQUOTAEXP                FLOAT;
   V_VREXPORTACAO               FLOAT;
   V_VRIMPOSTORECOLHER          FLOAT;
   V_VRBASECALCEXP              FLOAT;
   V_VRIMPOSTOMAPA              FLOAT;

   V_JAMAJOROU                  VARCHAR2(01);
   V_TEMALIQFAIXA               VARCHAR2(01);
   V_TEMRECEITABRUTA            VARCHAR2(01);
   V_CDFAIXA                    VARCHAR2(05);
   V_CDSIMPLESNACIONAL          VARCHAR2(05);
   V_NOTAFORAPER                VARCHAR2(01);
   V_TEMTABELA                  VARCHAR2(01);

   V_QTDEMESES                  INTEGER;

   V_DTPRIMDIAMES               DATE;
   V_DTININFFORPER              DATE;
   V_DTINI12MESES               DATE;
   V_DTINIMAJORA                DATE;

   V_BOCALCAPOS2018             BOOLEAN;
   V_ALIQISS                    FLOAT;
   V_RATEIADIFISS               VARCHAR2(01);
   V_VRDIFARREDALIQ             FLOAT;
   V_VRALIQTOTAIMPOS            FLOAT;
   V_IMPOSTONFEALIQMAX          VARCHAR2(02);
   V_IMPOSTOALIQMAX             VARCHAR2(02);
   V_ALIQICMS                   FLOAT;
   V_ALIQRETIDO                 FLOAT;
   V_ALIQEXPORTACAO             FLOAT;

BEGIN
   V_FATURA_ST                  := 0;
   V_DEDUZ_FATURA_ST            := 0;
   V_FATURA_SEMST               := 0;
   V_DEDUZ_FATURA_SEMST         := 0;
   V_FATURA_ISENTO              := 0;
   V_DEDUZ_FATURA_ISENTO        := 0;
   V_FATURA_EXPORTACAO          := 0;
   V_DEDUZ_FATURA_EXPORTACAO    := 0;
   V_FATURA_RETIDO              := 0;
   V_DEDUZ_FATURA_RETIDO        := 0;

   V_DEDUZBCST                  := 0;
   V_DEDUZBCSEMST               := 0;
   V_DEDUZBCISENTO              := 0;
   V_RETIDONPROV                := 0;
   V_COMPBCST                   := 0;
   V_COMPBCSEMST                := 0;
   V_COMPBCISENTO               := 0;
   V_VRDEDUZBCEXP               := 0;
   V_VRCOMPBCEXP                := 0;

   V_VRFATURAMENTO              := 0;
   V_ALIQUOTA12MESES            := 0;
   V_RECEITAANUAL               := 0;
   V_ALIQST                     := 0;
   V_RECEITA12MESES             := 0;
   V_ALIQMAJORADA               := 0;
   V_IMPOSTOEXCEDENTE           := 0;
   V_PARCEXCEDENTE              := 0;
   V_RBAPROP                    := 0;
   V_QTDEMESES                  := 0;
   V_ALIQUOTARET                := 0;
   V_ALIQUOTAMAX                := 0;
   V_VRULTIMAFAIXA              := 0;
   V_VRINIFAIXA                 := 0;
   V_VRFINALFAIXA               := 0;
   V_RECEITATOTAL               := 0;
   V_VRRECEITAMES               := 0;
   V_VRBASECALCSEMST            := 0;
   V_VRSEMDEDUCAOST             := 0;
   V_VRBASECALCST               := 0;
   V_VRDEDUCAOST                := 0;
   V_VRBASECALCISENTO           := 0;
   V_VRDEDUCAOISENTO            := 0;
   V_VRDEDUCAORET               := 0;
   V_VRBASECALCRET              := 0;
   V_ALIQUOTAEXP                := 0;
   V_VREXPORTACAO               := 0;
   V_VRIMPOSTORECOLHER          := 0;
   V_VRBASECALCEXP              := 0;
   V_VRIMPOSTOMAPA              := 0;

   V_TEMTABELA                  := 'N';
   V_JAMAJOROU                  := 'N';
   V_TEMRECEITABRUTA            := 'N';
   V_TEMALIQFAIXA               := 'N';
   V_CDSIMPLESNACIONAL          := '';
   V_CDFAIXA                    := 'U';
   V_RATEIADIFISS               := 'N';

   V_DTININFFORPER  := '';
   V_DTINIMAJORA    := TO_DATE(('01/01' || TO_CHAR(P_DTINICIAL, 'YYYY')));
   V_DTINI12MESES   := TO_DATE(('01/' || TO_CHAR(P_DTINICIAL, 'MM/YYYY')));
   V_DTINI12MESES   := ADD_MONTHS(V_DTINI12MESES, -12); /*CALCULA A DATA CORRESPONDENTE AOS 12 MESES ANTERIORES A DATA INICIAL*/
   V_DTPRIMDIAMES   := TO_DATE(('01/' || TO_CHAR(P_DTINICIAL, 'MM/YYYY')));

   V_BOCALCAPOS2018 := (P_DTINICIAL >= '01/01/2018');

   /*APAGA O DETALHE DO MAPA ANTES DE GERAR NOVAMENTE*/
   DELETE FROM DETALHEAPURSN
    WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU;

   /*VERIFICA SE EXISTE TABELA DE REFERENCIA RELACIONADA A EMPRESA NA TELA TABELA DO SIMPLES NACIONAL, CASO NAO EXISTA, A APURACAO
     NAO E REALIZADA E ENVIADA UMA MENSAGEM AO USUARIO*/
   BEGIN
      SELECT MAX('S')
        INTO V_TEMTABELA
        FROM EMPRSIMPLESNAC E, EMPRESA EE, SIMPLESNACIONAL S
       WHERE E.CDEMPRESA         = EE.CDEMPRESA
         AND E.CDEMPRESA         = P_CDEMPRESA
         AND S.CDSIMPLESNACIONAL = E.CDSIMPLESNACIONAL
         AND S.DTINIVIGENCIA    <= P_DTINICIAL
         AND NVL(S.DTFIMVIGENCIA,P_DTFINAL) >= P_DTFINAL
         AND ROWNUM = 1;
   EXCEPTION
        WHEN NO_DATA_FOUND THEN
           V_TEMTABELA  := 'N';
   END;

   IF V_TEMTABELA = 'S' THEN
      /* SELECT PARA PEGAR O PERIODO A SER CONSIDERADO PARA AS NF FORA DO PERIODO */
      BEGIN
         SELECT DTININFFORPER
           INTO V_DTININFFORPER
           FROM PARAMFISCAL;
      EXCEPTION
           WHEN NO_DATA_FOUND THEN
              V_DTININFFORPER  := '';
      END;

      /*VERIFICA SE EXISTE LANCAMENTO DE NOTA PARA O SIMPLES,
        CASO NAO EXISTA E CONSIDERADO O VALOR DO FATURAMENTO INFORMADO NA TELA CALCULO DA RECEITA BRUTA*/
      BEGIN
         SELECT MAX(CDSIMPLESNACIONAL)
           INTO  V_CDSIMPLESNACIONAL
           FROM (
                 /*SELECT PARA PEGAR OS PRODUTOS DA NF QUE ESTAO COM CSOSN COM TAMANHO 4 */
                 SELECT DISTINCT I.CDSIMPLESNACIONAL
                   FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                  WHERE E.CDEMPRESA            = P_CDEMPRESA
                    AND N.CDEMPRESA            = E.CDEMPRESA
                    AND E.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                    AND T.CDTIPOOPER           = N.CDTIPOOPER
                    AND T.IDTIPOOPERREC        = 'C'
                    AND N.IDENTRSAIDOP         = T.IDENTRSAIDOP
                    AND N.IDSTATUS             IN ('E','A')
                    AND N.IDENTRSAIDOP         = 'S'
                    AND N.DTEMISSAO            BETWEEN V_DTININFFORPER AND P_DTFINAL
                    AND N.CDFILIAL             = I.CDFILIAL
                    AND N.NRLANCTONF           = I.NRLANCTONF
                    AND N.NRSEQUMAPAPUSN       IS NULL
                    AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','TMP')
                    AND I.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                 UNION ALL
                 /*SELECT PARA VERIFICAR SE TEM NOTA DO FOS*/
                 SELECT DISTINCT E.CDSIMPLESNACIONAL
                   FROM EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, PARAVEND P, ITEMVENOUTIMPOS I, FILIAL F
                  WHERE E.CDEMPRESA         = P_CDEMPRESA
                    AND F.CDEMPRESA         = E.CDEMPRESA
                    AND I.CDFILIAL          = F.CDFILIAL
                    AND P.CDFILIAL          = I.CDFILIAL
                    AND P.CDTPOPERCNTREC    = T.CDTIPOOPER
                    AND E.CDSIMPLESNACIONAL = T.CDSIMPLESNACIONAL
                    AND T.IDTIPOOPERREC     = 'C'
                    AND I.CDIMPOSTO         = '50'
                    AND I.DTREDUCAOZ BETWEEN P_DTINICIAL AND P_DTFINAL);
      EXCEPTION
           WHEN NO_DATA_FOUND THEN
              V_CDSIMPLESNACIONAL  := '';
      END;

      /*PEGA A RECEITA BRUTA INFORMADA NA TELA CALCULO DA RECEITA BRUTA, PARA TODAS AS TABELAS DO SIMPLES NACIONAL, REFERENTE AOS 12 MESES ANTERIORES A DATA INICIAL*/
      BEGIN
         SELECT NVL(SUM(VRRECEITABR),0)
           INTO V_RECEITA12MESES
           FROM RECEITABRUTA
          WHERE CDEMPRESA    = P_CDEMPRESA
            AND DTREFRECEITABR BETWEEN V_DTINI12MESES AND LAST_DAY(ADD_MONTHS(P_DTINICIAL,-1))  /*PEGA OS ULTIMOS 12 MESES SEM CONSIDERAR O QUE ESTA SENDO APURADO*/
            AND IDSTATUSMES  = 'B';
      EXCEPTION
           WHEN NO_DATA_FOUND THEN
              V_RECEITA12MESES   := 0;
      END;

      IF V_RECEITA12MESES > 0 THEN
         V_TEMRECEITABRUTA := 'S';
      ELSE
         V_TEMRECEITABRUTA := 'N';
      END IF;

      IF V_TEMRECEITABRUTA = 'S' THEN
         /*FAZ A PROPORCIONALIDADE DE VALOR PARA CONSIDERAR 12 MESES QUANDO NAO TEM OS 12 MESES ANTERIORES AO MES QUE ESTA SENDO APURADO
         INFORMADOS NA TELA CALCULO DA RECEITA BRUTA. OS MESES DEVEM ESTA BLOQUEADOS PARA SEREM CONSIDERADOS.*/
         BEGIN
            SELECT NVL(COUNT(DISTINCT DTREFRECEITABR),0) /*VERIFICA A QUANTIDADE DE MESES ANTERIORES*/
              INTO V_QTDEMESES
              FROM RECEITABRUTA
             WHERE CDEMPRESA    = P_CDEMPRESA
               AND DTREFRECEITABR BETWEEN V_DTINI12MESES AND LAST_DAY(ADD_MONTHS(P_DTINICIAL,-1))
               AND IDSTATUSMES  = 'B';
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_QTDEMESES  := 0;
         END;

         IF ((V_QTDEMESES > 0) AND (V_QTDEMESES < 12)) THEN
            V_RECEITA12MESES := ROUND((V_RECEITA12MESES / V_QTDEMESES) * 12,2);
         END IF;
      ELSE
         V_RECEITA12MESES := 0;
      END IF;

      /*MAJORACAO */
      /*PEGA A RECEITA ANUAL PARA CALCULAR O RBA (RECEITA BRUTA ANUAL, ATE O MES DE APURACAO) VERIFICANDO SE SERA FEITA A MAJORACAO*/
      BEGIN
         SELECT NVL(SUM(VRRECEITABR),0)
           INTO V_RECEITAANUAL
           FROM RECEITABRUTA
          WHERE CDEMPRESA = P_CDEMPRESA
            AND DTREFRECEITABR BETWEEN V_DTINIMAJORA AND LAST_DAY(P_DTINICIAL)
            AND IDSTATUSMES = 'B';
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_RECEITAANUAL   := 0;
      END;

      /*MAJORACAO */
      /*FAZ A PROPORCIONALIDADE DE VALOR PARA CONSIDERAR OS MESES DESDE DO INICIO DO ANO, QUANDO NAO TEM OS MESES ANTERIORES INFORMADOS NA TELA CALCULO DA RECEITA BRUTA.
      RBA PROPORCIONAL AOS MESES DO ANO ATE O MES QUE ESTA SENDO APURADO */
      BEGIN
         SELECT NVL(COUNT(DISTINCT DTREFRECEITABR),0)
           INTO V_QTDEMESES
           FROM RECEITABRUTA
          WHERE CDEMPRESA = P_CDEMPRESA
            AND DTREFRECEITABR BETWEEN V_DTINIMAJORA AND LAST_DAY(P_DTINICIAL)
            AND IDSTATUSMES = 'B';
      EXCEPTION
           WHEN NO_DATA_FOUND THEN
              V_QTDEMESES := 0;
      END;

      /*CASO A QUANTIDADDE DE MESES CADASTRADO NA TELA CALCULO DA RECEITA BRUTA, SEJA MENOR QUE O MES QUE ESTA SENDO APURADO, E FEITO UM CALCULO PROPORCIONAL DA RECEITA
      DIVIDINDO O VALOR TOTAL DA RECEITA PELA QUANTIDADE DE MESES QUE POSSUI RECEITA E DEPOIS MULTIPLICANDO PELO TOTAL DE MESES ATE O MES QUE ESTA SENDO APURADO.*/
      IF (V_QTDEMESES < TO_NUMBER(TO_CHAR(P_DTINICIAL,'MM'))) THEN
         IF V_QTDEMESES <= 0 THEN
            V_RBAPROP := ROUND(V_RECEITAANUAL * TO_NUMBER(TO_CHAR(P_DTINICIAL,'MM')),2);
         ELSE
            V_RBAPROP := ROUND((V_RECEITAANUAL / V_QTDEMESES) * TO_NUMBER(TO_CHAR(P_DTINICIAL,'MM')),2);
         END IF;
      ELSE
         V_RBAPROP := V_RECEITAANUAL;
      END IF;

      FOR C_TAB_SIMPLES IN (SELECT E.CDSIMPLESNACIONAL
                              FROM EMPRSIMPLESNAC E, EMPRESA EE, SIMPLESNACIONAL S
                             WHERE E.CDEMPRESA         = EE.CDEMPRESA
                               AND E.CDEMPRESA         = P_CDEMPRESA
                               AND S.CDSIMPLESNACIONAL = E.CDSIMPLESNACIONAL
                               AND S.DTINIVIGENCIA    <= P_DTINICIAL
                               AND NVL(S.DTFIMVIGENCIA,P_DTFINAL) >= P_DTFINAL
                             ORDER BY E.CDSIMPLESNACIONAL) LOOP

         /*RECEITA BRUTA MENSAL PEGANDO DA NOTA FISCAL O CSOSN = '500' FATURAMENTO TRIBUTADO PELO ST*/
         /* NFS QUE COMPOE O VALOR DE FATURAMENTO*/
         BEGIN
            SELECT NVL(SUM(VALORST),0)
              INTO  V_FATURA_ST
              FROM (
                    /*SELECT PARA PEGAR OS PRODUTOS DA NF QUE ESTAO COM CSOSN COM TAMANHO 4 */
                    SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALORST
                      FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                     WHERE E.CDEMPRESA                = P_CDEMPRESA
                       AND N.CDEMPRESA                = E.CDEMPRESA
                       AND E.CDSIMPLESNACIONAL        = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                       AND E.CDSIMPLESNACIONAL        = T.CDSIMPLESNACIONAL
                       AND T.CDTIPOOPER               = N.CDTIPOOPER
                       AND T.IDTIPOOPERREC            = 'C'
                       AND N.IDENTRSAIDOP             = T.IDENTRSAIDOP
                       AND N.IDSTATUS IN ('E','A')
                       AND N.IDENTRSAIDOP             = 'S'
                       AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL
                       AND N.CDFILIAL                 = I.CDFILIAL
                       AND N.NRLANCTONF               = I.NRLANCTONF
                       AND LENGTH(I.CDFISCOPERSN)     = 4
                       AND SUBSTR(I.CDFISCOPERSN,2,3) = '500'
                       AND N.NRSEQUMAPAPUSN IS NULL
                       AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','TMP')
                       AND I.CDSIMPLESNACIONAL = T.CDSIMPLESNACIONAL
                       AND SUBSTR(I.CDFISOPEITEM,1,1) <> '7'
                    UNION ALL
                    /*SELECT PARA PEGAR OS PRODUTOS DA NF QUE ESTAO COM CSOSN COM TAMANHO 3 */
                    SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALORST
                      FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                     WHERE E.CDEMPRESA                = P_CDEMPRESA
                       AND N.CDEMPRESA                = E.CDEMPRESA
                       AND E.CDSIMPLESNACIONAL        = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                       AND E.CDSIMPLESNACIONAL        = T.CDSIMPLESNACIONAL
                       AND T.CDTIPOOPER               = N.CDTIPOOPER
                       AND T.IDTIPOOPERREC            = 'C'
                       AND N.IDENTRSAIDOP             = 'S'
                       AND N.IDENTRSAIDOP             = T.IDENTRSAIDOP
                       AND N.IDSTATUS IN ('E','A')
                       AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL
                       AND N.CDFILIAL                 = I.CDFILIAL
                       AND N.NRLANCTONF               = I.NRLANCTONF
                       AND LENGTH(I.CDFISCOPERSN) = 3
                       AND I.CDFISCOPERSN = '500'
                       AND N.NRSEQUMAPAPUSN IS NULL
                       AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','TMP')
                       AND I.CDSIMPLESNACIONAL = T.CDSIMPLESNACIONAL
                       AND SUBSTR(I.CDFISOPEITEM,1,1) <> '7'
                    UNION ALL
                    /*SELECT PARA PEGAR OS PRODUTOS DA NF GERADA PELO FOS QUE ESTAO COM CSOSN COM TAMANHO 4 */
                    SELECT SUM(VRPRODUTO) AS VALORST
                      FROM EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, PARAVEND P, ITEMVENOUTIMPOS I, FILIAL F
                     WHERE E.CDEMPRESA                = P_CDEMPRESA
                       AND F.CDEMPRESA                = E.CDEMPRESA
                       AND I.CDFILIAL                 = F.CDFILIAL
                       AND P.CDFILIAL                 = I.CDFILIAL
                       AND P.CDTPOPERCNTREC           = T.CDTIPOOPER
                       AND E.CDSIMPLESNACIONAL        = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                       AND E.CDSIMPLESNACIONAL        = T.CDSIMPLESNACIONAL
                       AND T.IDTIPOOPERREC            = 'C'
                       AND I.CDIMPOSTO                = '50'
                       AND I.DTREDUCAOZ BETWEEN P_DTINICIAL AND P_DTFINAL
                       AND LENGTH(I.CDFISCOPERSN)     = 4
                       AND SUBSTR(I.CDFISCOPERSN,2,3) = '500'
                    UNION ALL
                    /*SELECT PARA PEGAR OS PRODUTOS DA NF GERADA PELO FOS QUE ESTAO COM CSOSN COM TAMANHO 3 */
                    SELECT SUM(VRPRODUTO) AS VALORST
                      FROM EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, PARAVEND P, ITEMVENOUTIMPOS I, FILIAL F
                     WHERE E.CDEMPRESA                = P_CDEMPRESA
                       AND F.CDEMPRESA                = E.CDEMPRESA
                       AND I.CDFILIAL                 = F.CDFILIAL
                       AND P.CDFILIAL                 = I.CDFILIAL
                       AND P.CDTPOPERCNTREC           = T.CDTIPOOPER
                       AND E.CDSIMPLESNACIONAL        = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                       AND E.CDSIMPLESNACIONAL        = T.CDSIMPLESNACIONAL
                       AND T.IDTIPOOPERREC            = 'C'
                       AND I.CDIMPOSTO                = '50'
                       AND I.DTREDUCAOZ BETWEEN P_DTINICIAL AND P_DTFINAL
                       AND LENGTH(I.CDFISCOPERSN)     = 3
                       AND I.CDFISCOPERSN             = '500');
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_FATURA_ST  := 0;
         END;

         /*RECEITA BRUTA MENSAL PEGANDO DA NOTA FISCAL O CSOSN = '500' FATURAMENTO TRIBUTADO PELO ST*/
         /* NFS QUE DEDUZEM O VALOR DE FATURAMENTO - ESTE SELECT E FEITO PARA MOSTRAR O VALOR DAS DEDUCOES*/
         BEGIN
            SELECT NVL(SUM(VALORST),0)
              INTO V_DEDUZ_FATURA_ST
              FROM (
                    SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALORST
                      FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                     WHERE E.CDEMPRESA                = P_CDEMPRESA
                       AND N.CDEMPRESA                = E.CDEMPRESA
                       AND E.CDSIMPLESNACIONAL        = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                       AND E.CDSIMPLESNACIONAL        = T.CDSIMPLESNACIONAL
                       AND T.CDTIPOOPER               = N.CDTIPOOPER
                       AND T.IDTIPOOPERREC            = 'D'
                       AND N.IDENTRSAIDOP             = T.IDENTRSAIDOP
                       AND N.IDSTATUS IN ('E','A')
                       AND ((N.IDENTRSAIDOP = 'S' AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL) OR
                           (N.IDENTRSAIDOP = 'E' AND N.DTENTRSAID BETWEEN V_DTININFFORPER AND P_DTFINAL))
                       AND N.CDFILIAL                 = I.CDFILIAL
                       AND N.NRLANCTONF               = I.NRLANCTONF
                       AND LENGTH(I.CDFISCOPERSN)     = 4
                       AND SUBSTR(I.CDFISCOPERSN,2,3) = '500'
                       AND N.NRSEQUMAPAPUSN IS NULL
                       AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','PAG')
                       AND I.CDSIMPLESNACIONAL        = T.CDSIMPLESNACIONAL
                       AND SUBSTR(I.CDFISOPEITEM,1,1) <> '7'
                    UNION ALL
                    SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALORST
                      FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                     WHERE E.CDEMPRESA                = P_CDEMPRESA
                       AND N.CDEMPRESA                = E.CDEMPRESA
                       AND E.CDSIMPLESNACIONAL        = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                       AND E.CDSIMPLESNACIONAL        = T.CDSIMPLESNACIONAL
                       AND T.CDTIPOOPER               = N.CDTIPOOPER
                       AND T.IDTIPOOPERREC            = 'D'
                       AND N.IDENTRSAIDOP             = T.IDENTRSAIDOP
                       AND N.IDSTATUS IN ('E','A')
                       AND ((N.IDENTRSAIDOP = 'S' AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL) OR
                           (N.IDENTRSAIDOP = 'E' AND N.DTENTRSAID BETWEEN V_DTININFFORPER AND P_DTFINAL))
                       AND N.CDFILIAL                 = I.CDFILIAL
                       AND N.NRLANCTONF               = I.NRLANCTONF
                       AND LENGTH(I.CDFISCOPERSN)     = 3
                       AND I.CDFISCOPERSN             = '500'
                       AND N.NRSEQUMAPAPUSN IS NULL
                       AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','PAG')
                       AND I.CDSIMPLESNACIONAL        = T.CDSIMPLESNACIONAL
                       AND SUBSTR(I.CDFISOPEITEM,1,1) <> '7');
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_DEDUZ_FATURA_ST  := 0;
         END;

         /*RECEITA BRUTA MENSAL PEGANDO DA NOTA FISCAL O CSOSN <> ('103','300','400','500') FATURAMENTO NAO TRIBUTADO PELO ST*/
         /* NFS QUE COMPOE O VALOR DE FATURAMENTO*/
         BEGIN
           SELECT NVL(SUM(VALORSEMST),0)
           INTO V_FATURA_SEMST
           FROM (
                 SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALORSEMST
                   FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                  WHERE E.CDEMPRESA                = P_CDEMPRESA
                    AND N.CDEMPRESA                = E.CDEMPRESA
                    AND E.CDSIMPLESNACIONAL        = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                    AND E.CDSIMPLESNACIONAL        = T.CDSIMPLESNACIONAL
                    AND T.IDTIPOOPERREC            = 'C'
                    AND T.CDTIPOOPER               = N.CDTIPOOPER
                    AND N.IDENTRSAIDOP             = T.IDENTRSAIDOP
                    AND N.IDSTATUS IN ('E','A')
                    AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL
                    AND N.CDFILIAL                 = I.CDFILIAL
                    AND N.IDENTRSAIDOP             = 'S'
                    AND N.NRLANCTONF               = I.NRLANCTONF
                    AND LENGTH(I.CDFISCOPERSN)     = 3
                    AND NVL(RTRIM(I.CDFISCOPERSN),'0') NOT IN ('103','300','400','500')
                    AND N.NRSEQUMAPAPUSN IS NULL
                    AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','TMP')
                    AND I.CDSIMPLESNACIONAL        = T.CDSIMPLESNACIONAL
                    AND SUBSTR(I.CDFISOPEITEM,1,1) <> '7'
                 UNION ALL
                 SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALORSEMST
                   FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                  WHERE E.CDEMPRESA                = P_CDEMPRESA
                    AND N.CDEMPRESA                = E.CDEMPRESA
                    AND E.CDSIMPLESNACIONAL        = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                    AND E.CDSIMPLESNACIONAL        = T.CDSIMPLESNACIONAL
                    AND T.IDTIPOOPERREC            = 'C'
                    AND T.CDTIPOOPER               = N.CDTIPOOPER
                    AND N.IDENTRSAIDOP             = 'S'
                    AND N.IDENTRSAIDOP             = T.IDENTRSAIDOP
                    AND N.IDSTATUS IN ('E','A')
                    AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL
                    AND N.CDFILIAL                 = I.CDFILIAL
                    AND N.NRLANCTONF               = I.NRLANCTONF
                    AND LENGTH(I.CDFISCOPERSN)     = 4
                    AND NVL(RTRIM(SUBSTR(I.CDFISCOPERSN,2,3)),'0') NOT IN ('103','300','400','500')
                    AND N.NRSEQUMAPAPUSN IS NULL
                    AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','TMP')
                    AND I.CDSIMPLESNACIONAL        = T.CDSIMPLESNACIONAL
                    AND SUBSTR(I.CDFISOPEITEM,1,1) <> '7'
                 UNION ALL
                 SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALORSEMST
                  FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                  WHERE E.CDEMPRESA                = P_CDEMPRESA
                    AND N.CDEMPRESA                = E.CDEMPRESA
                    AND E.CDSIMPLESNACIONAL        = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                    AND E.CDSIMPLESNACIONAL        = T.CDSIMPLESNACIONAL
                    AND T.IDTIPOOPERREC            = 'C'
                    AND T.CDTIPOOPER               = N.CDTIPOOPER
                    AND N.IDENTRSAIDOP             = 'S'
                    AND N.IDENTRSAIDOP             = T.IDENTRSAIDOP
                    AND N.IDSTATUS IN ('E','A')
                    AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL
                    AND N.CDFILIAL                 = I.CDFILIAL
                    AND N.NRLANCTONF               = I.NRLANCTONF
                    AND (I.CDFISCOPERSN IS NULL OR LENGTH(I.CDFISCOPERSN) < 3)
                    AND N.NRSEQUMAPAPUSN IS NULL
                    AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','TMP')
                    AND I.CDSIMPLESNACIONAL = T.CDSIMPLESNACIONAL
                    AND SUBSTR(I.CDFISOPEITEM,1,1) <> '7'
                 UNION ALL
                 SELECT SUM(VRPRODUTO) AS VALORSEMST
                  FROM EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, PARAVEND P, ITEMVENOUTIMPOS I, FILIAL F
                  WHERE E.CDEMPRESA            = P_CDEMPRESA
                    AND F.CDEMPRESA            = E.CDEMPRESA
                    AND I.CDFILIAL             = F.CDFILIAL
                    AND P.CDFILIAL             = I.CDFILIAL
                    AND E.CDSIMPLESNACIONAL    = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                    AND P.CDTPOPERCNTREC       = T.CDTIPOOPER
                    AND E.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                    AND T.IDTIPOOPERREC        = 'C'
                    AND I.CDIMPOSTO            = '50'
                    AND I.DTREDUCAOZ BETWEEN P_DTINICIAL AND P_DTFINAL
                    AND LENGTH(I.CDFISCOPERSN) = 3
                    AND NVL(RTRIM(I.CDFISCOPERSN),'0') NOT IN ('103','300','400','500')
                 UNION ALL
                 SELECT SUM(VRPRODUTO) AS VALORSEMST
                  FROM EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, PARAVEND P, ITEMVENOUTIMPOS I, FILIAL F
                  WHERE E.CDEMPRESA            = P_CDEMPRESA
                    AND F.CDEMPRESA            = E.CDEMPRESA
                    AND I.CDFILIAL             = F.CDFILIAL
                    AND P.CDFILIAL             = I.CDFILIAL
                    AND P.CDTPOPERCNTREC       = T.CDTIPOOPER
                    AND E.CDSIMPLESNACIONAL    = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                    AND E.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                    AND T.IDTIPOOPERREC        = 'C'
                    AND I.CDIMPOSTO            = '50'
                    AND I.DTREDUCAOZ BETWEEN P_DTINICIAL AND P_DTFINAL
                    AND LENGTH(I.CDFISCOPERSN) = 4
                    AND NVL(RTRIM(SUBSTR(I.CDFISCOPERSN,2,3)),'0') NOT IN ('103','300','400','500')
                 UNION ALL
                 SELECT SUM(VRPRODUTO) AS VALORSEMST
                  FROM EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, PARAVEND P, ITEMVENOUTIMPOS I, FILIAL F
                  WHERE E.CDEMPRESA            = P_CDEMPRESA
                    AND F.CDEMPRESA            = E.CDEMPRESA
                    AND I.CDFILIAL             = F.CDFILIAL
                    AND P.CDFILIAL             = I.CDFILIAL
                    AND P.CDTPOPERCNTREC       = T.CDTIPOOPER
                    AND E.CDSIMPLESNACIONAL    = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                    AND E.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                    AND T.IDTIPOOPERREC        = 'C'
                    AND I.CDIMPOSTO            = '50'
                    AND I.DTREDUCAOZ BETWEEN P_DTINICIAL AND P_DTFINAL
                    AND (I.CDFISCOPERSN IS NULL OR LENGTH(I.CDFISCOPERSN) < 3));
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_FATURA_SEMST  := 0;
         END;


         /*RECEITA BRUTA MENSAL PEGANDO DA NOTA FISCAL O CSOSN <> ('103','300','400','500') FATURAMENTO NAO TRIBUTADO PELO ST*/
         /* NFS QUE DEDUZEM O VALOR DE FATURAMENTO - ESTE SELECT E FEITO PARA MOSTRAR O VALOR DAS DEDUCOES*/
         BEGIN
            SELECT NVL(SUM(VALORSEMST),0)
              INTO V_DEDUZ_FATURA_SEMST
              FROM (
                   SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALORSEMST
                     FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                    WHERE E.CDEMPRESA            = P_CDEMPRESA
                      AND N.CDEMPRESA            = E.CDEMPRESA
                      AND E.CDSIMPLESNACIONAL    = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                      AND E.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                      AND T.IDTIPOOPERREC        = 'D'
                      AND T.CDTIPOOPER           = N.CDTIPOOPER
                      AND N.IDENTRSAIDOP         = T.IDENTRSAIDOP
                      AND N.IDSTATUS IN ('E','A')
                      AND ((N.IDENTRSAIDOP = 'S' AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL) OR
                          (N.IDENTRSAIDOP = 'E' AND N.DTENTRSAID BETWEEN V_DTININFFORPER AND P_DTFINAL))
                      AND N.CDFILIAL             = I.CDFILIAL
                      AND N.NRLANCTONF           = I.NRLANCTONF
                      AND LENGTH(I.CDFISCOPERSN) = 3
                      AND NVL(RTRIM(I.CDFISCOPERSN),'0') NOT IN ('103','300','400','500')
                      AND N.NRSEQUMAPAPUSN IS NULL
                      AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','PAG')
                      AND I.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                      AND SUBSTR(I.CDFISOPEITEM,1,1) <> '7'
                    UNION ALL
                    SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALORSEMST
                    FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                    WHERE E.CDEMPRESA            = P_CDEMPRESA
                      AND N.CDEMPRESA            = E.CDEMPRESA
                      AND E.CDSIMPLESNACIONAL    = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                      AND E.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                      AND T.IDTIPOOPERREC        = 'D'
                      AND T.CDTIPOOPER           = N.CDTIPOOPER
                      AND N.IDENTRSAIDOP         = T.IDENTRSAIDOP
                      AND N.IDSTATUS IN ('E','A')
                      AND ((N.IDENTRSAIDOP = 'S' AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL) OR
                          (N.IDENTRSAIDOP = 'E' AND N.DTENTRSAID BETWEEN V_DTININFFORPER AND P_DTFINAL))
                      AND N.CDFILIAL             = I.CDFILIAL
                      AND N.NRLANCTONF           = I.NRLANCTONF
                      AND LENGTH(I.CDFISCOPERSN) = 4
                      AND NVL(RTRIM(SUBSTR(I.CDFISCOPERSN,2,3)),'0') NOT IN ('103','300','400','500')
                      AND N.NRSEQUMAPAPUSN IS NULL
                      AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','PAG')
                      AND I.CDSIMPLESNACIONAL = T.CDSIMPLESNACIONAL
                      AND SUBSTR(I.CDFISOPEITEM,1,1) <> '7'
                    UNION ALL
                    SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALORSEMST
                    FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                    WHERE E.CDEMPRESA            = P_CDEMPRESA
                      AND N.CDEMPRESA            = E.CDEMPRESA
                      AND E.CDSIMPLESNACIONAL    = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                      AND E.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                      AND T.IDTIPOOPERREC        = 'D'
                      AND T.CDTIPOOPER           = N.CDTIPOOPER
                      AND N.IDENTRSAIDOP         = T.IDENTRSAIDOP
                      AND N.IDSTATUS IN ('E','A')
                      AND ((N.IDENTRSAIDOP = 'S' AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL) OR
                          (N.IDENTRSAIDOP = 'E' AND N.DTENTRSAID BETWEEN V_DTININFFORPER AND P_DTFINAL))
                      AND N.CDFILIAL             = I.CDFILIAL
                      AND N.NRLANCTONF           = I.NRLANCTONF
                      AND (I.CDFISCOPERSN IS NULL OR LENGTH(I.CDFISCOPERSN) < 3)
                      AND N.NRSEQUMAPAPUSN IS NULL
                      AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','PAG')
                      AND I.CDSIMPLESNACIONAL = T.CDSIMPLESNACIONAL
                      AND SUBSTR(I.CDFISOPEITEM,1,1) <> '7');
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_DEDUZ_FATURA_SEMST  := 0;
         END;

         /*RECEITA BRUTA MENSAL PEGANDO DAS NOTAS FISCAIS ISENTO CSOSN = ('103','300') */
         /* NFS QUE COMPOE O VALOR DE FATURAMENTO*/
         BEGIN
            SELECT NVL(SUM(VALORISENTO),0)
              INTO V_FATURA_ISENTO
              FROM (
                   SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALORISENTO
                     FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                    WHERE E.CDEMPRESA            = P_CDEMPRESA
                      AND N.CDEMPRESA            = E.CDEMPRESA
                      AND E.CDSIMPLESNACIONAL    = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                      AND E.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                      AND T.CDTIPOOPER           = N.CDTIPOOPER
                      AND T.IDTIPOOPERREC        = 'C'
                      AND N.IDENTRSAIDOP         = T.IDENTRSAIDOP
                      AND N.IDSTATUS IN ('E','A')
                      AND N.IDENTRSAIDOP         = 'S'
                      AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL
                      AND N.CDFILIAL             = I.CDFILIAL
                      AND N.NRLANCTONF           = I.NRLANCTONF
                      AND LENGTH(I.CDFISCOPERSN) = 4
                      AND SUBSTR(I.CDFISCOPERSN,2,3) IN ('103','300')
                      AND N.NRSEQUMAPAPUSN IS NULL
                      AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','TMP')
                      AND I.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                      AND SUBSTR(I.CDFISOPEITEM,1,1) <> '7'
                    UNION ALL
                   SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALORISENTO
                    FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                    WHERE E.CDEMPRESA            = P_CDEMPRESA
                      AND N.CDEMPRESA            = E.CDEMPRESA
                      AND E.CDSIMPLESNACIONAL    = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                      AND E.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                      AND T.CDTIPOOPER           = N.CDTIPOOPER
                      AND T.IDTIPOOPERREC        = 'C'
                      AND N.IDENTRSAIDOP         = 'S'
                      AND N.IDENTRSAIDOP         = T.IDENTRSAIDOP
                      AND N.IDSTATUS IN ('E','A')
                      AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL
                      AND N.CDFILIAL             = I.CDFILIAL
                      AND N.NRLANCTONF           = I.NRLANCTONF
                      AND LENGTH(I.CDFISCOPERSN) = 3
                      AND I.CDFISCOPERSN IN ('103','300')
                      AND N.NRSEQUMAPAPUSN IS NULL
                      AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','TMP')
                      AND I.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                      AND SUBSTR(I.CDFISOPEITEM,1,1) <> '7'
                   UNION ALL
                   SELECT SUM(VRPRODUTO) AS VALORISENTO
                    FROM EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, PARAVEND P, ITEMVENOUTIMPOS I, FILIAL F
                    WHERE E.CDEMPRESA            = P_CDEMPRESA
                      AND F.CDEMPRESA            = E.CDEMPRESA
                      AND I.CDFILIAL             = F.CDFILIAL
                      AND P.CDFILIAL             = I.CDFILIAL
                      AND P.CDTPOPERCNTREC       = T.CDTIPOOPER
                      AND E.CDSIMPLESNACIONAL    = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                      AND E.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                      AND T.IDTIPOOPERREC        = 'C'
                      AND I.CDIMPOSTO            = '50'
                      AND I.DTREDUCAOZ BETWEEN P_DTINICIAL AND P_DTFINAL
                      AND LENGTH(I.CDFISCOPERSN) = 4
                      AND SUBSTR(I.CDFISCOPERSN,2,3) IN ('103','300')
                    UNION ALL
                    SELECT SUM(VRPRODUTO) AS VALORISENTO
                    FROM EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, PARAVEND P, ITEMVENOUTIMPOS I, FILIAL F
                    WHERE E.CDEMPRESA            = P_CDEMPRESA
                      AND F.CDEMPRESA            = E.CDEMPRESA
                      AND I.CDFILIAL             = F.CDFILIAL
                      AND P.CDFILIAL             = I.CDFILIAL
                      AND P.CDTPOPERCNTREC       = T.CDTIPOOPER
                      AND E.CDSIMPLESNACIONAL    = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                      AND E.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                      AND T.IDTIPOOPERREC        = 'C'
                      AND I.CDIMPOSTO            = '50'
                      AND I.DTREDUCAOZ BETWEEN P_DTINICIAL AND P_DTFINAL
                      AND LENGTH(I.CDFISCOPERSN) = 3
                      AND I.CDFISCOPERSN IN ('103','300'));
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_FATURA_ISENTO  := 0;
         END;

         /*RECEITA BRUTA MENSAL PEGANDO DA NOTA FISCAL O CSOSN =('103','300','400') FATURAMENTO ISENTO*/
         /* NFS QUE DEDUZEM O VALOR DE FATURAMENTO - ESTE SELECT E FEITO PARA MOSTRAR O VALOR DAS DEDUCOES*/
         BEGIN
            SELECT NVL(SUM(VALORISENTO),0)
              INTO V_DEDUZ_FATURA_ISENTO
              FROM (
                   SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALORISENTO
                     FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                    WHERE E.CDEMPRESA            = P_CDEMPRESA
                      AND N.CDEMPRESA            = E.CDEMPRESA
                      AND E.CDSIMPLESNACIONAL    = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                      AND E.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                      AND T.CDTIPOOPER           = N.CDTIPOOPER
                      AND T.IDTIPOOPERREC        = 'D'
                      AND N.IDENTRSAIDOP         = T.IDENTRSAIDOP
                      AND N.IDSTATUS IN ('E','A')
                      AND ((N.IDENTRSAIDOP = 'S' AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL) OR
                          (N.IDENTRSAIDOP = 'E' AND N.DTENTRSAID BETWEEN V_DTININFFORPER AND P_DTFINAL))
                      AND N.CDFILIAL             = I.CDFILIAL
                      AND N.NRLANCTONF           = I.NRLANCTONF
                      AND LENGTH(I.CDFISCOPERSN) = 4
                      AND SUBSTR(I.CDFISCOPERSN,2,3) IN ('103','300')
                      AND N.NRSEQUMAPAPUSN IS NULL
                      AND NVL(N.IDSISTEMA,'DFE') NOT IN ('ITG','REC','PAG')
                      AND I.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                      AND SUBSTR(I.CDFISOPEITEM,1,1) <> '7'
                    UNION ALL
                   SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALORISENTO
                    FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                    WHERE E.CDEMPRESA            = P_CDEMPRESA
                      AND N.CDEMPRESA            = E.CDEMPRESA
                      AND E.CDSIMPLESNACIONAL    = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                      AND E.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                      AND T.CDTIPOOPER           = N.CDTIPOOPER
                      AND T.IDTIPOOPERREC        = 'D'
                      AND N.IDENTRSAIDOP         = T.IDENTRSAIDOP
                      AND N.IDSTATUS IN ('E','A')
                      AND ((N.IDENTRSAIDOP = 'S' AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL) OR
                          (N.IDENTRSAIDOP = 'E' AND N.DTENTRSAID BETWEEN V_DTININFFORPER AND P_DTFINAL))
                      AND N.CDFILIAL             = I.CDFILIAL
                      AND N.NRLANCTONF           = I.NRLANCTONF
                      AND LENGTH(I.CDFISCOPERSN) = 3
                      AND I.CDFISCOPERSN IN ('103','300')
                      AND N.NRSEQUMAPAPUSN IS NULL
                      AND NVL(N.IDSISTEMA,'DFE') NOT IN ('ITG','REC','PAG')
                      AND I.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
                      AND SUBSTR(I.CDFISOPEITEM,1,1) <> '7');
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_DEDUZ_FATURA_ISENTO  := 0;
         END;

         /*RECEITA TOTAL REFERENTE A EXPORTACAO DE PRODUTOS CFOP = '7' - FATURAMENTO EXPORTACAO*/
         BEGIN
            SELECT NVL(SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)),0)
              INTO V_FATURA_EXPORTACAO
              FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
             WHERE E.CDEMPRESA         = P_CDEMPRESA
               AND N.CDEMPRESA         = E.CDEMPRESA
               AND E.CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
               AND E.CDSIMPLESNACIONAL = T.CDSIMPLESNACIONAL
               AND T.IDTIPOOPERREC     = 'C'
               AND T.CDTIPOOPER        = N.CDTIPOOPER
               AND N.IDENTRSAIDOP      = T.IDENTRSAIDOP
               AND N.IDSTATUS IN ('E','A')
               AND N.CDFILIAL          = I.CDFILIAL
               AND N.IDENTRSAIDOP      = 'S'
               AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL
               AND N.NRLANCTONF        = I.NRLANCTONF
               AND N.NRSEQUMAPAPUSN IS NULL
               AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','TMP')
               AND I.CDSIMPLESNACIONAL = T.CDSIMPLESNACIONAL
               AND SUBSTR(I.CDFISOPEITEM,1,1) = '7';
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_FATURA_EXPORTACAO  := 0;
         END;

         /*RECEITA TOTAL REFERENTE A EXPORTACAO DE PRODUTOS CFOP = '7' OU '3' - FATURAMENTO EXPORTACAO*/
         /* NFS QUE DEDUZEM O VALOR DE FATURAMENTO - ESTE SELECT E FEITO PARA MOSTRAR O VALOR DAS DEDUCOES*/
         BEGIN
            SELECT NVL(SUM(VALOREXP),0)
              INTO V_DEDUZ_FATURA_EXPORTACAO
              FROM (
                   SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALOREXP
                   FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                   WHERE E.CDEMPRESA         = P_CDEMPRESA
                     AND N.CDEMPRESA         = E.CDEMPRESA
                     AND E.CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                     AND E.CDSIMPLESNACIONAL = T.CDSIMPLESNACIONAL
                     AND T.IDTIPOOPERREC     = 'D'
                     AND T.CDTIPOOPER        = N.CDTIPOOPER
                     AND N.IDENTRSAIDOP      = T.IDENTRSAIDOP
                     AND N.IDSTATUS IN ('E','A')
                     AND N.IDENTRSAIDOP      = 'E'
                     AND N.DTENTRSAID BETWEEN V_DTININFFORPER AND P_DTFINAL
                     AND N.CDFILIAL          = I.CDFILIAL
                     AND N.NRLANCTONF        = I.NRLANCTONF
                     AND N.NRSEQUMAPAPUSN IS NULL
                     AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','PAG')
                     AND I.CDSIMPLESNACIONAL = T.CDSIMPLESNACIONAL
                     AND SUBSTR(I.CDFISOPEITEM,1,1) = '3'
                   GROUP BY E.CDSIMPLESNACIONAL
                   UNION ALL
                   SELECT SUM(NVL(I.VRBRUTITEM,0) - NVL(VALOR_IMPOSTO_ITEM_NFE(I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,'80','I','1'),0)) AS VALOREXP
                   FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
                   WHERE E.CDEMPRESA         = P_CDEMPRESA
                     AND N.CDEMPRESA         = E.CDEMPRESA
                     AND E.CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                     AND E.CDSIMPLESNACIONAL = T.CDSIMPLESNACIONAL
                     AND T.IDTIPOOPERREC     = 'D'
                     AND T.CDTIPOOPER        = N.CDTIPOOPER
                     AND N.IDENTRSAIDOP      = T.IDENTRSAIDOP
                     AND N.IDSTATUS IN ('E','A')
                     AND N.IDENTRSAIDOP      = 'S'
                     AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL
                     AND N.CDFILIAL          = I.CDFILIAL
                     AND N.NRLANCTONF        = I.NRLANCTONF
                     AND N.NRSEQUMAPAPUSN IS NULL
                     AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','PAG')
                     AND I.CDSIMPLESNACIONAL = T.CDSIMPLESNACIONAL
                     AND SUBSTR(I.CDFISOPEITEM,1,1) = '7');
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_DEDUZ_FATURA_EXPORTACAO  := 0;
         END;

         /*RECEITA BRUTA MENSAL PEGANDO DAS NOTAS FISCAIS RETIDO = IMPOSTO PARAMETRIZADO COMO RETIDO NA TABELA DE IMPOSTO */
         BEGIN
            SELECT NVL(SUM(VRCONTITIMP),0)
              INTO V_FATURA_RETIDO
              FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPROIMPOS I, IMPOSTO IM
             WHERE E.CDEMPRESA            = P_CDEMPRESA
               AND N.CDEMPRESA            = E.CDEMPRESA
               AND E.CDSIMPLESNACIONAL    = C_TAB_SIMPLES.CDSIMPLESNACIONAL
               AND E.CDSIMPLESNACIONAL    = T.CDSIMPLESNACIONAL
               AND T.CDTIPOOPER           = N.CDTIPOOPER
               AND T.IDTIPOOPERREC        = 'C'
               AND N.IDENTRSAIDOP         = 'S'
               AND N.IDSTATUS IN ('E','A')
               AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL
               AND N.CDFILIAL             = I.CDFILIAL
               AND N.NRLANCTONF           = I.NRLANCTONF
               AND IM.CDIMPOSTO           = I.CDIMPOSTO
               AND IM.IDTRATIMPO          = 'R'
               AND N.NRSEQUMAPAPUSN IS NULL
               AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC')
               AND I.CDSIMPLESNACIONAL = T.CDSIMPLESNACIONAL;
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_FATURA_RETIDO  := 0;
         END;

         /*TIPO DE OPERACAO QUE DEDUZ -  RECEITA BRUTA MENSAL PEGANDO DAS NOTAS FISCAIS RETIDO = IMPOSTO PARAMETRIZADO COMO RETIDO NA TABELA DE IMPOSTO*/
         BEGIN
            SELECT NVL(SUM(VRCONTITIMP),0)
              INTO V_DEDUZ_FATURA_RETIDO
              FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPROIMPOS I, IMPOSTO IM
             WHERE E.CDEMPRESA           = P_CDEMPRESA
               AND N.CDEMPRESA           = E.CDEMPRESA
               AND E.CDSIMPLESNACIONAL   = C_TAB_SIMPLES.CDSIMPLESNACIONAL
               AND E.CDSIMPLESNACIONAL   = T.CDSIMPLESNACIONAL
               AND T.CDTIPOOPER          = N.CDTIPOOPER
               AND T.IDTIPOOPERREC       = 'D'
               AND N.IDENTRSAIDOP        = 'S'
               AND N.IDSTATUS IN ('E','A')
               AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL
               AND N.CDFILIAL            = I.CDFILIAL
               AND N.NRLANCTONF          = I.NRLANCTONF
               AND IM.CDIMPOSTO          = I.CDIMPOSTO
               AND IM.IDTRATIMPO         = 'R'
               AND N.NRSEQUMAPAPUSN IS NULL
               AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC')
               AND I.CDSIMPLESNACIONAL   = T.CDSIMPLESNACIONAL;
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_DEDUZ_FATURA_RETIDO  := 0;
         END;

         /*RETORNA OS VALORES DE COMPOE E DEDUZ INFORMADOS MANUALMENTE NA TELA DE APURACAO*/
         BEGIN
            SELECT NVL(VRDEDUZBCST,0), NVL(VRDEDUZBCSEMST,0), NVL(VRDEDUZBCISENTO,0), NVL(VRRETIDONPROV,0),
                   NVL(VRCOMPBCST,0),  NVL(VRCOMPBCSEMST,0),  NVL(VRCOMPBCISENTO,0),  NVL(VRDEDUZBCEXP,0),   NVL(VRCOMPBCEXP,0)
              INTO V_DEDUZBCST, V_DEDUZBCSEMST, V_DEDUZBCISENTO, V_RETIDONPROV,
                   V_COMPBCST,  V_COMPBCSEMST,  V_COMPBCISENTO,  V_VRDEDUZBCEXP, V_VRCOMPBCEXP
              FROM ITDETALHEAPURSN IT
             WHERE NRSEQUMAPAPU      = P_NRSEQUMAPAPU
               AND CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL;
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_DEDUZBCST      := 0;
                 V_DEDUZBCSEMST   := 0;
                 V_DEDUZBCISENTO  := 0;
                 V_RETIDONPROV    := 0;
                 V_COMPBCST       := 0;
                 V_COMPBCSEMST    := 0;
                 V_COMPBCISENTO   := 0;
                 V_VRDEDUZBCEXP   := 0;
                 V_VRCOMPBCEXP    := 0;
         END;

         /*VERIFICA A ALIQUOTA MAXIMA DA TABELA DO SIMPLES NACIONAL PARA O CASO DE MAJORACAO*/
         BEGIN
            SELECT NVL(MAX(F.VRALIQSIMPLES),0), NVL(MAX(F.VRFINAL),0)
              INTO V_ALIQUOTAMAX, V_VRULTIMAFAIXA
              FROM FAIXASIMPLESNAC F
             WHERE F.CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL;
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_ALIQUOTAMAX  := 0;
                 V_VRFINALFAIXA := 0;
         END;

         V_CDFAIXA := 'U';
         /*VERIFICA A ALIQUOTA TOTAL CORRESPONDENTE RBA, VERIFICANDO SE ULTRAPASSOU A ULTIMA FAIXA, SE NAO RETORNAR NADA, QUER DIZER QUE ULTRAPASSOU. */
         BEGIN
            SELECT F.CDFAIXA, NVL(F.VRINICIAL,0), NVL(F.VRFINAL,0)
              INTO V_CDFAIXA, V_VRINIFAIXA, V_VRFINALFAIXA
              FROM FAIXASIMPLESNAC F
             WHERE F.CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
               AND V_RBAPROP BETWEEN F.VRINICIAL AND F.VRFINAL;
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_CDFAIXA       := 'U';     /*RECEBE U PARA SABER QUE ULTRAPASSOU*/
                 V_VRINIFAIXA    := 0;
                 V_VRFINALFAIXA  := 0;
         END;

         /*FAZ A MAJORACAO, CASO O RBA TENHA ULTRAPASSADO A ULTIMA FAIXA DE VALORES */
         IF V_CDFAIXA = 'U' THEN
            V_ALIQMAJORADA  := V_ALIQUOTAMAX * 1.2;
            V_PARCEXCEDENTE := V_RBAPROP - V_VRULTIMAFAIXA;

            V_VRFATURAMENTO := V_FATURA_SEMST + V_FATURA_ST + V_FATURA_ISENTO + V_FATURA_RETIDO + V_FATURA_EXPORTACAO;

            IF (V_VRFATURAMENTO > 0) THEN
               IF (V_PARCEXCEDENTE > V_VRFATURAMENTO) THEN
                  V_PARCEXCEDENTE := V_VRFATURAMENTO;
                  V_JAMAJOROU     := 'S';
               END IF;
            ELSE
               BEGIN
                 SELECT NVL(SUM(VRRECEITABR),0)       /*PEGA A RECEITA BRUTA DO MES QUE ESTA SENDO APURADO*/
                   INTO V_RECEITATOTAL
                   FROM RECEITABRUTA
                  WHERE CDEMPRESA = P_CDEMPRESA
                    AND DTREFRECEITABR BETWEEN V_DTPRIMDIAMES AND LAST_DAY(P_DTINICIAL)
                    AND IDSTATUSMES = 'B';
               EXCEPTION
                    WHEN NO_DATA_FOUND THEN
                       V_RECEITATOTAL  := 0;
               END;

               IF V_PARCEXCEDENTE > V_RECEITATOTAL THEN
                  V_PARCEXCEDENTE := V_RECEITATOTAL;
                  V_JAMAJOROU := 'S';
               END IF;
            END IF;
            V_IMPOSTOEXCEDENTE := (V_PARCEXCEDENTE * (V_ALIQMAJORADA/100));
         END IF;

         V_TEMALIQFAIXA    := 'N';
         V_CDFAIXA         := '';
         /*VERIFICA A ALIQUOTA TOTAL CORRESPONDENTE AOS ULTIMOS 12 MESES DE FATURAMENTO CORRESPONDENTE A TABELA DO SIMPLES*/
         BEGIN
            SELECT NVL(F.VRALIQSIMPLES,0), F.CDFAIXA, F.VRINICIAL, F.VRFINAL, VRPARCDEDUZIR, 'S'
              INTO V_ALIQUOTA12MESES, V_CDFAIXA, V_VRINIFAIXA, V_VRFINALFAIXA, V_VRPARCDEDUZIR, V_TEMALIQFAIXA
              FROM FAIXASIMPLESNAC F
             WHERE F.CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
               AND V_RECEITA12MESES BETWEEN F.VRINICIAL AND F.VRFINAL
            ORDER BY F.VRINICIAL;
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_ALIQUOTA12MESES := 0;
                 V_CDFAIXA         := '';
                 V_VRINIFAIXA      := 0;
                 V_VRFINALFAIXA    := 0;
                 V_TEMALIQFAIXA    := 'N';
         END;

         IF V_TEMALIQFAIXA = 'N' THEN
            IF V_RECEITA12MESES > V_VRFINALFAIXA THEN /*POSICIONA A TABELA DE FAIXA NA ULTIMA ALIQUOTA QUANDO O VALOR DO FATURAMENTO ANUAL FOR ULTRAPASSADO*/
                                                      /*PEGA A ALIQUOTA MAXIMA CORRESPONDENTE A ULTIMA FAIXA DE FATURAMENTO*/
               V_TEMALIQFAIXA := 'N';
               V_CDFAIXA      := '';
               BEGIN
                  SELECT NVL(F.VRALIQSIMPLES,0) AS ALIQUOTA, F.CDFAIXA, F.VRINICIAL, F.VRFINAL, VRPARCDEDUZIR, 'S'
                    INTO V_ALIQUOTA12MESES, V_CDFAIXA, V_VRINIFAIXA, V_VRFINALFAIXA, V_VRPARCDEDUZIR, V_TEMALIQFAIXA
                    FROM FAIXASIMPLESNAC F
                   WHERE F.CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                     AND V_VRFINALFAIXA BETWEEN F.VRINICIAL AND F.VRFINAL
                   ORDER BY F.VRINICIAL;
               EXCEPTION
                    WHEN NO_DATA_FOUND THEN
                       V_ALIQUOTA12MESES := 0;
                       V_CDFAIXA         := '';
                       V_VRINIFAIXA      := 0;
                       V_VRFINALFAIXA    := 0;
                       V_TEMALIQFAIXA := 'N';
               END;
            END IF;
         END IF;

         IF V_TEMALIQFAIXA = 'S' THEN  /*INDICA QUE EXISTE FAIXA DE VALORES CORRESPONDENTE PARA A TABELA DO SIMPLES*/
            IF V_JAMAJOROU = 'N' THEN
               /*A PARTIR DE 01/01/2018 A ALIQUOTA EFETIVA DEVE SER CALCULADA, E NAO MAIS O VALOR FIXO DA TABELA*/
               IF V_BOCALCAPOS2018 THEN
                  /*CALCULO DA ALIQUOTA EFETIVA: (RBT12 x ALIQ)  PD / RBT12 ONDE RBT12 E RECEITA BRUTA DOS ULTIMOS 12 MESES,
                  ALIQ A ALIQUOTA NOMINAL DA FAIZA DE VALORES ENCONTRADA NA TABELA E PD A PARCELA A DEDUZIR)*/
                  V_ALIQUOTA12MESES := (((V_RECEITA12MESES * V_ALIQUOTA12MESES/100) - V_VRPARCDEDUZIR) / CASE WHEN NVL(V_RECEITA12MESES,0) > 0 THEN V_RECEITA12MESES ELSE 1 END) * 100;
               END IF;

               IF V_CDSIMPLESNACIONAL = '' THEN   /*RECEITA BRUTA MENSAL PEGANDO DO VALOR INFORMADO NA TELA DE CALCULO DA RECEITA BRUTA*/
                  BEGIN                           /*CASO NAO TENHA NF LANCADA PARA MES QUE ESTA SENDO APURADO */
                     SELECT NVL(SUM(VRRECEITABR),0)
                       INTO V_VRRECEITAMES
                       FROM RECEITABRUTA
                      WHERE CDEMPRESA = P_CDEMPRESA
                        AND CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                        AND DTREFRECEITABR BETWEEN V_DTPRIMDIAMES AND LAST_DAY(P_DTINICIAL)
                        AND IDSTATUSMES  = 'B';
                  EXCEPTION
                       WHEN NO_DATA_FOUND THEN
                          V_VRRECEITAMES := 0;
                  END;
                  IF V_VRRECEITAMES > 0 THEN
                     V_VRSEMDEDUCAOST  := (V_VRRECEITAMES - V_PARCEXCEDENTE) * (V_ALIQUOTA12MESES/100);
                     V_VRBASECALCSEMST := V_VRRECEITAMES - V_PARCEXCEDENTE;
                  END IF;
               END IF;

               IF (V_FATURA_SEMST > 0) THEN
                  V_VRBASECALCSEMST := V_FATURA_SEMST - V_PARCEXCEDENTE - V_DEDUZ_FATURA_SEMST;
                  V_VRSEMDEDUCAOST := (V_VRBASECALCSEMST + V_COMPBCSEMST - V_DEDUZBCSEMST) * (V_ALIQUOTA12MESES/100);
               ELSE
                  IF (V_COMPBCSEMST > 0) OR (V_DEDUZBCSEMST > 0) THEN
                     IF V_VRBASECALCSEMST > 0 THEN
                        V_VRSEMDEDUCAOST := ((V_VRBASECALCSEMST + V_COMPBCSEMST) - V_DEDUZBCSEMST) * (V_ALIQUOTA12MESES/100);
                     ELSE
                        IF ((V_COMPBCSEMST - V_DEDUZBCSEMST) > 0) THEN
                           V_VRSEMDEDUCAOST := (V_COMPBCSEMST - V_DEDUZBCSEMST) * (V_ALIQUOTA12MESES/100);
                        END IF;
                     END IF;
                  END IF;
               END IF;

               IF V_BOCALCAPOS2018 THEN
                  /*VERIFICA A ALIQUOTA DO ISS PARA OS CALCULOS A PARTIR DE 2018, POIS A MESMA NAO PODE SER MAIOR QUE 5%,
                    O QUE INTERFERIRA NA REPARTICAO DAS ALIQUOTAS DOS DEMAIS IMPOSTOS*/
                  BEGIN
                     SELECT NVL(SUM(VRALIQSIMPLES),0)
                       INTO V_ALIQISS
                       FROM IMPSIMPLESFAIXA I, IMPOSTO II
                      WHERE I.CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                        AND I.CDFAIXA           = V_CDFAIXA
                        AND I.CDIMPOSTO         = II.CDIMPOSTO
                        AND II.CDIMPOSTONFE     = 31;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_ALIQISS := 0;
                  END;
                  /*O VALOR CADASTRADO NO CAMPO ALIQUOTA CORRESPONDE AO PERCENTUAL DE REPARTICAO DO TRIBUTO,
                    E A ALIQUOTA DO IMPOSTO DEVE SER CALCULADA COM BASE NA ALIQUOTA EFETIVA ENCONTRADA*/
                  V_ALIQISS := V_ALIQUOTA12MESES * V_ALIQISS / 100;
                  IF V_ALIQISS > 5 THEN
                     V_ALIQISS := 5;
                     V_RATEIADIFISS := 'S';
                  END IF;

                  /*SE APRESENTAR DIFERENCA DE CENTAVOS ENTRE O RATEIO DO VALOR DE CADA IMPOSTO ESSA DIFERENCA
                    DEVE SER ATRIBUIDA AO IMPOSTO COM MAIOR PERCENTUAL*/
                  BEGIN
                     SELECT SUM(VRALIQIMP) AS VRTOTALIQIMP
                       INTO V_VRALIQTOTAIMPOS
                       FROM (SELECT SUM(DECODE(II.CDIMPOSTONFE,'31',V_ALIQISS,
                                                               CASE WHEN V_RATEIADIFISS = 'S' AND II.IDORGARRECAD = 'F'
                                                                    THEN (V_ALIQUOTA12MESES - 5) * I.VRPERRATISS/100
                                                                    ELSE I.VRALIQSIMPLES * V_ALIQUOTA12MESES/100 END)) AS VRALIQIMP,
                                    II.CDIMPOSTONFE
                               FROM IMPSIMPLESFAIXA I, IMPOSTO II
                              WHERE I.CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                                AND I.CDFAIXA           = V_CDFAIXA
                                AND I.CDIMPOSTO         = II.CDIMPOSTO
                              GROUP BY CDIMPOSTONFE);
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_VRALIQTOTAIMPOS := 0;
                  END;
                  IF V_VRALIQTOTAIMPOS <> V_ALIQUOTA12MESES THEN
                     V_VRDIFARREDALIQ := V_ALIQUOTA12MESES - V_VRALIQTOTAIMPOS;
                     BEGIN
                        SELECT CDIMPOSTONFE
                          INTO V_IMPOSTONFEALIQMAX
                          FROM (SELECT SUM(VRALIQSIMPLES) AS VRALIQSIMPLES, II.CDIMPOSTONFE
                                  FROM IMPSIMPLESFAIXA I, IMPOSTO II
                                 WHERE I.CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                                   AND I.CDFAIXA           = V_CDFAIXA
                                   AND I.CDIMPOSTO         = II.CDIMPOSTO
                                 GROUP BY II.CDIMPOSTONFE) I,
                               (SELECT  MAX(VRALIQSIMPLES) AS VRALIQSIMPLESMAX
                                  FROM IMPSIMPLESFAIXA I
                                 WHERE I.CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                                   AND I.CDFAIXA           = V_CDFAIXA) M
                         WHERE I.VRALIQSIMPLES = M.VRALIQSIMPLESMAX;
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_IMPOSTONFEALIQMAX := '';
                     END;
                  END IF;
               END IF;

               /*VERIFICA A ALIQUOTA PARA A RECEITA ST E ISENTO DESCONSIDERANDO A ALIQUOTA DO ICMS DA ALIQUOTA TOTAL*/
               IF V_BOCALCAPOS2018 THEN
                  /*A PARTIR DE 2018 O VALOR DA ALIQUOTA CADASTRADA E O PERCENTUAL DE REPARTICAO DOS TRIBUTOS,
                    NAO A ALIQUOTA EFETIVA, POR ISSO A MESMA DEVE SER CALCULADA. */
                  BEGIN
                     SELECT NVL(SUM(VRALIQSIMPLES),0)
                       INTO V_ALIQICMS
                       FROM IMPSIMPLESFAIXA I, IMPOSTO II
                      WHERE I.CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                        AND I.CDFAIXA           = V_CDFAIXA
                        AND I.CDIMPOSTO         = II.CDIMPOSTO
                        AND II.CDIMPOSTONFE     = 00;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_ALIQICMS := 0;
                  END;
                  V_ALIQICMS := V_ALIQUOTA12MESES * V_ALIQICMS / 100;
                  /*VERIFICA SE EXISTIU DIFERENCA DE ARREDONDAMENTO NO RATEIO E SE O ICMS E O IMPOSTO
                    COM MAIOR PERCENTUAL PARA RECEBER ESSA DIFERENCA*/
                  IF V_VRDIFARREDALIQ <> 0 AND V_IMPOSTONFEALIQMAX = '00' THEN
                     V_ALIQICMS := V_ALIQICMS + V_VRDIFARREDALIQ;
                  END IF;
                  /*A ALIQUOTA DA RECEITA DE SUBSTITUICAO TRIOBUTARIA E
                    DA RECEITA ISENTA SERA A ALIQUOTA EFETIVA CALCULADA MENOS O ICMS*/ 
                  V_ALIQST := V_ALIQUOTA12MESES - V_ALIQICMS;
               ELSE
                  BEGIN
                     SELECT NVL(SUM(VRALIQSIMPLES),0)
                       INTO V_ALIQST
                       FROM IMPSIMPLESFAIXA I, IMPOSTO II
                      WHERE I.CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                        AND I.CDFAIXA           = V_CDFAIXA
                        AND I.CDIMPOSTO         = II.CDIMPOSTO
                        AND INSTR('00',NVL(II.CDIMPOSTONFE,'XX')) = 0;
                  EXCEPTION
                       WHEN NO_DATA_FOUND THEN
                          V_ALIQST := 0;
                  END;
               END IF;

               IF (V_FATURA_ST > 0) THEN
                  IF V_VRBASECALCSEMST > 0 THEN
                     V_VRBASECALCST := V_FATURA_ST - V_DEDUZ_FATURA_ST;
                     V_VRDEDUCAOST  := ((V_FATURA_ST + V_COMPBCST) - V_DEDUZBCST)* (V_ALIQST/100);
                  ELSE  /*PARA RETIRAR A PARCELA EXCEDENTE CASO NAO TENHA VALOR SEM ST*/
                     IF V_VRBASECALCSEMST < 0 THEN
                        V_VRBASECALCST := (V_FATURA_ST + V_VRBASECALCSEMST) - V_DEDUZ_FATURA_ST;
                        V_VRDEDUCAOST  := (((V_FATURA_ST + V_VRBASECALCSEMST) + V_COMPBCST) - V_DEDUZBCST)* (V_ALIQST/100);
                        V_VRBASECALCSEMST := 0;
                     ELSE
                        IF V_FATURA_SEMST <= 0 THEN
                           V_VRBASECALCST := (V_FATURA_ST - V_PARCEXCEDENTE) - V_DEDUZ_FATURA_ST;
                           V_VRDEDUCAOST := (((V_FATURA_ST - V_PARCEXCEDENTE) + V_COMPBCST) - V_DEDUZBCST)* (V_ALIQST/100);
                        END IF;
                     END IF;
                  END IF;
               ELSE
                  IF (V_COMPBCST - V_DEDUZBCST) > 0 THEN
                     V_VRDEDUCAOST := (V_COMPBCST - V_DEDUZBCST) * (V_ALIQST/100);
                  END IF;
               END IF;

               IF (V_FATURA_ISENTO > 0) THEN
                  IF (V_VRBASECALCSEMST > 0) OR (V_VRBASECALCST > 0) THEN
                     V_VRBASECALCISENTO := (V_FATURA_ISENTO - V_DEDUZ_FATURA_ISENTO);
                     V_VRDEDUCAOISENTO := ((V_FATURA_ISENTO + V_COMPBCISENTO) - V_DEDUZBCISENTO) * (V_ALIQST/100);
                  ELSE /*TEM QUE RETIRAR A PARCELA EXECEDENTE */
                     IF (V_VRBASECALCSEMST < 0) OR (V_VRBASECALCST < 0) THEN
                        V_VRBASECALCISENTO := (V_FATURA_ISENTO + V_VRBASECALCSEMST + V_VRBASECALCST) - V_DEDUZ_FATURA_ISENTO;
                        V_VRDEDUCAOISENTO  := (((V_FATURA_ISENTO + V_VRBASECALCSEMST + V_VRBASECALCST) + V_COMPBCISENTO) - V_DEDUZBCISENTO) * (V_ALIQST/100);
                        V_VRBASECALCSEMST  := 0;
                        V_VRBASECALCST     := 0;
                     ELSE
                        IF (V_FATURA_SEMST <= 0) AND (V_FATURA_ST <= 0) THEN
                           V_VRBASECALCISENTO := (V_FATURA_ISENTO - V_PARCEXCEDENTE) - V_DEDUZ_FATURA_ISENTO;
                           V_VRDEDUCAOISENTO := (((V_FATURA_ISENTO - V_PARCEXCEDENTE) + V_COMPBCISENTO) - V_DEDUZBCISENTO) * (V_ALIQST/100);
                        END IF;
                     END IF;
                  END IF;
               ELSE
                  IF (V_COMPBCISENTO - V_DEDUZBCISENTO) > 0 THEN
                     V_VRDEDUCAOISENTO := (V_COMPBCISENTO - V_DEDUZBCISENTO) * (V_ALIQST/100);
                  END IF;
               END IF;

               /*VERIFICA A ALIQUOTA PARA O SIMPLES, DESCONSIDERANDO A DOS IMPOSTOS RETIDOS*/
               IF V_BOCALCAPOS2018 THEN
                  FOR C_IMPRET IN (SELECT SUM(I.VRALIQSIMPLES) AS VRALIQSIMPLES, SUM(I.VRPERRATISS) AS VRPERRATISS,
                                          II.CDIMPOSTONFE, II.IDORGARRECAD
                                     FROM IMPSIMPLESFAIXA I, IMPOSTO II
                                    WHERE I.CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                                      AND I.CDFAIXA           = V_CDFAIXA
                                      AND I.CDIMPOSTO         = II.CDIMPOSTO
                                      AND II.IDTRATIMPO       = 'R'
                                    GROUP BY II.CDIMPOSTONFE, II.IDORGARRECAD) LOOP

                     /*SE A ALIQUOTA DO ISS FOR SUPERIOR A 5%, A DIFERENCA DEVE SER RATEADA ENTRE OS DEMAIS IMPOSTOS FEDERAIS*/
                     IF (V_RATEIADIFISS = 'S') THEN
                        IF C_IMPRET.IDORGARRECAD = 'F' THEN
                           V_ALIQRETIDO := (V_ALIQUOTA12MESES - 5) * C_IMPRET.VRPERRATISS / 100;
                        ELSIF C_IMPRET.CDIMPOSTONFE = '31' THEN
                           V_ALIQRETIDO := V_ALIQISS;
                        END IF;
                     ELSE
                        V_ALIQRETIDO := V_ALIQUOTA12MESES * C_IMPRET.VRALIQSIMPLES / 100;
                     END IF;
                     /*VERIFICA SE O IMPOSTO E O QUE POSSUI O MAIOR PERCENTUAL DE REPARTICAO DE TRIBUTOS,
                       PARA RECEBER A DIFERENCA DE ARREDONDAMENTO, SE HOUVER*/
                     IF (V_VRDIFARREDALIQ <> 0) AND (V_IMPOSTONFEALIQMAX = C_IMPRET.CDIMPOSTONFE) THEN
                        V_ALIQRETIDO := V_ALIQRETIDO + V_VRDIFARREDALIQ;
                     END IF;
                     /*SOMA AS ALIQUOTAS DE TODOS OS IMPOTOS RETIDOS*/
                     V_ALIQUOTARET := NVL(V_ALIQUOTARET,0) + V_ALIQRETIDO;
                  END LOOP;
                  V_ALIQUOTARET := V_ALIQUOTA12MESES - V_ALIQUOTARET;
               ELSE
                  BEGIN
                     SELECT SUM(VRALIQSIMPLES)
                       INTO V_ALIQUOTARET
                       FROM IMPSIMPLESFAIXA I, IMPOSTO II
                      WHERE CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                        AND CDFAIXA           = V_CDFAIXA
                        AND I.CDIMPOSTO       = II.CDIMPOSTO
                        AND II.IDTRATIMPO     <> 'R';
                  EXCEPTION
                       WHEN NO_DATA_FOUND THEN
                          V_ALIQUOTARET := 0;
                  END;
               END IF;

               IF V_FATURA_RETIDO > 0 THEN
                 IF (V_VRBASECALCSEMST > 0) OR (V_VRBASECALCST > 0) OR (V_VRBASECALCISENTO > 0) THEN
                    V_VRBASECALCRET := V_FATURA_RETIDO - V_DEDUZ_FATURA_RETIDO;
                    V_VRDEDUCAORET  := (V_FATURA_RETIDO * (V_ALIQUOTARET/100)) + V_RETIDONPROV;
                 ELSE
                    IF (V_VRBASECALCSEMST < 0) OR (V_VRBASECALCST < 0) OR (V_VRBASECALCISENTO < 0) THEN
                       V_VRBASECALCRET := (V_FATURA_RETIDO + V_VRBASECALCSEMST + V_VRBASECALCST + V_VRBASECALCISENTO) - V_DEDUZ_FATURA_RETIDO;
                       V_VRDEDUCAORET  := ((V_FATURA_RETIDO + V_VRBASECALCSEMST + V_VRBASECALCST + V_VRBASECALCISENTO) * (V_ALIQUOTARET/100)) + V_RETIDONPROV;
                       V_VRBASECALCSEMST  := 0;
                       V_VRBASECALCST     := 0;
                       V_VRBASECALCISENTO := 0;
                    ELSE
                        IF (V_FATURA_SEMST <= 0) AND (V_FATURA_ST <= 0) AND (V_FATURA_ISENTO <= 0) THEN
                            V_VRBASECALCRET := (V_FATURA_RETIDO - V_PARCEXCEDENTE) - V_DEDUZ_FATURA_RETIDO;
                            V_VRDEDUCAORET  := ((V_FATURA_RETIDO - V_PARCEXCEDENTE) * (V_ALIQUOTARET/100)) + V_RETIDONPROV;
                       END IF;
                    END IF;
                 END IF;
               ELSE
                  IF V_RETIDONPROV > 0 THEN
                     V_VRDEDUCAORET := V_RETIDONPROV;
                  END IF;
               END IF;

               /*VERIFICA A ALIQUOTA PARA A RECEITA EXPORTACAO, DESCONSIDERANDO A ALIQUOTA DOS IMPOSTOS, IPI, ICMS, PIS, COFINS E ISS,
               CONFORME REGE LEGISLACAO.*/
               IF V_BOCALCAPOS2018 THEN
                  FOR C_EXPORT IN (SELECT SUM(I.VRALIQSIMPLES) AS VRALIQSIMPLES, SUM(I.VRPERRATISS) AS VRPERRATISS,
                                          II.CDIMPOSTONFE, II.IDORGARRECAD
                                     FROM IMPSIMPLESFAIXA I, IMPOSTO II
                                    WHERE I.CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                                      AND I.CDFAIXA           = V_CDFAIXA
                                      AND I.CDIMPOSTO         = II.CDIMPOSTO
                                      AND II.CDIMPOSTONFE     IN ('00','10','31','50','60')
                                    GROUP BY II.CDIMPOSTONFE, II.IDORGARRECAD) LOOP

                     /*SE A ALIQUOTA DO ISS FOR SUPERIOR A 5%, A DIFERENCA DEVE SER RATEADA ENTRE OS DEMAIS IMPOSTOS FEDERAIS*/
                     IF (V_RATEIADIFISS = 'S') THEN
                        IF C_EXPORT.CDIMPOSTONFE = '31' THEN
                           V_ALIQEXPORTACAO := V_ALIQISS;
                        ELSIF C_EXPORT.IDORGARRECAD = 'F' THEN
                           V_ALIQEXPORTACAO := (V_ALIQUOTA12MESES - 5) * C_EXPORT.VRPERRATISS / 100;
                        END IF;
                     ELSE
                        V_ALIQEXPORTACAO := V_ALIQUOTA12MESES * C_EXPORT.VRALIQSIMPLES / 100;
                     END IF;
                     /*VERIFICA SE O IMPOSTO E O QUE POSSUI O MAIOR PERCENTUAL DE REPARTICAO DE TRIBUTOS,
                       PARA RECEBER A DIFERENCA DE ARREDONDAMENTO, SE HOUVER*/
                     IF (V_VRDIFARREDALIQ <> 0) AND (V_IMPOSTONFEALIQMAX = C_EXPORT.CDIMPOSTONFE) THEN
                        V_ALIQEXPORTACAO := V_ALIQEXPORTACAO + V_VRDIFARREDALIQ;
                     END IF;
                     /*SOMA AS ALIQUOTAS DE TODOS OS IMPOSTOS QUE DEVEM SER EXCLUIDOS DA RECEITA DE EXPORTACAO*/
                     V_ALIQUOTAEXP := NVL(V_ALIQUOTAEXP,0) + V_ALIQEXPORTACAO;
                  END LOOP;
                  V_ALIQUOTAEXP := V_ALIQUOTA12MESES - V_ALIQUOTAEXP;
               ELSE
                  BEGIN
                     SELECT NVL(SUM(VRALIQSIMPLES),0)
                       INTO V_ALIQUOTAEXP
                       FROM IMPSIMPLESFAIXA I, IMPOSTO II
                      WHERE CDSIMPLESNACIONAL = C_TAB_SIMPLES.CDSIMPLESNACIONAL
                        AND CDFAIXA           = V_CDFAIXA
                        AND I.CDIMPOSTO       = II.CDIMPOSTO
                        AND INSTR('00_10_31_50_60',NVL(II.CDIMPOSTONFE,'XX')) = 0;
                  EXCEPTION
                       WHEN NO_DATA_FOUND THEN
                          V_ALIQUOTAEXP := 0;
                  END;
               END IF;

               IF V_FATURA_EXPORTACAO > 0 THEN
                 IF (V_VRBASECALCSEMST > 0) OR (V_VRBASECALCST > 0) OR (V_VRBASECALCISENTO > 0) OR (V_VRBASECALCRET > 0) THEN
                    V_VRBASECALCEXP := V_FATURA_EXPORTACAO - V_DEDUZ_FATURA_EXPORTACAO;
                    V_VREXPORTACAO := ((V_FATURA_EXPORTACAO + V_VRCOMPBCEXP) - V_VRDEDUZBCEXP)* (V_ALIQUOTAEXP/100);
                 ELSE
                    IF (V_VRBASECALCSEMST < 0) OR (V_VRBASECALCST < 0) OR (V_VRBASECALCISENTO < 0) OR (V_VRBASECALCRET < 0) THEN
                        V_VRBASECALCEXP := (V_FATURA_EXPORTACAO + V_VRBASECALCSEMST + V_VRBASECALCST + V_VRBASECALCISENTO + V_VRBASECALCRET) - V_DEDUZ_FATURA_EXPORTACAO;
                        V_VREXPORTACAO  := (((V_FATURA_EXPORTACAO + V_VRBASECALCSEMST + V_VRBASECALCST + V_VRBASECALCISENTO + V_VRBASECALCRET) + V_VRCOMPBCEXP) - V_VRDEDUZBCEXP)* (V_ALIQUOTAEXP/100);
                        V_VRBASECALCSEMST  := 0;
                        V_VRBASECALCST     := 0;
                        V_VRBASECALCISENTO := 0;
                        V_VRBASECALCRET    := 0;
                    ELSE
                        IF (V_FATURA_SEMST  <= 0) AND
                           (V_FATURA_ST     <= 0) AND
                           (V_FATURA_ISENTO <= 0) AND
                           (V_FATURA_RETIDO <= 0) THEN
                           V_VRBASECALCEXP := (V_FATURA_EXPORTACAO - V_PARCEXCEDENTE) - V_DEDUZ_FATURA_EXPORTACAO;
                           V_VREXPORTACAO  := (((V_FATURA_EXPORTACAO - V_PARCEXCEDENTE) + V_VRCOMPBCEXP) - V_VRDEDUZBCEXP) * (V_ALIQUOTAEXP/100);
                       END IF;
                    END IF;
                 END IF;
               ELSE
                  IF (V_VRCOMPBCEXP - V_VRDEDUZBCEXP) > 0 THEN
                     V_VREXPORTACAO := (V_VRCOMPBCEXP - V_VRDEDUZBCEXP) * (V_ALIQUOTAEXP/100);
                  END IF;
               END IF;
            END IF;

            V_VRIMPOSTORECOLHER := ROUND(V_VRDEDUCAOST,2)      +
                                   ROUND(V_VRSEMDEDUCAOST,2)   +
                                   ROUND(V_VREXPORTACAO,2)     +
                                   ROUND(V_VRDEDUCAOISENTO,2)  -
                                   ROUND(V_VRDEDUCAORET,2)     +
                                   ROUND(V_IMPOSTOEXCEDENTE,2);

            V_VRIMPOSTOMAPA := V_VRIMPOSTOMAPA + V_VRIMPOSTORECOLHER;

            INSERT INTO DETALHEAPURSN
                   (NRSEQUMAPAPU,     CDSIMPLESNACIONAL,                CDFAIXA,        VRINIFAIXA,         VRFINFAIXA,
                    VRFATURA12MESES,  VRBCFATUST,                       VRALIQST,       VRIMPOSTOST,        VRBCFATUSEMST,
                    VRALIQFAIXA,      VRIMPOSTOSEMST,                   VRALIQISENTO,   VRIMPOISENTO,       VRBCFATUISEN,       VRIMPOSTOREC,
                    VRBCFATURET,      VRALIQRET,                        VRIMPOSTORET,   VRDEDUZBCST,        VRDEDUZBCSEMST,     VRDEDUZBCISENTO,   VRRETIDONPROV,
                    VRCOMPBCST,       VRCOMPBCSEMST,                    VRCOMPBCISENTO, VRRECBRUTANUAL,     VRALIQMAJORADA,     VRPARCELAEXCED,    VRIMPOSTOEXCED,     VRALIQMAXIMA,
                    VRBCFATUEXP,      VRALIQEXP,                        VRIMPOSTOEXP,   VRDEDUZBCEXP,       VRCOMPBCEXP)
            VALUES
                   (P_NRSEQUMAPAPU,   C_TAB_SIMPLES.CDSIMPLESNACIONAL,  V_CDFAIXA,       V_VRINIFAIXA,      V_VRFINALFAIXA,
                    V_RECEITA12MESES, V_VRBASECALCST,                   V_ALIQST,        V_VRDEDUCAOST,     V_VRBASECALCSEMST,
                    V_ALIQUOTA12MESES,V_VRSEMDEDUCAOST,                 V_ALIQST,        V_VRDEDUCAOISENTO, V_VRBASECALCISENTO, V_VRIMPOSTORECOLHER,
                    V_VRBASECALCRET,  V_ALIQUOTARET,                    V_VRDEDUCAORET,  V_DEDUZBCST,       V_DEDUZBCSEMST,     V_DEDUZBCISENTO,   V_RETIDONPROV,
                    V_COMPBCST,       V_COMPBCSEMST,                    V_COMPBCISENTO,  V_RBAPROP,         V_ALIQMAJORADA,     V_PARCEXCEDENTE,   V_IMPOSTOEXCEDENTE, V_ALIQUOTAMAX,
                    V_VRBASECALCEXP,  V_ALIQUOTAEXP,                    V_VREXPORTACAO,  V_VRDEDUZBCEXP,    V_VRCOMPBCEXP);

         END IF;

         V_FATURA_ST                  := 0;
         V_DEDUZ_FATURA_ST            := 0;

         V_FATURA_SEMST               := 0;
         V_DEDUZ_FATURA_SEMST         := 0;

         V_FATURA_ISENTO              := 0;
         V_DEDUZ_FATURA_ISENTO        := 0;

         V_FATURA_EXPORTACAO          := 0;
         V_DEDUZ_FATURA_EXPORTACAO    := 0;

         V_FATURA_RETIDO              := 0;
         V_DEDUZ_FATURA_RETIDO        := 0;

         V_DEDUZBCST                  := 0;
         V_DEDUZBCSEMST               := 0;
         V_DEDUZBCISENTO              := 0;
         V_RETIDONPROV                := 0;
         V_COMPBCST                   := 0;
         V_COMPBCSEMST                := 0;
         V_COMPBCISENTO               := 0;
         V_VRDEDUZBCEXP               := 0;
         V_VRCOMPBCEXP                := 0;

         V_VRFATURAMENTO              := 0;
         V_ALIQUOTA12MESES            := 0;
         V_ALIQUOTARET                := 0;
         V_VRINIFAIXA                 := 0;
         V_RECEITATOTAL               := 0;
         V_VRRECEITAMES               := 0;
         V_VRBASECALCSEMST            := 0;
         V_VRSEMDEDUCAOST             := 0;
         V_VRBASECALCST               := 0;
         V_VRDEDUCAOST                := 0;
         V_ALIQST                     := 0;
         V_VRBASECALCISENTO           := 0;
         V_VRDEDUCAOISENTO            := 0;
         V_VRDEDUCAORET               := 0;
         V_VRBASECALCRET              := 0;
         V_ALIQUOTAEXP                := 0;
         V_VREXPORTACAO               := 0;
         V_VRIMPOSTORECOLHER          := 0;
         V_VRBASECALCEXP              := 0;
         V_IMPOSTOEXCEDENTE           := 0;
         V_PARCEXCEDENTE              := 0;

         IF V_TEMALIQFAIXA = 'N' THEN
            /*Nao ha Faixa de Valores correspondente ao Valor do Faturamento dos ultimos 12 meses (R$ %s )*/
            P_RETORNO := 'Faixa_NCad';
            RETURN;
         END IF;

         V_TEMALIQFAIXA               := 'N';
         V_CDFAIXA                    := 'U';
         V_JAMAJOROU                  := 'N';

      END LOOP;

      V_NOTAFORAPER := 'N';

      /*VERIFICA SE TEM NOTA FORA DO PERIODO PARA EXIBIR MENSAGEM NA TELA NO FINAL DA APURACAO*/
      BEGIN
         SELECT 'S'
           INTO V_NOTAFORAPER
           FROM NOTAFISCAL N, EMPRSIMPLESNAC E, TPOPERSIMPLESNAC T, ITEMPRODUTO I
          WHERE E.CDEMPRESA         =  P_CDEMPRESA
            AND N.CDEMPRESA         = E.CDEMPRESA
            AND E.CDSIMPLESNACIONAL = T.CDSIMPLESNACIONAL
            AND T.CDTIPOOPER        = N.CDTIPOOPER
            AND N.IDENTRSAIDOP      = T.IDENTRSAIDOP
            AND T.IDTIPOOPERREC     = 'C'
            AND N.IDENTRSAIDOP      = 'S'
            AND N.IDSTATUS IN ('E','A')
            AND DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTINICIAL-1
            AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','TMP')
            AND N.CDFILIAL          = I.CDFILIAL
            AND N.NRLANCTONF        = I.NRLANCTONF
            AND I.CDSIMPLESNACIONAL = T.CDSIMPLESNACIONAL
            AND NRSEQUMAPAPUSN IS NULL
            AND ROWNUM = 1;
      EXCEPTION
           WHEN NO_DATA_FOUND THEN
              V_NOTAFORAPER := 'N';
      END;

      IF V_NOTAFORAPER = 'S' THEN
         /*Mensagem de aviso - Na apuracao existem documentos fora do periodo.*/
         P_RETORNO := 'NF_F_PER';
      END IF;

      /*GRAVA O NUMERO DO MAPA NAS NOTAS FISCAIS DE SAIDA QUE ENTRARAM NA APURACAO*/
      UPDATE NOTAFISCAL
         SET NRSEQUMAPAPUSN = P_NRSEQUMAPAPU
       WHERE CDFILIAL||NRLANCTONF IN
                     (SELECT DISTINCT N.CDFILIAL||N.NRLANCTONF
                      FROM NOTAFISCAL N
                      WHERE N.CDEMPRESA    = P_CDEMPRESA
                        AND N.IDENTRSAIDOP = 'S'
                        AND N.IDSTATUS IN ('E','A')
                        AND N.DTEMISSAO BETWEEN V_DTININFFORPER AND P_DTFINAL
                        AND NVL(N.IDSISTEMA,'DFS') NOT IN ('ITG','REC','TMP')
                        AND NRSEQUMAPAPUSN IS NULL);

      /*GRAVA O NUMERO DO MAPA NAS NOTAS FISCAIS DE ENTRADA QUE ENTRARAM NA APURACAO*/
      UPDATE NOTAFISCAL
         SET NRSEQUMAPAPUSN = P_NRSEQUMAPAPU
       WHERE CDFILIAL||NRLANCTONF IN
                     (SELECT DISTINCT N.CDFILIAL||N.NRLANCTONF
                      FROM NOTAFISCAL N
                      WHERE N.CDEMPRESA    = P_CDEMPRESA
                        AND N.IDENTRSAIDOP = 'E'
                        AND N.IDSTATUS IN ('E','A')
                        AND N.DTENTRSAID BETWEEN V_DTININFFORPER AND P_DTFINAL
                        AND NVL(N.IDSISTEMA,'DFE') = 'DFE'
                        AND NRSEQUMAPAPUSN IS NULL);

      /*ATUALIZA O VALOR DO MAPA COM O TOTAL GERAL DOS IMPOSTOS DE TODAS AS TABELAS DO SIMPLES*/
      UPDATE MAPAAPURACSN
         SET VRTOTAIMPOS  = NVL(V_VRIMPOSTOMAPA,0)
       WHERE NRSEQUMAPAPU = P_NRSEQUMAPAPU;
   ELSE
      /*NAO EXISTE TABELA DO SIMPLES NACIONAL RELACIONADA A EMPRESA.*/
      P_RETORNO := 'TabelaSimples_NCad';
      RETURN;
   END IF;
END;
/