
    BOh8                        d dl mZ d dlmZ d dlZd dlZd dlmZ d dlm	Z	 d dl
mZmZmZ  e       Zej                  edgdgdg       d	 Zd
 Zej%                  d      d        Zej)                  d      defd       Zy)    )FastAPI)CORSMiddlewareN)DiagnoseRequest)run_rule_engine)train_model_from_dbanswers_to_featurespredict_ml_model*)allow_originsallow_methodsallow_headersc                  6    t        j                  ddddd      S )Nz103.216.116.241rootz
Tung_2002@
copd_tb_dbi3  )hostuserpassworddatabaseport)pymysqlconnect     */var/www/html/diagnosisapp-backend/main.pyget_dbr      s    ?? 1`lrwxxr   c                     t        d | D              }t        d | D              }g }|dk\  r|j                  d       |dk\  r|j                  d       |S )Nc              3   Z   K   | ]#  }|j                   d k  s|j                  s d % yw)      Nquestionnaire_idanswer.0as     r   	<genexpr>z"threshold_logic.<locals>.<genexpr>   s#     O!!*<*<*AahhAO   +++c              3   Z   K   | ]#  }|j                   d k\  s|j                  s d % yw)   r   Nr    r#   s     r   r&   z"threshold_logic.<locals>.<genexpr>   s#     P11+=+=+BqxxQPr'      lao   copd)sumappend)answers	lao_count
copd_countresults       r   threshold_logicr4      sR    OwOOIPPPJFA~eQfMr   z
/questionsc                      t               } | j                         5 }|j                  d       |j                         }d d d        | j	                          D cg c]  }|d   |d   d c}S # 1 sw Y   2xY wc c}w )Nz"SELECT id, question FROM questionsr   r   )idquestion)r   cursorexecutefetchallclose)conncurr3   rows       r   get_questionsr?      so    8D	  #89  	JJL:@A33q6s1v.AA	    Bs   "A.A:.A7z	/diagnosereqc           
      v   t        | j                        }t        | j                        }t        | j                        }t	               }|j                         5 }|j                  d| j                  j                  | j                  j                  | j                  j                  t        j                  |      df       |j                          |j                  d       |j                         }d d d        |j                          D cg c]  }|d   |d   d }}g }	|rh	 t!        |       t#        |      }
|
j%                  d      D cg c]7  }|j'                         s|j'                         dk7  s(|j'                         9 }	}t)        ||z   |	z         }|sd	}d
}d}nd}d}dj+                  t-        |            }t	               }|j                         5 }|j                  d|| j                  j                  | j                  j                  f       |j                          d d d        |j                          t-        t)        |            t-        t)        |            t-        t)        |	            t-        |      ||dS # 1 sw Y   xY wc c}w c c}w #  g }	Y xY w# 1 sw Y   xY w)NzWINSERT INTO results (name, age, gender, answers, diagnosis) VALUES (%s, %s, %s, %s, %s)	_pending_zESELECT answers, diagnosis FROM results WHERE diagnosis != '_pending_'r   r   )r0   	diagnosis,u   Không đủ dữ liệu MLuD   Không đủ dấu hiệu rõ ràng để nghi ngờ Lao hoặc COPDuu   Bạn nên theo dõi thêm và thực hiện lại khảo sát sau một thời gian nếu có triệu chứng mới.u   Phân tích hoàn tấtuX   Bạn nên thực hiện xét nghiệm chẩn đoán chuyên sâu với cơ sở y tế.z, zZUPDATE results SET diagnosis = %s WHERE diagnosis = '_pending_' AND name = %s AND age = %s)
rule_basedlogic_thresholdml_predictionfinal_diagnosisstatus
suggestion)r   r0   r4   r   r   r8   r9   r   nameagegenderjsondumpscommitr:   r;   r   r	   splitstripsetjoinsorted)r@   rE   threshold_basedfeaturesr<   r=   r3   r>   result_dicts	ml_result
predictionsfinalrI   rJ   final_results                   r   diagnoser^   %   sB    -J%ckk2O"3;;/H 8D	  #mXX]]CHHLL#((//4::hCWYde	g[\  	JJLHNOASV<OLOI	-)(3J,6,<,<S,A~qQWWYSTSZSZS\`}S}~I~
 
_,y89EW M
4*o
yy/ 8D	 #p!388==#((,,?	A 	JJL S_-!#o"67I/!%=  O    P 	I sJ   BJJ')J% J &J :J J%  AJ/J J% %J,/J8)fastapir   fastapi.middleware.corsr   r   rN   schemasr   tb_knowledger   ml_modelr   r   r	   appadd_middlewarer   r4   getr?   postr^   r   r   r   <module>rh      s     2   # ( O Oi   >#se\_[`  ay	 B B +5/ 5 5r   