Reglas de consistencia del SIUP 2020

El presente documento aborda una serie de reglas de consistencia elaborados para garantizar la calidad de los datos en la informacion registrada en el SIUP 2020, estas reglas de consistencia están distribuidas en 6 capítulos que abarcan los mismos capítulos que corresponden al SIUP.

Objetivo

  • Focalizar a las comisarías que cometen errores en el registro de información en el SIUP 2020.
  • Determinar las preguntas de mayor incidencia en error en el registro.

Metodología

Se realiza deacuerdo al siguiente esquema.

Fuente de Información

Es una base de datos en formato excel proporcionada por los encargados del equipo de implementación y mantenimiento el SIUP 2020.
La fecha de actualización de la base de datos es al 01/03/2021.

Proceso de Reglas de consistencia de SIUP 2020

Carga de librerías de R

options(java.parameters = "-Xmx12g") 

library(readxl)  # <- para trabajar con excel
library(tidyverse) # <- conjunto de librerias power
library(fs) # <- Proporciona una interfaz uniforme y multiplataforma para las operaciones del sistema de archivos
library(readr) # para importar csv
library(xlsx) # para expoetar a excel
library(openxlsx) # para escribir archivos excel
library(car) # para analítica
library(lubridate) # para manipular fechas
library(readr) # para importar data
library(knitr) # para markdown
library(foreign)  # for read spss files
library(haven)  # idem
library(janitor)  # funcionalidades muy utiles en manejo de data

Importación de datos

SIUP <- path %>%
  excel_sheets() %>%
  set_names() %>%
  map(read_excel, path=path)
  • c100 = información del capítulo 100 (INFORMACIÓN DEL PERSONAL POLICIAL Y COBERTURA NACIONAL)
  • c200 = información del capítulo 200 (INFRAESTRUCTURA DE LA COMISARÍA)
  • c300 = información del capítulo 300 (EQUIPAMIENTO, COMUNICACIONES Y MOBILIARIO)
    • c300_pc = información individual de las pc’s y laptops registradas
  • c400 = información del capítulo 400 (FUNCIONAMIENTO Y SEGURIDAD)
  • c500 = información del capítulo 500 (MANTENIMIENTO PREVENTIVO Y CORRECTIVO DE INFRAESTRUCTURA)
  • c600 = información del capítulo 600 (PROGRAMAS DE SEGURIDAD CIUDADANA, PATRULLAJE, SERENAZGO INTEGRADO Y PROGRAMAS DE PREVENCIÓN E IMPLEMENTACIÓN DEL NUEVO CÓDIGO PROCESAL PENAL)

Reglas - capítulo 100

1.1: Mostrar al personal involucrado en SIUP (comisarios, logisticos y estadisticos) muy jovenes o muy viejos *(percentiles) por comisaría.
c100_1.1_com <- c100 %>% 
 mutate(cargo= "comisario", pos = ntile(inf102a,dim(c100)[1]), p_rank = round(percent_rank(inf102a),3)*100 ) %>%
  filter(p_rank <=1 | p_rank >= 99) %>%
  select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI,
         inf101a, inf102a, inf105a, cargo ) %>%
  rename(nombres = inf101a, edad= inf102a, DNI= inf105a ) %>%
  arrange(edad)
  

c100_1.1_est <- c100 %>% 
  mutate(cargo= "estadístico", pos = ntile(inf102b,466), p_rank = round(percent_rank(inf102b),3)*100 ) %>%
  filter(p_rank <=1 | p_rank >= 99) %>%
  select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI,
         inf101b, inf102b, inf105b, cargo  ) %>%
  rename(nombres = inf101b, edad= inf102b, DNI= inf105b ) %>%
  arrange(edad)

c100_1.1_log <- c100 %>% 
  filter(!is.na(inf105c)  & inf105c != "NULL") %>%
  mutate(cargo= "logístico", pos = ntile(inf102c,466), p_rank = round(percent_rank(inf102c),3)*100 ) %>%
  filter(p_rank <=1 | p_rank >= 99) %>%
  select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI,
         inf101c, inf102c, inf105c, cargo  ) %>%
  rename(nombres = inf101c, edad= inf102c, DNI= inf105c ) %>%
  mutate(DNI = as.numeric(DNI)) %>%
  arrange(edad)

    ## uniendo en una sola tabla
c100_1.1_global <-   bind_rows(c100_1.1_com,c100_1.1_est,c100_1.1_log)

c100_1.1_global <- c100_1.1_global %>% 
  mutate(val_personal = 1) %>% 
  mutate(id_reglas = 1.1)
  
 # quantile(c100$inf102a, c(.01,.99))  
  # borrando objetos temporales
  rm(c100_1.1_com, c100_1.1_est, c100_1.1_log)
  kable(c100_1.1_global %>% head(10)  , format = "simple", caption = "Top 10 de los resultados de regla 1.1")
Top 10 de los resultados de regla 1.1
id_unidad_policial nombre_unidadp REGION_POL nombre_departamento nombre_provincia nombre_distrito TIPO_COMI nombres edad DNI cargo val_personal id_reglas
1285 CPNP LLACUABAMBA LA LIBERTAD LA LIBERTAD PATAZ PARCOY D REYES CARHUACHIN John 22 73902906 comisario 1 1.1
4508 CPNP LARAQUERI PUNO PUNO PUNO PICHACANI E GAMA MAMANI Jonathan Arnold 22 70192779 comisario 1 1.1
4064 CPNP TAMBILLO AREQUIPA AREQUIPA AREQUIPA SAN JUAN DE SIGUAS D LUIS ANGEL LEON VILLA 23 77022122 comisario 1 1.1
4933 CPNP TAMBO REAL NUEVO ANCASH ANCASH SANTA CHIMBOTE D SANTISTEBAN FRANCISCO JORGE RAUL 24 72034275 comisario 1 1.1
1257 CPNP SAYAPULLO LA LIBERTAD LA LIBERTAD GRAN CHIMU SAYAPULLO D REYNA MENDOZA Juan Alberto 24 73363355 comisario 1 1.1
1654 CPNP TAMANCO LORETO LORETO REQUENA EMILIO SAN MARTIN E paredes manihuari ronaldino 24 76520573 comisario 1 1.1
2130 CPNP SANTA CLARA LIMA LIMA LIMA ATE B SALVADOR VERDE, JOSEPH JHONATAN 24 70188371 comisario 1 1.1
5816 CPNP SAN ISIDRO TUMBES TUMBES TUMBES CORRALES D KHATERYN LISBETH VALLEJOS OCAMPO 24 70071721 comisario 1 1.1
5140 CPNP HUALGAYOC-BAMBAMARCA CAJAMARCA CAJAMARCA HUALGAYOC BAMBAMARCA B ACUÑA ROJAS HUGO HANS 24 77174553 comisario 1 1.1
7562 CPNP MARANURA CUSCO CUSCO LA CONVENCION MARANURA D GUZMAN HERRERA JESIMIEL LIDNI 24 71435065 comisario 1 1.1
1.2: Validar la cantidad de personal registrado en las preguntas 111 al 145 respecto al total que arroja el sistema
kable(c100_1.2_global %>% head(10), format = "simple", caption = "Resultados regla 1.2")
Resultados regla 1.2
id_unidad_policial nombre_unidadp REGION_POL nombre_departamento nombre_provincia nombre_distrito TIPO_COMI val_total pregunta id_reglas
2050 CPNP SANTOYO LIMA LIMA LIMA EL AGUSTINO B 1 p11 1.2
1917 CPNP EL RIMAC LIMA LIMA LIMA RIMAC A 1 p11 1.2
2365 CPNP PARAMONGA LIMA LIMA BARRANCA PARAMONGA A 1 p11 1.2
1917 CPNP EL RIMAC LIMA LIMA LIMA RIMAC A 1 p12 1.2
1805 CPNP LAURA CALLER LIMA LIMA LIMA LOS OLIVOS A 1 p12 1.2
1830 CPNP CARABAYLLO LIMA LIMA LIMA CARABAYLLO A 1 p12 1.2
2212 CPNP SAGITARIO LIMA LIMA LIMA SANTIAGO DE SURCO B 1 p12 1.2
2365 CPNP PARAMONGA LIMA LIMA BARRANCA PARAMONGA A 1 p12 1.2
1805 CPNP LAURA CALLER LIMA LIMA LIMA LOS OLIVOS A 1 p14 1.2
3608 CPNP TINTA CUSCO CUSCO CANCHIS TINTA E 1 p14 1.2
1.3: Validar la cantidad de personal en comisarias a través de las preguntas de agregación (sumatorias de personal policial y civil) de 111 al 145 respecto a los totales brindaos por el sistema.
c100_1.3_global <-  c100_1.2 %>% 
  select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI, 
         inftotarmas, inftotservicios, 
         C_CAS_H, C_CAS_M, C_ORS_H, C_ORS_M,
         inf110tot) %>% 
  mutate(tot_a_s = inftotarmas +inftotservicios ) %>% 
  mutate(total_civil = C_CAS_H + C_CAS_M + C_ORS_H + C_ORS_M) %>%  # SE AGREGO EL DIA 03/08/2021
  mutate(val_total = if_else(tot_a_s + total_civil ==inf110tot, 0,1)) %>% 
  mutate(id_reglas = 1.3) %>% 
  ungroup()

  #filter(val_total=='1') 
  #arrange(val_total -inf110tot )
