CREATE OR REPLACE FUNCTION ARQUIVO_DCTF_R10 (
   P_CDEMPRESA    IN EMPRESA.CDEMPRESA%TYPE,
   P_CDLIVROMAG   IN LIVROMAGNETICO.CDLIVROMAG%TYPE,
   P_DTINICIAL    IN NOTAFISCAL.DTENTRSAID%TYPE,
   P_DTFINAL      IN NOTAFISCAL.DTENTRSAID%TYPE,
   P_NRSEQARQMAG  IN ARQMAGNETICO.NRSEQARQMAG%TYPE,
   P_SITUACAO     IN NOTAFISCAL.IDSTATUS%TYPE,
   P_VERSAO       IN NOTAFISCAL.IDSTATUS%TYPE,
   P_BALNCRED     IN NOTAFISCAL.IDSTATUS%TYPE,
   P_DBTOQTA      IN NOTAFISCAL.IDSTATUS%TYPE,
   V_IRPJ         VARCHAR2,
   V_IRRF         VARCHAR2,
   V_IPI          VARCHAR2,
   V_IOF          VARCHAR2,
   V_CSLL         VARCHAR2,
   V_PIS          VARCHAR2,
   V_COFINS       VARCHAR2,
   V_CPMF         VARCHAR2,
   V_CIDE         VARCHAR2,
   V_RET          VARCHAR2,
   V_CSRF         VARCHAR2,
   V_COSIRF       VARCHAR2,
   V_CPSSS        VARCHAR2) RETURN NUMBER
AS
   V_CONTREGAR10 NUMBER;
   V_ORDESTAB     VARCHAR2(20);
   V_CNPJEMPR     VARCHAR2(20);
   V_REG10_IPI    VARCHAR2(500);
