
    95jk                       S r SSKJr  SSKrSSKrSSKrSSKrSSKJr  SSK	J
r
  SSKJr  SSKJr  \R                  " \5      rSrS	rS*S
 jr\" S \ 5       5      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S-S jr            S.S jrS/S jrS0S jr S0S jr!S1S jr"Sr#S\# S3r$S2S jr%S3S jr&        S4S jr' S5     S6S jjr(Sr)S r*\" S!S"15      r+S7S# jr,S1S$ jr-S8S% jr.S8S& jr/      S9S' jr0SS(.         S:S) jjr1g);uU   Relleno determinístico de campos de identificación en informe familia (formulario).    )annotationsN)Path)Any)docx_has_form_controls)	agent_dir)student_full_namestudent_identification_numberstudent_birth_datestudent_agestudent_coursestudent_schoolprofessional_full_name"professional_identification_numberprofessional_job_positionprofessional_phone_email"professional_delivered_date_informperson_full_nameperson_identification_numberperson_relation_studentperson_presence)evaluation_reasonapplied_instruments	diagnosis
diagnosticpedagogical_strengthspedagogical_support_needssocial_affective_strengthssocial_affective_support_needshealth_strengthshealth_support_needscollaborative_workhome_based_descriptionhome_supportschool_family_agreementsagreements_commitmentsstrengths_1support_needs_1strengths_2support_needs_2strengths_3support_needs_3c                ,   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      $ )N NFKDc              3  ^   #    U  H#  n[         R                  " U5      S :w  d  M  Uv   M%     g7f)MnN)unicodedatacategory.0cs     YC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\utils\agent_familia_prefill.py	<genexpr>$_normalize_cc_tag.<locals>.<genexpr>@   s$     @1a 4 4Q 74 ?1s   -	-z
[^a-z0-9]+_z_+)striplowerr1   	normalizejoinresub)tagts     r6   _normalize_cc_tagrB   =   ss    	!!#Afa(A
@1@@A
}c1%A66%a &&s++    c              #  8   #    U  H  n[        U5      v   M     g 7fN)rB   )r4   ks     r6   r7   r7   E   s      O!!21!5!5s   c                \    SR                  S U R                  U" S5      5       5       5      $ )Nr-   c              3  J   #    U  H  oR                   =(       d    S v   M     g7f)r-   N)text)r4   rA   s     r6   r7   *_paragraph_visible_text.<locals>.<genexpr>I   s     @+?aFFLbL+?s   !#w:t)r=   iter)p_elqns     r6   _paragraph_visible_textrO   H   s$    77@499RY+?@@@rC   c                   U =(       d    SR                  5       n[        U5      S:  a  gU Vs/ s H  o"R                  5       (       d  M  UPM     nn[        U5      S:  a  g[        S U 5       5      nU[        U5      -  S:  $ s  snf )Nr-   
   F   c              3  R   #    U  H  oR                  5       (       d  M  S v   M     g7f)   N)isupperr3   s     r6   r7   &_is_label_paragraph.<locals>.<genexpr>S   s     27aiik7s   '	'g=
