Files
r360mx-docs-converter/__pycache__/apply_template.cpython-314.pyc
T

207 lines
44 KiB
Plaintext
Raw Normal View History

2026-06-03 19:25:03 +02:00
+
sgjcˆãó”Rt^RIt^RIt^RIt^RIt^RIt^RIt^RIt^RIt^RI H
t
^RI H t ^RI H
t
RRRRR R
R R R
RRRRR/t]P!R4tRRRRRRRRRRRRRRR R R!R!R"R#/
tR$R%ltR&R'ltR(R)ltR*R+ltR,R-ltR.R/ltR0R1ltR2R3lt!R4R5]4t!R6R74tR8R9ltR:R;ltR<R=ltR>R?lt R@RAlt!RBRClt"R]RDREllt#RFRGlt$R^RHRIllt%R_RJRKllt&RLRMlt'RNROlt(R`RPRQllt)RRRSlt*RTRUlt+RVRWlt,RXRYlt-R^RZR[llt.]/R\8Xd]P`!].!44R#R#)auX
apply_template.py - Conversión de ENERGY REPORT a formato corporativo R360MX.
Aplica la plantilla oficial (portada + disclaimer + índice + contraportada)
a uno o varios documentos ENERGY REPORT de RatedPower.
Uso:
# Simple
python3 apply_template.py informe.docx plantilla.docx
# Con opciones
python3 apply_template.py informe.docx plantilla.docx -o salida.docx -v
# Modo batch (procesa todo un directorio)
python3 apply_template.py --batch ./informes/ plantilla.docx -v
# Dry-run (solo muestra lo que haría)
python3 apply_template.py informe.docx plantilla.docx --dry-run -v
N)ÚPath)Údatetime)ÚetreeÚwz<http://schemas.openxmlformats.org/wordprocessingml/2006/mainÚrzChttp://schemas.openxmlformats.org/officeDocument/2006/relationshipsÚaz5http://schemas.openxmlformats.org/drawingml/2006/mainÚwpzFhttp://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawingÚmcz;http://schemas.openxmlformats.org/markup-compatibility/2006Úctz<http://schemas.openxmlformats.org/package/2006/content-typesÚrelz<http://schemas.openxmlformats.org/package/2006/relationshipsÚr360mxÚTitle1ÚTtulo1ÚTitle2ÚTtulo2ÚTitle3ÚTtulo3Ú Title1nfsÚCustomStyleLevelOneÚTDC1ÚCustomStyleLevelTwoÚTDC2Ú Title2IndexÚTableContentEndÚCoverSubtitle20Ú NameTableImgÚ
DescripcincóDV^8„dQhR\R\P/#)éÚcontentÚreturn)ÚbytesrÚ_Element)Úformatsapply_template.pyÚ __annotate__r%Ls÷%”uð§¡ñcó.\P!V4#©N)rÚ
fromstring)rs&r$Ú parse_xmlr*LsÜ × Ò ˜ $r&có0V^8„dQhR\R\/#)rÚtagr )Ústr)r#s"r$r%r%Ps÷&Œ3ð&”3ñ&r&cóNVPR4wrR\V, RV 2#)z3Convierte 'w:body' a la URL completa con namespace.Ú})ÚsplitÚNS)r,ÚprefixÚlocals& r$Úqr6Ps(à—II˜c“NM€FØ
6•
ˆ|˜2˜e˜ %r&có0V^8„dQhR\R\/#)rÚprefixesr )r-Údict)r#s"r$r%r%Vs÷(”Sð(œTñ(r&cóFVUu/uFq\V,bK up#uupi)zConstruye nsmap para tostring.)r3)r8Úps* r$Únsmapr<Vs á '™h˜Œr!uŠH™hÑ 'ùÒ 'scóRV^8„dQhR\PR\R,/#)rÚ p_elementr rr"r-)r#s"r$r%r%[s"÷"œEŸN™Nð"¬s°T­"r&có¶VP\R44pVfR#VP\R44pVfR#VP\R44#)u+Devuelve el styleId de un párrafo, o None.úw:pPrNúw:pStyleúw:val)Úfindr6Úget)r>ÚpPrÚpStyles& r$Ú get_style_idrH[sIà
.‰.œ˜7Ó
$€CØ
Ø
X‰X”a˜
“mÓ
$€FØ
‚~ÙØ :‰:”a˜“jÓ !r&cóDV^8„dQhR\PR\/#)rr>r r?)r#s"r$r%r%fs÷0œUŸ^™^ð0´ñ0r&cólVPR\R4 24pRPRV44#)u&Obtiene el texto plano de un párrafo.ú.//úw:tÚc3óL"TFqP;'gRxK R#5i)rMN)Útext)Ú.0Úts& r$Ú <genexpr>Ú get_para_text.<locals>.<genexpr>iséРA—66—<<˜R”<«ùs$ $)Úfindallr6Újoin)r>Útextss& r$Ú
get_para_textrWfs2à × Ñ  ¤A e£H :Ð /€EØ
7‰7ÑÓ /r&cóDV^8„dQhR\PR\/#©rÚbodyr )rr"Úlist)r#s"r$r%r%ls"÷LñL”E—NL¤tñLr&có|VUu.uF+qP\R4\R439gK)VNK- up#uupi)u8Devuelve todos los párrafos y tablas del body en orden.úw:pzw:tbl)r,r6)rZÚchilds& r$Ú get_parasr_ls2á K™te§y¡y´Q°u³X¼qÀ»zÐ4JÑ'JEˆE™tÑ KùÒ Ks…&9°9cóZV^8„dQhR\PR\\,/#)rÚxml_rootr )rr"r[Útuple)r#s"r$r%r%qs"÷ñ¤§¡ð´D¼µKñr&cóÐ.pVPR\R, R24F?pVPR\R, R24pV'gK-VPW#34KA V#)z'Encuentra todos los a:blip con r:embed.r0rz}bliprú}embed)Úiterr3rEÚappend)raÚblipsÚblipÚrids& r$Úcollect_image_refsrjqs\à €EØ
 ¤2 c¥7 )¨6Ð3ˆØh‰h˜œB˜sG˜9 GÐß ‰3Ø L‰L˜$˜Ö  €Lr&cóZV^8„dQhR\PR\\,/#rY)rr"r[Úint)r#s"r$r%r%{s"÷ñ¤5§>¡>ð´d¼3µiñr&cóf.p\V4wr#VP\R48XdVPV4K2VP\R48XgKNVP \R44pVfKnVP \R44pVfVPV4 V#)