kable( c100_1.3_global %>% filter(val_total == 1) %>%  head(10), format = "simple", caption = "Top 10 de los resultados de regla 1.3"  )
Top 10 de los resultados de regla 1.3
id_unidad_policial nombre_unidadp REGION_POL nombre_departamento nombre_provincia nombre_distrito TIPO_COMI inftotarmas inftotservicios C_CAS_H C_CAS_M C_ORS_H C_ORS_M inf110tot tot_a_s total_civil val_total id_reglas
2010 CPNP UNIDAD VECINAL 3 B LIMA LIMA LIMA LIMA B 74 2 3 2 0 0 82 76 5 1 1.3
4892 CPNP SAN PEDRO ANCASH ANCASH SANTA CHIMBOTE A 90 1 0 0 0 0 93 91 0 1 1.3
4635 CPNP COLLAO-LLAVE PUNO PUNO EL COLLAO ILAVE A 125 0 0 0 0 0 126 125 0 1 1.3
711 CPNP NUEVA SULLANA PIURA PIURA SULLANA SULLANA D 44 0 0 1 0 0 44 44 1 1 1.3
3592 CPNP SALVACION CUSCO MADRE DE DIOS MANU MANU D 15 0 0 0 0 0 16 15 0 1 1.3
2050 CPNP SANTOYO LIMA LIMA LIMA EL AGUSTINO B 82 1 1 2 1 1 85 83 5 1 1.3
1917 CPNP EL RIMAC LIMA LIMA LIMA RIMAC A 102 3 1 4 0 0 105 105 5 1 1.3
1912 CPNP PIEDRA LIZA LIMA LIMA LIMA RIMAC B 70 0 3 1 0 0 73 70 4 1 1.3
1860 CPNP PAYET LIMA LIMA LIMA INDEPENDENCIA B 57 1 1 1 0 0 61 58 2 1 1.3
2155 CPNP CIENEGUILLA LIMA LIMA LIMA CIENEGUILLA B 60 1 0 2 0 0 62 61 2 1 1.3
1.4: Validar número de policias según el grado militar respecto a las preg mostradas automaticamente en el sistema
c100_1.4 <- c100 %>% rowwise(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI )

c100_1.4_global <- c100_1.4 %>%
    mutate(total_r = sum(c_across(inf1460a:inf14614s))) %>% 
  
    select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI,
           total_r) %>%           # ----- > hasta aquí es exclusivamente con la pregunta 146
  
      inner_join(c100_1.3_global, by =c('id_unidad_policial') ) %>%   # ----- > aquí se realiza join con tabla de pregunta anterior
  
        mutate(val_total_flag_preg = if_else(total_r==inf110tot,0,1),  # total_r vs total del sistema 
               val_total_flag_r1.3 = if_else(total_r==tot_a_s,0,1)) %>% 
  
                select(id_unidad_policial, nombre_unidadp.x, REGION_POL.x, nombre_departamento.x, nombre_provincia.x, nombre_distrito.x, TIPO_COMI.x, 
                       total_r, inf110tot, tot_a_s, val_total_flag_preg, val_total_flag_r1.3) %>% 
                rename(total_preg_146 = total_r, total_preg_111.145_preg=inf110tot, total_armas_servic=tot_a_s) %>% 
                arrange(total_preg_146 - total_preg_111.145_preg) %>% 
  mutate(id_reglas = 1.4)
# para el consolidado se utiliza la columna  val_total_flag_r1.3 (03/08/2021)
kable(c100_1.4_global %>% filter(val_total_flag_preg == 1) %>% head(10), format = "simple", caption = "Top 10 de los resultados de regla 1.4")
Top 10 de los resultados de regla 1.4
id_unidad_policial nombre_unidadp.x REGION_POL.x nombre_departamento.x nombre_provincia.x nombre_distrito.x TIPO_COMI.x total_preg_146 total_preg_111.145_preg total_armas_servic val_total_flag_preg val_total_flag_r1.3 id_reglas
2217 CPNP SAN ISIDRO LIMA LIMA LIMA SAN ISIDRO A 114 122 114 1 0 1.4
2280 CPNP VILLA MARIA DEL TRIUNFO LIMA LIMA LIMA VILLA MARIA DEL TRIUNFO A 109 117 109 1 0 1.4
1920 CPNP SAN MARTIN DE PORRAS LIMA LIMA LIMA SAN MARTIN DE PORRES A 137 144 137 1 0 1.4
2270 CPNP VILLA EL SALVADOR LIMA LIMA LIMA VILLA EL SALVADOR A 101 108 101 1 0 1.4
1855 CPNP INDEPENDENCIA LIMA LIMA LIMA INDEPENDENCIA A 213 220 213 1 0 1.4
1865 CPNP TAHUANTINSUYO LIMA LIMA LIMA INDEPENDENCIA B 80 87 80 1 0 1.4
1875 CPNP COLLIQUE LIMA LIMA LIMA COMAS B 77 84 77 1 0 1.4
2210 CPNP MONTERRICO LIMA LIMA LIMA SANTIAGO DE SURCO B 122 129 122 1 0 1.4
2475 CPNP CHACLACAYO LIMA LIMA LIMA CHACLACAYO B 83 90 83 1 0 1.4
2010 CPNP UNIDAD VECINAL 3 B LIMA LIMA LIMA LIMA B 76 82 76 1 0 1.4

Reglas - capítulo 200

2.1: Validar que el área del terreno (p203) sea mayor que el área que ocupa la comi (p204)
c200_2.1_global <- c200 %>% mutate(val_area = if_else(inf203 >= inf204,0,1)) %>% 
  select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI
         , inf203, inf204,  val_area) %>% 
  mutate(id_reglas = 2.1)

kable(c200_2.1_global %>% filter(val_area=='1') %>% head(10) , format = "simple", caption = "Top 10 de los resultados de regla 2.1")
Top 10 de los resultados de regla 2.1
id_unidad_policial nombre_unidadp REGION_POL nombre_departamento nombre_provincia nombre_distrito TIPO_COMI inf203 inf204 val_area id_reglas
4600 CPNP AZANGARO PUNO PUNO AZANGARO AZANGARO A 95.75 695.75 1 2.1
4280 CPNP PAMPA INALAMBRICA MOQUEGUA MOQUEGUA ILO ILO B 10.00 1618.47 1 2.1
1990 CPNP COTABAMBAS LIMA LIMA LIMA LIMA A 718.68 1740.00 1 2.1
6008 CPNP JUAN INGUNZA VALDIVIA CALLAO CALLAO CALLAO CALLAO B 489.06 658.00 1 2.1
4285 CPNP CENTRAL TACNA TACNA TACNA TACNA A 504.46 893.02 1 2.1
653 CPNP YAPATERA PIURA PIURA MORROPON CHULUCANAS D 2.52 288.00 1 2.1
760 CPNP PAITA PIURA PIURA PAITA PAITA A 525.60 624.60 1 2.1
4250 CPNP TORATA MOQUEGUA MOQUEGUA MARISCAL NIETO TORATA B 444.35 2112.00 1 2.1
1092 CPNP BUENOS AIRES LA LIBERTAD LA LIBERTAD TRUJILLO VICTOR LARCO HERRERA B 314.46 411.96 1 2.1
1122 CPNP NICOLAS ALCAZAR LA LIBERTAD LA LIBERTAD TRUJILLO EL PORVENIR B 447.50 485.46 1 2.1
2.2: Validar que los años de antiguedad de las comisarias sean menores a 90 años
c200_2.2_global <- c200 %>% mutate(val_anios = if_else(inf206 > 90 ,1, 0)) %>%
  select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI
         , inf206,  val_anios) %>% 
  mutate(id_reglas = 2.2)

kable(c200_2.2_global %>% filter(val_anios=='1') %>% head(10), format = "simple", caption = "Top 10 de los resultados de regla 2.2")
Top 10 de los resultados de regla 2.2
id_unidad_policial nombre_unidadp REGION_POL nombre_departamento nombre_provincia nombre_distrito TIPO_COMI inf206 val_anios id_reglas
1538 CPNP IQUITOS LORETO LORETO MAYNAS IQUITOS A 100 1 2.2
1997 CPNP MONSERRATE LIMA LIMA LIMA LIMA A 120 1 2.2
1995 CPNP ALFONSO UGARTE LIMA LIMA LIMA LIMA A 116 1 2.2
2000 CPNP PETIT THOUARS LIMA LIMA LIMA LIMA A 130 1 2.2
3650 CPNP ESPINAR CUSCO CUSCO ESPINAR ESPINAR A 100 1 2.2
7554 CPNP PAVAYOC CUSCO CUSCO LA CONVENCION SANTA ANA D 110 1 2.2
3475 CPNP CUZCO CUSCO CUSCO CUSCO CUSCO A 100 1 2.2
4070 CPNP SANTA MARTA AREQUIPA AREQUIPA AREQUIPA AREQUIPA A 160 1 2.2
4068 CPNP PALACIO VIEJO AREQUIPA AREQUIPA AREQUIPA AREQUIPA A 220 1 2.2
4285 CPNP CENTRAL TACNA TACNA TACNA TACNA A 103 1 2.2
2.3: Validar que las comisarias que NO cuentan con planos de construccion, no respondan la preg208
c200_2.3_global <- c200 %>% 
  mutate(val_nocorresp = if_else(inf207 %in% c('2','3') & (inf208a == 1 | inf208b ==1 | inf208c ==1 | inf208d ==1),1,0  )) %>% 
  select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI
         , inf207, inf208a, inf208b, inf208c, inf209d, val_nocorresp) %>% 
  mutate(id_reglas = 2.3)



kable(c200_2.3_global %>% filter(val_nocorresp=='1'), format = "simple", caption = "Top 10 de los resultados de regla 2.3")
Top 10 de los resultados de regla 2.3
id_unidad_policial nombre_unidadp REGION_POL nombre_departamento nombre_provincia nombre_distrito TIPO_COMI inf207 inf208a inf208b inf208c inf209d val_nocorresp id_reglas
1995 CPNP ALFONSO UGARTE LIMA LIMA LIMA LIMA A 2 1 0 0 1 1 2.3
4078 CPNP MOLLENDO AREQUIPA AREQUIPA ISLAY MOLLENDO A 3 1 1 1 2 1 2.3
1915 CPNP EL MANZANO LIMA LIMA LIMA RIMAC B 3 1 0 0 1 1 2.3
2145 CPNP LA MOLINA LIMA LIMA LIMA LA MOLINA A 2 1 0 0 2 1 2.3
2309 CPNP VILLA ALEJANDRO LIMA LIMA LIMA VILLA MARIA DEL TRIUNFO B 2 1 1 1 1 1 2.3
2465 CPNP SAN LUIS (CAÑETE) LIMA LIMA CAÑETE SAN LUIS B 3 0 1 0 2 1 2.3
3547 CPNP CHINCHAYPUCYO CUSCO CUSCO ANTA CHINCHAYPUJIO E 3 1 0 0 2 1 2.3
3540 CPNP IZCUCHACA CUSCO CUSCO ANTA ANTA C 2 0 1 0 1 1 2.3
7564 CPNP SANTA MARIA CUSCO CUSCO LA CONVENCION MARANURA D 2 1 0 0 2 1 2.3
952 CPNP TUCUME LAMBAYEQUE LAMBAYEQUE LAMBAYEQUE TUCUME C 2 1 0 0 2 1 2.3
3280 CPNP MAYOCC HUANCAVELICA HUANCAVELICA CHURCAMPA SAN MIGUEL DE MAYOCC D 3 1 1 1 2 1 2.3
2.4: Validar la suma de cantidades de puertas (p239)
c200_row <-  c200 %>% rowwise(id_unidad_policial, nombre_unidadp)