BEGIN
   /*OLHA APENAS A DATA FINAL DO MAPA PORQUE IRPJ PODE SER APURADO TRIMESTRALMENTE, E DEVE SER DECLARADO APENAS NO ULTIMO MES*/
   FOR C_REG_10_IRPJ IN (SELECT (RPAD('R10',3,' '))                                                                           ||/*REGISTRO*/
                                LPAD(REPLACE(REPLACE(REPLACE(REPLACE(NRINSJUREMPR,'.',''),'-',''),'/',''),' ',''),14,0)       ||/*CNPJ DA EMPRESA*/
                                TO_CHAR(TO_DATE(P_DTINICIAL),'YYYYMM')                                                        ||/*MES E ANO DO FATO GERADOR*/
                                P_SITUACAO                                                                                    ||/*SITUACAO*/
                                DECODE(P_SITUACAO,'0',RPAD('0',8,'0'), TO_CHAR(TO_DATE(P_DTFINAL),'YYYYMMDD'))                ||/*DATA DO EVENTO*/
                                V_IRPJ                                                                                        ||/*IMPOSTO*/
                                RPAD(NVL(CDRECEITACONTR||CDVARIACAO,'000000'),6,'0')                                          ||/*CODIGO DA RECEITA/VARIACAO*/
                                NVL(IDPERIODICREC,'M')                                                                        ||/*PERIODICIDADE*/
                                TO_CHAR(DTFIMPERIODO,'YYYY')                                                               ||/*ANO DO FATO GERADOR*/
                                CASE WHEN NVL(IDPERIODICREC,'M') = 'T' THEN DECODE(TO_CHAR(DTFIMPERIODO,'MM'),'03','01',DECODE(TO_CHAR(DTFIMPERIODO,'MM'),'06','02',DECODE(TO_CHAR(DTFIMPERIODO,'MM'),'09','03','04')))
                                     WHEN NVL(IDPERIODICREC,'M') IN ('M','B','U','E') THEN TO_CHAR(DTFIMPERIODO,'MM')       ELSE '00' END || /*MES/BIMESTRE/TRIMESTRE/QUADRIMESTRE/SEMESTRE DO PERIODO DE APURACAO*/
                                CASE WHEN NVL(IDPERIODICREC,'M') IN ('D','S','X','Q') THEN TO_CHAR(TO_DATE(P_DTFINAL),'DD') ELSE '00' END || /*DIA/SEMANA/QUINZENA/DECENDIO DO PERIODO DE APURACAO*/
                                LPAD('0',6,'0')                                                                               ||/*APENAS IPI/CIDE*/
                                LPAD('0',14,'0')                                                                              ||/*APENAS RET*/
                                '0'                                                                                           ||/*RESERVADO*/
                                LPAD(LTRIM(REPLACE(TO_CHAR(VRDEBITO,'000000000000.00'),'.')),'14','0')                        ||/*DEBITO*/
                                P_BALNCRED                                                                                    ||/*BALANCO DE REDUCAO*/
                                P_DBTOQTA                                                                                     ||/*DEBITO EM QUOTAS*/
                                '0'                                                                                           ||/*RESERVADO*/
                                NVL(IDDEBSCPINC,'0')                                                                          ||/*DEBITO DE SCP/INC*/
                                RPAD('0',10,'0')  AS  REG_10_IRPJ
                           FROM (SELECT SUM(ROUND(VRTOTAIMPOS,2)) AS VRDEBITO, E.NRINSJUREMPR, MP.CDIMPOSTO,
                                        CDRECEITACONTR, DTVENCGUIA, CDVARIACAO, IDPERIODICREC, IDDEBSCPINC, MP.DTFIMPERIODO
                                   FROM EMPRESA E, MAPAAPURAC MP
                                  WHERE E.CDEMPRESA     = P_CDEMPRESA
                                    AND E.CDEMPRESA     = MP.CDEMPRESA
                                    AND MP.CDIMPOSTO    = '25'
                                    AND MP.DTFIMPERIODO = P_DTFINAL
                                    AND ((TO_CHAR(TO_DATE(P_DTFINAL),'MM') IN ('03','06','09','12') AND MP.IDTPMAPAAPURAC IN ('LPT','LRT')) OR
                                        (MP.IDTPMAPAAPURAC IN ('LPM','LRM')))
                                  GROUP BY E.NRINSJUREMPR, MP.CDIMPOSTO, CDRECEITACONTR, DTVENCGUIA,
                                        CDVARIACAO, IDPERIODICREC, IDDEBSCPINC, MP.DTFIMPERIODO)
                           WHERE VRDEBITO > 0 )LOOP

      V_CONTREGAR10 := NVL(V_CONTREGAR10,0)+1;
      INSERT INTO ARQMAGNETICO
        (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
      VALUES
        ('104'||LPAD(RTRIM(V_CONTREGAR10), 7, '0'), C_REG_10_IRPJ.REG_10_IRPJ, P_NRSEQARQMAG);
   END LOOP ;

   FOR C_REG_10_IRRF IN (SELECT (RPAD('R10',3,' '))                                                                           ||/*REGISTRO*/
                                LPAD(REPLACE(REPLACE(REPLACE(REPLACE(NRINSJUREMPR,'.',''),'-',''),'/',''),' ',''),14,0)       ||/*CNPJ DA EMPRESA*/
                                TO_CHAR(TO_DATE(P_DTINICIAL),'YYYYMM')                                                        ||/*MES E ANO DO FATO GERADOR*/
                                P_SITUACAO                                                                                    ||/*SITUACAO*/
                                DECODE(P_SITUACAO,'0',RPAD('0',8,'0'), TO_CHAR(TO_DATE(P_DTFINAL),'YYYYMMDD'))                ||/*DATA DO EVENTO*/
                                V_IRRF                                                                                        ||/*IMPOSTO*/
                                RPAD(NVL(CDRECEITACONTR||CDVARIACAO,'000000'),6,'0')                                          ||/*CODIGO DA RECEITA/VARIACAO*/
                                NVL(IDPERIODICREC,'M')                                                                        ||/*PERIODICIDADE*/
                                TO_CHAR(TO_DATE(P_DTINICIAL),'YYYY')                                                          ||/*ANO DO FATO GERADOR*/
                                CASE WHEN NVL(IDPERIODICREC,'M') IN ('M','B','U','T','E') THEN TO_CHAR(TO_DATE(P_DTINICIAL),'MM') ELSE '00' END || /*MES/BIMESTRE/TRIMESTRE/QUADRIMESTRE/SEMESTRE DO PERIODO DE APURACAO*/
                                CASE WHEN NVL(IDPERIODICREC,'M') IN ('D','S','X','Q')     THEN TO_CHAR(TO_DATE(P_DTINICIAL),'DD') ELSE '00' END || /*DIA/SEMANA/QUINZENA/DECENDIO DO PERIODO DE APURACAO*/
                                LPAD('0',6,'0')                                                                               ||/*APENAS IPI/CIDE*/
                                LPAD('0',14,'0')                                                                              ||/*APENAS RET*/
                                '0'                                                                                           ||/*RESERVADO*/
                                LPAD(LTRIM(REPLACE(TO_CHAR(VRDEBITO,'000000000000.00'),'.')),'14','0')                        ||/*DEBITO*/
                                P_BALNCRED                                                                                    ||/*BALANCO DE REDUCAO*/
                                '0'                                                                                           ||/*DEBITO EM QUOTAS*/
                                '0'                                                                                           ||/*RESERVADO*/
                                NVL(IDDEBSCPINC,'0')                                                                          ||/*DEBITO DE SCP/INC*/
                                RPAD('0',10,'0')  AS  REG_10_IRRF, SEQUENCIAL
                           FROM (SELECT SUM(VRDEBITO) AS VRDEBITO, NRINSJUREMPR, CDIMPOSTO, CDRECEITACONTR,
                                        DTVENCGUIA, CDVARIACAO, IDPERIODICREC, IDDEBSCPINC, MIN(SEQUENCIAL) AS SEQUENCIAL
                                   FROM (SELECT ROUND(M.VRTOTAIMPOS,2) AS VRDEBITO, E.NRINSJUREMPR, M.CDIMPOSTO,
                                                NVL(M.CDRECEITACONTR,M.CDRECEGUIA) AS CDRECEITACONTR,
                                                M.DTVENCGUIA, M.CDVARIACAO, M.IDPERIODICREC, M.IDDEBSCPINC,
                                                '00' AS SEQUENCIAL
                                           FROM EMPRESA E, MAPAAPURAC M
                                          WHERE E.CDEMPRESA    = P_CDEMPRESA
                                            AND E.CDEMPRESA    = M.CDEMPRESA
                                            AND M.CDIMPOSTO    = '21'
                                            AND M.DTINIPERIODO = P_DTINICIAL
                                            AND M.DTFIMPERIODO = P_DTFINAL
                                          UNION ALL
                                         SELECT ROUND(G.VRRECEITAGUIA,2) AS VRDEBITO, E.NRINSJUREMPR, M.CDIMPOSTO,
                                                SUBSTR(RPAD(G.CDRECEITAGUIA,6,'0'),1,4) AS CDRECEITACONTR,
                                                G.DTVENCGUIACOMPL, SUBSTR(RPAD(G.CDRECEITAGUIA,6,'0'),5,2) AS CDVARIACAO,
                                                M.IDPERIODICREC, M.IDDEBSCPINC,
                                                SUBSTR(G.NRSEQGUIACOMPL,9,2) AS SEQUENCIAL
                                           FROM EMPRESA E, MAPAAPURAC M, GUIACOMPLMAPA G
                                          WHERE E.CDEMPRESA    = P_CDEMPRESA
                                            AND E.CDEMPRESA    = M.CDEMPRESA
                                            AND M.CDIMPOSTO    = '21'
                                            AND M.DTINIPERIODO = P_DTINICIAL
                                            AND M.DTFIMPERIODO = P_DTFINAL
                                            AND M.NRSEQUMAPAPU = G.NRSEQUMAPAPU)
                                  GROUP BY NRINSJUREMPR, CDIMPOSTO, CDRECEITACONTR,DTVENCGUIA, CDVARIACAO, IDPERIODICREC, IDDEBSCPINC)
                           WHERE VRDEBITO > 0 ) LOOP

      V_CONTREGAR10 := NVL(V_CONTREGAR10,0)+1;
      INSERT INTO ARQMAGNETICO
        (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
      VALUES
        ('106'||C_REG_10_IRRF.SEQUENCIAL||'0'||LPAD(RTRIM(V_CONTREGAR10), 4, '0'), C_REG_10_IRRF.REG_10_IRRF, P_NRSEQARQMAG);
   END LOOP ;

   FOR C_REG_10_CSRF IN (SELECT (RPAD('R10',3,' '))                                                                           ||/*REGISTRO*/
                                LPAD(REPLACE(REPLACE(REPLACE(REPLACE(NRINSJUREMPR,'.',''),'-',''),'/',''),' ',''),14,0)       ||/*CNPJ DA EMPRESA*/
                                TO_CHAR(TO_DATE(P_DTINICIAL),'YYYYMM')                                                        ||/*MES E ANO DO FATO GERADOR*/
                                P_SITUACAO                                                                                    ||/*SITUACAO*/
                                DECODE(P_SITUACAO,'0',RPAD('0',8,'0'), TO_CHAR(TO_DATE(P_DTFINAL),'YYYYMMDD'))                ||/*DATA DO EVENTO*/
                                V_CSRF                                                                                        ||/*IMPOSTO*/
                                RPAD(NVL(CDRECEITACONTR||CDVARIACAO,'000000'),6,'0')                                          ||/*CODIGO DA RECEITA/VARIACAO*/
                                NVL(IDPERIODICREC,'M')                                                                        ||/*PERIODICIDADE*/
                                TO_CHAR(TO_DATE(P_DTINICIAL),'YYYY')                                                          ||/*ANO DO FATO GERADOR*/
                                CASE WHEN NVL(IDPERIODICREC,'M') IN ('M','B','U','T','E') THEN TO_CHAR(TO_DATE(P_DTINICIAL),'MM') ELSE '00' END || /*MES/BIMESTRE/TRIMESTRE/QUADRIMESTRE/SEMESTRE DO PERIODO DE APURACAO*/
                                CASE WHEN NVL(IDPERIODICREC,'M') IN ('D','S','X','Q')     THEN TO_CHAR(TO_DATE(P_DTINICIAL),'DD') ELSE '00' END || /*DIA/SEMANA/QUINZENA/DECENDIO DO PERIODO DE APURACAO*/
                                LPAD('0',6,'0')                                                                               ||/*APENAS IPI/CIDE*/
                                LPAD('0',14,'0')                                                                              ||/*APENAS RET*/
                                '0'                                                                                           ||/*RESERVADO*/
                                LPAD(LTRIM(REPLACE(TO_CHAR(VRDEBITO,'000000000000.00'),'.')),'14','0')                        ||/*DEBITO*/
                                P_BALNCRED                                                                                    ||/*BALANCO DE REDUCAO*/
                                '0'                                                                                           ||/*DEBITO EM QUOTAS*/
                                '0'                                                                                           ||/*RESERVADO*/
                                NVL(IDDEBSCPINC,'0')                                                                          ||/*DEBITO DE SCP/INC*/
                                RPAD('0',10,'0')  AS  REG_10_CSRF, SEQUENCIAL
                           FROM (SELECT SUM(VRDEBITO) AS VRDEBITO, NRINSJUREMPR, CDIMPOSTO, CDRECEITACONTR,
                                        DTVENCGUIA, CDVARIACAO, IDPERIODICREC, IDDEBSCPINC, MIN(SEQUENCIAL) AS SEQUENCIAL
                                   FROM (SELECT ROUND(M.VRTOTAIMPOS,2) AS VRDEBITO, E.NRINSJUREMPR, M.CDIMPOSTO,
                                                NVL(M.CDRECEITACONTR,M.CDRECEGUIA) AS CDRECEITACONTR,
                                                M.DTVENCGUIA, M.CDVARIACAO, M.IDPERIODICREC, M.IDDEBSCPINC,
                                                '00' AS SEQUENCIAL
                                           FROM EMPRESA E, MAPAAPURAC M
                                          WHERE E.CDEMPRESA    = P_CDEMPRESA
                                            AND E.CDEMPRESA    = M.CDEMPRESA
                                            AND M.CDIMPOSTO    = '24'
                                            AND M.DTINIPERIODO = P_DTINICIAL
                                            AND M.DTFIMPERIODO = P_DTFINAL
                                          UNION ALL
                                         SELECT ROUND(G.VRRECEITAGUIA,2) AS VRDEBITO, E.NRINSJUREMPR, M.CDIMPOSTO,
                                                SUBSTR(RPAD(G.CDRECEITAGUIA,6,'0'),1,4) AS CDRECEITACONTR,
                                                G.DTVENCGUIACOMPL, SUBSTR(RPAD(G.CDRECEITAGUIA,6,'0'),5,2) AS CDVARIACAO,
                                                M.IDPERIODICREC, M.IDDEBSCPINC,
                                                SUBSTR(G.NRSEQGUIACOMPL,9,2) AS SEQUENCIAL
                                           FROM EMPRESA E, MAPAAPURAC M, GUIACOMPLMAPA G
                                          WHERE E.CDEMPRESA    = P_CDEMPRESA
                                            AND E.CDEMPRESA    = M.CDEMPRESA
                                            AND M.CDIMPOSTO    = '24'
                                            AND M.DTINIPERIODO = P_DTINICIAL
                                            AND M.DTFIMPERIODO = P_DTFINAL
                                            AND M.NRSEQUMAPAPU = G.NRSEQUMAPAPU)
                                  GROUP BY NRINSJUREMPR, CDIMPOSTO, CDRECEITACONTR,DTVENCGUIA, CDVARIACAO, IDPERIODICREC, IDDEBSCPINC)
                           WHERE VRDEBITO > 0 ) LOOP

      V_CONTREGAR10 := NVL(V_CONTREGAR10,0)+1;
      INSERT INTO ARQMAGNETICO
        (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
      VALUES
        ('108'||C_REG_10_CSRF.SEQUENCIAL||'0'||LPAD(RTRIM(V_CONTREGAR10), 4, '0'), C_REG_10_CSRF.REG_10_CSRF, P_NRSEQARQMAG);
   END LOOP ;

   V_ORDESTAB := 0;
   /*FAZ O SELECT BUSCANDO ENTRADAS E SAIDAS PORQUE PARA O IPI E NECESSARIO QUEBRAR O VALOR POR INSCRICAO ESTADUAL*/
   FOR C_NOTAS_IPI IN (SELECT (VRDEBITO - VRCREDITO) AS IMPOSTO, CDEMPRESA, NRINSJUREMPR, NRINSJURIEST,
                               CDRECEITACONTR, DTVENCGUIA, CDVARIACAO, IDPERIODICREC, IDDEBSCPINC, NRSEQUMAPAPU
                          FROM (SELECT SUM(DECODE(NF.IDENTRSAIDOP,'E',IMP.VRIMPOSTO,0)) AS VRCREDITO,
                                       SUM(DECODE(NF.IDENTRSAIDOP,'S',IMP.VRIMPOSTO,0)) AS VRDEBITO,
                                       NF.CDEMPRESA, IE.NRINSJURIEST, E.NRINSJUREMPR, IMP.CDRECEITACONTR, IMP.DTVENCGUIA,
                                       IMP.CDVARIACAO, IMP.IDPERIODICREC, IMP.IDDEBSCPINC, IMP.NRSEQUMAPAPU
                                  FROM NOTAFISCAL NF, EMPRESA E, INSCRESTAD IE,
                                       (SELECT DECODE(I.CDFISCALNF, '1',I.VRIMPOSTONF, 0) AS VRIMPOSTO, M.NRSEQUMAPAPU, I.CDFILIAL,
                                               I.NRLANCTONF, M.CDEMPRESA, NVL(M.CDRECEITACONTR,M.CDRECEGUIA) AS CDRECEITACONTR,
                                               M.DTVENCGUIA, M.CDVARIACAO, M.IDPERIODICREC, M.IDDEBSCPINC
                                          FROM MAPAAPURAC M, IMPOSTONF I, IMPOSTO IM
                                         WHERE M.CDIMPOSTO = IM.CDIMPOSTONFE
                                           AND I.CDIMPOSTO = IM.CDIMPOSTO
                                           AND M.CDIMPOSTO = '10'
                                           AND ((I.NRSEQUMAPAPU  = M.NRSEQUMAPAPU) OR (M.NRSEQUMAPAPU = I.NRSEQMAPOIMP))
                                           AND M.DTINIPERIODO = P_DTINICIAL
                                           AND M.DTFIMPERIODO = P_DTFINAL) IMP
                                 WHERE NF.CDFILIAL   = IMP.CDFILIAL
                                   AND NF.NRLANCTONF = IMP.NRLANCTONF
                                   AND NF.CDEMPRESA  = E.CDEMPRESA
                                   AND IMP.CDEMPRESA = NF.CDEMPRESA
                                   AND IMP.CDEMPRESA = P_CDEMPRESA
                                   AND NF.CDINSCESTA = IE.CDINSCESTA
                                   AND IE.CDEMPRESA  = E.CDEMPRESA
                                 GROUP BY NF.CDEMPRESA, IE.NRINSJURIEST, E.NRINSJUREMPR, CDRECEITACONTR,
                                       DTVENCGUIA, CDVARIACAO, IDPERIODICREC, IDDEBSCPINC, IMP.NRSEQUMAPAPU
                                 ORDER BY IE.NRINSJURIEST))LOOP

      SELECT (RPAD('R10',3,' '))                                                                                       ||/*REGISTRO*/
             LPAD(REPLACE(REPLACE(REPLACE(REPLACE(C_NOTAS_IPI.NRINSJUREMPR,'.',''),'-',''),'/',''),' ',''),14,0)       ||/*CNPJ DA EMPRESA*/
             TO_CHAR(TO_DATE(P_DTINICIAL),'YYYYMM')                                                                    ||/*MES E ANO DO FATO GERADOR*/
             P_SITUACAO                                                                                                ||/*SITUACAO*/
             DECODE(P_SITUACAO,'0',RPAD('0',8,'0'),TO_CHAR(TO_DATE(P_DTFINAL),'YYYYMMDD'))                             ||/*DATA DO EVENTO*/
             V_IPI                                                                                                     ||/*IMPOSTO*/
             RPAD(NVL(C_NOTAS_IPI.CDRECEITACONTR||C_NOTAS_IPI.CDVARIACAO,'000000'),6,'0')                              ||/*CODIGO DA RECEITA/VARIACAO*/
             NVL(C_NOTAS_IPI.IDPERIODICREC,'M')                                                                        ||/*PERIODICIDADE*/
             TO_CHAR(TO_DATE(P_DTINICIAL),'YYYY')                                                                      ||/*ANO DO FATO GERADOR*/
             CASE WHEN NVL(C_NOTAS_IPI.IDPERIODICREC,'M') IN ('M','B','U','T','E') THEN TO_CHAR(TO_DATE(P_DTINICIAL),'MM') ELSE '00' END || /*MES/BIMESTRE/TRIMESTRE/QUADRIMESTRE/SEMESTRE DO PERIODO DE APURACAO*/
             CASE WHEN NVL(C_NOTAS_IPI.IDPERIODICREC,'M') IN ('D','S','X','Q')     THEN TO_CHAR(TO_DATE(P_DTINICIAL),'DD') ELSE '00' END || /*DIA/SEMANA/QUINZENA/DECENDIO DO PERIODO DE APURACAO*/
             SUBSTR(C_NOTAS_IPI.NRINSJURIEST,9,14)                                                                     ||/*APENAS IPI/CIDE*/
             RPAD('0',14,'0')                                                                                          ||/*APENAS RET*/
             '0'                                                                                                       ||/*RESERVADO*/
             LPAD(LTRIM(REPLACE(TO_CHAR(C_NOTAS_IPI.IMPOSTO,'000000000000.00'),'.')),'14','0')                         ||/*DEBITO*/
             P_BALNCRED                                                                                                ||/*BALANCO DE REDUCAO*/
             '0'                                                                                                       ||/*DEBITO EM QUOTAS*/
             '0'                                                                                                       ||/*RESERVADO*/
             NVL(C_NOTAS_IPI.IDDEBSCPINC,'0')                                                                          ||/*DEBITO DE SCP/INC*/
             RPAD('0',10,'0')  AS  REG_10_IPI
        INTO V_REG10_IPI
        FROM DUAL
        WHERE C_NOTAS_IPI.IMPOSTO > 0 ;

      V_ORDESTAB := NVL(V_ORDESTAB,0)+1;
      V_CONTREGAR10 := NVL(V_CONTREGAR10,0)+1;
      INSERT INTO ARQMAGNETICO
        (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
      VALUES
      ('110'||V_ORDESTAB||'0'||LPAD(RTRIM(V_CONTREGAR10), 5, '0'), V_REG10_IPI, P_NRSEQARQMAG);
      V_REG10_IPI := '';
   END LOOP;

   FOR C_REG_10_CSLL IN (SELECT (RPAD('R10',3,' '))                                                                           ||/*REGISTRO*/
                                LPAD(REPLACE(REPLACE(REPLACE(REPLACE(NRINSJUREMPR,'.',''),'-',''),'/',''),' ',''),14,0)       ||/*CNPJ DA EMPRESA*/
                                TO_CHAR(TO_DATE(P_DTINICIAL),'YYYYMM')                                                        ||/*MES E ANO DO FATO GERADOR*/
                                P_SITUACAO                                                                                    ||/*SITUACAO*/
                                DECODE(P_SITUACAO,'0',RPAD('0',8,'0'), TO_CHAR(TO_DATE(P_DTFINAL),'YYYYMMDD'))                ||/*DATA DO EVENTO*/
                                V_CSLL                                                                                        ||/*IMPOSTO*/
                                RPAD(NVL(CDRECEITACONTR||CDVARIACAO,'000000'),6,'0')                                          ||/*CODIGO DA RECEITA/VARIACAO*/
                                NVL(IDPERIODICREC,'M')                                                                        ||/*PERIODICIDADE*/
                                TO_CHAR(DTFIMPERIODO,'YYYY')                                                                  ||/*ANO DO FATO GERADOR*/
                                CASE WHEN NVL(IDPERIODICREC,'M') = 'T' THEN DECODE(TO_CHAR(DTFIMPERIODO,'MM'),'03','01',DECODE(TO_CHAR(DTFIMPERIODO,'MM'),'06','02',DECODE(TO_CHAR(DTFIMPERIODO,'MM'),'09','03','04')))
                                     WHEN NVL(IDPERIODICREC,'M') IN ('M','B','U','E') THEN TO_CHAR(DTFIMPERIODO,'MM')         ELSE '00' END || /*MES/BIMESTRE/TRIMESTRE/QUADRIMESTRE/SEMESTRE DO PERIODO DE APURACAO*/
                                CASE WHEN NVL(IDPERIODICREC,'M') IN ('D','S','X','Q') THEN TO_CHAR(TO_DATE(P_DTINICIAL),'DD') ELSE '00' END || /*DIA/SEMANA/QUINZENA/DECENDIO DO PERIODO DE APURACAO*/
                                LPAD('0',6,'0')                                                                               ||/*APENAS IPI/CIDE*/
                                LPAD('0',14,'0')                                                                              ||/*APENAS RET*/
                                '0'                                                                                           ||/*RESERVADO*/
                                LPAD(LTRIM(REPLACE(TO_CHAR(VRDEBITO,'000000000000.00'),'.')),'14','0')                        ||/*DEBITO*/
                                P_BALNCRED                                                                                    ||/*BALANCO DE REDUCAO*/
                                P_DBTOQTA                                                                                     ||/*DEBITO EM QUOTAS*/
                                '0'                                                                                           ||/*RESERVADO*/
                                NVL(IDDEBSCPINC,'0')                                                                          ||/*DEBITO DE SCP/INC*/
                                RPAD('0',10,'0')  AS  REG_10_CSLL
                          FROM (SELECT SUM(ROUND(VRTOTAIMPOS,2)) AS VRDEBITO, E.NRINSJUREMPR, MP.CDIMPOSTO,
                                       CDRECEITACONTR, DTVENCGUIA, CDVARIACAO, IDPERIODICREC, IDDEBSCPINC, MP.DTFIMPERIODO
                                  FROM EMPRESA E, MAPAAPURAC MP
                                 WHERE E.CDEMPRESA     = P_CDEMPRESA
                                   AND E.CDEMPRESA     = MP.CDEMPRESA
                                   AND MP.CDIMPOSTO    = '70'
                                   AND MP.DTFIMPERIODO = P_DTFINAL
                                   AND ((TO_CHAR(TO_DATE(P_DTFINAL),'MM') IN ('03','06','09','12') AND MP.IDTPMAPAAPURAC IN ('LPT','LRT')) OR
                                        (MP.IDTPMAPAAPURAC IN ('LPM','LRM')))
                                 GROUP BY E.NRINSJUREMPR, MP.CDIMPOSTO, CDRECEITACONTR, DTVENCGUIA,
                                       CDVARIACAO, IDPERIODICREC, IDDEBSCPINC, MP.DTFIMPERIODO)
                          WHERE VRDEBITO > 0)LOOP

      V_CONTREGAR10 := NVL(V_CONTREGAR10,0)+1;
      INSERT INTO ARQMAGNETICO
        (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
      VALUES
        ('112'||LPAD(RTRIM(V_CONTREGAR10), 7, '0'), C_REG_10_CSLL.REG_10_CSLL, P_NRSEQARQMAG);
   END LOOP;

   FOR C_REG_10_PIS IN (SELECT (RPAD('R10',3,' '))                                                                           ||/*REGISTRO*/
                               LPAD(REPLACE(REPLACE(REPLACE(REPLACE(NRINSJUREMPR,'.',''),'-',''),'/',''),' ',''),14,0)       ||/*CNPJ DA EMPRESA*/
                               TO_CHAR(TO_DATE(P_DTINICIAL),'YYYYMM')                                                        ||/*MES E ANO DO FATO GERADOR*/
                               P_SITUACAO                                                                                    ||/*SITUACAO*/
                               DECODE(P_SITUACAO,'0',RPAD('0',8,'0'), TO_CHAR(TO_DATE(P_DTFINAL),'YYYYMMDD'))                ||/*DATA DO EVENTO*/
                               V_PIS                                                                                         ||/*IMPOSTO*/
                               RPAD(NVL(CDRECEITACONTR||CDVARIACAO,'000000'),6,'0')                                          ||/*CODIGO DA RECEITA/VARIACAO*/
                               NVL(IDPERIODICREC,'M')                                                                        ||/*PERIODICIDADE*/
                               TO_CHAR(TO_DATE(P_DTINICIAL),'YYYY')                                                          ||/*ANO DO FATO GERADOR*/
                               CASE WHEN NVL(IDPERIODICREC,'M') IN ('M','B','U','T','E') THEN TO_CHAR(TO_DATE(P_DTINICIAL),'MM') ELSE '00' END || /*MES/BIMESTRE/TRIMESTRE/QUADRIMESTRE/SEMESTRE DO PERIODO DE APURACAO*/
                               CASE WHEN NVL(IDPERIODICREC,'M') IN ('D','S','X','Q')     THEN TO_CHAR(TO_DATE(P_DTINICIAL),'DD') ELSE '00' END || /*DIA/SEMANA/QUINZENA/DECENDIO DO PERIODO DE APURACAO*/
                               LPAD('0',6,'0')                                                                               ||/*APENAS IPI/CIDE*/
                               LPAD('0',14,'0')                                                                              ||/*APENAS RET*/
                               '0'                                                                                           ||/*RESERVADO*/
                               LPAD(LTRIM(REPLACE(TO_CHAR(VRDEBITO,'000000000000.00'),'.')),'14','0')                        ||/*DEBITO*/
                               P_BALNCRED                                                                                    ||/*BALANCO DE REDUCAO*/
                               '0'                                                                                           ||/*DEBITO EM QUOTAS*/
                               '0'                                                                                           ||/*RESERVADO*/
                               NVL(IDDEBSCPINC,'0')                                                                          ||/*DEBITO DE SCP/INC*/
                               RPAD('0',10,'0')  AS  REG_10_PIS, SEQUENCIAL
                         FROM (SELECT SUM(ROUND(NVL(G.VRRECEITAGUIA,MP.VRTOTAIMPOS),2)) AS VRDEBITO, E.NRINSJUREMPR, MP.CDIMPOSTO,
                                      NVL(G.CDRECEITAGUIA,NVL(MP.CDRECENCUMU,MP.CDRECECUMU)) AS CDRECEITACONTR,
                                      NVL(G.DTVENCGUIACOMPL,MP.DTVENCGUIA) AS DTVENCGUIA,
                                      MP.CDVARIACAO, MP.IDPERIODICREC, MP.IDDEBSCPINC,
                                      NVL(SUBSTR(G.NRSEQGUIACOMPL,9,2),'00') AS SEQUENCIAL
                                 FROM EMPRESA E, MAPAAPURAC MP, GUIACOMPAPUCONTR G
                                WHERE E.CDEMPRESA     = P_CDEMPRESA
                                  AND E.CDEMPRESA     = MP.CDEMPRESA
                                  AND MP.CDIMPOSTO    = '50'
                                  AND MP.DTINIPERIODO = P_DTINICIAL
                                  AND MP.DTFIMPERIODO = P_DTFINAL
                                  and G.NRSEQUMAPAPU(+) = MP.NRSEQUMAPAPU
                                GROUP BY E.NRINSJUREMPR, MP.CDIMPOSTO, NVL(G.CDRECEITAGUIA,NVL(MP.CDRECENCUMU,MP.CDRECECUMU)),
                                      NVL(G.DTVENCGUIACOMPL,MP.DTVENCGUIA), MP.CDVARIACAO, MP.IDPERIODICREC, MP.IDDEBSCPINC,
                                      NVL(SUBSTR(G.NRSEQGUIACOMPL,9,2),'00'))
                         WHERE VRDEBITO > 0)LOOP

      V_CONTREGAR10 := NVL(V_CONTREGAR10,0)+1;
      INSERT INTO ARQMAGNETICO
        (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
      VALUES
        ('114'||C_REG_10_PIS.SEQUENCIAL||'0'||LPAD(RTRIM(V_CONTREGAR10),4,'0'), C_REG_10_PIS.REG_10_PIS, P_NRSEQARQMAG);
   END LOOP ;

   FOR C_REG_10_COFINS IN (SELECT (RPAD('R10',3,' '))                                                                           ||/*REGISTRO*/
                                  LPAD(REPLACE(REPLACE(REPLACE(REPLACE(NRINSJUREMPR,'.',''),'-',''),'/',''),' ',''),14,0)       ||/*CNPJ DA EMPRESA*/
                                  TO_CHAR(TO_DATE(P_DTINICIAL),'YYYYMM')                                                        ||/*MES E ANO DO FATO GERADOR*/
                                  P_SITUACAO                                                                                    ||/*SITUACAO*/
                                  DECODE(P_SITUACAO,'0',RPAD('0',8,'0'), TO_CHAR(TO_DATE(P_DTFINAL),'YYYYMMDD'))                ||/*DATA DO EVENTO*/
                                  V_COFINS                                                                                      ||/*IMPOSTO*/
                                  RPAD(NVL(CDRECEITACONTR||CDVARIACAO,'000000'),6,'0')                                          ||/*CODIGO DA RECEITA/VARIACAO*/
                                  NVL(IDPERIODICREC,'M')                                                                        ||/*PERIODICIDADE*/
                                  TO_CHAR(TO_DATE(P_DTINICIAL),'YYYY')                                                          ||/*ANO DO FATO GERADOR*/
                                  CASE WHEN NVL(IDPERIODICREC,'M') IN ('M','B','U','T','E') THEN TO_CHAR(TO_DATE(P_DTINICIAL),'MM') ELSE '00' END || /*MES/BIMESTRE/TRIMESTRE/QUADRIMESTRE/SEMESTRE DO PERIODO DE APURACAO*/
                                  CASE WHEN NVL(IDPERIODICREC,'M') IN ('D','S','X','Q')     THEN TO_CHAR(TO_DATE(P_DTINICIAL),'DD') ELSE '00' END || /*DIA/SEMANA/QUINZENA/DECENDIO DO PERIODO DE APURACAO*/
                                  LPAD('0',6,'0')                                                                               ||/*APENAS IPI/CIDE*/
                                  LPAD('0',14,'0')                                                                              ||/*APENAS RET*/
                                  '0'                                                                                           ||/*RESERVADO*/
                                  LPAD(LTRIM(REPLACE(TO_CHAR(VRDEBITO,'000000000000.00'),'.')),'14','0')                        ||/*DEBITO*/
                                  P_BALNCRED                                                                                    ||/*BALANCO DE REDUCAO*/
                                  '0'                                                                                           ||/*DEBITO EM QUOTAS*/
                                  '0'                                                                                           ||/*RESERVADO*/
                                  NVL(IDDEBSCPINC,'0')                                                                          ||/*DEBITO DE SCP/INC*/
                                  RPAD('0',10,'0')  AS  REG_10_COFINS, SEQUENCIAL
                            FROM (SELECT SUM(ROUND(NVL(G.VRRECEITAGUIA,MP.VRTOTAIMPOS),2)) AS VRDEBITO, E.NRINSJUREMPR, MP.CDIMPOSTO,
                                         NVL(G.CDRECEITAGUIA,NVL(MP.CDRECENCUMU,MP.CDRECECUMU)) AS CDRECEITACONTR,
                                         NVL(G.DTVENCGUIACOMPL,MP.DTVENCGUIA) AS DTVENCGUIA,
                                         MP.CDVARIACAO, MP.IDPERIODICREC, MP.IDDEBSCPINC,
                                         NVL(SUBSTR(G.NRSEQGUIACOMPL,9,2),'00') AS SEQUENCIAL
                                    FROM EMPRESA E, MAPAAPURAC MP, GUIACOMPAPUCONTR G
                                   WHERE E.CDEMPRESA       = P_CDEMPRESA
                                     AND E.CDEMPRESA       = MP.CDEMPRESA
                                     AND MP.CDIMPOSTO      = '60'
                                     AND MP.DTINIPERIODO   = P_DTINICIAL
                                     AND MP.DTFIMPERIODO   = P_DTFINAL
                                     AND G.NRSEQUMAPAPU(+) = MP.NRSEQUMAPAPU
                                   GROUP BY E.NRINSJUREMPR, MP.CDIMPOSTO, NVL(G.CDRECEITAGUIA,NVL(MP.CDRECENCUMU,MP.CDRECECUMU)),
                                         NVL(G.DTVENCGUIACOMPL,MP.DTVENCGUIA), MP.CDVARIACAO, MP.IDPERIODICREC, MP.IDDEBSCPINC,
                                         NVL(SUBSTR(G.NRSEQGUIACOMPL,9,2),'00'))
                            WHERE VRDEBITO > 0)LOOP
      V_CONTREGAR10 := NVL(V_CONTREGAR10,0)+1;
      INSERT INTO ARQMAGNETICO
        (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
      VALUES
        ('116'||C_REG_10_COFINS.SEQUENCIAL||'0'||LPAD(RTRIM(V_CONTREGAR10),4,'0'), C_REG_10_COFINS.REG_10_COFINS, P_NRSEQARQMAG);
   END LOOP;
   RETURN V_CONTREGAR10;
END;
/