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

Após avaliação psicológica, PMs que mataram assaltante voltam às ruas em SP

Do UOL, em São Paulo

15/02/2023 12h44

Após arem por exame psicológico, os agentes da Rota que mataram um assaltante em um roubo na zona sul de São Paulo voltarão às ruas. A avaliação dos PMs foi feita ontem (14) pelo Programa de Acompanhamento e Apoio ao Policial Militar.

A medida é de praxe, adotada sempre que um servidor atira durante uma ocorrência. A ação dos policiais ocorreu na última sexta-feira (10) em frente a um semáforo e foi registrada em vídeos que viralizaram.

O secretário de Segurança Pública de São Paulo, Guilherme Derrite, voltou a defender os policiais. O afastamento foi sugerido pela Ouvidoria da Polícia.

Até que se prove o contrário, pelo que eu vi naquele vídeo, a ação dos policiais está dentro da legalidade. Não há motivo para afastá-los do serviço operacional."
Guilherme Derrite, secretário de Segurança Pública, em entrevista ao UOL

Derrite apoia a versão apresentada pelos policiais, que disseram ter atirado porque o assaltante teria sacado a arma. O vídeo que viralizou, porém, mostra o homem fugindo do local e não indica reação.

Entretanto, a investigação ainda pode apontar algum tipo de movimento para reagir, já que ele estava armado. Isso pode ocorrer, por exemplo, com base em outras imagens, como as de câmeras nas fardas dos PMs ou de vídeos de monitoramento do entorno.

Não precisa o criminoso sacar a arma e atirar no policial. Ao contrário do que alguns imaginam, o policial não tem que esperar tomar um tiro. A partir do momento que a pessoa faz a menção, a lei já dá o amparo para o policial evitar que o disparo aconteça."

Derrite já havia se posicionado sobre o caso em seu perfil no Twitter. Ele se referiu ao episódio como "confronto", embora as imagens mostrem apenas os policiais atirando.

Questionado pelo UOL Notícias, Derrite diz que houve erro de interpretação. "Eu falei de confrontos de maneira geral, está no plural. Não tratei esse caso como 'confronto'. O caso da Rota, eu tratei como 'abordagem'. Esse caso também será apurado", disse.