CREATE OR REPLACE PROCEDURE SPED_ECF_MESTRE(
   P_CDEMPRESA IN EMPRESA.CDEMPRESA%TYPE,
   P_ANO IN VARCHAR,
   P_RETIFICADORA IN VARCHAR,
   P_ECDTRANS IN VARCHAR,
   P_NRSEQARQMAG IN VARCHAR,
   P_NRSEQPROJETO IN INTEGER)
IS
   V_NRORDREGARQ NUMBER;
   V_COUNT NUMBER;
   V_TEMP_ESC VARCHAR2(1);
   V_DATAINICIAL DATE;
BEGIN
   BEGIN
      SELECT DECODE(R.INDSITINIPER,'0','',TO_DATE(TO_CHAR(R.DTSITESP, 'DD/MM/YYYY')))
        INTO V_DATAINICIAL
        FROM REG0000_ECF R, EMPRESA E
       WHERE R.CDEMPRESA = E.CDEMPRESA
         AND R.CDEMPRESA = P_CDEMPRESA;
   EXCEPTION
        WHEN NO_DATA_FOUND THEN
            V_DATAINICIAL := NULL;
   END;
   SPED_ECF_ABERTURA(P_CDEMPRESA, P_ANO, V_DATAINICIAL, P_RETIFICADORA, P_ECDTRANS, P_NRSEQARQMAG, V_NRORDREGARQ);

   V_COUNT := 0;
   /* VERIFICA SE A FORMA DE APURACAO DEVE GERAR OS REGISTROS REFERENTES AO LUCRO REAL */
   BEGIN
      SELECT COUNT(*)
        INTO V_COUNT
        FROM REG0010_ECF
       WHERE CDEMPRESA = P_CDEMPRESA
         AND TO_NUMBER(FORMATRIB) IN (1, 2, 3, 4);
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_COUNT := 0;
   END;

   /* VERIFICA O TIPO DE ESCRITURACAO LIVRO CAIXA OU CONTABIL */
   V_TEMP_ESC := '';
   BEGIN
      SELECT 'L'
        INTO V_TEMP_ESC
        FROM REG0010_ECF
       WHERE CDEMPRESA = P_CDEMPRESA
         AND FORMATRIB IN ('3', '4', '5', '7')
         AND P_ECDTRANS = 'N';
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_TEMP_ESC := '';
   END;
   IF V_TEMP_ESC IS NULL THEN
      V_TEMP_ESC := 'C';
   END IF;
    /* CONTAS CONTABEIS REFERENCIAIS */
   IF V_TEMP_ESC = 'C' THEN
      SPED_ECF_BLOCOJ_CONTAS(P_CDEMPRESA, P_ANO, V_DATAINICIAL, P_NRSEQARQMAG, V_NRORDREGARQ, V_NRORDREGARQ);
   END IF;
   IF V_TEMP_ESC = 'L' THEN
   /*GERA_Q100 LIVRO CAIXA*/
     SPED_ECF_BLOCOQ_100(P_CDEMPRESA, P_ANO, V_DATAINICIAL,  P_NRSEQARQMAG,P_NRSEQPROJETO, V_NRORDREGARQ, V_NRORDREGARQ);
   END IF;

   IF V_TEMP_ESC = 'C' AND P_ECDTRANS = 'N' THEN
      SPED_ECF_BLOCOK_SALDOS(P_CDEMPRESA, P_ANO, V_DATAINICIAL, P_NRSEQARQMAG, V_NRORDREGARQ, V_NRORDREGARQ);
   END IF;

   IF V_COUNT <> 0 THEN
      SPED_ECF_BLOCOL_DEMONSTRATIVO(P_CDEMPRESA, P_ANO, V_DATAINICIAL, P_NRSEQARQMAG, P_NRSEQPROJETO,V_NRORDREGARQ, V_NRORDREGARQ);
      SPED_ECF_BLOCOM_LALUR(P_CDEMPRESA, P_ANO, V_DATAINICIAL, P_NRSEQARQMAG,P_NRSEQPROJETO, V_NRORDREGARQ, V_NRORDREGARQ);
   END IF;

   V_COUNT := 0;
   BEGIN
      SELECT COUNT(*)
        INTO V_COUNT
        FROM REG0010_ECF
       WHERE CDEMPRESA = P_CDEMPRESA
         AND TO_NUMBER(FORMATRIB) IN (3, 4, 5, 7);
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_COUNT := 0;
   END;
   IF V_COUNT <> 0 THEN
      SPED_ECF_BLOCOP_LUCRO_PRES(P_CDEMPRESA, P_ANO, V_DATAINICIAL, P_NRSEQARQMAG, V_NRORDREGARQ, V_NRORDREGARQ);
   END IF;

   SPED_ECF_BLOCOY_INF_GERAIS(P_CDEMPRESA, P_ANO, V_DATAINICIAL, P_ECDTRANS, P_NRSEQARQMAG, V_NRORDREGARQ, V_NRORDREGARQ);
   SPED_ECF_BLOCO9_ENCERRAMENTO(P_CDEMPRESA, P_NRSEQARQMAG, V_NRORDREGARQ, V_NRORDREGARQ);
END;
/
