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

'Não ganhei R$ 0,01': quem é autor do flagra à vacina falsa de Bolsonaro

Marcelo Oliveira, engenheiro de software, que integrou o grupo Infovid e flagrou vacina falsa no cartão de Jair Bolsonaro - Arquivo Pessoal/Marcelo Oliveira
Marcelo Oliveira, engenheiro de software, que integrou o grupo Infovid e flagrou vacina falsa no cartão de Jair Bolsonaro Imagem: Arquivo Pessoal/Marcelo Oliveira

Ruam Oliveira

Colaboração para Tilt, de São Paulo

17/05/2023 04h00Atualizada em 17/05/2023 16h45

Quatro meses antes de a Polícia Federal bater na porta de Jair Bolsonaro durante uma operação para investigar a inclusão de dados falsos no sistema do Ministério da Saúde, o engenheiro de software Marcelo Oliveira, 43 anos, usou seu perfil no Twitter para mostrar indícios de fraude no cartão de vacina do ex-presidente - que nega a acusação .

Oliveira jura que não foi procurado pela PF. Fato é que ele antecipou a suspeita que levou à prisão do tenente-coronel Mauro Cid, homem de confiança de Bolsonaro, e já fez o ex-presidente depor três vezes. A análise de dados que propiciou a descoberta nasceu como um hobby durante a pandemia, quando o desenvolvedor ou a ajudar a levantar o número de óbitos e a desmentir fake news sobre as urnas eletrônicas.

Tudo de maneira voluntária, diz, já que seu ganha-pão é desenvolvendo games, como os jogos Tennis Clash e Sniper 3D.

Não ganhei R$ 0,01 com nada disso"
Marcelo Oliveira, engenheiro de software

O cartão de vacina do ex-presidente

Em janeiro deste ano, o coletivo de hackers Anonymous publicou em seu site um suposto cartão de vacina pertencente a Bolsonaro. O documento indicava que ele se vacinou em 19 de julho de 2021 em uma UBS no Parque Peruche, em São Paulo. Oliveira achou estranho, afinal, o ex-presidente estava em Brasília na data.

Ele resolveu checar a numeração na base do SUS (Sistema Único de Saúde). Oliveira explica que, como os registros no sistema são anonimizados, uma confirmação necessita do número de paciente, justamente o que estava na carteira de vacinação.

Com estas informações, F e data de nascimento de Bolsonaro, o engenheiro de sistema observou que os registros de duas doses de vacina foram apagados antes de o ex-presidente deixar o Brasil rumo aos Estados Unidos. Ele também detectou que:

Os registros das vacinas de Bolsonaro foram incluídos na Rede Nacional de Dados em Saúde em 21 de dezembro de 2022.

A primeira dose, supostamente aplicada em 13/8/2021, entrou no sistema às 22h07.

Dois minutos depois, foi inserida a segunda dose, supostamente aplicada em 14/10/2022.

Ambas eram Pfizer e ocorreram em Duque de Caxias.

Sem êxito, a tentativa de apagar as informações ocorreu em 28/12/2022.

"No DataSUS, mesmo que você apague uma dose, ela não sai do banco de dados. Aparece com o status de apagada", explica o engenheiro.

Oliveira também identificou a inserção dos dados de vacinas aplicadas em uma criança de 11 anos, que poderia ser de Laura, a filha de Bolsonaro e Michelle.

Hobby que virou coisa séria

Desenvolvedor de jogos para celular, o engenheiro começou a atuar com análise de dados de maneira voluntária durante a pandemia. Ele diz que só se envolveu com o assunto por acreditar que, naquele momento de incerteza, um esforço de levantamento de informação correta precisava ser feito.

Foi no início da emergência sanitária provocada pela covid-19, quando os dados eram muito poucos ou quase não divulgados, que a participação dele na coleta e processamentos de informação ficou mais ativa.

Dada essa dificuldade, ele começou a levantar os registros de óbitos diretamente junto ao Registro Civil e divulgá-los em planilhas mais fáceis de usar.

"Era para que qualquer pessoa pudesse pegar esses dados e jogar em ferramentas de estatísticas para fazer segregação ou cortes diferentes", conta.

Observando a tendência que os gráficos mostravam, ele começou a notar um aumento no número de óbitos e da subnotificação de casos. Por essa atuação, ele foi convidado a integrar o Infovid, um grupo de pesquisadores que trabalhou com dados da covid-19 para divulgar informações e combater mentiras sobre a doença.

A publicação dos óbitos encontrados, comenta Oliveira, não foi bem vista por setores da saúde, que posteriormente resolveram interrompê-la. A restrição não durou muito tempo, pois imprensa e sociedade aram a demandar as informações.

Já no período eleitoral, o engenheiro de software ou a contribuir com um grupo de pesquisadores de diversas universidades brasileiras que observavam dados das urnas eletrônicas, fornecidos pelo TSE (Tribunal Superior Eleitoral).

Começaram a aparecer muitas fake news e eu ajudei a desmascarar várias. Do ponto de vista técnico, o sistema [das urnas] não é perfeito. Só que as alegações feitas por quem ataca as urnas são completamente amadoras e não ariam em nenhum estudo científico. Acho que a discussão sobre como melhorar as urnas eletrônicas deve continuar
Marcelo Oliveira, engenheiro de software

Cautela para fugir de ataques

Oliveira afirma que sempre tenta ser cauteloso com os dados que divulga. A estratégia também é uma forma de se proteger pessoalmente de possíveis ataques online.

"Eu nunca sou categórico. Tento sempre ser neutro mostrando as informações que tenho. Eu tenho um pouco de receio de publicar, mas, ao mesmo tempo, acho importante fazer isso."

Ele diz que tenta se manter "na própria alçada". "Seria interessante investigar mais, porque gosto de mexer com dados, mas eu não gostaria de sair da minha esfera técnica", diz. O profissional diz não ter sido procurado por nenhuma instituição como a Polícia Federal e acrescenta que prefere que seja assim, pois o que ele faz é apenas divulgar os dados. A investigação fica para os órgãos competentes, completa.

Segundo o entrevistado, ele procura não divulgar dados ou imagens pessoais nas redes sociais, em que foca principalmente no trabalho. Com isso, tenta evitar que pessoas mal-intencionadas o ataquem. Mesmo com esses cuidados, o engenheiro conta já ter sofrido tentativas de "doxing" (prática para levantar e expor online dados pessoais de alguém).

Ainda que o esforço de análise de dados tenha voltado sido reduzido, ele faz uma ou outra contribuição, mas de maneira mais espaçada. "Estou muito focado no trabalho, que me consome 90% do tempo. Mas eu ainda dou uma ajudinha aqui e ali quando aparece um assunto mais quente, como foi o caso das eleições e de Bolsonaro."