;(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

SP: Prefeitura descarta reativação de hospitais de campanha para covid-19

Hospital de Campanha do Anhembi, que recebeu pacientes com covid-19 até setembro - Talyta Vespa/UOL
Hospital de Campanha do Anhembi, que recebeu pacientes com covid-19 até setembro Imagem: Talyta Vespa/UOL

Felipe Pereira

Do UOL, em São Paulo

30/11/2020 04h00

Mesmo em meio ao aumento de casos e internações por causa da covid-19, as autoridades municipais de Saúde de São Paulo descartam recorrer a hospitais de campanha. Uma das justificativas é que estas unidades foram importantes no começo da pandemia do novo coronavírus para dar tempo de reforçar o sistema hospitalar, que ganhou oito novas unidades.

O UOL apurou que, na avaliação deles, já houve um incremento na infraestrutura e, por isso, existe uma ampla margem de atendimento de pacientes, que afasta chances de colapso do sistema.

As autoridades de Saúde também citam uma maior capacidade de resposta rápida do sistema de saúde. Para exemplificar este argumento, dizem que, na última semana, a reconfiguração de três unidades permitiu abrir 200 leitos de enfermaria e 20 de UTIs.

Por último, haveria um acompanhamento da disseminação do coronavírus com o anúncio de mais quatro etapas do inquérito sorológico que devem ocorrer em dezembro e janeiro. A Prefeita de São Paulo usa os resultados destes levantamentos para definir as ações de controle da pandemia.

Reclassificação do Plano São Paulo

O governo estadual anuncia hoje a nova classificação das regiões no Plano São Paulo, o programa que regula o funcionamento das atividades econômicas.

O UOL apurou também que a Prefeitura de São Paulo mantém a avaliação de que a pandemia está controlada na cidade, mas decidiu acatar um eventual aumento das restrições sem medo de ser tachada de oportunista pela alteração ocorrer no dia seguinte às eleições.

O discurso a ser adotado é que a mudança nas normas de funcionamento dos estabelecimentos não será tão grande.

Hoje, 76% da população do estado vive em regiões na fase verde, a segunda menos restritiva. A cidade de São Paulo está neste grupo, mas o crescimento de internações na Região Metropolitana pode levar ao rebaixamento para a fase amarela —o que limita o horário de funcionamento e capacidade de clientes em setores como shoppings, comércio de rua, bares, restaurantes, salões de beleza e academias.

O indicativo que pode tirar a capital da fase verde é o número de leitos por 100 mil habitantes. Autoridades municipais alegam que a pressão vem de cidades vizinhas. O argumento já foi usado antes.

Um gráfico distribuído pela Secretaria Municipal de Saúde na semana ada indica que 20% dos pacientes internados são de outros locais. Em março, primeiro mês da pandemia, o percentual era de 13%.

As cidades do ABC estão com alta nas internações. A Baixada Santista também pode sofrer regressão.