/*BLOCO Y*/
CREATE OR REPLACE PROCEDURE SPED_ECF_BLOCOY_INF_GERAIS(
   P_CDEMPRESA IN EMPRESA.CDEMPRESA%TYPE,
   P_ANO IN VARCHAR,
   P_ECDTRANS IN VARCHAR,
   P_NRSEQARQMAG IN VARCHAR,
   P_NRORDEMATUAL IN NUMBER,
   P_NRORDENACAO OUT NUMBER)
IS
   V_LINHA VARCHAR2(4000);
   V_NRORDREGARQ NUMBER;
   V_DATAINICIAL DATE;
   V_DATAFINAL DATE;

   V_VRBRUTONF NUMBER;
   V_STBRUTONF VARCHAR2(20);

   V_VRIRPJ NUMBER;
   V_STIRPJ VARCHAR2(20);

   V_VRCSLL NUMBER;
   V_STCSLL VARCHAR2(20);

   V_CDRETIRPJ VARCHAR2(05);
   V_CDRETCSLL VARCHAR2(05);
   V_Y570AUX VARCHAR2(500);
   V_IDORGPUB VARCHAR2(01);

   V_Y672 VARCHAR2(500);
   V_VRY672TEMP NUMBER;
   V_STY672TEMP VARCHAR2(20);

   V_EXISTEY672 VARCHAR2(01);
   V_GERA VARCHAR2(01);

   V_TEMP VARCHAR2(01);
   
   V_COUNT NUMBER; 
