;(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 recebe a velocidade de internet contratada? Você pode ser reembolsado

Mohamed Hassan/ Pixabay
Imagem: Mohamed Hassan/ Pixabay

Renata Baptista

De Tilt, em São Paulo

13/07/2021 18h51

Sabe aquela internet que você contratou prometendo alta velocidade e qualidade, mas tem desapontado? Pois bem: a Justiça de Santa Catarina decidiu que operadoras de internet que não entregam o serviço que foi prometido devem ressarcir seus clientes. O resultado da ação fortalece a base jurídica para outros processos na mesma linha.

As operadoras de internet Oi, Telefônica (Vivo), Claro e Tim foram condenadas em ação civil pública ajuizada pelo MPF (Ministério Público Federal) do Estado a devolver aos clientes proporcionalmente o valor do serviço de internet fixa e móvel cobrado e não prestado na fatura do mês seguinte, quando houver redução da velocidade de conexão contratada.

De acordo com a ação, consumidores de várias localidades de Santa Catarina apresentaram denúncias aos Procons municipais, afirmando que estavam recebendo velocidade de internet muito abaixo do que havia sido contratada com as operadoras. Além disso, foi relatado que o serviço apresentava constantes instabilidades.

Houve inclusive relatos de que o serviço oferecido pela operadora não era realizado, embora fossem emitidas as faturas para pagamento normalmente. Ainda de acordo com a apuração do MPF, as empresas comercializam pacotes de transmissão de dados, cujos contratos são firmados com base na velocidade máxima de conexão, sem se referirem a eventuais variações de ordem técnica.

Tilt procurou a Conexis Brasil Digital, que representa as principais operadoras de telecomunicações do país, para ter um posicionamento sobre a decisão da Justiça de Santa Catarina, mas foi informada de que a entidade não comenta ações judiciais em andamento.

Na ação, a Justiça também condenou as operadoras a disponibilizarem gratuitamente aos consumidores equipamentos e aplicativos para medição da velocidade de conexão do serviço de internet fixa e móvel.

Acontece algo parecido com você?

Segundo as regras da Anatel, as operadoras devem entregar pelo menos 80% da taxa de transmissão média e a velocidade não pode ser inferior a 40% da contratada em nenhum momento.

Se você notar que a sua velocidade de internet não condiz com esse limite, é possível oficializar uma reclamação na Anatel. As operadoras que não entregarem o desempenho esperado poderão ainda ser punidas judicialmente, e o consumidor poderá também ser ressarcido após entrar com ação por danos morais.

Como saber a minha velocidade de conexão?

Para saber qual a sua velocidade da internet, a Anatel recomenda o site Brasil Banda Larga. Existem ainda outras ferramentas gratuitas, como a Minha Conexão.

No primeiro link, é só seguir os os apresentados e selecionar o botão "Iniciar Teste". No segundo, ao abrir a página o teste já tem início.

Os dados levados em consideração nos testes são: taxa de (dados recebidos pelo seu dispositivo num determinado espaço de tempo) e taxa de ( dados enviados a outros computadores e provedores). É a partir da taxa de que é feito o contrato da operadora com o consumidor, e ela que deve ser levada em conta para a avaliação.

Por exemplo, se foi contratado um plano com taxa de de 10 mbps, a operadora deverá entregar, em média, a velocidade mensal de 8 mpbs — que equivale a 80% na média ao mês. Ainda de acordo com o mesmo exemplo, a taxa instantânea mínima teria o equivalente a 4 mbps, ou 40%.