
    Y5j7                       % S r SSKJr  SSKrSSKrSSKJr  SSKJr  SSK	J
r
  \R                  " \5      rSr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&S'_S(S)_S*S_S+S,S-.ErS.\S/'   \" 1 S0k5      rS=S1 jrS>S2 jrS?S3 jr          S@S4 jrSAS5 jrSBS6 jr          SCS7 jr          SDS8 jr        SES9 jr SF     SGS: jjrSHS; jrSHS< jrg)IzURelleno de campos legacy FORMTEXT (cuadros grises) en family_report.docx ministerial.    )annotationsN)deepcopy)Path)Any))      r   student_full_name)r   r   r   student_identification_number)r      r   student_birth_date)   r   r   professional_full_name)r   r      "professional_identification_number)r   r   r   professional_job_position)r   
   r   person_full_name)r   r   r   person_identification_number)r      r   person_phone)r      r   person_email)r   r   r   applied_instruments)r   r   r   
diagnostic)r      r   pedagogical_strengths)r   r   r   pedagogical_support_needs)r   r   r   social_affective_strengths)r   r   r   social_affective_support_needs)r   r   r   collaborative_work)r   r   r   home_based_description)r      r   school_family_agreements)r      r   evaluation_date_1)r   r$   r   evaluation_date_2)r   r$   r   evaluation_date_3)r   r$      evaluation_date_4)r   r$      evaluation_date_5)r   r$   r   evaluation_date_6)r   r$   	   evaluation_date_7)r   r$   r   evaluation_date_8z%tuple[tuple[int, int, int, str], ...]FAMILIA_FORMTEXT_SLOTSr   )student_born_dater   )professional_social_namer   )professional_roler   )receiver_full_namer   )receiver_identification_numberr   )receiver_phoner   )receiver_emailr   )	diagnosisr   )evaluation_reasonr   )strengths_1r   )support_needs_1r   )strengths_2r   )support_needs_2r!   )home_supportr#   )agreements_commitmentsstudent_social_name)r@   r2   )professional_email)receiver_social_nameperson_social_name)rA   rB   zdict[str, tuple[str, ...]]_KEY_ALIASES>	   r   r    r   r   r!   r#   r   r   r   c                ,    SSK Jn  SSKJn  U" [	        U 5      5      nSnUR
                  R                  R                  U" S5      5       H5  nUR                  (       d  M  SUR                  ;   d  M(  US-  nUS:  d  M5    g   g	! [         a     g	f = f)
z;True si el .docx usa campos Word FORMTEXT (cuadros grises).r   Documentqnw:instrTextFORMTEXTr   r   TF)
docxrG   docx.oxml.nsrI   strelementbodyitertext	Exception)pathrG   rI   doccountinstrs         ZC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\utils\agent_familia_formtext.pydocx_has_legacy_formtextrY   Q   s    !#s4y![[%%**2m+<=EzzzjEJJ6
A:	 >
  s*   AB "B 4	B B B 
BBc                    U R                  U" S5      5       H(  nUR                  (       d  M  SUR                  ;   d  M(    g   g)NrJ   rK   TF)rQ   rR   )p_elrI   rW   s      rX   _paragraph_has_formtextr\   c   s6    2m,-:::*

