;(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
Logo Pagbenk Seu dinheiro rende mais
Topo

Pix

Sistema de pagamento instantâneo do Banco Central é alternativa a DOC, TED e cartões


Procon-SP: instituições que cadastrarem Pix automaticamente poderão ser multadas

Fernanda Guimarães e Cynthia Decloedt

16/10/2020 17h51

Diante das reclamações de cadastramentos de chaves de Pix feitos sem autorização por parte de algumas instituições financeiras, o Procon de São Paulo emitiu uma nota dizendo que aqueles que realizarem cadastramento sem a prévia, expressa e inequívoca autorização do cliente que é consumidor poderão ser multados por prática abusiva. Um ofício será enviado à Federação Brasileira dos Bancos (Febraban).

Se isso estiver de fato ocorrendo, segundo o Procon, as instituições que estão adotando essa prática estariam infringindo um dos direitos básicos estabelecido pelo Código de Defesa do Consumidor, que é a liberdade de escolha. "O Procon está de olho e cabe multa ao infrator", afirma, em nota, o diretor executivo do Procon-SP, Fernando Capez.

Os cadastramentos indevidos de chaves ao Pix, o sistema de pagamento instantâneo do Banco Central, afetou diretamente clientes dos grandes bancos, apurou o Broadcast, sistema de notícias em tempo real do Grupo Estado. Os comentários são de que pelo menos 30% dos clientes das maiores instituições do País foram pegos de surpresa ao não conseguirem cadastrar chaves nos bancos onde são clientes, porque já estariam registrados no sistema do Banco Central por outra instituição.

Pela regulamentação, existe um limite de chaves a ser registrado por conta de cliente, o que gerou uma corrida das instituições financeiras, por meio de campanhas publicitárias e promoções, para garantir os cadastros em suas plataformas.

Um outro ponto tem gerado problemas e precisará ser endereçado, segundo fontes. Os bancos estão tendo dificuldades de fazer a portabilidade de chaves de clientes pessoas físicas, dentre aquelas que fizeram essa solicitação. Dos totais de pedidos desse tipo, para portabilidade da chave, cerca de 80% estão parados, afirmou uma fonte.

Há alguns dias começaram a surgir reclamações nas redes sociais de pessoas que perceberam que estavam sendo cadastradas sem prévia autorização. O assunto ganhou holofotes a partir de ontem, dia seguinte à divulgação pelo Banco Central da lista de instituições com o maior número de chaves cadastradas. Três fintechs - Nubank, Mercado Pago e PagSeguro - lideram a lista, com um total de 17,1 milhões de registros de chaves, volume 50% superior ao da soma dos cinco maiores bancos do País, (Banco do Brasil, Itaú Unibanco, Bradesco, Santander e Caixa Econômica Federal), que contabilizam 11,7 milhões.