;(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
Logo Pagbenk Seu dinheiro rende mais
Topo

Carla Araújo

REPORTAGEM

Texto que relata acontecimentos, baseado em fatos e dados observados ou verificados diretamente pelo jornalista ou obtidos pelo o a fontes jornalísticas reconhecidas e confiáveis.

Ciro quer evitar bobagem no Orçamento e 'recria' Ministério do Planejamento

Jair Bolsonaro e Ciro Nogueira em posse do novo ministro - Isac Nóbrega/PR
Jair Bolsonaro e Ciro Nogueira em posse do novo ministro Imagem: Isac Nóbrega/PR

Do UOL, em Brasília

26/01/2022 14h42

Receba os novos posts desta coluna no seu e-mail

Email inválido

Uma decisão do ministro da Casa Civil, Ciro Nogueira, tem sido apontada no Palácio do Planalto como uma espécie de recriação do Ministério do Planejamento.

Após conquistar mais poder para executar o Orçamento de 2022 e esvaziar atribuições do ministro da Economia, Paulo Guedes, Nogueira decidiu deixar nas mãos de um técnico a definição sobre o destino de parte dos recursos públicos.

Na prática, cabe ao secretário especial de Relações Governamentais da Casa Civil, Bruno Cesar Grossi de Souza, conciliar as vontades políticas do centrão e as questões técnicas para viabilizar as determinações da base política do governo Bolsonaro em um ano eleitoral.

Aliados do ministro da Casa Civil argumentam que o ree da coordenação e supervisão do Orçamento se justifica para evitar uma barbeiragem, já que as operações orçamentárias são técnicas e vão além das vontades políticas. "Ele precisou de um técnico para não fazer bobagem", afirmou um auxiliar.

A avaliação feita por ministros da ala política é de que a união dos ministérios da Fazenda e do Planejamento, que antes era o responsável pela execução do Orçamento, foi um erro do governo do presidente Jair Bolsonaro.

O centrão, que tem no Planalto ministros como Nogueira e Flávia Arruda (Secretaria de Governo), pressiona o governo desde o início para tentar separar as duas pastas, mas Guedes resistiu como pode.

Apesar de ser remota a possibilidade de Bolsonaro recriar a pasta em ano eleitoral, agora a função de Grossi está sendo tratada informalmente como a de um novo ministro. Com um detalhe importante: ele ainda responde a Nogueira.

Perfil técnico

Servidor público federal, Grossi ingressou em 1998 como analista de Planejamento e Orçamento na SOF (Secretaria de Orçamento Federal), onde ficou até 2014.

Deixou a secretaria por dois anos e retornou ao cargo em 2016, onde permaneceu até 2020, quando foi nomeado pelo presidente Bolsonaro para um cargo na Secretaria de Assuntos Estratégicos (SAE), já com cargo no Palácio do Planalto.

ou rapidamente pela Secretaria-Geral da Presidência e ocupa o atual cargo da Casa Civil desde dezembro de 2020.

Guedes vê 'alinhamento'

A ideia de que houve esvaziamento do poder de Guedes no governo é rechaçada por auxiliares do ministro.

Grossi foi avaliado por membros do Ministério da Economia como uma espécie de tradutor técnico para evitar rompantes populistas no Orçamento.

Membros da equipe econômica dizem que ele "é um dos melhores técnicos de Orçamento" e que há um "alinhamento muito grande" com o time técnico de Guedes.

De acordo com auxiliares do ministro, Grossi terá a função de ajudar na articulação e comunicação com o Palácio e minimizar ruídos.

Há o receio de que, por demandas eleitorais, por exemplo, o Orçamento volte a ser chamada de "peça de ficção" ou de "contabilidade criativa".