2 .     c                    U /[         R                  U S5      Q7 HD  nUR                  U5      nUc  M  [        U5      R                  5       (       d  M9  [        U5      s  $    g)N  )rD   getrN   strip)keyreplacements	candidatevals       rX   _resolve_replacementrg   j   sT    6L,,S"56	y)?s3x~~//s8O 7 r]   c                T   [        U 5      nS=pV[        U5       Hi  u  pxUR                  U" S5      :w  a  M  UR                  U" S5      5      n	U	c  M9  U	R	                  U" S5      5      n
U
S:X  a  UnMZ  U
S:X  d  Mb  Uc  Mg  Un  O   Ub  Uc  gXES-   U  Vs/ s H  oR                  U" S5      :X  d  M  UPM     nnU=(       d    S	nSnU(       aB  US
   R                  U" S5      5      nUb  [        U5      nU H  nU R                  U5        M     U" S5      nUb  UR                  U5        U" S5      nUUl        UR                  S5      (       d  UR                  S5      (       a  UR                  U" S5      S5        UR                  U5        U R                  UU5        gs  snf )z;Escribe valor en la zona de resultado de un campo FORMTEXT.Nw:r	w:fldCharw:fldCharTypeseparateendFr   r`   r   zw:rPrw:t z	xml:spacepreserveT)list	enumeratetagfindra   r   removeappendrR   
startswithendswithsetinsert)r[   valuerI   OxmlElementchildrenseparate_idxend_idxidxchildfldftypecresult_runsrR   ref_r_prrprrunnew_runwts                      rX   _set_formtext_paragraph_valuer   r   s    DzH!!L)
995	!jjK);?+,JLe^ 8G * w&a'7'BYBeerRWyFX1BKY;BDH!n!!"W+.?}HCKK  % Gx 	U	BBGst}}S11
r+
+NN2KK!) Zs   F%4F%c                
   U R                   R                  R                  U" S5      5      nU[        U5      :  a  gXQ   R                  U" S5      5      nU[        U5      :  a  gSnXb   R                  U" S5      5       H  nUR	                  U" S5      S-   U" S5      -   5      n	U	c  UR	                  S	U" S5      -   5      n	U	b   [        U	R                  U" S
5      5      5      OSn
Xss=::  a  Xz-   :  a   Us  $   Xz-  nM     g)uD   Obtiene w:tc por columna de cuadrícula (respeta celdas fusionadas).w:tblNw:trr   w:tczw:tcPr/z
w:gridSpanz.//zw:valr   )rO   rP   findalllenrt   intra   )rU   	table_idxrow_idxcol_idxrI   tblsrowsgrid_coltc_elspan_elspans              rX   _get_cell_elementr      s    ;;##BwK0DCI?""2f:.D#d)H&&r&z2**R\C/"\2BBC?jjL)9!9:G070Cs7;;r'{+,00L 1 3 r]   c              #  P   #    U R                  U" S5      5       H  nUv   M	     g 7f)Nzw:p)r   )r   rI   r[   s      rX   _iter_cell_paragraphsr      s!     bi(
 )s   $&c                    Sn[        X5       H-  n[        XR5      (       d  M  [        XQX#5      (       d  M(  US-  nM/     U$ Nr   r   )r   r\   r   )r   r{   rI   r|   filledr[   s         rX   _fill_cell_formtext_elementr      s@     F%e0"4,,,T"JJ! 1 Mr]   c                    SnU R                    HC  n[        UR                  U5      (       d  M   [        UR                  XU5      (       d  M>  US-  nME     U$ r   )
paragraphsr\   _elementr   )cellr{   rI   r|   r   paras         rX   _fill_cell_formtextr      sK     F"4=="55,T]]E{SS!   Mr]   c                   SSK Jn  SSKJn  SSKJn  [        U 5      n [        U5      nU R                  5       UR                  5       :w  a  SSKnUR                  X5        U" [        U5      5      n[        UR                  R                  R                  U" S5      5      5      nUS:  a  SS	S
.$ [        5       n	/ n
[          Ho  u  ppXU4nX;   a  M  U	R#                  U5        [%        X{XU5      nUc  M4  ['        X5      nU(       d  MH  [)        UUXT5      nU(       d  M^  U
R+                  U5        Mq     UR-                  [        U5      5        [.        R1                  S[        U
5      UR2                  5        SU
S.$ )uI   Rellena family_report.docx ministerial (FORMTEXT por posición en tabla).r   rF   r|   rH   Nr   r   errorz&Plantilla familia sin tablas esperadas)statusmessagez,FORMTEXT familia: %d campos rellenados en %ssuccess)r   filled_keys)rL   rG   	docx.oxmlr|   rM   rI   r   resolveshutilcopy2rN   r   rO   rP   r   ry   r0   addr   rg   r   rv   saveloggerinfoname)template_pathrd   output_pathrG   r|   rI   r   rU   	tbl_count
seen_slotsr   r   r   r   rc   slotr   r{   rV   s                      rX   fill_familia_formtext_fieldsr      sL    %'M{#K+"5"5"77]0
3{#
$CCKK$$,,R[9:I1}!.VWW,/EJK,B(	GG,t!#'BG=$S7+E5"J5s#! -C$ HHS
KK>K@PR]RbRbc<<r]   c                   SSK Jn  SSKJn  SSKJn  SSKJn  U" [        U 5      5      n[        UR                  5      S:  d&  [        UR                  S   R                  5      S:  a  g	U" U5      u  pxSSKJn  U(       a  SO
U(       a  S
OS	n	U	c  g	[        USSX5      n
U
c  g	[        X5       GH  n/ nUR                  U" S5      5       H'  nUR                  UR                   =(       d    S5        M)     SR#                  U5      R%                  5       nUR'                  S5      (       d  UR'                  S5      (       a    g	U(       a  SU 3R%                  5       OSn[)        UR                  U" S5      5      5       H)  nUR+                  5       nUc  M  UR-                  U5        M+     U Vs/ s H  nUR.                  U" S5      :X  d  M  UPM     nnU(       a@  U" S5      nXl        US   R                  U5        USS	  H  nUR-                  U5        M     O8U" S5      nU" S5      nXl        UR                  U5        UR                  U5          O   UR1                  [        U 5      5        g	s  snf )uO   Marca ingreso o reevaluación con «x» en la fila MOTIVO (plantilla FORMTEXT).r   rF   r   rH   )_evaluation_type_flagsr   r   r   Nr*   r   rn   r`   zx zx
xri   )rL   rG   r   r|   rM   rI   'app.backend.utils.agent_familia_prefillr   rN   r   tablesr   r   r   rQ   rv   rR   joinrb   rw   rq   	getparentru   rs   r   )	docx_pathstudent_contextrG   r|   rI   r   rU   is_admission	is_reevalcolr   r[   partsr   rawnew_textparentr   runsr   rs                        rX   &fix_familia_motivo_evaluacion_formtextr     s   
 %N
