3
K\x                 @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZmZ G d	d
 d
ejZG dd dejZG dd dejZdS )    N)apps)settings)models)HttpResponse)get_template)BloqueEjerciciosPacienteBloqueEjercicios)HTMLCSSc                   s^	  e Zd ZdZdZdZdZdZdZdZ	dZ
ejdejdZejddZejddddZejdd d d!Zejd"d d d!Zejd#d d d!Zejd$d%d&Zejd'ddd(Zejd)ddd(Zejd*ddd(Zejd+d,d-ddd.Zejd+d,d/ddd.Zejd+d,d0ddd.Zejd1ddd(Z ejd2ddd(Z!ej"d d3ddZ#ej"d d4ddZ$ej"d d5ddZ%ej"d d6ddZ&ej"d d7ddZ'ej"d d8ddZ(ej"d d9ddZ)ej"d d:ddZ*ej"d d;ddZ+ej,d<dd=Z-ej,d>dd=Z.ej"d d?ddZ/ej"d d@ddZ0ej"d dAddZ1ej"d dBddZ2ejd dCddZ3ej4dDddd!Z5ejdEdFdddGZ6ejdHdIdddGZ7ejdJddd!Z8ejdKddd!Z9ejdLddd!Z:ejdMddd!Z;ejdNddd!Z<ejdOddd!Z=ejdPddd!Z>ejdQddd!Z?ejdRddd!Z@ejdSddd!ZAejdTddd!ZBejdUddd!ZCejdVddd!ZDejdWddd!ZEejdXddd!ZFej"d dYddZGej"d dZddZHej"d d[ddZIej"d d\ddZJej"d d]ddZKej"d d^ddZLej"d d_ddZMej"d d`ddZNej"d dBddZOej"d daddZPej"d dbddZQejdcddd!ZRejddddd!ZSejdeddd!ZTejdfddd!ZUejVdgddheddiZWejVdgddjeddiZXejdkddd!ZYejdlddd(ZZejVdgd	dmeddiZ[ej"d dnddZ\ej"d doddZ]ej"d dpddZ^ej"d dqddZ_ej"d drddZ`ejddsdddwZaejddxdddwZbejVdgdd{eddiZcej"d d|ddZdej"d d}ddZeej"d d~ddZfej"d dddZgejVdgddeddiZhej"d dddZiej"d dddZjej"d dddZkej"d dddZlej"d dddZmej"d dddZnejVdgdde	ddiZoej"d dddZpej"d dddZqej"d dddZrej"d dddZsej"d dddZtej"d dddZuej"d dddZvej"d dddZwej"d dddZxej"d dddZyej"d dddZzejVdgdde
ddiZ{ej"d dddZ|ej"d dddZ}ej"d dddZ~ej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZej"d dddZejdddejdZejdddejdZedd Z fddZdd Zdd Zdd Zdd Zdd ZddÄ ZdddńZeddǄ ZddɄ Zdd˄ Zdd̈́ Zddτ Zddф ZdddӄZddՄ Zddׄ ZdddڄZG dd܄ d܃Z  ZS (  Cuestionarioz>
        Almacena la informacion de salud de un paciente.
    No	OcasionalHabitualFin de semanaSolo fines de semana<7Menos de 7 horas>7   7 horas o más
intervalosIntervalos de 2-3 horasCronica   Crónica
EstacionalPiernasEn las piernasOtrasEn otros lugaresNormalDolorosoDoloroso (dismenorrea)No (menopausia)Patient)	on_deleteT)auto_now_addr   u   Número de hijos)defaultverbose_nameblankEdadF)r&   r'   nullPesoAltura   zIndice de actividad)r%   r&   u   Perímetro de cintura)r&   r)   r'   u   Perímetro de la caderau   Perímetro del muslo      zBioimpedancia: masa grasa)
max_digitsdecimal_placesr&   r)   r'   z"Bioimpedancia: masa libre de grasaz"Bioimpedancia: agua corporal totalz!Edad cuando tuvo su primera reglaz(Edad cuando tuvo su primer hijo/a vivo/azClimaterio y sofocos	Cansanciou/   Tiene picores habituales en las partes íntimaszSufre de cistitis habitualmentez:Apetencia por el consumo de dulces o productos avinagradosu   Pérdida de masa muscularu   Pérdida de memoria habitualu=   Vista cansada, irritabilidad ocular o ha empeorado su visiónNicturia
Enfermedad)r'   IntoleranciaAlergiaszToma medicamentosz!Tiene tratamiento para la tensionu   Alteraciones analíticasu   Número de biopsiasu(   Fecha de la última analítica de sangreu   Presión arterial sistólicau    El primer número de la presión)r&   	help_textr'   r)   u   Presión arterial diastólicau!   El segundo número de la presiónzGlucosa en sangrezColesterol HDLzColesterol HDL-CzColesterol LDLu   Colesterol TriglicéridoszColesterol totalu   Ácido úricoz
Hierro, FeZHemoglobinaZ
LeucocitosZCalcioZSodioZPotasioz
Vitamina DzVitamina B12u   Pérdida de pesou1   Pruebas intelectuales (oposiciones, exámenes…)u   Pruebas físicasu   Mejora de un síntomazDolor de espaldaZAgotamientou   Daño articularzDificultades respiratoriaszRazones emocionalesFumadoru   ¿Cigarros al día?u"   ¿Horas al dia en sitios con humo?u   Total de años fumandou'   Total de años desde que dejó de fumar   u   Ingesta alcohólica)
max_lengthr%   r&   choicesr'   u   Ejercicio físicou   Número de cafés al díazComidas fuera de casa semanalesu   Horas de sueño habitualZ
ColesterolZDiabetesZCardiovascularesZ	AlzheimerzArtritis reumatoidez0Numero de padres diagnosticados con hipertensionNingunoUnoAmbos)r%   r&   r'   r:   z-Numero de parientes diagnosticados con cancer1   2 o mászAlergia respiratoriaAsmazTos frecuentezDificultad para respirarVaricesu   Arañas vasculares rojaszFragilidad capilaru   Neuropatías periféricasu!   Moratones espontáneos o fácileszPesadez de piernasHemorroideszDigestiones lentasu   EstreñimientozDiarreas frecuentesGasesu   Náuseasu(   Ardor, dolor de estómago o indigestiónzAcidez estomacalu   Vómitosu   Hígado grasou5   Pérdida de flexibilidad en articulaciones o tendoneszDesgaste articular (artritis)z#Molestias en manos y articulacionesu   Retención de líquidoszCiclo menstrualu   Afección emocionalSomnolenciaIrritabilidadzDificultad para orinarz"Siente escozor a la hora de orinarz/Se levanta varias veces a orinar por las nochesu   Estríasu   Acné	PsoriasisEccemas
DermatitisPigmentacionesz	Piel secau   Caída de cabelloCefaleasu	   Migrañasu   Vértigos, mareos al levantarseu   Melancolía o tristezaAnsiedadzPreocupaciones excesivasu!   Trastornos actuales de depresiónPalpitacioneszDisforia o irritabilidadz Problemas personales o laboralesInsomniozDespertar precozu   Sueño fragmentadozSe levanta cansadou   EstrésMedidasAntropometricas)r'   r)   r#   EntradaIntervencionNutricionalc             C   s   | j j j S )N)intoleranciasallcount)self rT   I/var/www/vitahealth/hygea.vitahealth/healthbackend/models/cuestionario.pynum_intolerancias   s    zCuestionario.num_intoleranciasc                sX   | j s| jj | _| j  tt| j|| | j  | j	  | j
  | j  | j  d S )N)idpacienteageedadcrear_medidas_antropometricassuperr   saveregenerar_informesgenerar_ejerciciosgenerar_mapa_riesgo!generar_recomendacion_suplementos__generar_intervencion__)rS   argskwargs)	__class__rT   rU   r]      s    zCuestionario.savec             C   sh   t jd}t jd}|jj| dj r,| jS || jd}|j  ||| jd}|j  || _| j  d S )Nz,healthbackend.EntradaIntervencionNutricionalz%healthbackend.IntervencionNutricional)cuestionario)rX   )intervencionmedidas)	r   	get_modelobjectsfilterexists entrada_intervencion_nutricionalrX   r]   medidas_antropometricas)rS   rO   IntervencionNutricionalZintnutZ	entintnutrT   rT   rU   rb      s    

