
    U5jc                       S r SSKJr  SSKrSSKJrJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJrJrJrJrJrJr  SSKJrJr  \R<                  " S\R>                  5      r Sr!S*S jr"S+S jr#S,S jr$S-S jr%S.S jr&S/S jr'S0S jr(S1S jr)S2S jr*S3S jr+        S4S jr,S5S jr-S6S jr.S7S jr/S8S jr0S9S jr1S:S  jr2S;S! jr3S<S" jr4        S=S# jr5S>S$ jr6S?S% jr7S@S& jr8S'S(.     SAS) jjr9g)Bz?Resuelve datos del estudiante y apoderado en BD para el agente.    )annotationsN)datedatetime)Any)Session)FamilyReportClass)ProfessionalClass)StudentClass)StudentGuardianClass)StudentProfessionalClass)CourseModelFamilyMemberModelProfessionalModelSchoolModelStudentModelStudentPersonalInfoModel)_message_intent_message_name_tokenszS(?<!\d)(?:(?:\d{1,2}[\.\s])?\d{3}[\.\s]\d{3}[\-\s][\dkK]|\d{7,8}[\-\s][\dkK])(?!\d))student_full_namestudent_identification_numberstudent_social_namestudent_born_datestudent_agestudent_coursestudent_school"professional_identification_numberprofessional_social_nameprofessional_roleprofessional_phoneprofessional_emailreport_delivery_datereceiver_full_namereceiver_identification_numberreceiver_social_namereceiver_phonereceiver_emailreceiver_relationshipc                    U (       d  g SR                  S [        U 5      R                  5       R                  5        5       5      nU=(       d    S $ )N c              3  R   #    U  H  oR                  5       (       d  M  Uv   M     g 7fN)isalnum).0cs     XC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\utils\agent_student_lookup.py	<genexpr>!_normalize_rut.<locals>.<genexpr>@   s     C3ayy{3s   '	')joinstrstriplower)rawss     r/   _normalize_rutr8   =   s:    
