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

Chico Alves

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Excludente de ilicitude já existe na prática para policiais do RJ e SP

06.05.2021 - Policiais carregam baleado durante operação contra o tráfico na comunidade do Jacarezinho, no Rio, deixa dezenas de mortos - REUTERS / Ricardo Moraes
06.05.2021 - Policiais carregam baleado durante operação contra o tráfico na comunidade do Jacarezinho, no Rio, deixa dezenas de mortos Imagem: REUTERS / Ricardo Moraes

Colunista do UOL

12/11/2021 11h28

Jair Bolsonaro e o então ministro da Justiça Sergio Moro tentaram em 2019 aprovar no Congresso uma lei que instituísse o excludente de ilicitude, dispositivo que isenta de punição agentes públicos que matarem alguém em confronto. Não conseguiram o objetivo, mas a ideia de vez em quando volta à baila. Obviamente, a proposta é rejeitada pelos defensores dos direitos humanos, pois representa dar a policiais e militares das Forças Armadas carta branca para matar.

Pelo que se constata na reportagem dos jornalistas Leonardo Martins e Lola Ferreira, do UOL, porém, mesmo sem previsão legal o excludente de ilicitude já existe na prática para os policiais do Rio e de São Paulo.

A matéria cita estudo inédito do Fórum Brasileiro de Segurança Pública, baseado em dados de 2016, em que os Ministérios Públicos dos dois estados pediram naquele ano o arquivamento de nove em cada dez casos de mortes provocadas por policiais.

Ou seja: 90% dessas ocorrências sequer chegaram a ser apreciadas pelo Judiciário.

Mesmo que os métodos das polícias carioca e paulista fossem os da Suíça, esse percentual já seria absurdo. Sabendo da forma truculenta que os agentes atuam por aqui, especialmente nas comunidades pobres, o resultado se torna escandaloso.

Para se ter uma ideia da tragédia que isso representa, no ano de 2020, mesmo com a pandemia obrigando a maior parte da população a ficar em casa, a polícia do Rio matou 1.239 pessoas. Em São Paulo, foram 814 vítimas. A título de ilustração, se os índices de 2016 se repetirem na apreciação desses homicídios ocorridos no ano ado, nada menos que 1.850 mortes causadas por policiais ficarão sem julgamento. Consequentemente, sem punição.

Os especialistas ouvidos pelos jornalistas do UOL culpam a omissão das promotorias e a falta de investigações policiais de qualidade pelo resultado. Dizem que a impunidade gera um ciclo vicioso, em que os agentes se sentem livres para causar mais mortes.

A pesquisa mostra que a banalização da truculência policial acabou por contaminar até mesmo os órgãos criados para defender a sociedade das ações violentas do Estado, como é o caso do MP. Essa é a constatação mais nefasta.

A falta de políticas públicas eficientes para a área faz com que boa parte da população acredite que justiceiros são a solução para a segurança pública. Pensam assim especialmente os integrantes de classe média que moram longe das favelas e para quem a pobreza é sinônimo de crime.

É assim que essa engrenagem trágica se retroalimenta. Enquanto os moradores das comunidades choram seus mortos, inocentes ou não, uma parte privilegiada da sociedade bate palmas para as ações truculentas da polícia e para a ineficiência conivente do MP.

E o cotidiano segue, como se as instituições realmente estivessem funcionando.