c200_2.4_global <- c200_row %>% 
  mutate(sum_r1 = sum(c_across(inf239totalest1:inf239totalest4)), sum_r2 = inf239totalest1+inf239totalme ) %>% 
  mutate(val_r1 = if_else(sum_r1 == inf239total, 0, 1), val_r2 = if_else(sum_r2 == inf239total, 0, 1)) %>% 
  select(id_unidad_policial, nombre_unidadp, inf239total, inf239totalest1, inf239totalme, sum_r1, sum_r2,  val_r1, val_r2) %>% 
  mutate(id_reglas = 2.4) %>% 
  ungroup()

kable(c200_2.4_global %>% filter(val_r2=='1') %>%  head(10), format = "simple", caption = "Top 10 de los resultados de regla 2.4")
Top 10 de los resultados de regla 2.4
id_unidad_policial nombre_unidadp inf239total inf239totalest1 inf239totalme sum_r1 sum_r2 val_r1 val_r2 id_reglas
1085 CPNP AYACUCHO 8 8 1 8 9 0 1 2.4
4886 CPNP 21 DE ABRIL 6 6 1 6 7 0 1 2.4
1652 CPNP IBERIA 14 10 6 14 16 0 1 2.4
1965 CPNP SAN MIGUEL 33 28 7 33 35 0 1 2.4
2285 CPNP JC MARIATEGUI 31 31 1 31 32 0 1 2.4
7512 CPNP SIVIA 3 0 4 3 4 0 1 2.4
5140 CPNP HUALGAYOC-BAMBAMARCA 20 20 3 20 23 0 1 2.4
3541 CPNP ZURITE 3 3 12 3 15 0 1 2.4
3552 CPNP AMPARAES 6 5 4 6 9 0 1 2.4
4216 CPNP CHUQUIBAMBA CONDESUYOS 9 9 4 9 13 0 1 2.4
2.5: Validar la suma de cantidades de ventanas (p242)
c200_2.5_global <- c200_row %>% 
  mutate(sum_r1 = sum(c_across(inf242totalest1:inf242totalest4)), sum_r2 = inf242totalest1 + inf242totalme) %>% 
  mutate(val_r1 = if_else(sum_r1 == inf242total, 0, 1), val_r2 = if_else(sum_r2 == inf242total, 0, 1)) %>% 
  select(id_unidad_policial, nombre_unidadp, inf242total, inf242totalest1, inf242totalme, sum_r1, sum_r2,  val_r1, val_r2  ) %>% 
  mutate(id_reglas = 2.5) %>% 
  ungroup()

kable(c200_2.5_global %>% filter(val_r2=='1') %>% head(10) , format = "simple", caption = "Top 10 de los resultados de regla 2.5")
Top 10 de los resultados de regla 2.5
id_unidad_policial nombre_unidadp inf242total inf242totalest1 inf242totalme sum_r1 sum_r2 val_r1 val_r2 id_reglas
7500 CPNP HUANTA 64 64 8 64 72 0 1 2.5
3484 CPNP INDEPENDENCIA 12 12 2 12 14 0 1 2.5
1167 CPNP SALPO 10 10 1 10 11 0 1 2.5
3360 CPNP OCROS 11 10 2 11 12 0 1 2.5
3541 CPNP ZURITE 12 12 12 12 24 0 1 2.5
4066 CPNP SAN ANTONIO DE CHUCA - IMATA 88 78 20 88 98 0 1 2.5
4650 CPNP POMATA 2 2 2 2 4 0 1 2.5
4625 CPNP MACUSANI-CARABAYA 5 0 13 5 13 0 1 2.5
3682 CPNP DELTA 1 5 5 5 5 10 0 1 2.5
2.6: Validar las sumas de las cantidades de luminarias (p248)
c200_2.6_global <- c200_row %>% 
  mutate(val_r1 = if_else( inf248tot == inf248totf + inf248totnf, 0, 1 )) %>% 
  mutate(val_r2 = if_else( inf248totf==inf2481a+inf2482a+inf2483a+inf2484a+inf2485a+inf2486a,0,1 )) %>% 
  select(id_unidad_policial, nombre_unidadp, val_r1, val_r2  ) %>% 
  mutate(id_reglas = 2.6) %>% 
  ungroup()

kable(c200_2.6_global %>% filter(val_r2 =='1') %>% head(10), format = "simple")
id_unidad_policial nombre_unidadp val_r1 val_r2 id_reglas
2.7: Validar que la sumatoria de áreas de los ambientes de la comisaría sea consistente con la P203, P04 y 209
c200_2.7_v1 <- c200_row %>% 
  select(id_unidad_policial, nombre_unidadp, inf203, inf204, (contains('area')) ,c(107: 113 ) ) #, c(78:84))
# transformado todas las variables el NULL por NA
  c200_2.7_v1[c200_2.7_v1=="NULL"] <- '0'


# extrayendo vectores de columnas para dividir entre cadenas y numericos  
c200_2.7_v1.n <-  c200_2.7_v1 %>%  select_if(is.numeric) %>% colnames() # nombres de var numericas
c200_2.7_v1.s <-  c200_2.7_v1 %>%  select_if(is.character) %>% colnames() # mombres de var categoricas

c200_2.7_v1.s <- c200_2.7_v1.s[-c(1,2)]
  
# convirtiendo a numerico para faciliar calculo
  c200_2.7_v1[,c200_2.7_v1.s] = data.frame(apply(c200_2.7_v1[,c200_2.7_v1.s],2, as.numeric)) 
  
  
# luego
  c200_2.7_v2 <- c200_2.7_v1 %>% 
      mutate(sum_a = sum(c_across(inf25511area:inf255106area))) %>% 
      mutate(sum_a_p209 = sum(c_across(inf210a:inf210g))) %>% 
    
      select(id_unidad_policial  , nombre_unidadp, inf203, inf204, sum_a, sum_a_p209) %>% 
        
    mutate(val_203 = if_else( inf203 - sum_a < 0,1,0) , val_204 = if_else( inf204 - sum_a <0,1,0 )) %>% 
      mutate(val_209 = if_else(sum_a_p209 >= sum_a, 0, 1)) %>%  filter(val_209 == 1) %>% 
      arrange(sum_a_p209) ;


c200_2.7_global <- c200_2.7_v2 %>% ungroup() %>%   # se usa ungroup debido a que por defecto estaba calculando con rowwise
mutate(p_rank = round(percent_rank(sum_a_p209),3)*100 ) %>% 
  filter(p_rank <= 5 | p_rank >= 95) %>% 
  mutate(id_reglas = 2.7)


kable(c200_2.7_global %>% filter(val_209==1) %>%  head(10) , format = "simple", caption = "Top 10 de los resultados de regla 2.7")
Top 10 de los resultados de regla 2.7
id_unidad_policial nombre_unidadp inf203 inf204 sum_a sum_a_p209 val_203 val_204 val_209 p_rank id_reglas
3610 CPNP DE CHECACUPE 462.60 200.0 59 1 0 0 1 0.0 2.7
7012 CPNP PUERTO PIZANA 1200.00 200.0 263 1 0 1 1 0.0 2.7
3471 CPNP MARCABAMBA 637.00 281.0 45 2 0 0 1 0.6 2.7
1158 CPNP JULCAN 1200.00 200.0 107 3 0 0 1 0.9 2.7
1434 CPNP BALSAS 194.64 112.0 334 6 1 1 1 1.1 2.7
1639 CPNP CURINGA 10.00 12.0 28 8 1 1 1 1.4 2.7
1650 CPNP SANTA ELENA 42.00 10.0 13 10 0 1 1 1.7 2.7
1566 CPNP SANTA MARIA DE NANAY 240.00 240.0 55 10 0 0 1 1.7 2.7
5934 CPNP DOS DE MAYO 741.40 306.9 284 13 0 0 1 2.3 2.7
1479 CPNP OMIA 25.00 15.0 50 15 1 1 1 2.6 2.7

Reglas - capítulo 300

3.1: Validar que el número de equipos de comunicacion sumatoria(p302, p303 y p304) sea igual a su total sumatoria(p305)
c300_row <- c300 %>% rowwise(id_unidad_policial, nombre_unidadp)

# seleccionando un conjunto de colummnas para hacer transformación masiva de NULL <- 0  
C300_3.1_v1 <- c300_row %>% select(id_unidad_policial, nombre_unidadp, c(58:102) )
C300_3.1_v1[C300_3.1_v1 == "NULL"]  <- '0' 


c300_3.1_global <- C300_3.1_v1 %>% 
  mutate(total_r = sum( as.numeric( c_across(inf3031a:inf3049d)) ), total_sum_r = sum( as.numeric( c_across(inf3051:inf3059)) )) %>% 
  mutate(val_305 = if_else(total_r == total_sum_r, 0 ,1 )) %>% 
  select(id_unidad_policial, nombre_unidadp, total_r, total_sum_r, val_305) %>% 
  mutate(id_reglas = 3.1) %>% 
  ungroup()
  

kable(c300_3.1_global %>% filter(val_305 == '1') %>% head(10), format ="simple", caption = "Top 10 de los resultados de regla 3.1" )
Top 10 de los resultados de regla 3.1
id_unidad_policial nombre_unidadp total_r total_sum_r val_305 id_reglas
3.2: Validar que el número de equipos informáticos (p307) sea igual a su total (p310)
c300_3.2_v1 <- c300_row %>% select(id_unidad_policial, nombre_unidadp, TIPO_COMI, c(122:166))
 c300_3.2_v1[c300_3.2_v1 == "NULL"] <- '0'

c300_3.2_v1a <-  c300_3.2_v1 %>%  select_if(is.numeric) %>% colnames() # nombres de var numericas
c300_3.2_v1b <-  c300_3.2_v1 %>%  select_if(is.character) %>% colnames() # mombres de var categoricas

