;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Josias de Souza

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Na política do Rio, os males sempre vêm para pior

Fátima Meira/Futura Press/Estadão Conteúdo
Imagem: Fátima Meira/Futura Press/Estadão Conteúdo

Colunista do UOL

07/08/2022 10h50

Receba os novos posts desta coluna no seu e-mail

Email inválido

A polarização e a corrupção fizeram da conversa sobre política no Brasil um atempo duro de roer. No Rio de Janeiro, o suplício parece maior. Quando se está numa rodinha de amigos e o lero-lero descamba para a política, qualquer tentativa de mudar de assunto é inútil. Pode-se, no máximo, mudar de corrupto.

A principal revelação da série de reportagens do UOL sobre a Ceperj é que não há mais pecados originais na política do Rio. O Estado dedica-se agora a reciclar perversões manjadas. Inspirando-se no orçamento secreto, criou uma folha sigilosa. Mimetizando a rachadinha, produziu um milionário rachadão.

Por trás da sigla Ceperj esconde-se uma entidade de nome longo e pomposo: Fundação Centro Estadual de Estatísticas Pesquisas e Formação de Servidores Públicos do Rio de Janeiro. No papel, é uma "instituição pública sem fins lucrativos". Dedica-se à "capacitação, recrutamento, cultura, e produção de estatísticas e de estratégia de políticas públicas."

Na prática, a Ceperj converteu-se em usina de torrefação de verbas públicas a serviço do lucro financeiro e político dos seus usurpadores. Criou-se sob o governador fluminense Cláudio Castro uma folha secreta. Nela, foram pendurados mais de 27 mil apaniguados do governador e de seus aliados.

Nos primeiros sete meses deste ano eleitoral de 2022, os terceirizados secretos receberam na boca do caixa R$ 226,5 milhões. Suspeita-se que fantasmas e benfeitores racharam a grana. Há dentro do descalabro um escárnio. A exemplo do diabo, ele se esconde nos detalhes. E encosta a encrenca do Rio nos cofres do Tesouro Nacional.

O histórico de roubalheira e inépcia levou o Rio à breca. O estado deixou de pagar mais de R$ 50 bilhões em dívidas à União. Sob Michel Temer, aderiu a um "Regime de Recuperação Fiscal", rolando a dívida. Assumiu um lote de compromissos. Uma das obrigações seria o enxugamento da folha.

Antes de ser deposto sob a acusação de desviar verbas federais da pandemia, Wilson Witzel dizia ter bloqueado o preenchimento de 10.500 cargos públicos nos três poderes do estado. Herdeiro do trono, Cláudio Castro enfiou um contingente quase três vezes maior na folha secreta da Ceperj.

Se o Brasil fosse um país lógico, a União denunciaria o acordo de rolagem da dívida do Rio. E Castro seria candidato não à reeleição, mas a um inquérito em que o destino final do devido processo legal seria Bangu 8. Cinco ex-governadores do Rio já fizeram escala na cadeia. Um deles, Sergio Cabral, continua em cana. Witzel entrou na fila depois do impeachment.

Castro, abalroado pelo novo escândalo, reivindica do Ministério Público a de um "Termo de Ajuste de Conduta". Estalando de pureza moral, o governador manifesta o desejo de "corrigir as falhas e dar total transparência aos importantes programas sociais vinculados à fundação Ceperj".

A despeito de tudo, Cláudio Castro frequenta as pesquisas eleitorais como um candidato competitivo à reeleição. Uma evidência de que, no Rio de Janeiro, os males sempre vêm para pior.