CREATE OR ALTER function FN_ESTOQUE_SALDO_DIARIO_DISP (
    ESTABELECIMENTO_ID integer,
    LOCALIZACAO_ID integer,
    PRODUTO_ID integer,
    TAMANHO integer,
    DATA date)
returns numeric(18,5)
AS
DECLARE VARIABLE RET NUMERIC(18,5);
BEGIN

    SELECT FIRST 1
            (A.SALDO -
            COALESCE((SELECT SUM(EA.QUANTIDADE)
                        FROM TBESTOQUE_SALDO_ALOCACAO EA
                       WHERE EA.ESTABELECIMENTO_ID = A.ESTABELECIMENTO_CODIGO
                         AND EA.LOCALIZACAO_ID     = A.LOCALIZACAO_CODIGO
                         AND EA.PRODUTO_ID         = A.PRODUTO_CODIGO
                         AND EA.TAMANHO            = :TAMANHO),0)) SALDO
    FROM
        TBESTOQUE_SALDO_DIARIO A
    WHERE
        A.ESTABELECIMENTO_CODIGO    = :ESTABELECIMENTO_ID
    AND A.LOCALIZACAO_CODIGO        = :LOCALIZACAO_ID
    AND A.PRODUTO_CODIGO            = :PRODUTO_ID
    AND A.DATA                      <= :DATA
    ORDER BY A.DATA DESC
    INTO RET;

    RET = COALESCE(RET,0);


  RETURN RET;
END