extracao_par3_script.sql 9.96 KB
Newer Older
MATEUS GUIZELINI JARDIM committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
SELECT
	distinct
						pro.proid,
						CASE WHEN iu.muncod IS NULL THEN est.estuf ELSE mun.estuf END AS "UF",
						mun.mundescricao as "Entidade",
						to_char(pro.pronumeroprocesso::bigint, 'FM00000"."000000"/"0000"-"00') as "Processo",
						dot.dotnumero||'-'||dot.intoid as "Documento", 
						to_char(dot.dotdatafimvigencia, 'DD/MM/YYYY') as "Vigência",
						(case
                            when mdo.mdoex_oficio = 'S' then 'Validado'
                            when (select dotsq1.dotcancelado from par3.documentotermo as dotsq1 where dotsq1.proid = pro.proid and dotsq1.dotcancelado = 'S' limit 1) = 'S' then 'Cancelado'
                        else
                            CASE WHEN mdo.mdoqtdvalidacao <= (SELECT COUNT(dv.dtvid) FROM par3.documentotermovalidacao dv WHERE dv.dotid = dot.dotid AND dv.dtvstatus = 'A')
                                THEN 'Validado'
                                ELSE 'Não Validado' 
                            end
                        end) as "Validação",
						ito.intodsc AS "Tipo",
						ini.iniid as "Código da Iniciativa",
                      	ind.inddsc AS "Iniciativa",
                      	ipic.ipiano AS "Ano",
                      	--sum(vip.vlriniciativa::NUMERIC(20,2)) AS "Valor da Iniciativa",
                      	--COALESCE(REPLACE(TO_CHAR(sum(vip.vlriniciativa), 'FM999999990.00'), '.', ','), '0,00') AS "Valor da Iniciativa",
                      	TO_CHAR(sum(vip.vlriniciativa), 'FM9999999D99')  AS "Valor da Iniciativa",
                      	--sum(vip.vlriniciativa) AS "Valor da Iniciativa",
                      	COALESCE(REPLACE(TO_CHAR(vlrempenho, 'FM999999990.00'), '.', ','), '0,00') as "Valor Empenhado",
						COALESCE(REPLACE(TO_CHAR(vlr_pg_efetivado, 'FM999999990.00'), '.', ','), '0,00') as "Valor Pago",
						--null as "Situação Pagamento",
						CASE WHEN est.estuf IS NULL THEN 'Municipal' ELSE 'Estadual' END as "Esfera",
						--null as "Subação de Emenda",
						CASE 
						    WHEN ini.inistatus = 'A' THEN 'Ativo'
						    WHEN ini.inistatus = 'I' THEN 'Inativo'
						    ELSE 'Cópia'
						END AS "Status da Iniciativa",
						(select sum(ipiquantidade)
							from par3.iniciativa_planejamento_item_composicao ipic1 
								inner join par3.iniciativa_planejamento ip1 on ipic1.inpid = ip1.inpid
									where ip1.inpid = ip.inpid 
										and ipic1.ipiano = ipic.ipiano) as "Quantidade de Itens Planejados",
						(select sum(ipiquantidade)
							from par3.iniciativa_planejamento_item_composicao ipic1 
								inner join par3.iniciativa_planejamento ip1 on ipic1.inpid = ip1.inpid
									where ip1.inpid = ip.inpid 
										and ipic1.ipiano = ipic.ipiano) as "Quantidade de Itens Validados",
						CASE 
						    WHEN EXISTS (
						        SELECT 1
						        FROM par3.vm_relatorio_quantitativo_pendencias vrqp 
						        WHERE vrqp.inuid = pro.inuid
						          AND habilitacao = TRUE
						    ) 
						    THEN 'Sim' 
						    ELSE 'Não' 
						END AS "Habilitação",
						CASE 
						    WHEN EXISTS (
						        SELECT 1
						        FROM par3.vm_relatorio_quantitativo_pendencias vrqp 
						        WHERE vrqp.inuid = pro.inuid
						          AND (
						              habilitacao = TRUE OR 
						              cae = TRUE OR 
						              contas = TRUE OR 
						              monitoramento_par = TRUE OR 
						              obras_par = TRUE OR 
						              cacs = TRUE OR 
						              pne = TRUE OR 
						              siope = TRUE
						          )
						    ) 
						    THEN 'Sim'
						    ELSE 'Não' 
						END AS "Pendência",
						case
							when
								(SELECT count(1)
				                    FROM par3.processo p
				                    INNER JOIN par3.execucao_contrato ec on ec.proid = p.proid AND ec.ecostatus = 'A' and p.prostatus = 'A'
				       				where p.proid = pro.proid 
				       				limit 1) > 0
				             THEN 'Sim'   
						     else 'Não'
						end
						as "Contrato Inserido",
						case
							when
								(SELECT count(1)
				                    FROM par3.processo p
				                    INNER JOIN par3.execucao_notafiscal en on en.proid = p.proid AND en.ntfstatus = 'A' and p.prostatus = 'A'
				       				where p.proid = pro.proid
				       				limit 1) > 0
				             THEN 'Sim'   
							 else 'Não'
						end
						as "Nota Fiscal Inserida",
						(select count(1)
							from par3.iniciativa_planejamento_item_composicao ipic1 
								inner join par3.iniciativa_planejamento ip1 on ipic1.inpid = ip1.inpid
									where ip1.inpid = ip.inpid 
										and ipic1.ipiano = ipic.ipiano) as "Quantidade de Escolas Atendidas",
						( SELECT (case when epc.epcstatus = 'A' then to_char(epc.epcdatavalidacao, 'DD/MM/YYYY')  ELSE ''
                        END) FROM par3.execucao_prestacao_contas epc where epc.proid = pro.proid and epc.epcstatus = 'A'  ORDER BY epc.epcid desc LIMIT 1
							) as "Data Envio PC",
							COALESCE((
							  SELECT 
							    CASE 
							      WHEN epc2.epcstatus = 'A' THEN 'Enviado'
							      ELSE 'Não Enviado'
							    END
							  FROM par3.execucao_prestacao_contas epc2
								  WHERE epc2.epcid = (
								    SELECT epc3.epcid 
								    	FROM par3.execucao_prestacao_contas epc3
								    		WHERE epc3.proid = pro.proid
								    			ORDER BY epc3.epcid DESC
								    			LIMIT 1
							  )
							), 'Não Enviado') AS "Situação Envio PC",
					    --null  as "Fase Análise PC",
					    CASE 
						    WHEN ed.esddsc is not NULL 
						    THEN ed.esddsc
						    ELSE 'Não Iniciado'
						END  as "Situação Análise PC",
						--null as "Conclusão PC",
						--null as "Data Conclusão Análise PC",
						(par.retornasaldoprocesso(pro.pronumeroprocesso)) as "Saldo CC",
						CASE 
							WHEN EXISTS (
						        SELECT 1
						        FROM par3.vm_relatorio_quantitativo_pendencias vrqp 
						        WHERE vrqp.inuid = pro.inuid
						          AND cacs = TRUE
						    )
						    THEN 'Sim' 
					        ELSE 'Não' 
						END AS "Manifestação CACS"
                    FROM par3.processo pro 
                    	JOIN(
    					    SELECT pp.proid, sum(ai.aicqtdaprovado::numeric * ai.aicvaloraprovado) AS vlriniciativa, a.inpid, 'P' AS tipo_processo
                            FROM par3.processoparcomposicao pp
                                JOIN par3.analise_itemcomposicao ai ON pp.anaid = ai.anaid
                                JOIN par3.analise a ON ai.anaid = a.anaid and a.anastatus = 'A'
                            WHERE pp.ppcstatus = 'A' AND ai.aicstatus = 'A'
                			GROUP BY pp.proid, a.inpid
    	     				UNION ALL /*bem aqui tem um union all*/
							SELECT po.proid, sum(o.obrvalor) AS vlriniciativa, o.inpid, 'O' as tipo_processo
							FROM par3.obra o
								INNER JOIN par3.processoobracomposicao po ON po.obrid = o.obrid AND po.pocstatus = 'A'
							WHERE o.obrstatus = 'A' GROUP BY po.proid, o.inpid
    				    ) AS vip ON vip.proid = pro.proid
                    	left join par3.vm_relatorio_quantitativo_pendencias vmrqp on pro.inuid = vmrqp.inuid
                      INNER JOIN par3.documentotermo dot ON pro.proid = dot.proid AND dot.dotstatus = 'A'
                      Left join workflow.documento d on d.docid = dot.docid --and d.esdid = 2447
                      left JOIN workflow.estadodocumento AS ed ON d.esdid = ed.esdid
                      INNER JOIN par3.modelodocumento mdo ON dot.mdoid = mdo.mdoid                      
                      INNER JOIN par3.iniciativa_tipos_objeto ito ON ito.intoid = dot.intoid
                      LEFT JOIN par3.processoobracomposicao poc ON poc.proid = dot.proid and poc.pocstatus = 'A'
                      LEFT JOIN obras2.obras o ON o.obrid_par3 = poc.obrid
                      LEFT JOIN LATERAL (SELECT obrid, obrid_par3, COUNT(obrid) as totalobrid FROM obras2.obras obr WHERE obr.obrid_par3 = poc.obrid and obr.obridpai is null and obrstatus = 'A' GROUP BY obrid) v on true
                      LEFT JOIN LATERAL (SELECT sum(vlrempenho) as vlrempenho, sum(vlr_pg_efetivado) as vlr_pg_efetivado
                                         FROM par3.v_saldo_empenho_do_processo vsaldo
                                         WHERE vsaldo.proid = dot.proid ) v2 on true
                      JOIN par3.instrumentounidade iu on iu.inuid = pro.inuid and iu.inustatus = 'A'
                      LEFT JOIN territorios.municipio mun on mun.muncod = iu.muncod
                     LEFT JOIN territorios.estado est on est.estuf = iu.estuf
                     Join par3.processoparcomposicao pp ON pp.proid = pro.proid
                     JOIN par3.iniciativa_planejamento ip on ip.inpid = pp.inpid
                     inner join par3.iniciativa_planejamento_item_composicao ipic on ipic.inpid = ip.inpid
                     JOIN par3.iniciativa ini on ini.iniid = ip.iniid --AND ini.inistatus = 'A'
                     INNER JOIN par3.iniciativa_descricao ind on ind.indid = ini.indid

                    WHERE dotstatus = 'A'
                      AND  dot.dotid NOT IN ( SELECT coalesce(par3.retornar_termo_pendente_validacao(dot.dotid)::integer,0) )
                      and pro.prostatus = 'A'
                      --AND pro.pronumeroprocesso = '23400000017201978'

                    GROUP BY
                        pro.pronumeroprocesso,  
								mdo.mdonome,
								ito.intodsc,                      
                      dot.dotnumero,
							 dot.intoid,                      
							  est.estuf, 
							  mun.estuf,							  
                        iu.muncod,
								 est.estdescricao,
								 mun.mundescricao,
								dot.dotdatafimvigencia,
								dotdatafimvigencia,                         
								dot.dotvalortermo,
								vlrempenho,
								vlr_pg_efetivado,
                      	ind.inddsc,
                      	ed.esddsc,
                      	ini.iniid,
                      	ip.inpid,
                      	ipic.ipiano,
                      	mdo.mdoex_oficio,
                      	mdo.mdoqtdvalidacao,
                      	dot.dotid,
                      			pro.proid							
								--limit 10;