
    ]-^i'                         d Z d Zd Zd Zy)zT
Clinical ranges for health metrics with programmatic status and score calculation.
c                 l    	 | j                  d      }t        |d         t        |d         fS #  Y yxY w)zAParse blood pressure string like '120/80' into systolic/diastolic/       )x   P   )splitint)bp_strpartss     7/var/www/welltra_ai_report_api/utils/clinical_ranges.pyparse_blood_pressurer      s:    S!58}c%(m++s   ,/ 3c                    i dd dd dd dd d	d
 dd dd dd dd dd dd dd dd dd dd dd  d!d" d# d$ d% d& d' d( d)}|j                  | j                               }|r		  ||      S y*#  Y y*xY w)+z
    Returns (status, score) for a given metric and value.
    Status: Normal, High, Low, Optimal, Borderline, Critical
    Score: 0-10 based on clinical ranges
    
heart_ratec                 Z    d| cxk  rdk  rdS  | dk(  rdS d| cxk  rdk  rdS  | dk  rdS d	S )
N3   d   Normal
   2   zBorderline Low   n   Borderline Highr   Low   Highr    vs    r   <lambda>z'get_metric_evaluation.<locals>.<lambda>   sX     AnnN ,%&"W!  '*Ann"  '5b&J	  '2	     breathing_ratec                 h    d| cxk  rdk  rdS  d| cxk  rdk  rdS  d| cxk  rdk  rdS  | dk  rdS d	S )
