CREATE OR ALTER VIEW VWMODELO_FICHA_PROCESSO(
    MODELO_ID,
    TIPO,
    VALOR)
AS
SELECT
    X.MODELO_ID,
    X.TIPO,
    CAST(X.VALOR AS VARCHAR(7000)) AS VALOR

FROM (
    SELECT
        A.CODIGO AS MODELO_ID,
        B.TIPO_DESCRICAO AS TIPO,
    
        IIF(B.TIPO < 4, CAST(C.VALOR AS VARCHAR(7000)),
        IIF(B.TIPO = 4, COALESCE((SELECT FIRST 1
                                    CAST(TI.DESCRICAO AS VARCHAR(7000))
                                FROM TBFICHA_TEMPLATE_ITENS TI
                                WHERE TI.TEMPLATE_ID = C.TIPO_CODIGO
                                AND B.FAMILIA_CODIGO = TI.FAMILIA_ID
                                AND CAST(C.VALOR AS INTEGER) = TI.VALOR), ''), '')) AS VALOR
    
    FROM TBMODELO A, TBFICHA_TEMPLATE B, TBMODELO_FICHA_TEMPLATE C
    WHERE A.FAMILIA_CODIGO = B.FAMILIA_CODIGO
    AND A.CODIGO = C.MODELO_CODIGO
    AND B.TIPO_CODIGO = C.TIPO_CODIGO
    AND B.TIPO <> 5
    
    UNION ALL
    
    SELECT
        A.CODIGO AS MODELO_ID,
        B.TIPO_DESCRICAO||' - '||ML.DESCRICAO||'/'||MC.DESCRICAO AS TIPO,
    
        CAST(FN_UNICODE_TO_UTF8(C.VALOR) AS VARCHAR(7000)) AS VALOR

    FROM TBMODELO A, TBFICHA_TEMPLATE B, TBMODELO_FICHA_TEMPLATE C, TBFICHA_MATRIZ_LINHAS ML, TBFICHA_MATRIZ_COLUNAS MC
    WHERE A.FAMILIA_CODIGO = B.FAMILIA_CODIGO
    AND A.CODIGO = C.MODELO_CODIGO
    AND B.TIPO_CODIGO = C.TIPO_CODIGO
    AND ML.ID = C.LINHA_ID
    AND MC.ID = C.COLUNA_ID
    AND B.TIPO = 5
) X
WHERE X.MODELO_ID > 0
AND X.VALOR <> ''
;