c300_3.2_v1b <- c300_3.2_v1b[-c(2,3)] # para no transformar variables categoricas importantes
 
  # transformo todas las variables categoricas a numericas --> con apply
c300_3.2_v1[,c300_3.2_v1b] = data.frame(apply(c300_3.2_v1[,c300_3.2_v1b],2, as.numeric)) 

c300_3.2_global <- c300_3.2_v1 %>% 
  mutate(total_r = sum(c_across(inf3081a:inf3099d))) %>% 
  mutate(total_sum_r = sum(c_across(inf3101:inf3109))) %>% 
  mutate(val_310 = if_else(total_r == total_sum_r, 0, 1)) %>% 
  select(id_unidad_policial, nombre_unidadp, TIPO_COMI, total_r, total_sum_r, val_310)  %>% 
  mutate(id_reglas = 3.2) %>% 
  ungroup()
  
  #filter(TIPO_COMI %in% c('A'))

kable(c300_3.2_global %>% filter(val_310 == '1') %>% head(10), format ="simple", caption = "Top 10 de los resultados de regla 3.2" )
Top 10 de los resultados de regla 3.2
id_unidad_policial nombre_unidadp TIPO_COMI total_r total_sum_r val_310 id_reglas
3.3: Validar para cada comisaria, que los registros en la preg 313 correspondan en igual numero a las registradas en la preg 307 - 310
c300_3.3 <- c300 %>% 
  rowwise(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI) %>% 
  select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI,
         inf3101, inf3102)

  #transformando
  c300_3.3[c300_3.3 == 'NULL']  <- '0'

  # para recodificar
  c300_3.3$inf3101 <-   recode(c300_3.3$inf3101, "NA=0") # Este tipo solo funciona con recode de car
  
  c300_3.3$inf3101 <-  as.numeric(c300_3.3$inf3101)
  c300_3.3$inf3102 <-  as.numeric(c300_3.3$inf3102)
  
  # Entonces con preg 310 se obtiene los totales de pc/laptops
c300_3.3_v1 <- c300_3.3  %>% 
  mutate(total_compu1 = inf3101+inf3102 )

  # posteriormente se obtiene reporte a contrastar con preg 313 (sobre detalle pc/laptops)

c300_pc_3.3 <- c300_pc %>% 
  group_by(id_unidad_policial) %>% 
  select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI) %>% 
  mutate(recuento = n()) %>% 
 distinct()

# otra forma
c300_pc_3.3_2 <- c300_pc %>% 
  group_by(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI) %>% 
  summarise(recuento = n())
  
# al final, unimos todo !!

c300_3.3_global <- c300_3.3_v1 %>% 
  inner_join(c300_pc_3.3_2, by = c('id_unidad_policial')) %>% 
  select(id_unidad_policial, nombre_unidadp.x, REGION_POL.x, nombre_departamento.x, nombre_provincia.x, nombre_distrito.x, TIPO_COMI.x,
         inf3101, inf3102, total_compu1, recuento) %>% 
  mutate(val_compus = if_else(total_compu1 == recuento,0,1)) %>% 
  mutate(id_reglas = 3.3) %>% 
  ungroup()


kable(c300_3.3_global %>% filter(val_compus == '1') %>% head(10), format ="simple", caption = "Top 10 de los resultados de regla 3.3" )
Top 10 de los resultados de regla 3.3
id_unidad_policial nombre_unidadp.x REGION_POL.x nombre_departamento.x nombre_provincia.x nombre_distrito.x TIPO_COMI.x inf3101 inf3102 total_compu1 recuento val_compus id_reglas
3663 CPNP PUERTO MALDONADO MADRE DE DIOS MADRE DE DIOS TAMBOPATA TAMBOPATA B 24 1 25 24 1 3.3
1168 CPNP VIRU LA LIBERTAD LA LIBERTAD VIRU VIRU B 13 0 13 14 1 3.3
1990 CPNP COTABAMBAS LIMA LIMA LIMA LIMA A 27 0 27 26 1 3.3
6014 CPNP DULANTO CALLAO CALLAO CALLAO CALLAO B 13 0 13 14 1 3.3
937 CPNP SAN MARTIN DE PORRAS LAMBAYEQUE LAMBAYEQUE LAMBAYEQUE LAMBAYEQUE B 7 0 7 6 1 3.3
1356 CPNP RIOJA SAN MARTIN SAN MARTIN RIOJA RIOJA B 34 1 35 36 1 3.3
4266 CPNP QUINISTAQUILLAS MOQUEGUA MOQUEGUA GENERAL SANCHEZ CERRO QUINISTAQUILLAS D 4 0 4 5 1 3.3
1123 CPNP FLORENCIA DE MORA LA LIBERTAD LA LIBERTAD TRUJILLO FLORENCIA DE MORA B 18 0 18 16 1 3.3
1925 CPNP CONDEVILLA LIMA LIMA LIMA SAN MARTIN DE PORRES B 20 0 20 19 1 3.3
1920 CPNP SAN MARTIN DE PORRAS LIMA LIMA LIMA SAN MARTIN DE PORRES A 30 0 30 12 1 3.3
3.4: Validar con percentiles los años de antiguedad de las pc/laptop preg 317
c300_3.4 <- c300_pc %>% 
  select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI, inf317) 

# tranformando y recoficando
c300_3.4[c300_3.4 == 'NULL'] <- '0'
c300_3.4$inf317 <- as.numeric(c300_3.4$inf317)

# entonces
c300_3.4_global <- c300_3.4 %>% 
  mutate(p_rank =round(percent_rank(inf317),3) *100) %>% 
  filter(p_rank > 99) %>% 
  mutate(val_ant = 1) %>% 
  mutate(id_reglas = 3.4)

kable(c300_3.4_global %>% filter(val_ant == '1') %>% head(10), format ="simple", caption = "Top 10 de los resultados de regla 3.4" )
Top 10 de los resultados de regla 3.4
id_unidad_policial nombre_unidadp REGION_POL nombre_departamento nombre_provincia nombre_distrito TIPO_COMI inf317 p_rank val_ant id_reglas
5904 CPNP RANCHO HUANUCO HUANUCO HUANUCO CHURUBAMBA D 17 99.9 1 3.4
5904 CPNP RANCHO HUANUCO HUANUCO HUANUCO CHURUBAMBA D 13 99.6 1 3.4
4076 CPNP CIUDAD MI TRABAJO AREQUIPA AREQUIPA AREQUIPA SOCABAYA A 11 99.2 1 3.4
4068 CPNP PALACIO VIEJO AREQUIPA AREQUIPA AREQUIPA AREQUIPA A 13 99.6 1 3.4
5343 PUEBLO NUEVO (CHINCHA) ICA ICA CHINCHA PUEBLO NUEVO B 12 99.4 1 3.4
2105 CPNP BAYOVAR LIMA LIMA LIMA SAN JUAN DE LURIGANCHO B 13 99.6 1 3.4
2105 CPNP BAYOVAR LIMA LIMA LIMA SAN JUAN DE LURIGANCHO B 13 99.6 1 3.4
2105 CPNP BAYOVAR LIMA LIMA LIMA SAN JUAN DE LURIGANCHO B 13 99.6 1 3.4
1525 CPNP ARAMANGO AMAZONAS AMAZONAS BAGUA ARAMANGO E 12 99.4 1 3.4
3484 CPNP INDEPENDENCIA CUSCO CUSCO CUSCO CUSCO C 12 99.4 1 3.4
3.5: Validar que la preg 328-3 sea exactamente igual a la preg 330
c300_3.5 <- c300 %>% 
  select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI,
         inf3283, inf330)

# recodificando
c300_3.5$inf3283 <- recode(c300_3.5$inf3283, "2=0") ;
c300_3.5$inf330 <- recode(c300_3.5$inf330, "2=0")

# entonces

c300_3.5_global <-c300_3.5 %>% 
  mutate(val_SIDPOL = if_else(inf3283 == inf330, 0, 1)) %>% 
  mutate(id_reglas = 3.5)

kable(c300_3.5_global %>% filter(val_SIDPOL == '1') %>% head(10), format ="simple", caption = "Top 10 de los resultados de regla 3.5" )
Top 10 de los resultados de regla 3.5
id_unidad_policial nombre_unidadp REGION_POL nombre_departamento nombre_provincia nombre_distrito TIPO_COMI inf3283 inf330 val_SIDPOL id_reglas
7013 CPNP VENENILLO HUANUCO HUANUCO LEONCIO PRADO RUPA-RUPA D 1 0 1 3.5
4268 CPNP ICHUÑA MOQUEGUA MOQUEGUA GENERAL SANCHEZ CERRO ICHUÑA C 1 0 1 3.5
3592 CPNP SALVACION CUSCO MADRE DE DIOS MANU MANU D 1 0 1 3.5
1135 CPNP SIMBAL LA LIBERTAD LA LIBERTAD TRUJILLO SIMBAL E 1 0 1 3.5
1614 CPNP SANTA RITA DE CASTILLA LORETO LORETO LORETO PARINARI E 1 0 1 3.5
1625 CPNP CHIMBOTE LORETO LORETO MARISCAL RAMON CASTILLA RAMON CASTILLA E 0 1 1 3.5
7650 CPNP SAN ANTONIO DE JICAMARCA LIMA LIMA LIMA SAN JUAN DE LURIGANCHO B 1 0 1 3.5
3406 CPNP QUEROBAMBA-SUCRE AYACUCHO AYACUCHO SUCRE QUEROBAMBA E 0 1 1 3.5
3391 CPNP VILCANCHOS AYACUCHO AYACUCHO VICTOR FAJARDO VILCANCHOS E 1 0 1 3.5
3362 CPNP CHACCO AYACUCHO AYACUCHO HUAMANGA JESUS NAZARENO E 1 0 1 3.5
3.6: Validar que la sumatoria de cifras de preg 339 sea igual a preg 348
c300_3.6 <- c300 %>% 
  select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI,
         contains('inf339'), contains('inf347')) 

# recodificando
c300_3.6[c300_3.6 == 'NULL']  <- '0'

# convirtiendo cadena a numerico
c300_3.6[,8:31] = data.frame(apply(c300_3.6[,8:31], 2, as.numeric))

# entonces