N      r   r   r      r   r   r   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>   s]     AmmN +%'1\r\! %1&(1ll"  '3b&J	  '2	 r%   oxygen_saturationc                 L    | dk\  rdS d| cxk  rdk  rdS  d| cxk  rdk  rdS  dS )N^   r   [   r   X   r      )zCritically Lowr   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>!   sE    2gN %'1\r\! %1,B,J  '!	 r%   blood_pressurec                 D    t        | t              r d t        |        S dS )Nc                 `    d | dkD  rdn(| dk\  rdn!d| cxk  rdk  rn ndnd| cxk  rdk  rn nd	nd
|dkD  rdn|dk\  rdnd|cxk  rdk  rn ndnd
| dkD  s|dkD  rd      S | dk\  s|dk\  rd      S d| cxk  rdk  sn d|cxk  r
dk  rd      S  nd      S d| cxk  r
dk  rd      S  d      S )Nc                     d|  d| |fS )Nz	Systolic z, Diastolic r!   )
sys_status
dia_statusscores      r   r$   zKget_metric_evaluation.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>*   s    
|<
|De8 r%      Crisis   zStage 2 High   zStage 1 Highr   Elevatedr   Z   r   r   r         r   r!   )sds     r   r$   z9get_metric_evaluation.<locals>.<lambda>.<locals>.<lambda>(   s     !"CH&'3hN&)QnnN"%.S.J !CH&'2gN&(AllNSAGA $ cQ"WA! & C2<R<A# & ,8A# ( CA% ( (' r%   )z!Systolic Normal, Diastolic Normalr   )
isinstancestrr   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>'   s3    0 -7q#,>/. %Q'/) 0 En1 r%   stress_levelc                 .    | dv rdS | dk(  rdS | dk(  rdS dS )N)r   r   r   Mild)rG   r   r    r    r1   )z	Very High   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>A   s:    #44N ;K  ;K  	 r%   heart_variabilityc                 h    d| cxk  rdk  rdS  d| cxk  rdk  rdS  d| cxk  rdk  rdS  | dk  rdS d	S )
Nr   r   r      r      r   r0   rH   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>G   s]     AnnN ,%'1\r\! %1&)Ann"  '5b&J	  '2	 r%   prqc                 >    d| cxk  rdk  rdS  d| cxk  rdk  rdS  dS )Nr   r   Optimalr   <   )r   r   r0   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>M   s4    !Q~#~O -1\r\M ) r%   activityc                 L    | dk\  rdS d| cxk  rdk  rdS  d| cxk  rdk  rdS  dS Nr   rP      Goodr   r   Fairr1   )r   rI   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>R   D     AvO :A:K %:A:K  &	 r%   sleepc                 ^    d| cxk  rdk  rdS  d| cxk  rdk  sn d| cxk  rdk  rdS  ndS dS )Nr   	   rP   r?   r   rW   )Poorr1   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>X   sG     A{{O *:A:Q"K )4K   r%   equilibriumc                 L    | dk\  rdS d| cxk  rdk  rdS  d| cxk  rdk  rdS  dS )Nr   )rQ   rV   rV   )rX   r1   r   )rZ   r   )r   r   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>]   sD    1fN :A:K %:A:K  &	 r%   
metabolismc                 L    | dk\  rdS d| cxk  rdk  rdS  d| cxk  rdk  rdS  dS rU   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>c   r[   r%   
relaxationc                 L    | dk\  rdS d| cxk  rdk  rdS  d| cxk  rdk  rdS  dS rU   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>i   r[   r%   cardiovascular_agec                 0    | dk  rdS | dk  rdS | dk  rdS dS )N#   rP   -   rW   7   rY   r    rI   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>o   s8     BwO 7K  7K  	 r%   
hemoglobinc                 h    d| cxk  rdk  rdS  d| cxk  rdk  rdS  d| cxk  rdk  rdS  | dk  rdS d	S )
Ng      +@g     1@r   r(   r      r   r   r   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>u   s_    "a/4/N /%'1^t^! %3&*Qn"n"  '5b&J	  '2	 r%   cholesterolc                 0    | dk  rdS d| cxk  rdk  rdS  dS )N   r      r   r?   rk   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>{   s.    #gN &)Qnn" &4 r%   a1c_riskc                 0    | dk  rdS d| cxk  rdk  rdS  dS Ng@r   g      @)Prediabeticr?   )DiabeticrI   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>   .    #gN "%.S. "0 r%   cholesterol_riskc                 L    | dk  rdS d| cxk  rdk  rdS  d| cxk  rdk  rdS  dS )NrV   r   g      @r   r)   )Intermediater1   rk   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>   sF    !eN &'1lsl" &2#&!=b=  $1	 r%   c                 L    | dk\  rdS d| cxk  rdk  rdS  d| cxk  rdk  rdS  dS )Nr@   rP   r?   )rX   r@   r1   )rZ   rV   )r_   rI   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>   sD     AvO :A:K %:A:K  &	 r%   c                 "    | dk(  rdS | dk(  rdS dS )NNSRr   AFib)Abnormalr   )Errorr   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>   s(    5jN  F{O   r%   c                 0    | dk  rdS d| cxk  rdk  rdS  dS rv   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>   ry   r%   c                 L    d| cxk  rdk  rdS  | dk  rdS d| cxk  rdk  rdS  dS )	Ng     2@gfffff8@r   )Underweightr   g      9@g      >@)
Overweightr   )Obeser   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>   sL    "a/4/N /"#d(  "&!1T!1  "2	 r%   c                      y)Nr   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>   s    r%   c                 0    | dk(  rdS | dk(  rdS | dk(  rdS dS )Nr   r   r   rs   r    rk   r!   r"   s    r   r$   z'get_metric_evaluation.<locals>.<lambda>   s;    8mN &'+<&<"  ;K  	 r%   )wellness_scoreatrial_fibrillationhba1ccardiovascular_bmi	a1c_rangecholesterol_range)r   rV   )getlower)metric_namevalueevaluations	eval_funcs       r   get_metric_evaluationr      s   T 
T 	 
T 	 
T& 	 
'TZ 	 
[Tf 	 
gTr 	 
sT| 	 
}TH 	 
ITR 	 
ST^ 	 
_Tj 	 
kTv 	 
wTB 	 
CTN 	 
OTX 	 
YTb 	 
cTn
 




 .
]TKn  1 1 34I	!U## 	! s   8B Bc                 n    i }| j                         D ]  \  }}|	t        ||      \  }}||d||<   ! |S )zp
    Evaluate all metrics from input data.
    Returns dict of {metric_name: {"status": str, "score": int}}
    )statusr8   )itemsr   )	data_dictresultskeyr   r   r8   s         r   evaluate_all_metricsr      sN    
 Goo' >
U1#u=MFE&,u=GCL> Nr%   N)__doc__r   r   r   r!   r%   r   <module>r      s   dN
r%   