ףp=?)r:   lenisalphasum)rI   sr5   lettersuppers        r6   _is_label_paragraphr]   L   st    	A
1v{+!Qyy{q!G+
7|a2722ECL D((	 ,s   B
Bc                    S H;  n[        U R                  U" U5      5      5       H  nU R                  U5        M     M=     [        U R                  U" S5      5      5       H  nU R                  U5        M     g)uG   Evita saltos forzados y bloques que Word empuja a la página siguiente.)z
w:keepNextzw:keepLineszw:pageBreakBeforezw:widowControlN)listfindallremove)pprrN   OxmlElementr@   els        r6   !_clear_paragraph_pagination_locksre   W   s_    As{{2c7+,BJJrN - B 3;;r"2345

2 6rC   c                   [        U R                  U" S5      5      5       H  nU R                  U5        M     U" S5      nUR                  U" S5      S5        UR                  U" S5      S5        UR                  U" S5      S5        UR                  U" S5      S5        U R	                  U5        [        U R                  U" S	5      5      5       H  nU R                  U5        M     [        XU5        g )
Nz	w:spacingzw:before0zw:afterzw:line240z
w:lineRuleautozw:contextualSpacing)r_   r`   ra   setappendre   )rb   rN   rc   spspacingctxs         r6   _zero_paragraph_spacingro   `   s    3;;r+/0

2 1+&GKK:$KK9s#KK8e$KK< &)JJwCKK#8 9:;

3 <%c{;rC   c                `   ^ U =(       d    SR                  5       m[        U4S jS 5       5      $ )Nr-   c              3  .   >#    U  H
  nUT;   v   M     g 7frE    )r4   phlows     r6   r7   -_paragraph_has_placeholder.<locals>.<genexpr>p   s       
B 	c	
s   )zhaz clicz	pulse aquzescribir textoz
click hereztap herezclick or tapzclic aqu)r;   any)rI   rt   s    @r6   _paragraph_has_placeholderrw   n   s1    :2


C 
  rC   c                    [        U R                  U" S5      5      5       H  nU R                  U5        M     U" S5      nUR                  U" S5      S5        U R	                  U5        g)uV   Justificado estándar (w:jc both). La última línea de cada w:p queda a la izquierda.zw:jcw:valbothN)r_   r`   ra   rj   rk   )rb   rN   rc   jcjc_els        r6   _ppr_set_justifyr}   ~   sQ    3;;r&z*+

2 ,E	IIbk6"JJurC   c                4    [        XU5        [        XU5        g rE   )r}   ro   )rb   rN   rc   s      r6   !_apply_narrative_paragraph_formatr      s    Sk*C[1rC   c                   SSK Jn  U" S5      nU" S5      n[        XrU5        UR                  U5        U" S5      nUb  UR                  U" U5      5        U" S5      n	X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5        U R                  U5        g )
Nr   deepcopyw:pw:pPrw:rrK    	xml:spacepreserve)copyr   r   rk   rI   
startswithendswithrj   )
parentrI   rN   rc   ref_r_prr   new_prb   rwts
             r6   _append_narrative_paragraphr      s     E
