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

Caso Kathlen: PM afasta 12 policiais de UPP; MP investigará crime militar

Daniele Dutra

Colaboração para o UOL, no Rio

11/06/2021 13h44Atualizada em 11/06/2021 19h18

A Polícia Militar do Rio de Janeiro afastou 12 policiais da UPP (Unidade de Polícia Pacificadora) Lins, na zona norte da capital, onde a designer de interiores Kathlen de Oliveira Romeu, 24, grávida de 14 semanas, foi morta na última terça-feira (8).

Ao todo, 21 armas dos PMs foram apreendidas —12 fuzis e nove pistolas. Em depoimento na Delegacia de Homicídios da Capital, os PMs dizem ter dado ao menos sete tiros (cinco de fuzil) em direção a criminosos. Kathlen teve o corpo atravessado por uma bala de fuzil durante a ação policial.

"Por uma questão de lisura do processo investigativo, os policias foram afastados da UPP Lins", informou ao UOL o major e porta-voz da PM, Ivan Blaz. Questionada, a corporação ainda não informou qual a função que esses policiais arão a desempenhar, mas disse que, durante as investigações, não farão policiamento nas ruas.

Em nota, a PM-RJ negou a existência de uma ação planejada, disse que o local do crime foi preservado para perícia —nenhuma cápsula foi contudo encontrada— e relacionou os disparos a um ataque a tiros "por criminosos armados de maneira inesperada e inconsequente".

Informou ainda ter aberto procedimento para apurar as circunstâncias do fato.

O MP-RJ (Ministério Público do Rio de Janeiro) instaurou um PIC (Procedimento Investigatório Criminal) para apurar, de forma paralela e independente, os fatos que causaram a morte da modelo.

A Promotoria de Justiça junto à Auditoria Militar do MP-RJ informou que também instaurou um PIC para apurar eventual crime militar relacionado ao caso. Em nota, eles afirmam ter acionado a Corregedoria da PM requisitando a instauração de um inquérito policial militar.

PM diz ter disparado 5 tiros de fuzil para se proteger

Com base em depoimento de moradores que testemunharam a ação policial, a família de Kathlen afirma que o disparo partiu da arma de um policial. A jovem estava a caminho da clínica da tia acompanhada da avó, quando foi atingida.

Em depoimento prestado no dia da morte, o PM Marcos Felipe da Silva Salviano disse que, por volta das 14h10, estava em um patrulhamento de rotina quando se deparou com quatro homens armados numa "banca de boca de fumo".

O policial afirmou ter sido atacado por criminosos e que, para se proteger, revidou com cinco disparos de fuzil. Ele não soube dizer se acertou algum deles.

Segundo Salviano, outras equipes da UPP estavam em patrulhamento para tentar cercar um criminoso, quando ouviram gritos dos moradores dizendo que uma pessoa havia sido baleada.

Fontes do UOL confirmam que, em depoimento, outro policial havia feito cerca de dois disparos, totalizando sete.

Marcelo Ramos, namorado de Kathlen, disse que a PM está tentando mudar os fatos.

"Eles alegam que não foi operação, mas foi sim uma operação. E sem comunicar ao Ministério Público. Há relatos de moradores de que a polícia invadiu uma casa para pegar os traficantes de surpresa. A polícia está dizendo que foi recebia a tiros, isso é mentira. Eles removeram as cápsulas da cena do crime para dificultar as investigações", afirmou.