c300_3.6_global<- c300_3.6 %>% rowwise(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI) %>% 
  mutate(tot_r1 =inf33911+inf33912,
         tot_r2 = inf33921+inf33922,
         tot_r3 = inf33931+inf33932,
         tot_r4 = inf33941+inf33942,
         tot_r5 = inf33951+inf33952,
         tot_r6 = inf33961+inf33962,
         tot_r7 = inf33971+inf33972,
         tot_r8 = inf33981+inf33982) %>% 
  mutate(val_r1 = if_else(tot_r1 == inf3471, 0, 1),
         val_r2 = if_else(tot_r2 == inf3472, 0, 1),
         val_r3 = if_else(tot_r3 == inf3473, 0, 1),
         val_r4 = if_else(tot_r4 == inf3474, 0, 1),
         val_r5 = if_else(tot_r5 == inf3475, 0, 1),
         val_r6 = if_else(tot_r6 == inf3476, 0, 1),
         val_r7 = if_else(tot_r7 == inf3477, 0, 1),
         val_r8 = if_else(tot_r8 == inf3478, 0, 1) ) %>% 
  mutate(val_final = if_else(sum(c_across(val_r1:val_r8))>0, 1, 0)) %>% 
  select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI, val_final) %>% 
  mutate(id_reglas = 3.6) %>% 
  ungroup() ;


kable(c300_3.6_global %>% filter(val_final == '1') %>% head(10), format ="simple", caption = "Top 10 de los resultados de regla 3.6" )
Top 10 de los resultados de regla 3.6
id_unidad_policial nombre_unidadp REGION_POL nombre_departamento nombre_provincia nombre_distrito TIPO_COMI val_final id_reglas
3663 CPNP PUERTO MALDONADO MADRE DE DIOS MADRE DE DIOS TAMBOPATA TAMBOPATA B 1 3.6
1085 CPNP AYACUCHO LA LIBERTAD LA LIBERTAD TRUJILLO TRUJILLO A 1 3.6
1985 CPNP SAN ANDRES LIMA LIMA LIMA LIMA A 1 3.6
6010 CPNP PLAYA RIMAC CALLAO CALLAO CALLAO CALLAO B 1 3.6
3650 CPNP ESPINAR CUSCO CUSCO ESPINAR ESPINAR A 1 3.6
4068 CPNP PALACIO VIEJO AREQUIPA AREQUIPA AREQUIPA AREQUIPA A 1 3.6
808 CPNP DEL NORTE LAMBAYEQUE LAMBAYEQUE CHICLAYO CHICLAYO B 1 3.6
1341 CPNP UCHUGLLA SAN MARTIN SAN MARTIN MOYOBAMBA MOYOBAMBA B 1 3.6
4801 CPNP HUARAZ ANCASH ANCASH HUARAZ HUARAZ A 1 3.6
4635 CPNP COLLAO-LLAVE PUNO PUNO EL COLLAO ILAVE A 1 3.6
3.7: Validar que la sumatoria de cifras de preg 337 sea igual a preg 348 y a la sumatoria de preg 339
c300_3.7 <- c300 %>% 
  select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI,
         contains('inf337'), contains('inf347') )
  
# recodificando
c300_3.7[c300_3.7 == 'NULL']  <- '0'

# convirtiendo cadena a numerico
c300_3.7[,8:39] = data.frame(apply(c300_3.7[,8:39], 2, as.numeric))

# entonces

c300_3.7_global <- c300_3.7 %>% rowwise(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI) %>% 
  mutate(tot_r1 = sum(c_across(inf3371a : inf3371c)),
         tot_r2 = sum(c_across(inf3372a : inf3372c)),
         tot_r3 = sum(c_across(inf3373a : inf3373c)),
         tot_r4 = sum(c_across(inf3374a : inf3374c)),
         tot_r5 = sum(c_across(inf3375a : inf3375c)),
         tot_r6 = sum(c_across(inf3376a : inf3376c)),
         tot_r7 = sum(c_across(inf3377a : inf3377c)),
         tot_r8 = sum(c_across(inf3378a : inf3378c)) ) %>% 
  mutate(val_r1 = if_else(tot_r1 == inf3471, 0, 1),
         val_r2 = if_else(tot_r2 == inf3472, 0, 1),
         val_r3 = if_else(tot_r3 == inf3473, 0, 1),
         val_r4 = if_else(tot_r4 == inf3474, 0, 1),
         val_r5 = if_else(tot_r5 == inf3475, 0, 1),
         val_r6 = if_else(tot_r6 == inf3476, 0, 1),
         val_r7 = if_else(tot_r7 == inf3477, 0, 1),
         val_r8 = if_else(tot_r8 == inf3478, 0, 1) ) %>% 
  mutate(val_final = if_else(sum(c_across(val_r1:val_r8))>0, 1, 0)) %>% 
  select(id_unidad_policial, nombre_unidadp, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, TIPO_COMI, val_final) %>% 
  mutate(id_reglas = 3.7) %>% 
  ungroup() ;

kable(c300_3.7_global %>% filter(val_final == '1') %>% head(10), format ="simple", caption = "Top 10 de los resultados de regla 3.7" )
Top 10 de los resultados de regla 3.7
id_unidad_policial nombre_unidadp REGION_POL nombre_departamento nombre_provincia nombre_distrito TIPO_COMI val_final id_reglas
1085 CPNP AYACUCHO LA LIBERTAD LA LIBERTAD TRUJILLO TRUJILLO A 1 3.7
1985 CPNP SAN ANDRES LIMA LIMA LIMA LIMA A 1 3.7
7500 CPNP HUANTA VRAEM AYACUCHO HUANTA HUANTA A 1 3.7
6010 CPNP PLAYA RIMAC CALLAO CALLAO CALLAO CALLAO B 1 3.7
4068 CPNP PALACIO VIEJO AREQUIPA AREQUIPA AREQUIPA AREQUIPA A 1 3.7
808 CPNP DEL NORTE LAMBAYEQUE LAMBAYEQUE CHICLAYO CHICLAYO B 1 3.7
1341 CPNP UCHUGLLA SAN MARTIN SAN MARTIN MOYOBAMBA MOYOBAMBA B 1 3.7
4801 CPNP HUARAZ ANCASH ANCASH HUARAZ HUARAZ A 1 3.7
4635 CPNP COLLAO-LLAVE PUNO PUNO EL COLLAO ILAVE A 1 3.7
1487 CPNP BAGUA GRANDE-UTCUBAMBA AMAZONAS AMAZONAS UTCUBAMBA BAGUA GRANDE A 1 3.7

Reglas - capítulo 400

4.1: Validar todas las comisarias que cuentan con CEM con la data del CEM - p401e
# data descargada del portal AURORA sobre data de registro de casos  del CEM 2020 
data_cem <- read_sav("BD Registro de Casos del CEM - Diciembre 2020-SDP V2.sav")

# Se consolida en una tabla y se extrae solo los registros hechos en comisaria
d1 <- data_cem %>% 
  group_by(CEM) %>% 
  count () %>% 
  filter(grepl("COMISARI" , CEM) ) %>% 
  mutate(COMISARIA_2 = str_sub(CEM, 11)) %>% 
  mutate(COMISARIA_3 = COMISARIA_2)

d1 <- as.data.frame(d1)

# la unica forma de cruzar la info es con el nombre de la comisaria
# para ello se extrae el nombre de la comisaria del SIUP sin el CPNP
# y se almacena en COMISARIA_2

c400_d1 <- c400 %>% mutate(COMISARIA_2 = str_sub(nombre_unidadp,6))

#c400_d1 %>% select(nombre_unidadp, COMISARIA_2)

# finalmente se realiza el join respectivo

c400_4.1 <-  c400_d1 %>%  left_join(d1, by=c("COMISARIA_2"))

# se depuran algunas cosas

c400_4.1 <- c400_4.1 %>% 
  select(id_unidad_policial, nombre_unidadp, nombre_departamento, nombre_provincia, nombre_distrito, inf401e, COMISARIA_2, COMISARIA_3) 

# para recodificar
c400_4.1$inf401e <-   recode(c400_4.1$inf401e, "2=0")

# y finalmente el indicador de validacion de CEM

c400_4.1_global <- c400_4.1 %>% mutate(val_cem  = if_else((inf401e==0 & !is.na(COMISARIA_3)) | (inf401e==1 & is.na(COMISARIA_3)),1,0) ) %>% 
  mutate(id_reglas = 4.1)


kable(c400_4.1_global  %>% filter(val_cem == 1) %>%  head(10), format ="simple", caption = "Top 10 de los resultados de regla 4.1" )
Top 10 de los resultados de regla 4.1
id_unidad_policial nombre_unidadp nombre_departamento nombre_provincia nombre_distrito inf401e COMISARIA_2 COMISARIA_3 val_cem id_reglas
2400 CPNP SAN VICENTE LIMA CAÑETE SAN VICENTE DE CAÑETE 1 SAN VICENTE NA 1 4.1
5800 CPNP SAN JOSE TUMBES TUMBES TUMBES 0 SAN JOSE SAN JOSE 1 4.1
5006 CPNP SAN JOSE CAJAMARCA CAJAMARCA CAJAMARCA 0 SAN JOSE SAN JOSE 1 4.1
1025 CPNP JAEN CAJAMARCA JAEN JAEN 1 JAEN NA 1 4.1
3484 CPNP INDEPENDENCIA CUSCO CUSCO CUSCO 0 INDEPENDENCIA INDEPENDENCIA 1 4.1
3200 CPNP HUANCAVELICA HUANCAVELICA HUANCAVELICA HUANCAVELICA 0 HUANCAVELICA HUANCAVELICA 1 4.1
814 CPNP EL PORVENIR LAMBAYEQUE CHICLAYO CHICLAYO 0 EL PORVENIR EL PORVENIR 1 4.1
937 CPNP SAN MARTIN DE PORRAS LAMBAYEQUE LAMBAYEQUE LAMBAYEQUE 1 SAN MARTIN DE PORRAS NA 1 4.1
4325 CPNP AUGUSTO B LEGUIA TACNA TACNA TACNA 1 AUGUSTO B LEGUIA NA 1 4.1
7820 CPNP YAULI-LA OROYA JUNIN YAULI LA OROYA 1 YAULI-LA OROYA NA 1 4.1
4.2: Validar que la fecha de expedicion del certificado de inspeccion tecnica de seguridad en edificaciones se encuentre dentro de un rango aceptable -p405
c400_4.2 <- c400 %>%select(id_unidad_policial, nombre_unidadp, nombre_departamento, nombre_provincia, nombre_distrito, inf405, inf405)

