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

CBF define janelas de transferências de 2022; data ajuda Palmeiras

Sede da Confederação Brasileira de Futebol (CBF) no Rio de Janeiro - Lucas Figueiredo/CBF
Sede da Confederação Brasileira de Futebol (CBF) no Rio de Janeiro Imagem: Lucas Figueiredo/CBF

Igor Siqueira

Do UOL, no Rio de Janeiro

08/12/2021 11h11

A CBF anunciou às federações e aos clubes, por meio de um ofício, como serão as regras para transferências de jogadores em 2022. Seguindo uma determinação da Fifa, a entidade estipulou duas janelas de registros de jogadores, que valem para negociações internacionais ou nacionais.

Haverá uma janela por semestre, para os clubes que disputam as Série A e B do Brasileirão. Foi um pedido da CBF, já que são os clubes dessas duas divisões que têm calendário anual.

- De 19 de janeiro a 12 de abril

- De 18 de julho a 15 de agosto

A data do primeiro semestre foi alterada por causa da Copa do Nordeste e do Mundial de Clubes da Fifa. Inicialmente, entre 1º de fevereiro e 25 de abril. Com isso, o Palmeiras pode contar com eventuais reforços para a disputa do torneio nos Emirados Árabes Unidos. No último Mundial, Breno Lopes não pôde participar porque foi contratado fora da janela de registro internacional. O Palmeiras tem que enviar a lista final de participantes, com 23 jogadores, até 24 de janeiro.

"A gente fez um pleito à Fifa porque a lista de inscrição provisória para o Mundial é até 3 de janeiro. Então, a gente falou que teria que ter uma exceção porque quatro clubes não poderiam inscrever jogadores novos e três poderiam. Fizemos uma reunião com eles, a Fifa liberou que eles inscrevam até dia 24, porque a janela abre dia 19", explicou o diretor de registro e transferências da CBF, Reynaldo Buzzoni.

O clube que contratar o atleta deve gerar a solicitação de transferência no registro da CBF dentro do prazo de um desses dois períodos fixados pela entidade. Mas a publicação no BID, para fins de condição de jogo, pode acontecer após o encerramento do período de registro em questão.

O retorno de empréstimo de atletas para clubes das Séries A e B também deve acontecer dentro dessas duas janelas.

Segundo a CBF, há exceções para solicitação de transferência fora do prazo estabelecido:

1 - Rescisão por mútuo acordo ou encerramento do contrato de trabalho antes do término do período de registro anterior - ou seja, com a data de rescisão ou encerramento até o último dia da janela anterior, e desde que o atleta esteja sendo contratado pelo seu novo clube como profissional

2 - Rescisão com base no artigo 31 da Lei Pelé (O clube que estiver com pagamento de salário ou de contrato de direito de imagem de atleta profissional em atraso, no todo ou em parte, por período igual ou superior a três meses, terá o contrato especial de trabalho desportivo daquele atleta rescindido, ficando o atleta livre para transferir-se para qualquer outro clube e exigir multa).

3 - Quando houver qualquer outra exceção aplicável conforme o Regulamento de Status e Transferências de Jogadores da Fifa (RSTP).

Em caso de contrato rescindido unilateralmente por culpa do clube, a Câmara Nacional de Resolução de Disputas (CNRD) pode autorizar a transferência do atleta fora de um dos dois períodos de registro. Nas palavras da CBF, "a fim de evitar abuso".