3y>
"C
3::c#**Q-"4"4594_EL!y!dC
{c1a1E}%e0))BuI&BLLB' 'ggen""$>>$3>>%#8#8),Ru:##%#tyyE+,B\\^F!b! -  64a155BuI#546U#BGGNN2ABxC    E"AU#BGHHRLKKN3 16 HHS^ 7s   1I5I5c                  ^^^ SSK Jn  SSKJm  SSKJm  SSKJnJnJ	m  U" [        U 5      5      nUR                  R                  R                  T" S5      5      nSUUU4S jjnU HZ  nUR                  T" S5      5       H<  nUR                  T" S	5      5       H  n	[        U	T5       H  n
U" U
5        M     M      M>     M\     UR                  [        U 5      5        g
)z3Arial 10 en textos de resultado de campos FORMTEXT.r   rF   r   rH   )FAMILIA_ANSWER_FONTFAMILIA_ANSWER_SIZE_HALF_PT_apply_arial_10_to_runr   c                  > [        U T5      (       d  g SnU  H  nUR                  T" S5      :w  a  M  UR                  T" S5      5      nUb)  UR                  T" S5      5      nUS:X  a  SnMV  US:X  a    g U(       d  Mg  UR                  T" S5      5      nUc  M  UR                  =(       d    S	R                  5       (       d  M  T" UTT5        M     g 
NFri   rj   rk   rl   Trm   rn   r`   )r\   rs   rt   ra   rR   rb   )	r[   	in_resultr   r   r   r   r|   r   rI   s	         rX   walk_paragraph:apply_familia_arial_10_to_formtext.<locals>.walk_paragraphO  s    &tR00	EyyBuI%**R_-C? 34J& $IE>yZZ5	*>rww}"&;&;&=&=*5"kB r]   r   r   N)r[   r   returnNone)rL   rG   r   r|   rM   rI   r   r   r   r   rN   rO   rP   r   r   r   )r   rG   r   r   rU   r   r   tbl_eltr_elr   r[   r|   r   rI   s              @@@rX   "apply_familia_arial_10_to_formtextr   @  s    %  3y>
"C;;##BwK0DC C( ^^BvJ/Er&z21%<D"4( = 3 0  HHS^r]   c           
       ^ SSK Jn  SSKJn  SSKJm  SSKJnJnJ	n  U" [        U 5      5      nUR                  R                  R                  T" S5      5      n[        U5      S:  a  g[        5       n[          H%  u  ppU["        ;  a  M  UR%                  XU45        M'     SU4S	 jjn['        U5       GH  u  p['        UR                  T" S
5      5      5       GHi  u  p['        UR                  T" S5      5      5       GH>  u  nnXU4U;  a  M  [)        UT5       GH  n[+        UT5      (       d  M  U" U5      R-                  SS5      R-                  SS5      nUR/                  5       nU(       a  U" U5      (       d  U" U5      (       a  Mr  [0        R2                  " SU5       Vs/ s H*  nUR/                  5       (       d  M  UR/                  5       PM,     nn[        U5      S:  a  [5        UUS   TU5        UR7                  T" S5      5      nUc  U" S5      nUR9                  SU5        U" UTU5        GM     GMA     GMl     GM     UR;                  [        U 5      5        gs  snf )z>Compacta narrativa en celdas FORMTEXT (justificado, sin w:br).r   rF   r   rH   )!_apply_narrative_paragraph_format_is_label_paragraph_paragraph_has_placeholderr   r   Nc                  > Sn/ nU  H  nUR                   T" S5      :w  a  M  UR                  T" S5      5      nUb)  UR                  T" S5      5      nUS:X  a  SnMV  US:X  a    OOU(       d  Mg  UR                  T" S5      5       H'  nUR	                  UR
                  =(       d    S	5        M)     M     S	R                  U5      $ r   )rs   rt   ra   rQ   rv   rR   r   )r[   r   r   r   r   r   r   rI   s          rX   _paragraph_result_textBcompact_familia_formtext_narrative.<locals>._paragraph_result_text  s    	EyyBuI%**R_-C? 34J& $IE>y**RY/BLLB/ 0  wwu~r]   r   r   z

z\n\s*\nr   zw:pPr)r[   r   r   rN   )rL   rG   r   r|   rM   rI   r   r   r   r   rN   rO   rP   r   r   ry   r0   _NARRATIVE_SLOT_KEYSr   rr   r   r\   replacerb   resplitr   rt   rz   r   )r   rG   r|   r   r   r   rU   r   
slot_cellsr   r   r   rc   r   r   r   r   r[   r   bsegmentspprrI   s                         @rX   "compact_familia_formtext_narrativer   l  s   %  3y>
"C;;##BwK0D
4y1},/EJ,B(	G**	G45 -C
& 't_	'r&z(BCNG"+EMM"V*,E"F0
B1%<D24<< 06>>vtLTTUY[_`C))+C"<S"A"AEXY\E]E] 3588J3LZ3LaPQPWPWPY		3LHZ8}q(5dHQK[Y))BwK0C{)'2As+5c2{K = #G D -* HHS^  [s   *I*I*)rT   r   r   bool)r[   r   rI   r   r   r   )rc   rN   rd   dict[str, str]r   rN   )
r[   r   r{   rN   rI   r   r|   r   r   r   )rU   r   r   r   r   r   r   r   rI   r   r   z
Any | None)r   r   rI   r   )
r   r   r{   rN   rI   r   r|   r   r   r   )
r   r   r{   rN   rI   r   r|   r   r   r   )r   
str | Pathrd   r   r   r   r   zdict[str, Any])N)r   r   r   zdict[str, Any] | Noner   r   )r   r   r   r   )__doc__
__future__r   loggingr   copyr   pathlibr   typingr   	getLogger__name__r   r0   __annotations__rD   	frozensetr   rY   r\   rg   r   r   r   r   r   r   r   r   r   r_   r]   rX   <module>r      sN   [ "  	   			8	$A = <,0,;,  !7, /	,
 #$G, ', ', ., 1, -,  !5, !"2, %&:, /,  ;,  3!,"  =#,$ 2J',( , !
 $-
-- 	- 	-
 
-`*
 	 	
 	
 	 	
 	-=-= -= -= 	-=d .255*5 
5p)X?r]   