Encuentra los índices de todos los sectPr en el body.
Cada sectPr marca el FINAL de una sección (el contenido de la sección
está entre sectPr anteriores).
Devuelve lista de índices de hijos donde hay sectPr.
úw:sectPrr]rA)Ú enumerater,r6rfrD)rZÚ
boundariesÚir^rFÚsectPrs& r$Ú_find_section_boundariesrs{ð€Jܘd–O‰ˆØ 9‰9œ˜*›
Ô × Ñ ˜ Ø
Y‰Yœ!˜E
—**œQ˜w›ZÓ(ˆC،؟¤! J£-Ó0ØÔ×% aÖ Ðr&có]tRt^tRtRtR#)Ú DocxErrorz:Error relacionado con el procesamiento de documentos DOCX.©N)Ú__name__Ú
__module__Ú __qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__rvr&r$rurusÙr&rucó„a]tRt^˜toRtRRRR/t]V3RlRl4t]V3RlR l4t]V3R
lR l4t R t
Vt R
#)ÚSectionDetectoruˆ
Detecta las secciones clave en el template y el documento source
basándose en marcadores, estilos y contenido, sin números mágicos.
Ú
indice_finrÚtitulo_contenidorcó:<V^8„dQhRS[PRS[/#rY©rr"rl)r#Ú
__classdict__s"€r$r%ÚSectionDetector.__annotate__¤sø€÷(ñ(¡%§.¡.ð(±Sñ(r&c óâ\V4p\V4wr#VP\R48XgK!\ V4pVR8Xd\
P
RV4Vu#VR8Xd\
P
RV4Vu#\V4P4pVP4R8Xg\
P
RV4Vu# \V4EFwr#VP\R48XgK"\ V4p\V4P4pVR 9gKOV'gKY\\^V^,
4V4FpW,pVP\R48XgK'VP\R44pVfKGVP\R 44p V fKg\
P
R
V4Vuu# V^8”d V^,
u#^u# ^#)
Encuentra dónde termina el prefacio del template
(portada + disclaimer + índice).
Busca el marcador `TableContentEnd` o `ContentStart`.
También busca un salto de sección después del índice.
r]rz0 Marker 'TableContentEnd' encontrado en hijo %dÚ ContentStartz- Marker 'ContentStart' encontrado en hijo %dz<<CONTENT_START>>z/ Marker textual '<<CONTENT_START>>' en hijo %drArnu1 Salto de sección antes de Título 1 en hijo %d)rr
õ Título 1)
r[ror,r6rHÚlogÚdebugrWÚstripÚupperÚrangeÚmaxrD)
rZÚchildrenrqr^Ústyle_idrOÚ
prev_childÚprev_pPrrrs
& r$Úfind_end_of_prefaceÚ#SectionDetector.find_end_of_preface£s‰ô˜“:ˆÜ! (Ö+‰HˆAØy‰yœA˜eÓ.ØÐ—I‘IÐPÐRSÔ’Hؘ~Ô—I‘IÐMÈqÔ’HÜ$ UÓ3Ø—::“<Ð#6Ö—IOÐQRÔ" (×+‰Hˆy‰yœA˜eÓ.Ü$ +×3ØÐ@ÇTÁTä"¤3 q¨!¨a­%£=°!Ö4˜Ø%-¥[˜
Ø%Ÿ>™>¬Q¨u«XÖ5Ø'1§¡´q¸³zÓ'B˜3Ø)1¯©´q¸³}Ó)E Ø#)Ô#5Ü$'§I¡IÐ.aÐcdÔ$eØ+,¤Hñ%&¨¤E˜1˜q0¨qÒ0ñ!,ñ"r&có:<V^8„dQhRS[PRS[/#rYr)r#s"€r$r%r„Ïsø€÷!¡E§N¡Nð!±sñ!r&c óÞ\V4p\\V4^,
RR4pW,pVP\ R48XgK'\ V4pVR8Xd\ PRV4Vu#\V4P4pRVP49gRVP49gK˜\ PRV4Vu# \V4^,
#)
Encuentra dónde empieza la contraportada en el template.
Busca DESDE EL FINAL hacia el principio para encontrar la última
ocurrencia de 'RENOVABLES 360' o el marcador BackCover.
r]Ú BackCoverz0 Marker 'BackCover' en hijo %d (desde el final)zRENOVABLES 360z
RENEWABLE 360z4 Texto 'RENOVABLES 360' en hijo %d (desde el final)éÿÿÿÿ) r[Úlenr,r6rHrˆr‰rWr)rZrqr^rrOs& r$Úfind_back_cover_startÚ%SectionDetector.find_back_cover_startÎô˜“:ˆä”s˜8“} qÕ(¨"¨bÖ1ˆ•Kˆy‰yœA˜eÓ.ؘ—I‘IÐPÐRSÔ$ +×3Ø# t§z¡z£|ÔÈ$Ï*É*Ë,Ö7VÜ—I‘IÐTÐVWÔ’Hñ8}˜ Ð r&có:<V^8„dQhRS[PRS[/#rYr)r#s"€r$r%r„åsø€÷6ñ6¡§¡ð6±Cñ6r&c óF\V4pRpRp\V4FVwrEVP\R48XgK!\ V4pVR8XgK5RpV^,p\
P
RV4M V'\V4wrEVP\R48XgK!\ V4p\V4P4pVR9gKNV'gKX\P!RV4'g \P!RV4'gK”V^8”gK\
P
R WGR
,4Vu# \V4F”wrEVP\R48XgK!VP\R 44pVfKAVP\R 44p V fKa\
P
R
V4V^,p
V
\V48dV
u#M Vf3\\V4^,^
4p\
P
RV4V#)uz
Encuentra el primer elemento de contenido real en el documento source,
detectando dónde acaba el índice de RatedPower.
FNr]rTz+ Marker TableContentEnd en source, hijo %dz ^\d+\.?\sz^[IVXLCDM]+\.\su1 Primer título numerado en source hijo %d: '%s':Né2NrArnu% Salto de sección en source hijo %dz8 Fallback: contenido empieza en hijo %d (mitad del doc)©r
rr‡)r[ror,r6rHrˆr‰rWÚreÚmatchrDr™r) rZÚfound_toc_markerÚbestrqr^rrOrFrrÚ candidates & r$Úfind_content_startÚ"SectionDetector.find_content_startäô ˜“:ˆØ ÐØˆô" +‰Hˆy‰yœA˜eÓ.ØÐ0Ø'+Иq5—IKÈQÔñ Ü% hÖ/‘Ø—9‘9¤ %£Ö+¨EÓ2Ó/×7 Ð#DÖÉäŸ8š8 L°$×7¼2¿8º8ÐDVÐX\×;]Ô;]à  2žvÜ #§ ¡ Ð*]Ð_`ÐgjÕbkÔ lØ'(¢ñ" +‰Hˆy‰yœA˜e›HÖ—j‘j¤ 7£Ó,Ø”?Ø ŸX™X¤a¨
£mÓ4ÔŸ ™ Ð"IÈ1ÔMØ$%¨¥E˜ Ø$¤s¨8£}Ô4Ø#,Òñ Š<Ü”s˜8“}¨Õ)¨2Ó.ˆDÜ I‰IÐPÐRVÔ ˆ r&rvN) rwrxryrzr{Ú
MARKER_STYLESÚ staticmethodr“r|Ú__classdictcell__)s@r$r~r~˜s[ø‡ñð И€Mð
÷(óð(ðT÷ð!ð*÷6óö6r&r~cóPV^8„dQhR\PR\R\/#)rraÚ style_mapr )rr"r9rl)r#s"r$r%r%"s%÷ñœ5Ÿ>™>ð´¼sñr&có|^pVP\R44FpVP\R44pVfK#VP\R44pVfKCVP\R44pWa9gKeW,pV'gKwVP \R4V4V^,
pK V#)z<Reasigna estilos del source a los equivalentes del template.r]rArBrC)rer6rDrEÚset)raÚchangesr;rFrGÚold_valÚnew_vals&& r$Ú remap_stylesr±"s™à€GØ
]‰]œ1˜U
Øf‰f”Qw“ZÓ ˆØ Š;Ù Øœ!˜J›-ÓØ Š>Ù Ø—*‘*œQ˜w›ZÓØ Ö ØÕ(ˆG߉wØ
œ1˜W›: wÔ˜1• ñ €Nr&có0V^8„dQhR\R\/#)rÚfilenamer )r-rl)r#s"r$r%r%9s÷'œsð'¤sñ'r&cóx\P!RV4pV'd\VP^44#^#)z image(\d+)\.)r ÚsearchrlÚgroup)Úms& r$Úget_image_numberr¸9s+Ü
Š / ,€Aߌ3ˆqw‰wqz& &r&cóDV^8„dQhR\PR\/#)rÚz_tmplr )ÚzipfileÚZipFiler­)r#s"r$r%r%>s÷ ñ ¤g§o¡oð ¼#ñ r&có \4pVPR4p\V4pVF/pVPR4pV'gKVP V4K1 V# \
d\ PR4T#i;i)z3Encuentra todos los rIds existentes en el template.úword/_rels/document.xml.relsÚIdu= No se encontró word/_rels/document.xml.rels en el template)r­Úreadr*rEÚaddÚKeyErrorrˆÚwarning)Ú
existing_ridsÚtmpl_rel_contentÚtmpl_relr ris& r$Úfind_all_rids_in_templaterÇ>sä“E€MðUØ!Ÿ;™;Ð'EÓÜÐ.ˆÛˆ—''˜$“-ˆ‰sØ×! #Öð Ðøô ôUÜ Ð ÐðUúsŒ7AÁAÁ BÂBcó0V^8„dQhR\R\/#)rr )r­rl)r#s"r$r%r%Ms÷ñ¬3ð´r&cóì\4pVF>pVPR4'gKVP\VR,44K@ ^(pW19d V^,
pKV# \dKei;i)z&Encuentra el siguiente rId disponible.ÚrId:éNN)r­Ú
startswithrÁrlÚ
ValueError)Ú rid_numbersris& r$Úfind_next_available_ridrÏMsmô“%€KÛˆØ >‰>˜%× Ô ð
ؤ C¨¥G£ Öð€IØ
Ô
QŠ Ø Ðøôô
Úð
úsª!A$Á$ A3Á2A3cózV^8„dQhR\PR\\\P
3,/#)rÚz_srcr )rbr9rr")r#s"r$r%r%`s,÷
ñ
¤§¡ð
´U¼4ÄÇÁÐ;OÕ5Pñ
r&cóö\VPR44p/pVFUpVPR4pVPRR4PRR4pVPRR4pRV9gKQWRV&KW W!3#) zBProcesa las relaciones del source y devuelve (rid_info, rel_root).r¾r¿ÚTargetrMÚTypeÚimage)r*rEÚreplace)Úsrc_relÚsrc_ridsr riÚtargetÚrel_types& r$Úcollect_src_relationsrÝ`sy䘟
Ð#AÓC€GØ€HÛˆØg‰gd‹mˆØ˜ .¨t°SÓ9ˆØ—77˜6 &ˆØ  Ø"S ð Ð Ðr&có¾V^8„dQhR\PR\PR\R\R\P
R\ \\3,/#)rÚ src_startÚbody_srcr )r9rlrr"rb)r#s"r$r%r%msa÷GG O‰OðG ?‰?ðGðGð G
n‰nð G  Œ4”ˆ:Õñ
G,r&cóVP4Uu0uFpVPR4'gKVkK pp\V4p/p/p \4p
\ V4p /p \ V 4F3wrÞ\
V4pV'gKVUUu.uFwppVNK
uppWÍ&K5 .pVP4FwppRpV P4FwppVVgKVV9gKRpM V'gK@VPRR4pVPR4'gRV 2MTp\V4pVPVVV34K VP4\V4pVFwpppVPR^4^,pTpRV RV 2pVV9gVV
9dV^,
pRV RV 2pK!R V 2pVVV&V
PV4VV V&\P!R
VVVV4V^,pK W‰3#uupiuuppi)
Renombra imágenes del source para evitar colisiones con las del template.
Solo procesa imágenes de hijos >= src_start.
Devuelve (image_rename_map, rid_rename_map).
z word/media/FTú../rMúword/Ú.zword/media/imagerÊz %s -> %s (rId: %s -> %s))ÚnamelistrÌr­r[rorjÚitemsrØr¸rfÚsortrÏÚrsplitrÁrˆr‰) rºÚnameÚexisting_tmpl_mediarÄÚimage_rename_mapÚrid_rename_mapÚ generatedÚ children_srcÚsrc_images_by_childrqr^rgÚ_riÚ src_itemsÚold_ridÚ
rel_targetÚshould_processÚ child_indexÚridsÚrel_pathÚold_absÚold_numÚ next_rid_numÚextr¤Únew_absÚnew_rids &&&&& r$Úrename_source_imagesrþms0ð ŸÔÙ*Ø ?‰?˜=× 
ˆÑðô .¨fÓ5€MàÐØ€NÜ€Iô˜“>€LØÐô˜+‰ˆÜ" )ˆß ‰5Ù8=Ô%>¹©f¨a°£c¹Ò%>Ð Ó  €IØ'Ÿ~™~ÖˆàˆØ!4×!:Ñ!:Ö!<Ñ ˆK˜Ø˜'¨G°t®OØ!%Ùñ"=÷
‰>Ø!×)¨%°Ó4ˆHØ08×0CÑ0CÀG×0LÒ0L˜˜h˜(ÐRZˆ& /ˆ × Ñ ˜g w°Ð ‡Nô+¨=Ó9€Lã%.Ñ!ˆ˜n‰n˜S $ 'ˆØ ˆ Ø$ Y K¨q°°ÐØÐ¸9Ô0DØ ˜NˆIب °1°S°EÐ:ŠGð˜ Ø$+ИÑ
Ø")ˆÜ ‰ Ð0°'¸7ÀGÈWÔ  1•}Š ñ&/ð Ð +ùòwùó(&?sG7±G7 G<cóPV^8„dQhR\PR\R\/#)rraÚ source_titleÚsource_subtitler?)r#s"r$r%r%·s&÷ñ¤E§N¡NðÄ#ðÔX[ñr&cóÜVP\R44pVVpVP\R48XgK\V4pRV9gK3RV9gK<VP R\R4 24FgpVP
;'gRpRV9gK"VP
RV4pV'dVP
R V4pMVP
R R4pW†nKi R# R#R#)
u2Actualiza el título y subtítulo en el documento.úw:bodyNr]ÚClientez
Project TitlerKrLrMÚSubtitle)rDr6r,rWrTrO) rarrrZr^rOÚt_elemÚt_textÚnew_texts &&& r$Úupdate_document_titler ·ð =‰=œ˜8›Ó %€DØ ÒÛˆEØy‰yœA˜e›HÖ$ UÓ+à Ö¸DÖ)@à"'§-¡-°#´a¸³h°ZÐ0@Ö"A˜Ø!'§¡×!2Ð!2°˜Ø*¨fÖ4à'-§~¡~°oÀ|Ó'T˜.Ø+3×+;Ñ+;¸Ó+X¡à+3×+;Ñ+;¸Ó+K Ø*2žKñ#Bòó!ñr&cófV^8„dQhR\PR\\\3,/#)rÚ
source_xmlr )rr"rbr-)r#s"r$r%r%Ïs&÷'¤U§^¡^ð¼cÄ3¸ñ'r&cóVP\R44pV\V4pVpVP\R48XgK\ V4p\ V4P
4pVR9gKLV'gKV\P!RV4'gVR9dK|VPR4pV^,P
4p\V4^8”dV^,P
4MRpWx3u# R#) u4Extrae el título y subtítulo del documento source.rr]z^\d+$Ú
rM)uÃndiceÚIndexÚContentszTabla de contenido)uDocumento sin títulorM) rDr6r[r,rHrWr r2r™) r rZr^rrOÚlinesÚtitleÚsubtitles & r$Úextract_source_titlerÏà ?‰?œ1˜X›;Ó '€DØ Òܘ“:ˆÛˆEØy‰yœA˜e›HÖÓ.Ü$ +×3àÐ@ÇTÁTä—x’x ¨$×/°4Ð;qÔ3qÙ Ø ŸJ™J ,! !HŸN™NÓ,EÜ36°u³:À´>˜u QxŸ~™~Ô/Àr ˜ð &r&c
ó¤V^8„dQhR\\,R\\,R\\,R\R,R\/#)rÚ
template_pathÚsource_docx_pathÚ output_pathr«Nr )r-rr9)r#s"r$r%r%èsQ÷KñKÜœ•:ðKäœD•jðKô”t•ðKôd{ð Kô

