CREATE OR REPLACE PROCEDURE PRE_VALIDACAO_ECD(
   P_CDEMPRESA     IN  EMPRESA.CDEMPRESA%TYPE,
   P_ANO           IN  PREVALIDECD.DTPERIODO%TYPE)
IS
   V_SEQERRO          NUMBER;
   V_STSEQERRO        VARCHAR2(05);
   V_CDEMPRESA        VARCHAR2(02);
   V_COUNT            NUMBER;
BEGIN
   /*Apaga algum erro que possa ter restado de outra validação*/
   DELETE FROM PREVALIDECD
    WHERE CDEMPRESA   = P_CDEMPRESA
      AND DTPERIODO =   P_ANO;

   V_SEQERRO      := 0;

   /*Busca empresa para consulta das demais Validações*/
   BEGIN
      SELECT E.CDEMPRESA
        INTO V_CDEMPRESA
        FROM EMPRESA E
       WHERE CDEMPRESA = P_CDEMPRESA;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_CDEMPRESA := NULL;
   END;

    /* VALIDA REPRESENTANTE LEGAL */
    BEGIN
          SELECT NVL(COUNT(*), 1)
          INTO V_COUNT
          FROM REPRESEMPRESA
         WHERE CDEMPRESA = P_CDEMPRESA
           AND IDATIVO = 'S'
           HAVING COUNT(*) = 0;
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_COUNT := NULL;
    END;
      IF V_COUNT = 0 THEN
		 V_SEQERRO   := V_SEQERRO + 1;
         V_STSEQERRO := LPAD(V_SEQERRO,5,'0');
         INSERT INTO PREVALIDECD
            (CDEMPRESA, DTPERIODO, NRSEQERRO, DSERRONFPRE, DSAJUDA)
         VALUES
            (P_CDEMPRESA, P_ANO, V_STSEQERRO, 'É necessário informar um Representante Jurídico como utilizado no cadastro de Empresa.',
            'Verifique a Tela de empresa e vincule um Representante Legal');
      END IF;

   /* VALIDA CONTADOR DA EMPRESA */
   BEGIN
      SELECT NVL(COUNT(*), 1)
      INTO V_COUNT
          FROM EMPRESA E, CONTADOR C
         WHERE E.CDEMPRESA = P_CDEMPRESA
           AND E.CDCONTADOR2 = C.CDCONTADOR2
        HAVING COUNT(*) = 0;
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_COUNT := NULL;
    END;
     IF V_COUNT = 0 THEN
	    V_SEQERRO   := V_SEQERRO + 1;
        V_STSEQERRO := LPAD(V_SEQERRO,5,'0');
         INSERT INTO PREVALIDECD
            (CDEMPRESA, DTPERIODO, NRSEQERRO, DSERRONFPRE, DSAJUDA)
         VALUES
            (P_CDEMPRESA, P_ANO, V_STSEQERRO, 'É necessário informar um Contador no cadastro de Empresa',
            'Verifique a Tela de empresa e vincule um Contador');
      END IF;
   /* VALIDA ENCERRAMENTO DE EXERCICIO */
   BEGIN
     SELECT COUNT(*)
     INTO V_COUNT
          FROM LANCCONT
         WHERE IDLANCINTE IN ('T', 'F')
           and CDEMPRESA = P_CDEMPRESA
           AND DTLANCCONT = P_ANO
        HAVING (COUNT(*) = 0) ;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_COUNT := NULL;
    END;
      IF V_COUNT = 0 THEN
	     V_SEQERRO   := V_SEQERRO + 1;
         V_STSEQERRO := LPAD(V_SEQERRO,5,'0');
         INSERT INTO PREVALIDECD
            (CDEMPRESA, DTPERIODO, NRSEQERRO, DSERRONFPRE, DSAJUDA)
         VALUES
            (P_CDEMPRESA, P_ANO, V_STSEQERRO, 'O encerramento de exercício não foi realizado. Favor realizá-lo antes da geração do arquivo',
            'Realizar o Encerramento através da tela encerramento de exercício');
      END IF;	  

   /* VALIDA BALANCO PATRIMONIAL PARAMETRIZADO */
   BEGIN
      SELECT NVL(COUNT(*), 1)
      INTO V_COUNT
          FROM TIPODEMO
         WHERE IDREFESPED = 'B'
        HAVING COUNT(*) = 0;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_COUNT := NULL;
    END;
     IF V_COUNT = 0 THEN
	    V_SEQERRO   := V_SEQERRO + 1;
        V_STSEQERRO := LPAD(V_SEQERRO,5,'0');
         INSERT INTO PREVALIDECD
            (CDEMPRESA, DTPERIODO, NRSEQERRO, DSERRONFPRE, DSAJUDA)
         VALUES
            (P_CDEMPRESA, P_ANO, V_STSEQERRO, 'É necessário cadastrar o Balanço Patrimonial para a correta geração do arquivo.',
            'Realize a parametrização do Balanço na rotina de demonstrativos contábeis');
     END IF;  
	  
	  
   /* VALIDA DEMONSTRATIVO DE RESULTADO PARAMETRIZADO */
    BEGIN
         SELECT NVL(COUNT(*), 1)
         INTO V_COUNT
          FROM TIPODEMO
         WHERE IDREFESPED = 'D'
        HAVING COUNT(*) = 0;
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_COUNT := NULL;
    END;
      IF V_COUNT = 0 THEN
	     V_SEQERRO   := V_SEQERRO + 1;
         V_STSEQERRO := LPAD(V_SEQERRO,5,'0');
         INSERT INTO PREVALIDECD
            (CDEMPRESA, DTPERIODO, NRSEQERRO, DSERRONFPRE, DSAJUDA)
         VALUES
            (P_CDEMPRESA, P_ANO, V_STSEQERRO, 'É necessário cadastrar o Demonstrativo de Resultado para a correta geração do arquivo.',
            'Realize a parametrização da DRE na rotina de demonstrativos contábeis');
      END IF;
	 
   /* VALIDA SE O SISTEMA POSSUI SOMENTE UM DLPA OU DMPL PARAMETRIZADO */
   BEGIN
      SELECT NVL(COUNT(*), 1)
      INTO V_COUNT
          FROM TIPODEMO
         WHERE IDREFESPED IN ('L', 'M')
        HAVING COUNT(*) <> 1;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_COUNT := NULL;
    END;
    IF  V_COUNT <> 1 THEN
	    V_SEQERRO   := V_SEQERRO + 1;
        V_STSEQERRO := LPAD(V_SEQERRO,5,'0');
         INSERT INTO PREVALIDECD
            (CDEMPRESA, DTPERIODO, NRSEQERRO, DSERRONFPRE, DSAJUDA)
         VALUES
            (P_CDEMPRESA, P_ANO, V_STSEQERRO, 'É necessário deixar parametrizado somente uma DLPA ou uma DMPL para geração do arquivo. Favor parametrizar somente uma opção',
            'Realize a parametrização da DLPA ou DMPL na rotina de demonstrativos contábeis');
    END IF;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('PRE_VALIDACAO_ECD','6.49.000'); END;
/