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

PSDB pausa prévias após falha em app; Doria e Leite divergem sobre retomada

Lucas Borges Teixeira

Do UOL, em São Paulo

21/11/2021 18h11Atualizada em 21/11/2021 22h39

O PSDB decidiu pausar hoje o processo de votação de prévias para escolha do candidato à presidência em 2022 após falhas no aplicativo de votação usado pelos filiados. Diante da indefinição sobre a retomada do processo, os postulantes apresentaram propostas diferentes, e o partido ainda não chegou a um acordo sobre como prosseguir.

O governador de São Paulo, João Doria, e o ex-prefeito de Manaus Arthur Virgílio querem que a votação seja retomada no próximo domingo (28), quando seria realizado o segundo turno. Já o governador do Rio Grande do Sul, Eduardo Leite, discorda da pausa e gostaria da ampliação da votação por app por mais 48h.

"Tanto Doria quanto Arthur Virgílio defendem a data do dia 28 de novembro, próximo domingo, para que o processo de prévias se encerre de forma rápida, eficiente e justa", dizem os candidatos, por meio de nota conjunta em que criticaram a "fragilidade do aplicativo e os problemas de instabilidade e insegurança que o modelo proposto poderia trazer para as primárias."

A campanha de Eduardo Leite divulgou nota em que diz que "aceita mais 48 horas de votação, desde que garantida a capacidade técnica para votação de todos os cadastrados que assim desejarem."

"Com mais do que isso as prévias perderiam sua integralidade, seja pelo prazo, seja pelo número de votantes, seja pela incapacidade técnica do aplicativo, seja pela agressão ao ato normativo eleitoral ou seja pelas denúncias de irregularidades de todo o tipo, que se avolumaram no dia de hoje e que poderiam ensejar judicializações e sindicâncias indesejadas", diz o comunicado.

Segundo nota do partido, os votos já registrados ficarão armazenados. Estima-se que menos de 10% dos quase 45 mil votantes conseguiram efetuar o voto hoje.

"O processo de votação em aplicativo encontra-se pausado em razão de questões de infraestrutura técnica, que não comportou a demanda dos votantes das prévias", diz nota do PSDB. "Os votos recebidos tanto pelo aplicativo quanto por meio das urnas eletrônicas ao longo deste domingo serão totalizados ao final do processo de votação."

Problemas no app

Desde o início da votação, nesta manhã, tucanos de todo o país relataram dificuldade para ar a ferramenta via reconhecimento facial e registrar seus votos. De acordo com o diretório paulista, o app chegou a ficar 4h fora do ar durante a manhã.

O aplicativo foi desenvolvido exclusivamente para a votação das prévias à presidência da República para que filiados de todo o país pudessem votar. Inicialmente, a votação online seria das 7h às 15h, mas foi estendida até às 18h por causa da instabilidade.

Agora, as lideranças estão considerando estender o prazo para garantir que todos os 44.700 registrados para votar nas prévias consigam registrar os votos.

Os problemas na ferramenta desagradaram em especial o diretório de São Paulo. Em carta conjunta, o PSDB do estado e da capital requereram "providências" da Executiva Nacional para resolver o problema.

"Foi alertado durante todo o processo sobre a fragilidade do aplicativo e os problemas de instabilidade e insegurança que o modelo proposto poderia trazer para as primárias. Mesmo diante dos alertas de ambas as campanhas e da Kryptus, auditoria contratada pelo próprio partido para garantir a lisura da eleição, a direção do PSDB optou por manter o contrato com a FAUGRS [Fundação de Apoio da Universidade Federal do Rio Grande do Sul, sediada em Pelotas] e o uso da plataforma", criticaram Doria e Virgílio, em nota.

O tema é caro a Doria porque, como São Paulo representa 62% dos cadastrados, o grupo de filiados sem mandato é o seu principal trunfo no pleito. Há um comentário entre o PSDB paulista de que a comitiva nacional estaria fingindo normalidade para prejudicar Doria.

Para não ficar atrás, o PSDB-RS convocou a reunião com o objetivo de "avaliar as condições e a evolução da votação".

Entre a equipe de Doria, que já vem reclamando do aplicativo desde que ele foi lançado, não está descartada a possibilidade de judicialização — a depender do resultado.

Além da votação por app, também houve votação presencial, na Convenção do partido no Centro de Convenções Ulysses Guimarães, em Brasília. Os candidatos se reuniram e, junto a lideranças e mandatários do partido, votaram por urna eletrônica.

A votação presencial não teve problemas e as urnas já foram remetidas à sede do partido para apuração.

Desenvolvedora está investigando as causas

Por meio de nota, a Faurgs (Fundação de Apoio da Universidade Federal do Rio Grande do Sul), desenvolvedora do aplicativo, negou que a razão para o problema no reconhecimento facial tenha sido por falta de compra de licenças, como chegou a ser especulado, e disse que está investigando "todas as possíveis causas da instabilidade".

"Assim que houver total comprovação, o detalhamento desse ocorrido será levado a público", garante a fundação.