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

Pagamento por QR Code em metrô e trem de SP ganha primeira ampliação

Pagamento com QR Code no Metrô e na TM - Márcia Alves Divulgação
Pagamento com QR Code no Metrô e na TM Imagem: Márcia Alves Divulgação

Helton Simões Gomes

De Tilt, em São Paulo

21/09/2019 12h32

O programa de bilhetes com QR Code para pagar viagens da TM e do Metrô vai ar por sua primeira ampliação neste sábado (21).

As vendas dos bilhetes, que ocorriam apenas entre 9h e 16h, arão a ser feitas em horário integral nas sete estações em que são aceitos. São quatro da TM e três do Metrô: Autódromo (Linha 9-Esmeralda), Tamanduateí (Linha 10-Turquesa), Dom Bosco (Linha 11-Coral) e Aeroporto-Guarulhos (Linha 13-Jade), São Judas (Linha 1-Azul), Paraíso (linha 1-Azul e 2-Verde) e Pedro II (Linha 3-Vermelha). São dois bloqueios por cada estação com o validador.

As bilheterias funcionam enquanto as estações estão abertas. Na TM, a operação de domingo a sexta vai das 4h à meia-noite. No sábado, é de 4h à 1h de domingo. Já no Metrô, a operação de domingo a sexta vai das 4h40 à meia-noite. No sábado, é de 4h40 à 1h de domingo.

Nas quase três semanas em que o teste de pagamentos via QR Code está funcionando, já foram vendidos quase 63 mil bilhetes. De terça-feira (3) até as 17h10 desta sexta-feira (20), 91,7% desses bilhetes foram comprados em bilheterias, 5,8% em máquinas de autoatendimento e 2,5% no aplicativo VouD.
Para facilitar a vida de quem quer comprar pelo app, mas sem gastar com pacote de dados, um serviço de navegação gratuita no VouD, para todas as operadoras de telefonia celular, deve ser disponibilizado aos ageiros em cerca de 20 dias.

O projeto-piloto é feito em parceria com o Consórcio Metropolitano de Transportes (CMT), sem custo para o Governo do Estado, e operacionalizado pela Auto.

Sete estações, quatro da TM e três do Metrô, participam do teste, que será feito durante 45 dias. Na TM, há leitores de QR Code em catracas das estações Autódromo (Linha 9-Esmeralda), Tamanduateí (Linha 10-Turquesa), Dom Bosco (Linha 11-Coral) e Aeroporto-Guarulhos (Linha 13-Jade). No Metrô, o novo serviço pode ser testado nas estações São Judas (Linha 1-Azul), Paraíso (linha 1-Azul e 2-Verde) e Pedro II (Linha 3-Vermelha). São dois bloqueios por cada estação com o validador.

Formas de pagamento mais seguras

A ação faz parte do plano da STM de modernizar os sistemas de pagamento de tarifas a fim de oferecer mais praticidade e segurança aos ageiros e de reduzir custos operacionais das empresas vinculadas à pasta.

"Estamos satisfeitos com os resultados desta primeira semana e com a aprovação dos ageiros. É um importante o no nosso projeto de oferecer formas de pagamento mais seguras, modernas e eficazes aos ageiros e de racionalizar custos operacionais", destaca o Secretário dos Transportes Metropolitanos, Alexandre Baldy.

Estão sendo vendidos bilhetes unitários para uso apenas no Metrô e na TM (não valem para integração com outros modais). A compra pode ser feita com cartão de crédito pelo celular, por meio do aplicativo VouD, que pode ser baixado em lojas virtuais de Android e iOS. Depois, é só abrir o QR Code na tela do celular e ar nos bloqueios com validador nas estações que participam do projeto-piloto.

Também é possível fazer a compra do código com cartão de débito nas máquinas de autoatendimento disponíveis nas estações mencionadas. Após adquirir o QR Code, basta ar o código impresso nos bloqueios com leitores instalados.

Compras de bilhetes com QR Code

Os bilhetes com QR Code serão válidos até 18 de outubro, durante o período de testes da tecnologia, mas a recomendação é que sejam utilizados preferencialmente em 72 horas após a compra para evitar que a impressão do código sofra danos.

A viabilidade da implantação definitiva do sistema será avaliada durante o período de testes. A ideia é que o pagamento da tarifa com o QR Code substitua futuramente a maior parte dos pagamentos com o bilhete magnético unitário, o chamado Edmonson. Na TM, em média, 25% dos ageiros pagantes utilizam esse tipo de bilhete. No Metrô, o percentual é de 15%.