ñ Kr&cófT;'g\p\V4p\V4p\V4pVP4'g\RV 24hVP4'g\RV 24h\P
!V4'g\RV 24h\P
!V4'g\RV 24h\P !\V4R4p\P !\V4R4p\VPR44p\VPR44p\VPR44p\V4wršVP\R44p VP\R44p V f \R
4hV f \R 4h\V 4p
\V 4p\Ws4p\P!R V4\#V 4p\%V4^8dR\P'R
\%V4^,4\(P+V 4p\(P-V 4pM8\P!R\%V4^,4V^,pV^,p\(P/V 4p\P!RV^,V4\P!RV4\1V4wpp\P!RV4V'd\P!RV4\3VVV4\5WEV VV 4wpp\P!R\%V44RRRR/pVP7R4FupVP8'gKVP8pVP;4F>wppVV9gKVP=VV4Vn\P?RVV4Ks Kw \V 4FpV PAV4K \%V4^V^,pV^,pV
R V^,F(pV PC\DPF!V44K* VVR F(pV PC\DPF!V44K* V
V^,R F(pV PC\DPF!V44K* M¶V
R V^,F(pV PC\DPF!V44K* VVR FDpVPH\R48wgKV PC\DPF!V44KF V
VR F(pV PC\DPF!V44K* \KV4F7wp p!V!V9gKV PMR\NR, R2VV!,4K9 /p"VPQ4F+p#VPV#PR4V"V#PR&K- VP;4Fwp$p%VPV$4p&V&V"V%&K \V"PWRVPR444p'\M4p(\V'4F/p)V)PWR4p*V*'gKV(PYV*4K1 /p+V
F#p)V)PWR4p*V*'gKV)V+V*&K% VP;4EFwp!p,V,V(9dKV+PWV!4p-V-fK'V-PWRR 4p.V.P=R!R 4p/V/P[R"4'gR"V/ 2p/VPWV/V/4p0V0P[R"4'dV0P=R"R 4MT0p1\DPF!V-4p2V2PMRV,4V2PMRV14V'PCV24V(PYV,4EK \\P^!V'R#R$R%7V"R&\\P^!VR#R$R%7V"R&\P !\V4R&\P`4;_uu_4p3V"P;4Fwp4p&V3PcV4V&4K R R R 4VPe4VPe4\P!R'V4V# \Td\P'RT$4Ei;i +'giLq;i TPe4TPe4i;i)(uL
Núcleo de la conversión: fusiona template + source en un solo documento.
zTemplate no encontrado: zDocumento no encontrado: u#El template no es un DOCX válido: u+El documento fuente no es un DOCX válido: rúword/document.xmlr¾rNzEl template no tiene bodyz!El documento fuente no tiene bodyz Estilos reasignados: %duV Template tiene %d secciones, se esperaban al menos 4. Usando detección por estilos.z# Template: %d secciones detectadasu2 Template: sección contenido entre hijos %d y %dz+ Source: contenido real empieza en hijo %du Título del source: %su Subtítulo del source: %su Imágenes renombradas: %dz \c "Figure"z \c "Figura"z
\c "Table"z
\c "Tabla"zG{http://schemas.openxmlformats.org/wordprocessingml/2006/main}instrTextz Campo TOC corregido: %s -> %srnr0rdz/ Imagen no encontrada en source: %s (ignorada)r¿rMTzUTF-8)Úxml_declarationÚencodingru ✅ Convertido: %s)3ÚDEFAULT_STYLE_MAPrÚexistsruÚ
is_zipfiler¼r-r*rDr6r[rˆÚinforsr™r~r“rr rerOr‰ÚremoverfÚcopyÚdeepcopyr,rjr­r3Úinfolistr³rErÚtostringÚ ZIP_DEFLATEDÚwritestrÚclose)5rrrÚtmpl_xmlÚsrc_xmlrÆÚ body_tmplràÚ
children_tmplrîÚ
tmpl_sectionsÚ tmpl_idx_endÚ tmpl_backrßrrÚ toc_fixesÚinstrÚoriginalÚoldÚnewr^Úsec3_endÚsec4_endrhÚout_dataÚitemrørÚrel_rootrÄr riÚsrc_rel_by_ridrýÚ src_rel_elemrÛÚold_target_absÚnew_target_absÚ
new_targetÚnew_relÚzoutÚfnames5&&&& r$Úreplace_contentrAèð×.€IܘÓ'€MÜÐÜ#€Kð × Ñ × Ð2°=°/Ð × "× Ð3Ð4DÐ3EÐ × Ò ˜m× Ð=¸m¸_Ð × Ò Ð ÐEÐFVÐEWÐ
_Š_œS ÓÓ
5€FÜ OŠOœCÐ 0Ó1°3Ó 7€Eðmä˜VŸ[™[Ð)<Ó>ˆÜ˜EŸJ™JÐ':Ó<ˆÜ˜VŸ[™[Ð)GÓÜ1°%Óˆà—M‘M¤! H£+Ó.ˆ Ø—< (£ Ó,ˆà Ò ÜÐ Ò ÜÐ ˜Y›ˆ
ܘH“~ˆ ô˜wÓÜ Ð,¨gÔ
Ó;ˆ
ä ˆ}Ó  Ô K‰KÐpÔruðwDósEðFGõsGô
HÜ*×>¸Iˆ'×=¸H‰Iä H‰HÐ:¼CÀ
Ó<NÈqÕ<PÔ Õ+ˆ% (ˆIä6°xÓ@ˆ ä ÐEÀ|ÐTUÅ~ÐW`Ô Ð>À Ô)=¸WÓ(EÑ%ˆ  Ð+¨\Ô Ü H‰HÐ2°OÔ  ˜h¨ °oÔ,@Ø ˜8 Y°ó,
ј.ô ÐÐ4DÓ0EÔ
˜ ˜
ˆ ð—]‘]Ð%nÖpˆEØzzŠzØ Ÿ:™:Ø )§¡Ö 1‘Hؘh–Ø%-×%5Ñ%5°c¸3Ó%?˜œ
ÜŸ ™ Ð"CÀSÈ#Ôó !2ñqô˜)–_ˆEØ × Ñ ˜UÖ  ˆ  Ô % 'ˆ$ 'ˆ& °1­ Ó5Ø× Ñ ¤§¢¨uÓ!5Ö& i 1à× Ñ ¤§¢¨uÓ!5Ö
' x°!¥| 5Ø× Ñ ¤§¢¨uÓ!5Ö'Ð'8¨ °qÕ(8Ó9Ø× Ñ ¤§¢¨uÓ!5Ö% i 1Ø—9 
Ö×$¤T§]¢]°5Ó%9Ö' y 2Ø× Ñ ¤§¢¨uÓ!5ÖÖ9‰MˆD˜˜2œb g˜Y gиwÕ0GÖ
ˆð—O%ˆDØ&,§k¡k°$·-±-Ó&@ˆHT—] !1× 6Ñ 6Ö 8Ñ ˆG
XØŸ*™* WÓ-Ø$+˜Ó!9ô˜XŸ\™\Ð*HÈ&Ï+É+ÐVtÓJuÓwˆôˆ
ܘ>ˆ—''˜$“-ˆ‰sØ×!  ˆÛˆ—''˜$“-ˆ‰sØ&)˜ð !/× 4Ñ 4× ˆG˜Ø)×-¨gÓ6ˆLØÒà% h°Ó3ˆFØ#Ÿ^™^¨E°2Ó6ˆNØ,¨W×5Ø#(¨Ð(8Ð!9Ø-×1°.À.ÓQˆNØ@N×@YÑ@YÐZa×@bÒ@b˜×¸Ô<Ðhvˆ—mm 1ˆ K‰K˜˜ K‰K˜  O‰O˜GÔ × Ñ ˜g× &ñ%!7ô(49·>²>Ø  d°Wô4>ˆÐ0ä(-¯ªØ  d°Wô)>ˆÐ_Š_œS Ó-¨s´G×4HÑ4H×
IÈTØ"*§.¡.Ö"2
˜e #3÷Jð
 ί
Œ