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

Viaturas da GCM ficam sem combustível em São Paulo, diz sindicato

GCM em frente à entrada principal da Prefeitura de SP - Leon Rodrigues/Divulgação
GCM em frente à entrada principal da Prefeitura de SP Imagem: Leon Rodrigues/Divulgação

Luís Adorno

Do UOL, em São Paulo

24/11/2020 11h34Atualizada em 24/11/2020 16h30

Desde ontem, carros utilizados pela GCM (Guarda Civil Metropolitana) em São Paulo, sob gestão do prefeito e candidato à reeleição, Bruno Covas (PSDB), não abastecem na rede credenciada por insuficiência de saldo no "cartão combustível". A informação foi divulgada pelo Sindguardas (Sindicato de Guardas Civis Metropolitanos) na manhã de hoje.

Um e-mail enviado às 19h55 de ontem pelo comando operacional leste da GCM afirmava que havia "dificuldade de abastecimento das viaturas", mas que o problema seria solucionado nas primeiras horas de hoje. Procurada, a prefeitura negou que o trabalho da guarda tenha sido afetado.

O sindicato diz que a prefeitura não reou o dinheiro para a empresa responsável por disponibilizar o "cartão combustível". Com ele, as viaturas podem abastecer em postos credenciados.

E-mail sobre falta de combustível para GCM em SP - 23.nov.2020 - Reprodução - 23.nov.2020 - Reprodução
E-mail sobre falta de combustível para GCM em SP
Imagem: 23.nov.2020 - Reprodução

A reportagem teve o a duas gravações de rádio comunicadores de agentes da GCM realizadas ontem. Em uma delas, um servidor diz que as viaturas poderiam, a partir da 0h de hoje, patrulhar em locais preferenciais.

Entre esses locais, segundo o agente gravado, estavam UBS (Unidade Básica de Saúde) ou terminais de ônibus. Ele também orientou a fixação de um carro na praça Roosevelt, no centro, ontem.

"As viaturas que forem apoiar outras unidades em apoio permanecem pela área, pela sua unidade. Os apoios somente dentro da sua unidade", afirmou outro agente via rádio comunicador.

Evandro Fucítalo, presidente do sindicato, afirmou ao UOL que "esse trabalho de sabotagem vem ocorrendo há um bom tempo praticado por coronéis da PM que destruíram e deixaram a guarda chegar até esse ponto, de ficar sem combustível".

"As viaturas estão paradas. Com medo da represália, estão determinando, pressionando, as viaturas a rodar. Aqueles veículos Duster, principalmente, com um quarto de combustível. Vai ter viatura parada na rua sendo levada por guincho", afirmou Fucítalo.

"Isso é inissível numa cidade com 65 bilhões em arrecadação", complementou o presidente do sindicato.

Por meio de nota, a Secretaria Municipal de Segurança Urbana, por meio da GCM, afirmou que "não houve interrupção ou prejuízo dos trabalhos. A questão istrativa já foi resolvida e o contrato para abastecimento de toda a frota da guarda foi renovado até o fim de 2021".