Prestacao de contas - planilha joao batista

parent 6eec5440
Showing with 355 additions and 0 deletions
/**
* OBS:
* 1 - EXECUTAR TODOS OS PASSOS PARA PREPARAÇÃO
*/
--DROP MATERIALIZED VIEW IF EXISTS par.vm_relatorio_pc_fluxo CASCADE;
CREATE MATERIALIZED VIEW par.vm_relatorio_pc_fluxo AS
SELECT * FROM par.v_fluxo_prestacao_contas_v2 vfpc; -- EXEC 1
CREATE INDEX idx_processo ON par.vm_relatorio_pc_fluxo(processo); --EXEC 2
CREATE INDEX idx_terid ON par.vm_relatorio_pc_fluxo(terid); --EXEC 3
CREATE INDEX idx_dopid ON par.vm_relatorio_pc_fluxo(dopid); --EXEC 4
CREATE INDEX idx_dotid_par3 ON par.vm_relatorio_pc_fluxo(dotid_par3); --EXEC 5
CREATE INDEX idx_dotid_par4 ON par.vm_relatorio_pc_fluxo(dotid_par4); --EXEC 6
CREATE INDEX idx_proid_pac ON par.vm_relatorio_pc_fluxo(proid_pac); --EXEC 7
CREATE INDEX idx_proid_par ON par.vm_relatorio_pc_fluxo(proid_par); --EXEC 8
CREATE INDEX idx_prpid ON par.vm_relatorio_pc_fluxo(prpid); --EXEC 9
CREATE INDEX idx_proid_par3 ON par.vm_relatorio_pc_fluxo(proid_par3); --EXEC 10
CREATE INDEX idx_proid_par4 ON par.vm_relatorio_pc_fluxo(proid_par4); --EXEC 11
--DROP MATERIALIZED VIEW IF EXISTS par.vm_relatorio_pc_datas_limite CASCADE;
CREATE MATERIALIZED VIEW par.vm_relatorio_pc_datas_limite AS
SELECT
vfpc.processo,
vfpc.tipo,
vfpc.modulo,
par.data_limite_pc(vfpc.processo) AS prazo_pc,
CASE
WHEN vfpc.tipo = 'OBRA' OR vfpc.tipo = 'PAC'
THEN par.retornadataenviopc(vfpc.processo)
WHEN vfpc.tipo = 'PAR' AND vfpc.modulo = 'PAR2'
THEN cpar.cpcdtenvio
WHEN vfpc.tipo = 'PAR' AND vfpc.modulo = 'PAR3'
THEN epc.epcdatavalidacao
WHEN vfpc.tipo = 'PAR' AND vfpc.modulo = 'PAR4'
THEN epc2.epcdatavalidacao
END::date AS dt_envio_pc
FROM par.vm_relatorio_pc_fluxo vfpc
LEFT JOIN (
SELECT
c.prpid,
max(c.cpcdtenvio)::date AS cpcdtenvio
FROM par.comprovanteprestacaocontas c
WHERE c.cpcstatus = 'A'
GROUP BY prpid
) cpar ON cpar.prpid = vfpc.prpid
LEFT JOIN (
SELECT
epc.proid,
max(epc.epcdatavalidacao)::date AS epcdatavalidacao
FROM par3.execucao_prestacao_contas epc
WHERE epc.epcstatus = 'A'
GROUP BY proid
) AS epc ON epc.proid = vfpc.proid_par3
LEFT JOIN (
SELECT
epc.proid,
max(epc.epcdatavalidacao)::date AS epcdatavalidacao
FROM par4.execucao_prestacao_contas epc
WHERE epc.epcstatus = 'A'
GROUP BY proid
) AS epc2 ON epc2.proid = vfpc.proid_par4; --EXEC 12
CREATE INDEX idx_processo_datas ON par.vm_relatorio_pc_datas_limite(processo); --EXEC 13
--DROP MATERIALIZED VIEW IF EXISTS par.vm_relatorio_pc_pagamento_processo_ob CASCADE;
CREATE MATERIALIZED VIEW par.vm_relatorio_pc_pagamento_processo_ob AS
SELECT
e.empnumeroprocesso AS processo,
sum(p.pagvalorparcela) AS total_pag,
MIN(p.pagnumeroob) AS primeiro_ob
FROM par.empenho e
JOIN par.pagamento p ON p.empid = e.empid
WHERE p.pagsituacaopagamento ILIKE '%EFETIVADO%'
GROUP BY empnumeroprocesso
UNION ALL
SELECT
e.empnumeroprocesso,
sum(p.pagvalorparcela),
MIN(p.pagnumeroob) AS primeiro_ob
FROM par3.empenho e
JOIN par3.pagamento p ON p.empid = e.empid
WHERE p.pagsituacaopagamento ILIKE '%EFETIVADO%'
GROUP BY e.empnumeroprocesso
UNION ALL
SELECT
e.empnumeroprocesso,
sum(p.pagvalorparcela),
MIN(p.pagnumeroob) AS primeiro_ob
FROM par4.empenho e
JOIN par4.pagamento p ON p.empid = e.empid
WHERE p.pagsituacaopagamento ILIKE '%EFETIVADO%'
GROUP BY e.empnumeroprocesso; --EXEC 14
CREATE INDEX idx_processo_pag_ob ON par.vm_relatorio_pc_pagamento_processo_ob(processo); --EXEC 15
--DROP MATERIALIZED VIEW IF EXISTS par.vm_relatorio_pc_me_situacao_fase CASCADE;
CREATE MATERIALIZED VIEW par.vm_relatorio_pc_me_situacao_fase AS
SELECT DISTINCT
rs.rspid,
s.smpcdesc,
f.fmpcdesc,
rs.proid_par,
rs.proid_pac,
rs.proid_par3,
NULL AS proid_par4,
rs.prpid
FROM par.registrosituacaopc rs
JOIN par.situacaomeprestacaocontas s ON rs.smpcid = s.smpcid --AND rs.smpcid IS NOT NULL
JOIN par.fasemeprestacaocontas f ON f.fmpcid = rs.fmpcid --AND rs.fmpcid IS NOT NULL
WHERE rs.rspstatus = 'A'; --EXEC 16
CREATE INDEX idx_proid_pac_sitme ON par.vm_relatorio_pc_me_situacao_fase(proid_pac); --EXEC 17
CREATE INDEX idx_proid_par_sitme ON par.vm_relatorio_pc_me_situacao_fase(proid_par); --EXEC 18
CREATE INDEX idx_prpid_sitme ON par.vm_relatorio_pc_me_situacao_fase(prpid); --EXEC 19
CREATE INDEX idx_proid_par3_sitme ON par.vm_relatorio_pc_me_situacao_fase(proid_par3); --EXEC 20
CREATE INDEX idx_proid_par4_sitme ON par.vm_relatorio_pc_me_situacao_fase(proid_par4); --EXEC 21
--DROP MATERIALIZED VIEW IF EXISTS par.vm_relatorio_pc_relatorio_xlsx CASCADE;
CREATE MATERIALIZED VIEW par.vm_relatorio_pc_relatorio_xlsx AS
SELECT * FROM (
SELECT DISTINCT
vfpc.processo,
COALESCE(t.ternumero, d.dopnumerodocumento, d_par3.dotnumero, d_par4.dotnumero) AS termo,
CASE
WHEN vfpc.tipo = 'PAC'
THEN 'Programa PAC'
ELSE COALESCE(m2.mdonome, m3.mdonome, m4.mdonome)
END AS programa_projeto,
COALESCE(mun.estuf, est.estuf) AS uf,
COALESCE(mun.inudescricao, est.inudescricao) AS municipio,
COALESCE(iemun.entcnpj, ieest.entcnpj) AS cnpj,
COALESCE(iemun.entnome, ieest.entnome) AS entidade,
TO_CHAR(
COALESCE(
COALESCE(t.terdataassinatura::date, t.terdatainclusao::date),
par.formata_data_termo_inicio(d.dopdatainiciovigencia::text),
d3.dotdatainiciovigencia::date,
d4.dotdatainiciovigencia::date
),
'DD/MM/YYYY'
) AS inicio_vigencia,
TO_CHAR(
COALESCE(
par.formata_data_termo_fim(t.terdatafimvigencia::text),
par.formata_data_termo_fim(d.dopdatafimvigencia::text),
d3.dotdatafimvigencia::date,
d4.dotdatafimvigencia::date
),
'DD/MM/YYYY'
) AS fim_vigencia,
to_char(v_dt.prazo_pc, 'DD/MM/YYYY') AS prazo_pc,
CASE
WHEN v_dt.dt_envio_pc IS NULL AND t2.prpid IS NULL AND t3.proid_pac IS NULL AND t4.proid_par IS NULL AND v_dt.prazo_pc < now()::date
THEN (now()::date - v_dt.prazo_pc)
ELSE 0
END AS dias_atraso,
CASE
WHEN t2.prpid IS NOT NULL OR t3.proid_pac IS NOT NULL OR t4.proid_par IS NOT NULL
THEN 'Enviado via SIGPC'
ELSE to_char(v_dt.dt_envio_pc, 'DD/MM/YYYY')
END AS data_recibo,
COALESCE(pag.total_pag, 0) AS vlr_repassado,
-- Dados bancários
COALESCE(propar.prpagencia, proobrapar.proagencia, propac.proagencia, pro3.proagencia, pro4.proagencia) AS agencia,
COALESCE(propar.nu_conta_corrente, proobrapar.nu_conta_corrente, propac.nu_conta_corrente, pro3.nu_conta_corrente, pro4.nu_conta_corrente) AS conta,
COALESCE(io.itrid, ip.itrid, ip4.itrid, ip5.itrid) as itrid,
m.muncod,
est.estuf,
pag.primeiro_ob AS primeiro_ob,
vfpc.fase_pc_esdsc AS fase_pc_atual,
vfpc.situacao_pc_esddsc AS situcao_pc_atual,
vfpc.situacao_opc_esddsc AS situacao_opc_atual,
CASE
WHEN COALESCE(efeitosuspensivo.efdstatus, efeitosuspensivo1.efdstatus, efeitosuspensivo2.efdstatus, efeitosuspensivo3.efdstatus) = 'A'
THEN 'Vigente'
ELSE 'Não vigente'
END AS ef_suspensivo,
COALESCE(vm_s_f_me.fmpcdesc, vm_s_f_me1.fmpcdesc, vm_s_f_me2.fmpcdesc,vm_s_f_me3.fmpcdesc) AS fase_me,
COALESCE(vm_s_f_me.smpcdesc, vm_s_f_me1.smpcdesc, vm_s_f_me2.smpcdesc, vm_s_f_me3.smpcdesc) AS situacao_me,
vfpc.tipo AS tipo,
vfpc.modulo
FROM par.vm_relatorio_pc_fluxo vfpc
JOIN par.vm_relatorio_pc_datas_limite AS v_dt ON v_dt.processo = vfpc.processo
LEFT JOIN par.vm_relatorio_pc_pagamento_processo_ob AS pag ON pag.processo = vfpc.processo
LEFT JOIN (
SELECT
d.proid,
d.dotnumero,
max(dotid) AS dotid
FROM par3.documentotermo d
WHERE d.dotstatus = 'A'
GROUP BY proid, dotnumero
) AS d_par3 ON d_par3.dotid = vfpc.dotid_par3
LEFT JOIN (
SELECT
d.proid,
d.dotnumero,
max(dotid) AS dotid
FROM par4.documentotermo d
WHERE d.dotstatus = 'A'
GROUP BY proid, dotnumero
) AS d_par4 ON d_par4.dotid = vfpc.dotid_par4
LEFT JOIN par3.documentotermo d3 ON d3.dotid = d_par3.dotid AND d3.dotstatus = 'A'
--par3 banco
LEFT JOIN par3.processo pro3 ON pro3.proid = d3.proid
LEFT JOIN par4.documentotermo d4 ON d4.dotid = d_par4.dotid AND d4.dotstatus = 'A'
--par4 banco
LEFT JOIN par4.processo pro4 ON pro4.proid = d4.proid
LEFT JOIN par.vm_relatorio_pc_me_situacao_fase AS vm_s_f_me ON vm_s_f_me.prpid = vfpc.prpid
LEFT JOIN par.vm_relatorio_pc_me_situacao_fase AS vm_s_f_me1 ON vm_s_f_me1.proid_pac = vfpc.proid_pac
LEFT JOIN par.vm_relatorio_pc_me_situacao_fase AS vm_s_f_me2 ON vm_s_f_me2.proid_par = vfpc.proid_par
LEFT JOIN par.vm_relatorio_pc_me_situacao_fase AS vm_s_f_me3 ON vm_s_f_me3.proid_par3 = vfpc.proid_par3
-- efeito susp
LEFT JOIN par.efeitosuspensivodocumento AS efeitosuspensivo ON efeitosuspensivo.prpid = vfpc.prpid
LEFT JOIN par.efeitosuspensivodocumento AS efeitosuspensivo1 ON efeitosuspensivo1.proid_pac = vfpc.proid_pac
LEFT JOIN par.efeitosuspensivodocumento AS efeitosuspensivo2 ON efeitosuspensivo2.proid = vfpc.proid_par
LEFT JOIN par.efeitosuspensivodocumento AS efeitosuspensivo3 ON efeitosuspensivo3.proid_par3 = vfpc.proid_par3
LEFT JOIN par.processoobra p ON p.proid = vfpc.proid_pac
LEFT JOIN par.processoobraspar p2 ON p2.proid = vfpc.proid_par
LEFT JOIN par.instrumentounidade io ON io.inuid = p2.inuid
LEFT JOIN par.processopar p3 ON p3.prpid = vfpc.prpid
LEFT JOIN par.instrumentounidade ip ON ip.inuid = p3.inuid
LEFT JOIN par3.processo p4 ON p4.proid = vfpc.proid_par3
LEFT JOIN par3.instrumentounidade ip4 ON ip4.inuid = p4.inuid
LEFT JOIN par4.processo p5 ON p5.proid = vfpc.proid_par4
LEFT JOIN par4.instrumentounidade ip5 ON ip5.inuid = p5.inuid
LEFT JOIN par.termocompromissopac t ON t.terid = vfpc.terid
-- pac banco
LEFT JOIN par.processoobra propac ON t.proid = propac.proid AND propac.prostatus = 'A'
LEFT JOIN par.documentopar d ON d.dopid = vfpc.dopid AND d.dopid IN (
SELECT dopid FROM (
SELECT
d.prpid,
d.dopnumerodocumento,
max(dopid) AS dopid
FROM par.documentopar d
WHERE d.dopstatus = 'A'
GROUP BY prpid, d.dopnumerodocumento
) lastdopid
)
-- banco obra par
LEFT JOIN par.processoobraspar proobrapar ON d.proid = proobrapar.proid AND proobrapar.prostatus = 'A'
-- banco par
LEFT JOIN par.processopar propar ON d.prpid = propar.prpid AND propar.prpstatus = 'A'
LEFT JOIN territorios.municipio m ON m.muncod = COALESCE(t.muncod, ip.muncod, io.muncod, ip4.muncod, ip5.muncod)
LEFT JOIN territorios.estado e ON e.estuf = COALESCE(t.estuf, ip.estuf, io.estuf, ip4.estuf, ip5.estuf)
LEFT JOIN par4.instrumentounidade mun ON mun.muncod = m.muncod AND mun.itrid = 2
LEFT JOIN par4.instrumentounidade est ON est.estuf = e.estuf AND est.itrid = 1
LEFT JOIN par4.instrumentounidade_entidade iemun ON iemun.inuid = mun.inuid
AND iemun.tenid = 1
AND iemun.entstatus = 'A'
AND iemun.entrazaosocial IS NOT NULL
AND iemun.entcnpj IN(p.procnpj, p2.procnpj, p3.prpcnpj, p4.procnpj, p5.procnpj)
LEFT JOIN par4.instrumentounidade_entidade ieest ON ieest.inuid = est.inuid
AND ieest.tenid = 3
AND ieest.entstatus = 'A'
AND ieest.entrazaosocial IS NOT NULL
AND ieest.entcnpj IN(p.procnpj, p2.procnpj, p3.prpcnpj, p4.procnpj, p5.procnpj)
LEFT JOIN par.termossigpcpar t2 ON t2.prpid = vfpc.prpid
LEFT JOIN par.termossigpcpar t3 ON t3.proid_pac = vfpc.proid_pac
LEFT JOIN par.termossigpcpar t4 ON t4.proid_par = vfpc.proid_par
LEFT JOIN par.modelosdocumentos m2 ON m2.mdoid = d.mdoid and m2.tpdcod in (16, 21, 102, 103)
LEFT JOIN par3.modelodocumento m3 ON m3.mdoid = d3.mdoid
LEFT JOIN par4.modelodocumento m4 ON m4.mdoid = d4.mdoid
wHERE 1 = 1
--AND vfpc.tipo = 'OBRA' AND vfpc.modulo = 'PAR3'
-- AND vfpc.processo = '23400004475201391'
--ORDER BY vfpc.modulo, vfpc.tipo;
) AS foo WHERE termo IS NOT NULL AND programa_projeto IS NOT NULL; --EXEC 22
--query para trazer a planilha que joão batista pediu de Prestação de Contas
select distinct
to_char(processo::bigint, 'FM00000"."000000"/"0000"-"00') as "N° do processo",
--termo as "Termo de Compromisso",
vrprx.uf as "UF",
municipio as "Município",
'' as "Origem dos recursos",
COALESCE(REPLACE(TO_CHAR(vlr_repassado, 'FM999999990.00'), '.', ','), '0,00') as "Valor total do recurso",
prazo_pc as "Data limite prestação de contas",
data_recibo as "Data efetiva prestação de contas",
primeiro_ob as "Ordem Bancária",
CASE
WHEN vrprx.itrid = 2
THEN
SUBSTRING(rrp.rrpcnpj FROM 1 FOR 2) || '.' ||
SUBSTRING(rrp.rrpcnpj FROM 3 FOR 3) || '.' ||
SUBSTRING(rrp.rrpcnpj FROM 6 FOR 3) || '/' ||
SUBSTRING(rrp.rrpcnpj FROM 9 FOR 4) || '-' ||
SUBSTRING(rrp.rrpcnpj FROM 13 FOR 2)
ELSE
SUBSTRING(rrs.rrscnpj FROM 1 FOR 2) || '.' ||
SUBSTRING(rrs.rrscnpj FROM 3 FOR 3) || '.' ||
SUBSTRING(rrs.rrscnpj FROM 6 FOR 3) || '/' ||
SUBSTRING(rrs.rrscnpj FROM 9 FOR 4) || '-' ||
SUBSTRING(rrs.rrscnpj FROM 13 FOR 2)
END as "CPF/CNPJ do beneficiário",
CASE
WHEN vrprx.itrid = 2 THEN (
SELECT STRING_AGG(rpref.usucpf, ', ')
FROM par.rollresponsaveisprefeitos rpref
WHERE rpref.muncod = vrprx.muncod
limit 1
)
ELSE (
SELECT STRING_AGG(rsec.usucpf, ', ')
FROM par.rollresponsaveissecretarios rsec
WHERE rsec.uf = vrprx.estuf
limit 1
)
END as "CPF/CNPJ dos Responsáveis",
'' as "Estágio do Processo",
substr(processo, 12, 4) AS"Ano do Processo",
termo as "Identificação do Repasse",
fase_pc_atual,
situcao_pc_atual as "situacao_pc_atual",
situacao_opc_atual,
fase_me,
situacao_me,
CASE
WHEN
(
SELECT COUNT(1)
FROM par.termossigpcpar tsp
LEFT JOIN par.processoobra po ON po.proid = tsp.proid_pac
LEFT JOIN par.processoobraspar pop ON pop.proid = tsp.proid_par
LEFT JOIN par.processopar pp ON pp.prpid = tsp.prpid
WHERE COALESCE(po.pronumeroprocesso, pop.pronumeroprocesso, pp.prpnumeroprocesso) = processo
LIMIT 1
) > 0
THEN
'Enviado via SIGPC'
ELSE
data_recibo
END as "Dt Recibo Envio"
from par.vm_relatorio_pc_relatorio_xlsx vrprx
left join par.rollresponsaveisprefeitos rrp on rrp.muncod = vrprx.muncod and vrprx.itrid = 2
left join par.rollresponsaveissecretarios rrs on rrs.uf = vrprx.estuf and vrprx.itrid = 1;
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment