ó
    ¦ÅOjð  ã                   ó`   • S SK Jr  S SKJr  S SKJr  SSSSSS	.rS
\S\4S jrS
\S\S\4S jr	g)é    )ÚVitals)ÚTriageExtraction)Ú
CTASResultÚResuscitationÚEmergentÚUrgentzLess Urgentz
Non-Urgent)é   é   é   é   é   Ú
extractionÚreturnc                 ó  • U R                   S-   U R                  -   S-   U R                  -   S-   U R                  -   S-   SR	                  U R
                  5      -   S-   SR	                  U R                  5      -   R                  5       $ )NÚ )Úchief_complaintÚseverityÚdurationÚsummaryÚjoinÚassociated_symptomsÚrisk_factorsÚlower)r   s    ÚCC:\Users\sufyan\Desktop\hospital-kiosk-ai\src\triage\ctas_engine.pyÚ_build_search_textr      s¢   € ð 	×"Ñ" SÑ(Ø×Ññ	Ø!ñ	"à×Ññ	à!ñ	"ð 	×Ññ	ð !ñ	!ð 	�‰�×/Ñ/Ó0ñ		1ð 47ñ		7ð
 	�‰�×(Ñ(Ó)ñ	*÷ �eƒgðó    Úvitalsc                 ó  ^ • / nSn[        T 5      nUR                  S:  a,  UR                  SUR                   S35        [        US5      nO;UR                  S:  a+  UR                  SUR                   S35        [        US5      nUR                  S	:”  d  UR                  S
:  a,  UR                  SUR                   S35        [        US5      nOKUR                  S:”  d  UR                  S:  a+  UR                  SUR                   S35        [        US5      nUR
                  S:  a+  UR                  SUR
                   35        [        US5      nO:UR
                  S:”  a*  UR                  SUR
                   35        [        US5      nUR                  S:”  d  UR                  S:  a+  UR                  SUR                   35        [        US5      nO:UR                  S:”  a*  UR                  SUR                   35        [        US5      nUR                  S:¼  a,  UR                  SUR                   S35        [        US5      nO;UR                  S:¼  a+  UR                  SUR                   S35        [        US5      nSU;   a#  SU;   a  UR                  S 5        [        US5      nS!U;   d  S"U;   a  UR                  S#5        [        US5      nS$U;   d  S%U;   d  S&U;   d  S'U;   a  UR                  S(5        [        US5      nS)U;   a  UR                  S*5        [        US5      nS+U;   d  S,U;   d  S-U;   a  UR                  S.5        [        US5      nS/U;   a#  S0U;   a  UR                  S15        [        US5      nS2U;   d  S3U;   a#  S4U;   a  UR                  S55        [        US5      nS6U;   d  S7U;   a  UR                  S85        [        US5      nS9U;   d  S:U;   a  UR                  S;5        [        US5      nS<U;   d  S=U;   a  UR                  S>5        [        US5      nS?U;   d  S@U;   d  SAU;   a  UR                  SB5        [        US5      nSCU;   a  UR                  SD5        [        US5      nSEU;   d  S:U;   a#  SFU;   a  UR                  SG5        [        US5      nSHU;   d  SIU;   a  UR                  SJ5        [        US5      nSKU;   d  SLU;   a  UR                  SM5        [        US5      nSNU;   a)  SOU;   d  SPU;   a  UR                  SQ5        [        US5      nSRU;   a  UR                  SS5        [        US5      nSU;   a#  STU;   a  UR                  SU5        [        US5      nSVT R                  R                  5       ;   d  [        U 4SW jSX 5       5      (       a  UR                  SY5        [        US5      nU(       d  UR                  SZ5        S[n[        U[        U   US\9$ )]Nr   éZ   zSpO2 critically low at Ú%r	   é^   zSpO2 low at r
   é‚   é(   zHeart rate critical at z bpmén   é2   zHeart rate abnormal at zHypotension: BP systolic é´   z!Severe hypertension: BP systolic é   é   zRespiratory rate critical at é   zRespiratory rate elevated at g      D@zVery high fever: z Cg     @C@zHigh fever: r   z
chest painzshortness of breathz#Chest pain with shortness of breathzarm painzjaw painz3Radiating pain pattern suggestive of cardiac originzcannot breathezunable to speakz	blue lipsÚcyanosisz!Severe respiratory distress signsÚgaspingzGasping for airzvomiting bloodzblack stoolzblood in stoolzGI bleeding signsÚrigidÚ	abdominalz3Rigid abdomen, suggestive of acute surgical abdomenzworst headacheÚsuddenÚheadachez7Sudden severe headache, possible neurological emergencyzvision changeszneck stiffnessz(Neurological warning signs with headachezheavy bleedingÚunconsciousz.Severe trauma with bleeding or unconsciousnessÚ	deformityzhead injuryz.Significant injury requiring urgent assessmentzswelling of throatzthroat tightnesszdifficulty breathingzSigns of anaphylaxiszswelling of facez2Facial swelling, possible severe allergic reactionznot breathingÚseizurez4Seizure with unconsciousness or breathing compromisezmultiple seizuresz
first timez'Multiple or first-time seizure activityzsevere dehydrationzunable to keep fluidszSevere dehydration riskÚbloodÚvomitingÚdiarrheazBlood present in vomit or stoolzdid not regain consciousnesszProlonged loss of consciousnessÚfaintingz/Syncope with chest pain, possible cardiac causeÚseverec              3   ó@   >#   • U  H  oTR                   ;   v •  M     g 7f)N)r   )Ú.0Únr   s     €r   Ú	<genexpr>Ú!calculate_ctas.<locals>.<genexpr>¨   s   øé € Ð5iÒXhÐST¸:×;NÑ;NÖ6NÒXhùs   ƒ)Ú8Ú9Ú10zPatient-reported high severityz*No high-risk vitals or symptoms identifiedr   )Ú
ctas_levelÚ
ctas_labelÚjustification)r   Úspo2ÚappendÚminÚ
heart_rateÚbp_systolicÚrespiratory_rateÚtemperature_cr   r   Úanyr   ÚCTAS_LABELS)r   r   rB   ÚlevelÚsearch_texts   `    r   Úcalculate_ctasrN      sø  ø€ à€MØ€Eä$ ZÓ0€Kð ‡{�{�RÓØ×ÑÐ6°v·{±{°mÀ1ÐEÔFÜ�E˜1“‰à	�‰�rÓ	Ø×Ñ˜|¨F¯K©K¨=¸Ð:Ô;Ü�E˜1“ˆà×Ñ˜3Ó &×"3Ñ"3°bÓ"8Ø×ÑÐ6°v×7HÑ7HÐ6IÈÐNÔOÜ�E˜1“‰à	×	Ñ	˜SÓ	  F×$5Ñ$5¸Ó$:Ø×ÑÐ6°v×7HÑ7HÐ6IÈÐNÔOÜ�E˜1“ˆà×Ñ˜BÓØ×ÑÐ8¸×9KÑ9KÐ8LÐMÔNÜ�E˜1“‰à	×	Ñ	˜cÓ	!Ø×ÑÐ@À×ASÑASÐ@TÐUÔVÜ�E˜1“ˆà×Ñ Ó# v×'>Ñ'>ÀÓ'BØ×ÑÐ<¸V×=TÑ=TÐ<UÐVÔWÜ�E˜1“‰à	×	 Ñ	  2Ó	%Ø×ÑÐ<¸V×=TÑ=TÐ<UÐVÔWÜ�E˜1“ˆà×Ñ˜tÓ#Ø×ÑÐ0°×1EÑ1EÐ0FÀbÐIÔJÜ�E˜1“‰à	×	Ñ	 Ó	%Ø×Ñ˜|¨F×,@Ñ,@Ð+AÀÐDÔEÜ�E˜1“ˆð �{Ó"Ð'<ÀÓ'KØ×ÑÐBÔCÜ�E˜1“ˆà�[Ó  J°+Ó$=Ø×ÑÐRÔSÜ�E˜1“ˆð ˜;Ó&Ð*;¸{Ó*JÈkÐ]hÓNhÐlvð  {Fó  mFØ×ÑÐ@ÔAÜ�E˜1“ˆà�KÓØ×ÑÐ.Ô/Ü�E˜1“ˆð ˜;Ó&¨-¸;Ó*FÐJZÐ^iÓJiØ×ÑÐ0Ô1Ü�E˜1“ˆà�+Ó +°Ó"<Ø×ÑÐRÔSÜ�E˜1“ˆð ˜;Ó&¨(°kÓ*AÀjÐT_ÓF_Ø×ÑÐVÔWÜ�E˜1“ˆà˜;Ó&Ð*:¸kÓ*IØ×ÑÐGÔHÜ�E˜1“ˆð ˜;Ó&¨-¸;Ó*FØ×ÑÐMÔNÜ�E˜1“ˆà�kÓ! ]°kÓ%AØ×ÑÐMÔNÜ�E˜1“ˆð ˜{Ó*Ð.@ÀKÓ.OÐSiÐmxÓSxØ×ÑÐ3Ô4Ü�E˜1“ˆà˜[Ó(Ø×ÑÐQÔRÜ�E˜1“ˆð ˜+Ó%¨-¸;Ó*FÈ9ÐXcÓKcØ×ÑÐSÔTÜ�E˜1“ˆà˜kÓ)¨\¸[Ó-HØ×ÑÐFÔGÜ�E˜1“ˆð ˜{Ó*Ð.EÈÓ.TØ×ÑÐ6Ô7Ü�E˜1“ˆà�+Ó :°Ó#<À
ÈkÓ@YØ×ÑÐ>Ô?Ü�E˜1“ˆð &¨Ó4Ø×ÑÐ>Ô?Ü�E˜1“ˆà�{Ó" z°[Ó'@Ø×ÑÐNÔOÜ�E˜1“ˆð �:×&Ñ&×,Ñ,Ó.Ó.´#Ô5iÑXhÓ5i×2iÑ2iØ×ÑÐ=Ô>Ü�E˜1“ˆæØ×ÑÐIÔJØˆäØÜ˜uÑ%Ø#ñð r   N)
Úsrc.schemas.vitalsr   Úsrc.schemas.triager   Úsrc.schemas.ctasr   rK   Ústrr   rN   © r   r   Ú<module>rT      sY   ðÝ %Ý /Ý 'ð ØØØØñ€ð	Ð#3ð 	¸ô 	ðYÐ/ð Y¸ð YÀJõ Yr   