z%Cuestionario.__generar_intervencion__c             C   sl   | j | j_ | j| j_| j| j_| jj  | jj  | j rD| jj  | j	 rV| j
j  | j rh| jj  dS )z
        Invocar este metodo cuando se edite el cuestionario y se deseen regenerar los informes
        Nota: No tengo claro si deberiamos meterlo en el .save()... 
        N)	actividadrn   alturapesoauto_populater]   __mapariesgo_exists__
mapariesgodelete#__bloqueejerciciospaciente_exists__bloqueejerciciospaciente+__recomendacionsuplementospaciente_exists__ recomendacionsuplementospaciente)rS   rT   rT   rU   r^      s    






zCuestionario.regenerar_informesc             C   s   t jdjj| dj S )Nzhealthbackend.MapaRiesgo)rf   )r   ri   rj   rk   rl   )rS   rT   rT   rU   rt     s    z"Cuestionario.__mapariesgo_exists__c             C   s   t jdjj| dj S )Nz&healthbackend.BloqueEjerciciosPaciente)rf   )r   ri   rj   rk   rl   )rS   rT   rT   rU   rw     s    z0Cuestionario.__bloqueejerciciospaciente_exists__c             C   s   t jdjj| dj S )Nz.healthbackend.RecomendacionSuplementosPaciente)rf   )r   ri   rj   rk   rl   )rS   rT   rT   rU   ry   
  s    z8Cuestionario.__recomendacionsuplementospaciente_exists__c             C   sV   t jd}| jd krP| }| j|_| j|_| j|_| j|_|j  |j  || _| jS )Nz$healthbackend.MedidasAntropometricas)	r   ri   rn   rX   rp   rq   rr   rs   r]   )rS   rN   marT   rT   rU   r[     s    

z*Cuestionario.crear_medidas_antropometricasc             C   s,   t jj| jd}d|_d|_|r(|j  |S )z:
        Devuelve una copia clon del cuestionario
        )pkN)r   rj   getrW   createdr]   )rS   commitZclonrT   rT   rU   clone  s    zCuestionario.clonec             C   s
   | j   S )z
        Por homogeneidad en los modelos, ofrezco la logica inversa tambien y como
        property para que en todos los modelos se acceda de la misma forma
        )permite_ofrecer_dieta)rS   rT   rT   rU   impide_ofrecer_dieta'  s    z!Cuestionario.impide_ofrecer_dietac             C   s   ddddddddd	d