c400_4.2[c400_4.2=="NULL"] <- NA
c400_4.2$inf405 <-  dmy(c400_4.2$inf405)

c400_4.2_global <- c400_4.2 %>% select(id_unidad_policial, nombre_unidadp, nombre_departamento, nombre_provincia, nombre_distrito, inf405) %>% 
  mutate(anio = year(inf405), val_fecha = if_else(today() >=  inf405 , 0,1 )) %>% 
  mutate(val_fecha2 = if_else(anio < 2019,1,0)) %>% 
  filter(val_fecha == 1 | val_fecha2 ==1) %>% 
  mutate(id_reglas = 4.2) %>% 
  ungroup()

kable(c400_4.2_global %>%  head(10), format ="simple", caption = "Top 10 de los resultados de regla 4.2" )
Top 10 de los resultados de regla 4.2
id_unidad_policial nombre_unidadp nombre_departamento nombre_provincia nombre_distrito inf405 anio val_fecha val_fecha2 id_reglas
1164 CPNP AGALLPAMPA LA LIBERTAD OTUZCO AGALLPAMPA 2022-01-01 2022 1 0 4.2
2280 CPNP VILLA MARIA DEL TRIUNFO LIMA LIMA VILLA MARIA DEL TRIUNFO 2018-04-17 2018 0 1 4.2
1018 CPNP ANDABAMBA CAJAMARCA SANTA CRUZ ANDABAMBA 2021-09-30 2021 1 0 4.2
4046 CPNP CAYLLOMA AREQUIPA CAYLLOMA CAYLLOMA 2018-02-15 2018 0 1 4.2
958 CPNP PACORA LAMBAYEQUE LAMBAYEQUE PACORA 2022-02-03 2022 1 0 4.2
744 CPNP PAIMAS PIURA AYABACA PAIMAS 2018-05-21 2018 0 1 4.2
4.3: validar que los años de elaboración y actualización de los planes de defensa y seguridad no sean mayores a 20 años - p409
c400_row <- c400 %>% rowwise(id_unidad_policial, nombre_unidadp)

c400_4.3 <- c400_row %>% select(id_unidad_policial, nombre_unidadp
                            , inf4091e,inf4092e,inf4093e,inf4094e,inf4095e 
                            , inf4091a,inf4092a, inf4093a, inf4094a, inf4095a )
  # transformando los 0 por NA
  c400_4.3[c400_4.3 == 0] <- NA  

c400_4.3_global <- c400_4.3 %>% mutate(min_x = min(c_across(inf4091e:inf4095a), na.rm = T)) %>%  mutate(val_anios = if_else(min_x < 2000,1,0)) %>% 
  filter(val_anios != 0) %>% 
  mutate(id_reglas = 4.3) %>% 
  ungroup()


kable(c400_4.3_global %>%  head(10), format ="simple", caption = "Top 10 de los resultados de regla 4.3" )
Top 10 de los resultados de regla 4.3
id_unidad_policial nombre_unidadp inf4091e inf4092e inf4093e inf4094e inf4095e inf4091a inf4092a inf4093a inf4094a inf4095a min_x val_anios id_reglas
4280 CPNP PAMPA INALAMBRICA NA NA NA NA 1990 NA NA NA NA 2020 1990 1 4.3
7500 CPNP HUANTA 1995 1995 1995 1995 NA 2020 2020 2020 2020 NA 1995 1 4.3
814 CPNP EL PORVENIR 1996 1996 1996 1996 NA 2020 2020 2020 2020 NA 1996 1 4.3
4900 CPNP RINCONADA 1987 1987 1987 1987 NA 2020 2020 2020 2020 NA 1987 1 4.3
5335 CPNP PISCO NA NA 1970 NA NA NA NA 1970 NA NA 1970 1 4.3
4520 CPNP ALTO PUNO 1987 NA 1987 NA NA 2020 NA 2020 NA NA 1987 1 4.3
4500 CPNP PUNO NA NA NA NA 1970 NA NA NA NA 2020 1970 1 4.3
652 CPNP TALANDRACAS 2017 1970 1970 1970 2017 2020 2020 2020 2020 2020 1970 1 4.3
3154 CPNP PUERTO BERMUDEZ 1996 1996 1996 1996 NA 2020 2020 2020 2020 NA 1996 1 4.3
1215 CPNP SANTIAGO DE CAO 1970 NA NA NA NA 2020 NA NA NA NA 1970 1 4.3
4.4: Validar la antiguedad de los planes de emergencia de las comisarías (que antiguedad no superior a 20 años)- p412
c400_4.4 <- c400_row %>% select(id_unidad_policial, nombre_unidadp
                                , inf4121e,inf4122e,inf4123e,inf4124e, inf4121a,inf4122a,inf4123a,inf4124a )

# transformando los NULL por NA
c400_4.4[c400_4.4 == "NULL"] <- NA 
# transformando los 0 por NA
c400_4.4[c400_4.4 == 0] <- NA 


c400_4.4_global <- c400_4.4 %>% mutate(min_x = min(c_across(inf4121e:inf4124a), na.rm = T)) %>% 
  mutate(val_anios = if_else(min_x < 2000, 1,0)) %>% 
  filter(val_anios != 0) %>% 
  mutate(id_reglas = 4.4) %>% 
  ungroup() ;

kable(c400_4.3_global %>% filter(val_anios ==1) %>%  head(10), format ="simple", caption = "Top 10 de los resultados de regla 4.4" )
Top 10 de los resultados de regla 4.4
id_unidad_policial nombre_unidadp inf4091e inf4092e inf4093e inf4094e inf4095e inf4091a inf4092a inf4093a inf4094a inf4095a min_x val_anios id_reglas
4280 CPNP PAMPA INALAMBRICA NA NA NA NA 1990 NA NA NA NA 2020 1990 1 4.3
7500 CPNP HUANTA 1995 1995 1995 1995 NA 2020 2020 2020 2020 NA 1995 1 4.3
814 CPNP EL PORVENIR 1996 1996 1996 1996 NA 2020 2020 2020 2020 NA 1996 1 4.3
4900 CPNP RINCONADA 1987 1987 1987 1987 NA 2020 2020 2020 2020 NA 1987 1 4.3
5335 CPNP PISCO NA NA 1970 NA NA NA NA 1970 NA NA 1970 1 4.3
4520 CPNP ALTO PUNO 1987 NA 1987 NA NA 2020 NA 2020 NA NA 1987 1 4.3
4500 CPNP PUNO NA NA NA NA 1970 NA NA NA NA 2020 1970 1 4.3
652 CPNP TALANDRACAS 2017 1970 1970 1970 2017 2020 2020 2020 2020 2020 1970 1 4.3
3154 CPNP PUERTO BERMUDEZ 1996 1996 1996 1996 NA 2020 2020 2020 2020 NA 1996 1 4.3
1215 CPNP SANTIAGO DE CAO 1970 NA NA NA NA 2020 NA NA NA NA 1970 1 4.3

Reglas - capítulo 500

5.1: Validar aquellas comisarias que respondieron que SI en p501, deben tener por lo menos una información en las P503.
c500_5.1 <- c500 %>%  select(id_unidad_policial, nombre_unidadp,inf501, c(inf503aa:inf503bko), -c(inf503ako, inf503bko) )

# transformando los NULL por NA
c500_5.1[c500_5.1 == "NULL"] <- NA  # transformacion masiva

# c500_5.1[c500_5.1 == 2] <- '0'  # funciona, pero no lo recomiendo

c500_5.1[,-c(1:3)][c500_5.1[,-c(1:3)] == 2]  <- '0' # transformacion masiva delimitada a varias colummnas con ciertas condiciones

# para recodificar
c500_5.1$inf501 <-   recode(c500_5.1$inf501, "2=0")

# entonces

c500_5.1_global <- c500_5.1 %>% rowwise(id_unidad_policial,nombre_unidadp) %>% 
 mutate(max_val = max(as.numeric(c_across(inf503aa:inf503bk)), na.rm=T)) %>% 
  mutate(max_val2 = if_else(max_val=='-Inf', 0,1)) %>% 
  mutate(val_flag = if_else(inf501 == max_val2,0,1)) %>% 
  mutate(id_reglas = 5.1) %>% 
  ungroup()

kable(c500_5.1_global %>% filter(val_flag ==1) %>%  head(10), format ="simple", caption = "Top 10 de los resultados de regla 5.1" )
Top 10 de los resultados de regla 5.1
id_unidad_policial nombre_unidadp inf501 inf503aa inf503ab inf503ac inf503ad inf503ae inf503af inf503ag inf503ah inf503ai inf503aj inf503ak inf503ba inf503bb inf503bc inf503bd inf503be inf503bf inf503bg inf503bh inf503bi inf503bj inf503bk max_val max_val2 val_flag id_reglas

Reglas - capítulo 600

6.1: Focalizar a las comisarias mayores al percentil 97 de la preg.605A, sobre el número de sesiones de comité distrital en el año.
c600_6.1_v1 <-c600 %>% 
  select(id_unidad_policial, nombre_unidadp , TIPO_COMI ,REGION_POL ,nombre_departamento, nombre_provincia,nombre_distrito,
         inf605a)

  # para recodificar los NULL a cero
  c600_6.1_v1[c600_6.1_v1=="NULL"] <- '0'
  
c600_6.1_global <- c600_6.1_v1 %>% 
  mutate(p_rank = round(percent_rank(inf605a)  ,3)*100) %>% 
  mutate(val_per = if_else(p_rank >= 97.0, 1,0)) %>% 
  select(id_unidad_policial, nombre_unidadp , TIPO_COMI ,REGION_POL ,nombre_departamento, nombre_provincia,nombre_distrito,
         inf605a, p_rank, val_per) %>% 
  mutate(id_reglas = 6.1)

 kable(c600_6.1_global %>% filter(val_per ==1) %>%  head(10), format ="simple", caption = "Top 10 de los resultados de regla 6.1" ) 
