-- Produtos
SELECT	

    tf.id_titulo_filho, --ID PARA FAZER O RELACIONAMENTO MASTER DETAIL
	CASE WHEN(vc.numero_cupom != 0) THEN CAST(vc.numero_cupom AS TEXT) ELSE tf.numero_titulo END AS numero_cupom,
	CASE WHEN (vc.data_cupom != NULL) THEN DATE(vc.data_cupom) ELSE tf.data_emissao END AS data_cupom,
	it.codigo AS codigo_item,
	CASE WHEN(COALESCE(it.denominacao, r.produto) != '' AND COALESCE(it.denominacao, r.produto) IS NOT NULL) THEN COALESCE(it.denominacao, r.produto) ELSE 'TÍTULO GERADO MANUALMENTE' END denominacao,
	COALESCE(iv.sequencia_item, r.seq_item) AS sequencia_item,
	um.sigla AS sigla_unidade,
	COALESCE(vc.placa, r.placa) AS placa_veiculo,
	iv.preco,
	COALESCE(SUM(ROUND((iv.quantidade * ((rv.valor_recebido - rv.valor_troco) / vc.total_venda)), 3)), r.quantidade) AS quantidade,
	COALESCE(SUM(ROUND((iv.total_item * ((rv.valor_recebido - rv.valor_troco) / vc.total_venda)), 3)), r.total_item) AS total_item,
	SUM(ROUND((((iv.total_bruto) - (iv.desconto + iv.desconto_automatico) + (iv.acrescimo + iv.acrescimo_automatico)) * ((rv.valor_recebido - rv.valor_troco) / vc.total_venda)), 3)) AS total_bruto,
	SUM(ROUND((iv.quantidade * iv.preco_original * ((rv.valor_recebido - rv.valor_troco) / vc.total_venda)), 3)) AS total_original,
	COALESCE(SUM(ROUND((((iv.total_item - (iv.desconto_rateado + iv.desconto_ajuste_rateado + iv.desconto_automatico_rateado + iv.desconto_fidelidade_rateado + iv.desconto_financeiro) +
		(iv.acrescimo_rateado + iv.acrescimo_ajuste_rateado + iv.acrescimo_automatico_rateado + iv.acrescimo_financeiro))) * ((rv.valor_recebido - rv.valor_troco) / vc.total_venda)), 3)), SUM(tf.valor_titulo)) AS total_negociado,
	CASE WHEN(iv.sequencia_item = 1) THEN rv.valor_troco END AS valor_troco,
	SUM(ROUND((((iv.desconto + iv.desconto_automatico + iv.desconto_rateado + iv.desconto_ajuste_rateado + iv.desconto_automatico_rateado + iv.desconto_fidelidade_rateado + iv.desconto_financeiro)) * ((rv.valor_recebido - rv.valor_troco) / vc.total_venda)), 3)) AS desconto,
	SUM(ROUND((((iv.acrescimo + iv.acrescimo_automatico + iv.acrescimo_rateado + iv.acrescimo_ajuste_rateado + iv.acrescimo_automatico_rateado + iv.acrescimo_financeiro)) * ((rv.valor_recebido - rv.valor_troco) / vc.total_venda)), 3)) AS acrescimo
FROM	titulo_financeiro AS tf
	LEFT OUTER JOIN parcela_recebimento_venda_cf AS pr ON (pr.id_titulo_financeiro = tf.id_titulo_financeiro)
	LEFT OUTER JOIN recebimento_venda_cf AS rv ON (rv.id_recebimento_venda_cf = pr.id_recebimento_venda_cf AND rv.cancelado = 'N')
	LEFT OUTER JOIN venda_cf AS vc ON (vc.id_venda_cf = rv.id_venda_cf AND vc.cancelada = 'N')
	LEFT OUTER JOIN item_venda_cf AS iv ON (iv.id_venda_cf = vc.id_venda_cf AND iv.cancelado = 'N')
	LEFT OUTER JOIN item AS it ON (it.id_item = iv.id_item)
	LEFT OUTER JOIN unidade_medida AS um ON (um.id_unidade_medida = it.id_unidade_medida)
    LEFT JOIN LATERAL(
        SELECT 
            split_part(r.part1,'|', 1) AS id_fatura,
            split_part(r.part1,'|', 2) AS placa,
            CAST(split_part(r.part2,'|', 2) AS BIGINT) AS seq_item,
            split_part(r.part2,'|', 3) AS produto,
            CAST(split_part(r.part2,'|', 4) AS DECIMAL(12,2)) AS quantidade,
            CAST(split_part(r.part2,'|', 5) AS DECIMAL(12,2)) AS total_item,
            CAST(split_part(r.part2,'|', 6) AS DECIMAL(12,2)) AS total_cabecalho
        FROM (
            SELECT 
                t.y AS part1,
                unnest(string_to_array(t.m, '$')) AS part2
            FROM (
                SELECT  
                split_part(tf.observacao,'@', 1) AS y,
                split_part(tf.observacao,'@', 2) AS m
            ) AS t
        ) AS r
    ) AS r ON TRUE
WHERE	tf.id_titulo_filho IN (SELECT id_titulo_financeiro
		FROM	titulo_financeiro AS tf
		WHERE	id_empresa = :IdEmpresaObrigatorio
		AND	data_emissao BETWEEN :DataInicialEmissao AND :DataFinalEmissao
		AND	(:IdCredorDevedorNaoObrigatorio = -1 OR tf.id_credor_devedor = :IdCredorDevedorNaoObrigatorio)		
		AND	tf.natureza_titulo IN (201, 209, 213, 220) -- Venda a Prazo, Receita, Vale Frete e Vale Motorista
		AND	situacao IN (1, 2, 3, 10) -- Aberto, Liquidado, Liquidado Parcialmente, Liquidado por Troca de Título
		AND	tipo_titulo = 3) -- Membramento
GROUP BY tf.id_titulo_filho, vc.numero_cupom, tf.numero_titulo, vc.data_cupom, tf.data_emissao, 
	it.codigo, it.denominacao, r.produto, iv.sequencia_item, r.seq_item, um.sigla, vc.placa, r.placa,
	iv.preco, r.quantidade, r.total_item, rv.valor_troco