C3s8>>+113CCA9    c                    [        U 5      nU(       a  [        U5      S:  a  U =(       d    SR                  5       $ US S  SUS   R                  5        3$ )N   r)   -)r8   lenr4   upper)r6   ns     r/   _format_rut_displayrA   D   sM    sAA
	r  ""fXQqu{{}o&&r9   c                    [        U 5      S:X  a  gU =(       d    SR                  5       n[        [        U 5      =(       a    SU;   5      $ )uP   True si el mensaje pide informe a la familia (con o sin la palabra «familia»).familiaTr)   informe)r   r5   boolextract_rut_from_message)messagenorms     r/   is_familia_report_requestrI   K   s?    w9,Mr  "D(1Gi46GHHr9   c                    [         R                  U =(       d    S5       HR  nUR                  S5      R                  5       n[	        U5      nU(       d  M6  [        U5      S:  d  MG  [        U5      s  $    g)u1   Extrae el primer RUT chileno válido del mensaje.r)   r      N)_RUT_REfinditergroupr4   r8   r>   rA   )rG   match	candidate
normalizeds       r/   rF   rF   S   s[    !!'-R0KKN((*	#I.
:#j/Q.&y11	 1
 r9   c                Z    U (       d  gU H  nU(       d  M  [        U5      U :X  d  M    g   g)NFT)r8   )targetvaluesvals      r/   _rut_matches_storedrV   ]   s+    3>#&&0  r9   c                <   [        U 5      nU(       a  [        U5      S:  a
  [        5       $ USS nUS   nUUU SU 3U SUR                  5        3[	        U 5      1n[        U5      S:X  al  USS  SUSS  SUSS  3nUR                  U SUR                  5        35        UR                  U SUR                  5        35        UR                  U5        U Vs1 s H2  of(       d  M  UR                  5       (       d  M"  UR                  5       iM4     sn$ s  snf )u@   Variantes de texto para LIKE en BD (con/sin puntos, guión, DV).rK   Nr<   r=   r;   .   )r8   r>   setr?   rA   addr5   r4   )rutrS   bodydvtermsdottedts          r/   _rut_search_termsrb   f   s   C FS[1_u#2;D	B&"&"((*C E 4yA~!H:QtAayk48*5		VHAbhhj\*+		VHAbhhj\*+		&$8u!IaggiIAGGIu888s   
D+DDc                z    U R                  S5      =(       d    0 nU R                  S5      UR                  S5      4$ )Npersonal_dataidentification_number)get)rowpersonals     r/   _student_row_rutsri   }   s9    ww'-2H'(,- r9   c           	        [        U5      nU(       a  [        U5      S:  a  g[        U 5      n0 n[        U5       H|  nSU0SU04 Hm  nUR                  " SSSS.UD6n[        U[        5      (       a  UR                  S/ 5      O/ nU H&  n	U	R                  S	5      n
U
c  M  X[        U
5      '   M(     Mo     M~     / nUR                  5        H6  u  p[        U	5      u  p[        X,U5      (       d  M%  UR                  U
5        M8     [        U5      S:X  a  US
   $ [        U5      S:  a  [        U5      $ USS n[        U5      S:  GaZ  S
SKJn  S
SKJn  SU S3nU R%                  [&        R(                  [&        R*                  UR*                  5      R-                  U[&        R(                  UR.                  :H  5      R1                  [&        R2                  S
:H  U" [&        R*                  R5                  U5      UR*                  R5                  U5      5      5      R7                  S5      R9                  5       n/ nU H3  u  pn[        X,U5      (       d  M  UR                  [        U
5      5        M5     [        U5      S:X  a  US
   $ [        U5      S:  a  [        U5      $ [        U5      S:X  aD  [;        [=        UR                  5       5      5      u  p[        U	5      u  p[        X,U5      (       a  U
$ g)z=Busca estudiante por RUT en students y student_personal_data.rK   Nr\   re      2   )pageitems_per_pagedataidr   r<      )or_)r   %P    )r8   r>   r
   rb   get_all
isinstancedictrf   intitemsri   rV   appendmax
sqlalchemyrr   app.backend.db.modelsr   queryr   rp   re   	outerjoin
student_idfilterdeleted_status_idlikelimitallnextiter)dbr\   rS   service
candidatestermkwargsresultrowsrg   sidexactst_rutpi_rutr]   rr   r   patterndirects                      r/   find_student_id_by_rutr      s   C FS[1_2G,.J!#&DM$d+
F __I!BI&IF-7-E-E6::fb)2Dggdm?+.s3x( 
 ' E$$&*3/vv66LL '
 5zQQx
5zA~5z #2;D
4yA~"BdV1+HH22(>>
 Y(#;#F#FF V..!3 66;;GD,BBGGP U2YSU% 	( #'C"66::c#h' $( v;!!9v;?v;
:!Z--/01*3/vv66Jr9   c                    [        U5      (       d  g[        U5      nU(       a1  [        X5      nU(       d  SU S3$ [        X5      nU(       d  SU S3$ g[	        X5      nU(       d   g[        X5      nU(       d   gg)z
Si el mensaje pide informe a la familia, exige RUT y estudiante en BD.
Devuelve texto de respuesta al usuario si falta algo; None si puede continuar.
Nu0   No encontré un estudiante en PIE360 con el RUT u\   .

Verifica que el RUT esté correcto y que el estudiante esté registrado en la plataforma.u   Encontré el RUT z pero no pude cargar la ficha del estudiante en PIE360.

Revisa que el estudiante tenga datos personales completos en la plataforma.u   Para generar el Informe para la Familia necesito el RUT del estudiante (por ejemplo: 12.345.678-9) o un nombre y apellido que exista en PIE360.

Ejemplo:
«Hazme el informe a la familia de Isabella Díaz RUT 23.442.145-K»u~   Encontré un estudiante pero no pude cargar su ficha en PIE360.

Revisa que tenga datos personales completos en la plataforma.)rI   rF   r   build_student_contextfind_student_id_by_message)r   rG   r\   r   contexts        r/   check_familia_rut_requirementr      s    
 %W--
"7
+C
+B4
B3% Hl l (7#C5 )^ ^ +B8JS	
 $B3GL	
 r9   c                P    U =(       d    SR                  5       R                  5       $ Nr)   )r5   r4   )texts    r/   
_normalizer      s    JB%%''r9   c                    SR                  S U =(       d    SR                  5       U=(       d    SR                  5       U=(       d    SR                  5       4 5       5      R                  5       $ )N c              3  8   #    U  H  nU(       d  M  Uv   M     g 7fr+   ru   r-   ps     r/   r0   (_full_name_from_parts.<locals>.<genexpr>  s"      
A
  	

s   	r)   )r2   r4   )namesfather_lastnamemother_lastnames      r/   _full_name_from_partsr     sa    
 88  [b!"))+"))+
  egr9   c                   U (       d  g [        U [        5      (       a  U R                  S5      $ [        U [        5      (       a  U R                  5       R                  S5      $ [        U [        5      (       a`  U R                  5       S S nS H7  n [        R                  " X5      R                  5       R                  S5      s  $    U R                  5       $ [	        U 5      $ ! [         a     Mc  f = f)N%d/%m/%Y
   )%Y-%m-%dr   z%d-%m-%Y)rw   r   strftimer   r3   r4   strptime
ValueError)rU   r6   fmts      r/   	_fmt_dater     s    #t||J''#x  xxz"":..#siik#27C((2779BB:NN 8
 yy{s8O  s   2C##
C10C1c                x   U (       d  g  [        U [        5      (       a7  [        R                  " U R	                  5       S S S5      R                  5       nO?[        U [        5      (       a  U R                  5       nO[        U [
        5      (       a  U nOg [
        R                  " 5       nUR                  UR                  -
  nUR                  UR                  -
  nUR                  UR                  :  a  US-  nUS:  a
  US-  nUS-  nUS:  a  g U(       a  U SU S3$ U S3$ ! [        [        4 a     g f = f)	Nr   r   rk   r      u    años, z mesesu    años)rw   r3   r   r   r4   r   todayyearmonthdayr   	TypeError)	born_datebornr   yearsmonthss        r/   _calculate_ager   #  s   i%%$$Y__%6s%;ZHMMOD	8,,>>#D	4((D



TYY&tzz)99txxaKFA:QJEbLF19WHVHF33	" s%   B
D& A<D& D& !D& &D98D9c           	        ^ U R                  S5      =(       d    0 n[        [        UR                  S5      UR                  S5      UR                  S5      5      5      m[        U4S jU 5       5      $ )Nrd   r   r   r   c              3  6   >#    U  H  oT;   d  M
  S v   M     g7f)rk   Nru   )r-   tokenhaystacks     r/   r0   &_student_name_score.<locals>.<genexpr>I  s     :fU(9qqfs   		)rf   r   r   sum)studenttokensrh   r   s      @r/   _student_name_scorer   @  sa    {{?+1rHLL!LL*+LL*+	
H :f:::r9   c           
       ^ [        U5      m[        T5      S:  a  g [        U 5      n0 nTS S  Hi  nUR                  SSUS9n[	        U[
        5      (       a  UR                  S/ 5      O/ nU H&  nUR                  S5      nUc  M  Xs[        U5      '   M(     Mk     T GH  n[        U5      S:  a  M  U R                  [        R                  5      R                  [        [        R                  [        R                  :H  5      R                  [        R                  S:H  [        R                   R#                  S	U S	35      [        R$                  R#                  S	U S	35      -  [        R&                  R#                  S	U S	35      -  5      R)                  S5      n	U	R+                  5        Hm  u  nX;  d  M  [        U 5      R                  [        U5      5      n
[	        U
[
        5      (       a  U
R                  S
5      OS nU(       d  M`  X[        U5      '   Mo     GM     U(       d  g [-        UR/                  5       U4S jS9u  p[1        UT5      S:  a  g U$ )Nr;      rk   (   )rm   rn   r   ro   rp   r   rs   student_datac                ,   > [        U S   T5      U S   4$ )Nrk   r   )r   )itemr   s    r/   <lambda>,find_student_id_by_message.<locals>.<lambda>|  s    -d1gv>QHr9   )key)r   r>   r
   rv   rw   rx   rf   ry   r   r   rp   r2   r   r   r   r   r   iliker   r   r   r   r|   rz   r   )r   rG   student_servicer   r   r   r   rg   r   qdetailsdbest_idbest_rowr   s                 @r/   r   r   L  s	   !'*F
6{Q"2&O,.J ((a%(P)3FD)A)Avzz&"%rC''$-C'*3s8$   u:>HH\__%T(#;#F#FF V..!3,<<BBQugQ<P.>>DDqq\RS.44::QugQ<HI U2Y 	
  eegFS$%b)--c#h73=fd3K3KVZZ/QU2+-s3x( ' 4 HG 8V,q0Nr9   c                   [        U 5      R                  SUS9n[        U[        5      (       a*  U Vs/ s H  n[        U[        5      (       d  M  UPM     sn$ [        U[        5      (       aP  UR                  S5      n[        U[        5      (       a*  U Vs/ s H  n[        U[        5      (       d  M  UPM     sn$ / $ s  snf s  snf )Nr   )rm   r   ro   )r   rv   rw   listrx   rf   )r   r   r   rro   s        r/   _guardian_rowsr     s    !"%--1-LF&$!96aZ4%8699&$zz&!dD!!#;t!z!T':At;;I : <s   C C C5Cc                   U(       d  g U R                  [        5      R                  [        R                  U:H  5      R	                  5       nU(       a4  UR
                  (       a#  [        UR
                  5      R                  5       $ g r+   )r   r   r   rp   firstfamily_memberr3   r4   )r   family_member_idrg   s      r/   _family_member_labelr     sb    
"#	!$$(88	9	 
 s  3$$%++--r9   c                   U(       d  g U R                  [        5      R                  [        R                  U:H  5      R	                  5       nU(       a4  UR
                  (       a#  [        UR
                  5      R                  5       $ g r+   )r   r   r   rp   r   course_namer3   r4   )r   	course_idrg   s      r/   _course_labelr     W    
((;

&
&{~~'B
C
I
I
KC
s3??#))++r9   c                   U(       d  g U R                  [        5      R                  [        R                  U:H  5      R	                  5       nU(       a4  UR
                  (       a#  [        UR
                  5      R                  5       $ g r+   )r   r   r   rp   r   school_namer3   r4   )r   	school_idrg   s      r/   _school_labelr     r   r9   c                   [        U 5      R                  US9R                  S5      =(       d    / nU(       d  0 $ US   R                  S5      nU(       d  0 $ U R                  [        5      R	                  [        R
                  U:H  5      R                  5       nU(       a  UR                  (       d  0 $ [        U 5      R                  UR                  US9n[        U[        5      (       a  UR                  S5      OS nU(       d  0 $ SR                  S UR                  S	5      UR                  S
5      4 5       5      R                  5       nS n	[        U 5      R                  SSUUR                  S9n
[        U
[        5      (       a5  U
R                  S5      =(       d    / nU(       a  US   R                  S5      n	UR                  S5      UR                  S5      U=(       d    S U	UR                  S5      UR                  S5      S.$ )N)r   ro   r   professional_id)r   professional_datar   c              3  d   #    U  H&  o=(       d    S R                  5       (       d  M"  Uv   M(     g7f)r)   N)r4   r   s     r/   r0   ,_professional_for_student.<locals>.<genexpr>  s!      =a'rAR=s   !0	0r   	lastnamesrk   )rm   rn   r   only_professional_idrol_namerp   re   phoneemail)r   r   r   r   r   r    )r   rf   r   r   r   rp   r   user_idr	   rw   rx   r2   r4   rv   )r   r   r   links
profile_idprofileprofro   	full_namer   listedr   s               r/   _professional_for_studentr     s   
 %R(,,
,CGGOUSUE	q/0J	
"#	!$$
2	3	 
 '//	R $$W__	$JD,6tT,B,B488'(D	 HHW%txx'<= eg  Hr"**$__	 + F &$zz&!'RAw{{:.H88D>.2hh7N.O$-$5%"hhw/"hhw/ r9   c                   [        U 5      R                  U5      n[        U[        5      (       a  UR                  S5      OS nU(       d  g UR                  S5      =(       d    0 nUR                  S5      =(       d    0 nUR                  S5      nUR                  S5      nU[	        UR                  S5      UR                  S5      UR                  S5      5      UR                  S	5      =(       d    UR                  S	5      UR                  S
5      [        UR                  S5      5      [        UR                  S5      5      [        X5      [        X5      [        R                  " 5       R                  S5      S.	n[        X5      n	U	(       dM  [        U 5      R                  U5      n
[        U
[        5      (       a  U
R                  S5      S:w  a	  SU
;  a  U
/n	U	(       a  U	S   n[	        UR                  S5      UR                  S5      UR                  S5      5      nUR                  U=(       d    S UR                  S	5      UR                  S
5      UR                  S5      UR                  S5      [        XR                  S5      5      S.5        UR                  [!        XU5      5        [#        U 5      R%                  U5      n[        U[        5      (       ao  UR                  S5      S:w  aZ  1 SknUR'                  5        HB  u  nnX;   d  US;   a  M  UR)                  S5      (       d  SU;   a  [        U5      X'   M>  UX'   MD     UR                  S5      (       d  SSKJnJn  U R1                  UR2                  5      R5                  UR6                  U:H  5      R9                  5       nU(       a  US   (       a	  US   US'   O^U R1                  UR2                  5      R5                  UR:                  U:H  5      R9                  5       nU(       a  US   (       a  US   US'   [=        U5        UR'                  5        VVs0 s H  u  nnUS;  d  M  UU_M     snn$ s  snnf )Nr   rd   academic_infor   r   r   r   r   re   social_namer   r   )	r   r   r   r   r   r   r   r   r!   statuserrorr   celphoner   r   )r"   r#   r$   r%   r&   r'   >   rp   r   version
added_dater   updated_datedocument_type_idr   _dater   )r   r   )r
   rf   rw   rx   r   r   r   r   r   r   r   r   r   r   updater   r   r   get_by_student_idrz   endswithr~   r   r   r   re   r   rp   r   r   (_mirror_identification_tags_for_template)r   r   r6   r   rh   academicr   r   ctx	guardianssingleguardianreceiver_namefr_fr_skipr   valuer   r   student_rowpersonal_rowkvs                          r/   r   r     s   
r


z
*C)3C)>)>cggn%DG{{?+1rH{{?+1rHK(I[)I !2LL!LL*+LL*+
 LL01 4{{23'||M:&x||K'@A%hll;&?@'6'6 $

 5 5j A!C& r.I%b)--j9fd##

8(<(GG[aLaIQ<-LL!LL*+LL*+

 	

&3&;t2:,,?V2W(0](C"*,,z":"*,,w"7)=%78*		
 JJ(CD	2		0	0	<B"dx 0G ;
 ((*JC%:"5||G$$s(:$U+  % 77233P HH\778VLOOz12UW 	
 ;q>3>q>C/0 1GGH0;;zIJ 
 Q7CA34,S1 YY[@[TQAZ,?DAqD[@@@s   Q'Q'c                   U R                  S5      (       a  U R                  S5      (       d  U S   U S'   U R                  S5      (       a  U R                  S5      (       d  U S   U S'   U R                  S5      (       a  U R                  S5      (       d  U S   U S'   U R                  S5      (       a  U R                  S5      (       d  U S   U S'   [        U R                  S	5      =(       d    S
5      R                  5       n[        U R                  S5      =(       d    S
5      R                  5       nU(       d  U(       a/  U R                  S5      (       d  U SU 3R                  S5      U S'   U R                  S5      (       a  U R                  S5      (       d  U S   U S'   U R                  S5      (       a  U R                  S5      (       d  U S   U S'   U R                  S5      (       a  U R                  S5      (       d  U S   U S'   U R                  S5      (       a   U R                  S5      (       d	  U S   U S'   ggg)zFExpone claves con el mismo nombre que los w:tag de family_report.docx.r   student_birth_dater   professional_full_namer   professional_job_positionr!   "professional_delivered_date_informr   r)   r    professional_phone_emailz / r"   person_full_namer#   person_identification_numberr'   person_relation_studentreceiver_presence_ofperson_presenceN)rf   r3   r4   )r  phems      r/   r
  r
  ?  s   
ww"##CGG4H,I,I$'(;$< !
ww)**377;S3T3T(+,F(G$%
ww"##CGG4O,P,P+./B+C'(
ww%&&sww7[/\/\478N4O01	SWW)*0b	1	7	7	9B	SWW)*0b	1	7	7	9B
b#''"<==-/DB4.*>*>u*E&'
ww#$$SWW5G-H-H"%&:";
ww/00A_9`9`.12R.S*+
ww&''8Q0R0R),-D)E%&
ww%&&sww7H/I/I!$%;!< 0J&r9   c                    [        U5      (       d  gSn[        U5      nU(       a  [        X5      nU(       d  [        X5      nU(       d  g[	        X5      $ )zUBusca estudiante por RUT o nombre en el mensaje y arma datos para el informe familia.N)rI   rF   r   r   r   )r   rG   r   r\   s       r/   !resolve_student_context_for_agentr&  W  sJ    $W--!J
"7
+C
+B4
/<
 00r9   F)narrative_onlyc               l   U(       a  SSSSU R                  S5       3/nSSSS	S
SSSSSSSSSSS.nSnUR                  5        HR  u  pVU R                  U5      nU(       a  UR                  SU SU 35        M6  XT;   d  M=  UR                  SU S35        MT     UR                  S5        SR                  U5      $ SSSU R                  S5       3/n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_SSSS.EnSnS.n	UR                  5        Hn  u  pVU R                  U5      nU(       a  UR                  SU SU 35        M6  XT;   a  UR                  SU S35        MR  XY;   d  MY  UR                  SU S/35        Mp     UR                  S05        SR                  U5      $ )1NzL=== DATOS DEL ESTUDIANTE EN BASE DE DATOS (SOLO PARA REDACTAR NARRATIVA) ===u   La IDENTIFICACIÓN superior del .docx (tablas 1 y 2) ya está rellena por PIE360. PROHIBIDO volver a escribir nombre, RUT, curso, establecimiento, profesional o apoderado.u   Usa estos datos únicamente como referencia al redactar la parte inferior (instrumentos aplicados, diagnóstico, fortalezas, acuerdos, etc.).zstudent_id: r   zdiagnosis (narrativa)applied_instrumentsevaluation_reasonpedagogical_strengthspedagogical_support_needssocial_affective_strengthssocial_affective_support_needshealth_strengthshealth_support_needscollaborative_workhome_based_descriptionschool_family_agreementsevaluation_date_1evaluation_date_2evaluation_date_3)	diagnosisr)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  )r4  r5  r6  z- z: uE   : (sin dato en BD — dejar celda de fecha vacía; NO inventar texto)u   - No uses student_full_name ni RUT para sobrescribir celdas de identificación; solo para mencionar al estudiante en párrafos narrativos si el rol lo requiere.
zX=== DATOS DEL ESTUDIANTE EN BASE DE DATOS (OBLIGATORIO USAR ANTES DE ARMAR EL .DOCX) ===u   Consulta autoritativa de PIE360. Usa estos valores para rellenar identificación del estudiante, profesional y apoderado/receptor. No inventes RUT, nombres, relación ni fechas.r   r   r  r   r   r   r  r   r  r  r  r  r  r   r"  r7  )r   r  r  r   u0   : (sin dato en BD — escribir «No informado»)u   - Identificación: rellena SOLO los content controls con esos w:tag exactos. No uses otros nombres ni muevas datos entre campos.)rf   rz   r{   r2   )
r   r'  linesnarrative_keys	date_keysr   tagrU   labelsid_missing_keyss
             r/   format_student_context_blockr?  f  s   
 ZhR7;;|456
 1#8!4%<)D*F.N 2$:"6&>(B!4!4!4
" T	&,,.HC++c"Cr#b./!bc / 	_	
 yy 	c	[
w{{<012	E0')H 	2 	}	
 	* 	* 	!": 	-.R 	$%@ 	#$> 	-.R 	. 	'(F 	"#< 	,  	,!" 	4#$ 100)F, PIO LLNkk#LL2cU"SE*+LLSE^_ #LL2cU"RST # 
LL	> 99Ur9   )r6   
str | Nonereturnr@  )r6   r3   rA  r3   )rG   r3   rA  rE   )rG   r3   rA  r@  )rS   r3   rT   r@  rA  rE   )r\   r3   rA  zset[str])rg   dict[str, Any]rA  ztuple[str | None, str | None])r   r   r\   r3   rA  
int | None)r   r   rG   r3   rA  r@  )r   r3   rA  r3   )r   r@  r   r@  r   r@  rA  r3   )rU   r   rA  r@  )r   r   rA  r@  )r   rB  r   z	list[str]rA  ry   )r   r   rG   r3   rA  rC  )r   r   r   ry   rA  zlist[dict[str, Any]])r   r   r   rC  rA  r@  )r   r   r   rC  rA  r@  )r   r   r   rC  rA  r@  )r   r   r   ry   r   rC  rA  rB  )r   r   r   ry   rA  dict[str, Any] | None)r  rB  rA  None)r   r   rG   r3   rA  rD  )r   rB  r'  rE   rA  r3   ):__doc__
__future__r   rer   r   typingr   sqlalchemy.ormr   'app.backend.classes.family_report_classr   &app.backend.classes.professional_classr	   !app.backend.classes.student_classr
   *app.backend.classes.student_guardian_classr   .app.backend.classes.student_professional_classr   r~   r   r   r   r   r   r   &app.backend.utils.agent_file_selectionr   r   compile
IGNORECASErL   _IDENTIFICATION_KEYSr8   rA   rI   rF   rV   rb   ri   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r&  r?  ru   r9   r/   <module>rT     sH   E " 	 #  " E D : K S  Y
** MM	 .'I9.K\'T(   		 $:	;4n
+++ + 	+\aAH=01$ !`` ` 		`r9   