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

App que monitora covid poupou vidas no Reino Unido; Brasil ignorou medida

App NHS Covid reúne rastreamento de contato e informações sobre covid-19 - Unsplash
App NHS Covid reúne rastreamento de contato e informações sobre covid-19 Imagem: Unsplash

Aurélio Araújo

Colaboração para Tilt

16/05/2021 04h00

Um novo estudo sugere que o uso de sistemas de rastreamento de contato ajudou a salvar milhares de vidas no Reino Unido. Publicado pela revista "Nature", o levantamento diz que quase 9.000 pessoas foram salvas na Inglaterra e no País de Gales graças ao app NHS Covid-19, que usa um sistema de notificação de exposição à doença desenvolvido por Apple e Google. O Brasil tem uma solução semelhante com o app Coronavírus-SUS, mas que não teve muito sucesso por falta de explicação e divulgação da ferramenta.

A pesquisa mostra que o app do NHS, o sistema de saúde público britânico, pode ter salvado a vida de entre 4.200 a 8.700 pessoas - o Reino Unido registra mais de 128 mil mortes pela covid-19 até o momento. Segundo o estudo, cada aumento de ponto percentual no uso do aplicativo resultava em uma redução de 0,79% dos casos.

"Nossa análise sugere que um grande número de casos da covid-19 foi evitado por rastreamento de contato através do aplicativo NHS, variando de aproximadamente 100 mil a 900 mil, dependendo dos detalhes metodológicos", acrescenta o estudo.

Os pesquisadores avaliaram o uso do app entre setembro e dezembro de 2020. Ao todo, 16,5 milhões de pessoas instalaram a aplicação (o equivalente a 28% da população do Reino Unido), e foram enviadas 1,7 milhão de notificações de exposição.

Integração com testes

O estudo sugere que a integração dos aplicativos com os testes da covid-19 foram importantes para controlar a disseminação da doença. Isso porque "os testes ordenados por meio do aplicativo acionam ações automaticamente, sem exigir que o usuário insira o resultado no app", o que acelera o rastreamento de contato.

Além disso, o estudo teoriza sobre como a funcionalidade dos aplicativos contribuíram para sua eficácia. O levantamento sugere que quem instalou o aplicativo costuma manter o distanciamento social acima do que teria feito caso não possuísse a aplicação, já que estaria ciente de que "ele monitora a distância e pode aconselhar a quarentena posteriormente".

"O uso de smartphones já é global e, portanto, os aplicativos de rastreamento de contato que preservam a privacidade devem ser integrados ao kit de ferramentas de saúde pública", conclui o estudo.

No Brasil, app fracassou por falta de uso

Muita gente nem ficou sabendo, mas em março de 2020 o governo divulgou o aplicativo Coronavírus-SUS, que depois ou a ter a função de rastreamento de contato. O funcionamento era semelhante ao app do NHS, ou seja, daria para saber quando alguém doente chegou perto de você usando o recurso de Bluetooth dos celulares.

Contudo, esse app nacional "flopou" basicamente porque ninguém explicou como a ferramenta funciona e por não haver uma campanha mostrando os benefícios da aplicação.

O Coronavírus-SUS ou a usar a tecnologia da Apple e da Google em agosto do ano ado. Sua divulgação foi feita prioritariamente pela imprensa e no canal do YouTube do Ministério da Saúde, que registrou menos de 10 mil visualizações na época.

A pouca divulgação pode ter refletido na adesão mínima dos brasileiros ao recurso. Até abril deste ano, o Coronavírus-SUS teve 61,5 milhões de s, segundo dados do Ministério da Saúde a Tilt. Mas eram apenas 2,3 milhões de usuários ativos até fevereiro de 2021, ou seja, menos de 1% da população brasileira.

Contudo, Claudio Miceli, professor de engenharia de sistemas e computação da UFRJ (Universidade Federal do Rio de Janeiro), não credita o fracasso do Coronavírus-SUS apenas à falta de divulgação. Ele afirma que o rastreamento de contato esbarra em uma questão técnica que incomoda o brasileiro: a bateria do smartphone.

"De modo geral, o brasileiro não costuma deixar o Bluetooth ligado, pois gasta bateria. O app faz sentido do ponto de vista tecnológico, mas na prática, talvez, não fosse o suficiente para o Brasil", explicou.

Outro ponto levantado por ele é que todo brasileiro tem smartphone e o app do SUS tem compatibilidade limitada —para usá-lo, é necessário ter um iPhone com no mínimo iOS 13 ou um celular com sistema Android 6.0 ou superior.