CREATE OR REPLACE FUNCTION ARQUIVO_DMA_MESTRE(
   P_CDIMPOSTO    IN IMPOSTO.CDIMPOSTO%TYPE,
   P_CDEMPRESA    IN EMPRESA.CDEMPRESA%TYPE,
   P_CDINSCESTA   IN EMPRESA.CDINSCESTA%TYPE,
   P_DTINICIAL    IN NOTAFISCAL.DTENTRSAID%TYPE,
   P_DTFINAL      IN NOTAFISCAL.DTENTRSAID%TYPE,
   P_RETIFIC      VARCHAR2,
   P_BAIXAEMP     VARCHAR2,
   P_INSCUNICA    VARCHAR2,
   P_CODINSP      VARCHAR2,
   P_NRSEQARQMAG  IN ARQMAGNETICO.NRSEQARQMAG%TYPE) RETURN NUMBER
   
AS
   V_CONTADOR   NUMBER;
   V_NMRES      VARCHAR(35);
   V_NRCPF      NUMBER;
   V_CDINSC     NUMBER;
   V_NMRAZ      VARCHAR2(50);
   V_CDCNAE     NUMBER;
   V_REGMESTRE  VARCHAR2(4000);
   V_CONTAREG   NUMBER;
   V_REG99      VARCHAR2(7);

BEGIN 
   V_CONTADOR := 0;
   V_CONTAREG := 0;

   BEGIN
      SELECT MAX(C.NMCONTADOR), MAX(C.NRCPFRESPONS)
        INTO V_NMRES, V_NRCPF
        FROM INSCRESTAD I, CONTADOR C
       WHERE I.CDEMPRESA  = P_CDEMPRESA
         AND I.CDINSCESTA = P_CDINSCESTA
         AND C.CDCONTADOR2 = I.CDCONTADOR2;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_NRCPF := NULL;
         V_NMRES := NULL;
   END;

   V_REGMESTRE := '00'
                  ||RPAD('DMA', 5, ' ') 
                  ||'O' 
                  ||LPAD(LTRIM(REPLACE(TO_CHAR(V_NRCPF, '99999999999'),'-', '')), 11, '0' ) 
                  ||RPAD(SUBSTR(V_NMRES, 1, 35), 35, ' ') 
                  ||'2010'; 
   V_CONTADOR := NVL(V_CONTADOR,0)+1; 
   INSERT INTO ARQMAGNETICO 
      (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
   VALUES 
      (V_CONTADOR, V_REGMESTRE, P_NRSEQARQMAG); 
    
   FOR C_REGIDEMP IN (SELECT('01' 
                             ||TO_CHAR(P_DTINICIAL, 'yyyymm') 
                             ||LPAD(P_CDINSCESTA, 9, '0') 
                             ||SUBSTR(P_RETIFIC, 1,1) 
                             ||SUBSTR(P_BAIXAEMP, 1,1) 
                             ||SUBSTR(P_INSCUNICA, 1,1) 
                             ||'N'
                             ||'3112'||(TO_CHAR(P_DTFINAL, 'yyyy')-1)
                             ||RPAD(NVL(SUBSTR(NMRAZSOCEMPR, 1,50), ' '), 50, ' ')
                             ||LPAD(NVL(SUBSTR(CDMUNIEXPO, 1,5), ' '), 5, ' ')
                             ||LPAD(NVL(SUBSTR(CDCNAE, 1,7), ' '), 7, ' ')
                             ||LPAD(P_CodInsp, 2, '0')
                             ||'N') AS ARQ_IDEMPRESA
                        FROM(SELECT E.NMRAZSOCEMPR,
                                    E.CDCNAE, MU.CDMUNIEXPO
                               FROM EMPRESA E, MUNICIPIO MU, INSCRESTAD IE
                              WHERE IE.CDEMPRESA   = E.CDEMPRESA
                                AND IE.CDINSCESTA  = P_CDINSCESTA 
                                AND MU.CDPAIS      = IE.CDPAIS 
                                AND MU.SGESTADO    = IE.SGESTADO 
                                AND MU.CDMUNICIPIO = IE.CDMUNICIPIO)) LOOP 
   V_CONTADOR := NVL(V_CONTADOR, 0)+1; 
   INSERT INTO ARQMAGNETICO 
      (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG) 
   VALUES 
      (V_CONTADOR, C_REGIDEMP.ARQ_IDEMPRESA, P_NRSEQARQMAG); 
   V_CONTAREG := NVL(V_CONTAREG,0)+1; 
   END LOOP; 
   V_REG99 := '99' 
              ||LPAD(V_CONTAREG, 5, '0'); 
   INSERT INTO ARQMAGNETICO 
      (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG) 
   VALUES 
      (V_CONTADOR, V_REG99, P_NRSEQARQMAG); 
   RETURN(V_CONTADOR); 
END;
/