CREATE OR ALTER PROCEDURE SPC_PEDIDO_PRECO_CONSULTA_01 (
    CLIENTE_ID INTEGER,
    ESTABELECIMENTO_ID INTEGER,
    PRODUTO_ID INTEGER,
    MODELO_ID INTEGER,
    GRADE_ID INTEGER,
    PRECO_NF_CF_ID INTEGER = 0,
    PERCENTUAL_BASE INTEGER = 0,
    DECIMAIS_BASE INTEGER = 2,
    TABELA_VALIDA INTEGER = 0,
    EMPRESA_VINCULO INTEGER = 0,
    DATA_PEDIDO DATE = 'NOW',
    ORIGEM_PRECO INTEGER = 0)
RETURNS (
    TIPO INTEGER,
    TAMANHO INTEGER,
    PRECO_VENDA NUMERIC(15,4),
    PR_TM NUMERIC(15,4),
    VALIDO INTEGER,
    SUBTIPO INTEGER)
AS
BEGIN

    FOR
         SELECT
            1 TIPO,
            S.TAMANHO,
            A.PRECO_VENDA AS PRECO_VENDA,
            CASE S.TAMANHO
                WHEN 01 THEN A.PR_NF_01
                WHEN 02 THEN A.PR_NF_02
                WHEN 03 THEN A.PR_NF_03
                WHEN 04 THEN A.PR_NF_04
                WHEN 05 THEN A.PR_NF_05
                WHEN 06 THEN A.PR_NF_06
                WHEN 07 THEN A.PR_NF_07
                WHEN 08 THEN A.PR_NF_08
                WHEN 09 THEN A.PR_NF_09
                WHEN 10 THEN A.PR_NF_10
                WHEN 11 THEN A.PR_NF_11
                WHEN 12 THEN A.PR_NF_12
                WHEN 13 THEN A.PR_NF_13
                WHEN 14 THEN A.PR_NF_14
                WHEN 15 THEN A.PR_NF_15
                WHEN 16 THEN A.PR_NF_16
                WHEN 17 THEN A.PR_NF_17
                WHEN 18 THEN A.PR_NF_18
                WHEN 19 THEN A.PR_NF_19
                WHEN 20 THEN A.PR_NF_20

            ELSE 0 END PR_TM,
            :TABELA_VALIDA AS VALIDO,
            1 AS SUBTIPO

        FROM
            TBGRADE_SEQ S
            LEFT JOIN TBCLIENTE_PRODUTO_PRECO A ON (A.CLIENTE_CODIGO = :CLIENTE_ID AND A.PRODUTO_CODIGO = :PRODUTO_ID AND A.TABELA_ID = :PRECO_NF_CF_ID)
        
        WHERE
            S.TAMANHO > 0
        
    INTO
        :TIPO,
        :TAMANHO,
        :PRECO_VENDA,
        :PR_TM,
        :VALIDO,
        :SUBTIPO
    DO
    SUSPEND;

    FOR
        SELECT
            1 TIPO,
            S.TAMANHO,
            FN_NUMBER_CAST((C.PRECO_VENDA*:PERCENTUAL_BASE),:DECIMAIS_BASE) AS PRECO_VENDA,
            CASE S.TAMANHO
                WHEN 01 THEN FN_NUMBER_CAST((C.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 02 THEN FN_NUMBER_CAST((C.PR_NF_02*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 03 THEN FN_NUMBER_CAST((C.PR_NF_03*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 04 THEN FN_NUMBER_CAST((C.PR_NF_04*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 05 THEN FN_NUMBER_CAST((C.PR_NF_05*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 06 THEN FN_NUMBER_CAST((C.PR_NF_06*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 07 THEN FN_NUMBER_CAST((C.PR_NF_07*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 08 THEN FN_NUMBER_CAST((C.PR_NF_08*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 09 THEN FN_NUMBER_CAST((C.PR_NF_09*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 10 THEN FN_NUMBER_CAST((C.PR_NF_10*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 11 THEN FN_NUMBER_CAST((C.PR_NF_11*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 12 THEN FN_NUMBER_CAST((C.PR_NF_12*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 13 THEN FN_NUMBER_CAST((C.PR_NF_13*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 14 THEN FN_NUMBER_CAST((C.PR_NF_14*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 15 THEN FN_NUMBER_CAST((C.PR_NF_15*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 16 THEN FN_NUMBER_CAST((C.PR_NF_16*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 17 THEN FN_NUMBER_CAST((C.PR_NF_17*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 18 THEN FN_NUMBER_CAST((C.PR_NF_18*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 19 THEN FN_NUMBER_CAST((C.PR_NF_19*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 20 THEN FN_NUMBER_CAST((C.PR_NF_20*:PERCENTUAL_BASE),:DECIMAIS_BASE)

            ELSE 0 END PR_TM,

            :TABELA_VALIDA AS VALIDO,
            2 AS SUBTIPO

        FROM
            TBGRADE_SEQ S
            LEFT JOIN TBCLIENTE_PRODUTO_PRECO C ON (C.CLIENTE_CODIGO = :CLIENTE_ID AND C.PRODUTO_CODIGO = :PRODUTO_ID AND C.TABELA_ID = (SELECT FIRST 1 C.TABELA_PRECO_ID_BASE FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID))
        
        WHERE
            S.TAMANHO > 0
        
     INTO
        :TIPO,
        :TAMANHO,
        :PRECO_VENDA,
        :PR_TM,
        :VALIDO,
        :SUBTIPO
    DO
    SUSPEND;

    IF( :ORIGEM_PRECO = 0)THEN
    BEGIN
        FOR
    
            SELECT
                1 TIPO,
                S.TAMANHO,
                A.PRECO_VENDA AS PRECO_VENDA,
                CASE S.TAMANHO
                    WHEN 01 THEN A.PR_NF_01
                    WHEN 02 THEN A.PR_NF_02
                    WHEN 03 THEN A.PR_NF_03
                    WHEN 04 THEN A.PR_NF_04
                    WHEN 05 THEN A.PR_NF_05
                    WHEN 06 THEN A.PR_NF_06
                    WHEN 07 THEN A.PR_NF_07
                    WHEN 08 THEN A.PR_NF_08
                    WHEN 09 THEN A.PR_NF_09
                    WHEN 10 THEN A.PR_NF_10
                    WHEN 11 THEN A.PR_NF_11
                    WHEN 12 THEN A.PR_NF_12
                    WHEN 13 THEN A.PR_NF_13
                    WHEN 14 THEN A.PR_NF_14
                    WHEN 15 THEN A.PR_NF_15
                    WHEN 16 THEN A.PR_NF_16
                    WHEN 17 THEN A.PR_NF_17
                    WHEN 18 THEN A.PR_NF_18
                    WHEN 19 THEN A.PR_NF_19
                    WHEN 20 THEN A.PR_NF_20
                ELSE 0 END PR_TM,
                :TABELA_VALIDA AS VALIDO,
                3 AS SUBTIPO
    
            FROM
                TBGRADE_SEQ S,(SELECT FIRST 1 B.*,
                 COALESCE(C.PERCENTUAL_BASE,0.00) AS PERCENTUAL_BASE,
                 COALESCE(C.DECIMAIS_BASE,2) AS DECIMAIS_BASE
                 FROM TBCLIENTE_PRODUTO_PRECO B, TBTABELA_PRECO C
                 WHERE B.CLIENTE_CODIGO IN --(SELECT C.CODIGO FROM TBCLIENTE C WHERE C.EMPRESA_VINCULO = :EMPRESA_VINCULO)
                 (SELECT C.CODIGO FROM TBCLIENTE C, TBEMPRESA_GRUPO_CONTAS W WHERE W.EMPRESA_ID = C.CODIGO AND W.EMPRESA_GRUPO_ID = :EMPRESA_VINCULO)
                 AND B.PRODUTO_CODIGO    = :PRODUTO_ID
                 AND B.TABELA_ID        = C.ID
                 AND B.TABELA_ID        = :PRECO_NF_CF_ID) A
            
            WHERE
                S.TAMANHO > 0
            
         INTO
            :TIPO,
            :TAMANHO,
            :PRECO_VENDA,
            :PR_TM,
            :VALIDO,
            :SUBTIPO
        DO
        SUSPEND;
    
        FOR
    
            SELECT
                1 TIPO,
                S.TAMANHO,
                FN_NUMBER_CAST((A.PRECO_VENDA*:PERCENTUAL_BASE),:DECIMAIS_BASE) AS PRECO_VENDA,
                FN_NUMBER_CAST(
                        iif(S.TAMANHO = 1, A.PR_NF_01,
                        iif(S.TAMANHO = 2, A.PR_NF_02,
                        iif(S.TAMANHO = 3, A.PR_NF_03,
                        iif(S.TAMANHO = 4, A.PR_NF_04,
                        iif(S.TAMANHO = 5, A.PR_NF_05,
                        iif(S.TAMANHO = 6, A.PR_NF_06,
                        iif(S.TAMANHO = 7, A.PR_NF_07,
                        iif(S.TAMANHO = 8, A.PR_NF_08,
                        iif(S.TAMANHO = 9, A.PR_NF_09,
                        iif(S.TAMANHO = 10, A.PR_NF_10,
                        iif(S.TAMANHO = 11, A.PR_NF_11,
                        iif(S.TAMANHO = 12, A.PR_NF_12,
                        iif(S.TAMANHO = 13, A.PR_NF_13,
                        iif(S.TAMANHO = 14, A.PR_NF_14,
                        iif(S.TAMANHO = 15, A.PR_NF_15,
                        iif(S.TAMANHO = 16, A.PR_NF_16,
                        iif(S.TAMANHO = 17, A.PR_NF_17,
                        iif(S.TAMANHO = 18, A.PR_NF_18,
                        iif(S.TAMANHO = 19, A.PR_NF_19,
                        iif(S.TAMANHO = 20, A.PR_NF_20, 0))))))))))))))))))))
                    *:PERCENTUAL_BASE,:DECIMAIS_BASE) PR_TM,
                :TABELA_VALIDA AS VALIDO,
                4 AS SUBTIPO
    
            FROM
                TBGRADE_SEQ S,(
                    SELECT FIRST 1 B.*,
                     COALESCE(C.PERCENTUAL_BASE,0.00) AS PERCENTUAL_BASE,
                     COALESCE(C.DECIMAIS_BASE,2) AS DECIMAIS_BASE
                     FROM TBCLIENTE_PRODUTO_PRECO B, TBTABELA_PRECO C
                     WHERE B.CLIENTE_CODIGO IN --(SELECT C.CODIGO FROM TBCLIENTE C WHERE C.EMPRESA_VINCULO = :EMPRESA_VINCULO)
                     (SELECT C.CODIGO FROM TBCLIENTE C, TBEMPRESA_GRUPO_CONTAS W WHERE W.EMPRESA_ID = C.CODIGO AND W.EMPRESA_GRUPO_ID = :EMPRESA_VINCULO)
                     AND B.PRODUTO_CODIGO    = :PRODUTO_ID
                     AND B.TABELA_ID        = C.ID
                     AND B.TABELA_ID        = (SELECT FIRST 1 C.TABELA_PRECO_ID_BASE FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID)) A
                
            WHERE
                S.TAMANHO > 0

    
        INTO
            :TIPO,
            :TAMANHO,
            :PRECO_VENDA,
            :PR_TM,
            :VALIDO,
            :SUBTIPO
        DO
        SUSPEND;

    END
END;

CREATE OR ALTER PROCEDURE SPC_PEDIDO_PRECO_CONSULTA_02 (
    CLIENTE_ID INTEGER,
    ESTABELECIMENTO_ID INTEGER,
    PRODUTO_ID INTEGER,
    MODELO_ID INTEGER,
    GRADE_ID INTEGER,
    PRECO_NF_CF_ID INTEGER = 0,
    PERCENTUAL_BASE INTEGER = 0,
    DECIMAIS_BASE INTEGER = 2,
    TABELA_VALIDA INTEGER = 0,
    EMPRESA_VINCULO INTEGER = 0,
    DATA_PEDIDO DATE = 'NOW',
    ORIGEM_PRECO INTEGER = 0)
RETURNS (
    TIPO INTEGER,
    TAMANHO INTEGER,
    PRECO_VENDA NUMERIC(15,4),
    PR_TM NUMERIC(15,4),
    VALIDO INTEGER,
    SUBTIPO INTEGER)
AS
BEGIN
         FOR
            SELECT
                2 TIPO,
                S.TAMANHO,
                B.PRECO_VENDA AS PRECO_VENDA,
                CASE S.TAMANHO
                    WHEN 01 THEN B.PR_NF_01
                    WHEN 02 THEN B.PR_NF_02
                    WHEN 03 THEN B.PR_NF_03
                    WHEN 04 THEN B.PR_NF_04
                    WHEN 05 THEN B.PR_NF_05
                    WHEN 06 THEN B.PR_NF_06
                    WHEN 07 THEN B.PR_NF_07
                    WHEN 08 THEN B.PR_NF_08
                    WHEN 09 THEN B.PR_NF_09
                    WHEN 10 THEN B.PR_NF_10
                    WHEN 11 THEN B.PR_NF_11
                    WHEN 12 THEN B.PR_NF_12
                    WHEN 13 THEN B.PR_NF_13
                    WHEN 14 THEN B.PR_NF_14
                    WHEN 15 THEN B.PR_NF_15
                    WHEN 16 THEN B.PR_NF_16
                    WHEN 17 THEN B.PR_NF_17
                    WHEN 18 THEN B.PR_NF_18
                    WHEN 19 THEN B.PR_NF_19
                    WHEN 20 THEN B.PR_NF_20
                ELSE 0 END PR_TM,
                :TABELA_VALIDA AS VALIDO,
                1 AS SUBTIPO
            
            FROM
                TBGRADE_SEQ S
                LEFT JOIN TBCLIENTE_MODELO_PRECO  B ON (B.CLIENTE_CODIGO = :CLIENTE_ID AND B.MODELO_CODIGO  = :MODELO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID)

            WHERE S.TAMANHO > 0
            
            INTO
                :TIPO,
                :TAMANHO,
                :PRECO_VENDA,
                :PR_TM,
                :VALIDO,
                :SUBTIPO
            DO
            SUSPEND;

            FOR
               SELECT
                    2 TIPO,
                    S.TAMANHO,
                    FN_NUMBER_CAST((C.PRECO_VENDA*:PERCENTUAL_BASE),:DECIMAIS_BASE) AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN FN_NUMBER_CAST((C.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 02 THEN FN_NUMBER_CAST((C.PR_NF_02*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 03 THEN FN_NUMBER_CAST((C.PR_NF_03*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 04 THEN FN_NUMBER_CAST((C.PR_NF_04*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 05 THEN FN_NUMBER_CAST((C.PR_NF_05*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 06 THEN FN_NUMBER_CAST((C.PR_NF_06*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 07 THEN FN_NUMBER_CAST((C.PR_NF_07*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 08 THEN FN_NUMBER_CAST((C.PR_NF_08*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 09 THEN FN_NUMBER_CAST((C.PR_NF_09*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 10 THEN FN_NUMBER_CAST((C.PR_NF_10*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 11 THEN FN_NUMBER_CAST((C.PR_NF_11*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 12 THEN FN_NUMBER_CAST((C.PR_NF_12*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 13 THEN FN_NUMBER_CAST((C.PR_NF_13*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 14 THEN FN_NUMBER_CAST((C.PR_NF_14*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 15 THEN FN_NUMBER_CAST((C.PR_NF_15*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 16 THEN FN_NUMBER_CAST((C.PR_NF_16*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 17 THEN FN_NUMBER_CAST((C.PR_NF_17*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 18 THEN FN_NUMBER_CAST((C.PR_NF_18*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 19 THEN FN_NUMBER_CAST((C.PR_NF_19*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 20 THEN FN_NUMBER_CAST((C.PR_NF_20*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO,
                2 AS SUBTIPO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBCLIENTE_MODELO_PRECO  C ON (C.CLIENTE_CODIGO = :CLIENTE_ID AND C.MODELO_CODIGO  = :MODELO_ID AND C.TABELA_ID = (SELECT FIRST 1 C.TABELA_PRECO_ID_BASE FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID))

                WHERE S.TAMANHO > 0
                
            INTO
                :TIPO,
                :TAMANHO,
                :PRECO_VENDA,
                :PR_TM,
                :VALIDO,
                :SUBTIPO
            DO
            SUSPEND;


         IF(:ORIGEM_PRECO = 0)THEN
         BEGIN

            FOR
                SELECT
                             
                    2 TIPO,
                    S.TAMANHO,
                    B.PRECO_VENDA AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN B.PR_NF_01
                        WHEN 02 THEN B.PR_NF_02
                        WHEN 03 THEN B.PR_NF_03
                        WHEN 04 THEN B.PR_NF_04
                        WHEN 05 THEN B.PR_NF_05
                        WHEN 06 THEN B.PR_NF_06
                        WHEN 07 THEN B.PR_NF_07
                        WHEN 08 THEN B.PR_NF_08
                        WHEN 09 THEN B.PR_NF_09
                        WHEN 10 THEN B.PR_NF_10
                        WHEN 11 THEN B.PR_NF_11
                        WHEN 12 THEN B.PR_NF_12
                        WHEN 13 THEN B.PR_NF_13
                        WHEN 14 THEN B.PR_NF_14
                        WHEN 15 THEN B.PR_NF_15
                        WHEN 16 THEN B.PR_NF_16
                        WHEN 17 THEN B.PR_NF_17
                        WHEN 18 THEN B.PR_NF_18
                        WHEN 19 THEN B.PR_NF_19
                        WHEN 20 THEN B.PR_NF_20
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO,
                3 AS SUBTIPO
                
                FROM TBGRADE_SEQ S,(SELECT FIRST 1 B.*,
                         COALESCE(C.PERCENTUAL_BASE,0.00) AS PERCENTUAL_BASE,
                         COALESCE(C.DECIMAIS_BASE,2) AS DECIMAIS_BASE
                         FROM TBCLIENTE_MODELO_PRECO B, TBTABELA_PRECO C
                         WHERE B.CLIENTE_CODIGO IN --(SELECT C.CODIGO FROM TBCLIENTE C WHERE C.EMPRESA_VINCULO = :EMPRESA_VINCULO)
                         (SELECT C.CODIGO FROM TBCLIENTE C, TBEMPRESA_GRUPO_CONTAS W WHERE W.EMPRESA_ID = C.CODIGO AND W.EMPRESA_GRUPO_ID = :EMPRESA_VINCULO)
                         AND B.MODELO_CODIGO     = :MODELO_ID
                         AND B.TABELA_ID         = C.ID
                         AND B.TABELA_ID        = :PRECO_NF_CF_ID) B


            INTO
                :TIPO,
                :TAMANHO,
                :PRECO_VENDA,
                :PR_TM,
                :VALIDO,
                :SUBTIPO
            DO
            SUSPEND;

            FOR
              SELECT
                2 TIPO,
                S.TAMANHO,
                FN_NUMBER_CAST((B.PRECO_VENDA*:PERCENTUAL_BASE),:DECIMAIS_BASE) AS PRECO_VENDA,
                CASE S.TAMANHO
                    WHEN 01 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 02 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 03 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 04 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 05 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 06 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 07 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 08 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 09 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 10 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 11 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 12 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 13 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 14 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 15 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 16 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 17 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 18 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 19 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 20 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                ELSE 0 END PR_TM,
                :TABELA_VALIDA AS VALIDO,
                4 AS SUBTIPO
                
                FROM TBGRADE_SEQ S,(SELECT FIRST 1 B.*,
                     COALESCE(C.PERCENTUAL_BASE,0.00) AS PERCENTUAL_BASE,
                     COALESCE(C.DECIMAIS_BASE,2) AS DECIMAIS_BASE
                     FROM TBCLIENTE_MODELO_PRECO B, TBTABELA_PRECO C
                     WHERE (B.CLIENTE_CODIGO IN --(SELECT C.CODIGO FROM TBCLIENTE C WHERE C.EMPRESA_VINCULO = :EMPRESA_VINCULO)
                         (SELECT C.CODIGO FROM TBCLIENTE C, TBEMPRESA_GRUPO_CONTAS W WHERE W.EMPRESA_ID = C.CODIGO AND W.EMPRESA_GRUPO_ID = :EMPRESA_VINCULO)
                     AND B.MODELO_CODIGO     = :MODELO_ID
                     AND B.TABELA_ID         = C.ID
                     AND (B.TABELA_ID        = (SELECT FIRST 1 C.TABELA_PRECO_ID_BASE FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID)))) B
               WHERE TAMANHO > 0

            INTO
                :TIPO,
                :TAMANHO,
                :PRECO_VENDA,
                :PR_TM,
                :VALIDO,
                :SUBTIPO
            DO
            SUSPEND;
         END
END;

CREATE OR ALTER PROCEDURE SPC_PEDIDO_PRECO_ETAPA_01_2 (
    CLIENTE_ID INTEGER,
    ESTABELECIMENTO_ID INTEGER,
    PRODUTO_ID INTEGER,
    MODELO_ID INTEGER,
    GRADE_ID INTEGER,
    PRECO_NF_CF_ID INTEGER = 0,
    DATA_PEDIDO DATE = 'NOW',
    PRECO_ORIGEM INTEGER = 0)
RETURNS (
    TIPO INTEGER,
    TAMANHO INTEGER,
    TAMANHO_DESCRICAO VARCHAR(50),
    TAMANHO_PRECO NUMERIC(15,4),
    VALIDO INTEGER)
AS
DECLARE VARIABLE EMPRESA_VINCULO INTEGER;
DECLARE VARIABLE PERCENTUAL_BASE NUMERIC(18,8);
DECLARE VARIABLE DECIMAIS_BASE   INTEGER;
DECLARE VARIABLE TABELA_VALIDA   INTEGER;
BEGIN

--  EMPRESA_VINCULO = COALESCE((SELECT FIRST 1 C.EMPRESA_VINCULO FROM TBCLIENTE C WHERE C.CODIGO = :CLIENTE_ID),0);
    EMPRESA_VINCULO = COALESCE((SELECT FIRST 1 W.EMPRESA_GRUPO_ID FROM TBEMPRESA_GRUPO_CONTAS W WHERE W.EMPRESA_ID = :CLIENTE_ID),0);
    PERCENTUAL_BASE = COALESCE((SELECT FIRST 1 COALESCE(C.PERCENTUAL_BASE,0.00)/100.00 FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID),0);
    DECIMAIS_BASE   = COALESCE((SELECT FIRST 1 COALESCE(C.DECIMAIS_BASE,2) FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID),2);
    TABELA_VALIDA   = COALESCE((SELECT FIRST 1 1 FROM TBTABELA_PRECO D WHERE D.ID = :PRECO_NF_CF_ID AND :DATA_PEDIDO BETWEEN D.DATA_INICIAL AND D.DATA_FINAL),0);

--    exception "..." 'TABELA VALIDA:'||:TABELA_VALIDA;

    FOR

    SELECT
        TIPO,
        TAMANHO,
        TAMANHO_DESCRICAO,
        TAMANHO_PRECO,
        VALIDO
        FROM
            (
            SELECT
                TIPO,
                TAMANHO,
                 (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO)) TAMANHO_DESCRICAO,
                CAST(IIF(X.PR_TM>0,X.PR_TM,X.PRECO_VENDA) AS NUMERIC(15,4)) TAMANHO_PRECO,
        
                    CASE X.TAMANHO
                        WHEN 01 THEN M.T01
                        WHEN 02 THEN M.T02
                        WHEN 03 THEN M.T03
                        WHEN 04 THEN M.T04
                        WHEN 05 THEN M.T05
                        WHEN 06 THEN M.T06
                        WHEN 07 THEN M.T07
                        WHEN 08 THEN M.T08
                        WHEN 09 THEN M.T09
                        WHEN 10 THEN M.T10
                        WHEN 11 THEN M.T11
                        WHEN 12 THEN M.T12
                        WHEN 13 THEN M.T13
                        WHEN 14 THEN M.T14
                        WHEN 15 THEN M.T15
                        WHEN 16 THEN M.T16
                        WHEN 17 THEN M.T17
                        WHEN 18 THEN M.T18
                        WHEN 19 THEN M.T19
                        WHEN 20 THEN M.T20
                    ELSE 0 END MODELO_GRADE,
                    VALIDO
            
            FROM
                (
              SELECT
                TIPO,
                 TAMANHO,
                 PRECO_VENDA,
                 PR_TM,
                 VALIDO
               FROM
               (SELECT
                     TIPO,
                     TAMANHO,
                     PRECO_VENDA,
                     PR_TM,
                     VALIDO,
                     SUBTIPO
                        FROM
                        SPC_PEDIDO_PRECO_CONSULTA_01(
                            :CLIENTE_ID,
                            :ESTABELECIMENTO_ID,
                            :PRODUTO_ID,
                            :MODELO_ID,
                            :GRADE_ID,
                            :PRECO_NF_CF_ID,
                            :PERCENTUAL_BASE,
                            :DECIMAIS_BASE,
                            :TABELA_VALIDA,
                            :EMPRESA_VINCULO,
                            :DATA_PEDIDO,
                            :PRECO_ORIGEM) A
                )
                WHERE SUBTIPO = (SELECT
                                 MIN(SUBTIPO) AS SUBTIPO
                                    FROM
                                    SPC_PEDIDO_PRECO_CONSULTA_01(
                                        :CLIENTE_ID,
                                        :ESTABELECIMENTO_ID,
                                        :PRODUTO_ID,
                                        :MODELO_ID,
                                        :GRADE_ID,
                                        :PRECO_NF_CF_ID,
                                        :PERCENTUAL_BASE,
                                        :DECIMAIS_BASE,
                                        :TABELA_VALIDA,
                                        :EMPRESA_VINCULO,
                                        :DATA_PEDIDO,
                                        :PRECO_ORIGEM) B
                                        WHERE B.PRECO_VENDA IS NOT NULL)


                
                UNION

              SELECT
                TIPO,
                 TAMANHO,
                 PRECO_VENDA,
                 PR_TM,
                 VALIDO
               FROM
               (SELECT
                     TIPO,
                     TAMANHO,
                     PRECO_VENDA,
                     PR_TM,
                     VALIDO,
                     SUBTIPO
                        FROM
                        SPC_PEDIDO_PRECO_CONSULTA_02(
                            :CLIENTE_ID,
                            :ESTABELECIMENTO_ID,
                            :PRODUTO_ID,
                            :MODELO_ID,
                            :GRADE_ID,
                            :PRECO_NF_CF_ID,
                            :PERCENTUAL_BASE,
                            :DECIMAIS_BASE,
                            :TABELA_VALIDA,
                            :EMPRESA_VINCULO,
                            :DATA_PEDIDO,
                            :PRECO_ORIGEM) A
                )
                WHERE SUBTIPO = (SELECT
                                 MIN(SUBTIPO) AS SUBTIPO
                                    FROM
                                    SPC_PEDIDO_PRECO_CONSULTA_02(
                                        :CLIENTE_ID,
                                        :ESTABELECIMENTO_ID,
                                        :PRODUTO_ID,
                                        :MODELO_ID,
                                        :GRADE_ID,
                                        :PRECO_NF_CF_ID,
                                        :PERCENTUAL_BASE,
                                        :DECIMAIS_BASE,
                                        :TABELA_VALIDA,
                                        :EMPRESA_VINCULO,
                                        :DATA_PEDIDO,
                                        :PRECO_ORIGEM) B
                                        WHERE B.PRECO_VENDA IS NOT NULL)


                UNION

                SELECT
                             
                    3 TIPO,
                    S.TAMANHO,
                    B.PRECO_VENDA AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN B.PR_NF_01
                        WHEN 02 THEN B.PR_NF_02
                        WHEN 03 THEN B.PR_NF_03
                        WHEN 04 THEN B.PR_NF_04
                        WHEN 05 THEN B.PR_NF_05
                        WHEN 06 THEN B.PR_NF_06
                        WHEN 07 THEN B.PR_NF_07
                        WHEN 08 THEN B.PR_NF_08
                        WHEN 09 THEN B.PR_NF_09
                        WHEN 10 THEN B.PR_NF_10
                        WHEN 11 THEN B.PR_NF_11
                        WHEN 12 THEN B.PR_NF_12
                        WHEN 13 THEN B.PR_NF_13
                        WHEN 14 THEN B.PR_NF_14
                        WHEN 15 THEN B.PR_NF_15
                        WHEN 16 THEN B.PR_NF_16
                        WHEN 17 THEN B.PR_NF_17
                        WHEN 18 THEN B.PR_NF_18
                        WHEN 19 THEN B.PR_NF_19
                        WHEN 20 THEN B.PR_NF_20
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO

                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBPRODUTO_PRECO   B ON (B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID AND B.PRODUTO_CODIGO = :PRODUTO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID)
                    LEFT JOIN TBESTABELECIMENTO E ON (B.ESTABELECIMENTO_CODIGO = E.CODIGO AND B.UF = E.UF)
                
                WHERE
                    S.TAMANHO > 0
                                            
                UNION
                
                SELECT
                             
                    3 TIPO,
                    S.TAMANHO,
                    FN_NUMBER_CAST((C.PRECO_VENDA*:PERCENTUAL_BASE),:DECIMAIS_BASE) AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN FN_NUMBER_CAST((C.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 02 THEN FN_NUMBER_CAST((C.PR_NF_02*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 03 THEN FN_NUMBER_CAST((C.PR_NF_03*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 04 THEN FN_NUMBER_CAST((C.PR_NF_04*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 05 THEN FN_NUMBER_CAST((C.PR_NF_05*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 06 THEN FN_NUMBER_CAST((C.PR_NF_06*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 07 THEN FN_NUMBER_CAST((C.PR_NF_07*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 08 THEN FN_NUMBER_CAST((C.PR_NF_08*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 09 THEN FN_NUMBER_CAST((C.PR_NF_09*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 10 THEN FN_NUMBER_CAST((C.PR_NF_10*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 11 THEN FN_NUMBER_CAST((C.PR_NF_11*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 12 THEN FN_NUMBER_CAST((C.PR_NF_12*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 13 THEN FN_NUMBER_CAST((C.PR_NF_13*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 14 THEN FN_NUMBER_CAST((C.PR_NF_14*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 15 THEN FN_NUMBER_CAST((C.PR_NF_15*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 16 THEN FN_NUMBER_CAST((C.PR_NF_16*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 17 THEN FN_NUMBER_CAST((C.PR_NF_17*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 18 THEN FN_NUMBER_CAST((C.PR_NF_18*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 19 THEN FN_NUMBER_CAST((C.PR_NF_19*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 20 THEN FN_NUMBER_CAST((C.PR_NF_20*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO

                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBPRODUTO_PRECO   C ON (C.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID AND C.PRODUTO_CODIGO = :PRODUTO_ID AND C.TABELA_ID = (SELECT FIRST 1 C.TABELA_PRECO_ID_BASE FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID))
                    LEFT JOIN TBESTABELECIMENTO E ON (C.ESTABELECIMENTO_CODIGO = E.CODIGO AND C.UF = E.UF)
                
                WHERE
                    S.TAMANHO > 0
                                            
                UNION

                
                SELECT
                             
                    4 TIPO,
                    S.TAMANHO,
                    B.PRECO_VENDA AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN B.PR_NF_01
                        WHEN 02 THEN B.PR_NF_02
                        WHEN 03 THEN B.PR_NF_03
                        WHEN 04 THEN B.PR_NF_04
                        WHEN 05 THEN B.PR_NF_05
                        WHEN 06 THEN B.PR_NF_06
                        WHEN 07 THEN B.PR_NF_07
                        WHEN 08 THEN B.PR_NF_08
                        WHEN 09 THEN B.PR_NF_09
                        WHEN 10 THEN B.PR_NF_10
                        WHEN 11 THEN B.PR_NF_11
                        WHEN 12 THEN B.PR_NF_12
                        WHEN 13 THEN B.PR_NF_13
                        WHEN 14 THEN B.PR_NF_14
                        WHEN 15 THEN B.PR_NF_15
                        WHEN 16 THEN B.PR_NF_16
                        WHEN 17 THEN B.PR_NF_17
                        WHEN 18 THEN B.PR_NF_18
                        WHEN 19 THEN B.PR_NF_19
                        WHEN 20 THEN B.PR_NF_20
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBMODELO_PRECO    B ON (B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID AND B.MODELO_CODIGO = :MODELO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID)
                    LEFT JOIN TBESTABELECIMENTO E ON (B.ESTABELECIMENTO_CODIGO = E.CODIGO AND B.UF = E.UF)
                
                WHERE
                    S.TAMANHO > 0

                    
                UNION
                
                SELECT
                             
                    4 TIPO,
                    S.TAMANHO,
                    FN_NUMBER_CAST((C.PRECO_VENDA*:PERCENTUAL_BASE),:DECIMAIS_BASE) AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN FN_NUMBER_CAST((C.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 02 THEN FN_NUMBER_CAST((C.PR_NF_02*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 03 THEN FN_NUMBER_CAST((C.PR_NF_03*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 04 THEN FN_NUMBER_CAST((C.PR_NF_04*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 05 THEN FN_NUMBER_CAST((C.PR_NF_05*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 06 THEN FN_NUMBER_CAST((C.PR_NF_06*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 07 THEN FN_NUMBER_CAST((C.PR_NF_07*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 08 THEN FN_NUMBER_CAST((C.PR_NF_08*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 09 THEN FN_NUMBER_CAST((C.PR_NF_09*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 10 THEN FN_NUMBER_CAST((C.PR_NF_10*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 11 THEN FN_NUMBER_CAST((C.PR_NF_11*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 12 THEN FN_NUMBER_CAST((C.PR_NF_12*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 13 THEN FN_NUMBER_CAST((C.PR_NF_13*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 14 THEN FN_NUMBER_CAST((C.PR_NF_14*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 15 THEN FN_NUMBER_CAST((C.PR_NF_15*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 16 THEN FN_NUMBER_CAST((C.PR_NF_16*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 17 THEN FN_NUMBER_CAST((C.PR_NF_17*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 18 THEN FN_NUMBER_CAST((C.PR_NF_18*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 19 THEN FN_NUMBER_CAST((C.PR_NF_19*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 20 THEN FN_NUMBER_CAST((C.PR_NF_20*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBMODELO_PRECO    C ON (C.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID AND C.MODELO_CODIGO = :MODELO_ID AND C.TABELA_ID = (SELECT FIRST 1 C.TABELA_PRECO_ID_BASE FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID))
                    LEFT JOIN TBESTABELECIMENTO E ON (C.ESTABELECIMENTO_CODIGO = E.CODIGO AND C.UF = E.UF)
                
                WHERE
                    S.TAMANHO > 0
                    
                UNION
                
                SELECT
                             
                    5 TIPO,
                    S.TAMANHO,
                    B.PRECO_CF AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN B.PR_CF_01
                        WHEN 02 THEN B.PR_CF_02
                        WHEN 03 THEN B.PR_CF_03
                        WHEN 04 THEN B.PR_CF_04
                        WHEN 05 THEN B.PR_CF_05
                        WHEN 06 THEN B.PR_CF_06
                        WHEN 07 THEN B.PR_CF_07
                        WHEN 08 THEN B.PR_CF_08
                        WHEN 09 THEN B.PR_CF_09
                        WHEN 10 THEN B.PR_CF_10
                        WHEN 11 THEN B.PR_CF_11
                        WHEN 12 THEN B.PR_CF_12
                        WHEN 13 THEN B.PR_CF_13
                        WHEN 14 THEN B.PR_CF_14
                        WHEN 15 THEN B.PR_CF_15
                        WHEN 16 THEN B.PR_CF_16
                        WHEN 17 THEN B.PR_CF_17
                        WHEN 18 THEN B.PR_CF_18
                        WHEN 19 THEN B.PR_CF_19
                        WHEN 20 THEN B.PR_CF_20
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBPRODUTO_PRECO   B ON (B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID AND B.PRODUTO_CODIGO = :PRODUTO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID)
                    LEFT JOIN TBESTABELECIMENTO E ON (B.ESTABELECIMENTO_CODIGO = E.CODIGO AND B.UF = E.UF)
                
                WHERE
                    S.TAMANHO > 0
                                            
                UNION
                
                SELECT
                             
                    5 TIPO,
                    S.TAMANHO,
                    FN_NUMBER_CAST((C.PRECO_CF*:PERCENTUAL_BASE),:DECIMAIS_BASE) AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN FN_NUMBER_CAST((C.PR_CF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 02 THEN FN_NUMBER_CAST((C.PR_CF_02*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 03 THEN FN_NUMBER_CAST((C.PR_CF_03*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 04 THEN FN_NUMBER_CAST((C.PR_CF_04*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 05 THEN FN_NUMBER_CAST((C.PR_CF_05*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 06 THEN FN_NUMBER_CAST((C.PR_CF_06*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 07 THEN FN_NUMBER_CAST((C.PR_CF_07*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 08 THEN FN_NUMBER_CAST((C.PR_CF_08*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 09 THEN FN_NUMBER_CAST((C.PR_CF_09*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 10 THEN FN_NUMBER_CAST((C.PR_CF_10*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 11 THEN FN_NUMBER_CAST((C.PR_CF_11*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 12 THEN FN_NUMBER_CAST((C.PR_CF_12*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 13 THEN FN_NUMBER_CAST((C.PR_CF_13*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 14 THEN FN_NUMBER_CAST((C.PR_CF_14*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 15 THEN FN_NUMBER_CAST((C.PR_CF_15*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 16 THEN FN_NUMBER_CAST((C.PR_CF_16*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 17 THEN FN_NUMBER_CAST((C.PR_CF_17*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 18 THEN FN_NUMBER_CAST((C.PR_CF_18*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 19 THEN FN_NUMBER_CAST((C.PR_CF_19*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 20 THEN FN_NUMBER_CAST((C.PR_CF_20*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBPRODUTO_PRECO   C ON (C.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID AND C.PRODUTO_CODIGO = :PRODUTO_ID AND C.TABELA_ID = (SELECT FIRST 1 C.TABELA_PRECO_ID_BASE FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID))
                    LEFT JOIN TBESTABELECIMENTO E ON (C.ESTABELECIMENTO_CODIGO = E.CODIGO AND C.UF = E.UF)
                
                WHERE
                    S.TAMANHO > 0

                                UNION
                
                SELECT
                             
                    6 TIPO,
                    S.TAMANHO,
                    B.PRECO_CF AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN B.PR_CF_01
                        WHEN 02 THEN B.PR_CF_02
                        WHEN 03 THEN B.PR_CF_03
                        WHEN 04 THEN B.PR_CF_04
                        WHEN 05 THEN B.PR_CF_05
                        WHEN 06 THEN B.PR_CF_06
                        WHEN 07 THEN B.PR_CF_07
                        WHEN 08 THEN B.PR_CF_08
                        WHEN 09 THEN B.PR_CF_09
                        WHEN 10 THEN B.PR_CF_10
                        WHEN 11 THEN B.PR_CF_11
                        WHEN 12 THEN B.PR_CF_12
                        WHEN 13 THEN B.PR_CF_13
                        WHEN 14 THEN B.PR_CF_14
                        WHEN 15 THEN B.PR_CF_15
                        WHEN 16 THEN B.PR_CF_16
                        WHEN 17 THEN B.PR_CF_17
                        WHEN 18 THEN B.PR_CF_18
                        WHEN 19 THEN B.PR_CF_19
                        WHEN 20 THEN B.PR_CF_20
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBMODELO_PRECO    B ON (B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID AND B.MODELO_CODIGO = :MODELO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID)
                    LEFT JOIN TBESTABELECIMENTO E ON (B.ESTABELECIMENTO_CODIGO = E.CODIGO AND B.UF = E.UF)

                UNION
                
                SELECT
                             
                    6 TIPO,
                    S.TAMANHO,
                    FN_NUMBER_CAST((C.PRECO_CF*:PERCENTUAL_BASE),:DECIMAIS_BASE) AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN FN_NUMBER_CAST((C.PR_CF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 02 THEN FN_NUMBER_CAST((C.PR_CF_02*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 03 THEN FN_NUMBER_CAST((C.PR_CF_03*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 04 THEN FN_NUMBER_CAST((C.PR_CF_04*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 05 THEN FN_NUMBER_CAST((C.PR_CF_05*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 06 THEN FN_NUMBER_CAST((C.PR_CF_06*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 07 THEN FN_NUMBER_CAST((C.PR_CF_07*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 08 THEN FN_NUMBER_CAST((C.PR_CF_08*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 09 THEN FN_NUMBER_CAST((C.PR_CF_09*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 10 THEN FN_NUMBER_CAST((C.PR_CF_10*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 11 THEN FN_NUMBER_CAST((C.PR_CF_11*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 12 THEN FN_NUMBER_CAST((C.PR_CF_12*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 13 THEN FN_NUMBER_CAST((C.PR_CF_13*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 14 THEN FN_NUMBER_CAST((C.PR_CF_14*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 15 THEN FN_NUMBER_CAST((C.PR_CF_15*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 16 THEN FN_NUMBER_CAST((C.PR_CF_16*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 17 THEN FN_NUMBER_CAST((C.PR_CF_17*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 18 THEN FN_NUMBER_CAST((C.PR_CF_18*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 19 THEN FN_NUMBER_CAST((C.PR_CF_19*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 20 THEN FN_NUMBER_CAST((C.PR_CF_20*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBMODELO_PRECO    C ON (C.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID AND C.MODELO_CODIGO = :MODELO_ID AND C.TABELA_ID = (SELECT FIRST 1 C.TABELA_PRECO_ID_BASE FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID))
                    LEFT JOIN TBESTABELECIMENTO E ON (C.ESTABELECIMENTO_CODIGO = E.CODIGO AND C.UF = E.UF)

                UNION

                SELECT
                             
                    7 TIPO,
                    S.TAMANHO,
                    B.PRECO_VENDA AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN B.PR_NF_01
                        WHEN 02 THEN B.PR_NF_02
                        WHEN 03 THEN B.PR_NF_03
                        WHEN 04 THEN B.PR_NF_04
                        WHEN 05 THEN B.PR_NF_05
                        WHEN 06 THEN B.PR_NF_06
                        WHEN 07 THEN B.PR_NF_07
                        WHEN 08 THEN B.PR_NF_08
                        WHEN 09 THEN B.PR_NF_09
                        WHEN 10 THEN B.PR_NF_10
                        WHEN 11 THEN B.PR_NF_11
                        WHEN 12 THEN B.PR_NF_12
                        WHEN 13 THEN B.PR_NF_13
                        WHEN 14 THEN B.PR_NF_14
                        WHEN 15 THEN B.PR_NF_15
                        WHEN 16 THEN B.PR_NF_16
                        WHEN 17 THEN B.PR_NF_17
                        WHEN 18 THEN B.PR_NF_18
                        WHEN 19 THEN B.PR_NF_19
                        WHEN 20 THEN B.PR_NF_20
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBPRODUTO_PRECO B ON B.PRODUTO_CODIGO = :PRODUTO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID
                WHERE
                    S.TAMANHO > 0
                                            
                UNION

                SELECT
                             
                    7 TIPO,
                    S.TAMANHO,
                    FN_NUMBER_CAST((C.PRECO_VENDA*:PERCENTUAL_BASE),:DECIMAIS_BASE) AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN FN_NUMBER_CAST((C.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 02 THEN FN_NUMBER_CAST((C.PR_NF_02*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 03 THEN FN_NUMBER_CAST((C.PR_NF_03*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 04 THEN FN_NUMBER_CAST((C.PR_NF_04*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 05 THEN FN_NUMBER_CAST((C.PR_NF_05*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 06 THEN FN_NUMBER_CAST((C.PR_NF_06*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 07 THEN FN_NUMBER_CAST((C.PR_NF_07*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 08 THEN FN_NUMBER_CAST((C.PR_NF_08*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 09 THEN FN_NUMBER_CAST((C.PR_NF_09*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 10 THEN FN_NUMBER_CAST((C.PR_NF_10*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 11 THEN FN_NUMBER_CAST((C.PR_NF_11*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 12 THEN FN_NUMBER_CAST((C.PR_NF_12*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 13 THEN FN_NUMBER_CAST((C.PR_NF_13*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 14 THEN FN_NUMBER_CAST((C.PR_NF_14*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 15 THEN FN_NUMBER_CAST((C.PR_NF_15*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 16 THEN FN_NUMBER_CAST((C.PR_NF_16*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 17 THEN FN_NUMBER_CAST((C.PR_NF_17*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 18 THEN FN_NUMBER_CAST((C.PR_NF_18*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 19 THEN FN_NUMBER_CAST((C.PR_NF_19*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 20 THEN FN_NUMBER_CAST((C.PR_NF_20*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBPRODUTO_PRECO C ON C.PRODUTO_CODIGO = :PRODUTO_ID AND C.TABELA_ID = (SELECT FIRST 1 C.TABELA_PRECO_ID_BASE FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID)
                WHERE
                    S.TAMANHO > 0

                UNION
                
                SELECT
                             
                    8 TIPO,
                    S.TAMANHO,
                    B.PRECO_VENDA AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN B.PR_NF_01
                        WHEN 02 THEN B.PR_NF_02
                        WHEN 03 THEN B.PR_NF_03
                        WHEN 04 THEN B.PR_NF_04
                        WHEN 05 THEN B.PR_NF_05
                        WHEN 06 THEN B.PR_NF_06
                        WHEN 07 THEN B.PR_NF_07
                        WHEN 08 THEN B.PR_NF_08
                        WHEN 09 THEN B.PR_NF_09
                        WHEN 10 THEN B.PR_NF_10
                        WHEN 11 THEN B.PR_NF_11
                        WHEN 12 THEN B.PR_NF_12
                        WHEN 13 THEN B.PR_NF_13
                        WHEN 14 THEN B.PR_NF_14
                        WHEN 15 THEN B.PR_NF_15
                        WHEN 16 THEN B.PR_NF_16
                        WHEN 17 THEN B.PR_NF_17
                        WHEN 18 THEN B.PR_NF_18
                        WHEN 19 THEN B.PR_NF_19
                        WHEN 20 THEN B.PR_NF_20
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO
                
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBMODELO_PRECO B ON B.MODELO_CODIGO = :MODELO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID
                WHERE
                    S.TAMANHO > 0
                    
                UNION
                
                SELECT
                             
                    8 TIPO,
                    S.TAMANHO,
                    FN_NUMBER_CAST((C.PRECO_VENDA*:PERCENTUAL_BASE),:DECIMAIS_BASE) AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN FN_NUMBER_CAST((C.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 02 THEN FN_NUMBER_CAST((C.PR_NF_02*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 03 THEN FN_NUMBER_CAST((C.PR_NF_03*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 04 THEN FN_NUMBER_CAST((C.PR_NF_04*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 05 THEN FN_NUMBER_CAST((C.PR_NF_05*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 06 THEN FN_NUMBER_CAST((C.PR_NF_06*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 07 THEN FN_NUMBER_CAST((C.PR_NF_07*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 08 THEN FN_NUMBER_CAST((C.PR_NF_08*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 09 THEN FN_NUMBER_CAST((C.PR_NF_09*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 10 THEN FN_NUMBER_CAST((C.PR_NF_10*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 11 THEN FN_NUMBER_CAST((C.PR_NF_11*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 12 THEN FN_NUMBER_CAST((C.PR_NF_12*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 13 THEN FN_NUMBER_CAST((C.PR_NF_13*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 14 THEN FN_NUMBER_CAST((C.PR_NF_14*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 15 THEN FN_NUMBER_CAST((C.PR_NF_15*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 16 THEN FN_NUMBER_CAST((C.PR_NF_16*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 17 THEN FN_NUMBER_CAST((C.PR_NF_17*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 18 THEN FN_NUMBER_CAST((C.PR_NF_18*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 19 THEN FN_NUMBER_CAST((C.PR_NF_19*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 20 THEN FN_NUMBER_CAST((C.PR_NF_20*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO
                
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBMODELO_PRECO C ON C.MODELO_CODIGO = :MODELO_ID AND C.TABELA_ID = (SELECT FIRST 1 C.TABELA_PRECO_ID_BASE FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID)
                WHERE
                    S.TAMANHO > 0

                                UNION
                
                SELECT
                             
                    9 TIPO,
                    S.TAMANHO,
                    B.PRECO_CF AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN B.PR_CF_01
                        WHEN 02 THEN B.PR_CF_02
                        WHEN 03 THEN B.PR_CF_03
                        WHEN 04 THEN B.PR_CF_04
                        WHEN 05 THEN B.PR_CF_05
                        WHEN 06 THEN B.PR_CF_06
                        WHEN 07 THEN B.PR_CF_07
                        WHEN 08 THEN B.PR_CF_08
                        WHEN 09 THEN B.PR_CF_09
                        WHEN 10 THEN B.PR_CF_10
                        WHEN 11 THEN B.PR_CF_11
                        WHEN 12 THEN B.PR_CF_12
                        WHEN 13 THEN B.PR_CF_13
                        WHEN 14 THEN B.PR_CF_14
                        WHEN 15 THEN B.PR_CF_15
                        WHEN 16 THEN B.PR_CF_16
                        WHEN 17 THEN B.PR_CF_17
                        WHEN 18 THEN B.PR_CF_18
                        WHEN 19 THEN B.PR_CF_19
                        WHEN 20 THEN B.PR_CF_20
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBPRODUTO_PRECO B ON B.PRODUTO_CODIGO = :PRODUTO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID
                WHERE
                    S.TAMANHO > 0
                                            
                UNION
                
                SELECT
                             
                    9 TIPO,
                    S.TAMANHO,
                    FN_NUMBER_CAST((C.PRECO_CF*:PERCENTUAL_BASE),:DECIMAIS_BASE) AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN FN_NUMBER_CAST((C.PR_CF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 02 THEN FN_NUMBER_CAST((C.PR_CF_02*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 03 THEN FN_NUMBER_CAST((C.PR_CF_03*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 04 THEN FN_NUMBER_CAST((C.PR_CF_04*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 05 THEN FN_NUMBER_CAST((C.PR_CF_05*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 06 THEN FN_NUMBER_CAST((C.PR_CF_06*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 07 THEN FN_NUMBER_CAST((C.PR_CF_07*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 08 THEN FN_NUMBER_CAST((C.PR_CF_08*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 09 THEN FN_NUMBER_CAST((C.PR_CF_09*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 10 THEN FN_NUMBER_CAST((C.PR_CF_10*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 11 THEN FN_NUMBER_CAST((C.PR_CF_11*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 12 THEN FN_NUMBER_CAST((C.PR_CF_12*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 13 THEN FN_NUMBER_CAST((C.PR_CF_13*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 14 THEN FN_NUMBER_CAST((C.PR_CF_14*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 15 THEN FN_NUMBER_CAST((C.PR_CF_15*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 16 THEN FN_NUMBER_CAST((C.PR_CF_16*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 17 THEN FN_NUMBER_CAST((C.PR_CF_17*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 18 THEN FN_NUMBER_CAST((C.PR_CF_18*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 19 THEN FN_NUMBER_CAST((C.PR_CF_19*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 20 THEN FN_NUMBER_CAST((C.PR_CF_20*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBPRODUTO_PRECO C ON C.PRODUTO_CODIGO = :PRODUTO_ID AND C.TABELA_ID = (SELECT FIRST 1 C.TABELA_PRECO_ID_BASE FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID)
                WHERE
                    S.TAMANHO > 0
                                            
                UNION
                
                SELECT
                             
                    10 TIPO,
                    S.TAMANHO,
                    B.PRECO_CF AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN B.PR_CF_01
                        WHEN 02 THEN B.PR_CF_02
                        WHEN 03 THEN B.PR_CF_03
                        WHEN 04 THEN B.PR_CF_04
                        WHEN 05 THEN B.PR_CF_05
                        WHEN 06 THEN B.PR_CF_06
                        WHEN 07 THEN B.PR_CF_07
                        WHEN 08 THEN B.PR_CF_08
                        WHEN 09 THEN B.PR_CF_09
                        WHEN 10 THEN B.PR_CF_10
                        WHEN 11 THEN B.PR_CF_11
                        WHEN 12 THEN B.PR_CF_12
                        WHEN 13 THEN B.PR_CF_13
                        WHEN 14 THEN B.PR_CF_14
                        WHEN 15 THEN B.PR_CF_15
                        WHEN 16 THEN B.PR_CF_16
                        WHEN 17 THEN B.PR_CF_17
                        WHEN 18 THEN B.PR_CF_18
                        WHEN 19 THEN B.PR_CF_19
                        WHEN 20 THEN B.PR_CF_20
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBMODELO_PRECO B ON B.MODELO_CODIGO = :MODELO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID
                
                WHERE
                    S.TAMANHO > 0
                                      
                UNION
                
                SELECT
                             
                    10 TIPO,
                    S.TAMANHO,
                    FN_NUMBER_CAST((C.PRECO_CF*:PERCENTUAL_BASE),:DECIMAIS_BASE)  AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN FN_NUMBER_CAST((C.PR_CF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 02 THEN FN_NUMBER_CAST((C.PR_CF_02*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 03 THEN FN_NUMBER_CAST((C.PR_CF_03*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 04 THEN FN_NUMBER_CAST((C.PR_CF_04*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 05 THEN FN_NUMBER_CAST((C.PR_CF_05*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 06 THEN FN_NUMBER_CAST((C.PR_CF_06*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 07 THEN FN_NUMBER_CAST((C.PR_CF_07*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 08 THEN FN_NUMBER_CAST((C.PR_CF_08*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 09 THEN FN_NUMBER_CAST((C.PR_CF_09*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 10 THEN FN_NUMBER_CAST((C.PR_CF_10*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 11 THEN FN_NUMBER_CAST((C.PR_CF_11*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 12 THEN FN_NUMBER_CAST((C.PR_CF_12*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 13 THEN FN_NUMBER_CAST((C.PR_CF_13*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 14 THEN FN_NUMBER_CAST((C.PR_CF_14*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 15 THEN FN_NUMBER_CAST((C.PR_CF_15*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 16 THEN FN_NUMBER_CAST((C.PR_CF_16*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 17 THEN FN_NUMBER_CAST((C.PR_CF_17*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 18 THEN FN_NUMBER_CAST((C.PR_CF_18*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 19 THEN FN_NUMBER_CAST((C.PR_CF_19*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                        WHEN 20 THEN FN_NUMBER_CAST((C.PR_CF_20*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    ELSE 0 END PR_TM,
                    :TABELA_VALIDA AS VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBMODELO_PRECO C ON C.MODELO_CODIGO = :MODELO_ID AND C.TABELA_ID = (SELECT FIRST 1 C.TABELA_PRECO_ID_BASE FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID)
                
                WHERE
                    S.TAMANHO > 0
                


                ) X
                LEFT JOIN TBMODELO M ON M.CODIGO = :MODELO_ID)Z
        WHERE
            MODELO_GRADE = 1
        AND TAMANHO_PRECO IS NOT NULL

    INTO
        :TIPO,
        :TAMANHO,
        :TAMANHO_DESCRICAO,
        :TAMANHO_PRECO,
        :VALIDO
    DO
    SUSPEND;
END;

CREATE OR ALTER PROCEDURE SPC_PEDIDO_PRECO_ETAPA_TIPO_02 (
    CLIENTE_ID INTEGER,
    ESTABELECIMENTO_ID INTEGER,
    PRODUTO_ID INTEGER,
    MODELO_ID INTEGER,
    GRADE_ID INTEGER,
    TIPO INTEGER,
    PRECO_NF_CF_ID INTEGER = 0,
    DATA_PEDIDO DATE = 'NOW')
RETURNS (
    TAMANHO INTEGER,
    TAMANHO_DESCRICAO VARCHAR(5),
    TAMANHO_PRECO NUMERIC(15,4),
    VALIDO INTEGER)
AS
BEGIN
    IF(:TIPO > 0)THEN
    BEGIN
        IF(:TIPO = 1) THEN
        /*PREÇO POR MODELO DO CLIENTE*/
        BEGIN
           FOR
            SELECT
                TAMANHO,
                TAMANHO_DESCRICAO,
                TAMANHO_PRECO,
                VALIDO
            
            FROM
                (SELECT TIPO, TAMANHO, TAMANHO_DESCRICAO, TAMANHO_PRECO, VALIDO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(:CLIENTE_ID,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID)) X,
                (SELECT MIN(TIPO) TIPO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(:CLIENTE_ID,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID)
                    WHERE TIPO IN (1,2)) Z
            
            WHERE
                X.TIPO = Z.TIPO
                
            ORDER BY 1
    
            INTO
                :TAMANHO,
                :TAMANHO_DESCRICAO,
                :TAMANHO_PRECO,
                :VALIDO
            DO
            
            BEGIN
             IF(:VALIDO = 0)THEN
             BEGIN
                EXCEPTION "..." 'TABELA DE PREÇOS '||(SELECT FIRST 1 UPPER(FN_LPAD(A.ID,4,0)||' - '||A.DESCRICAO) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||' INVÁLIDA! <BR>'||(SELECT FIRST 1 UPPER('PERÍODO DE VALIDADE: <BR>'||FN_DATE_TO_STRING(A.DATA_INICIAL)||' À '||FN_DATE_TO_STRING(A.DATA_FINAL)) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||'. <BR> DATA DO PEDIDO: <BR>'||FN_DATE_TO_STRING(:DATA_PEDIDO);
             END
             SUSPEND;
            END       

        END
        IF(:TIPO = 4) THEN
        BEGIN
      /*  PREÇO GERAL NF  */
           FOR
            SELECT
                TAMANHO,
                TAMANHO_DESCRICAO,
                TAMANHO_PRECO,
                VALIDO
            
            FROM
                (SELECT TIPO, TAMANHO, TAMANHO_DESCRICAO, TAMANHO_PRECO, 1 AS VALIDO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)) X,
                (SELECT MIN(TIPO) TIPO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)
                    WHERE TIPO IN (3,4)) Z
            
            WHERE
                X.TIPO = Z.TIPO
                
            ORDER BY 1
    
            INTO
                :TAMANHO,
                :TAMANHO_DESCRICAO,
                :TAMANHO_PRECO,
                :VALIDO
            DO        
            SUSPEND;
        END
        IF(:TIPO = 5) THEN
        BEGIN
        /* PREÇO GERAL CF  */
           FOR
            SELECT
                TAMANHO,
                TAMANHO_DESCRICAO,
                TAMANHO_PRECO,
                VALIDO
            
            FROM
                (SELECT TIPO, TAMANHO, TAMANHO_DESCRICAO, TAMANHO_PRECO, 1 AS VALIDO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)) X,
                (SELECT MIN(TIPO) TIPO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)
                    WHERE TIPO IN (5,6)) Z
            
            WHERE
                X.TIPO = Z.TIPO
                
            ORDER BY 1
    
            INTO
                :TAMANHO,
                :TAMANHO_DESCRICAO,
                :TAMANHO_PRECO,
                :VALIDO
            DO        
            SUSPEND;
        END
        IF(:TIPO = 6 OR :TIPO = 7) THEN
        BEGIN
        /* PREÇO LIVRE OU IMPORTADO */
           FOR
            SELECT
                TAMANHO,
                TAMANHO_DESCRICAO,
                TAMANHO_PRECO,
                VALIDO
            
            FROM (SELECT A.TIPO,
                    A.TAMANHO,
                    A.TAMANHO_PRECO,
                    A.TAMANHO_DESCRICAO, A.VALIDO
                    FROM(
                          SELECT
                            5 TIPO,
                            S.TAMANHO,
                            0 AS TAMANHO_PRECO,
                            1 VALIDO,
                            CASE S.TAMANHO
                                WHEN 01 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 02 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 03 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 04 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 05 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 06 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 07 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 08 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 09 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 10 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 11 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 12 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 13 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 14 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 15 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 16 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 17 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 18 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 19 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 20 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                            ELSE 0 END TAMANHO_DESCRICAO
                            
                            FROM TBGRADE_SEQ S
                            WHERE S.TAMANHO > 0) A
                   WHERE CHAR_LENGTH(A.TAMANHO_DESCRICAO) > 0)
                
            ORDER BY 1
    
            INTO
                :TAMANHO,
                :TAMANHO_DESCRICAO,
                :TAMANHO_PRECO,
                :VALIDO
            DO        
            SUSPEND;
        END
        
        IF(:TIPO = 8) THEN
        BEGIN
      /*  PREÇO GERAL NF SEM ESTABELECIMENTO */
           FOR
            SELECT
                TAMANHO,
                TAMANHO_DESCRICAO,
                TAMANHO_PRECO,
                VALIDO
            
            FROM
                (SELECT TIPO, TAMANHO, TAMANHO_DESCRICAO, TAMANHO_PRECO, VALIDO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)) X,
                (SELECT MIN(TIPO) TIPO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)
                    WHERE TIPO IN (7,8)) Z
            
            WHERE
                X.TIPO = Z.TIPO
                
            ORDER BY 1
    
            INTO
                :TAMANHO,
                :TAMANHO_DESCRICAO,
                :TAMANHO_PRECO,
                :VALIDO
            DO
            BEGIN
             IF(:VALIDO = 0)THEN
             BEGIN
                EXCEPTION "..." 'TABELA DE PREÇOS '||(SELECT FIRST 1 UPPER(FN_LPAD(A.ID,4,0)||' - '||A.DESCRICAO) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||' INVÁLIDA! <BR>'||(SELECT FIRST 1 UPPER('PERÍODO DE VALIDADE: <BR>'||FN_DATE_TO_STRING(A.DATA_INICIAL)||' À '||FN_DATE_TO_STRING(A.DATA_FINAL)) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||'. <BR> DATA DO PEDIDO: <BR>'||FN_DATE_TO_STRING(:DATA_PEDIDO);
             END
             SUSPEND;
            END

        END
        IF(:TIPO = 9) THEN
        BEGIN
        /* PREÇO GERAL CF SEM ESTABELECIMENTO */
           FOR
            SELECT
                TAMANHO,
                TAMANHO_DESCRICAO,
                TAMANHO_PRECO,
                VALIDO
            
            FROM
                (SELECT TIPO, TAMANHO, TAMANHO_DESCRICAO, TAMANHO_PRECO, VALIDO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)) X,
                (SELECT MIN(TIPO) TIPO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)
                    WHERE TIPO IN (9,10)) Z
            
            WHERE
                X.TIPO = Z.TIPO
                
            ORDER BY 1
    
            INTO
                :TAMANHO,
                :TAMANHO_DESCRICAO,
                :TAMANHO_PRECO,
                :VALIDO
            DO
            BEGIN
             IF(:VALIDO = 0)THEN
             BEGIN
                EXCEPTION "..." 'TABELA DE PREÇOS '||(SELECT FIRST 1 UPPER(FN_LPAD(A.ID,4,0)||' - '||A.DESCRICAO) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||' INVÁLIDA! <BR>'||(SELECT FIRST 1 UPPER('PERÍODO DE VALIDADE: <BR>'||FN_DATE_TO_STRING(A.DATA_INICIAL)||' À '||FN_DATE_TO_STRING(A.DATA_FINAL)) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||'. <BR> DATA DO PEDIDO: <BR>'||FN_DATE_TO_STRING(:DATA_PEDIDO);
             END
             SUSPEND;
            END
        END

        IF(:TIPO = 10) THEN
        /*PREÇO POR MODELO DO CLIENTE SEM GRUPO DE CLIENTES*/
        BEGIN
           FOR
            SELECT
                TAMANHO,
                TAMANHO_DESCRICAO,
                TAMANHO_PRECO,
                VALIDO
            
            FROM
                (SELECT TIPO, TAMANHO, TAMANHO_DESCRICAO, TAMANHO_PRECO, VALIDO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(:CLIENTE_ID,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,CURRENT_DATE,1)) X,
                (SELECT MIN(TIPO) TIPO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(:CLIENTE_ID,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,CURRENT_DATE,1)
                    WHERE TIPO IN (1,2)) Z
            
            WHERE
                X.TIPO = Z.TIPO
                
            ORDER BY 1
    
            INTO
                :TAMANHO,
                :TAMANHO_DESCRICAO,
                :TAMANHO_PRECO,
                :VALIDO
            DO
            
            BEGIN
             IF(:VALIDO = 0)THEN
             BEGIN
                EXCEPTION "..." 'TABELA DE PREÇOS '||(SELECT FIRST 1 UPPER(FN_LPAD(A.ID,4,0)||' - '||A.DESCRICAO) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||' INVÁLIDA! <BR>'||(SELECT FIRST 1 UPPER('PERÍODO DE VALIDADE: <BR>'||FN_DATE_TO_STRING(A.DATA_INICIAL)||' À '||FN_DATE_TO_STRING(A.DATA_FINAL)) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||'. <BR> DATA DO PEDIDO: <BR>'||FN_DATE_TO_STRING(:DATA_PEDIDO);
             END
             SUSPEND;
            END       

        END

    END
    ELSE
    BEGIN
    FOR
        SELECT
            TAMANHO,
            TAMANHO_DESCRICAO,
            TAMANHO_PRECO,
            VALIDO
        
        FROM
            (SELECT TIPO, TAMANHO, TAMANHO_DESCRICAO, TAMANHO_PRECO, 1 AS VALIDO
                FROM SPC_PEDIDO_PRECO_ETAPA_01_2(:CLIENTE_ID,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID)) X,
            (SELECT MIN(TIPO) TIPO
                FROM SPC_PEDIDO_PRECO_ETAPA_01_2(:CLIENTE_ID,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID)) Z
        
        WHERE
            X.TIPO = Z.TIPO
            
        ORDER BY 1

        INTO
            :TAMANHO,
            :TAMANHO_DESCRICAO,
            :TAMANHO_PRECO,
            :VALIDO
        DO        
        SUSPEND;
    END
END;