CREATE OR REPLACE PROCEDURE VERIFICA_SALDO_LOTE_PROD(  P_CDFILIAL IN FILIAL.CDFILIAL%TYPE,
                                                       P_CDPRODUTO IN PRODUTO.CDPRODUTO%TYPE,
                                                       P_DTMRP IN DATE,
                                                       P_DTPRODUCAO IN DATE,
                                                       P_QTAFABRICDIA IN FLOAT,
                                                       P_GERACALE OUT VARCHAR2)

IS
   V_SALDO FLOAT;

BEGIN

   V_SALDO := 0;
   BEGIN
      SELECT NVL(SUM(P.QTESTOQUEPCP),0)
        INTO V_SALDO
        FROM PROGPRODU P
       WHERE P.CDFILIAL = P_CDFILIAL
         AND P.CDPRODUTO = P_CDPRODUTO
         AND P.DTPROGPRODU = P_DTMRP
         AND TRUNC(DTENTPROD) = (SELECT (MAX(TRUNC(DTENTPROD))-1)
                                   FROM PROGPRODU
                                  WHERE CDFILIAL = P_CDFILIAL
                                    AND CDPRODUTO = P_CDPRODUTO
                                    AND P.DTPROGPRODU = P_DTMRP);
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_SALDO := 0;
         P_GERACALE := 'S';
   END;

   IF (V_SALDO >= P_QTAFABRICDIA) THEN
      P_GERACALE := 'N';
   ELSE
      P_GERACALE := 'S';
   END IF;
END;
/