g
C%c{;	LLEA	(#$	U	BGst}}S11
r+
+HHRL	LLO
MM%rC   c                   / n/ nU R                  U" S5      5       H  nUR                  U" S5      5      nUb,  UR                  (       a  UR                  UR                  5        UR                  U" S5      5      c  Mc  SR	                  U5      R                  5       nU(       a  UR                  U5        / nM     SR	                  U5      R                  5       nU(       a  UR                  U5        U$ )z4Parte un w:p en bloques de texto separados por w:br.r   rK   w:brr-   )r`   findrI   rk   r=   r:   )rM   rN   segmentsbufr   r   chunktails           r6   _split_paragraph_segmentsr      s    HC\\"U)$VVBuI>bggJJrww66"V*)GGCL&&(E&C % 773<DOrC   c           	       ^ SSK Jn  / nSnU R                  T" S5      5       GHB  n[        UT5      R	                  SS5      R	                  SS5      nUR                  5       nU(       a   [        U5      (       d  [        U5      (       a  Mi  UcB  UR                  T" S5      5       H'  nUR                  T" S	5      5      n	U	c  M  U" U	5      n  O   [        U4S
 jUR                  T" S5      5       5       5      (       a  UR                  [        UT5      5        M  [        R                  " SU5       H-  n
U
R                  5       n
U
(       d  M  UR                  U
5        M/     GME     U R                  T" S5      5       HD  nUR                  T" S5      5      nUc  U" S5      nUR!                  SU5        [#        UTU5        MF     U(       d  g[%        U 5       H  nU R'                  U5        M     U H  n[)        XTX%5        M     g)u   
Normaliza narrativa: un w:p por bloque, justificado, sin w:br.
w:br + justify en el mismo párrafo estira líneas cortas con espacios enormes.
r   r   Nr   z

r   w:rPrc              3  T   >#    U  H  oR                  T" S 5      5      SLv   M     g7f)r   N)r   )r4   r   rN   s     r6   r7   2_reformat_narrative_sdt_content.<locals>.<genexpr>   s#     L7K!vvbj!-7Ks   %(z\n\s*\nr   )r   r   rL   rO   replacer:   rw   r]   r   rv   r`   extendr   r>   splitrk   insertr   r_   ra   r   )sdt_content_elrN   rc   r   r   r   prawr   rprblockrb   childsegs    `            r6   _reformat_narrative_sdt_contentr      s   
 HH  E+%a,44VTBJJ4QUViik0559LS9Q9QVVBuI&ffR[)?'}H	 '
 LqyyE7KLLLOO5a<=*c25OOE* 3 ,&   E+ffR[!;g&CHHQ)#r;? , n%e$ & #N[S rC   c                    [        XU5        g)uK   Reformatea párrafos narrativos: justificado, un w:p por bloque (sin w:br).N)r   )r   rN   rc   s      r6   _compact_sdt_content_spacingr      s    #NDrC   c                4  ^^ SSK JnJn  SSKJnJnJn  U" U 5      (       a  U" U 5        U" U 5        gU" U 5      (       a	  U" U 5        gSSKJn  SSK	J
m  SSKJm  U" [        U 5      5      nS	UU4S jjnU" UR                  R                  5        UR                    H^  n	U	R"                  U	R$                  U	R&                  U	R(                  4 H)  n
U
c  M  U
R*                  c  M  U" U
R*                  5        M+     M`     UR-                  [        U 5      5        g)
zUJustifica narrativa, separa bloques en w:p distintos (sin w:br) y compacta espaciado.r   )"compact_familia_formtext_narrativedocx_has_legacy_formtext)compact_familia_tabla_narrative!docx_is_familia_ministerial_tablarelax_familia_tabla_layoutNDocumentrc   rN   c                <  > U R                  T" S5      5       H  nUR                  ST" S5      -   5      nUc  M"  [        UR                  T" S5      5      =(       d    S5      nU[        ;  a  MW  UR                  T" S5      5      nUc  Ms  [        UTT5        M     g )Nw:sdt.//w:tagry   r-   w:sdtContent)rL   r   rB   get_NARRATIVE_TAG_NORMSr   )r   sdttag_eltag_nsdt_contentrc   rN   s        r6   	walk_sdts4compact_familia_narrative_spacing.<locals>.walk_sdts  s    ;;r'{+CXXebk12F~%fjjG&=&CDE00((2n#56K&,["kJ ,rC   r   r   returnNone)(app.backend.utils.agent_familia_formtextr   r   *app.backend.utils.agent_familia_tabla_fillr   r   r   docxr   	docx.oxmlrc   docx.oxml.nsrN   strelementbodysectionsheaderfooterfirst_page_headerfirst_page_footer_elementsave)	docx_pathr   r   r   r   r   r   docr   sectionhfrc   rN   s              @@r6   !compact_familia_narrative_spacingr      s      )33'	2"9-	***95%
3y>
"C
K 
K ckk<<NNNN%%%%	
B ~"++"9"++&
   HHS^rC   z4http://schemas.microsoft.com/office/word/2010/wordml{z}valc                    [        U =(       d    0 R                  S5      =(       d    S5      R                  5       R                  5       nUS;   a  gg)z1Devuelve (ingreso_marcado, reevaluacion_marcada).evaluation_typer-   revaluationu   reevaluaciónreevaluacion2)FT)TFr   r   r:   r;   )context	eval_types     r6   _evaluation_type_flagsr   #  sB    W]''(9:@bAGGIOOQIIIrC   c                   U R                  U" S5      5      nUb  SnU H'  nUR                  R                  S5      (       d  M%  Un  O   Ub  SnU H'  nUR                  R                  S5      (       d  M%  Un  O   U(       a  SOSnUb  UR                  [        U5        O/U" S5      nUR                  [        U5        UR                  U5        U R                  U" S5      5      n	U	c  g[        U	R                  U" S	5      5      5      n
U(       a  S
OSnU
(       a  XS   l        U
SS  H
  nSUl        M     gU	R                  U" S5      5       Ho  nUR                  U" S5      5      nUc  U" S5      nUR                  U5        UR                  U" S	5      5      nUc  U" S	5      nUR                  U5        Xl          g   g)u,   Marca checkbox con 'x' sin cuadro (☐/☑).zw:sdtPrNz	}checkboxz}checked1rg   zw14:checkedr   rK   xr-   r   rT   r   r   )	r   r@   r   rj   W14_CHECKED_ATTRrk   r_   rL   rI   )r   rN   rc   checkedsdt_prcheckboxr   check_elval_strr   wt_listmarkr   rM   w_rs                  r6   _set_sdt_checkbox_markr   +  s   XXbm$FEyy!!+..   H!99%%j11$H " %c#G#-w7&}5-w7)((2n-.K;##BuI./G3rD
!"+BBG   $$RY/D))BuI&C{!%(C "U)$Bz '

2G 0rC   c                    SSK Jn  SSKJnJn  SSKJnJn  [        U 5      nU" U5      (       a	  U" XU5      $ U" U5      (       a	  U" XU5      $ UR                  [        U5      U[        U5      5      $ )z:Rellena plantilla familia (tablas planas, FORMTEXT o SDT).r   )DocumentsClass)r   fill_familia_formtext_fields)r   fill_familia_tabla_cells)#app.backend.classes.documents_classr   r   r   r   r   r   r   r   fill_docx_formr   )	template_pathreplacementsoutput_pathr   r   r   r   r   paths	            r6   fill_familia_docxr   Y  sl     C
 D(..'KHH%%+DLL((TL#kBRSSrC   c                  ^^^^^ SSK JnJn  SSKJnJn  U" U 5      (       a	  U" X5        gU" U 5      (       a	  U" X5        gSSKJm  SSKJ	n  SSK
Jm  SSKJm  U" [        U 5      5      n[        UR                   5      S	:  d&  [        UR                   S
   R"                  5      S:  a  g[%        U5      u  pUR                   S
   R"                  S   R&                  S   n
U
R(                  (       d  gU
R(                  S   R*                  mTR-                  T" S5      5      nS=pSmT H  nUR.                  R1                  S5      (       a%  Tc"  UR-                  T" S5      5      nUb  T" U5      mUR.                  R1                  S5      (       d  Mj  UR-                  ST" S5      -   5      nUb  UR3                  T" S5      5      OSnUS:X  a  UnM  US:X  d  M  UnM     [5        T5       H  nXLd  M	  TR7                  U5        M     SUUUUU4S jjnU" S5        U" S5        U" S5        U" S5        Ub   [9        UTTU5        TR;                  U5        OU(       a  U" S5        U" S5        Ub   [9        UTTU	5        TR;                  U5        OU	(       a  U" S5        U" S5        UR=                  [        U 5      5        g)u   
Restaura fila MOTIVO DE LA EVALUACIÓN como plantilla original:
Evaluación: x de Ingreso   x Reevaluación (una x con cuadro).
r   )r   &fix_familia_motivo_evaluacion_formtext)r   #fix_familia_motivo_evaluacion_tablaNr   r   r   r            rT   r   z}rr   z}sdtr   r   ry   
evaluationreevaluationc                2  > T" S5      nTb  UR                  T" T5      5        T" S5      nXl        U R                  S5      (       d  U R                  S5      (       a  UR	                  T" S5      S5        UR                  U5        TR                  U5        g )Nr   rK   r   r   r   )rk   rI   r   r   rj   )rI   r   rA   rc   	bold_r_prr   r   rN   s      r6   add_run2fix_familia_motivo_evaluacion_row.<locals>.add_run  sx     HHXi()??34==#5#5EE"[/:.		rC   u   MOTIVO DE LA EVALUACIÓNz6                                                      u   Evaluación:r   r   zde Ingreso   u    Reevaluación)rI   r   r   r   )r   r   r   r   r   r  r   r   r   r   r   rc   r   rN   r   rW   tablesrowsr   cells
paragraphsr   r   r@   r   r   r_   ra   r   rk   r   )r   student_contextr   r   r   r  r   r   is_admission	is_reevalcellp_preval_sdt
reeval_sdtr   foundr   tag_valr	  rc   r  r   r   rN   s                      @@@@@r6   !fix_familia_motivo_evaluacion_rowr  q  sW   
 )33+IG	**.yJ%
3y>
"C
3::c#**Q-"4"4594_EL::a=a &&q)D??##A66"W+D  HI99d## 

2g;/$ (I99f%%ZZ7 34F171CfjjG-G,& N*"
  aHHUO 	 	 &'DENCLx[,G		Oz2{IF		HHS^rC   Arial20r  r  c                >   U R                  U" S5      5      nUc  U" S5      nU R                  SU5        S H;  n[        UR                  U" U5      5      5       H  nUR	                  U5        M     M=     U" S5      nS H  nUR                  U" U5      [        5        M!     UR                  U5        U" S5      nUR                  U" S5      [        5        UR                  U5        U" S5      n	U	R                  U" S5      [        5        UR                  U	5        g )	Nr   r   )zw:bzw:bCsw:rFontsw:szw:szCsr  )zw:asciizw:hAnsizw:csr  ry   r  )	r   r   r_   r`   ra   rj   FAMILIA_ANSWER_FONTrk   FAMILIA_ANSWER_SIZE_HALF_PT)
r   rN   rc   r_prr@   rd   r_fontsattrszsz_css
             r6   _apply_arial_10_to_runr&    s    66"W+D|7#	D=t||BsG,-BKKO . > *%G.BtH12 /KK	V	BFF2g;34KKO!E	IIbk67KKrC   c                   ^
^ SSK JnJn  SSKJnJn  U" U 5      (       a	  U" U 5        gU" U 5      (       a	  U" U 5        gSSKJn  SSKJ	m
  SSK
Jm  U" [        U 5      5      nS	U
U4S jjnU" UR                  R                  5        UR                   H^  nUR                   UR"                  UR$                  UR&                  4 H)  n	U	c  M  U	R(                  c  M  U" U	R(                  5        M+     M`     UR+                  [        U 5      5        g)
z@Todas las respuestas en content controls: Arial 10, sin negrita.r   )"apply_familia_arial_10_to_formtextr   )apply_familia_arial_10_to_tablar   Nr   r   r   c                $  > U R                  T" S5      5       H  nUR                  ST" S5      -   5      nUb  UR                  T" S5      5      OS nUR                  T" S5      5       H  nUR                  T" S5      5      nUb(  UR                  =(       d    SR	                  5       (       d  MG  U[
        ;   a6  UR                  =(       d    SR	                  5       S;   a  [        UTT5        M  U[
        ;   a  M  [        UTT5        M     M     g )	Nr   r   r   ry   r   rK   r-   )r-   r   X)rL   r   r   rI   r:   _CHECKBOX_SDT_TAGSr&  )r   r   r   r  r   r   rc   rN   s         r6   walk)apply_familia_arial_10_font.<locals>.walk  s    ;;r'{+CXXebk12F171CfjjG-GXXbi(VVBuI&:bggm%:%:%<%<00bggm5J5J5LP^5^*1b+>00&q"k: ) ,rC   r   )r   r(  r   r   r)  r   r   r   r   rc   r   rN   r   r   r   r   r   r   r   r   r   r   )r   r(  r   r)  r   r   r   r-  r   r   rc   rN   s             @@r6   apply_familia_arial_10_fontr/    s    
 )33'	2	***95%
3y>
"C; ; 			<<NNNN%%%%	
B ~"++"9R[[!
   HHS^rC   c                  ^ [        U R                  S5      =(       d    S5      R                  5       n[        U R                  S5      =(       d    S5      R                  5       n[        U R                  S5      =(       d    S5      R                  5       n[        U R                  S5      =(       d    U R                  S5      =(       d    S5      R                  5       n[        U R                  S5      =(       d    S5      R                  5       n[        U R                  S5      =(       d    S5      R                  5       n[        U R                  S	5      =(       d    S5      R                  5       n[        U R                  S
5      =(       d    U R                  S5      =(       d    S5      R                  5       n[        U R                  S5      =(       d    S5      R                  5       n	[        U R                  S5      =(       d    S5      R                  5       n
[        U R                  S5      =(       d    U R                  S5      =(       d    S5      R                  5       n[        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 SU 3R                  S5      OSn[        U R                  S5      =(       d    U R                  S5      =(       d    S5      R                  5       n[        U R                  S5      =(       d    U R                  S5      =(       d    S5      R                  5       n[        U R                  S5      =(       d    S5      R                  5       n[        U R                  S5      =(       d    U R                  S5      =(       d    S5      R                  5       n[        U R                  S5      =(       d    U R                  S5      =(       d    S5      R                  5       n[        U R                  S5      =(       d    U R                  S5      =(       d    S5      R                  5       n[        U R                  S5      =(       d    U R                  S5      =(       d    S5      R                  5       n[        U R                  S5      =(       d    U R                  S 5      =(       d    S5      R                  5       nS!mS,U4S" jjn0 SU=(       d    T_SU=(       d    T_SU" U5      _SU=(       d    T_SU=(       d    T_SU=(       d    T_S	U=(       d    T_S
U=(       d    T_SU	=(       d    U=(       d    T_SU" U
5      _SU=(       d    T_S#U=(       d    T_SU=(       d    T_SU=(       d    T_SU=(       d    T_SU=(       d    T_SU=(       d    U=(       d    T_U" U5      U=(       d    TU=(       d    TU=(       d    TU=(       d    TS$.En[        U R                  S%5      =(       d    S5      R                  5       R                  5       nUS&;   a  S'US('   OUS);   a  S'US*'   S+ HB  n[        U R                  U5      =(       d    S5      R                  5       nU(       d  M=  UUU'   MD     U$ )-uT   Rellena solo los content controls de identificación (tags exactos de la plantilla).r   r-   student_social_namer	   r
   student_born_dater   r   r   r   professional_social_namer   r   professional_roleprofessional_phoneprofessional_emailz / r   report_delivery_dater   receiver_full_namereceiver_social_namer   receiver_identification_numberr   receiver_relationshipr   receiver_presence_ofperson_phonereceiver_phoneperson_emailreceiver_emailzNo informadoc                   > SSK Jn  U =(       d    SR                  5       nU(       a"  UR                  5       TR                  5       :X  a  T$ U" U5      $ )Nr   )_format_rut_displayr-   )&app.backend.utils.agent_student_lookuprB  r:   r;   )valrB  r   no_infos      r6   _fmt_rut;build_familia_identification_replacements.<locals>._fmt_rutW  s>    Nyb!ciikW]]_4N"3''rC   r   )r   r   r   r=  r?  r   )	admissionu	   admisióningresor   r   r  r   r  )evaluation_date_1evaluation_date_2evaluation_date_3)rD  r   r   r   r   )r   student_fullstudent_social
student_idstudent_bornr   r   r   professional_fullprofessional_socialprofessional_idr4  rs   emprofessional_contactreport_deliveryreceiver_fullreceiver_socialreceiver_idreceiver_relationreceiver_presencer>  r@  rF  r   r   keyrD  rE  s                               @r6   )build_familia_identification_replacementsr]     s   w{{#67=2>DDFL%:;ArBHHJNW[[!@AGRHNNPJ()SW[[9L-MSQSeg  gkk-06B7==?K%56<"=CCEN%56<"=CCEN,- 	;;12	 eg	 
 gkk*DEKLRRT'++&JKQrRXXZO/0ZGKK@S4TZXZeg  
W[[-.4"	5	;	;	=B	W[[-.4"	5	;	;	=B;=bTRD>//6"89 	;;-.	 eg	  &'R7;;7K+LRPReg  '++&<=CDJJLO23 	;;78	 eg	 
 -.\'++>U2V\Z\eg  %&S'++6L*MSQSeg  N#Jw{{3C'DJeg  N#Jw{{3C'DJeg  G($\4W$~8$ 	(*)=$ 	l5g	$
 	{-g$ 	.3G$ 	.3G$ 	!"3">w$ 	#$7$W;L$WPW$ 	-h.G$ 	$%6%A'$ 	#$8$CG$ 	bmG$ 	bmG$ 	-o.H$  	M4W!$" 	 K= KG#$$ )1(=#4#?,7&1'&1'-$L2 GKK 128b9??AGGII>>%(\"	K	K'*^$N'++c"(b)//13 #L O
 rC   c                ,    [        [        U 5      U 5      $ )uA   Identificación + narrativa desde BD (informe guardado en admin).)_append_narrative_replacementsr]  )r   s    r6   build_familia_form_replacementsr`    s    )1':G rC   c           
        [        UR                  S5      =(       d    UR                  S5      =(       d    S5      R                  5       nU(       a  X S'   X S'   [        UR                  S5      =(       d    UR                  S5      =(       d    S5      R                  5       nU(       a  X0S'   SSSS	S
SSSSS.	n[         H^  n[        UR                  U5      =(       d    S5      R                  5       nU(       d  M=  X`U'   UR                  US5       H  nX`U'   M	     M`     U R	                  5        VV	s0 s H  u  pU	(       d  M  X_M     sn	n$ s  sn	nf )Nr   r   r-   r   r   )r&   fortalezas_1)r'   necesidades_apoyo_1)r(   fortalezas_2fortalezas_social_afectivo)r)   necesidades_apoyo_2necesidades_social_afectivo)r*   )r+   )educational_supports_school)r#   )r%   )	r   r   r   r   r   r    r!   r"   r$   rr   )r   r   r:   _NARRATIVE_KEYSitems)
r   r   r   r   	alias_mapr\  rD  aliasrF   vs
             r6   r_  r_    s8    W[[-P\1JPbQWWYJ%/\"$.[!'(TGKK8M,NTRTeg  ,=() "A%O&c+

 - 4>"3$?I '++c"(b)//1S]]3+E"% ,  *//171TQQDAD1777s   4EE)form_template_pathc               f   U(       a  U(       d  U$ US   nUR                  S5      nU(       d  U$ [        U 5      U-  nUR                  R                  5       S:w  a  U$ UR	                  5       (       d2  U(       a+  UR	                  5       (       a  [
        R                  " X65        UR	                  5       (       d  U$ Sn SSKJn  U" U5      n[        U5      (       dd  U(       a[  UR	                  5       (       aF  [
        R                  " X65        [        R                  SUR                  5         SSKJn  U" U5      nOU$ [        U5      (       d	  U(       d  U$  [        U5      n	SSKJn
Jn  U
" U5      (       a:  U" UU	US9nU(       a*  [        R                  S	UR                  [%        U5      5        Os['        XiU5      nUR                  S
5      S:X  a1  [        R)                  SUR                  UR                  S5      5        O![        R                  SUR                  5          [+        U5        [        R                  SUR                  5         [-        Xb5        [        R                  SUR                  5         [/        U5        [        R                  SUR                  5        U$ ! [         a     GNf = f! [         a    Sn GNf = f! [         a+  n[        R)                  SUR                  U5         SnANSnAff = f! [         a+  n[        R)                  SUR                  U5         SnANSnAff = f! [         a+  n[        R)                  SUR                  U5         SnANSnAff = f! [         a,  n[        R)                  SUR                  U5         SnAU$ SnAff = f)uN   Corrige identificación en .docx generado usando fill_docx_form y datos de BD.r   idz.docxF)r   zGInforme familia: reemplazado formato tablas por plantilla formulario %s)r   "refill_familia_identification_only)r   u-   Identificación re-aplicada en %s (%d campos)statuserroru"   Prefill familia falló para %s: %smessagezPrefill familia aplicado en %sz%Prefill familia no aplicado en %s: %sNz$Espaciado narrativo compactado en %su+   Compactación de espaciado falló en %s: %su'   Fila motivo evaluación corregida en %su/   Corrección motivo evaluación falló en %s: %szArial 10 aplicado en %szArial 10 no aplicado en %s: %s)r   r   suffixr;   is_fileshutilcopy2r   r   	Exceptionr   loggerinfonamer]  r   r   rq  rW   r   warningr   r  r/  )agent_idsavedr  rn  entryfile_idr   uses_formtextr   r   r   rq  filledresultexcs                  r6   postprocess_saved_familia_docxr    s    %!HEiioGX(D{{g%<<>>05G5O5O5Q5Q'.<<>>MU06 "$''"4"<"<">">LL+2KKY"''&] 8 > L!$''P@Q	

 -T2270F
 CIIK 't4@Fzz(#w.8IIJJy) <diiHV)$/:DIIFZ)$@=tyyII#D)-tyy9 LQ    & %&J  P>		3OOP  VDdiiQTUUV  ZH$))UXYYZ  I7CHHLIs   ?J. 0J? AK 5AK  K )+L
 +M +M: .
J<;J<?KK
L!LL

L?!L::L?
M7!M22M7:
N0!N++N0)r@   r   r   r   )rM   r   rN   r   r   r   )rI   r   r   bool)rb   r   rN   r   rc   r   r   r   )r   r   rI   r   rN   r   rc   r   r   z
Any | Noner   r   )rM   r   rN   r   r   z	list[str])r   r   rN   r   rc   r   r   r   )r   r   r   r   )r   dict[str, Any] | Noner   ztuple[bool, bool])
r   r   rN   r   rc   r   r   r  r   r   )r   
str | Pathr   dict[str, str]r   r  r   dict[str, Any]rE   )r   r   r  r  r   r   )r   r   rN   r   rc   r   r   r   )r   r  r   r  )r   r  r   r  r   r  )
r~  r   r  list[dict[str, Any]]r  r  rn  zPath | Noner   r  )2__doc__
__future__r   loggingr>   rw  r1   pathlibr   typingr   (app.backend.utils.agent_familia_templater   app.backend.utils.agent_filesr   	getLogger__name__rz  FAMILIA_IDENTIFICATION_SDT_TAGSri  rB   	frozensetr   rO   r]   re   ro   rw   r}   r   r   r   r   r   r   W14_NSr   r   r   r   r  r  r   r,  r&  r/  r]  r`  r_  r  rr   rC   r6   <module>r     s   [ "  	     K 3			8	$# $2, ! O OO A)< 2

 	 	
  
2&+T\E
1h 
@xu% +\TT T T 	T4 .2^^*^ 
^B  " n=> (2jcL%8 %8+9%8%8Z '+ggg +g
 $g grC   