
    K{j(                    ,   % S r SSKJr  SSKrSSKrSSKJrJr  SSKJr  Sr	0 SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_0 SS_SS_S S_S!S_S"S_S#S$_S%S$_S&S'_S(S'_S)S*_S+S*_S,S*_S-S*_S.S*_S/S0_S1S0_S2S3_E0 S4S5_S6S7_S8S9_S:S;_S<S=_S>S?_S@SA_SBSC_SDSE_SFSG_SHSI_SJSK_SLSM_SNSO_SPSQ_SRSS_Er
ST\SU'   1 SVkrSoSW jrS'S*SSSX.rST\SY'   SZrS[S\S]S^S_S`SaSbScScSdSeSfSg.rSpSh jrSqSi jrSrSj jrSsSk jrStSl jrSuSm jr Sv     SwSn jjrg)xuG   Normaliza fields del LLM → tags de la plantilla Word doc 27 (agente).    )annotationsN)datedatetime)Any   nombre_identidad_estudiantestudent_full_namenombre_de_identidad_estudiantenombre_identidad_del_estudiantenombre_completo_estudiante!nombre_y_apellidos_del_estudiantesocial_namestudent_social_namenombre_social_del_estudiantenombre_social_estudiantenombre_socialfecha_de_nacimiento	birth_dayfecha_nacimientoagestudent_ageedadedad_del_estudianteestablecimiento_educacionalstudent_schoolestablecimientonombre_establecimientocolegiocurso_nivelstudent_coursecurso_o_nivelcursonivelfecha_de_evaluacionevaluation_datefecha_evaluaciondiagnostico
diagnostic	diagnosisdiagnosis_issue_date
issue_datefecha_de_emision_de_diagnosticofecha_emision_diagnosticofecha_emision_del_diagnosticofecha_emision_de_diagnosticoanalisis_cognitivocognitive_analysisanalisis_cognitivo_comunicativo analisis_personal_socioemocionalpersonal_analysis"analisis_motor_autonomia_sensorialmotor_analysissintesis_cognitivacognitive_synthesissintesis_personalpersonal_synthesissintesis_motoramotor_synthesissugerencias_al_establecimientosuggestions_to_schoolsugerencias_al_equipo_de_aulasuggestions_to_classroom_teamsugerencias_al_estudiantesuggestions_to_studentsugerencias_a_la_familiasuggestions_to_familyotras_sugerenciasother_suggestionsconclusion_informe
conclusioninstrumentos_aplicadosinstruments_appliedantecedentes_historia_escolarschool_history_backgroundnombre_profesionalprofessional_full_namerut_profesional"professional_identification_numberregistro_profesional professional_registration_numberespecialidad_profesionalprofessional_specialtydict[str, str]!PSYCHOPED_CONTENT_CONTROL_ALIASES>
   rF   rE   rD   r>   rB   rC   rA   r?   r@   r=   c                P   U =(       d    SR                  5       nU(       d  U$ [        R                  " SSU5      n[        R                  " SSU5      n[        R                  " SSU5      nUR                  S5       Vs/ s H*  n[        R                  " SSU5      R                  S5      PM,     nnU Vs/ s H  o3(       d  M  UPM     nn[	        U5      S	::  a  [        R
                  " S
U5      (       a}  [        R                  " SU5       Vs/ s HA  nUR                  5       (       d  M  [        R                  " SSU5      R                  S5      PMC     nnU Vs/ s H  o3(       d  M  UPM     nnU(       d  U$ SR                  S U 5       5      $ s  snf s  snf s  snf s  snf )uA   Convierte recomendaciones a lista con '- ' (un ítem por línea). z\r\n?
u*   (?m)^\s*(?:\d+\s*[.)\-]+|[-•*–—])\s*z#(?:\n\s*)?(?<!\d)(\d+)\s*[.)\-]+\s+z\s+ u    	-•*–—   z
[.!?]\s+\Sz(?<=[.!?])\s+c              3  J   #    U  H  nS UR                  S5       3v   M     g7f)z- .N)rstrip).0items     YC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\utils\agents_psychoped_fill.py	<genexpr>/format_suggestions_as_dashes.<locals>.<genexpr>f   s!     ?r$++c*+,s   !#)stripresubsplitlensearchjoin)textrawchunkppartsitemsss          ra   format_suggestions_as_dashesrr   S   sX   :2


C
FF8T3'EFF@$NEFF94GEEJ[[QUEVWEVRVVFC#))*:;EVEW#1QE#
5zQ299]C88 XX.4
4wwy ;BFF63"(()9:4 	 

 "'EqQE'
99???? X#

 (s*   >1F5
FFF,+F
F#+F#)r)   r*   r   r   _FORM_TO_TEMPLATE)r   fechar   bornr[                        	   
         )enerofebreromarzoabrilmayojuniojulioagosto
septiembre	setiembreoctubre	noviembre	diciembrec                L   ^ [        U 5      m[        U4S j[         5       5      $ )Nc              3  ,   >#    U  H	  oT;   v   M     g 7fN )r_   hks     ra   rb   %_is_date_field_key.<locals>.<genexpr>   s     /!Avs   )_normalize_keyany_DATE_KEY_HINTS)keyr   s    @ra   _is_date_field_keyr      s    sA////    c           	     @   U =(       d    SR                  5       nU(       d  U$ [        R                  " SU5      (       a  U$ SnS H,  n [        R                  " USS U5      R                  5       n  O   Uc  [        R                  " SUR                  5       5      nU(       ai  [        R                  UR                  S5      5      nU(       a>   [        [        UR                  S5      5      U[        UR                  S	5      5      5      nUc  [        R                  " S
U5      nU(       a  [        UR                  S	5      5      [        UR                  S5      5      [        UR                  S5      5      pnUS:  a   [        XU5      nO!US:  a   [        XU5      nO [        XU5      nUc  U$ UR                  S5      $ ! [         a     GM  f = f! [         a    Sn Nf = f! [         a    Sn NHf = f! [         a    Sn NZf = f! [         a    Sn Nlf = f)u;   Normaliza fechas del informe psicopedagógico a dd-mm-YYYY.rX   z\d{2}-\d{2}-\d{4}N)z%Y-%m-%dz%d/%m/%Y%d-%m-%Yz%Y/%m/%dz%d.%m.%Yr~   u9   (\d{1,2})\s+de\s+([a-záéíóú]+)\s*(?:de|,)?\s*(\d{4})rv   rw   r[   z%\b(\d{1,2})[/-](\d{1,2})[/-](\d{4})\br   r   )rd   re   	fullmatchr   strptimer   
ValueErrorri   lower
_MONTHS_ESgetgroupintstrftime)	valuerl   parsedfmtmmonthdmoys	            ra   format_psychoped_dater      s   ;B


C
	||(#..
FK	&&s3Bx5::<F L ~IIHIIK
 NN1771:.E"!#aggaj/5#aggaj/JF ~II>D1771:AGGAJQWWQZ1A2v"!!^F b"!!^F"!!^F ~
??:&&I  		 " "!F" " "!F"
 " "!F"
 " "!F"sZ   	(G=G G* G< $H 
GGG'&G'*G98G9<H
HHHc                ,   U =(       d    SR                  5       R                  5       n[        R                  " SU5      nSR	                  S U 5       5      n[
        R                  " SSU5      n[
        R                  " SSU5      R                  S5      $ )NrX   NFKDc              3  ^   #    U  H#  n[         R                  " U5      S :w  d  M  Uv   M%     g7f)MnN)unicodedatacategory)r_   cs     ra   rb   !_normalize_key.<locals>.<genexpr>   s$     @1a 4 4Q 74 ?1s   -	-z
[^a-z0-9]+_z_+)rd   r   r   	normalizerj   re   rf   )r   ts     ra   r   r      ss    	!!#Afa(A
@1@@A
}c1%A66%a &&s++r   c                    U =(       d    SR                  5       R                  5       nUS;   a  gUS;   a  gUS;   a  gUS;   a  g	g )
NrX   )1r[   )2rv   )3rw   )zN/ONOzN-ON_Orx   )rd   upper)vus     ra   _scale_value_to_colr      sH    	
b!AF{F{F{''r   c                  ^  [        U 4S jS 5       5      (       a  gU=(       d    SR                  5       R                  5       nT R                  S5      =(       d    SR                  5       nUS;   a  ST S'   gUS	;   a  ST S
'   gUS;   a  U=(       d    ST S'   gU(       a+  UR                  5       (       a  UR                  5       OST S'   gg)u>   admission_type del form → admission_type_1|2|3 en plantilla.c              3  L   >#    U  H  nTR                  S U 35      v   M     g7f)admission_type_N)r   )r_   imergeds     ra   rb   (_apply_admission_type.<locals>.<genexpr>   s$     
@i6::s+,,is   !$)r[   rv   rw   NrX   admission_type_other)ingresoingreso_pienuevoXadmission_type_1)reevaluacionu   reevaluaciónre_evaluacionadmission_type_2)otrootraotrosadmission_type_3)r   rd   r   r   )r   rl   valothers   `   ra   _apply_admission_typer      s    

@i
@@@9"



#
#
%CZZ./52<<>E
11%(!"	B	B%(!"	)	)%*\c!"	47IIKKSYY[S!" 
r   c                D   [        S U  5       5      (       a  g[        SS5       H  nUR                  SU 35      =(       d    U R                  SU 35      nU(       a@  [        [	        U5      5      nU(       a%  [        SS5       H  nXT:X  a  SOSU S	U S
U 3'   M     UR                  SU 35      =(       d    U R                  SU 35      nU(       d  M  [        [	        U5      5      nU(       d  M  US-   n[        SS5       H  nXT:X  a  SOSU S	U S
U 3'   M     M     g)uE   pedagogical_scale_N / social_communicative_scale_N → scale_row_col.c              3  B   #    U  H  oR                  S 5      v   M     g7f)scale_N)
startswith)r_   r   s     ra   rb   %_apply_form_scales.<locals>.<genexpr>   s     
26a<<!!6s   Nr[   r   pedagogical_scale_ry   r   rX   r   r   social_communicative_scale_r~   )r   ranger   r   str)r   sourcenpedcolr   socrows           ra   _apply_form_scalesr      s   

26
2221b\jj-aS12ZfjjCUVWUXAY6Z%c#h/Cq!A67hsBFVA3as+, %jj6qc:; 
vzz)!-@
 3%c#h/Cs"fq!A89bFVC5!-. % r   c                   0 n0 nU =(       d    0 R                  5        H  u  pEUc  M
  [        U5      R                  5       nU(       d  M,  [        U5      R                  5       nU(       d  MN  [        U5      (       a  [	        U5      nXcU'   XbU'   [        U5      n[        R                  U5      n	U	(       a	  X;  a  XbU	'   [        R                  U5      =(       d    [        R                  U5      n
U
(       d  M  X;  d  M  XbU
'   M     UR                  S5      =(       d    UR                  S5      =(       d    SnU(       a  [        X+5        [        X#5        U=(       d    0 nUR                  S5      =(       d    SR                  5       nU(       a  UR                  SU5        [        UR                  5       5       H|  u  pF[        U5      (       a  [	        [        U5      5      X$'   M-  [        U5      [         Vs1 s H  n[        U5      iM     sn;   d  U[        ;   d  Mf  [        [        U5      5      X$'   M~     U$ s  snf )z
Une campos del LLM con aliases hacia tags de la plantilla doc 27.
No borra claves originales (por si la plantilla usa nombres del form).
admission_typerX   student_fullnamer	   )rp   r   rd   r   r   r   rV   r   rs   r   r   
setdefaultlist_SUGGESTION_KEYSrr   )
llm_fieldsstudent_ctxr   rl   r   r   rk   r   nkcanonform_map	admissionctx	full_names                 ra    normalize_psychoped_replacementsr      s     FC!'R..0
=5z!HNNa  (.DAq	A155b9U( 5M$((,H0A0E0Ea0H8.#8' 1* ()OVZZ8H-IORIf0v#

C+,299;I-y9&,,.)	c""/D	:FKC @P$Q@P1^A%6@P$QQUX\lUl6s4yAFK	 * M %Rs   ;H>)rk   r   returnr   )r   r   r   bool)r   r   r   r   )r   r   r   r   )r   r   r   z
int | None)r   rU   rl   r   r   None)r   rU   r   rU   r   r   r   )r   zdict[str, Any]r   zdict[str, Any] | Noner   rU   )__doc__
__future__r   re   r   r   r   typingr   PSYCHOPED_DOCUMENT_IDrV   __annotations__r   rr   rs   r   r   r   r   r   r   r   r   r   r   r   ra   <module>r     sy   M " 	  #  65!#665 %&965 &':	65
 !"565 ()<65 (65 #$965  565 *65 ;65 65 
=65 M65 =65  "#3!65" '#65$ .%65& '65( #)65* %+65, -65. /650 ,1652 )3656 <7658 965: L;65< &|=65>  ?65@ $\A65B #LC65F .G65H &';I65J '(;K65L )*:M65N /O65P -Q65R (S65T %&=U65V $%DW65X  !9Y65Z  7[65\ ,]65^ ,_65` 3a65b $%@c65d 2e65f ;g65h >i65j  8k65 !> 6p @0 ((	% >  
"0
1'h,
I"I0 *.11&1 1r   