Module: Sivel2Gen::RangoedadHelper

Defined in:
app/helpers/sivel2_gen/rangoedad_helper.rb

Class Method Summary collapse

Class Method Details

.buscar_rango_edad(edad, modelorango) ⇒ Object

Returns id en tabla del rango o si no se puede calcular retorna ID del registro SIN INFORMACIÓN (o -1 si no hay SIN INFORMACIÓN).

Returns:

  • id en tabla del rango o si no se puede calcular retorna ID del registro SIN INFORMACIÓN (o -1 si no hay SIN INFORMACIÓN)



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'app/helpers/sivel2_gen/rangoedad_helper.rb', line 38

def buscar_rango_edad(edad, modelorango)
  if (!modelorango || !defined?(modelorango.constantize) || 
      !defined?(!modelorango.constantize.habilitados))
    puts "No se pudo usar modelorango"
    return -1
  end
  t = modelorango.constantize.habilitados
  idsin = t.where(nombre: 'SIN INFORMACIÓN')
  if idsin.count == 1
    idsin = idsin.take.id
  else
    idsin = -1
  end
  c = t.where('(limiteinferior IS NULL) OR (limiteinferior  <= ?)', edad).
    where('(limitesuperior IS NULL) OR (? <= limitesuperior)', edad)
  ret = idsin
  if c.count == 0
    puts "No se encontró edad #{edad} en tabla #{modelorango}"
  elsif c.count > 1
    puts "Traslape de #{c.count} rangos en edad #{edad}"
  else # c.count == 1
    ret = c.take.id
  end
  return ret
end

.edad_de_fechanac_fecha(anionac, mesnac, dianac, anio, mes, dia) ⇒ Object

Retorna edad de una persona en cierta fecha @ return -1 si no puede calcularse por falta de años

Parameters:

  • anionac

    año de nacimiento

  • mesnac

    mes de nacimiento

  • dianac

    dia de nacimiento



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'app/helpers/sivel2_gen/rangoedad_helper.rb', line 9

def edad_de_fechanac_fecha(anionac, mesnac, dianac, 
                              anio, mes, dia)
  if anionac.nil? || anionac == ''
    return -1
  end
  if anio.nil? || anio == ''
    return -1
  end
  if anio < anionac
    return -1
  end
  na = anio-anionac
  if mesnac && mesnac > 0 && mes && mes > 0 && mesnac >= mes
    if mesnac > mes || (dianac && dianac > 0 && dia && dia > 0 && 
        dianac > dia)
      na -= 1
    end
  end

  return na
end

.poblacion_por_rango_sexo(caso_id, anio, mes, dia, modelorango, rangoedadsexo, totsexo) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'app/helpers/sivel2_gen/rangoedad_helper.rb', line 103

def poblacion_por_rango_sexo(caso_id, anio, mes, dia, modelorango, 
                             rangoedadsexo, totsexo)
  caso = Sivel2Gen::Caso.where(id: caso_id)
  if caso.count < 1 
    return false
  end

  caso.take.victima.joins(
    'JOIN msip_persona ON msip_persona.id=sivel2_gen_victima.persona_id').
    each do |v|
    re = Sivel2Gen::RangoedadHelper.buscar_rango_edad(
      Sivel2Gen::RangoedadHelper.edad_de_fechanac_fecha(
        v.persona.anionac, v.persona.mesnac, v.persona.dianac,
        anio, mes, dia), modelorango)
    if !rangoedadsexo[re]
      rangoedadsexo[re] = {}
    end
    if !rangoedadsexo[re][v.persona.sexo]
      rangoedadsexo[re][v.persona.sexo] = 0
    end
    rangoedadsexo[re][v.persona.sexo] += 1
    totsexo[v.persona.sexo] = totsexo[v.persona.sexo] ? 
      totsexo[v.persona.sexo] + 1 : 1
  end
  return true
end

.poblacion_por_sexo_rango(caso_id, anio, mes, dia, modelorango, rangoedad, totsexo) ⇒ Object

Calcula matriz con poblacion de un caso por sexo y rangos de edad

Parameters:

  • caso_id

    # Caso

  • Fecha (anio, mes, dia)

    de referencia para calculo de edades

  • modelorango

    Modelo con rangos de edades por usar

  • rangoedad

    Incrementa este hash/matriz que tiene [sexo] tipicamente funciona llamadora lo inicia con rangoedad = => {, ‘M’ => {}, ‘F’ => {}}

  • totsexo

    Incrementa este hash con llaves ‘S’ ‘M’ y ‘F’, tipicamente función llamador lo inicia con: totsexo ={}

Returns:

  • true sii puede calcular poblacion por sexo y rangos de edad



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'app/helpers/sivel2_gen/rangoedad_helper.rb', line 76

def poblacion_por_sexo_rango(caso_id, anio, mes, dia, modelorango, rangoedad, totsexo)
  caso = Sivel2Gen::Caso.where(id: caso_id)
  if caso.count < 1 
    return false
  end

  caso.take.victima.joins(
    'JOIN msip_persona ON msip_persona.id=sivel2_gen_victima.persona_id').
    each do |v|
    re = Sivel2Gen::RangoedadHelper.buscar_rango_edad(
      Sivel2Gen::RangoedadHelper.edad_de_fechanac_fecha(
        v.persona.anionac, v.persona.mesnac, v.persona.dianac,
        anio, mes, dia), modelorango)
    if !rangoedad[v.persona.sexo]
      rangoedad[v.persona.sexo] = {}
    end
    if !rangoedad[v.persona.sexo][re]
      rangoedad[v.persona.sexo][re] = 0
    end
    rangoedad[v.persona.sexo][re] += 1
    totsexo[v.persona.sexo] = totsexo[v.persona.sexo] ? 
      totsexo[v.persona.sexo] + 1 : 1
  end
  return true
end