CREATE OR REPLACE FUNCTION VALIDA_NATUREC_SPED(
   P_CDSITUTRIBITNFE VARCHAR2,
   P_CDNATUREC       IN RELACPRODITGEN.CDNATUREC%TYPE,
   P_DTEMISSAO       IN NOTAFISCAL.DTEMISSAO%TYPE,
   P_VRALIQIT        IN ITEMPROIMPOS.VRALIQITEM%TYPE) RETURN VARCHAR2
AS
   V_NATUREZA    VARCHAR2(500);
BEGIN
   /*Caso seja necessário alterar as descrições do retorno verificar os pontos onde a função
     é utilizada, pois a comparação é feita com o texto do retorno*/
   SELECT MAX(CDNATUREC)
     INTO V_NATUREZA
     FROM CODNATURECSPEDCONTR CR, CODTABELASPED CD
    WHERE CD.CDSITUTRIBITNFE = P_CDSITUTRIBITNFE
      AND CR.CDNATUREC       = P_CDNATUREC
      AND CR.CDTABELASPED    = CD.CDTABELASPED 
      AND P_DTEMISSAO BETWEEN DTINIVALID AND NVL(DTFINVALID,P_DTEMISSAO);

   IF ((V_NATUREZA IS NULL) AND (P_CDSITUTRIBITNFE IN ('04','05','06','07','08','09'))) THEN
      IF P_CDNATUREC IS NULL THEN
         V_NATUREZA := 'Natureza da Receita não cadastrada';
      ELSE
         V_NATUREZA := 'Natureza da Receita inválida para o CST';
      END IF;
   ELSIF (((V_NATUREZA IS NULL) AND(P_CDSITUTRIBITNFE NOT IN ('04','05','06','07','08','09'))) OR (P_CDNATUREC IS NOT NULL)) THEN
      V_NATUREZA := 'CST não exige cadastro de Natureza da Receita';
   ELSE
      V_NATUREZA := 'Válida';
   END IF;
   RETURN V_NATUREZA;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('VALIDA_NATUREC_SPED','5.45.000'); END;
/