ddddddddg}x|D ]}t | |dkr.dS q.W | jjddj dkrbdS | jjddj dkr|dS | jdkr| j  | jjrdS dS )z
        Metodo que devuelve True o False en funcion de si es posible ofrecer una dieta segun
        su historia clinica y su mapa riesgo salud
        alergiasrP   medicamentosalteraciones_analiticasmejora_alteraciones_analiticasph_colesterolph_diabetesph_cardiovascularesph_alzheimerph_artritis_reumatoidedigestiones_lentasestrenimientodiarreasgasesnauseasacidez_estomacalvomitoshigado_grasoTF)r   r,   N)getattrenfermedades_actualesrk   rR   rP   ru   r`   r   )rS   ZcamposcamporT   rT   rU   r   /  s     


z"Cuestionario.permite_ofrecer_dietac             C   s>   | j jdddjddd}|j| jjdddjddd |S )z
        Metodo de instancia que devuelve una lista con todos los mensajes de alerta a
        mostrar junto a la dieta recomendada.
        F)r   Zalerta_dieta__isnullalerta_dietaT)flat)r   rk   values_listextendrP   )rS   ZalertasrT   rT   rU   alertas_dietaJ  s     zCuestionario.alertas_dietac             C   s.   | j  r| jS tjd}|| d}|j  |S )z
        Genera una instancia MapaRiesgo y calcula los riesgos de tener esas
        enfermedades en funcion del cuestionario.
        zhealthbackend.MapaRiesgo)rf   )rt   ru   r   ri   r]   )rS   
MapaRiesgomprT   rT   rU   r`   S  s    