Top 10 de los resultados de regla 6.1
id_unidad_policial nombre_unidadp TIPO_COMI REGION_POL nombre_departamento nombre_provincia nombre_distrito inf605a p_rank val_per id_reglas
7000 CPNP TINGO MARIA A HUANUCO HUANUCO LEONCIO PRADO RUPA-RUPA 9 98.8 1 6.1
1195 CPNP SAN JOSE D LA LIBERTAD LA LIBERTAD PACASMAYO SAN JOSE 9 98.8 1 6.1
1865 CPNP TAHUANTINSUYO B LIMA LIMA LIMA INDEPENDENCIA 9 98.8 1 6.1
1911 CPNP FLOR DE AMANCAES C LIMA LIMA LIMA RIMAC 9 98.8 1 6.1
2035 CPNP APOLO A LIMA LIMA LIMA LA VICTORIA 9 98.8 1 6.1
2460 CPNP SAN ANTONIO C LIMA LIMA CAÑETE SAN ANTONIO 9 98.8 1 6.1
3622 CPNP POMACANCHI E CUSCO CUSCO ACOMAYO POMACANCHI 9 98.8 1 6.1
3290 CPNP HUAYTARA B ICA HUANCAVELICA HUAYTARA HUAYTARA 9 98.8 1 6.1
4366 CPNP ITE E TACNA TACNA JORGE BASADRE ITE 9 98.8 1 6.1
5464 CPNP HAQUIRA C APURIMAC APURIMAC COTABAMBAS HAQUIRA 9 98.8 1 6.1
6.2: Focalizar a las comisarías qe tuvieron mucha diferencia respecto a las preg. 605B y preg.605A.

Es decir, diferencia en porcentajes de las reuniones que tuvieron vs reuniones que asistieron (se mapean los pocentajes bajos).

c600_row <- c600 %>% rowwise(id_unidad_policial, nombre_unidadp , TIPO_COMI ,REGION_POL ,nombre_departamento, nombre_provincia,nombre_distrito)
  
c600_6.2_v1 <- c600_row %>% 
  select(id_unidad_policial, nombre_unidadp , TIPO_COMI ,REGION_POL ,nombre_departamento, nombre_provincia,nombre_distrito,
         inf605b, inf605a)

  # recodificando los NULL a cero
c600_6.2_v1[c600_6.2_v1== "NULL"] <- '0'

  # Entonces
c600_6.2_global <- c600_6.2_v1 %>% 
  mutate(val_reu = if_else(inf605b > inf605a, 1,0)) %>% 
  mutate(nro_reu = (round(as.numeric(inf605b)/ as.numeric(inf605a),2))*100) %>% 
  mutate(val_nro_reu = if_else(nro_reu <=25, 1,0)) %>% 
  select(id_unidad_policial, nombre_unidadp , TIPO_COMI ,REGION_POL ,nombre_departamento, nombre_provincia,nombre_distrito,
         inf605a, inf605b, nro_reu, val_reu, val_nro_reu ) %>% 
  mutate(id_reglas = 6.2) %>% 
  ungroup();

kable(c600_6.2_global %>% filter(val_nro_reu ==1) %>%  head(10), format ="simple", caption = "Top 10 de los resultados de regla 6.2" ) 
Top 10 de los resultados de regla 6.2
id_unidad_policial nombre_unidadp TIPO_COMI REGION_POL nombre_departamento nombre_provincia nombre_distrito inf605a inf605b nro_reu val_reu val_nro_reu id_reglas
937 CPNP SAN MARTIN DE PORRAS B LAMBAYEQUE LAMBAYEQUE LAMBAYEQUE LAMBAYEQUE 1 0 0 0 1 6.2
1356 CPNP RIOJA B SAN MARTIN SAN MARTIN RIOJA RIOJA 125 12 10 0 1 6.2
4519 CPNP ICHU D PUNO PUNO PUNO PUNO 6 1 17 0 1 6.2
3592 CPNP SALVACION D CUSCO MADRE DE DIOS MANU MANU 4 1 25 0 1 6.2
2205 CPNP SURCO A LIMA LIMA LIMA SANTIAGO DE SURCO 1 0 0 0 1 6.2
5822 CPNP AGUAS VERDES B TUMBES TUMBES ZARUMILLA AGUAS VERDES 5 0 0 0 1 6.2
5162 CPNP SANTA CRUZ DE CUTERVO E CAJAMARCA CAJAMARCA CUTERVO SANTA CRUZ 2 0 0 0 1 6.2
1075 CPNP COLASAY E CAJAMARCA CAJAMARCA JAEN COLASAY 3 0 0 0 1 6.2
7572 CPNP KITENI C VRAEM CUSCO LA CONVENCION ECHARATE 1 0 0 0 1 6.2
5430 CPNP PROGRESO D APURIMAC APURIMAC GRAU PROGRESO 2 0 0 0 1 6.2
6.3: Verificar que los resultados de la preg.606A deben ser mayores o iguales a los de la preg 607B
c600_6.3 <- c600_row %>% 
  select(id_unidad_policial, nombre_unidadp , TIPO_COMI ,REGION_POL ,nombre_departamento, nombre_provincia,nombre_distrito,
         inf606a, inf607a) 

  # recodificando
c600_6.3[c600_6.3== "NULL"] <- '0'

  # entonces
  c600_6.3_global <-c600_6.3 %>% 
  mutate(val_mayores = if_else(as.numeric(inf606a) < as.numeric(inf607a),1,0)) %>% 
  select(id_unidad_policial, nombre_unidadp , TIPO_COMI ,REGION_POL ,nombre_departamento, nombre_provincia,nombre_distrito,
         inf606a, inf607a,  val_mayores ) %>% 
    mutate(id_reglas = 6.3) %>% 
    ungroup()

  
 kable(c600_6.3_global %>% filter(val_mayores ==1) %>%  head(10), format ="simple", caption = "Top 10 de los resultados de regla 6.3" )  
Top 10 de los resultados de regla 6.3
id_unidad_policial nombre_unidadp TIPO_COMI REGION_POL nombre_departamento nombre_provincia nombre_distrito inf606a inf607a val_mayores id_reglas
6.4: Contrastar las comisarias que hacen el monitoreo de patrullaje en SIPCOP (preg 610A) respecto a la preg 3312 (mapa de delito en SIPCOP)
c600_6.4_c300 <- c300 %>% select(id_unidad_policial, nombre_unidadp , TIPO_COMI ,REGION_POL ,nombre_departamento, nombre_provincia,nombre_distrito, inf3312) 
  
c600_6.4_c600 <- c600 %>% select(id_unidad_policial, nombre_unidadp ,TIPO_COMI,REGION_POL ,nombre_departamento, nombre_provincia,nombre_distrito, inf610a) 

  # entonces
  
  c600_6.4_global <-  c600_6.4_c300 %>% select(id_unidad_policial, nombre_unidadp , TIPO_COMI ,REGION_POL ,nombre_departamento, nombre_provincia,nombre_distrito, inf3312) %>% 
    inner_join(c600_6.4_c600, by =c('id_unidad_policial')) %>% 
    select(id_unidad_policial, nombre_unidadp.x ,TIPO_COMI.x ,REGION_POL.x,nombre_departamento.x, nombre_provincia.x,nombre_distrito.x,  inf610a, inf3312)
    
    # para recodificar
  c600_6.4_global$inf610a <-   recode(c600_6.4_global$inf610a, "2=0")

    # finalmente
  c600_6.4_global <- c600_6.4_global %>% 
    mutate(val_SIPCOP = if_else(inf610a == inf3312 , 0, 1)) %>% 
    mutate(id_reglas = 6.4)

kable(c600_6.4_global %>% filter(val_SIPCOP ==1 & inf610a ==1) %>%  head(10), format ="simple", caption = "Top 10 de los resultados de regla 6.4" )  
Top 10 de los resultados de regla 6.4
id_unidad_policial nombre_unidadp.x TIPO_COMI.x REGION_POL.x nombre_departamento.x nombre_provincia.x nombre_distrito.x inf610a inf3312 val_SIPCOP id_reglas
1266 CPNP HUAMACHUCO A LA LIBERTAD LA LIBERTAD SANCHEZ CARRION HUAMACHUCO 1 0 1 6.4
1085 CPNP AYACUCHO A LA LIBERTAD LA LIBERTAD TRUJILLO TRUJILLO 1 0 1 6.4
1995 CPNP ALFONSO UGARTE A LIMA LIMA LIMA LIMA 1 0 1 6.4
7500 CPNP HUANTA A VRAEM AYACUCHO HUANTA HUANTA 1 0 1 6.4
5006 CPNP SAN JOSE B CAJAMARCA CAJAMARCA CAJAMARCA CAJAMARCA 1 0 1 6.4
3480 CPNP TAHUANTINSUYO B CUSCO CUSCO CUSCO CUSCO 1 0 1 6.4
4068 CPNP PALACIO VIEJO A AREQUIPA AREQUIPA AREQUIPA AREQUIPA 1 0 1 6.4
5411 CPNP VILLA AMPAY C APURIMAC APURIMAC ABANCAY ABANCAY 1 0 1 6.4
7825 CPNP CHUPACA A JUNIN JUNIN CHUPACA CHUPACA 1 0 1 6.4
4532 CPNP SANTA BARBARA B PUNO PUNO SAN ROMAN JULIACA 1 0 1 6.4
6.5: Contrastar la cantidad de vehiculos monitoreados por SIPCOP (preg 610B y 610C) vs la cantidad de vehiculos operativos (preg 339)
  c600_6.5_c600 <- c600 %>% select(id_unidad_policial, nombre_unidadp, TIPO_COMI, REGION_POL, nombre_departamento, nombre_provincia,nombre_distrito,inf610c1,inf610c2,inf610c3)
  
  c600_6.5_c300 <- c300 %>%  select(id_unidad_policial, nombre_unidadp, TIPO_COMI, REGION_POL, nombre_departamento, nombre_provincia,nombre_distrito, inf33911,inf33921,inf33931,inf33941, inf33951 )
    
  # entonces
  c600_6.5 <- c600_6.5_c600 %>% select(id_unidad_policial, nombre_unidadp , TIPO_COMI, REGION_POL, nombre_departamento, nombre_provincia,nombre_distrito,inf610c1,inf610c2,inf610c3) %>% 
    inner_join(c600_6.5_c300, by=c('id_unidad_policial')) %>% 
    select(id_unidad_policial, nombre_unidadp.x , TIPO_COMI.x, REGION_POL.x,  nombre_departamento.x, nombre_provincia.x,nombre_distrito.x,  inf610c1,inf610c2,inf610c3, 
           inf33911,inf33921,inf33931,inf33941, inf33951 )
  
  
  # transformado todas las variables el NULL por NA
  c600_6.5[c600_6.5=="NULL"] <- '0'

  # transformando a numerico las variables categoricas, debido a que se necesitan hacer operaciones matematicas
  c600_6.5_str <- c600_6.5 %>% select_if(is.character) %>% colnames()  
  
  c600_6.5[,8:14] = data.frame(apply(c600_6.5[,8:14], 2, as.numeric))
  # luego, analizar:
  
  c600_6.5_global <- c600_6.5 %>% 
    mutate(val_autos = if_else(inf610c1 > inf33911, 1, 0),
           val_camionetas = if_else(inf610c2 > (inf33921+inf33931+inf33941),1, 0),  # no se usa c_acroos pq por el momento no se usa rowwise
           val_motos = if_else(inf610c3 > inf33951, 1, 0)) %>% 
    mutate(id_reglas = 6.5)
  
  kable(c600_6.5_global %>% filter(val_autos ==1 & val_camionetas ==1 | val_motos ==1) %>%  head(10), format ="simple", caption = "Top 10 de los resultados de regla 6.5" )  
