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

Lei em Campo

Clubes precisam se adaptar logo à nova legislação de proteção de dados

28/08/2020 04h00

Receba os novos posts desta coluna no seu e-mail

Email inválido

Por Ivana Negrão

O Senado decidiu que a Lei de Proteção de Dados entra em vigor a partir de agora e não mais em dezembro, como tinha votado a Câmara Federal nesta semana. Mas ainda falta a sanção presidencial.

"Essa novela não acabou, na verdade. Nós só vamos saber quando o presidente tomar a decisão sobre a MP 959/2020. Nós temos que esperar 15 dias úteis para vigência ou não da LGPD", esclarece Fernanda Soares, advogada especialista em direito esportivo.

O prazo está previsto na Constituição Federal. "Se não houver manifestação neste período, ocorrerá a sanção tácita", acrescenta a advogada desportiva, Aline Christino Simas.

Caso ocorra o veto, a matéria volta ao Senado. Mas, independentemente das possibilidades, os clubes precisam ligar o sinal de alerta para a questão. A lei é aplicável a todos que realizam qualquer tratamento de dados pessoais, inclusive o simples armazenamento. Logo, é também uma obrigação das entidades esportivas de qualquer modalidade, que vão precisar avançar na profissionalização.

Algumas das equipes da Série A do Campeonato Brasileiro já estão cientes da obrigação. "A gente sabia dessa possibilidade e, por isso, estamos finalizando a contratação de uma empresa parceira que vai nos ajudar nas adequações necessárias. Já temos uma noção do que precisa", informou Vitor Ferraz, vice-presidente do Bahia.

Como adiantou o Lei em Campo, a equipe baiana, no segundo semestre de 2019, implantou uma comissão interna, com integrantes do departamento jurídico, TI, e gestão de dados dos sócios, além de uma empresa terceirizada com know how para orientar o clube e entender o que é preciso ser feito.

O mesmo aconteceu no Internacional. "Vamos retomar agora o projeto que envolve a istração e o departamento jurídico do clube. Temos orçamentos de empresas terceirizadas para assessoria na implementação do que for necessário. Agora, vamos analisar uma possível contratação", pondera Victor Grunberg, vice-presidente de istração do clube gaúcho.

No Fortaleza, o tema já é discutido internamente para que as adequações ocorram o mais breve possível. Os dados dos programas de sócio torcedor, das lojas dos clubes, muitas vezes istrados por terceiros, e até do monitoramento de atletas via GPS para orientação dos departamentos médico e fisiológico são informações que exigem cuidado no armazenamento e na utilização.

A nova lei prevê sanções istrativas que vão de advertência até multa de 2% do faturamento do último exercício do clube, limitada a R$ 50 milhões de reais. Mas nada impede que ações judiciais possam ser movidas a partir do momento que a lei entre em vigor.

"Se houver a sanção presidencial na forma que o Senado aprovou, a LGPD vai ser declarada como vigente desde 16 de agosto. Mas com efeitos concretos supervenientes. Ou seja, com efeitos futuros, porque você não pode ter vigência retroativa", finaliza Fernanda Soares.

Nos siga nas redes sociais: @leiemcampo