BEGIN
   /* PROCEDURE RESPONSAVEL POR GERAR AS INFORMACOES REFERENTES AS INFORMACOES
      ADICIONAIS REGISTRO Y*/
   V_NRORDREGARQ := P_NRORDEMATUAL;

   V_DATAINICIAL := TO_DATE('01/01/'||P_ANO);
   V_DATAFINAL := TO_DATE('31/12/'||P_ANO);

   /* REGISTRO Y001: ABERTURA DO BLOCO Y */
   BEGIN
      SELECT '|Y001' ||'|'|| /* NOME DO REGISTRO */
             '0'     ||'|'   /* INDICADOR DE MOVIMENTO
                                0- BLOCO COM DADOS INFORMADOS
                                1- BLOCO SEM DADOS INFORMADOS */
        INTO V_LINHA
        FROM DUAL;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_LINHA := NULL;
   END;

   V_NRORDREGARQ := V_NRORDREGARQ + 1;
   INSERT INTO ARQMAGNETICO
      (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
   VALUES
      (LPAD(TO_CHAR(V_NRORDREGARQ),10,'0'), V_LINHA, P_NRSEQARQMAG);

   /* REGISTRO REFERENTE AS RECEITAS DE VENDAS POR CNAE */
   FOR C_Y540 IN
      (SELECT '|Y540'                          ||'|'|| /* NOME DO REGISTRO */
              E.NRINSJUREMPR                   ||'|'|| /* CNPJ DE CADA ESTABELECIMENTO DA EMPRESA GERADORA
                                                          IRA SOMENTE A DA EMPRESA, POIS NAO HA COMO PEGAR A INFORMACAO
                                                          POR FILIAL */
              REPLACE(LTRIM(TO_CHAR(SUM(ROUND(VRLANCAMENT, 2)),'9999999999990.00')),'.',',')       ||'|'|| /* VALOR TOTAL DAS RECEITAS */
              R.CDCNAE                         ||'|' AS LINHA
         FROM EMPRESA E, REGY540ECF R, CONTY540ECF CY, CONTCTBL C, LANCCONT L
        WHERE E.CDEMPRESA = P_CDEMPRESA
          AND E.CDEMPRESA = R.CDEMPRESA
          AND R.NRSEQREGY540 = CY.NRSEQREGY540
          AND C.CDCONTCTBL LIKE CY.CDCONTCTBL ||'%'
          AND C.IDCONTCCUS <> 'R'
          AND C.IDTIPOCONT = 'A'
          AND C.CDCONTCTBL = L.CDCONTCTBL
          AND L.DTLANCCONT BETWEEN V_DATAINICIAL AND V_DATAFINAL
          AND L.CDEMPRESA = E.CDEMPRESA
          AND L.IDLANCINTE <> 'F'
         GROUP BY E.NRINSJUREMPR, R.CDCNAE) LOOP
      V_NRORDREGARQ := V_NRORDREGARQ + 1;
      INSERT INTO ARQMAGNETICO
         (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
      VALUES
         (LPAD(TO_CHAR(V_NRORDREGARQ),10,'0'), C_Y540.LINHA, P_NRSEQARQMAG);
   END LOOP;

   /* GERACAO DO REGISTRO REFERENTE AS RETENCOES DE IMPOSTOS (CSLL E IRPJ */
   FOR C_Y570 IN
      (SELECT C.NRINSJURCLIE, /* CNPJ DO CLIENTE */
              C.NMRAZSOCCLIE, /* RAZAO SOCIAL DO CLIENTE */
              C.NRSEQRETIRPJ, /* SEQUENCIAL DA RETENCAO DO IRPJ */
              C.NRSEQRETCSLL, /* SEQUENCIAL DA RETENCAO DA CSLL */
              C.CDCLIENTE /* CODIGO DO CLIENTE, PARA FILTRAR AS NOTAS */
         FROM CLIENTE C
        WHERE ((NRSEQRETIRPJ IS NOT NULL) OR (NRSEQRETCSLL IS NOT NULL)) 
        ORDER BY C.NMRAZSOCCLIE) LOOP
      V_VRBRUTONF := 0;
      V_VRIRPJ := 0;
      V_VRCSLL := 0;
      V_Y570AUX := '';
      IF ((C_Y570.NRSEQRETIRPJ IS NOT NULL) OR (C_Y570.NRSEQRETCSLL IS NOT NULL)) THEN
         SELECT NVL(ROUND(SUM(NF.VRNOTAFISC), 2), 0) VRBRUTO, /* SOMATORIO DAS NOTAS */
                NVL(ROUND(SUM(VALOR_IMPOSTO_NFE(NF.CDFILIAL, NF.NRLANCTONF, '22', 'I', '1')), 2), 0) VRIRPJ, /* SOMATORIO DO IRRF */
                NVL(ROUND(SUM(VALOR_IMPOSTO_NFE(NF.CDFILIAL, NF.NRLANCTONF, '76', 'I', '1')), 2), 0) VRCSLL /* SOMATORIO DA CSLL */
           INTO V_VRBRUTONF, V_VRIRPJ, V_VRCSLL
           FROM (SELECT DISTINCT NF.CDFILIAL, NF.NRLANCTONF, NF.VRNOTAFISC
                   FROM NOTAFISCAL NF, IMPOSTONF IMP, IMPOSTONFE INFE, IMPOSTO I
                  WHERE NF.CDEMPRESA = P_CDEMPRESA
                    AND NF.IDENTRSAIDOP = 'S'
                    AND NF.IDSTATUS IN ('A', 'E')
                    AND NF.CDCLIENTE = C_Y570.CDCLIENTE
                    AND NF.DTEMISSAO BETWEEN TO_DATE('01/01/'||P_ANO) AND TO_DATE('31/12/'||P_ANO)
                    AND IMP.CDFILIAL = NF.CDFILIAL
                    AND IMP.NRLANCTONF = NF.NRLANCTONF
                    AND IMP.CDFISCALNF = '1'
                    AND IMP.CDIMPOSTO = I.CDIMPOSTO
                    AND I.CDIMPOSTONFE = INFE.CDIMPOSTONFE
                    AND ((INFE.CDIMPOSTONFE = '22') OR (INFE.CDIMPOSTONFE = '76'))
                    AND IMP.VRIMPOSTONF > 0
                    AND IMP.IDIMPOSTONF = '1') NF;
         BEGIN
            SELECT REPLACE(LTRIM(TO_CHAR(ABS(NVL(V_VRBRUTONF,0)),'9999999999990.00')),'.',',') VRBRUTO,
                   REPLACE(LTRIM(TO_CHAR(ABS(NVL(V_VRIRPJ,0)),'9999999999990.00')),'.',',') VRIRPJ,
                   REPLACE(LTRIM(TO_CHAR(ABS(NVL(V_VRCSLL,0)),'9999999999990.00')),'.',',') VRCSLL
              INTO V_STBRUTONF, V_STIRPJ, V_STCSLL
              FROM DUAL;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_STBRUTONF := NULL;
               V_STIRPJ := NULL;
               V_STCSLL := NULL;
         END;
         IF ((V_STBRUTONF IS NOT NULL) OR (V_STIRPJ IS NOT NULL) OR (V_STCSLL IS NOT NULL)) THEN
            V_CDRETIRPJ := NULL;
            BEGIN
               SELECT CDRETECF
                 INTO V_CDRETIRPJ
                 FROM RETENCAOECF
                WHERE NRSEQUENCIAL = C_Y570.NRSEQRETIRPJ;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_CDRETIRPJ := NULL;
            END;

            IF ((NOT V_CDRETIRPJ IS NULL) AND (V_VRIRPJ > 0)) THEN
               SELECT IDORGPUB
                 INTO V_IDORGPUB
                 FROM RETENCAOECF
                WHERE NRSEQUENCIAL = C_Y570.NRSEQRETIRPJ;

               V_Y570AUX := '|Y570|'||C_Y570.NRINSJURCLIE||'|'||C_Y570.NMRAZSOCCLIE||'|';
               V_Y570AUX := V_Y570AUX ||V_IDORGPUB||'|'||V_CDRETIRPJ||'|'||NVL(V_STBRUTONF, '0,00')||'|';
               V_Y570AUX := V_Y570AUX ||NVL(V_STIRPJ, '0,00')||'|'||'0,00'||'|';
               V_NRORDREGARQ := V_NRORDREGARQ + 1;
               INSERT INTO ARQMAGNETICO
                  (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
               VALUES
                  (LPAD(TO_CHAR(V_NRORDREGARQ),10,'0'), V_Y570AUX, P_NRSEQARQMAG);
            END IF;

            V_CDRETCSLL := NULL;
            BEGIN
               SELECT CDRETECF
                 INTO V_CDRETCSLL
                 FROM RETENCAOECF
                WHERE NRSEQUENCIAL = C_Y570.NRSEQRETCSLL;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_CDRETCSLL := NULL;
            END;

            IF ((NOT V_CDRETCSLL IS NULL) AND (V_VRCSLL > 0)) THEN
               SELECT IDORGPUB
                 INTO V_IDORGPUB
                 FROM RETENCAOECF
                WHERE NRSEQUENCIAL = C_Y570.NRSEQRETCSLL;

               V_Y570AUX := '|Y570|'||C_Y570.NRINSJURCLIE||'|'||C_Y570.NMRAZSOCCLIE||'|';
               V_Y570AUX := V_Y570AUX ||V_IDORGPUB||'|'||V_CDRETCSLL||'|'||NVL(V_STBRUTONF, '0,00')||'|';
               V_Y570AUX := V_Y570AUX || '0,00'||'|'||NVL(V_STCSLL, '0,00')||'|';
               V_NRORDREGARQ := V_NRORDREGARQ + 1;
               INSERT INTO ARQMAGNETICO
                  (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
               VALUES
                  (LPAD(TO_CHAR(V_NRORDREGARQ),10,'0'), V_Y570AUX, P_NRSEQARQMAG);
            END IF;
            V_STBRUTONF := NULL;
            V_STIRPJ := NULL;
            V_STCSLL := NULL;
            V_Y570AUX := NULL;
         END IF;
      END IF;
   END LOOP;

   /* 2014 EXISTIA O REGISTRO Y611, ERA O LEIAUTE 1.0 DA ECF */
   IF P_ANO = '2014' THEN
      /* GERACAO DO REGISTRO REFERENTE AOS SOCIOS DA EMPRESA */
      FOR C_Y600 IN
         (SELECT '|Y600'                                          ||'|'|| /* NOME DO REGISTRO */
                 TO_CHAR(SE.DTALTSOC, 'DDMMYYYY')                 ||'|'|| /* DATA DE ALTERACAO DO QUADRO SOCIETARIO */
                 TO_CHAR(SE.DTFIMSOC, 'DDMMYYYY')                 ||'|'|| /* DATA QUE O SOCIO DEIXOU O QUADRO SOCIETARIO */
                 TO_CHAR(R.CDPAISREG)                             ||'|'|| /* CODIGO DO PAIS */
                 IDTIPOREG                                        ||'|'|| /* PESSOA FISICA, JURIDICA OU FUNDO DE INVESTIMENTO */
                 DECODE(TO_CHAR(R.CDPAISREG), '105', R.CDREG, '') ||'|'|| /* QUANDO PAIS BRASIL PREENCHE, SENAO BRANCO */
                 R.NMREG                                          ||'|'|| /* NOME DO SOCIO */
                 SE.IDQUALIY600                                   ||'|'|| /* QUALIFICACAO DO SOCIO PELA EMPRESA */
                 REPLACE(LTRIM(TO_CHAR(VRPERCAPTOT, '990.00')), '.', ',') ||'|'|| /* PORCENTAGEM DO CAPITAL TOTAL QUE PERTENCE AO SOCIO */
                 REPLACE(LTRIM(TO_CHAR(VRPERCAPVOT, '990.00')), '.', ',') ||'|'|| /* PORCENTAGEM DO CAPITAL VOTANTE QUE PERTENCE AO SOCIO */
                 NRCPFREPREG                                      ||'|'|| /* CPF DO REPRESENTANTE DO SOCIO */
                 DECODE(QUALIREPREG, '00', '', QUALIREPREG)       ||'|' /* QUALIFICACAO DO REPRESENTANTE DO SOCIO */
                  AS LINHA,
                 R.NMREG
           FROM SOCIOEMPRESA SE, REGY600ECF R
          WHERE SE.CDEMPRESA = P_CDEMPRESA
            AND SE.NRSEQREG = R.NRSEQREG
            AND R.IDSOCIOREG = 'S'
          ORDER BY R.NMREG) LOOP

            V_NRORDREGARQ := V_NRORDREGARQ + 1;
            INSERT INTO ARQMAGNETICO
               (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
            VALUES
               (LPAD(TO_CHAR(V_NRORDREGARQ),10,'0'), C_Y600.LINHA, P_NRSEQARQMAG);
      END LOOP;

      /* REGISTRO REFERENTE AS PESSOAS / EMPRESAS QUE OBTIVERAM RENDIMENTOS DA EMPRESA
         GERADORA DO ARQUIVO */
      FOR C_Y611 IN
         (SELECT '|Y611'                                          ||'|'|| /* NOME DO REGISTRO */
                 TO_CHAR(R.CDPAISREG)                             ||'|'|| /* CODIGO DO PAIS */
                 R.IDTIPOREG                                      ||'|'|| /* PESSOA FISICA, JURIDICA OU FUNDO DE INVESTIMENTO */
                 DECODE(TO_CHAR(R.CDPAISREG), '105', R.CDREG, '') ||'|'|| /* QUANDO PAIS BRASIL PREENCHE, SENAO BRANCO */
                 R.NMREG                                          ||'|'|| /* NOME DO SOCIO */
                 RE.IDQUALIY611                                   ||'|'|| /* QUALIFICACAO DO SOCIO PELA EMPRESA */
                 REPLACE(LTRIM(TO_CHAR(RE.VRREMTRAB, '9999999999990.00')), '.', ',') ||'|'|| /* VALOR DA REMUNERACAO POR TRABALHO */
                 REPLACE(LTRIM(TO_CHAR(RE.VRLUCRODIV, '9999999999990.00')), '.', ',') ||'|'|| /* VALOR RECEBIDO POR LUCRO OU DIVIDENDO */
                 REPLACE(LTRIM(TO_CHAR(RE.VRJURCAPPROP, '9999999999990.00')), '.', ',') ||'|'|| /* VALOR DE JUROS SOBRE CAPITAL PROPRIO */
                 REPLACE(LTRIM(TO_CHAR(RE.VRDEMAISREND, '9999999999990.00')), '.', ',') ||'|'|| /* VALOR RECEBIDO POR DEMAIS RENDIMENTOS */
                 REPLACE(LTRIM(TO_CHAR(RE.VRIRRETIDO, '9999999999990.00')), '.', ',') ||'|' /* VALOR DE IR RETIDO */
                  AS LINHA,
                 R.NMREG
           FROM REGY611ECF RE, REGY600ECF R
          WHERE RE.CDEMPRESA = P_CDEMPRESA
            AND RE.NRSEQREG = R.NRSEQREG
            AND RE.DTREFERENCIA = TO_DATE('31/12/'||P_ANO)
          ORDER BY R.NMREG) LOOP

            V_NRORDREGARQ := V_NRORDREGARQ + 1;
            INSERT INTO ARQMAGNETICO
               (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
            VALUES
               (LPAD(TO_CHAR(V_NRORDREGARQ),10,'0'), C_Y611.LINHA, P_NRSEQARQMAG);

      END LOOP;
   ELSE
      /* LEIAUTE A PARTIR DE 2014. ESTE LEIAUTE NAO POSSUI O REGISTRO Y611 */
      /* GERACAO DO REGISTRO REFERENTE AOS SOCIOS DA EMPRESA. ESTE REGISTRO
         A PARTIR DE 2014 TAMBEM TRARA OS RENDIMENTOS DOS SOCIOS */
      FOR C_Y600 IN
         (SELECT '|Y600'                                          ||'|'|| /* NOME DO REGISTRO */
                 TO_CHAR(SE.DTALTSOC, 'DDMMYYYY')                 ||'|'|| /* DATA DE ALTERACAO DO QUADRO SOCIETARIO */
                 TO_CHAR(SE.DTFIMSOC, 'DDMMYYYY')                 ||'|'|| /* DATA QUE O SOCIO DEIXOU O QUADRO SOCIETARIO */
                 TO_CHAR(R.CDPAISREG)                             ||'|'|| /* CODIGO DO PAIS */
                 IDTIPOREG                                        ||'|'|| /* PESSOA FISICA, JURIDICA OU FUNDO DE INVESTIMENTO */
                 DECODE(TO_CHAR(R.CDPAISREG), '105', R.CDREG, '') ||'|'|| /* QUANDO PAIS BRASIL PREENCHE, SENAO BRANCO */
                 R.NMREG                                          ||'|'|| /* NOME DO SOCIO */
                 SE.IDQUALIY600                                   ||'|'|| /* QUALIFICACAO DO SOCIO PELA EMPRESA */
                 REPLACE(LTRIM(TO_CHAR(VRPERCAPTOT, '990.00')), '.', ',') ||'|'|| /* PORCENTAGEM DO CAPITAL TOTAL QUE PERTENCE AO SOCIO */
                 REPLACE(LTRIM(TO_CHAR(VRPERCAPVOT, '990.00')), '.', ',') ||'|'|| /* PORCENTAGEM DO CAPITAL VOTANTE QUE PERTENCE AO SOCIO */
                 NRCPFREPREG                                      ||'|'|| /* CPF DO REPRESENTANTE DO SOCIO */
                 DECODE(QUALIREPREG, '00', '', QUALIREPREG)       ||'|'|| /* QUALIFICACAO DO REPRESENTANTE DO SOCIO */
                 REPLACE(LTRIM(TO_CHAR(RE.VRREMTRAB, '9999999999990.00')), '.', ',') ||'|'|| /* VALOR DA REMUNERACAO POR TRABALHO */
                 REPLACE(LTRIM(TO_CHAR(RE.VRLUCRODIV, '9999999999990.00')), '.', ',') ||'|'|| /* VALOR RECEBIDO POR LUCRO OU DIVIDENDO */
                 REPLACE(LTRIM(TO_CHAR(RE.VRJURCAPPROP, '9999999999990.00')), '.', ',') ||'|'|| /* VALOR DE JUROS SOBRE CAPITAL PROPRIO */
                 REPLACE(LTRIM(TO_CHAR(RE.VRDEMAISREND, '9999999999990.00')), '.', ',') ||'|'|| /* VALOR RECEBIDO POR DEMAIS RENDIMENTOS */
                 REPLACE(LTRIM(TO_CHAR(RE.VRIRRETIDO, '9999999999990.00')), '.', ',') ||'|' /* VALOR DE IR RETIDO */
                  AS LINHA,
                 R.NMREG
           FROM SOCIOEMPRESA SE, REGY600ECF R, REGY611ECF RE
          WHERE SE.CDEMPRESA = P_CDEMPRESA
            AND SE.NRSEQREG = R.NRSEQREG
            AND R.NRSEQREG = RE.NRSEQREG
            AND RE.DTREFERENCIA = TO_DATE('31/12/'||P_ANO)
            AND SE.CDEMPRESA = RE.CDEMPRESA
          ORDER BY R.NMREG) LOOP

            V_NRORDREGARQ := V_NRORDREGARQ + 1;
            INSERT INTO ARQMAGNETICO
               (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
            VALUES
               (LPAD(TO_CHAR(V_NRORDREGARQ),10,'0'), C_Y600.LINHA, P_NRSEQARQMAG);
      END LOOP;
   END IF;
   V_COUNT := 0;
   BEGIN
     SELECT COUNT(*)
       INTO V_COUNT
       FROM REG0010_ECF
      WHERE CDEMPRESA = P_CDEMPRESA
        AND FORMATRIB = '1';
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_COUNT := 0;
   END;
   IF V_COUNT = 0 THEN
      V_GERA := 'S';
      V_Y672 := '|Y672|';
      V_EXISTEY672 := 'N';
      BEGIN
         SELECT 'N'
           INTO V_GERA
           FROM REG0010_ECF
          WHERE CDEMPRESA = P_CDEMPRESA
            AND FORMATRIB = '5'
            AND P_ECDTRANS = 'S';
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_GERA := 'S';
      END;
      /* OUTRAS INFORMACOES SOBRE O LUCRO PRESUMIDO
      2	Capital Registrado do Ano Anterior: Valor do capital registrado, em orgao competente, no fim do "Ano Imediatamente Anterior".
      3	Capital Registrado: Valor do capital registrado, em orgao competente, no fim do "Ano da Escrituracao".
      4	Estoques do Ano Anterior: Valor dos estoques no fim do "Ano Imediatamente Anterior".
      5	Estoques: Valor dos estoques no fim do "Ano da Escrituracao".
      6	Saldo de Caixa e Bancos do Ano Anterior: Valor resultante da soma do saldo de caixa e dos saldos bancarios registrados na escrituracao comercial ou no livro Caixa, no fim do "Ano Imediatamente Anterior".
      7	Saldo de Caixa e Bancos: Valor resultante da soma do saldo de caixa e dos saldos bancarios registrados na escrituracao comercial ou no livro Caixa, no fim do "Ano da Escrituracao".
      8	Saldo de Aplicacoes Financeiras do Ano Anterior: Saldo das aplicacoes financeiras, seja no mercado de renda fixa, seja no mercado de renda variavel, no fim do "Ano Imediatamente Anterior".
      9	Saldo de Aplicacoes Financeiras: Saldo das aplicacoes financeiras, seja no mercado de renda fixa, seja no mercado de renda variavel, no fim do "Ano da Escrituracao".
      10	Contas a Receber do Ano Anterior: Saldo das contas a receber no fim do "Ano Imediatamente Anterior".
      11	Contas a Receber: Saldo das contas a receber no fim do "Ano da Escrituracao".
      12	Contas a Pagar do Ano Anterior: Saldo das contas a pagar no fim do "Ano Imediatamente Anterior".
      13	Contas a Pagar: Saldo das contas a pagar no fim do "Ano da Escrituracao".
      14	Compras de Mercadorias no Ano-Calendario: Valor das compras de mercadorias adquiridas no ano-calendario para revenda e as aquisicoes de materiais empregados nos produtos produzidos e servicos prestados.
      15	Compras de Elementos do Ativo no Ano-Calendario, Exceto os Classificaveis no Ativo Circulante e Ativo Nao Circulante Realizavel a Longo Prazo: Valor das aquisicoes de elementos do ativo no ano-calendario, exceto os classificaveis no ativo circulante e ativo nao circulante realizavel a longo prazo.
      16	Receitas e Rendimentos Nao Tributaveis ou Tributados Exclusivamente na Fonte
      17	Total do Ativo: Valor total do Ativo no fim do "Ano da Declaracao".
      18	Valor Total da Folha Sujeita a Aliquota Reduzida de que Trata a Lei no 11.774/2008: Valor total da Folha de Pagamento, em relacao aos segurados empregados, trabalhadores avulsos e contribuintes individuais, sujeita a aliquota reduzida de que trata o art. 14 da Lei n 11.774/2008.
      19	Aliquota Reduzida de que Trata a Lei no 11.774/2008: Valor da aliquota reduzida de que trata o art. 14 da Lei n 11.774/2008, em relacao as empresas que prestam servicos de tecnologia da informacao - TI e de tecnologia da informacao e comunicacao - TIC.
      20	Regime de Apuracao das Receitas
      */
      FOR Y_672 IN
         (SELECT RE.NRSEQUENCIAL, NVL(NRSEQY672, R.NRSEQUENCIAL) NRSEQY672,
                 R.CDREGY672, RE.CDEMPRESA, RE.DTREFERENCIA, NVL(RE.IDTIPO, 'N') IDTIPO,
                 NVL(RE.VRREGY672EMPR, 0) VRREGY672EMPR
            FROM REGY672ECF R LEFT JOIN REGY672EMPR RE
                                     ON RE.NRSEQY672 = R.NRSEQUENCIAL
                                    AND RE.CDEMPRESA = P_CDEMPRESA
                                    AND RE.DTREFERENCIA = TO_DATE('31/12/'||P_ANO)
           ORDER BY R.CDREGY672) LOOP
         IF (V_GERA = 'S') AND  ((Y_672.CDREGY672 <> 18) OR (P_ANO <= 2017)) THEN
            V_STY672TEMP := NULL;
            IF Y_672.IDTIPO = 'N' THEN
               V_EXISTEY672 := 'S';
               V_Y672 := V_Y672 ||'|';
            ELSIF Y_672.IDTIPO = 'V' THEN
               SELECT REPLACE(LTRIM(TO_CHAR(Y_672.VRREGY672EMPR, '9999999999990.00')), '.', ',')
                 INTO V_STY672TEMP
                 FROM DUAL;
               V_EXISTEY672 := 'S';
               V_Y672 := V_Y672 || NVL(V_STY672TEMP, '') || '|';
            ELSIF Y_672.IDTIPO = 'C' THEN
               IF Y_672.CDREGY672 IN (2, 4, 6, 8, 10, 12) THEN  /* CODIGOS QUE PRECISAM PEGAR O VALOR DO ANO ANTERIOR */
                  V_VRY672TEMP := 0;
                  BEGIN
                     SELECT SUM(ROUND(NVL(VRSALDEMPR, 0), 2))
                       INTO V_VRY672TEMP
                       FROM SALDEMPR S JOIN CONTAY672ECF C
                                         ON C.CDCONTCTBL = S.CDCONTCTBL
                                        AND C.NRSEQY672EMPR = Y_672.NRSEQUENCIAL
                      WHERE S.CDEMPRESA = Y_672.CDEMPRESA
                        AND S.DTSALDEMPR = ADD_MONTHS(Y_672.DTREFERENCIA, -12);
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_VRY672TEMP := 0;
                  END;
               ELSE
                  BEGIN
                     SELECT SUM(ROUND(NVL(VRSALDEMPR, 0), 2))
                       INTO V_VRY672TEMP
                       FROM SALDEMPR S JOIN CONTAY672ECF C
                                         ON C.CDCONTCTBL = S.CDCONTCTBL
                                        AND C.NRSEQY672EMPR = Y_672.NRSEQUENCIAL
                      WHERE S.CDEMPRESA = Y_672.CDEMPRESA
                        AND S.DTSALDEMPR = Y_672.DTREFERENCIA;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_VRY672TEMP := 0;
                  END;
               END IF;
               SELECT REPLACE(LTRIM(TO_CHAR(V_VRY672TEMP, '9999999999990.00')), '.', ',')
                 INTO V_STY672TEMP
                 FROM DUAL;
               V_EXISTEY672 := 'S';
               V_Y672 := V_Y672 || NVL(V_STY672TEMP, '') || '|';
            ELSIF Y_672.IDTIPO = 'A' THEN /* LANCAMENTOS CONTABEIS */
               V_VRY672TEMP := 0;
               BEGIN
                  SELECT SUM(ROUND(NVL(VRLANCAMENT, 0), 2))
                    INTO V_VRY672TEMP
                    FROM LANCCONT L JOIN CONTAY672ECF C
                                      ON L.CDCONTCTBL LIKE C.CDCONTCTBL||'%'
                                     AND C.NRSEQY672EMPR = Y_672.NRSEQUENCIAL
                                    JOIN CONTCTBL CC
                                      ON CC.CDCONTCTBL = L.CDCONTCTBL
                   WHERE L.CDEMPRESA = Y_672.CDEMPRESA
                     AND L.DTLANCCONT BETWEEN TO_DATE('01/01/'||P_ANO) AND TO_DATE('31/12/'||P_ANO)
                     AND CC.IDTIPOCONT = 'A'
                     AND CC.IDCONTCCUS <> 'R'
                     AND L.IDLANCINTE <> 'F'; /* ENCERRAMENTO FISCAL */
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_VRY672TEMP := 0;
               END;
               SELECT REPLACE(LTRIM(TO_CHAR(V_VRY672TEMP, '9999999999990.00')), '.', ',')
                 INTO V_STY672TEMP
                 FROM DUAL;
               V_EXISTEY672 := 'S';
               V_Y672 := V_Y672 || NVL(V_STY672TEMP, '') || '|';
            ELSE /* SOMENTE OS TIPOS L E O SOBRARAM, PORTANTO SERA O CODIGO 20 */
               V_EXISTEY672 := 'S';
               IF Y_672.IDTIPO = 'L' THEN /* LIVRO CAIXA */
                  V_TEMP := '1';
               ELSIF Y_672.IDTIPO = 'O' THEN/* COMPETENCIA */
                  V_TEMP := '2';
               END IF;
               V_Y672 := V_Y672 || NVL(V_TEMP, '') || '|';
            END IF;
         ELSIF ((Y_672.CDREGY672 <> 18) OR (P_ANO <= 2017)) THEN
            V_Y672 := V_Y672 ||'|';
         END IF;
      END LOOP;
    
      IF V_EXISTEY672 = 'S' THEN
         V_Y672 := V_Y672 || '1' || '|'; /* custo medio ponderado */
         V_NRORDREGARQ := V_NRORDREGARQ + 1;
         INSERT INTO ARQMAGNETICO
            (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
         VALUES
            (LPAD(TO_CHAR(V_NRORDREGARQ),10,'0'), V_Y672, P_NRSEQARQMAG);
      END IF;
   END IF;
   BEGIN
      SELECT '|Y990'             ||'|'||  /* NOME DO REGISTRO */
             TO_CHAR(COUNT(*)+1) ||'|'    /* QUANTIDADE DE REGISTROS DO BLOCO J */
        INTO V_LINHA
        FROM ARQMAGNETICO
       WHERE NRSEQARQMAG = P_NRSEQARQMAG
         AND SUBSTR(DSREGARQMAG, 2, 1) = 'Y';
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_LINHA := NULL;
   END; 

   V_NRORDREGARQ := V_NRORDREGARQ + 1;
   INSERT INTO ARQMAGNETICO
     (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
   VALUES
     (LPAD(TO_CHAR(V_NRORDREGARQ),10,'0'), V_LINHA, P_NRSEQARQMAG);

   P_NRORDENACAO := V_NRORDREGARQ;
END;
/