Top 10 de los resultados de regla 6.5
id_unidad_policial nombre_unidadp.x TIPO_COMI.x REGION_POL.x nombre_departamento.x nombre_provincia.x nombre_distrito.x inf610c1 inf610c2 inf610c3 inf33911 inf33921 inf33931 inf33941 inf33951 val_autos val_camionetas val_motos id_reglas
3663 CPNP PUERTO MALDONADO B MADRE DE DIOS MADRE DE DIOS TAMBOPATA TAMBOPATA 0 1 2 0 0 0 0 0 0 1 1 6.5
2010 CPNP UNIDAD VECINAL 3 B B LIMA LIMA LIMA LIMA 6 1 7 6 0 1 1 5 0 0 1 6.5
3480 CPNP TAHUANTINSUYO B CUSCO CUSCO CUSCO CUSCO 0 5 5 0 0 1 4 4 0 0 1 6.5
1098 CPNP MOCHE B LA LIBERTAD LA LIBERTAD TRUJILLO MOCHE 0 2 2 0 0 0 2 1 0 0 1 6.5
2060 CPNP SAN PEDRO B LIMA LIMA LIMA EL AGUSTINO 3 1 2 3 0 0 1 1 0 0 1 6.5
1951 CPNP CHACRA COLORADA B LIMA LIMA LIMA BREÑA 6 4 4 0 0 1 0 6 1 1 0 6.5
1917 CPNP EL RIMAC A LIMA LIMA LIMA RIMAC 7 1 3 0 0 0 0 7 1 1 0 6.5
1920 CPNP SAN MARTIN DE PORRAS A LIMA LIMA LIMA SAN MARTIN DE PORRES 7 4 7 7 0 1 3 4 0 0 1 6.5
7650 CPNP SAN ANTONIO DE JICAMARCA B LIMA LIMA LIMA SAN JUAN DE LURIGANCHO 3 3 3 3 0 3 2 2 0 0 1 6.5
1800 CPNP DE PRO A LIMA LIMA LIMA LOS OLIVOS 8 4 7 6 0 2 0 8 1 1 0 6.5
6.6: Contrastar las comisarias que realizan patrullaje integrado (preg 617) vs las comisarias que NO realizan patrullaje (preg 610)
c600_6.6 <- c600 %>% 
    select(id_unidad_policial, nombre_unidadp, TIPO_COMI, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito,
           inf610, inf617)
  
  c600_6.6[c600_6.6 == "NULL"] <- '0'
  
  # recodificando
  c600_6.6$inf617 <- recode(c600_6.6$inf617, "2=0")
  c600_6.6$inf610 <- recode(c600_6.6$inf610, "2=0")
  
  # entonces
  c600_6.6_global <- c600_6.6 %>% 
    mutate(val_patrullaje = if_else(inf610== 0 & inf617 == 1, 1, 0)) %>% 
    mutate(id_reglas = 6.6)
  
  kable(c600_6.6_global %>% filter(val_patrullaje ==1) %>%  head(10), format ="simple", caption = "Top 10 de los resultados de regla 6.6" ) 
Top 10 de los resultados de regla 6.6
id_unidad_policial nombre_unidadp TIPO_COMI REGION_POL nombre_departamento nombre_provincia nombre_distrito inf610 inf617 val_patrullaje id_reglas
4933 CPNP TAMBO REAL NUEVO D ANCASH ANCASH SANTA CHIMBOTE 0 1 1 6.6
645 CPNP LOS ALGARROBOS B PIURA PIURA PIURA PIURA 0 1 1 6.6
653 CPNP YAPATERA D PIURA PIURA MORROPON CHULUCANAS 0 1 1 6.6
5141 CPNP HUALGAYOC D CAJAMARCA CAJAMARCA HUALGAYOC HUALGAYOC 0 1 1 6.6
7572 CPNP KITENI C VRAEM CUSCO LA CONVENCION ECHARATE 0 1 1 6.6
3105 CPNP SAN RAMON B JUNIN JUNIN CHANCHAMAYO SAN RAMON 0 1 1 6.6
4645 CPNP DESAGUADERO B PUNO PUNO CHUCUITO DESAGUADERO 0 1 1 6.6
6.7: Contrastar si la comisaria tiene SEINPOL (preg 645A) vs cantidad de policias según rol de servicio de la preg 140- 145
c600_6.7 <- c600 %>% 
    select(id_unidad_policial, nombre_unidadp, TIPO_COMI, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito, 
           inf645a, inf645b )

    # recodificando
  c600_6.7[c600_6.7 == "NULL"] <- '0'
  
  c600_6.7$inf645b <- as.numeric(c600_6.7$inf645b)
  
  # analizando como filas con rowwise
  
  c100_row <- c100 %>% rowwise(id_unidad_policial, nombre_unidadp, TIPO_COMI, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito)
  # luego trayendo info de roles de servicio del cap 100
  
  c600_6.7_c100 <- c100_row %>% 
    select(id_unidad_policial, nombre_unidadp, TIPO_COMI, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito,
           inf140oah:inf145tot) %>% 
    mutate(tot_140 = sum(c_across(inf140oah:inf140orsm)),
           tot_141 = sum(c_across(inf141oah:inf141orsm)),
           tot_142 = sum(c_across(inf142oah:inf142orsm)),
          # tot_143 = sum(c_across(inf143oah:inf143orsm)),
           tot_144 = sum(c_across(inf144oah:inf144orsm))
           #tot_145 = sum(c_across(inf145oah:inf145orsm)),
          ) %>% 
    mutate(val_140 = if_else(tot_140==inf140tot,0,1),
           val_141 = if_else(tot_141==inf141tot,0,1),
           val_142 = if_else(tot_142==inf142tot,0,1),
           val_144 = if_else(tot_144==inf144tot,0,1)) %>% 
    select(id_unidad_policial, nombre_unidadp, TIPO_COMI, REGION_POL, nombre_departamento, nombre_provincia, nombre_distrito,
           contains('tot_'), contains('tot'), contains('val_')) %>% 
    mutate(tot_140_144 = sum(c_across(tot_140:tot_144))  )
    
    # entonces, uniendo todo
  
  c600_6.7_global <- c600_6.7 %>% 
    inner_join(c600_6.7_c100, by = c('id_unidad_policial')) %>% 
    mutate(val_globa = if_else(tot_140_144 >= inf645b, 0, 1)) %>% 
    select(id_unidad_policial, nombre_unidadp.x, TIPO_COMI.x, REGION_POL.x, nombre_departamento.x, nombre_provincia.x, nombre_distrito.x, inf645b,
     # contains('tot_' ), contains('val') )
     tot_140_144, val_globa) %>% 
    mutate(id_reglas = 6.7)
  
  
  kable(c600_6.7_global %>% filter(val_globa ==1) %>%  head(10), format ="simple", caption = "Top 10 de los resultados de regla 6.7" ) 
Top 10 de los resultados de regla 6.7
id_unidad_policial nombre_unidadp.x TIPO_COMI.x REGION_POL.x nombre_departamento.x nombre_provincia.x nombre_distrito.x inf645b tot_140_144 val_globa id_reglas
1236 CPNP CHEPEN B LA LIBERTAD LA LIBERTAD CHEPEN CHEPEN 10 8 1 6.7
7825 CPNP CHUPACA A JUNIN JUNIN CHUPACA CHUPACA 36 34 1 6.7
7590 CPNP SATIPO B JUNIN JUNIN SATIPO SATIPO 22 19 1 6.7
4890 CPNP ALTO PERU A ANCASH ANCASH SANTA CHIMBOTE 22 21 1 6.7
4801 CPNP HUARAZ A ANCASH ANCASH HUARAZ HUARAZ 17 16 1 6.7
4512 CPNP HUASCAR D PUNO PUNO PUNO PUNO 8 6 1 6.7
4525 CPNP JULIACA A PUNO PUNO SAN ROMAN JULIACA 20 13 1 6.7
1410 CPNP CHACHAPOYAS A AMAZONAS AMAZONAS CHACHAPOYAS CHACHAPOYAS 7 6 1 6.7
5900 CPNP HUANUCO A HUANUCO HUANUCO HUANUCO HUANUCO 11 6 1 6.7
7013 CPNP VENENILLO D HUANUCO HUANUCO LEONCIO PRADO RUPA-RUPA 6 3 1 6.7

Exportación de resultados

Los resultados de las reglas de validación se exportan a archivos excel donde se encuentran todos los casos que no cumplen las referidas reglas. Dentro del archivo se encuentran en cada hoja excel, el resultado independiente de cada una de las reglas de validación del capítulo correspondiente, los archivos son:

  • Capítulo 100 - (R_cap_100.xlsx):

  • Capítulo 200 - (R_cap_200.xlsx)

  • Capítulo 300 - (R_cap_300.xlsx)

  • Capítulo 400 - (R_cap_400.xlsx)

  • Capítulo 500 - (R_cap_500.xlsx)

  • Capítulo 600 - (R_cap_600.xlsx)

Construcción de vistas estratégicas

Para el desarrollo de un dashboard primero se consolida todas las objetos de las reglas de consistencias en un objeto llamado reglas_R