-- Títulos Pendentes de Colaborador
WITH titulos_financeiro AS (
	SELECT	se.nome AS empresa_financeiro,
			emc.nome AS empresa_funcionario,
			p.codigo,
			tf.natureza_titulo,
			p.nome AS nome_colaborador,
			tf.data_emissao,
			tf.valor_titulo * POSITION(CAST('2' AS CHAR) IN CAST(tf.pagar_receber AS CHAR(1))) AS valor_entrada,
			tf.valor_titulo * POSITION(CAST('1' AS CHAR) IN CAST(tf.pagar_receber AS CHAR(1))) AS valor_saida,
			tf.numero_titulo,
			olvnt.titulo AS denominacao_natureza_titulo,
			tf.observacao_lancamento,
			c.situacao AS situacao_colaborador,
			tf.situacao
	FROM	titulo_financeiro AS tf
		INNER JOIN colaborador AS c ON (c.id_colaborador = tf.id_credor_devedor AND c.id_empresa = tf.id_empresa)
		INNER JOIN pessoa AS p ON (p.id_pessoa = c.id_colaborador)
		INNER JOIN sis_empresa AS se ON (se.id_empresa = tf.id_empresa)
		INNER JOIN sis_empresa AS emc ON (emc.id_empresa = c.id_empresa)
		INNER JOIN sis_opcao_lista_valor AS olvnt ON (olvnt.id = tf.natureza_titulo AND olvnt.id_lista_valor = 'C043EFC0EDD5414995003170978F8878')
	WHERE	tf.id_empresa = :IdEmpresaObrigatorio
	AND	tf.data_emissao <= :DataFinal
	AND	tf.situacao in (1,9)
	AND	tf.natureza_titulo IN (107,110,111,207,210,211,201)
	ORDER BY emc.nome,
		p.nome,
		tf.data_emissao	
)

SELECT  empresa_funcionario,
		codigo,		
		nome_colaborador,
		
		CASE WHEN (codigo = '001' AND natureza_titulo in (107,207)) -- Diferença positiva ou negativa
			THEN 'Quebra de Caixa'
			ELSE CASE WHEN UPPER(TRIM(observacao_lancamento)) = 'VALE'
				 THEN 'Adiantamento a Funcionários' 
				 ELSE CASE WHEN natureza_titulo = 210
					THEN 'Adiantamento a Funcionários'				 
					ELSE CASE WHEN natureza_titulo = 201
						THEN 'Venda A Prazo'
						ELSE CASE WHEN natureza_titulo = 207
							THEN denominacao_natureza_titulo
							ELSE 'Indefinido código ' || natureza_titulo
						END
					END
				END
			END
		END AS denominacao_natureza_titulo,
		
		CASE WHEN codigo = '001'
			THEN :DataFinal
			ELSE data_emissao
		END AS data_emissao,
		CASE WHEN UPPER(TRIM(observacao_lancamento)) = 'VALE'
			THEN 'VALE' 
			ELSE CASE WHEN natureza_titulo = 210
				THEN 'VALE'				 
				ELSE CASE WHEN natureza_titulo = 201
					THEN 'A PRAZO'
					ELSE CASE WHEN (codigo = '001' AND natureza_titulo in (107,207)) -- Diferença positiva ou negativa
						THEN ''
						ELSE CASE WHEN natureza_titulo = 207
							THEN 'FALTA CX.'
							ELSE ''
						END
					END
				END
			END
		END AS 	observacao,
		
		Sum(valor_saida - valor_entrada) as valor_rateio		

FROM 	titulos_financeiro	
GROUP BY 1,2,3,4,5,6
ORDER BY 2,4,5