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

Prefeitura do Rio lança app de delivery para competir com iFood e Rappi

Logo do aplicativo de delivery Valeu, lançado pela prefeitura do Rio - Divulgação
Logo do aplicativo de delivery Valeu, lançado pela prefeitura do Rio Imagem: Divulgação

Marcela Lemos

Colaboração para o UOL, no Rio

28/03/2022 12h45

A Prefeitura do Rio de Janeiro lança nesta segunda-feira (28) um aplicativo de delivery para competir com empresas que dominam o setor, como Ifood e Rappi.

Batizado de Valeu, o app deve gerar uma economia de até 20,5% para os restaurantes cadastrados na plataforma, em relação aos outros apps, segundo a prefeitura. Durante a fase de testes, que deve durar dois meses, não serão cobradas dos estabelecimentos taxas e mensalidades para usar o aplicativo, e os entregadores serão dos próprios restaurantes.

O aplicativo está disponível, em fase de testes, para Android e iOS. Restaurantes podem se cadastrar neste link.

A plataforma foi idealizada pela Secretaria Municipal de Fazenda e Planejamento, por meio da Iplanrio (Empresa Municipal de Informática do Rio). O objetivo é aumentar os ganhos de bares, restaurantes e entregadores.

De acordo com a prefeitura, as taxas cobradas e os rees serão assim:

  • Em pedidos de até R$ 100: taxa zerada para restaurantes e ree de R$ 7 para o entregador;
  • Em pedidos de R$ 100 a R$ 200: taxa de 2% para restaurantes e ree de R$ 7 + 2% do valor do pedido para entregadores;
  • Em pedidos acima de R$ 200: taxa de 5% para os restaurantes e ree de R$ 7 + 2% do valor do pedido para entregadores.

'Vamos calibrando'

Na tarde desta segunda, o secretário de Fazenda e Planejamento do Rio, Pedro Paulo Carvalho, afirmou que, "se o modelo não tiver aderência, vamos calibrando para que ele fique cada vez melhor, de acordo com a necessidade de cada uma das partes".

Ele disse acreditar que a maioria das entregas estará no modelo taxa zero, para vendas de até R$ 100.

O aplicativo não exige que os estabelecimentos ofereçam descontos para os clientes.

Ao ar a plataforma, serão apresentados aos usuários os estabelecimentos credenciados mais próximos e, posteriormente, os mais bem avaliados com base nas notas dos consumidores.

Estão previstos também 30 pontos de apoio pela cidade para os entregadores. Quarenta restaurantes estão cadastrados no app até o momento.

'Driblaremos os iFoods da vida'

A novidade foi anunciada na semana ada em uma entrevista de Carvalho à revista alemã "Der Spiegel". No Twitter, o prefeito do Rio, Eduardo Paes (PSD), falou sobre o projeto.

"Em breve, driblaremos os iFoods da vida. Dinheiro tem que estar na mão dos restaurantes e entregadores de comida. Não dá para continuar com as taxas absurdas dos intermediários", escreveu.

No conteúdo divulgado, Carvalho explica como a prefeitura lançou o Taxi Rio, para competir com o Uber.

A prefeitura estima que 100 mil pessoas, a maioria homens moradores de comunidades, trabalhem com delivery entre 12 e 14 horas por dia —"um trabalho exaustivo e mal pago", disse Carvalho à publicação.

Taxi Rio e Bibi Mob

Em 2017, já de olho na disputa pelo mercado entre Uber e taxistas, a prefeitura do Rio lançou o Táxi Rio, um app nos moldes do Uber e 99.

No aplicativo, ageiros podem solicitar corridas com até 40% de desconto. A única diferença em relação aos concorrentes é a forma de pagamento. No Táxi Rio, o pagamento ocorre em dinheiro, maquininha de débito e crédito do motorista ou via Pix. Não é possível pagar por meio do próprio aplicativo.

Alternativa semelhante foi adotada recentemente pela prefeitura de Araraquara, no interior de São Paulo. Lançado no início do ano, o Bibi Mob já tem mais de 200 motoristas e 7.000 usuários cadastrados.

Os motoristas recebem 95% do valor das corridas. Uber e demais aplicativos costumam rear cerca de 60%.

O projeto começou a ser desenvolvido em novembro de 2020 e entrou em operação no começo deste ano.