
    sIj'                        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
   SSKr\R                  " S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g! \ a    Sr NJf = f)u;   Inspección de campos en plantillas Word/PDF para Agent v2.    )annotationsN)Path)Any)Documentz9\{([^{}]+)\}|\[([^\[\]]+)\]|<<([^<>]+)>>|\{\{([^{}]+)\}\}c                    U R                   R                  /nU R                   HU  nUR                  UR                  4 H6  nUc  M  [        US5      (       d  M  UR                  UR                  5        M8     MW     U$ )N_element)elementbodysectionsheaderfooterhasattrappendr   )docrootssectionhfs       _C:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\utils\agent_v2_template_inspector.py_docx_xml_rootsr      sa    (()E<<>>7>>2B~'"j"9"9R[[) 3   L    c                N   SSK Jn  [        5       n[        U 5       GH  nUR	                  U" S5      5       H  nUR                  U" S5      5      nUc  M  UR                  U" S5      5      nUbH  UR                  U" S5      5      =(       d    SR                  5       nU(       a  UR                  U5        M  UR                  U" S5      5      nUc  M  UR                  U" S5      5      =(       d    SR                  5       n	U	(       d  M  UR                  U	5        M     GM     U$ )	z=Tags w:tag / w:alias de controles de contenido (SDT) en Word.r   qnzw:sdtzw:sdtPrzw:tagw:val zw:alias	docx.oxml.nsr   setr   iterfindgetstripadd)
r   r   foundrootsdtsdt_prtag_eltag_valalias_el	alias_vals
             r   !_detect_docx_content_control_tagsr,       s    eE$99R[)CXXbm,F~[[G-F!!::bk28b??AIIg&{{2i=1H#%\\"W+6<"CCE	9IIi( * %  Lr   c                N   SSK Jn  [        5       n[        U 5       H  nUR	                  U" S5      5       Hg  nUR                  U" S5      5      nUc  M  UR                  U" S5      5      =(       d    SR                  5       nU(       d  MV  UR                  U5        Mi     M     U$ )z3Campos de formulario heredados (w:ffData / w:name).r   r   zw:ffDatazw:namer   r   r   )r   r   r$   r%   ff_dataname_elnames          r   _detect_docx_legacy_form_fieldsr1   8   s    eE$yyJ0Gll2h<0GKK7,299;Dt		$ 1 % Lr   c                    [        5       n/ nU R                   H  nUR                  UR                  5        M      U R                   HD  nUR
                   H1  nUR                   H  nUR                  UR                  5        M      M3     MF     U Hi  n[        R                  U5       HM  n[        S UR                  5        5       5      n	U	R                  5       n
U
(       d  M<  UR                  U
5        MO     Mk     U$ )Nc              3  6   #    U  H  o(       d  M  Uv   M     g 7fN .0gs     r   	<genexpr>1_detect_docx_text_placeholders.<locals>.<genexpr>U   s     8NqaN   
	)r   
paragraphsr   texttablesrowscells_PLACEHOLDER_REfinditernextgroupsr"   r#   )r   r$   chunks	paragraphtablerowcellr=   matchfieldcleaneds              r   _detect_docx_text_placeholdersrM   H   s    eEF^^	inn% $::C		dii( "  
 $--d3E8ELLN88EkkmGw		'"	 4  Lr   c                    [        [        U 5      5      n[        5       nUR                  [	        U5      5        UR                  [        U5      5        UR                  [        U5      5        [        U5      $ r4   )r   strr   updaterM   r,   r1   sorted)pathr   r$   s      r   detect_docx_fieldsrS   \   sW    
3t9
CeE	LL/45	LL2378	LL056%=r   c                   [         c  / $ [        5       n[         R                  " [        U 5      5      n U H  nUR	                  5       nU(       aF  U H@  nUR
                  =(       d    SR                  5       nU(       d  M/  UR                  U5        MB     UR                  S5      =(       d    Sn[        R                  U5       HM  n[        S UR                  5        5       5      n	U	R                  5       n
U
(       d  M<  UR                  U
5        MO     M     UR                  5         [        U5      $ ! UR                  5         f = f)Nr   r=   c              3  6   #    U  H  o(       d  M  Uv   M     g 7fr4   r5   r6   s     r   r9   $detect_pdf_fields.<locals>.<genexpr>t   s     <1!QQr;   )fitzr   openrO   widgets
field_namer"   r#   get_textrA   rB   rC   rD   closerQ   )rR   r$   pdfpagerY   widgetr0   r=   rJ   rK   rL   s              r   detect_pdf_fieldsr`   e   s    |	eE
))CI
CDllnG%F"--3::<Dt		$ & ==(.BD(11$7<<<++-7IIg&	 8  			%= 			s   A	D5 A<D5 D5 5Ec                    U R                  5       (       d  [        S5      eUR                  5       nUS:X  a  [        U 5      nOUS:X  a  [	        U 5      nO[        S5      eUU[        U5      S.$ )NzPlantilla no encontrada.docxr]   z'Formato no soportado. Use .docx o .pdf.)
formatTypefields
fieldCount)exists
ValueErrorlowerrS   r`   len)rR   format_typefmtrd   s       r   inspect_template_fieldsrl   }   sl    ;;==344



C
f}#D)	"4(BCC&k r   c                ,    [         R                  " U SS9$ )NF)ensure_ascii)jsondumps)rd   s    r   fields_to_jsonrq      s    ::f511r   c                    U (       d  / $  [         R                  " U 5      n[        U[        5      (       a  U$ / $ ! [         R                   a    / s $ f = fr4   )ro   loads
isinstancelistJSONDecodeError)rawparseds     r   fields_from_jsonry      sM    	C#FD11v9r9 	s   ,: : AA)r   r   returnz	list[Any])r   r   rz   zset[str])rR   r   rz   	list[str])rR   r   rj   rO   rz   zdict[str, Any])rd   r{   rz   rO   )rw   z
str | Nonerz   r{   )__doc__
__future__r   ro   repathlibr   typingr   rb   r   rW   ImportErrorcompilerA   r   r,   r1   rM   rS   r`   rl   rq   ry   r5   r   r   <module>r      sy    A "  	   
 **@
0 (0"2G  Ds   A( (A32A3