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

Consultorias organizaram cartel do metrô em SP, diz Cade

Lorenna Rodrigue

Brasília

15/12/2018 07h50

Relatório da Superintendência-Geral do Cade (Conselho istrativo de Defesa Econômica) aponta que empresas envolvidas no cartel do metrô de São Paulo contrataram consultorias para ajudar a organizar o esquema. Segundo o documento, foram utilizadas as empresas Procint Projetos e Consultoria Internacional e Constech Assessoria e Consultoria Internacional.

Na quarta-feira, a Superintendência-Geral pediu a condenação de 16 empresas e 52 pessoas físicas por formação de cartel que teria atingido 27 licitações de metrô e trens de São Paulo, Rio Grande do Sul, Minas Gerais e Distrito Federal. A informação foi antecipada pelo Estadão/Broadcast.

Para o Cade, a Procint e a Constech teriam "influenciado" e "obtido a adoção de conduta comercial uniforme" entre concorrentes. Cabia a elas, por exemplo, marcar reuniões entre os participantes, que chegaram a ocorrer na sede da Procint, segundo a investigação.

As consultorias, afirma o Cade, também ajudavam a definir quais empresas seriam vencedoras ou subcontratadas em cada licitação e intermediavam as propostas que seriam apresentadas pelas empresas nas concorrências fraudadas.

Segundo a investigação, representantes das empresas de consultoria participavam ativamente de encontros e reuniões, dando sugestões e palpites para a combinação dos resultados.

De acordo com o Cade, a Constech foi dissolvida. A reportagem ligou para o telefone da Procint que consta na junta comercial, mas foi informada que ela foi fechada. Ao Cade, as duas empresas afirmaram que foram contratadas por companhias investigadas para prestar consultorias na área de engenharia de transporte e processos industriais, e negaram irregularidades.

A investigação concluiu que houve irregularidades entre 1998 e 2013, período em que o Estado era governado pelo PSDB. Foram pedidas as condenações das empresas Alstom, Bombardier, CAF Brasil, Hyundai-Rotem, Mitsui, Tejofran, Iesa, MGE, MPE, Procint, Serveng-Civilsan, TC/BR, Temoinsa, Trans Sistemas, ConsTech e Balfour. A Siemens, que denunciou o cartel, se livrou de qualquer punição. O processo segue agora para o tribunal do Cade, instância responsável pelo julgamento e condenação das empresas.

Defesa

O governo do Estado, por meio da Secretaria dos Transportes Metropolitanos, disse que o Metrô e a TM são vítimas do esquema e colaboram com o processo. A Siemens disse que está cooperando com as autoridades. A Hyundai-Rotem afirmou acreditar que o Cade "ao final reconhecerá que a empresa não praticou nenhum ilícito". A Tejofran disse que "aguarda o julgamento com a certeza de um desfecho favorável e frisa a idoneidade de suas práticas".

A Serveng Civilsan negou "qualquer irregularidade" e disse que "respeita a legislação em vigor". A Bombardier afirmou que não foi informada sobre a recomendação. A Alstom esclareceu que o parecer da superintendência contém apenas uma recomendação, "não se tratando de decisão final ou definitiva". CAF, MPE e Temoinsa não se manifestaram e MGE e Mitsui não retornaram o contato. A reportagem não conseguiu contato com as empresas Iesa, TC/BR, Trans Sistemas de Transporte e Balfour.

As informações são do jornal O Estado de S. Paulo.