
    yia                     8    S r SSKrSSKJr  SSKr " S S5      rg)u@   Decision Engine: carga reglas en Markdown y evalúa condiciones.    N)datetimec                   H    \ rS rSrS rS rSS jrS rS rS r	S	 r
S
 rSrg)DecisionEngine   c                     U R                  S5      U l        U R                  S5      U l        U R                  S5      U l        g )Nzlogic/escalation_rules.mdzconfig/calendar_rules.mdlogic/correlations.md)load_markdownescalation_rulescalendar_rulescorrelations)selfs    4/home/sebas/health-system/scripts/decision_engine.py__init__DecisionEngine.__init__   s>     $ 2 23N O"001KL ../FG    c                    [        USSS9 nUR                  5       nS S S 5        [        R                  " SW[        R                  5      nU Vs/ s H  n[
        R                  " U5      PM     nnX6S.$ ! , (       d  f       N^= fs  snf )Nrutf-8encodingz```yaml(.*?)```)raw_markdownparsed_rules)openreadrefindallDOTALLyaml	safe_load)r   filepathfcontentyaml_blocksblockruless          r   r	   DecisionEngine.load_markdown   sk    (C'2affhG 3jj!3WbiiH4?@K5&K@ '??	 32 As   A5 B5
BNc                    U=(       d    0 nU R                   S    H  nUR                  S5      =(       d    UR                  S5      nU(       d  M5  U R                  XQX#5      (       d  MN  U R                  U5      UR                  S5      =(       d    UR                  S5      UR                  S5      =(       d    UR                  S5      S.s  $    g )	Nr   u
   Condición	ConditionMensajeMessageu   AcciónAction)levelmessageaction)r
   getmatches_conditionextract_level)r   metricvaluecontextrule	conditions         r   evaluate_escalation"DecisionEngine.evaluate_escalation   s    -R)).9D.G$((;2GI%%iHH!//5#xx	2Idhhy6I"hhy1GTXXh5G  : r   c                     UR                  S[        U5      5      nX2S.UEn [        U0 U5      $ ! [         a     gf = f)Nz{count})r3   r2   F)replacestreval	Exception)r   r6   r2   r3   r4   	local_ctxs         r   r0    DecisionEngine.matches_condition"   sK    %%iU<	#AA			2y11 		s   0 
==c                     UR                  S5      =(       d    SR                  5       nSU;   d  SU;   a  gSU;   d  SU;   a  gSU;   d  S	U;   a  g	g
)Nr)    u   🔥u   CRÍTICOCRITICALu   🚨ALERTu   ⚠️WARNINGINFO)r/   upper)r   r5   msgs      r   r1   DecisionEngine.extract_level*   sS    xx	"(b//1S=J#-S=GsNs?i3.r   c                 n    U R                  U5      nUS:X  a  US:X  a  SSS.$ US:X  a
  US:X  a  SS0$ SS	0$ )
NMEETINGmovement_breakpostponezevent_end + 1min)r.   toWORKOUTr.   cancelsend_normal)classify_event)r   eventreminder_type
event_types       r   adapt_to_calendar DecisionEngine.adapt_to_calendar4   sT    ((/
"}8H'H(0BCC"}8H'Hh''-((r   c                    ^ UR                  S5      =(       d    SR                  5       m/ SQ/ SQ/ SQ/ SQS.nUR                  5        H#  u  p4[        U4S jU 5       5      (       d  M!  Us  $    g	)
NtitlerA   )meetingu   reunióncallsyncz1:1)focusz	deep workcodingwriting)gymworkout
calistenia	ejercicio)almuerzocenadesayunolunchdinner)rJ   FOCUSrN   MEALc              3   ,   >#    U  H	  oT;   v   M     g 7fN ).0kwrX   s     r   	<genexpr>0DecisionEngine.classify_event.<locals>.<genexpr>F   s     -2;s   OTHER)r/   loweritemsany)r   rR   keywordsrT   kwsrX   s        @r   rQ   DecisionEngine.classify_event=   sc    7#)r002E@DG	
  (~~/OJ----!!  0 r   c                 L   [        SSSS9 nUR                  S[        R                  " 5       R	                  S5       S35        UR                  SUS	    S35        UR                  S
US    S35        UR                  SUS    S35        S S S 5        g ! , (       d  f       g = f)Nr   ar   r   u   
## Correlación Detectada - z%Y-W%W
z**Pattern:** patternz**Confidence:** 
confidencez%
z**Action:** r.   )r   writer   nowstrftime)r   new_patternr!   s      r   update_correlations"DecisionEngine.update_correlationsJ   s    )3AQGG4X\\^5L5LX5V4WWYZ[GGmK	$:#;2>?GG&{<'@&AEFGGl;x#8"9<=	 BAAs   B B
B#)r   r   r
   rk   )__name__
__module____qualname____firstlineno__r   r	   r7   r0   r1   rU   rQ   r   __static_attributes__rl   r   r   r   r      s,    H
@)>r   r   )__doc__r   r   r   r   rl   r   r   <module>r      s    F 	  H> H>r   