@@ -69,30 +69,67 @@ def get_patient_observations(patient_id, credentials):
6969 observations [obs_name ] = 'Not Found'
7070 return observations , demographics
7171
72+ def calculate_ascvd_risk (age , sex , race , total_cholesterol , hdl_cholesterol , systolic_bp , on_hypertension_treatment , diabetes , smoker ):
73+ # Simplified ASCVD risk calculation
74+ # Note: This is a placeholder. Use a proper ASCVD risk calculator for accurate results.
75+ risk_score = 0
76+ if sex == 'male' :
77+ risk_score += 1
78+ if race == 'African American' :
79+ risk_score += 1
80+ risk_score += age / 10
81+ risk_score += total_cholesterol / 50
82+ risk_score -= hdl_cholesterol / 50
83+ risk_score += systolic_bp / 20
84+ if on_hypertension_treatment == 'yes' :
85+ risk_score += 1
86+ if diabetes == 'yes' :
87+ risk_score += 1
88+ if smoker == 'yes' :
89+ risk_score += 1
90+ return round (risk_score , 2 )
91+
7292@app .route ('/' , methods = ['GET' , 'POST' ])
7393def index ():
7494 observations = None
7595 demographics = None
76- additional_fields = {}
77-
78- if request .method == 'POST' :
79- patient_id = request .form ['patient_id' ]
80- additional_fields ['diabetes' ] = request .form .get ('diabetes' )
81- additional_fields ['smoker' ] = request .form .get ('smoker' )
82- additional_fields ['hypertension' ] = request .form .get ('hypertension' )
83- additional_fields ['statin' ] = request .form .get ('statin' )
84- additional_fields ['aspirin' ] = request .form .get ('aspirin' )
85- credentials = (username , password )
86- observations , demographics = get_patient_observations (patient_id , credentials )
87- # Capture additional inputs from the user
88- demographics ['age' ] = request .form .get ('age' ) or demographics ['age' ]
89- demographics ['sex' ] = request .form .get ('sex' ) or demographics ['sex' ]
90- demographics ['race' ] = request .form .get ('race' ) or demographics ['race' ]
91- for obs_name in observation_codes .keys ():
92- form_name = obs_name .replace (' ' , '_' ).lower ()
93- observations [obs_name ] = request .form .get (form_name ) or observations [obs_name ]
94-
95- return render_template ('index.html' , observations = observations , demographics = demographics , additional_fields = additional_fields )
96+ ascvd_risk = None
97+
98+ return render_template ('index.html' , observations = observations , demographics = demographics , ascvd_risk = ascvd_risk )
99+
100+ @app .route ('/fetch_patient_data' , methods = ['POST' ])
101+ def fetch_patient_data ():
102+ patient_id = request .form ['patient_id' ]
103+ credentials = (username , password )
104+ observations , demographics = get_patient_observations (patient_id , credentials )
105+ return render_template ('index.html' , observations = observations , demographics = demographics , patient_id = patient_id )
106+
107+ @app .route ('/calculate_risk' , methods = ['POST' ])
108+ def calculate_risk ():
109+ patient_id = request .form .get ('patient_id' )
110+ age = int (request .form ['age' ])
111+ sex = request .form ['sex' ]
112+ race = request .form ['race' ]
113+ total_cholesterol = float (request .form ['total_cholesterol' ])
114+ hdl_cholesterol = float (request .form ['hdl_cholesterol' ])
115+ systolic_bp = float (request .form ['systolic_blood_pressure' ])
116+ diabetes = request .form ['diabetes' ]
117+ smoker = request .form ['smoker' ]
118+ hypertension = request .form ['hypertension' ]
119+
120+ ascvd_risk = calculate_ascvd_risk (age , sex , race , total_cholesterol , hdl_cholesterol , systolic_bp , hypertension , diabetes , smoker )
121+
122+ # Maintain the form values for observations and demographics
123+ demographics = {'age' : age , 'sex' : sex , 'race' : race }
124+ observations = {
125+ 'Total Cholesterol' : total_cholesterol ,
126+ 'HDL Cholesterol' : hdl_cholesterol ,
127+ 'Systolic Blood Pressure' : systolic_bp ,
128+ 'Diastolic Blood Pressure' : request .form ['diastolic_blood_pressure' ] if 'diastolic_blood_pressure' in request .form else 'Not Found' ,
129+ 'LDL Cholesterol' : request .form ['ldl_cholesterol' ] if 'ldl_cholesterol' in request .form else 'Not Found'
130+ }
131+
132+ return render_template ('index.html' , ascvd_risk = ascvd_risk , demographics = demographics , observations = observations , patient_id = patient_id )
96133
97134if __name__ == '__main__' :
98135 port_str = os .environ ['FHIR_PORT' ]
0 commit comments