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

Estudo da Unicamp indica lockdown em SP se isolamento não aumentar

14/05/2020 06h00

Um modelo matemático desenvolvido na Universidade Estadual de Campinas (Unicamp) indica que, caso o isolamento social no estado de São Paulo não aumente nos próximos dias para conter a disseminação da covid-19, a adoção de lockdown (isolamento total obrigatório) será necessário para evitar que o sistema público de saúde atinja o limite da capacidade de atendimento. 

O estudo, divulgado na terça-feira (12), é baseado em um modelo matemático desenvolvido pelo professor do Instituto de Geociências da Unicamp e coordenador do Programa Especial Indicadores de Ciência, Tecnologia e Inovação da Fundação de Amparo à Pesquisa (Fapesp), o matemático Renato Pedrosa.

O modelo utiliza dados reais do crescimento do número de casos de covid-19 do mês de abril em São Paulo, que indicam taxa de contágio da doença de 1,49 para o estado de São Paulo e de 1,44 para a capital. Essa taxa significa que, no final de abril, cada 100 paulistas infectados pelo novo coronavírus transmitiam covid-19 para 149 pessoas, em média, ao longo de um período de cerca de 7,5 dias após se contaminar. No caso dos paulistanos, habitantes da capital, 100 deles infectavam 144 pessoas no período de 7,5 dias. 

A taxa de contágio é afetada diretamente pelo nível de isolamento social da localidade analisada, ou seja, quanto maior o nível de isolamento, menor é a taxa de contágio, já que, com maior isolamento, o encontro entre as pessoas diminui e, consequentemente, de transmissão da doença.

O estudo ressalta que mantidos esses níveis de contágio, e as taxas de isolamento que, em média, estão abaixo dos 50%, os valores projetados indicam que, ainda em maio, o sistema público de saúde da Região Metropolitana de São Paulo (RMSP) atingirá seu limite de atendimento, considerando que o nível de ocupação de leitos de unidades de terapia intensiva (UTIs) já está acima de 80%.

"É urgente que se amplie o nível de isolamento, provavelmente acima de 65%, para que o crescimento da doença nas próximas semanas, seja contido, mesmo considerando-se o efeito da obrigatoriedade do uso de máscaras. Se isso não for alcançado, São Paulo terá que adotar medidas mais drásticas de contenção, como o lockdown, ou seja, o isolamento total obrigatório, como ocorreu na Itália e na França, caso contrário estaremos numa situação insustentável, tanto na capital como no estado como um todo", destacou o matemático em artigo sobre a pesquisa.

O modelo desenvolvido pode ser usado para projetar a dinâmica de transmissão da covid-19 em outras localidades, já que ele leva em consideração as variáveis climáticas, a densidade populacional e a linha do tempo da instalação da doença. O matemático usou dados de 50 estados norte-americanos e de 110 países, incluindo o Brasil.

Confira o estudo aqui