From 3bc27f77c784bb1566d7ac96247e120a9067d8d3 Mon Sep 17 00:00:00 2001 From: RONALDO RODRIGUES DE OLIVEIRA Date: Tue, 22 Apr 2025 15:04:11 -0300 Subject: [PATCH] Function principal que executa as cargas de declaração de omissão semiautomática. --- declaracao_omissao/5-function-par-omisso_declarado_par-semiautomatico.sql | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 declaracao_omissao/5-function-par-omisso_declarado_par-semiautomatico.sql diff --git a/declaracao_omissao/5-function-par-omisso_declarado_par-semiautomatico.sql b/declaracao_omissao/5-function-par-omisso_declarado_par-semiautomatico.sql new file mode 100644 index 0000000..80a2eed --- /dev/null +++ b/declaracao_omissao/5-function-par-omisso_declarado_par-semiautomatico.sql @@ -0,0 +1,167 @@ +-- drop function if exists par.omisso_declarado_candidato_par() + +create or replace function par.omisso_declarado_candidato_par() + returns table ( + _processo varchar, + _prpid int, + _dopid int, + _numero_termo bigint, + _fase_pc_esddsc varchar, + _fase_pc_esdid int, + _situacao_da_pc_esddsc varchar, + _situacao_da_pc_esdid int, + _situacao_da_opc_esddsc varchar, + _situacao_da_opc_esdid int, + _muncod varchar, + _datainiciovigencia date, + _datafimvigencia date, + _total_cpf_ciencia int, + _contador_responsavel int, + _contador_ciencia int, + _aux_cpf_ciencia text, + _aux_cpf_responsavel text + ) + LANGUAGE plpgsql + AS $$ + DECLARE + dt_limite_envio_pc date; + total_cpf_ciencia integer default 0; + contador_ciencia integer default 0; + contador_responsavel integer default 0; + last_insert_odeid integer default 0; + aux_cpf_ciencia text; + aux_cpf_responsavel text; + sem_dtinicio_mandato integer default 0; + programa record; + cpfs_ciencia record; + cpfs_responsavel record; + BEGIN + FOR programa IN( + WITH wf_documento_estado AS + ( + SELECT + esd.esddsc, docid, doc.esdid + FROM workflow.documento doc + INNER join workflow.estadodocumento esd ON doc.esdid = esd.esdid + where doc.tpdid in (303, 336, 335, 328, 344, 345, 443, 444, 442 ) + ) + SELECT + distinct processo, prpid, dopid, numero_termo, situacao_da_pc as situacao_da_pc_docid, fase_pc_esddsc, fase_pc_esdid, situacao_da_pc_esddsc, situacao_da_pc_esdid, + situacao_da_opc_esddsc, situacao_da_opc_esdid, muncod, datainiciovigencia, datafimvigencia + FROM( + select + DISTINCT + prp.prpnumeroprocesso as processo, + prp.prpid as prpid, + dop.dopid as dopid, + dop.dopnumerodocumento as numero_termo, + dpp.docid as fase_pc, + spc.docid AS situacao_da_pc, + opc.docid AS situacao_da_opc, + inu.muncod as muncod, + to_date('01/'||dop.dopdatainiciovigencia,'DD/MM/YYYY') as datainiciovigencia, + to_date('31/'||dop.dopdatafimvigencia,'DD/MM/YYYY') as datafimvigencia, + (SELECT esd2.esdid from workflow.estadodocumento esd2 INNER join workflow.documento doc2 ON doc2.esdid = esd2.esdid where doc2.docid = dpp.docid) AS fase_pc_esdid, + (SELECT esd2.esdid from workflow.estadodocumento esd2 INNER join workflow.documento doc2 ON doc2.esdid = esd2.esdid where doc2.docid = spc.docid) AS situacao_da_pc_esdid, + (SELECT esd2.esdid from workflow.estadodocumento esd2 INNER join workflow.documento doc2 ON doc2.esdid = esd2.esdid where doc2.docid = opc.docid) AS situacao_da_opc_esdid, + (SELECT esd2.esddsc from workflow.estadodocumento esd2 INNER join workflow.documento doc2 ON doc2.esdid = esd2.esdid where doc2.docid = dpp.docid) AS fase_pc_esddsc, + (SELECT esd2.esddsc from workflow.estadodocumento esd2 INNER join workflow.documento doc2 ON doc2.esdid = esd2.esdid where doc2.docid = spc.docid) AS situacao_da_pc_esddsc, + (SELECT esd2.esddsc from workflow.estadodocumento esd2 INNER join workflow.documento doc2 ON doc2.esdid = esd2.esdid where doc2.docid = opc.docid) AS situacao_da_opc_esddsc + FROM par.processopar prp + INNER JOIN par.documentopar dop ON dop.prpid = prp.prpid AND dopstatus = 'A' and prp.prpstatus = 'A' + INNER JOIN par.modelosdocumentos mdo ON mdo.mdoid = dop.mdoid AND mdostatus = 'A' and tpdcod in (16, 21, 102, 103) + INNER JOIN par.instrumentounidade inu ON inu.inuid = prp.inuid + left JOIN par.situacaoopc opc ON opc.prpid = prp.prpid + left JOIN par.situacaoprestacaocontas spc ON spc.prpid = prp.prpid + left JOIN par.documentoparprestacaodecontas dpp ON dpp.prpid = prp.prpid + ) as sql + left join wf_documento_estado situacao_da_opc on sql.situacao_da_opc = situacao_da_opc.docid + left join wf_documento_estado situacao_da_pc on sql.situacao_da_pc = situacao_da_pc.docid + left join wf_documento_estado doc_est on sql.fase_pc = doc_est.docid + where + datainiciovigencia is not null and fase_pc_esdid='2005' and situacao_da_pc_esdid='2305' and situacao_da_opc_esdid='2298' + ) LOOP + sem_dtinicio_mandato := (SELECT count(*) FROM par.rollresponsaveisprefeitos WHERE muncod = programa.muncod and rrpdtiniciomandato isnull); + IF sem_dtinicio_mandato < 1 THEN + + aux_cpf_ciencia := ''; + aux_cpf_responsavel := ''; + contador_responsavel := 0; + total_cpf_ciencia := 0; + dt_limite_envio_pc := (select data_limite_pc from par.data_limite_pc(programa.processo::text)); + + FOR cpfs_responsavel IN( select _cpf as cpf from par.get_responsaveis_termo_par(programa.muncod, programa.processo, programa.prpid, programa.dopid, programa.datainiciovigencia, programa.datafimvigencia, 'PAR') ) + LOOP + IF contador_responsavel = 0 THEN + aux_cpf_responsavel := cpfs_responsavel.cpf; + ELSE + aux_cpf_responsavel := concat(aux_cpf_responsavel,',',cpfs_responsavel.cpf); + END IF; + contador_responsavel := contador_responsavel + 1; + contador_ciencia := 0; + FOR cpfs_ciencia IN ( select distinct _cpf as cpf from par.get_ciencias_termo(programa.prpid, programa.dopid) ) + LOOP + IF (contador_ciencia = 0 ) THEN + aux_cpf_ciencia := cpfs_ciencia.cpf; + ELSE + aux_cpf_ciencia := concat(aux_cpf_ciencia,',',cpfs_ciencia.cpf) ; + END IF; + IF cpfs_responsavel.cpf = cpfs_ciencia.cpf THEN + total_cpf_ciencia := total_cpf_ciencia + 1; + END IF; + contador_ciencia := contador_ciencia + 1; + END LOOP; + + END LOOP; + + IF (contador_responsavel > 0) and ( contador_ciencia > 0 ) and (total_cpf_ciencia >= contador_responsavel) THEN + IF( select not exists( select * from par.omissodeclarado where prpid in(programa.prpid) ) ) THEN + insert into par.omissodeclarado(prpid, dopid, programa) values(programa.prpid, programa.dopid, 'PAR') returning par.omissodeclarado.odeid into last_insert_odeid; + FOR cpfs_responsavel in( select distinct _rrpid as rrpid, _cpf as cpf , _nomeprefeito as nomeprefeito, _dtiniciomandato as dtiniciomandato, _dtfimmandato as dtfimmandato, _naturezainteresse as naturezainteresse + from par.get_responsaveis_termo_par(programa.muncod, programa.processo, programa.prpid, programa.dopid, programa.datainiciovigencia, programa.datafimvigencia, 'PAR') + ) + LOOP + insert into par.responsaveisomisso (odeid, usucpf, dtiniciomandato, dtfimmandato, naturezainteresse, rrpid ) + values(last_insert_odeid, cpfs_responsavel.cpf, cpfs_responsavel.dtiniciomandato, cpfs_responsavel.dtfimmandato, cpfs_responsavel.naturezainteresse, cpfs_responsavel.rrpid); + + END LOOP; + + FOR cpfs_ciencia IN ( select _id as id, _cpf as cpf, _tipo as tipo from par.get_ciencias_termo(programa.prpid, programa.dopid) ) + LOOP + IF NOT EXISTS( select * from par.cienciasomisso where opcid = cpfs_ciencia.id or npid = cpfs_ciencia.id or negid = cpfs_ciencia.id ) THEN + IF cpfs_ciencia.tipo = 'omissaopcente' then + insert into par.cienciasomisso(odeid, usucpf, opcid ) values(last_insert_odeid, cpfs_ciencia.cpf, cpfs_ciencia.id); + elsif cpfs_ciencia.tipo = 'notificacaoexgestor' then + insert into par.cienciasomisso(odeid, usucpf, negid) values(last_insert_odeid, cpfs_ciencia.cpf, cpfs_ciencia.id); + ELSE + insert into par.cienciasomisso(odeid, usucpf, npid) values(last_insert_odeid, cpfs_ciencia.cpf, cpfs_ciencia.id); + END IF; + END IF; + END LOOP; + + update par.omissodeclarado set andamento='fase-1' where prpid in(programa.prpid); + _processo := programa.processo; + _prpid := programa.prpid; + _dopid := programa.dopid; + _numero_termo := programa.numero_termo; + _fase_pc_esddsc := programa.fase_pc_esddsc; + _fase_pc_esdid := programa.fase_pc_esdid; + _situacao_da_pc_esddsc := programa.situacao_da_pc_esddsc; + _situacao_da_pc_esdid := programa.situacao_da_pc_esdid; + _situacao_da_opc_esddsc := programa.situacao_da_opc_esddsc; + _situacao_da_opc_esdid := programa.situacao_da_opc_esdid; + _muncod := programa.muncod; + _datainiciovigencia := programa.datainiciovigencia; + _datafimvigencia := programa.datafimvigencia; + _total_cpf_ciencia := total_cpf_ciencia; + _contador_ciencia := contador_ciencia; + _contador_responsavel := contador_responsavel; + _aux_cpf_ciencia := aux_cpf_ciencia; + _aux_cpf_responsavel := aux_cpf_responsavel; + RETURN NEXT; + END IF; + END IF; + END IF; + END LOOP; +END; $$ + -- libgit2 0.25.0