z Cuestionario.generar_mapa_riesgoc          
   C   s   | j  r| jS | j }tjd}tjd}|jjddjd}|j dkrX|d j	j
}n y|jj d }W n   Y nX |jj| d|id\}}|S )zt
        Calcula el bloque de ejercicios a asignar al paciente en funcion
        de los riesgos de su mapa
        zhealthbackend.BloqueEjerciciosz&healthbackend.BloqueEjerciciosPacienter   )	value__gtZriesgo__ordenbloque_ejercicios)rf   defaults)rw   rx   r`   r   ri   riesgocalculado_setrk   order_byrR   riesgor   rj   rQ   get_or_create)rS   r   r   r   qsr   objr~   rT   rT   rU   r_   a  s    

zCuestionario.generar_ejerciciosc             C   s   | j  r| jj S d S )N)ry   rz   get_dieta_recomendada)rS   rT   rT   rU   r   z  s    z"Cuestionario.get_dieta_recomendadac             C   sB  t jd}t jd}| j r"| jS |jj| d\}}x,|jj D ]}|j| j| r@|j	j
| q@W |j	j |k rx|j	j D ]}|jj
| q|W |S i }x|j	j D ]}xj|jj D ]\}	|	jj|j kr||	jj d  |	j7  < ||	jj d j| q|	j|gd||	jj< qW x~|jj D ]p}
xh|
jjj D ]X}	|	j|j krt||	j d  |
j7  < ||	j d j| n|
j|gd||	j< q2W q W qW t|j }|jdd d	d
 g }x8|D ]0}tt|d }x|D ]}|j| qW qW d}xD|jj j |k r<|t|k r<|| }|jj
| |d7 }qW |S )z\
        Calcula los suplementos recomendados en funcion del cuestionario rellenado
        z.healthbackend.RecomendacionSuplementosPacientezhealthbackend.Recomendacion)rf   
puntuacionrecomendaciones)r   r   c             S   s   | d S )Nr   rT   )xrT   rT   rU   <lambda>  s    z@Cuestionario.generar_recomendacion_suplementos.<locals>.<lambda>T)keyreverser   r,   )r   ri   ry   rz   rj   r   rQ   evaluarrX   recomendaciones_activadasaddrR   recomendaciones_topsuplementorecomendado_set
suplementorW   keysr   appendfamiliarecomendada_setfamilia_suplementossuplementoslistvaluessortsetlen)rS   Znum_top RecomendacionSuplementosPacienteRecomendacionr   r~   recrr   sftoprowZrecsindexrT   rT   rU   ra   ~  sP    

 

$z.Cuestionario.generar_recomendacion_suplementosc          &   C   s   | j j | j| j| j jdkr dnd| j| j| jjddj	 | j
| j| j| j| j| j| j| j| j| j| j| j| j| j| j| j| j| j| j| j| j| j| j r| j nd| j!| j"| j#| j$| j%| j&| j'd%S )NHombreMFzDiabetes tipo 2)nombrer   )%rY   heightweightsexwaisthipdiabetessbpsbp_treateddbpfasting_glucose_level	uric_acidironcholesterol_hdlcholesterol_hdl_Ccholesterol_ldlcholesteroltriglycerideshemoglobine
leucocytescalciumsodium	potassiumDvitamin
B12vitaminparental_diabetesparents_diagnosed_hypertensionage_first_menstruationnumber_biopsiesage_mom_first_live_birthnumber_relatives_with_cancersmokerhours_in_smoky_roomfrequent_coughingnumber_cigarettesyears_since_stop_smokingtotal_years_smoking)(rX   rY   rq   rr   gendercinturacaderar   rk   rl   presion_arterial_sistolicatratamiento_tensionpresion_arterial_diastolicaglucosaacido_uricohierrocolesterol_hdlcolesterol_hdl_ccolesterol_ldlcolesterol_totaltrigliceridoshemoglobina
leucocitoscalciosodiopotasio
vitamina_dvitamina_b12r   ph_hipertensionedad_primera_reglanum_biopsiasedad_primer_hijo_vivo	ph_cancerfumador
horas_humotos_frecuentecigarrostotal_anos_desde_que_no_fumatotal_anos_fumando)rS   rT   rT   rU   __get_riskmap_input_data__  sJ    z'Cuestionario.__get_riskmap_input_data__c             C   sp   g }|j | jj  |j | jjddjddd |j | jjddjddd |j | jj  tt	|}|S )NF)consejo_salud__isnullconsejo_saludT)r   )
r   rz   get_consejos_saludr   rk   r   rP   ru   r   r   )rS   consejosrT   rT   rU   r    s    zCuestionario.get_consejos_saludNc             C   s  | j }d| | j |d}tjjtjdd|d d}tdj|d }|j	|}g }|j
t||dj	t|gd	 g }	x&|D ]}
x|
jD ]}|	j
| qW q|W |d
 j|	j }|rt|dd}|rd|j d |j d }nd}|jdd}d| d |d< |S |S d S )N
vitahealth)modelodatar  rX   staticpdfr  zpdf.cssz"healthbackend/pdf/{}/consejos.html)stringbase_url)stylesheetsr   zapplication/pdf)content_typezConsejos para  z.pdfzConsejos.pdf_z
filename=""zContent-Disposition)rX   r  ospathjoinr   BASE_DIRr   formatrenderr   r	   r
   pagescopy	write_pdfr   
first_name	last_namereplace)rS   as_httpresponser  rX   r  
report_csstemplatehtml	documents	all_pagesdocp	pdf_finalhttp_responsefilenamerT   rT   rU   consejos_to_pdf  s0    
 
zCuestionario.consejos_to_pdfc               @   s   e Zd ZdgZdS )zCuestionario.Metaz-createdN)__name__
__module____qualname__orderingrT   rT   rT   rU   Meta  s   r<  r   r   r   r   r   r   )r=  r>  r?  r   r   r   r   r   r   r   r   )r@  rA  rB  rC  r   r   r   r   r   r   )rD  rE  rF  r   r   r   r   r   r   )rG  rH  rI  r   r   r   r   r   r   )rJ  rK  rL  r   r   r   r   r   r   )rM  rN  rO  r   r   r   r    r   r!   )rP  rQ  rR  r   r;   r,   r<   r.   r=   )rS  rT  rU  r   r;   r,   r>   r.   r?   )rV  rW  rX  )T)r-   )TN)r8  r9  r:  __doc__ZEJERCICIO_OPTIONSZALCOHOL_OPTIONSZSUENO_OPTIONSZALERGIA_OPTIONSZVASCULARES_ROJAS_OPTIONSZESTRENIMIENTO_OPTIONSZCICLO_MENSTRUAL_OPTIONSr   
ForeignKeyCASCADErX   DateTimeFieldr~   IntegerFieldZnumero_hijosrZ   
FloatFieldrr   rq   rp   PositiveSmallIntegerFieldr   r   ZmusloDecimalFieldZ
masa_grasaZ
masa_magraZagua_corporalr  r  BooleanFieldZ
climaterioZ	cansancioZpicores_vaginalesZcistitiscandidiasisZperdida_muscularZperdida_memoriaZperdida_visionZnicturiaManyToManyFieldr   rP   r   r   r   r   r  	DateFieldZfecha_analiticar   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  Zperdida_pesoZpruebas_intelectualesZpruebas_fisicasZmejora_sintomaZmejora_dolor_espaldaZmejora_agotamientoZmejora_dolor_articularZ!mejora_dificultades_respiratoriasr   Zmejora_razones_emocionalesr	  r  r
  r  r  	CharFieldZalcoholZ	ejercicioZcafesZcomidas_fueraZdormirr   r   r   r   r   r  r  Zalergia_respiratoriaZasmar  Zdificultad_respiratoriaZvaricesZaranas_vascularesZfragilidad_capilarZneuropatias_perifericasZ	moratonesZpesadez_piernasZhemorroidesr   r   r   r   r   Zardorr   r   r   Zperdida_flexibilidadZdesgaste_articularZmolestias_manos_articulacionesZretencion_liquidosZciclo_menstrualZafeccion_emocionalZsomnolenciaZirritabilidadZdificultad_urinariaZescozor_urinarioZorina_nocturnaZestriasacneZ	psoriasisZeccemasZ
dermatitisZpigmentacionesZ	piel_secaZcaida_cabelloZcefaleasZmigranasZvertigosZmelancolia_tristezaZansiedadZpreocupacionesZ	depresionZpalpitacionesZdisforia_irritabilidadZproblemas_personales_laboralesZinsomnioZdespertar_precozZsueno_fragmentadoZse_levanta_cansadoZestresOneToOneFieldSET_NULLrn   rm   propertyrV   r]   rb   r^   rt   rw   ry   r[   r   r   r   r   r`   r_   r   ra   r  r  r7  r<  __classcell__rT   rT   )re   rU   r      s@  	=)$r   c               @   s^   e Zd ZejdddZejddddZejdddZ	ejddd	dZ
G d
d dZdd ZdS )r3      Nombre)r9   r&   TzConsejo de salud)r'   r)   r&   z@Desmarcar en caso que se pueda ofrecer una dieta aunque se tenga)r%   r6   z&Advertencia a mostrar al nutricionistac               @   s   e Zd ZdgZdS )zEnfermedad.Metar   N)r8  r9  r:  r;  rT   rT   rT   rU   r<    s   r<  c             C   s   | j S )N)r   )rS   rT   rT   rU   __str__   s    zEnfermedad.__str__N)r8  r9  r:  r   re  r   	TextFieldr  ra  r   r   r<  rm  rT   rT   rT   rU   r3     s   r3   c               @   sb   e Zd ZdZejdddZejddddZej	ddd	Z
ejddd
dZG dd dZdd ZdS )r4   z Gluten, lactosa, otros por ahorark  rl  )r9   r&   TzConsejo de salud)r'   r)   r&   z@Desmarcar en caso que se pueda ofrecer una dieta aunque se tenga)r%   r6   z&Advertencia a mostrar al nutricionistac               @   s   e Zd ZdgZdS )zIntolerancia.Metar   N)r8  r9  r:  r;  rT   rT   rT   rU   r<  +  s   r<  c             C   s   | j S )N)r   )rS   rT   rT   rU   rm  .  s    zIntolerancia.__str__N)r8  r9  r:  rY  r   re  r   rn  r  ra  r   r   r<  rm  rT   rT   rT   rU   r4   $  s   r4   )r   django.appsr   django.confr   	django.dbr   django.httpr   django.template.loaderr   Zhealthbackend.modelsr   r   
weasyprintr	   r
   Modelr   r3   r4   rT   rT   rT   rU   <module>   s   
    