Module: Sivel2Gen::RangoedadHelper
- Defined in:
- app/helpers/sivel2_gen/rangoedad_helper.rb
Class Method Summary collapse
-
.buscar_rango_edad(edad, modelorango) ⇒ Object
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).
-
.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.
- .poblacion_por_rango_sexo(caso_id, anio, mes, dia, modelorango, rangoedadsexo, totsexo) ⇒ Object
-
.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.
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).
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
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
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 |