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

Danilo Lavieri

Precedente de Botafogo x Palmeiras dificulta anulação de jogo do São Paulo

Paulo Roberto Alves Junior (dir.), árbitro da partida entre Botafogo x Palmeiras em 2019, faz seu relato ao STJD - Gabriel Carneiro/UOL
Paulo Roberto Alves Junior (dir.), árbitro da partida entre Botafogo x Palmeiras em 2019, faz seu relato ao STJD Imagem: Gabriel Carneiro/UOL

Colunista do UOL

26/11/2020 04h00

Receba os novos posts desta coluna no seu e-mail

Email inválido

Caso o São Paulo decida ir ao STJD (Superior Tribunal de Justiça Desportiva) para tentar anular a partida de ontem (25) contra o Ceará, é bastante provável - e recomendável - que os juízes analisem precedentes de casos como esse no futebol. E um que aconteceu em maio de 2019 pode servir para dificultar o sucesso da equipe do Morumbi nos bastidores.

Nessa partida, o árbitro Paulo Roberto Alves Júnior resolveu acatar uma recomendação do VAR depois de mandar a partida entre Botafogo e Palmeiras reiniciar para analisar um possível pênalti. O atleta da equipe carioca já tinha dado início ao jogo, mas o juiz pediu novamente para o jogo ser paralisado e acabou dando o pênalti em cima de Deyverson.

Os botafoguenses foram ao tribunal, o STJD chegou a ordenar a suspensão temporária da partida, mas, depois, indeferiu o pedido. Na sessão, o Tribunal expôs o áudio do VAR e foi elogiado pela transparência naquela ocasião.

Segundo especialistas em direito esportivo ouvidos pelo blog, esse precedente praticamente inviabiliza o sucesso do São Paulo nos tribunais. Também entra na conta o fato de o gol ter sido anulado de maneira correta.

Alguns dos advogados ouvidos que disseram que erro de protocolo não pode ser considerado erro de direito porque não faz parte das regras, mas sim de um manual recomendável de condutas.

Essa linha de raciocínio também foi exposta pelo relator Décio Neuhaus, que disse: "Não houve erro de direito e, sim, erro de procedimento não capaz de impactar na decisão. O erro faz uma correção no jogo".

Depois, o então presidente do STJD, Paulo César Salomão Filho, fez explicação semelhante para justificar seu voto contra o pedido do Botafogo: "A matéria foi esmiuçada. Sou um crítico da CBF, mas a entidade abriu os áudios e vídeos e isso é muito importante para julgamentos futuros. Essa abertura nos dá uma transparência de ver o que de fato aconteceu. O máximo que aconteceu foi um erro de procedimento que não é capaz de anular uma partida. O tribunal não pode ser o terceiro tempo numa partida de futebol".

Por fim, Ronaldo Piacente, outro membro do Tribunal, ainda argumentou. "O árbitro agiu imediatamente de forma correta. Mesmo que houve o reinício da partida o lapso temporal não interferiu na partida. O VAR é mostrar o correto e ser justo"

No jogo do ano ado, o na época procurador-geral do STJD, Felipe Bevilacqua, afirmou que mesmo em caso de erro de direito o julgamento leva em conta a relevância do caso e se a decisão tomada foi correta ou não. O São Paulo tem dois dias depois de a súmula ser registrada no sistema da CBF para entrar com a reclamação.

A pressão feita por equipes como o Flamengo, por exemplo, pode voltar à tona nos próximos dias, com insinuações de que o São Paulo tem sido favorecido pela CBF por conta de seu presidente, Rogério Caboclo, ser conselheiro e torcedor da equipe do Morumbi.