
    g6j                    0   d dl mZmZ d dlZd dlmZmZmZmZm	Z	m
Z
mZmZ d dlmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZ d dl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( d d	l)m*Z* d d
l+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZI d dlJmKZK d dlLmMZM d dlNmOZO d dlPmQZQ d dlRmSZS d dlTmUZU d dlVmWZW d dlXmYZY d dlZm[Z[ d dl\m]Z] d d l^m_Z_ d d!l`maZa d d"lbmcZc d d#ldmeZe d d$lfmgZg d d%lhmiZi d d&ljmkZk d d'llmmZm d d(lnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d d)lmZ d d*lmZmZmZmZmZmZmZ d d+lmZ d d,lmZ d d-lmZ d dlZd dlZd dlZd dlZd dlZd d.lmZmZ d d/lmZ d d0lmZmZ  ej                  eǫ      Z	 dd1ed2ed3ee   d4ed5ee   d6efd7Z	 dd8ed1ed2ed3ee   d5ee   d6dfd9Z	 	 dd:ed1ed2ed;ee   d<ed=ee   d>ee   d?ee   d@ee   dAed6epfdBZdCed:ed6efdDZd:ed1ed6ee   fdEZd dlZd dFlmZmZ  edGdHgI      Zeאj                  dJ       e
em      fd1ed:efdK       Zeאj                  dL       edM       e
ej                        fdNedOefdP       Zeאj                  dQ       edM       e	ddRS       eddTdUdVW       edd dXY       edd dZY       e
e       e
em      fd1edCedNed[ee   d5ee   d?ee   d>ee   d\ed:efd]       Zeאj                  d^       e
e       e
em      fd_ed\ed:efd`       Zd1ed:ed6efdaZd:ed>ed6eeeeef      eeef   fdbZd>ed:efdcZeאj                  dd       e
em       e
e      fd>ed:ed\efde       Zeאj                  df       e
em       e
e      fd>ed:ed\efdg       Zeאj                  dh       e
em       e
e      fd>ed:ed\efdi       Zddjedkee   d6efdlZd:edmee   dnee   d6efdoZeאj                  dp       e
e       e
em      fd1edqed\ed:efdr       Zeאj                  ds       e
e       e
em      fd1edqed\ed:efdt       Zeאj                  du       e
e       e
em      fd1edqed\ed:efdv       Zeאj                  dw       eddxS       e
em      fd1edCedyee   d:efdz       Zeאj                  d{      d|efd}       Zeאj                  d~      defd       Zeאj                  d       edddid       e
e      fdqed\efd       Zy)    )OptionalAnyN)	APIRouterstatus
UploadFileFileFormDependsBodyQuery)JSONResponseFileResponseResponse)DocumentsClass)$clone_register_book_section_b_blocks"clone_course_record_support_tablesclone_pai_support_tablesexpand_raeg_intervention_rows expand_learning_achievement_rows-apply_learning_achievement_period_top_spacing#clone_course_activity_record_blocks&clone_course_community_activity_blocks clone_course_acta_reunion_blocksexpand_rafc_participant_rowsexpand_tcee_participant_rowsexpand_arn_participant_rows)_load_attendees_row_to_dictattendee_phone_cellattendee_rut_cellattendees_rafcnia_lineattendees_rafcnit_line)StudentClass)HealthEvaluationClass)ProgressStatusStudentClass)$ProgressStatusIndividualSupportClass)StudentGuardianClass)IndividualSupportPlanClass)FonoaudiologicalReportClass),SchoolIntegrationProgramExitCertificateClass)AnamnesisClass)FamilyReportClass)InterconsultationClass)"GuardianAttendanceCertificateClass) PsychopedagogicalEvaluationClass)AC_CONTENT_CONTROL_HOLDCHART_PLACEHOLDERinject_evalua_matrix_word_table(inject_image_into_content_control_by_tag(insert_chart_placeholder_paragraph_imageparse_evalua_psychoped_matricesrender_evalua_pt_line_chart_png!strip_chart_placeholder_from_docx)ConnersTeacherEvaluationClass)	CespClass)ActionIncidentClass)IdtelReportClass) PsychomotorEvaluationReportClass)InformalTestTemplateClass)-PedagogicalEvaluationClassroomFirstGradeClass).PedagogicalEvaluationClassroomSecondGradeClass)-PedagogicalEvaluationClassroomThirdGradeClass).PedagogicalEvaluationClassroomFourthGradeClass)-PedagogicalEvaluationClassroomFifthGradeClass)-PedagogicalEvaluationClassroomSixthGradeClass)/PedagogicalEvaluationClassroomSeventhGradeClass).PedagogicalEvaluationClassroomEighthGradeClass)6PedagogicalEvaluationClassroomFirstGradeSecondaryClass)7PedagogicalEvaluationClassroomSecondGradeSecondaryClass)#ProfessionalDocumentAssignmentClass)get_db);BirthCertificateDocumentModelFolderModelDocumentModelGenderModelNationalityModelProfessionalModel	UserModelStudentModelProfessionalTeachingCourseModelCoordinatorsCourseModelMeetingSchedulalingModel MeetingSchedualingAgreementModel+MeetingSchedualingRegisterProfessionalModelDiversifiedStrategyModelCollaborativeWorkModelSupportOrganizationModelDiversityCriterionModelDiversityStrategyOptionModelCourseDiversityResponseModel#CourseDiversityResponseStudentModelCourseDiversityObservationModelAdjustmentAspectModelCourseAdjustmentModelCourseAdjustmentStudentModelCurricularAdequacyTypeModelCourseCurricularAdequacyModel$CourseCurricularAdequacySubjectModel$CourseCurricularAdequacyStudentModelEvalDiversityTypeModelCourseEvalDiversityModel#CourseEvalDiversityObservationModelCourseIndividualSupportModel#CourseIndividualSupportStudentModel FamilyCommunityStrategyTypeModelCourseFamilyCommunityModel%CourseFamilyCommunityObservationModel CourseTeacherRecordActivityModel#CourseTeacherRecordObservationModelCourseRecordSupportModelCourseRecordSupportStudentModel$CourseRecordSupportInterventionModelCourseLearningAchievementModelCourseActivityFamilyModelCourseActivityCommunityModelCourseActivityOtherModel+DifferentiatedStrategiesImplementationModelSubjectModelFamilyMemberModelCourseModelSchoolModelStudentAcademicInfoModelStudentPersonalInfoModelCommuneModelRegionModelSpecialEducationalNeedModelStudentGuardianModelInterconsultationModelSupportAreaModel$PsychopedagogicalEvaluationInfoModel)get_current_active_user)	UserLoginCreateDocumentRequestDocumentListRequestUploadDocumentRequestPaciProgressStatePdfRequest#PaciIntegralProgressStatePdfRequestPaciFullPdfRequest)Session)func)Path)datetimedate)defaultdict)professional_display_fields#map_professional_id_to_display_name
student_idcatalog_document_iddocument_type_idfile_extensionperiod_yearreturnc           	          |xs dj                         }|j                  d      sd| }|t        |      nd}||  d| d| dt        |       | S |  d| d| | S )u   
    Nombre estable en disco para el mismo estudiante + documento del catálogo (+ año escolar si aplica).
    Al regenerar o volver a subir, se sobrescribe el mismo fichero.
    .pdf.r   __y)lower
startswithint)r   r   r   r   r   extdts          E/var/www/pie360backend.cl/public_html/app/backend/routes/documents.py$_canonical_student_document_filenamer      s     #V
*
*
,C>>##i"2">	ABQ231RD3{;K:LSERR\./qSE::    resultc                    | j                  d      dk(  s| j                  d      syt        | d         }|j                         r|j                  j	                         dk7  ryt        d      t        |||d|      z  }|j                  j                  dd       	 |j                         |j                         k(  r|j                  | d	<   y|j                         r|j                          t        t        |      t        |             t        |      | d<   |j                  | d	<   y# t        $ r t        j!                  d
|d       Y yw xY w)uk   Si hay un PDF generado en `result`, lo deja en la ruta canónica (sobrescribe destino). Mutación in-place.r   error	file_pathNr   files/system/studentsTparentsexist_okfilenamez&No se pudo mover PDF a ruta estable %s)exc_info)getr   is_filesuffixr   r   parentmkdirresolvenameexistsunlinkmovestrOSErrorloggerwarning)r   r   r   r   r   srcdests          r   _coerce_pdf_to_stable_storager      s     zz(w&fjj.E
vk"
#C;;=CJJ,,.&8'(+O')96;, D 	KKdT2
V;;=DLLN*!%F:;;=KKMSXs4y!!$i{!YYz V?PTUVs   0D) AD) )!EEdb
period_strcanonical_filename	school_id	course_idprofessional_id	detail_idalways_new_versionc
                 B   t        d      }
| j                  t              j                  t        j                  |k(  t        j
                  |k(        }|"|j                  t        j                  |k(        }|j                  t        j                  j                               j                         }|	r1| j                  t        j                  t        j                  t        j                        d            j                  t        j                  |k(  t        j
                  |k(        }|"|j                  t        j                  |k(        }t        |j                         xs d      }|dz   }t        |||||||xs d||t!        j"                         t!        j"                         d      }| j%                  |       | j'                          | j)                  |       |S |r|j*                  xs dj-                         }|r+||k7  r&	 |
|z  }|j/                         r|j1                          ||_        ||_        ||_        |xs d|_        |||_        ||_        t!        j"                         |_        | j'                          | j)                  |       |S t        ||||d||xs d||t!        j"                         t!        j"                         d      }| j%                  |       | j'                          | j)                  |       |S # t2        $ r Y w xY w)uO  
    Por defecto: actualiza la última fila folders del mismo estudiante/documento/período
    con el nombre canónico, o inserta versión 1 si no existe.

    Si always_new_version=True (p. ej. catálogo 42 Evalua): siempre INSERT con version_id
    incrementado; no sobrescribe la última versión ni borra el fichero anterior.
    r   Nr      )r   r   r   document_id
version_idr   r   filer   
added_dateupdated_datedeleted_date )r   queryrK   filterr   r   r   order_byr   descfirstr   coalescemaxr   scalarr   nowaddcommitrefreshr   stripr   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   
upload_dirlv_qlast	max_ver_qmax_vernext_verrecold_fnops                      r   _upsert_folder_student_documentr      s   & -.J88K ''*,#66D {{;22j@A==//4467==?DHHT]]488K4J4J+KQOPWW""j0##'::
	 !!(()@)@J)NOIi&&(-A.Q;!++0q#"||~!
 	s
		


3
))/r((*f 22&(::<IIK '	"".3! &DN%$LLN
		


4
'',1<<>\\^C FF3KIIKJJsOJ=  s   %L 	LLr   c                     |j                  t              j                  t        j                  | k(  t        j                  j                  d            j                         }t        |xr! |j                  xs dj                         dk(        S )uc   True si `document_id` es la fila del catálogo `documents` para Informe de evaluación psicomotriz.Nr   u"   Informe de evaluación psicomotriz)
r   rL   r   idr   is_r   booldocumentr   )r   r   rows      r   ._catalog_row_is_informe_evaluacion_psicomotrizr   -  so     		  K/1K1K1O1OPT1U	V	 
 \+2248\\]]r   c                    h d}t        d      }| j                  t              j                  t        j                  |k(        j                  t        j                  j                               j                         }|rt        |dd      ru|j                  xs dj                         }|rUt        |      j                  j                         |v r0||z  }	 |j                         rt        |j!                               S 	 | j                  t$              j                  t$        j                  |k(  t$        j&                  dk(  t$        j(                  j+                  d      t$        j,                  j/                  d            j                  t$        j0                  j                               j3                         }|D ]y  }|j(                  xs dj                         }|r%t        |      j                  j                         |vrI||z  }	 |j                         rt        |j!                               c S { y# t"        $ r Y Gw xY w# t"        $ r Y w xY w)u   
    Ruta absoluta de la imagen IV (cuantitativa): primero `psychopedagogical_evaluation_info.cognitive_quantitative_image_file`,
    si no hay o el archivo falta, la última imagen en `folders` para documento 27.
       .bmp.gif.jpg.jpeg.webp.pngr   !cognitive_quantitative_image_fileNr      )r   r   r   r   r   r   r   r   r   getattrr   r   r   r   r   r   r   r   rK   r   r   isnotr   r   r   all)	r   r   
image_extsbaseinfofnprowsr   s	            r   %_psychoped_doc27_cognitive_image_pathr  7  s   
 DJ'(D
56	4??:M	N	699>>@	A		 	 A4H44:AAC$r(//'')Z7r	A99;qyy{++ 
 		""j0##r)""4($$((.	

 
+((--/	0	 	  	hhn"##%T"X__**,J>2I	yy{199;'' 	 /  *  		s$   (H= (I=	I
	I
	II)copyr   z
/documents	Documents)prefixtagsz/debug/doc19/{student_id}c                   K   	 t        |      }|j                  |       }t        |t              r4|j                  d      s|j                  d      dk(  rt	        dddi      S t        |      }|j                  |       }t        |t              r#|j                  d      dk(  rt	        dddi      S |j                         }|j                  dd       |j                  d	d       |j                  d
d       t        |t              r|j                  di       ni }|j                  d      xs i }|j                  d      xs i }	|j                  d      xs dj                         s]|j                  d      xs d d|j                  d      xs d d|j                  d      xs d j                         }
|
r|
nd|  |d<   |j                  d      xs dj                         s+|j                  d      xs |j                  d      xs d|d<   |j                  d      xs dj                         s%|j                  d      r|j                  d      |d<   |j                  d      xs dj                         s|j                  d      r	 t        j                  t        |j                  d            d      j                         }t        j                         j                         }|j                  d      r1	 t        j                  t        |d         d      j                         }|j                   |j                   z
  }|j"                  |j"                  z
  }|dk  r
|dz  }|dz  }|dkD  r| d|dk7  rd nd n| d!|dk7  rd"nd |d<   |j                  d#      s;|j                  d$      xs dj                         s|j                  d#      }|r||d#<   |j                  d%      s%|	j                  d&      r|	j                  d&      |d%<   |j                  d'      s%|	j                  d(      r|	j                  d(      |d'<   |j                  d)      s|j%                  t&              j)                  t&        j*                  | k(        j-                  t&        j.                  j1                               j3                         }|r|j.                  |d)<   |j                  d#      ru|j%                  t4              j)                  t4        j.                  |d#   k(        j3                         }|r|j6                  r|j6                  |d$<   |j                  d#d       |j                  d$      xs dj                         st|j                  d#      rc|j%                  t4              j)                  t4        j.                  |d#   k(        j3                         }|r|j6                  r|j6                  |d$<   |j                  d%      }|ru|j%                  t8              j)                  t8        j:                  dk(  t8        j.                  |k(        j3                         }|r|j<                  r|j<                  nd|d*<   nd|d*<   |j                  d%d       |j                  d'      }|rc|j%                  t>              j)                  t>        j.                  |k(        j3                         }|r|j@                  r|j@                  nd|d+<   nd|d+<   |j                  d'd       |j                  d)      }|r?|j%                  t&              j)                  t&        j.                  |k(        j3                         }|r|jB                  xs d d|jD                  xs d d|jF                  xs d j                         |d,<   |jH                  xs d|d-<   |jJ                  rm|j%                  tL              j)                  tL        j.                  |jJ                  k(        j3                         }|r|jN                  r|jN                  nd|d.<   nKd|d.<   nE|j                  d/      xs d|d,<   d|d-<   d|d.<   n"|j                  d/      xs d|d,<   d|d-<   d|d.<   |j                  d)d       |j                  d/d       d0d1d2d3d4}|j                  d5      }||j                  |      nd|d6<   t	        d7d8|i      S # t        $ r Y w xY w# t        $ r Y w xY w# t        $ r"}t	        d9dt        |      i      cY d}~S d}~ww xY ww):uL   Devuelve los datos que se enviarían al PDF del documento 19 (para depurar).r   r     Estudiante no encontradostatus_codecontentz>No hay progress_status_individual_support para este estudianter   Nr   r   student_datapersonal_dataacademic_infostudent_full_namer   names father_lastnamemother_lastnameEstudiante student_identification_numberidentification_numberstudent_born_date	born_datestudent_age%Y-%m-%dprogress_dater   r          años mesesr   student_schoolstudent_course_idr   student_nee_idspecial_educational_need_idguardian_relationship_idcourse_namenee_nameguardian_fullnameguardian_rutguardian_relationshipguardian_name1er Trimestre2do Trimestre1er Semestre2do Semestrer            	period_idperiod_label   data  )(r#   r   
isinstancedictr   r&   get_by_student_idr  popr   r   strptimer   r   r   	Exceptionyearmonthr   r   r   r   r   r   r   r   r{   school_namerz   deleted_status_idr*  r   special_educational_needsr  r  r  r  family_member_idry   family_member)r   r   student_servicestudent_result
ps_service	ps_resultps_datar  personalacademic_fnbornrefyearsmonthssidg_firstschoolr   coursenee_idneeguardian_idgfmperiod_labelspides                               r   debug_doc19_datarb  n  s    eH&r*(,,Z8nd+1C1CG1LP^PbPbckPlpwPwC'C]9^__9"=
00<	i&9==+Bg+MC'  DD  :E  F  F.."D$L$'ND)AKN\`Aa~))."=gi##O4:##O4:/06B==?\\'*0b18<<@Q3R3XVX2YYZ[c[g[ghy[z  \A  A  [B  C  I  I  KC253[;UG'(;<BIIK7?||D[7\  8P`l`p`p  rI  aJ  8P  NPG34/06B==?HLLQ\D]+3<<+DG'(M*0b779hll;>W((X\\+-F)GTYY[lln))+;;/&//GO4L0MzZ__a 499,TZZ/A:QJEbLFW\_`W`E7%uzr7R)Siohppt  ~D  HI  ~Iuy  OQ  uR  gS& {{;'=M1N1TRT0[0[0]"";/C'*${{./HLL4M+3<<+DG'({{+,>[1\(05R(SG$%{{56hh34;;<P<[<[_i<ijss  uI  uL  uL  uQ  uQ  uS  T  Z  Z  \G6=jj23;;{#XXk*11+..GKDX2XY__aF&,,,2,>,>()KKT*,-3::<AQAQR]A^XXk*11+..LQ\D]2]^ddfF&,,,2,>,>()KK 34	XXk*11+2O2OST2TVaVdVdhqVqrxxzF;AfFXFXV%7%7^`GM"%'GM"'.-.((67>>?Z?]?]ag?ghnnpCCF3KhKh#"?"?npGJ"$GJ$d+kk"<=-.556J6M6MQ\6\]cceA23''-R!BSBSBYWYAZZ[\]\m\m\sqs[t/u/{/{/}+,*+*A*A*GR'%%"34;;<M<P<PTUTfTf<fgmmoBKMRTRbRbr7G7GhjG3479G34/6{{?/K/Qr+,*,'35/0+2;;+G+M2G'(&(GN#/1G+,.5OT*+NWefkk+&<?O-"3"3C"8QSfg5FGGK %   |  Hgs1v5FGGHs   eAd" #e$Ad" 2e3G d" A/d 0d 4A%d U(d" e	dd dd 	dd" dd" "	e+eeeeez/create.r   document_datac           	        K   d}	 | j                   j                  d      st        t        j                  dddd      S t        j                  dd      5 }| j                          d{   }|j                  |       |j                  }ddd       |j                  }|j                  }t        j                  ||	      }|r4t        j                  j!                  |      rt        j"                  |       |d
   dk(  r"t        t        j$                  d|d   dd      S t'        |d   |d   d      }t)        |      |j*                  d<   |S 7 # 1 sw Y   xY w# t,        $ rt}	|r=t        j                  j!                  |      r	 t        j"                  |       n#  Y nxY wt        t        j$                  ddt)        |	       dd      cY d}	~	S d}	~	ww xY ww)z
    Crea un documento procesado a partir de un PDF subido.
    Reemplaza [STUDENT_NAMES] con el nombre del estudiante proporcionado.
    Nr     zEl archivo debe ser un PDFr   messager;  r  F)deleter   )original_file_pathstudent_namer   r   r<  rg  r   r   application/pdfpathr   
media_typezX-Document-Type-IdzError general: )r   endswithr   r   HTTP_400_BAD_REQUESTtempfileNamedTemporaryFilereadwriter   rj  r   r   parent_authorizationosrm  r   r   HTTP_500_INTERNAL_SERVER_ERRORr   r   headersrB  )
r   rc  temp_file_path	temp_filer  rj  r   r   responsera  s
             r   create_documentr|    s     NA
}}%%f-"77!;   ((fE 	, IIK'GOOG$&^^N	, %11(9944-%
 bggnn^<IIn%(w&"AA!%i0    $J'(

 255E1F-.E (	, 	,J  
bggnn^<		.)==,SVH5
 	

s   G 9E  G  E  E+E,!EBE  #G $-E  G EEE   	G)!GF! G!F%#/GGG GG z"/upload/{student_id}/{document_id}uI   Título del informe (obligatorio para documento catálogo 42 – Evalua).)descriptioni  i4  uA   Año del período escolar (query; enviado por interceptor/cookie))geler}  z5Profesional que sube el archivo (asignaciones Pie360))r~  r}  zFCurso del estudiante; si no viene, se usa academic_info del estudiantetitlesession_userc	                 Z  K   	 t        |      }	|	j                  |       }
t        |
t              rg|
j                  d      s|
j                  d      dk(  rBt	        t
        j                  d|
j                  d      xs |
j                  dd      dd      S |
j                  d	i       }|j                  d
      xs t        |       }|j                  t              j                  t        j                  |k(  t        j                  j                  d            j                         }|s"t	        t
        j                  dd| dd      S |j                  }t!        |      dk(  r5|xs dj#                         }|st	        t
        j$                  dddd      S |j&                  r-t)        |j&                        j*                  j-                         nd}t/        | ||||      }t)        d      }|j1                  dd       ||z  }|j3                          d{   }t5        |d      5 }|j7                  |       ddd       t        |t              rt!        |j                  d      xs d      nd}t        |t              r|j                  d      xs i ni }t        |t              rt!        |j                  d      xs d      nd}t!        |xs d      xs t!        t9        |dd      xs d      xs d}t!        |xs d      xs/ t!        |xs d      xs t!        t9        |dd      xs d      xs d}t!        |xs d      xs: t!        t9        |dd      xs d      xs t!        t9        |dd      xs d      xs d}|t        |      nPt        t9        |dd      xs d      j#                         xs' t        t;        j<                         j>                        }d}|dk(  r|j                  t@              j                  t@        jB                  | k(        jE                  t@        j                  jG                               j                         }|r6||_$        t;        j<                         |_%        t!        |j                        }nitA        | |t;        j<                         t;        j<                               }|jM                  |       |jO                          t!        |j                        }t!        |      dk(  rddl(m)}  ||      } | jU                  | t!        |      |xs dj#                               }!t        |!t              rC|!j                  d      dk(  r/t	        t
        jV                  d|!j                  dd      dd      S t!        |!j                  d      xs d      xs d}|}"tY        || ||"|||||t!        |      dk(   
      }#|#jZ                  }$|d!k(  r|d"v r	 |j                  t\              j                  t\        jB                  | k(        jE                  t\        j                  jG                               j                         }%|%r0||%_/        t;        j<                         |%_0        |jc                          	 t        |t              r|j                  d      xs i ni }&|rt!        |      dkD  rt!        |      nd}'|'<t        |&t              r,|&j                  d      }(|(t!        |(      dkD  rt!        |(      }'ti        |      jk                  || t!        |      t!        |      |t!        |      nd|'#       t	        t
        jl                  d$d%|#j                  ||$| ||t        |      |j&                  d&d      S 7 # 1 sw Y   bxY w# td        $ r |jg                          Y 3w xY w# td        $ r Y w xY w# td        $ rE})|jg                          t	        t
        jV                  dd't        |)       dd      cY d})~)S d})~)ww xY ww)(z+
    Sube un documento (PDF o imagen).
    r   r   r  rg  r  Nrf  r  r  r  u*   No se encontró documento con document_id *   r   re  u1   Debe enviar el título del informe (campo title).r   Tr   wbr   r   r  r   r   customer_idr   r   )r   birth_certificater   r   )EvaluaResultClassr<  u'   Error al guardar el título del informe)r   r   r   r   r   r   r   )r   r   document_catalog_idr   r   r      zDocumento subido exitosamente)r   r   r   r   r   r   r   original_filenamezError subiendo archivo: )7r#   r   r=  r>  r   r   HTTP_404_NOT_FOUNDr   r   rL   r   r   r   r   r   r   r   r   rp  r   r   r   r   r   r   rs  openrt  r   r   r   rC  rJ   r   r   r   r  r   r   flush'app.backend.classes.evalua_result_classr  upsert_titlerw  r   r   r   r   
updated_atr   rB  rollbackrH   "mark_completed_after_folder_uploadHTTP_201_CREATED)*r   r   r   r  r   r   r   r  r   rJ  rK  r  r  r   r   t0r   unique_filenamer   r   r  fstudent_school_idr  r&  resolved_school_idresolved_course_idresolved_professional_idresolved_period_yeardetail_id_value	birth_rowr  svcres_42r   
new_foldernew_version_ideval_rowairesolved_coursecra  s*                                             r   upload_documentr  )  s    >F
&r*(,,Z8nd+1C1CG1LP^PbPbckPlpwPw"55!-11':wn>P>PQZ\v>w   &))."=(4(8(89P(Q(dUXYcUd% 88M*11+&&**40
 %' 	
 "55!!KK=Y   $44{r!+2$$&B# & ; ;"%#V $  @D}}dmm,3399;RT ?%5~{
 12
50			#)T" 	aGGG	 HRR^`dGeC 0 0 = BCklEOP\^bEc))/:@bikHRS`bfHgC 1 1+ > C!Dmn !2!7a8sCVacd@e@jij<ksos a0  KC8I8NQ4O  KSVW^_kmxz{W|  XB  AB  TC  K  GK$1% 7<q16Q77<:?a@ 	 	! & W\="=CDJJLhPST\T`T`TbTgTgPh 	 *.!675@@JNO7::??AB	  .=	+)1	&"%ill"39)&5'||~!)		 y!
"%ill"3{r!Q#B'C%%j#k2BU[bDWDWDYZF&$'FJJx,@G,K# & E E"%#)::i9b#c $  "&**T"2"7a8@DO)
4((4% #K 0B 6

 $.."3e!eHHABV@KKzYZXBEEJJLMUW	  APH>*2,,.H'IIK
	>HW[>\,""?39rbdB09c)nq>Pc)nVZO&:b$+?FF;'=SVaZ&)!fO/3VV'%$'$4!$%5!68G8SO 4Y]) W  //:$--#."0",(8 /!$Y)-	
 	
] $	 	n  &  		*  	

==5c!fX>
 	
	
s   `+B_ `+B4_ `+A_ `+B _ ^_ ,^>M_ `+A_ 4B ^+ C_ A_ `+_ ^(#_ +__ __ 	__ __ 	`(#:`#`(`+#`((`+z/listfiltersc           	        K   	 t        |      }|j                  | j                  | j                        }t	        |t
              rC|j                  d      dk(  r/t        t        j                  d|j                  dd      dd      S t        t        j                  d	|rd
nd|d      S # t        $ r5}t        t        j                  ddt        |       dd      cY d}~S d}~ww xY ww)zZ
    Lista los documentos configurados, devolviendo solo document_type_id y document.
    r   r   r<  rg  zError listando documentosNrf  r  r:  zDocumentos encontradoszNo hay documentos registradoszError listando documentos: )r   get_allr   career_type_idr=  r>  r   r   r   rw  HTTP_200_OKrB  r   )r  r  r   	documentsr;  ra  s         r   list_documentsr    s     
"2&	  !9!97;Q;QRdD!dhhx&8G&C"AA!#xx	3NO   **7;3A`
 	
  
==8QA
 	

sA   C,BB+ C,"B+ *C,+	C)4*C$C)C,$C))C,c                 `   	 t        |      }|j                  |       }t        |t              r+|j                  d      s|j                  d      dk(  rddddS |j                  di       xs i }|j                  di       xs i }|j                  di       xs i }|j                  d	d
      xs d
 d|j                  dd
      xs d
 d|j                  dd
      xs d
 j	                         }|sd|  }d
}d
}	d
}
|j                  d      }|r	 t        |t
              rJt        t        |            dk\  r0t        j                  t        |      dd d      j                         nd}nt        |d      r|j                         n|}|rt        |d      r|j                  d      n
t        |      }t        j                         }|j                  |j                  z
  |j                  |j                  f|j                  |j                  fk  z
  }	|j                  |j                  z
  dz  |j                  |j                  z
  z   }|j                  |j                  k  r|dz  }|dz  }
t        |	      }	t        |
      }
n|rt        |      nd
}d}d}|j                  d      }|r|r|j#                  t$              j'                  t$        j(                  |k(        j+                         }|r=|j,                  r1t        |j,                        j/                         j	                         nd
}|r-d|v s|dk(  sd|v sd|v rd\  }}nd|v s|d k(  sd!|v sd"|v rd#\  }}d
}|j                  d$      r|r|j#                  t0              j'                  t0        j(                  |j                  d$      k(        j+                         }|r/|j2                  r#t        |j2                        j	                         }t        |j                  d%      xs d
      j	                         }t        |j                  d&      xs d
      j	                         }t        |j                  d'      xs d
      j	                         }t        |j                  d(      xs d
      j	                         }d
}d
}|r|j                  d)      }|r|j#                  t4              j'                  t4        j6                  d*k(  t4        j(                  |k(        j+                         }|r't        |j8                  xs d
      j	                         nd
}|j                  d+      }|rn|j#                  t:              j'                  t:        j(                  |k(        j+                         }|r't        |j<                  xs d
      j	                         nd
}d
x} x}!x}"}#d
x}$x}%x}&}'t?        |      }(|(jA                  |       })t        |)t              r|)j                  d      dk7  rd, }*|)j                  d-      xs g }+|)j                  d.      xs g }, |*|+d/      s	 |*|+d0      rd1}  |*|+d2      s	 |*|+d3      rd1}! |*|+d4      s	 |*|+d5      rd1}" |*|+d6      s	 |*|+d7      rd1}# |*|,d/      s	 |*|,d0      rd1}$ |*|,d2      s	 |*|,d3      rd1}% |*|,d4      s	 |*|,d5      rd1}& |*|,d6      s	 |*|,d7      rd1}'g d8g d8g d8g d8d9}-g d8g d8g d8d:}.d
gd;z  d
gd;z  d
gd;z  d
gd;z  d
gd;z  d<}/t        |)t              r	|)j                  d      dk7  r|)j                  d=      xs g }0tC        tE        d>t        |0                  D ]  }1|0|1   }2t        |2j                  d?      xs d
      j	                         |-d?   |1<   t        |2j                  d@      xs d
      j	                         |-dA   |1<   t        |2j                  dB      xs d
      j	                         |-dB   |1<   |2j                  dC      }|s	 t        |t
              r?t        |      dk\  r1t        j                  |dd d      }3|3j                  d      |-d   |1<   nt        |      |-d   |1<    |)j                  dD      xs g }4tC        tE        d>t        |4                  D ]:  }1|4|1   }5t        |5j                  dE      xs d
      j	                         |.dF   |1<   |5j                  dC      }|ra	 t        |t
              r?t        |      dk\  r1t        j                  |dd d      }3|3j                  d      |.d   |1<   nt        |      |.d   |1<   |5j                  dG      }6|6s|s|j#                  tF              j'                  tF        j(                  |6k(        j+                         }7|7stI        ||7      jJ                  xs d
j	                         |.d?   |1<   = |)j                  dH      xs g }8tC        tE        d;t        |8                  D ]  }1|8|1   }9t        |9j                  d?      xs d
      j	                         |/d?   |1<   t        |9j                  d@      xs d
      j	                         |/dA   |1<   t        |9j                  dI      xs d
      j	                         |/dI   |1<   t        |9j                  dJ      xs d
      j	                         |/dJ   |1<   t        |9j                  dK      xs d
      j	                         |/dK   |1<    d
d
d
d
d
d
d
d
d
d
dL
}:i dMdNdOdPdQdPdRdSdTdSdUdVdWdVdXdYdZdYd[d\d]d^d_d`dad`dbdcdddcdedfdgdf};t        |)t              r|)j                  d      dk7  r|)j                  dh      xs g D ]  }<t        |<t              s|<j                  d?      xs d
j	                         j/                         }=t        |<j                  d      xs d
      j	                         }>|;j                  |=      }?|?s|>|:|?<    d
}@d
}Adx}Bx}Cx}Dx}Ex}Fx}Gx}Hx}Ix}Jx}Kx}L}Mdx}Nx}Ox}Px}Qx}R}Sdx}Tx}Ux}Vx}Wx}Xx}Yx}Zx}[x}\}]dx}^x}_x}`x}ax}bx}cx}d}ed
x}fx}gx}hx}i}jd
x}kx}lx}mx}nx}o}pd
x}qx}rx}s}td
}udx}vx}wx}xx}yx}zx}{x}|}}dx}~x}x}x}x}}dx}x}x}x}x}x}x}x}x}x}x}}dgdiz  }dgdiz  }dgd;z  }dgd;z  }dx}x}x}}d
}dgdjz  }dgdjz  }dgd;z  }dgd;z  }d
}dgdz  }dgdz  }dgdkz  }dgdkz  }d
}d
}d
}dgdjz  }dx}x}x}}d
}dx}x}}dx}x}}d
}dx}x}x}x}}dx}}d
}dx}x}x}x}x}x}x}}d
}d
}dx}}d
}dx}x}}d
}dx}}d
}d
}d
}dgdlz  }dgdmz  }d
}d
}d
}d
}d
}t        |)t              r|)j                  d      dk7  rtt        |)j                  dn      xs d
      j	                         }@t        |)j                  do      xs d
      j	                         }A|)j                  dp      }|dk(  rd1}Bndqk(  rd1}C|)j                  dr      }|dk(  rd1}Dndqk(  rd1}Endsk(  rd1}Fnd>k(  rd1}G|)j                  dt      }|dk(  rd1}Hndqk(  rd1}I|)j                  du      }|dk(  rd1}Jndqk(  rd1}K|)j                  dv      }|dk(  rd1}Lndqk(  rd1}M|)j                  dw      xs i }t        |t
              r	 rtM        jN                  ܫ      ni }t        t              rj                  dx      nd}|dk(  rd1}Nndqk(  rd1}Ot        t              rj                  dy      nd}|dk(  rd1}Pndqk(  rd1}Qt        t              rj                  dz      nd}|dk(  rd1}Rndqk(  rd1}St        t              rj                  d{      nd}|dk(  rd1}Tndqk(  rd1}Ut        t              rj                  d|      nd}|dk(  rd1}Vndqk(  rd1}Wt        t              rj                  d}      nd}|dk(  rd1}Xndqk(  rd1}Yt        t              rj                  d~      nd}|dk(  rd1}Zndqk(  rd1}[t        t              rj                  d      nd}|dk(  rd1}\ndqk(  rd1}]t        t              rj                  d      nd}|dk(  rd1}^ndqk(  rd1}_t        t              rj                  d      nd}|dk(  rd1}`ndqk(  rd1}at        t              rj                  d      nd}|dk(  rd1}bndqk(  rd1}ct        t              rj                  d[      nd}|dk(  rd1}dndqk(  rd1}et        t              rj                  d      nd}t        |xs |)j                  d      xs d
      j	                         }ft        |)j                  d      xs d
      j	                         }gt        |)j                  d      xs d
      j	                         }ht        |)j                  d      xs d
      j	                         }it        |)j                  d      xs d
      j	                         }jt        |)j                  d      xs d
      j	                         }kt        |)j                  d      xs d
      j	                         }lt        |)j                  d      xs d
      j	                         }mt        |)j                  d      xs d
      j	                         }nt        |)j                  d      xs d
      j	                         }ot        |)j                  d      xs d
      j	                         }pt        |)j                  d      xs d
      j	                         }qt        |)j                  d      xs d
      j	                         }rt        |)j                  d      xs d
      j	                         }st        |)j                  d      xs d
      j	                         }tt        |)j                  d      xs d
      j	                         }u|)j                  d      :t        |)j                  d      xs d
      j	                         j/                         nd
}|dv rd1}vndv rd1}wndv rd1}xndv rd1}y|)j                  d      :t        |)j                  d      xs d
      j	                         j/                         nd
}|dv rd1}zndv rd1}{ndv rd1}||)j                  d      }|dk(  rd1}ndqk(  rd1}|)j                  d      }|dk(  rd1}ndqk(  rd1}|)j                  d      }|>t              j	                         j/                         }|dv sdk(  rd1}~ndv sdqk(  rd1}d dfdfdfdfdfdfdfdfdfdfdfdffD ]a  \  }}|)j                  |      }|       \  }}dk(  r}}0dk(  r}}:dk(  r}}Ddk(  r}}Ndk(  r}}Xdk(  s^}}c d}tQ        |      D ]3  \  }1}|1dik\  r n)|)j                        }|dk(  rd1|1<   )dqk(  s/d1|1<   5 d}tQ        |      D ]D  \  }1}|1d;k\  s n8|)j                        }tS              nd}dk(  rd1|1<   :dqk(  s@d1|1<   F |)j                  d      :t        |)j                  d      xs d
      j	                         j/                         nd
}|dk(  rd1nd}dk(  rd1nd}dk(  rd1nd}d[k(  rd1nd}t        |)j                  d      xs d
      j	                         }d}dgdjz  }dgdjz  }tQ        |      D ]B  \  }1}|1djk\  r n8|)j                        }tS              nd}dk(  rd1|1<   8dqk(  s>d1|1<   D d}dgd;z  }dgd;z  }tQ        |      D ]B  \  }1}|1d;k\  r n8|)j                        }tS              nd}dk(  rd1|1<   8dqk(  s>d1|1<   D t        |)j                  d      xs d
      j	                         }d}tQ        |      D ]B  \  }1}|1dk\  r n8|)j                        }tS              nd}dk(  rd1|1<   8dqk(  s>d1|1<   D d}tQ        |      D ]B  \  }1}|1dkk\  r n8|)j                        }tS              nd}dk(  rd1|1<   8dqk(  s>d1|1<   D t        |)j                  d      xs d
      j	                         }t        |)j                  d      xs d
      j	                         }t        |)j                  d      xs d
      j	                         }|)j                  d      :t        |)j                  d      xs d
      j	                         j/                         nd
}|dk(  rd1d*<   n
dk(  rd1d<   |)j                  d      :t        |)j                  d      xs d
      j	                         j/                         nd
}|dk(  rd1dq<   n
dk(  rd1ds<   |)j                  d      :t        |)j                  d      xs d
      j	                         j/                         nd
}|dk(  rd1d><   n
dk(  rd1d<   |)j                  dë      :t        |)j                  dë      xs d
      j	                         j/                         nd
}|dk(  rd1}ndv rd1}ndv rd1}nd[k(  rd1}t        |)j                  dǫ      xs d
      j	                         }|)j                  dȫ      :t        |)j                  dȫ      xs d
      j	                         j/                         nd
} | dk(  rd1}n dv rd1}n dv rd1}|)j                  d˫      :t        |)j                  d˫      xs d
      j	                         j/                         nd
}|dk(  rd1}ndk(  rd1}ndk(  rd1}t        |)j                  dΫ      xs d
      j	                         }|)j                  dϫ      |)j                  dЫ      |)j                  dѫ      |)j                  dҫ      |)j                  dӫ      f}|d*   rtS        d*         rd1nd}d   rtS        d         rd1nd}dq   rtS        dq         rd1nd}ds   rtS        ds         rd1nd}d>   rtS        d>         rd1nd}|)j                  dԫ      :t        |)j                  dԫ      xs d
      j	                         j/                         nd
}|dk(  rd1}ndv rd1}t        |)j                  d׫      xs d
      j	                         }|)j                  dث      :t        |)j                  dث      xs d
      j	                         j/                         nd
}|rjY                  dd      j[                         D cg c]&  }|j	                         sj	                         ( c}xs gD ]G  }|dk(  rd1}dv rd1}dv rd1}dk(  rd1}&dk(  rd1}/dk(  rd1}8dv rd1}@dv sFd1}I t        |)j                  d      xs d
      j	                         }t        |)j                  d      xs d
      j	                         }|)j                  d      }|dk(  rd1}ndqk(  rd1}t        |)j                  d      xs d
      j	                         }|)j                  d      :t        |)j                  d      xs d
      j	                         j/                         nd
}|dk(  rd1}ndk(  rd1}ndv rd1}t        |)j                  d      xs d
      j	                         }d}	|	D ]A  \  }}
}|)j                  |      }	 tS              nd}dk(  rd1А
<   6dqk(  s<d1А<   C |)j                  d      }|dk(  rd1}nfdqk(  rd1}n]t        |)j                  d      xs d
      j	                         s,t        |)j                  d      xs d
      j	                         rd1}nd1}t        |)j                  d      xs d
      j	                         }t        |)j                  d      xs d
      j	                         }t        |)j                  d      xs d
      j	                         }|s|}d }|)j                  d      :t        |)j                  d      xs d
      j	                         j/                         nd
}d|v rd1d*<   n
dv rd1d<   t        |)j                  d      xs d
      j	                         }|)j                  d      xs g }t        |t
              r	 rtM        jN                        ng } d      rd1dq<    d      rd1ds<    d      rd1d><    d      s d      rd1d<    d      s d      rd1dj<    d      rd1d<   t        |)j                  d      xs d
      j	                         }|)j                  d       xs g }t        |t
              r	 rtM        jN                        ng } d      rd1d;<    d      rd1ѐd<    d      rd1d<   t        |)j                  d      xs d
      j	                         }|)j                  d      xs g }t        |t
              r	 rtM        jN                        ng } d      rd1dk<    d      rd1d<    d      s d      rd1ѐd<    d	      rd1dl<    d
      rd1ѐd<    d[      s d      rd1di<   t        |)j                  d      xs d
      j	                         }|)j                  d      xs g }t        |t
              r	 rtM        jN                        ng } d      rd1ѐd<    d      rd1ѐd<    d      s d      rd1ѐd<    d      rd1ѐd<    d      rd1ѐd<   |)j                  d      ;t        |)j                  d      xs d
      j	                         j/                         nd
}d|v rd1ѐd<   ndv rd1ѐd<   ndv rd1ѐd <   |)j                  d!      ;t        |)j                  d!      xs d
      j	                         j/                         nd
}d"|v rd1ѐd#<   n+d$v sd%v sd&v rd1ѐd'<   nd(v sd)v rd1ѐd*<   t        |)j                  d+      xs d
      j	                         }s|}i d,|d-|dI|	d.|
d|d!|d/|d%|d&|d0|d1|d2|d3|d4| d5|!d6|"d7|#i d8|$d9|%d:|&d;|'dn@doAd<Bd=Cd>Dd?Ed@FdAGdBHdCIdDJdEKdFLi dGMdHNdIOdJPdKQdLRdMSdNTdOUdPVdQWdRXdSYdTZdU[dV\dW]i dX^dY_dZ`d[ad\bd]cd^dd_ed[fd|fdgdidjdhd`kdaldbmi dcnddode|odfpdgqdhrdisdjtdkudlvdmwdnxdoydpzdq{dr|ds}i dtdudvdwdx~dydzd{d|d}d~ddddddditC        di      D 1ci c]  }1d|1dz    |1    c}1tC        di      D 1ci c]  }1d|1dz    |1    c}1tC        d;      D 1ci c]  }1d|1dz    |1    c}1tC        d;      D 1ci c]  }1d|1dz    |1    c}1tC        d;      D 1ci c]  }1d|1dz    |1    c}1tC        d;      D 1ci c]  }1d|1dz    |1    c}1dtC        dj      D 1ci c]  }1d|1dz    |1    c}1tC        dj      D 1ci c]  }1d|1dz    |1    c}1tC        d;      D 1ci c]  }1d|1dz    |1    c}1tC        d;      D 1ci c]  }1d|1dz    |1    c}1|dtC        d      D 1ci c]  }1d|1dz    |1    c}1tC        d      D 1ci c]  }1d|1dz    |1    c}1tC        dk      D 1ci c]  }1d|1dz    |1    c}1tC        dk      D 1ci c]  }1d|1dz    |1    c}1|||dtC        dj      D 1ci c]  }1d|1dz    |1    c}1i ddddd|d|d|d|ddddd|d|d|ddi dd|d|d|ddddddd|d|d|d|d|ddi dddddddddddÓd|ÓdēdœdƓd|ƓdǓ||ϐdɜ
tC        dl      D 1ci c]  }1d|1dz    |1    c}1tC        dm      D 1ci c]  }1d|1dz    |1    c}1i dғdӓdԓdՓd|ғd|ӓd|ԓd|ՓdN|:dN   dP|:dP   dS|:dS   dV|:dV   dY|:dY   d\|:d\   d^|:d^   d`|:d`   dc|:dc   i df|:df   d|-d   d*   d|-d?   d*   d|-dA   d*   d|-dB   d*   d|-d   d   d|-d?   d   d|-dA   d   d|-dB   d   d|-d   dq   d|-d?   dq   d|-dA   dq   d|-dB   dq   d|-d   ds   d|-d?   ds   d|-dA   ds   d|-dB   ds   |.d   d*   |.d?   d*   |.dF   d*   |.d   d   |.d?   d   |.dF   d   |.d   dq   |.d?   dq   |.dF   dq   |.d   ds   |.d?   ds   |.dF   ds   dtC        d;      D 1ci c]  }1d|1dz    |/d?   |1    c}1tC        d;      D 1ci c]  }1d|1dz    |/dA   |1    c}1tC        d;      D 1ci c]  }1d|1dz    |/dI   |1    c}1tC        d;      D 1ci c]  }1d|1dz    |/dJ   |1    c}1tC        d;      D 1ci c]  }1d|1dz    |/dK   |1    c}1d+i}t]        d      dz  }|j_                         sddddS t]        d      }|ja                  dd       tc        jd                  dd
|      dd j	                         xs d}d| dtg        jh                         jj                  dd;  dz  }tm        jn                  t              t        |            }|j                  d      dk(  rdj                  dd      ddS dd   |d   dS # t         $ r |rt        |      nd
}Y +w xY w# t         $ r t        |      |-d   |1<   Y &w xY w# t         $ r t        |      |.d   |1<   Y %w xY w# t         $ r i }Y w xY w# tT        tV        f$ r d}Y w xY w# tT        tV        f$ r d}Y w xY w# tT        tV        f$ r d}Y w xY w# tT        tV        f$ r d}Y \w xY w# tT        tV        f$ r d}Y "w xY wc c}w # tT        tV        f$ r d}Y 6w xY w# t         $ r g }Y Ow xY w# t         $ r g }Y {w xY w# t         $ r g }Y w xY w# t         $ r g }Y w xY wc c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w c c}1w # t         $ r }dt              ddcY d}~S d}~ww xY w(  z
    Genera el documento DOCX de anamnesis para un estudiante.
    Retorna: {"status": "success", "file_path": str, "filename": str}
    o {"status": "error", "message": str, "status_code": int}
    r   r   r  r  )r   rg  r  r  r  r  r  r   r  r  r  r  r  
   Nr  r   strftime%d/%m/%Yr   r   0	gender_idfemeninor  femalemujer1r  	masculinommalehombrer  r  nationality_idaddressphonenative_languagelanguage_usually_usedr   r   r   c           	         | syt        | t              r	 | rt        j                  |       ng } t        | t
              rq| D cg c]T  }t        |t              rt        |j                  d|            n
t        |      j                         j                         V }}|j                         |v S t        | t              r;t        | j                  |      xs | j                  |j                                     S y# t        $ r Y yw xY wc c}w )NFvalue)r=  r   jsonloadsrB  listr>  r   r   r   r   
capitalizearrkeyxvalss       r   _has_domainz6_generate_anamnesis_docx_internal.<locals>._has_domain  s     c3'%14djjo" c4(qtulmz!T7JSw!23PSTUPV]]_eeguDu99;$..c4( I8H0IJJ % %$% vs   C; AD
;	DDnative_language_domainlanguage_used_domain	comprende
understandr  hablaspeakleers  escribert  )r   r   r   r   )r   r   relationpresence)r   r   rol   )r   r  age	schooling
occupation
informantsr7  r   relationshipr  r  interview_dateinterviewersroler  r   household_membersr  r  r  )
pediatrykinesiologygenetic	neurologyspeechtherapyanother_diagnosticoccupational_therapyeducational_psychology
psychiatry
psychologypediatrar  u   kinesiologíar  kinesiologiau	   genéticar  geneticau   neurologíar  
neurologiau   fonoaudiologíar  fonoaudiologiaotror  zterapia ocupacionalr  u   psicopedagogíar  psicopedagogiau   psiquiatríar  psiquiatriau   psicologíar  
psicologiaspecialists               interview_reasondiagnosis_detaildiagnosis_hasr5  birth_type_idr6  birth_medical_assistance#first_year_periodic_health_checkupsfirst_year_vaccinesfirst_year_conditionsdesnutricionobesidadfiebre_altaconvulsioneshospitalizacionestraumatismosintoxicacionasmaenfermedad_respiratoriaencefalitis
meningitisotras#first_year_conditions_other_specifybirth_reasonfirst_year_notesbirth_weightbirth_heightsm_dresses_alonesm_sits_alonesm_head_controlsm_walks_without_supportsm_first_wordssm_first_phrasessm_bowel_daysm_bowel_nightsm_bladder_daysm_bladder_nightsm_observations_1sm_motor_activity)normal)activo)hiperactivo)
hipoactivosm_muscle_tone)u   hipertónico
hiertonicohipertonico)   hipotónico
hipotonicor)  sm_walking_stabilitysm_frequent_fallssm_lateral_dominance)derzder.derechadrightr  )izqzizq.	izquierdaileft2c                     | dk(  ry| dk(  ryy)Nr   r  r5  r  )r  r   )vals    r   _fine_ynz3_generate_anamnesis_docx_internal.<locals>._fine_yn  s    !8J!8J!r   sm_fine_grabc                 D    | dS d |       d    d |       d    fS )NNNzfgraby=r   zfgrabn=r   r8  vr:  s    r   <lambda>z3_generate_anamnesis_docx_internal.<locals>.<lambda>  s`    !), \cdlmndopqdrcsZtx  AI  JK  AL  MN  AO  @P  wQ  ZR r   sm_fine_gripc                 D    | dS d |       d    d |       d    fS )Nr=  zfgripy=r   zfgripn=r   r8  r>  s    r   r@  z3_generate_anamnesis_docx_internal.<locals>.<lambda>  s      @A  @I  p|   RY  Zb  cd  Ze  fg  Zh  Yi  Pj  nu  v~  @  vA  BC  vD  uE  lF  OG r   sm_fine_pinchc                 D    | dS d |       d    d |       d    fS )Nr=  zfpinchy=r   zfpinchn=r   r8  r>  s    r   r@  z3_generate_anamnesis_docx_internal.<locals>.<lambda>  s      vw  v  fr   HP  QY  Z[  Q\  ]^  Q_  P`  Fa  em  nv  wx  ny  z{  n|  m}  c~  E r   sm_fine_drawc                 D    | dS d |       d    d |       d    fS )Nr=  zfdrawy=r   zfdrawn=r   r8  r>  s    r   r@  z3_generate_anamnesis_docx_internal.<locals>.<lambda>  s      mn  mv  ]i   F  GO  PQ  GR  ST  GU  FV  }W  [b  ck  lm  cn  op  cq  br  Ys  |t r   sm_fine_writec                 D    | dS d |       d    d |       d    fS )Nr=  zfwritey=r   zfwriten=r   r8  r>  s    r   r@  z3_generate_anamnesis_docx_internal.<locals>.<lambda>  s      cd  cl  S_   u}  ~F	  G	H	  ~I	  J	K	  ~L	  }M	  sN	  R	Z	  [	c	  d	e	  [	f	  g	h	  [	i	  Z	j	  P	k	  rl	 r   sm_fine_threadc                 D    | dS d |       d    d |       d    fS )Nr=  z	fthready=r   z	fthreadn=r   r8  r>  s    r   r@  z3_generate_anamnesis_docx_internal.<locals>.<lambda>  s      \
]
  \
e
  L
X
   n
w
  x
@  AB  x
C  DE  x
F  w
G  l
H  LU  V^  _`  Va  bc  Vd  Ue  Jf  k
g r   )vision_interested_stimulivision_irritated_eyesvision_headachesvision_squintsvision_follows_movementvision_abnormal_movementsvision_erroneous_behaviorsvision_diagnosishearing_interested_stimulihearing_recognizes_voiceshearing_turns_headhearing_ears_to_tvhearing_covers_earshearing_earacheshearing_pronunciation_adequatehearing_diagnosis)sm_cog_reacts_familiarsm_cog_manipulates_exploressm_cog_demands_companysm_cog_understands_prohibitionssm_cog_smiles_babblessm_cog_poor_eye_handNNlanguage_communication_methodoralgestualmixtolanguage_communication_other)language_exp_babbleslanguage_exp_emits_phraseslanguage_exp_vocalizes_gestures language_exp_relates_experienceslanguage_exp_emits_words language_exp_clear_pronunciation) language_comp_identifies_objects)language_comp_follows_simple_instructionslanguage_comp_identifies_people*language_comp_follows_complex_instructions"language_comp_understands_abstract(language_comp_follows_group_instructions!language_comp_responds_coherently!language_comp_understands_storieslanguage_oral_loss)social_relates_spontaneouslysocial_relates_collaborativelysocial_explains_behaviorssocial_respects_social_normssocial_participates_groupssocial_respects_school_normssocial_prefers_individualsocial_shows_humorsocial_echolalic_languagesocial_stereotyped_movementssocial_difficulty_adaptingsocial_frequent_tantrums)health_vaccines_up_to_datehealth_epilepsyhealth_heart_problemshealth_paraplegiahealth_hearing_losshealth_vision_losshealth_motor_disorderhealth_bronchorespiratoryhealth_infectious_diseasehealth_emotional_disorderhealth_behavioral_disorderhealth_other_specifyfamily_health_historyfamily_health_observationssocial_reaction_lightsnaturaldesmesuradasocial_reaction_soundssocial_reaction_strange_people   health_dietr"  )malomalazmalo/azmalo para comerzmala para comer)buenobuenazbueno/azbueno para comerzbuena para comerhealth_diet_otherhealth_weight)bajoz	bajo peso)r  obesohealth_sleep_pattern	tranquiloinquietohealth_sleep_hourshealth_sleep_insomniahealth_sleep_nightmareshealth_sleep_terrorshealth_sleep_sleepwalkinghealth_sleep_good_moodhealth_sleeps_alonesolo)u   acompañado
acompanadohealth_sleeps_specifyhealth_mood_behavior,alegre)u	   juguetónjuguetonbromistau   juguetón/bromista)u   risueñou   risueñarisuenou   risueño(a)u
   risueño/atristeseriorebelde)u   apáticoapaticou   apáticaapatica)violentoviolentazviolento(a)z
violento/ahealth_mood_otherschool_entry_ageattended_kindergartenschools_countteaching_modalityregularespecial)u   técnicatecnicau   técnicotecnicochanges_reason))learning_difficultyr   r   )participation_difficultyr5  r6  )disruptive_behaviorr7  r  )attends_regularlyr     )attends_gladlyr  	   )family_support_homeworkr  r  )friendsr      repeated_graderepeated_coursesrepeated_reasoncurrent_levelc           	      V   | syt        | t              r	 | rt        j                  |       ng } t        | t
              rW| D cg c]8  }t        |t              rt        |j                  d|            n
t        |      : }}t        fd|D              S y# t        $ r Y yw xY wc c}w )uF   Comprueba si key está en arr (array de strings o de dicts con value).Fr  c              3   p   K   | ]-  }j                         t        |      j                         v  / y wN)r   r   ).0r?  r  s     r   	<genexpr>zE_generate_anamnesis_docx_internal.<locals>._in_arr.<locals>.<genexpr>1  s&     GQ399;#a&,,.8Gs   36)	r=  r   r  r  rB  r  r>  r   anyr  s    `  r   _in_arrz2_generate_anamnesis_docx_internal.<locals>._in_arr&  s    #s#!-0$**S/bC #t$]`aXY:a3FQUU7A./CPQFRaaG$GGG ! ! ! bs   B =B&	B#"B#performance_assessmentsatisfactorioinsatisfactorioperformance_reasonsresponse_difficultiesapoyocastigoindiferenciau
   compasión	compasionu   tensióntensionotrar  response_difficulties_otherresponse_successr  response_success_otherrewardszexpresiones afectivaszalimentos preferidoszver tvu   ver televisiónr  juguetesztiempo libre   otrosrewards_other
supportersmadre   padre   hermanoshermanas   zotros familiares   zotros profesionales   expectationsalta   mediana   baja   environmentambos   u   físicofisicou   solo físico   	emocionalzsolo emocionalr   final_commentsrj  	birth_dayrD  birth_countrymother_languageused_languagerY  rX  ml_understandml_speakml_readml_writeul_understandul_speakul_readul_writedpydpnbknormal
bkassisted	bkforceps
bkcesareanbaybanfypcyfypcnfyvyfyvndesnutritionydesnutritionnobesityyobesityn
highfevery
highfevern	seizuresy	seizuresnhospitalizationsyhospitalizationsninjuyinjuninyinnayanriyrinencpyencpnmgymgnoyondresses_alone
sits_alonehead_controlwalks_without_supportfirst_wordsfiorst_wordsfirst_phrasescontrol_sphincter_daycontrol_sphincter_nightbladder_sphincter_daybladder_sphincter_nightsm_observationsma_1ma_2ma_3ma_4mt_1mt_2mt_3mt_4wsywsnffyffnldyldnfgrabyfgrabnfgripyfgripnfpinchyfpinchnfdrawyfdrawnfwriteyfwritenfthreadyfthreadnvqy_vqn_cqy_cqn_cqycqn)dlq_1dlq_2dlq_3dlq_4dlqcley_clen_clcy_clcn_)clcrt  dsy_dsn_cshy_cshn_)cshr  family_medical_historyr  family_medical_observationr  sq_feed_1feed_2feed_3feed_4feed1feed2feed3feed4
feed_otherweight_1weight_2weight_3weight1weight2weight3sleep_1sleep_2sleep_3sleep1sleep2sleep3
sleep_time
badsleep_1
badsleep_2
badsleep_3
badsleep_4
badsleep_5	badsleep1	badsleep2	badsleep3	badsleep4	badsleep5	howsleep1	howsleep2howsleepmood1mood2mood3mood4mood5mood6mood7mood8another_moodenter_schooling_agekindergarten1kindergarten2school_assisted_number	teaching1)
	teaching2	teaching3why_change_of_schoolrepeatedcourse1repeatedcourse2coursesr  why_repeatedr  r  current_situationfamily_attitude#family_attitude_performance_reasons+family_attitude_response_difficulties_other&family_attitude_response_success_otherfamily_attitude_rewards_otheriidate_1iiname_1iirelation_1iipresence_1iidate_2iiname_2iirelation_2iipresence_2iidate_3iiname_3iirelation_3iipresence_3iidate_4iiname_4iirelation_4iipresence_4)	iindate_1	iinname_1iinrol_1	iindate_2	iinname_2iinrol_2	iindate_3	iinname_3iinrol_3	iindate_4	iinname_4iinrol_4fm_name_fm_relation_fm_age_fm_schooling_fm_occupation_files/original_student_fileszanamnesis_student.docxz-Template anamnesis_student.docx no encontrador   Tr   [^\w\s-]   
estudiante
anamnesis_r   .docxrg  zError generando DOCXr<  successr   r   )r   r   r   )8r#   r   r=  r>  r   r   lenr   rA  r   hasattrr  todayrC  rD  dayrB  r   rM   r   r   r   genderr   rN   nationalityrz   rF  r*  r{   rE  r+   r?  rangeminrO   r   	full_namer  r  	enumerater   	TypeError
ValueErrorreplacesplitr   r   r   resubuuiduuid4hexr   fill_docx_form(  r   r   rJ  rK  r  rO  rP  rj  r  	age_years
age_monthsrR  r   r  total_monthsr  r  r  r]  gnr  natr  r  r  r  rY  rX  r   r  r   r"  ml_1ml_2ml_3ml_4ul_1ul_2ul_3ul_4anamnesis_serviceanamnesis_resultr  ndudinformant_datainterviewer_datafm_datainf_listr4  infr0  int_listinvr`  profhm_listhmspec_map_name_to_specitemr   
status_valr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r  r  r  r  r  r2  r3  r4  r5  r6  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rJ  rK  rF  rG  rH  rI  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  vqyvqnr\  r]  r^  r_  r`  ra  rb  cleyclenclcyclcnclc_textdsydsncshycshncsh_textrm  rn  sqrp  rq  rr  rs  feed_other_textry  rz  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  dhbtbmafypcfyvfyc_des_obs_hf_sz_hosp_inj_intox_asma_resp_enc_men_otro_otras_ma_mt_ws_ff_ld_ld_sr  setterr?  yvnv
_vq_fields
_cq_fields_lcm_cle_fields_clc_fields
_ds_fields_csh_fields_sl_ss_sp_fd_hw_spat_bds_hsa_hmbr  r  _ak_tm
_cs_fieldsidx_yidx_n_rcr  _pa_rd_rs_rw_ex_envreplacementstemplate_pathout_dir	safe_nameout_filer   ra  r:  s                                                                                                                                                                                                                                                                                             @r   !_generate_anamnesis_docx_internalrT  :  s7?   j
J&r*(,,Z8nd+1C1CG1LP^PbPbckPlpwPw%2L]`aa%))."=C##OR8>B##OR8>B",,w39r:!HLLIZ\^<_<ece;ffghphtht  vG  IK  iL  iR  PR  hS  T  Z  Z  \(5L		
||K(6dC(QTUXY]U^Q_ceQe**3t9Sb>:FKKMkoB(/f(=4B;B2z;RJ 7X[\`XaI JJLE %

RWW 4eii8PTVT\T\^`^d^dSe8e fI$)JJ$8B#>%++PRPXPXBX#YLyy266)$)!-!2J #II!$ZJ-1D	rI LL-	%,,[^^y-HIOOQA23QXX$$&,,.bB#rSyHNgQSm#+LFD B&")v|xSU~#+LFD<<()b((+,334D4G4G8<<XhKi4ijpprCs #COO 4 : : <hll9-34::<HLL)/R0668hll+<=CDJJLHLL)@AGRHNNP [1IHH[)001N1NRS1SU`UcUcgpUpqwwy=>Q]]0b1779B$((5IHH[)0091LMSSU=>Q]]0b1779B$&&&t&dT$&&&t&dT*2.,>>zJ&-2B2F2Fx2PT[2[ "%%&>?E2B!%%&<=CB2{+{2|/LUXd2w';r7+CCT2u%R)@$2y)[W-Ect2{+{2|/LUXd2w';r7+CCT2u%R)@$2y)[W-Ect"2<LZj  yI  J$4>NWgh4!8"2$(Z\Y]`aYartquxyqyz&-2B2F2Fx2PT[2['++L9?RH3q#h-01 <qk,/0E2,F,L,L,Nv&q)03CGGN4K4Qr0R0X0X0Zz*1-03CGGJ4G4M20N0T0T0Vz*1-WW-.<%b#.3r7b= ( 1 1"Sb': FA89

:8NN62158;BN6215< (++N;ArH3q#h-01 vqk-01FB-G-M-M-O '*WW-.>%b#.3r7b= ( 1 1"Sb': FA:;**Z:P,V4Q7:=b',V4Q7 gg/0288$56==>O>R>RVY>YZ``bD7RSUW[7\7f7f7ljl6s6s6u(03#v$ '**+>?E2G3q#g,/0 SQZ%()=2%>%D%D%F"),RVVN-C-Ir)J)P)P)R
#A&$'u(;$<$B$B$Dq!*-bff[.A.GR*H*N*N*P$Q'+.rvvl/C/Ir+J+P+P+R%a(S 2"2rSU&("




$3]
DRTa

$.	
;H+
Wcep
 
 1A/
 (	
 +@AW	

 7

 :JKc
 L
 +8
 <
 *6|
 &-2B2F2Fx2PT[2[(,,];Ar 3dD) HHV,299;AACD!$TXXh%7%=2!>!D!D!FJ'++D1C(23 orrrcrHrzrIr
rSr3rQVrY^raehlX[[[[[8[j:nqq	qIq 1q4EqqPUqX[q^aqdfik:===c=E=E=C=#=Rnpp+plp=MpP\_kjlll
l\l4IlKZglnnn 7n:ORi@CCCtCdCTCDC4C$,///c/C/#/c|&6GgRY\cfnqyebjebjeaieai(++++uqyuqyuqyuqyebjebjurzurz!#%'"UQY,////&6),,,8h&)))'G
ILL
LZL*LzJ ##	IHKKKKKKKK (++!#,//	/I	!,/// EBJ%"*.0+68313.(*%&-2B2F2Fx2PT[2["#3#7#78J#K#QrRXXZ"#3#7#78J#K#QrRXXZ!%%o6BQwcq#!%%o6BQw3qs*qc)qs*"&&'ABCaxs3#''(MNDqy#%CE"&&'<=Cax#4"&&'>?E2C#s#-0$**S/bC /9d.C377>*Dqy#-CM*4S$*?377:&TDqyS(sH,6sD,A#''-(tCaxc:-7T-B#''.)CaxSs94>sD4ICGG/0tEzs,!..8d.C377>*Dqy#%CE0:30ESWW^,4F{#C1Cc'1#t'<CGGFO$Ez2!#R:DS$:OCGG56UYEz3!3S-7T-B377=)Dqy#%CE,6sD,A377<(tDqy##C'1#t'<CGGFO$Ez2!#R)3C)>SWWW%DF25f  7B@P@T@TUz@{  7B  @B  3C  3I  3I  3K//33NCIrJPPRL"#3#7#78J#K#QrRXXZ/33NCIrJPPRL/33NCIrJPPRL 0 4 45G H NBOUUWM-11/BHbIOOQJ/334EFL"MSSUL$'(8(<(<=W(X(^\^$_$e$e$g!.223CDJKQQSK 0 4 45G H NBOUUWM$'(8(<(<^(L(RPR$S$Y$Y$[!&)*:*>*>?O*P*VTV&W&]&]&_#$'(8(<(<=M(N(TRT$U$[$[$]!&)*:*>*>?Q*R*XVX&Y&_&_&a#!"2"6"67J"K"QrRXXZO[k[o[o  qD  \E  \Q3'++,?@FBGMMOUUW  WYCk!#4#CT(($'XhXlXlm}X~  YK3'++,<=CDJJLRRT  QSCk!#4EEctDDSd"&&'=>Caxs3"&&':;Caxs3"&&'=>CC(..0IISTUX]`WZLLPSWXPX`cZ]" !/  1R   S  Vd  fG  UH  KZ  \  J@  CQ  St  Bu  xG  Il	  wm	  p	@
  B
g  o	h  i 	M
F$((,=%a[FB^+b"VV~-Bvv.2r~-Bvv.2r//b"8	M e
z* 	&EArBw $$R(AAvs1va#Q		&
 I
z* 	&EArAvU $$R(A }SV$Avs1va#Q	& eudxdx  zY  eZ  ef$(()HIORPVVX^^`  lnv~3y(cwCv~3"&&'EFL"MSSU Tuqyuqy{+ 	'EArAvu $$R(A }SV$AvtAwa3a	' Uuqyuqy{+ 	'EArAvu $$R(A }SV$AvtAwa3a	' '++,@AGRHNNP }
z* 	&EArBw $$R(A }SV$Avs1va#Q	& q{+ 	'EArBw $$R(A }SV$AvtAwa3a	' '++,BCIrJPPR!$%5%9%9:Q%R%XVX!Y!_!_!a%()9)=)=>Z)[)a_a%b%h%h%j"\l\p\p  rJ  ]K  ]Ws#''(@AGRHNNPVVX  ]_)SRUM!32a5\l\p\p  rJ  ]K  ]Ws#''(@AGRHNNPVVX  ]_)SRUM!32a5dtdxdx  zZ  e[  egs#''(HIORPVVX^^`  mo)SRUM!32a5QaQeQefsQt  RAs#''6<"=CCEKKM  GI(?SFTT_bV\YYdg[aF]SF.223FGM2NTTVScSgSghwSx  TEs#''8>B?EEGMMO  KM(?sH))c8))c8\l\p\p  rH  ]I  ]U%))*@AGRHNNPVVX  []Hgk!S7j C')--.BCIrJPPR
 $$%<=?O?S?STm?n  qA  qE  qE  F\  q]  _o  _s  _s  tO  _P  Rb  Rf  Rf  g  R@  A!!WT!WSC
!!WT!WSC
!!WT!WSC
!!WT!WSC
!!WT!WSC
ZjZnZn  pE  [F  [R$(()>?E2FLLNTTV  XZ6>s922I'++,CDJKQQS[k[o[o  qG  \H  \T$(()?@FBGMMOUUW  Z\)-c3)?)E)E)GUA1779aggiU_Z^Y_ ]=#%UU_bW\ZZdg\a(]CE'\35)^SUHHRU%OOY\QV] +//0CDJKQQS!"2"6"67I"J"PbQWWY""#:;!8S]AXs}!$%5%9%9/%J%Pb!Q!W!W!YWgWkWkl  XA  XMs#''(;<BCIIKQQS  SU)YJC	BBPSI"#3#7#78H#I#ORPVVX

 !+ 		/Bu $$R(AmCF Av+.!%(a+.!%(		/ ""#34!8!OAX!O"&&'9:@bAGGISQaQeQefwQxQ~|~M  NF  NF  NH!O!O&**+=>D"EKKM+//0ABHbIOOQ,00AGRHNNP"M	 #&&'?@L #''(@AGRHNNPVVXRT 	c!!$OA#%!$OA.12B2F2FG\2]2cac.d.j.j.l+""#:;Arc3),djjo" 3 !$OA3	"!$OA3'!$OA3%k)B!$OA3
#wsI'>!$OA3!$OA69:J:N:NOl:m:sqs6t6z6z6|3""#56<"c3),djjo" 3 !$OA3'!$OA3"%OB145E5I5IJb5c5igi1j1p1p1r.""9-3c3),djjo" 3/0"%OB3./"%OB3!WS2C%D"%OB3
#"%OB3'"%OB373#8"%OB(+,<,@,@,Q,WUW(X(^(^(`%""<06Bc3),djjo" 3 "%OB3 "%OB3
#wsJ'?"%OB3*+"%OB3-."%OB"&&~6B #''7=2>DDFLLNHJ 	S="%OB#"%OBs]"%OB"&&}5A $((7=2>DDFLLNGI 	d?"%OB$(d"2n6L"%OBD $4$<"%OB-112BCIrJPPR"MM
LM
*5yM
BGM
T[]gM
fM
$dM
,;]M
LUW^M
`ginM
 M
 1@M
 QYZ`M
 cklrM
 T	M
 $.t	M
 6?	M
 GQRV	M

 TM

 $.tM

 6?M

 GQRVM
  0M
 3EFVM
 Y^_bM
 ejknM
 M
 #/
M
 =HM
 UablM
 3M
 sM
 %,UM
 5<UM
 EKDM
 SYZ^M
 ]M
 -<]M
 MWX`M
 cmnvM
 *M
 '3JM
 ALYM
 YdenM
  !2M
 5HIZM
 ]dejM
 mtuzM
 3M
 sM
 %)"M
 /3BM
 9>sM
 EJ3M
 QXY^M
 ahinM
 3M
 sM
 %)"M
 /3BM
 9?@cM
 23VM
 LM
 +9,M
 IWXdM
 gy  {KM
  ]!M
  -9*!M
  GUVb!M
  e|  ~S!M
" ;#M
" )7#M
" FUVc#M
$ $%:%M
$ =VWn%M
& $%:'M
& =VWn'M
( )M
( 17)M
( ?Ed)M
( MSTX)M
( [abf)M
* D+M
* !$+M
* )/+M
* 7=d+M
* EJ3+M
* QVWZ+M
* ]bcf+M
* inor+M
, 3-M
, s-M
. f/M
. '/M
. 19&/M
. CKF/M
. U^_f/M
. irsz/M
0 f1M
0 '1M
0 1:71M
0 ENw1M
0 Ycdl1M
0 oy  {C1M
2 .32Y7acU|SV#73M
2 [``bZc;dUVd1Q3%L#a&<P;d3M
4 .31X6acU|SV#65M
4 Z__`Ya:bTUT!A#<Q;O:b5M
6 -2!H5qQqSE{CF"57M
6 X]]^W_9`RSC!u+s1v:M9`7M
8 UUUSV9M
: 05Qx8!qse}d1g%8;M
: ^ccd]e<fXYuQqSE]DQRG=S<f;M
< 05Qx8!qse}d1g%8=M
< ^ccd]e<fXYuQqSE]DQRG=S<f=M
< px  PX=M
> .32Y7acU|SV#7?M
> [``bZc;dUVd1Q3%L#a&<P;d?M
@ 05Ry9!qse}d1g%9AM
@ _ddf^g=hYZacUmTRSW>T=hAM
@ rz  T\&<Wm*Dd~EM
F ,184aQqSE{BqE!4GM
F 7?GM
F IQRXGM
F [cdjGM
F muv|GM
H VIM
H %fIM
H /6vIM
H @GIM
H Q]^mIM
J KM
J #-hKM
J 9CHKM
L xMM
L "+HMM
L 7@MM
N wOM
N !*7OM
N 5>wOM
P gQM
P  (QM
P 3;GQM
P FRS]QM
R *SM
R '3JSM
R AMjSM
R [ghrSM
R uA  CMSM
T UM
T &1*UM
T ?J:UM
T XcdnUM
T q|  ~HUM
V WM
V %0WM
V =GWM
X UYM
X $UYM
X -4UYM
X =DUYM
X MTUZYM
X ]dejYM
X mtuzYM
X }D  FKYM
X M[  ]iYM
Z "#6[M
Z 9KL_[M
\ ]]M
\ -<]]M
^ %&<_M
^ ?NOe_M
` aM
` 2;  mA.?_f  }D(\*gM
h INb	R1"1Q3%(*;A*>>RiM
j EJ"INq1&(::NkM
l 23VmM
n :;foM
p 56\qM
r ,-JsM
t "#FuM
v *+VwM
x %&LyM
z :{M
| ,}M
| /<Xm=T}M
| W`aijsat}M
| wB  DL  MX  DY}M
~ Xo6M
~ 9MhWkNlM
@ #H-C$DAM
@ G_`h  jB  aCAM
B (<0CM
B 3?@VCM
D v.q1EM
D 4>~f?UVW?XEM
D [ijx  zD  kE  FG  kHEM
D JX  Zh  is  Zt  uv  ZwEM
F v.q1GM
F 4>~f?UVW?XGM
F [ijx  zD  kE  FG  kHGM
F JX  Zh  is  Zt  uv  ZwGM
H v.q1IM
H 4>~f?UVW?XIM
H [ijx  zD  kE  FG  kHIM
H JX  Zh  is  Zt  uv  ZwIM
J v.q1KM
J 4>~f?UVW?XKM
J [ijx  zD  kE  FG  kHKM
J JX  Zh  is  Zt  uv  ZwKM
L *&1!4CSTZC[\]C^l|  ~C  mD  EF  mG)&1!4CSTZC[\]C^l|  ~C  mD  EF  mG)&1!4CSTZC[\]C^l|  ~C  mD  EF  mG)&1!4CSTZC[\]C^l|  ~C  mD  EF  mGSM
T >C1XF!A#!33FUM
T BG  HI  BJ  KK|}\Z[\]Z]Y^K_ahisatuvawKw  KKUM
V <A8Da1q 11DWM
V BG  HI  BJ  IK|}=YZ[\Y\X]I^`ghs`tuv`wIw  IKWM
V JO  PQ  JR  OS  EF  R`  ab  cd  ad  `e  Pf  ho  p|  h}  ~  h@  P@  OSWM
X nYM
\ ;<?WW##%%2aruvv./dT2FF;L9#2>DDFV,	z)Adjjl6F6Fr6J5K5QQ..s=/A<QTU]Q^_::h7*%&**YH^2_pstt#&2ESYZdSeffM  6)-CI2	6` % <47Gv.q1< % >69"g(03>n ! CH z*4A4  z*4A4 z*4A4 z*4A4 z*4A4T VB z* Z  &    &  p 8;d6:b59`8<f8<f7;d9=h 5" SN* G  KKD  IK  OS  J!c!fSIIJs  AB  B7B  F Bx VB  #A Bx=BB  A By(B  <B  ?AB  G8B  ?A0B  0KB  5By? ["B  W1AB  X5AB  Y74B  Z+BzZ:B  [CB  ^&Bz)^5B  _>B  `B{`B  `$AB  bB{bB  b"2B  cB{1c#B  c4TB  xB|	xB|	x/AB  y?EB  B|-B  ?GB  GB|' G'C
B  J2B|: KBB  MB} M1CB  QB}  QL7B  ^B}2^(B  ^8B}7_B  _B}<_0B  ` B~`B  `$B~`8B  aB~aB  a5B~b	B  bB~b-B  b=B~cB  c!B~c5B  dB~$dB  d/B~)eB  eB~.e'B  e7B~3fB  f%B~8f9C.B  j'B~=j;B  kBkE&B  qBqB  q,BrB  rBr*B  r:BsB  s!Bs82B  t+C B  xB  xBx:x6B  x9Bx:x:B  x=ByyB  yByyB  yBy<y8B  y;By<y<B  y?Bzz
B  zBzzB  zBz&z"B  z%Bz&z&B  z)Bz>z:B  z=Bz>z>B  {B{{B  {B{{B  {B{.{*B  {-B{.{.B  {1B||B  |B||	B  |B|$| B  |#B|$|$B  |'B|7|3B  |6B|7|7B  |:B}
}B  }	B}
}
B  }B}}B  }B}}B  } B}/}+B  }.B}/}/A1B   
C@	*C@:C@	@C@	c                    | j                  t              j                  t        j                  |k(        j	                  t        j
                  j                         t        j                  j                               j                         }| j                  t              j                  t        j                  |k(        j	                  t        j
                  j                         t        j                  j                               j                         }| j                  t              j                  t        j                  |k(        j	                  t        j
                  j                         t        j                  j                               j                         }g }|D ]  }|j                  d|f        |D ]  }|j                  d|f        |D ]  }|j                  d|f        |j                  d d       ||||fS )u  
    Libro de registro IV/V: lee tres tablas (sin columna section) y arma los tres bloques del Word.

    - course_activity_family    → _rafc_rows  → tags rafcf_* / rafcne_* …
    - course_activity_community → _tcee_rows → tags tcee*
    - course_activity_other     → _ar_rows   → tags arf_* / arn_* …

    _car_all: mezcla (etiqueta lógica, fila ORM) ordenada por fecha e id descendente (solo depuración/vista).
    family	communityotherc                 j    | d   j                   xs t         j                  | d   j                  xs dfS )Nr   r   )r   r  r   ts    r   r@  zB_split_course_activity_records_for_register_book.<locals>.<lambda>  s(    qtyy,DHHadggl; r   T)r  reverse)r   rt   r   r   r   r   r   r   r   ru   rv   appendsort)r   r   
_rafc_rows
_tcee_rows_ar_rows_car_all_recs          r   0_split_course_activity_records_for_register_bookrd    s    	*+	)33y@	A	+005579R9U9U9Z9Z9\	]		  	-.	,66)C	D	.3388:<X<[<[<`<`<b	c		  	)*	(22i?	@	*//4468P8S8S8X8X8Z	[		  ')H *4()* -d+,- )$()MM;   ZX55r   c                 ހ   t        d      dz  }|j                         syi t        dd      D ]B  }dd| <   dd| <   dd	| <   dd
| <   dd| <   dd| <   dd| <   dd| <   D t        dd      D ]"  }dd| <   dd| <   dd| <   dd| <   $ dd<   dd<   dd<   dd<   dd<   dd<   dd<   dd<   dd<   dd<   dd<   dd<   dd <   dd!<   dd"<   t        dd#      D ]
  }dd$| <    d%}d&}||z  }t        d|dz         D ]  }dd'| <   dd(| <    j                  t              j                  t        j                  | k(        j                  t        j                  j                               j                         }|rx|j                  xs dj                         }	|j                  xs dj                         }
|j                  xs dj                         }|	d<   |
d<   |d<   |	d <   |
d!<   |d"<   j                  t              j                  t        j                  | k(        j                  t        j                  j                               j                         }|r|j                   xs dj                         d)<   |j"                  xs dj                         d*<   |j$                  xs dj                         d+<   |j&                  xs dj                         d,<   |j(                  xs dj                         d-<   |j*                  xs dj                         d.<   j                  t,        j.                        j                  t,        j                  | k(        j1                         j3                         D cg c]  }|d/   	 }}j                  t4        j.                        j                  t4        j                  | k(        j1                         j3                         D cg c]  }|d/   	 }}t7        |      t7        |      z  }g }|D ]  }j                  t9        j:                  t4        j                              j                  t4        j                  | k(  t4        j.                  |k(        j=                         }j                  t9        j:                  t,        j                              j                  t,        j                  | k(  t,        j.                  |k(        j=                         }||fD cg c]  }||	 }}|rt;        |      nd1}|j?                  ||f         |jA                  d2 3       |D cg c]  }|d   	 }}g }|D ]  }j                  tB              j                  tB        j                  |k(        j                         }|r|jD                  xs dj                         n
tG        |      }|j?                  ||f        tI        |d0|       D ]  \  }\  }}|dz   }|d(| <   j                  t,              j                  t,        j                  | k(  t,        j.                  |k(        j                         }|sn|jJ                  xs dj                         d'| <    d4tF        ffd5t        d|dz         D ]"  } dd6|  <   dd7|  <   dd8|  <   dd9|  <   $ tI        |d0|       D ]u  \  }!\  }}|!|z  }"j                  t4              j                  t4        j                  | k(  t4        j.                  |k(        j                  t4        jL                  jO                         t4        j                  jO                               jQ                  |      j3                         }#tI        |#      D ]  \  }$}%|"|$z   dz   }&|&|kD  r |%jL                  r!|%jL                  jS                  d:      d6|& <   tU        |%d;d0      }'|'tG        |'      j                         d7|& <   tU        |%d<d0      xs dj                         d8|& <    tU        |%d=d0            d9|& <    x t        dd>      D ]"  }dd?| <   dd@| <   ddA| <   ddB| <   $ j                  tV        tB              jY                  tB        tV        j.                  tB        j                  k(        j                  tV        j                  | k(  tV        jZ                  j]                  d0            j                  tV        j                        jQ                  dC      j3                         }(tI        |(      D ]  \  })\  }*}+|)dCk\  r n|)dz   },d}-|+r=|+jD                  xs dj                         r|+jD                  xs dj                         }-n0tU        |*dDd0      r#tG        |*j.                        j                         }-|-d?|, <   |*j^                  xs dj                         d@|, <   |*j`                  xs dj                         dA|, <   |*jb                  xs dj                         dB|, <    g dE}.g dF}/|/D ]"  \  }0}1|.D ]  }2d|1 dG|2 dH<   d|1 dG|2 dI<    $ dJtF        dKtF        dLtd        ffdM}3j                  td              j                  td        j                  | k(  td        jf                  dk(  td        jh                  jk                  d0      td        jZ                  j]                  d0            j                  td        jh                        j3                         }4|4D ]g  }5|5jh                  rtm        dN      sjn                  dOvr-jq                         }6|6dPkD  rCts        fdQ|/D        d0      }1|1s[ |3|1|.|6   |5       i j                  td              j                  td        j                  | k(  td        jf                  dRk(  td        jh                  jk                  d0      td        jZ                  j]                  d0            j                  td        jh                        j3                         }7g }8|7D ]z  }5|5jh                  rtm        dN      sjq                         }6|6dPkD  r4jn                  dSv r&ts        fdT|/D        d0      }1|1sZ |3|1|.|6   |5       h|8j?                  |5|6f       | g dU}9|8D ]4  \  }5}6|.|6   }:|9D ]%  };ju                  |; dG|: dH      r |3|;|:|5        4 6 j                  tv        tx              j{                  tx        tv        j|                  tx        j                  k(        j                  tv        j                  | k(  tv        j~                  dk(  tv        j                  d/k(        j                  tv        j                        jQ                  d      j3                         }<tI        |<      D ]  \  })\  }=}>|)dk\  r n|)dz   }t        |>      }?|?j                  xs dj                         }@|@d| <   |=jD                  xs dj                         d| <   |?j                  xs dj                         d	| <   |?j                  xs dj                         d
| <    j                  tv        tx              j{                  tx        tv        j|                  tx        j                  k(        j                  tv        j                  | k(  tv        j~                  dRk(  tv        j                  d/k(        j                  tv        j                        jQ                  d      j3                         }AtI        |A      D ]  \  })\  }=}>|)dk\  r n|)dz   }t        |>      }?|?j                  xs dj                         }@|@d| <   |=jD                  xs dj                         d| <   |?j                  xs dj                         d| <   |?j                  xs dj                         d| <    j                  tv        tx              j{                  tx        tv        j|                  tx        j                  k(        j                  tv        j                  | k(  tv        j~                  dVk(  tv        j                  d/k(        j                  tv        j                        jQ                  dV      j3                         }BtI        |B      D ]  \  })\  }=}>|)dVk\  r n|)dz   }t        |>      }?|?j                  xs dj                         }@|@d| <   |=jD                  xs dj                         d| <   |?j                  xs dj                         d| <   |?j                  xs dj                         d| <    dWD ]l  \  }C}Dj                  t        tx              j{                  tx        t        j|                  tx        j                  k(        j                  t        j                  | k(  t        j                  |Ck(  t        jZ                  j]                  d0            j                  t        j                        j                         }E|EsE\  }F}>t        |>      }?|?j                  xs dj                         }@|@D dX<   Fj                  xs |?j                  xs dj                         D dY<   Fj                  xs |?j                  xs dj                         D dZ<   o t        dd%      D ]  }dd[| <   dd\| <   dd]| <    j                  td              j                  td        j                  | k(  td        jf                  dk(  td        jZ                  j]                  d0            j                  td        jh                        jQ                  d      j3                         }Gj                  td              j                  td        j                  | k(  td        jf                  dRk(  td        jZ                  j]                  d0            j                  td        jh                        jQ                  d      j3                         }Hd^t        d_td        ffd`}ItI        |G      D ]  \  })}J|)dk\  r n I|)dz   J        tI        H      D ]  \  })}J|)dk\  r n I|)dPz   J        dda<   ddb<   ddc<   ddd<   j                  t              j                  t        jZ                  j]                  d0            j                  t        j                        j3                         }Kj                  t              j                  t        j                  | k(  t        jZ                  j]                  d0            j3                         }L|LD Mci c]  }M|Mj                  |M }N}Mt        dV      D ]N  }|t        K      k\  r n>K|   }ONju                  |Oj                        }M|MrtU        Mded/      rdfnddg|dz    <   P ts        dh KD        d0      }P|Pt        K      dk\  rKdV   }PPr>Nju                  Pj                        }Q|Qr!Qj                  xs dj                         dd<   t        ddi      D ]
  }Rddj|R <    j                  t              j{                  t        t        j                  t        j                  k(        j                  t        jZ                  j]                  d0      t        jZ                  j]                  d0            j                  t        j                  t        j                        j3                         }Sts        dk |SD        d0      }T|SD Ucg c]   }UTUj                  Tj                  k7  sU" c}Ud0dl }VtI        |V      D ]V  \  }}WNju                  |Wj                        }X|Xr)tU        Xded/      rtU        Xdmd0      Wj                  k(  rdfnddj|dz    <   X T}Y|Yt        S      dnk\  rSdl   }YYrKNju                  Yj                        }Z|Zr)tU        Zded/      rtU        Zdmd0      Yj                  k(  rdfnddo<   t        ddi      D ]
  }Rddp|R <    t        dV      D ]\  }R|Rt        K      k\  r nLKR   }[Nju                  |[j                        }X|Xs6Xj                  xs dj                         dpRdz    <   ^ Pr>Nju                  Pj                        }\|\r!\j                  xs dj                         dq<   j                  t              j                  t        jZ                  j]                  d0            j                  t        j                        j3                         j                  t              j                  t        j                  | k(  t        jZ                  j]                  d0            j3                         }]|]D ^ci c]  }^|^j                  |^ c}^drt        d4tF        ffds}_t        dV      D ]  }$ _|$      dpd|$z    <    ts        dt D        t              dk\  rdV   nd0      }`ddu<   ddv<   ddw<   ddx<   D ^cg c]   }^`^j                  `j                  k7  s^" c}^d0dV }atI        |a      D ]/  \  }b}cju                  |cj                        }d|drdfnddybdz    <   1 `r"ju                  `j                        rdfnddx<   `rju                  `j                        }e|eritU        edzd0      xs dj                         }ftU        ed{d0      xs dj                         }gd|j{                  d} f|gfD              j                         d~<   j                  t              j                  t        j                  | k(        j                         }h|hr?hjJ                  xs dj                         r!hjJ                  xs dj                         d<   dt        d4tF        ffd}idt        d0z  d4t        ffd}jdt        d0z  d4t        ffd}kt        ddi      D ]
  }ldd|l <    t        dV      D ]T  }l|lt        K      k\  r nDNju                  Kl   j                        }m|ms4 i jmj                              dldz    <   V Pr8Nju                  Pj                        }n|nr i jnj                              d<   t        dV      D ]T  }o|ot              k\  r nDju                  o   j                        }p|ps4 i kpj                              ddoz    <   V `r8ju                  `j                        }q|qr i kqj                              d<   t7               }rg }sj                  t        j                        j                  t        j                  | k(        j3                         D ].  \  }t|tstrvsrj                  t       sj?                  |t       0  is      d<   d   d<   d   d<   d   d<   d}ud}vt        d|udz         D ]  }wdd|w <   dd|w <    dd<   t        dRudz         D ]  }wdd|w d<    t        dudz         D ]h  }wt        dvdz         D ]T  }xwdk(  r!ddx <   dd|x <   dd|x <   dd|x <   )ddw dGx <   dd|w dG|x <   dd|w dG|x <   dd|w dG|x <   V j g }yj                  t              j                  t        jZ                  j]                  d0            j                  t        j                  jO                               j3                         }z|zD ]  }{j                  t              j                  t        j                  | k(  t        j                  |{j                  k(        j                         }|g }}||rgj                  t        j                        j                  t        j                  |j                  k(        j3                         D cg c]  }|d/   	 }}}j                  t              j                  t        j                  | k(  t        j                  {j                  k(        j                  t        jL                  jO                         t        j                  jO                               j3                         }~|r|j                  xs dj                         nd}}s~ssyj?                  }~d        t        y      ukD  rt        j                  du       yd0|u }yt        dt        y            }d4tF        fd}t7               }|yD ]5  }|d   D ]+  }tU        |dd0      sj                  j|                         - 7 rt        t                    ni }tI        yd      D ]z  \  }} i|d         d| <   |dk(  r	d   d<   nd   d d<   d   }|rd/   j                  nd0}|tG              j                         ndd <   tI        d      D ]  \  } }| vkD  r j                  xs dj                         }j|                  rju                  j|                        nd}dk(  rM jL                        d|  <   |j                  xs dj                         d|  <   d|  <   d|  <    jL                        d dG|  <   |j                  xs dj                         d dG|  <   d| dG|  <   d| dG|  <     } d}t        d|dz         D ]  }Xdd|X <   dd|X <   dd|X <    j                  t              j                  t        j                  | k(        j                  t        jf                  jO                         t        j                  jO                         t        j                  jO                               j3                         }t        |      kD  rt        j                  d       d0| }g }tI              D ]}  \  }R}|Rd/k(  rjf                  t        jf                        nd0}Rdz
     jf                  t        Rdz
     jf                        nd0}adk7  sjj?                  Rdz           dddd}tI        d      D ]  \  } } i|j                  g      }|jf                  t        jf                        nd0}ju                  ||d nd      }dj{                  d |fD              d|  <   j                  xs dj                         d|  <   j                  xs dj                         d|  <    t        dt                    }d&}d}d}t        d|dz         D ]R  }wdd|w d<   D ]  }d| dGw d<    t        ddz         D ]#  }ddw dG| <   dd|w dG| <   dd|w dG| <   % T d&}d}t        d|dz         D ]R  }wdd|w d<   D ]  }d| dGw d<    t        ddz         D ]#  }ddw dG| <   dd|w dG| <   dd|w dG| <   % T d&}t        d|dz         D ]]  }wdd|w d<   dD ]  }d| dGw d<    t        ddz         D ].  }ddw dG| <   dd|w dG| <   dd|w dG| <   dd|w dG| <   0 _ t        |       \  }}}}t        |      kD  rt        j                  d       d0| }t              kD  rt        j                  d       d0| }t              kD  rt        j                  d       d0| }t        dë      dz  }	 j                  j                  ddŬƫ       dd|  dddddddt               dD Mcg c]  }M|Mj                   c}M dD Mcg c]  }M|Mj                   c}M dD Mcg c]  }M|Mj                   c}M ddg}D ]  \  }}j?                  d|j                   d|dtU        |dd0              |j?                  dtU        |dd0             |j?                  dtU        |dd0             |j?                  dtU        |dd0             |j?                  dtU        |dd0             |j?                  dtU        |dd0             |j?                  d        j?                  d߫       |j?                  d       |j?                  d       |j?                  d       dj{                  |      dz   }j                  |d       t        j                  d|j                                d4tF        fd}d4tF        fd}tI        d      D ]p  \  }} |jL                        d| d<   t        |j                        }t        |      kD  r't        j                  dtU        dd0             d0| }rnd0g}tI        |d      D ]  \  }}|"dd dG <   dd| dG| <   dd| dG| <   *tG        ju                  d      xs d      j                         d dG <   t        g      d| dG| <   t        |g      d| dG| <     tU        dd0            d d<    |tU        |dd0            d| d<    |tU        |dd0            d| d<    |tU        |dd0            d| d<   s t        dt                    }tI        d      D ]p  \  }} |jL                        d| d<   t        |j                        }t        |      kD  r't        j                  dtU        dd0             d0| }rnd0g}tI        |d      D ]  \  }}|"dd dG <   dd| dG| <   dd| dG| <   *tG        ju                  d      xs d      j                         d dG <   t        g      d| dG| <   t        |g      d| dG| <     tU        dd0            d d<    |tU        |dd0            d| d<    |tU        |dd0            d| d<    |tU        |dd0            d| d<   s t        dt                    }tI        d      D ]t  \  }} |jL                        d| d<   t        |j                        }t        |      kD  r't        j                  dtU        dd0             d0| }rnd0g}tI        |d      D ]  \  }}|-dd dG <   dd| dG| <   dd| dG| <   dd| dG| <   5tG        ju                  d      xs d      j                         d dG <   t        g      d| dG| <   t        |      d| dG| <   t        |      d| dG| <     tU        dd0            d d<    |tU        |dd0            d| d<    |tU        |dd0            d| d<   w t        dt                    }t        dd      D ]"  }dd| <   dd| <   dd| <   dd| <   $ j                  t              j                  t        jZ                  j]                  d0            j                  t        j                        jQ                  d      j3                         }j                  t              j                  t        j                  | k(  t        jZ                  j]                  d0            j3                         }|D ^ci c]  }^|^j                  |^ }}^dt        d0z  d4tF        ffd}tI              D ]  \  }}|dk\  r ndz   }&ju                  j                        }|s2tU        dd/      rdfndd|& <   tU        d d0      xs dj                         }|rn j                        d|& <   tU        dd0      xs dj                         d|& <   j                  t        j                        j                  t        j                  j                  k(        j3                         D cg c]  }|d/   	 }} i|      d|& <   " dd<   dd<   dd<   j                  t              j                  t        jZ                  j]                  d0            j                  t        j                        jQ                  dR      j3                         }j                  t              j                  t        j                  | k(  t        jZ                  j]                  d0            j3                         }|D ci c]  }|j                  | }}tI              D ]U  \  }}|dRk\  r nKju                  j                        }|r tU        dd0      xs dj                         ndddz    <   W j                  t              j                  t        j                  | k(  t        jZ                  j]                  d0            j                         }|r@jJ                  xs dj                         r"jJ                  xs dj                         d<   j                  t              j                  t        j                  | k(  t        jZ                  j]                  d0            j                  t        j                        j3                         }d4tF        fd}dt        d4t        ffd}t        t              }|D ]  j                  t        j                        j                  t        j                  j                  k(        j3                         D ]4  \  }|s|   }Đt        fd	|D              r$j?                         6  D ]  }|   jA                  d
 3        g }Őt	        Ðj                         ¬3      D ];  }|   }t        d/t        |      d      D ]  }j?                  |||dz    f        = t        dt        ū            }t        dd|z        }t        d|dz         D ]  }dd|ɛ <   dd|ɛ <   dd|ɛ <    t        ddz         D ]  }dd|ɛ <   dd|ɛ <   dd|ɛ <    tI        ū      D ]6  \  }\  }}tI        |˫      D ]j  \  }$dz  |$z   dz   }j                  xs dj                         d <    j                        d| <    |j                        d| <   l  ig      ddz    <   t        ˫      dk\  r+d   jJ                  xs dj                         ddz    <   d0d D Xcg c]?  }X|XjJ                  xs dj                         s"XjJ                  xs dj                         A }}Xdj{                  |̫      ddz    <   9 t        dd      D ]  }dd|͛ <   dd|͛ <   dd|͛ <    j                  t              j                  t        jZ                  j]                  d0            j                  t        j                        jQ                  d      j3                         }Ήj                  t              j                  t        j                  | k(  t        jZ                  j]                  d0            j3                         }|D Mci c]  }M|Mj                  |M }}MtI        Ϋ      D ]  \  }}|dk\  r nju                  j                        }dz   }|s0Ӑj                  xs dj                         dԛ <   Ӑj                  xs dj                         dԛ <   Ӑj                  xs dj                         dԛ <    dd<   dd<   j                  t              j                  t        j                  | k(  t        jZ                  j]                  d0            j                         }|rHjJ                  xs dj                         r*jJ                  xs dj                         }|։d<   |։d<   t        ddn      D ]J  }dd| <   dd| <   dd| <   dd| <   dd| <   dd| <   dd| <   dd| <   L t        dd      D ]  }dd |כ <   dd!|כ <    j                  t               j                  t         jZ                  j]                  d0            j                  t         j                        j3                         }dLt         d4t        fd"}ِd#d$d%d}d/d/d/d}g }|D ]B  } |ݫ      }|   \  }}|   }||z   }||kD  r#xx   dz  cc<   j?                  f       D jA                  d& 3       tI        |ܫ      D ]  \  }\  }}|ݐj"                  xs dj                         }ݐj$                  xs dj                         }jf                  dv rtG        jf                        nd}d}t        |<      k  r'|<   \  }}|jD                  xs dj                         }nr}d | <   d!| <   dlk  sdz   }d| <   d| <   d| <   d| <   |d| <   |d| <   |d| <   |d| <    t        dë      }|j                  ddŬƫ       j                  t&              j                  t&        j                  d/k(  t&        j                  | k(        j                         }|j(                  xs d'|  j+                  d|dG      }t-        j.                  d(d|      d0d }d)| dGt1        j2                         j4                  d0dl  d*z  }|d+t1        j2                         j4                  d0dl  d*z  }d,d-d.}	 t7        |       t;        t        |      |      }t9        |||       t;        |ǫ       t=        |       tI        yd      D ]1  \  }}t        |d         }|dkD  st?        t;        v             3 tA        d       tC        |       tE        |       tG        |       tI        |       tI        d      D ]Q  \  }}t        t        |j                              }t        d|rt;              nd      }|dkD  sDtK               S tI        d      D ]Q  \  }}t        t        |j                              }t        d|rt;              nd      }|dkD  sDtM               S tI        d      D ]Q  \  }}t        t        |j                              }t        d|rt;              nd      }|dkD  sDtO               S tQ        jR                  tG              tG                    }	 jU                  dŐ/       ju                  d0      d,k(  rd0ju                  d1d-      fS tG              d0fS c c}w c c}w c c}w c c}w c c}Mw c c}Uw c c}^w c c}^w c c}w c c}Mw c c}Mw c c}Mw # t        $ r!}t        j                  d       Y d0}~d0}~ww xY wc c}^w c c}w c c}w c c}Xw c c}Mw # t        $ r Y w xY w# 	 jU                  dŐ/       w # t        $ r Y w w xY wxY w(2  u   Lógica común para generar el libro de registro por course_id. Rellena regular, specialist, specialized_assistant y coordinadores (school, daem, support_networks).r  zregister_book.docx)NzITemplate register_book.docx no encontrado en files/original_student_filesr   r  r   regular_professional_full_name_regular_professional_subject_regular_professional_phone_regular_professional_email_"specialist_professional_full_name_ specialist_professional_subject_specialist_professional_phone_specialist_professional_email_r7  -specialized_assistant_professional_full_name_+specialized_assistant_professional_subject_)specialized_assistant_professional_phone_)specialized_assistant_professional_email_school_coordinator_full_nameschool_coordinator_emailschool_coordinator_phonedaem_coordinator_full_namedaem_coordinator_emaildaem_coordinator_phone&support_networks_coordinator_full_name"support_networks_coordinator_email"support_networks_coordinator_phoneemacfcnacEMACFCNACr  satc_r  r  rarpo_rarpas_satc_1satc_2satc_3satc_4satc_5satc_6r   Nl    J)c                     | d   | d   fS )Nr   r   r8  r  s    r   r@  z._generate_register_book_impl.<locals>.<lambda>  s    1Q41, r   )r  r   c                    |  t        | t              r| j                         syt        | t              rg }| D ]  }t        |t              rK|j                  d      xs |j                  d      xs dj                         }|sL|j                  |       ^|sa|j                  t        |      j                                 dj                  |      S 	 t        | t              rt        j                  |       nd }t        |t              r |      S 	 t        |       j                         S # t        j                  t        f$ r Y 4w xY w)Nr   r   nombre, )r=  r   r   r  r>  r   r]  joinr  r  JSONDecodeErrorr  )rawpartsr  nr;  !_register_book_teacher_names_lines        r   r  zG_generate_register_book_impl.<locals>._register_book_teacher_names_line  s   ;:c3/		c4 E 4dD)&)ETXXh-?E2LLNAQLLT!234 99U##	&0c&:4::c?D$%8>> & 3x~~ $$i0 		s   >D/ /E
Erarpf_rarphp_rarpad_rarpnfd_r  pedagogical_hoursr}  teacher_namesr  oaaa_haar_hafa_tae_r  
subject_id)mondaytuesday	wednesdaythursdayfridaysaturdaysunday))r   january)r5  february)r6  march)r7  april)r  may)r  june)r  july)r  august)r  	september)r  october)r  november)r   decemberr   _date_time
month_namewd_namer   c                     |j                   j                  d      |  d| d<   |j                  xs dj                         |  d| d<   y )Nr  r   r  r   r  )meeting_dater  meeting_timer   )r  r  r   rO  s      r   
_fill_slotz0_generate_register_book_impl.<locals>._fill_slot  sW    7:7G7G7P7PQ[7\
|1WIU348;8H8H8NB7U7U7W
|1WIU34r   rD  )r   r5  r6  r7  r  r  r  r  c              3   N   K   | ]  }|d    j                   k(  s|d     ywr   r   NrD  r  r  r0  s     r   r  z/_generate_register_book_impl.<locals>.<genexpr>!  s#     DAAaDAGGO1Q4D   %
%r5  )r  r  r  r  r   c              3   N   K   | ]  }|d    j                   k(  s|d     ywr  r  r  s     r   r  z/_generate_register_book_impl.<locals>.<genexpr>;  s#     H!qtHr  )r  r  r  r  r  r6  ))r   rX  )r5  daem)r6  support_networks_coordinator_full_name_coordinator_email_coordinator_phonereunion_date_reunion_attendees_reunion_agreements_r4  meetingc                    |j                   r!|j                   j                  d      d|  <   
j                  t              j	                  t        j
                  |j                  k(  t        j                  j                  d             j                         }g }|D ]  }d}
j                  t              j	                  t        j                  |j                  k(        j                         }|r)t        
|      j                  xs dj                         }nm
j                  t               j	                  t         j                  |j                  k(        j                         }|r|j                  xs dj                         }|s|j#                  |        dj%                  |      d|  <   
j                  t&              j	                  t&        j(                  |j                  k(  t&        j                  j                  d             j                         }dj%                  d |D              }	|	d|  <   y )	Nr  r  r   r  r  ; c              3      K   | ]A  }|j                   xs d j                         s"|j                   xs d j                          C yw)r   N)
agreementsr   )r  rs     r   r  zK_generate_register_book_impl.<locals>._fill_reunion_slot.<locals>.<genexpr>  s:     #zQ^_^j^j^pnp]w]w]yQ\\%7R$>$>$@#zs
   #A	#A	r  )r  r  r   rV   r   meeting_schedualing_register_idr   r   r   r   rO   r   r   r   r  r   rP   r]  r  rU   meeting_schedualing_id)r4  r  reg_rowsr  rpr  r  usragreements_rowsagreements_textr   rO  s             r   _fill_reunion_slotz8_generate_register_book_impl.<locals>._fill_reunion_slot  s   070D0D0M0Mj0YL=,- HH@AV;[[_f_i_ii;HHLLTR SU 	  
	!BB88-.556G6J6JbN`N`6`aggiD1"d;EEKRRThhy)00ASAS1STZZ\---2446BR 
	! 2651A)!-. HH56V0GG7::U0==AA$G SU 	 ))#z/#zz2A*1#./r   
cseacpea_1
cseacpea_2
cseacpea_3
cseacpea_4criterion_selectedr  	cseacpea_c              3   ~   K   | ]5  }|j                   xs d j                         j                         dv s2| 7 yw)r   )r  rX  r  N)r  r   r   r  r  s     r   r  z/_generate_register_book_impl.<locals>.<genexpr>  s2     _qQUU[b$7$7$9$?$?$AE^$^_s   3==r  
cseacpeas_c              3   b   K   | ]'  }d |j                   xs dj                         v s$| ) ywr  r   N)labelr   )r  os     r   r  z/_generate_register_book_impl.<locals>.<genexpr>)  s(     PqfB8M8M8O.OP   %//r  diversity_strategy_option_idr  cseacpeas_9csmafa_csmafa_4_asp_idxc                     | t              k\  ryj                  |    j                        }|syt        |dd       xs dj	                         S )Nr   r  )r  r   r   r   r   )r  _adj_adj_aspects_adj_by_asps     r   _csmafa_adj_valuez7_generate_register_book_impl.<locals>._csmafa_adj_valuea  sO    s<((|H5889gt,299;;r   c              3   b   K   | ]'  }d |j                   xs dj                         v s$| ) ywr  )r  r   )r  as     r   r  z/_generate_register_book_impl.<locals>.<genexpr>l  s(     DqFquu{.A.A.C$CDr  ea_1ea_2ea_3ea_4ea_r  other_aspect_textr  c              3   &   K   | ]	  }|s|  y wr  r8  r  r  s     r   r  z/_generate_register_book_impl.<locals>.<genexpr>  s     /Ka/K   csmafa_8csmafa_9_sidsc                 |   | syg }| D ]  }|sj                  t              j                  t        j                  |k(        j	                         }|sL|j
                  xs d d|j                  xs d d|j                  xs d j                         }|s|j                  |        dj                  |      S )Nr   r  r  )r   r}   r   r   r   r  r  r  r   r]  r  )r  _parts_sid_prQ  r   s        r   _qse_student_names_linez=_generate_register_book_impl.<locals>._qse_student_names_line  s     	'D120;;tCD 
 R("*<*<*B)C1REWEWE][]D^_eegMM#&	' yy  r   _resp_idc                     | sg S j                  t        j                        j                  t        j                  | k(        j                         D cg c]  }|d   	 c}S c c}w Nr   )r   r]   r   r   course_diversity_response_idr   )r  r[  r   s     r   _qse_sids_div_respz8_generate_register_book_impl.<locals>._qse_sids_div_resp  s_    I XXALLMV7TTX``aSU	
 aD
 	
 
   A$_adj_idc                     | sg S j                  t        j                        j                  t        j                  | k(        j                         D cg c]  }|d   	 c}S c c}w r  )r   ra   r   r   course_adjustment_idr   )r  r[  r   s     r   _qse_sids_adjz3_generate_register_book_impl.<locals>._qse_sids_adj  s^    I XX:EEFV0EEPQSU	
 aD
 	
 
r  qse_qse_4qse_8qse_9osc_1osce_1edo_1r  r  raegee_raegeoa_raegeop_1_1raegeop__1	raegef_1_	raegel_1_
raegear_1_	raegep_1_raegef_raegel_raegear_raegep_)student_ids
objectivesinterventionsuD   register_book: se omiten registros de apoyos más allá de %s áreasc                 X    | yt        | d      r| j                  d      S t        |       S Nr   r  r  r  r  r   _ds    r   _raeg_fmt_datez4_generate_register_book_impl.<locals>._raeg_fmt_date!	  ,    :2z";;z**2wr   r"  r   )startr   r!  2   rlane_1_rllr_1_rlcs_1_uE   register_book: se omiten logros de aprendizaje más allá de %s filasu   1er períodou   2do períodou   3er períodor   r5  r6  u	   Período  - c              3   &   K   | ]	  }|s|  y wr  r8  r  s     r   r  z/_generate_register_book_impl.<locals>.<genexpr>q	  s     3Q!qA3Qr  )rafcniobrafcniac	rafcniaccrafcnirrafcf_rafcne_rafcnia_rafcnit_)tceeotceeatceeactceertceef_tceen_tceeap_tceete_arf_)armaraarcarn_arpa_arr_art_uJ   register_book: se omiten registros de actividades familia más allá de %suL   register_book: se omiten registros de actividades comunidad más allá de %suD   register_book: se omiten registros de actas (other) más allá de %sr   zregister_book_car_debug.txtTr   z2=== register_book: IV/V actividades (3 tablas) ===z
course_id=u   TABLAS → PLANTILLA WORD:uU     course_activity_family    → IV familia   (rafcf_*, rafcne_*, rafcniob/ac/acc/nir)uN     course_activity_community → IV comunidad (tceef_*, tceen_*, tceeo/a/ac/er)uH     course_activity_other     → V acta       (arf_*, arn_*, arm/ara/arc)zTotal filas (suma 3 tablas): zIds por tabla: family=z community=z other=z--- Cada fila ---zid=z	 section=z date=r   z  objectives=z  activities=
activitiesz  agreements=r  z
  results=resultsz  attendees=	attendeesu2   --- Cómo quedan los bloques (i=1..N por tipo) ---uY   family:    registro índice i → rafcf_i_1, rafcne_i_fila… (objetivos=objectives, …)uX   community: registro índice i → tceef_i_1, tceen_i_fila… (objetivos=objectives, …)um   other:     registro índice i → arf_i_1, arn_i_fila… (arm=motivo=objectives, ara=agreements, arc=results)
utf-8)encodingzNregister_book CAR: debug escrito en %s (stdout no siempre visible con uvicorn)z0register_book CAR: no se pudo escribir debug: %sc                 X    | yt        | d      r| j                  d      S t        |       S r$  r%  r&  s    r   _rafc_fmt_datez4_generate_register_book_impl.<locals>._rafc_fmt_date	  r)  r   c                     | yt        | t        t        f      r1| j                  dd      j	                  dd      j                         S t        |       j	                  dd      j                         S )Nr   rN  r  )errors    r  )r=  bytes	bytearraydecoder  r   r   r?  s    r   _rafc_field_textz6_generate_register_book_impl.<locals>._rafc_field_text	  s`    9a%+,88GI86>>xMSSUU1v~~h,2244r   uJ   register_book: se omiten participantes más allá de %s en actividad id=%sr   r   	rafcniob_	rafcniac_
rafcniacc_rafcnir_uT   register_book: se omiten participantes más allá de %s en actividad comunidad id=%stceeo_tceea_tceeac_tceer_uM   register_book: se omiten participantes más allá de %s en acta (other) id=%sarm_ara_arc_euaac_eaaam_peu_euae_c                 ,   | syj                  t        j                        j                  t        j                  | k(        j                         D cg c]  }|d   	 }}|syg }|D ]  }j                  t              j                  t        j                  |k(        j                         }|sI|j                  xs dj                         sh|j                  |j                  xs dj                                 dj                  |      S c c}w )Nr   r   r  )r   rd   r  r   course_curricular_adequacy_idr   rx   r   r   subjectr   r]  r  )r  r[  r  r  _sub_id_sjr   s         r   _ca_subject_labelsz8_generate_register_book_impl.<locals>._ca_subject_labelsV
  s     XXBMMNV8VVZaabSU	
 aD
 
  	;G((<(//70JKQQSC)r002s{{0b779:	; yy  
s   Dapplied
scope_textstrategies_textepea_1epea_2epea_3epea_c                 X    | yt        | d      r| j                  d      S t        |       S r$  r%  r&  s    r   _pai_fmt_datez3_generate_register_book_impl.<locals>._pai_fmt_date
  r)  r   r  c                 >   j                  t              j                  t        j                  | k(        j	                         }|sd| fS |j
                  xs d d|j                  xs d d|j                  xs d j                         j                         }|| fS )Nr   r  )
r   r}   r   r   r   r  r  r  r   r   )r  r   _nmr   s      r   _pai_student_sort_keyz;_generate_register_book_impl.<locals>._pai_student_sort_key
  s    HH-.V,774?@UW 	
 :R ""4"4":!;1R=O=O=USU<VW]]_eegT{r   c              3   P   K   | ]  }|j                   j                   k(    y wr  r   )r  _r_psrs     r   r  z/_generate_register_book_impl.<locals>.<genexpr>
  s     7Bruu'7s   #&c                     | j                   S r  r|  )r  s    r   r@  z._generate_register_book_impl.<locals>.<lambda>
  s
    add r   paie_aer_paio_paih_paifi_paift_r  etfd_etfs_etfe_etfoetfo_1regular_diversified_subject_regular_diversified_strategy_regular_diversified_period_regular_diversified_criteria_	strategy_aada_pta_cee_r  aesdt_aesdter_c                 :    | j                   }|dv rt        |      S y)Nr/  r   )r8  r   )r   r`  s     r   _impl_period_bucketz9_generate_register_book_impl.<locals>._impl_period_bucket1  s    mm)s8Or   )r   r  )r  r   )r  r  c                     | d   S r  r8  rZ  s    r   r@  z._generate_register_book_impl.<locals>.<lambda>F  s
    ! r   curso_z[^\w\-]libro_registro_r  	_rb_work_r   z!Error generando libro de registro)r   rg  )
missing_okr   rg  )r   r   r  r   rW   r   r   r   r   r   r   planning_learning_stylesr   planning_strengthsplanning_support_needsrX   planning_collab_co_teachingplanning_collab_assistantsplanning_collab_studentsplanning_collab_familyplanning_collab_communityplanning_observationsro   r  distinctr   rn   setr   r  r   r]  r^  rx   rk  r   r  observationsr   asclimitr  r   rY   	outerjoinr   r   hours_support_regular_classroomhours_support_outside_classroomspecialized_support_typesrT   r8  r  r   r  rD  weekdaynextr   rR   rO   r  r   teacher_type_idrF  r   r  r  emailrS   coordinator_type_idr   rZ   
sort_orderr\   diversity_criterion_idr  how_textr[   r_   r`   adjustment_aspect_idr^   r  r|   r   r   r   support_arearp   support_area_idrq   course_record_support_idrr   learning_objectivesr   r   r   r   r  activities_descriptionplacers   achievementscommentsrd  r   r   
write_textr   r   r   rL  r!   r"   r    r   rb   rc   curricular_adequacy_type_idre   rj  rf   rg   eval_diversity_type_idrh   ri   tupler   rj   course_individual_support_idr  sortedkeyshorariofecha_iniciofecha_terminork   rl   !family_community_strategy_type_iddescripcionseguimiento
evaluacionrm   rw   applied_strategiesactions_takenrz   r*  r  r  r  r  r  r  shutil_copyr   r   r   r   r   r   r   r   r   r   r   r   r   r  r   )r   r   rP  r4  _RB_ROWS_PER_REGISTER_RB_MAX_REGISTERS_RB_MAX_ACTIVITY_ROWS_rkds_rowemac_valfc_valnac_valcw_rowr[  	_obs_sids	_act_sids_rb_sid_set
_rb_scoredr  _min_a_min_or  _cands_rank_rb_subject_ids_rb_subject_blocksrm  _slbl_idx_slabel_k_obs_row_ri_bidx_base_cta_sub_j_cta_n_phsup_org_rowsidxsupsubjr  ambito	_weekdays_monthsr   r  wdr  meetings_p1r   wd_idxmeetings_p2unmatched_p2
_months_p2r  mnameptc_regularptcr  _dispr  ptc_specialistptc_assistantr  r  coordccmeetings_for_reunion_p1meetings_for_reunion_p2r  r  div_criteriadiv_responsesr  _div_by_cidr  
_otro_crit_r_otro_i_strategy_opts_ordered_otro_stratr  _opts_col2_1_8_optr}  _opt_otros_col2_r9_c_r_o	_adj_rowsr  r  _asp_otro_adj_aspects_ea123_ea_i_ea_asp_ea_row_ad8_v8_o8_div_obsr  r  r  _qi_cr_cr_o_qj_adj_q_ad_q8	_seen_qse_qse_course_sids_qsid_RAEG_MAX_BLOCKS_RAEG_MAX_ROWS_bb_br_raeg_blocks_support_areas_raeg_sa_rec_cr	_stids_cr	_intvs_cr_obj_cr_n_raeg_blocksr(  	_raeg_pid_blk_iv_raeg_prof_names_bi_ints_fh_act_pn_RLA_MAX_ROWS_la_rows_rla_margin_top_rows_la_pid	_prev_pid_rla_period_labelsry  _plab_n_rla_rows_RAFC_MAX_BLOCKS_RAFC_MAX_PARTICIPANT_ROWS_rafc_text_keys_rr_TCEE_MAX_BLOCKS_tcee_text_keys_AR_MAX_BLOCKSrb  r_  r`  ra  _car_dbg_path_lines_secrc  _txt_erQ  rY  _att_rows_rj_one_n_rafc_blocks_n_tcee_blocks_n_ar_blocks	_ca_types_ca_rows_ca_by_typern  _ci_tr  _scope_stu_ids_eval_div_types_eval_div_rowsra  _eval_by_type_ei_evt_evr_eval_div_obs	_pai_rowsrw  rz  _sid_to_rows_lst_pai_blocks_chunk_start_n_pai_blocks	_max_paih_pp_one_sid_slice_obs_pie_fc	_fc_types_fc_rows_fc_by_type_fi_fty_frowrQ  _fc_obs	_etfo_txt_ai	impl_rowsr  _PERIOD_SLOT_RANGE
_per_count_by_slotimplr`  r*  endlocalslotseq_idx_strat_crit_persubject_txt_ptc_profjrQ  rY  r*  rR  rS  	work_docxr   _n_rarpo_blocks_ix_nri_n_att_nprr  r  r~  r  r0  rO  s    `                                                                                                                                                                                                                                                     @@@@@@r   _generate_register_book_implr    sC   78;OOM!`L1a[ @>@6qc:;<>4QC89:<21#67:<21#67AC9!=>?A7s;<=?5aS9:=?5aS9:@ 1a[ KLNDQCHIJLB1#FGHJ@DEHJ@DE	K
 46L/0/1L+,/1L+,13L-.-/L)*-/L)*=?L9:9;L569;L56LLLLLL1a[ '$&uQC[!' 14EEQ)A-. +')vcU^$(*wse_%+
 	)*	(22i?	@	*--224	5		  339r@@B++1r88:006B==?'V#T%U'V#T%U 	'(	&00I=	>	(++002	3		  "("D"D"J!Q!Q!SX"("C"C"Ir!P!P!RX"("A"A"GR!N!N!PX"("?"?"E2!L!L!NX"("B"B"Hb!O!O!QX"(">">"D"!K!K!MX =HHI	3==J	K		 	
!I  :EEF	0::iG	H		 	
!I  i.3y>1KJ )HHTXX>AABCV0::iG0;;tC VX 	 HHTXXADDEFV3==J3>>$F VX 	 %f-?!??%F65$-(')( OO.O/%/0qt0O0 1hh|$++LOOt,CDJJL/2"))+D	!!4-01 "++=>P?P+Q!R PotWAX'.wrd^$HH89V3==J3>>$F UW 	 +3+@+@+FB*M*M*OL6"'P #  * Q-12 ,')vcU^$(*wse_%(*wse_%)+xu%&	,
 #,,>?Q@Q,R"S tg--HH56V0::iG0;;tC X6;;??ACcCfCfCjCjClmU()SU 	 "(+ 
	tHBaB))yy.2ii.@.@.LvbT]+$ 3T:C/23x~~/?wrd^,,3D-,N,TRT+[+[+]L72$(,MgVZ\kmqNr,sL8B4)
	tt2 1b\ &$&uQC[!$&uQC[!$&uQC[!#%tA3Z 	& 	)<8	<!9!D!D!W	X	$..);$1155d;

 
*--	.	r	  &l3 Q[c4"9!GT\\'R..0ll(b//1FS,-(..0F$*uQC[!%(%H%H%NB$U$U$WuQC[!%(%H%H%NB$U$U$WuQC[!$'$A$A$GR#N#N#PtA3Z Q  _IG ! 9: 	9B68LJ<qE2368LJ<qE23	99Xs XS X7O X 	)*	$..);$..!3$1177=$1155d;	

 
*77	8	   77+77//A:DDdK
:y0#67  	)*	$..);$..!3$1177=$1155d;	

 
*77	8	  L /7+A:77((HWH$OJ:y'8#> f./  LJ# VF# 	E##ugQwiu$=>5'3/	 	02CD	!@!P!PTeThTh!h	i	+55B+;;q@+==B


 
144	5	q	  &k2 	V[c4!8!G+B5__*113	>G6qc:;=@[[=NB<U<U<W4QC89;@;;;L":S:S:U21#67;@;;;L":S:S:U21#67	V 	02CD	!@!P!PTeThTh!h	i	+55B+;;q@+==B


 
144	5	q	  &n5 	Y[c4!8!G+B5__*113	AJ9!=>@C@Qr?X?X?Z7s;<>Ckk>OR=V=V=X5aS9:>Ckk>OR=V=V=X5aS9:	Y 	02CD	!@!P!PTeThTh!h	i	+55B+;;q@+==B


 
144	5	q	  &m4 	d[c4!8!G+B5__*113	LUDQCHIKN;;K\Z\JcJcJeB1#FGINIZXZHaHaHc@DEINIZXZHaHaHc@DE	d (] b#VHH,.?@T#%<%L%LPaPdPd%deV'11Y>';;?RR'4488>
 X-001UW 	 HB/D9E.B557I>GLF8#9:;;=88;Xu{{;XVX:_:_:aLF8#567;=88;Xu{{;XVX:_:_:aLF8#567%b. 1b\ 5,.}QC()13)!-.24*1#./5 	)*	$..);$..!3$1155d;


 
*77	8	q	  	)*	$..);$..!3$1155d;


 
*77	8	q	 #Bc #B,D #BJ ""9: -W!837G,-
 ""9: -W!837G,- "$L!#L!#L!#L
()	'4488>	?	)44	5		  	-.	(22i?(5599$?

 
  9FF11++Q.FKF1X eL!!OOOADD!34DXZ[9\CbdyQ()e _L_J c,/14!!_
//*--0*1*:*:*@b)G)G)IL& Arl -*,z"&'- 	-.	#(??CZC]C]]

 
(5599$?#0044T:

 
)446R6]6]	^	  P*PK "8iA;;NRSRVRVZeZhZhRhaijlklmN/ 

d__T889 0!4:DATWWL   	z$(,-
 "O3'=#>!#C03oooDDE 115;TBoFXFXX   	]# Arl *')wrd^$*Ah K\"""__RUU#020Ar/H/H/JL726(+,K z}}-(,(;'B'B'DL$
&'	%2266t<	=	'22	3		  	&'	!++y8!..2248

 
  7@@1))1,@K<C <C < Ah A+<R+@wq2vh'(ADLD|,1QtM
 LLLL!-cA1F!$$R_RbRbJbacdfefgN#N3 Aw//'**-18#bs519+&'A &1oom6F6F&GsRV}//04$/52<<>C4!4d;ArHHJC'*xx/KC:/K'K'Q'Q'SL$
01	/99YF	G	 
 X**0b779$,$9$9$?R#F#F#HZ !t ! !$
S4Z 
D 

sTz 
d 
 Q| (%'tC5\"(Qx a#l##ool3/223-DEWX[X^X^E_-`L4ay)*a 
.$;<Nuxx<X$YL!Qx _#l##c!2!5!56-D]SYS\S\E]-^L4Cy)*_ !1!12$;M&))<T$UL!I
)445	(22i?	@	+
 U)+MM% ##E*+ 44DEL(4L)'2L(4L NQ(1,- ,(*wse_%)+xu%&, #%LQ(1,- .+-xuB'(.Q(1,- 9NQ./ 
	9Cax24y./24y./35z#/024y./68wse1SE2368wse1SE2379xuAcU3468wse1SE23
	99 L
!"	 --11$7	8	"//335	6		  # #
HH-.V(22i?(88CFFB UW 	 	 "A"L"LM7PPT[T^T^^_	 !I  HH9:V4>>)K4DDN X:??CCEGkGnGnGrGrGtuSU 	 DKG//52<<>PR7(%!*	
;#
H <++R	
 $$5%56C-.Nc  I 3( 	3Cs-t4c112	33
 EN+BY@SU  |15 :	T(?]@S(Twse_%!8*.|*<L'/3L/AL8C5+,_%,1eAh((t=@_S)9RTxu%&!%q1 	:HC^#..4";;=D?B?R?R"&&s':':;XZCax2@2Jy./3699?2I2I2Ky./37z#/025y./6DSXX6Nwse1SE237:yyB6M6M6Owse1SE237;xuAcU3469wse1SE23	::4 MA}q() *(*xt_%')wrd^$')wrd^$*
 	/0	.88IE	F	*4488:*5599;*--113


 
  8}}$S	
 N]+&(X& 0C7%(]]%>s3==!D/7Q/?/I/I/UCa **+[_ 	 	 5$):K ''Q/0 ,>Rha0 ES%s~~&67%(]]%>s3==!D"&&t4CSy-?Y[\).3QU|3Q)Qxu%&),)9)9)?R(F(F(Hwse_%),);(B(B(Dwse_%E aX'K !#FOQ(1,- 6)+vcU"%&! 	/B,.LB4qR)	/6:; 	6C24L73%q./35L8C5#/035L8C5#/0	6	6 ;OQ(1,- 5)+vcU"%&! 	/B,.LB4qR)	/6:; 	5C13L6#au-.24L73%q./24L73%q./	5	5 NQ*+ 2')tC5^$' 	/B,.LB4qR)	/6:; 	2C/1L4uAcU+,02L5Qse,-/1L4uAcU+,/1L4uAcU+,		2	2 2b
I2.Hj*h :))X	
   1!12

:))Z	
   1!12

8}~%R	
 O^, 014QQM,O""4$"?@$(c\V+CM?;$J%?qadd%?$@ A(231!$$34G8<TaQTT<T;UW
 # 		JD$MMdggYixvgdFD6Q5RS MMM'$d*K)NOPMMM'$d*K)NOPMMM'$d*K)NOPMMJwtY'E&HIJMML{D)I(LMNMM"		 	JKg	
 	f	
 	{	
 yy 4'   8\!!#	
c 5s 5 z3 \	T)7		)BvcU"%&t~~.t911NN\*dD)
 334D4&"52 	VIC|68wse1SE2379xuAcU3479xuAcU3469$((6:J:Pb6Q6W6W6Ywse1SE237Mtf7UxuAcU347Mtf7UxuAcU34	V -=WT<Y]=^,_yR(),<WT<Y]=^,_yR()-=gdLZ^>_-`z#b)*+;GD)UY<Z+[xuB'(/\0 C
O,Nz3 Z	T)7		)BvcU"%&t~~.t911NNf*dD)
 334D4&"52 	UIC|57vcU!C51268wse1SE2368wse1SE2358&9I9OR5P5V5V5XvcU!C5126LdV6Twse1SE236LdV6Twse1SE23	U *:'$VZ:[)\vcU"%&)9'$VZ:[)\vcU"%&*:74W[;\*]wse2&')9'$	SW:X)YvcU"%&/Z0 C
O,Nxq1 X	T'5dii'@tC5^$t~~.t911NN_*dD)
 334D4&"52 
	MIC|35tC5#/046uSE3%0135tC5#/035tC5#/036txx7G7M23N3T3T3VtC5#/04JD64RuSE3%013DT3JtC5#/03Ft3LtC5#/0
	M (8lTX8Y'ZtC5^$'7lTX8Y'ZtC5^$'7iQU8V'WtC5^$1X2 q#h-(L Aqk (&(vbT]#&(vbT]#$&tB4[!%'uRD\"	( 	,-	+88<<TB	C	-88	9	q	  	./	)33y@)66::4@

 
  >FF100!3FKF!C$J !3 !$ Y' KR!81Wruu%18y!1L#RTL6"'dL$7=2DDFF4:&@RSWSZSZ@[L6"')07H$)O)USU(\(\(^L4t% "F"Q"QR<ZZ^b^e^eef	 !H  *A)JL5&!K&  LLL
'(	&3377=	>	(33	4	q	  	)*	$..);$1155d;

 
  ;IIQQ--q0IMI/ 
	T!8  )FJWT,d39r@@BPR 	uS1WI&'	
 	45	/99YF/<<@@F

 
  -44:AAC"/"<"<"B!I!I!KX
 	-.	(22i?(5599$?

 
.11	2	 S 	C 	E 	 %0$5L 
"HH8CCDV7TTX\X_X__`SU		"GT
 %D7$77D!		"
"  4TN34 +-K|((*0EF OT"!!SZ3 	OLeL<!;K&LMN	OO
 3{+,MAq=()IQ)* )&(uSE]#%'tC5\"&(uSE]#) Q	A& *&(uSE]#')vcU^$')vcU^$*
 $-[#9 
>h!&) 	MHB'B,"C+/<<+=2*D*D*FL5'+89J9J+KL6#(+89K9K+LL6#(		M
 +B8**MuS1WI&'v;!.4Qi.D.D.J-Q-Q-SL4ay)*>DRajlR__Mb`bLiLiLkR__*113ll*.))H*=uS1WI&'
> Q{ )&(uSE]#&(uSE]#&(uSE]#)
 	12	0==AA$G	H	2==	>	q	  	+,	&00I=&3377=

 
  DLLa1669LKLy) K	T!8(Ag+0+<+<+B*I*I*KL5'+0+<+<+B*I*I*KL5'+0+;+;+Ar*H*H*JL5'K LL
67	1;;yH1>>BB4H

 
  G((.B557))/R668	(V!*X 1a[ 	&;=3A378<>4QC89:<21#67<>4QC89(*y_%$&uQC[!#%tA3Z #%tA3Z 	& Q| ,')vcU^$)+xu%&, 	<=	;HHLLTR	S	=@@	A		 !L QT  $H=1#JNPH &!$'',
s3u}#:31t%& MMnM%'1 -!T))/R668##)r002&*nn	&As4>>"rS%%%g.KD%<<-2446K K%+vaS\"',xs^$Q;!A?JL7s;<@FL8<=>BL6qc:;@EL8<=,2L9QC)(3L5%'+L4s$',L4s$1-2 *+GMM$M.XXk"))+*G*G1*Lknn`iNijpprF%%=6))=FFsCPKz2{3CR8I?9+Qtzz|7G7G7K6LERRHIdjjl&6&6r&:%;5AAI,OPF'M9-c"457HI,YI^_ M:*9nE"<q9 	ICtO,-Dax-n-	 	)A{C5iAUV+I~F.y.I(LA":Q7 	CIC89FqV#f&@AQRSDax,YTB		C
 #:Q7 	CIC89FqV#f&@AQRSDax,YTB		C
 #815 	BIC89FqV#f&@AQRSDax+IsDA		B
  ..s9~|SQY][	- zz(w&VZZ	+NOOOx=$[)6 @ 1r GL jf A* dVB &@3<T<  OI2NNOj G<6 Jt m. Md  			- 		s`  7C~5"C~:9C~?C~?CXC	_" C`Ci)Ck2 ClCCC`>:C1 a8C"bC1 bC'b&C1 b.C, cE<C1 @(D@E"D@#I3D@(Z1#D@-[ D@-`(D@2uA0DA v=B,DA y*A DA {A DA |,;DA }(D@7 "C1 1	D@:D@@D@@7	DAADAADA,ADAADA,A	DA)A&DA,A(DA)A)DA,z/register_book/{course_id}c                   K   	 t        | |      \  }}|rUt        d|j                         v rt        j                  nt        j
                  d|j                         v rdnd|dd      S t        |t        |      j                  d      S # t        $ r2}t        t        j
                  dt        |      dd      cY d}~S d}~ww xY ww)	z
    Genera y descarga el documento 27 (Libro de registro) para un curso.
    URL: GET /api/documents/register_book/{course_id}
    no encontrador  r<  Nrf  r  Gapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentrl  r  r   r   r   r  rw  r   r   r   rB  r   r   r   r  r   errra  s         r   get_register_bookr         
5iD	39HCIIK9WF55]c  ^C  ^C*9SYY[*H3c^akop  )_))`
 	

  
=="s1vtD
 	

A   C	A%B )C	* B 
C		C'C;C<C	CC	z#/generate/register_book/{course_id}c                   K   	 t        | |      \  }}|rUt        d|j                         v rt        j                  nt        j
                  d|j                         v rdnd|dd      S t        |t        |      j                  d      S # t        $ r2}t        t        j
                  dt        |      dd      cY d}~S d}~ww xY ww)	z
    Genera el documento 27 (Libro de registro) en DOCX para un curso.
    Rellena regular_professional_* (teacher_type_id=1) y specialist_professional_* (teacher_type_id=2).
    r  r  r<  Nrf  r  r  rl  r  r  s         r   generate_register_bookr    r  r  z&/register_book_car_preview/{course_id}c                 ~  K   t        ||       \  }}}}t        t        j                  d| dddddddd	|D cg c]  }|j                   c}|D cg c]  }|j                   c}|D cg c]  }|j                   c}d|D cg c]  \  }}t        ||       c}}d
d      S c c}w c c}w c c}w c c}}w w)u   
    JSON: cómo se reparten los registros de actividad del curso en las 3 subsecciones del libro
    (family / community / other) y qué tags DOCX usa cada una. No genera DOCX.
    GET /api/documents/register_book_car_preview/{course_id}
    r:  course_activity_familycourse_activity_communitycourse_activity_other)rV  rW  rX  u^   IV familia ← course_activity_family: rafcf_{i}_1, rafcne/rafcnia/rafcnit, rafcniob…rafcniruQ   IV comunidad ← course_activity_community: tceef_{i}_1, tceen/…, tceeo…tceeruA   V acta ← course_activity_other: arf_{i}_1, arn/…, arm/ara/arc)1_family2_community3_otherz1files/system/students/register_book_car_debug.txt)r   r   tablesmapping
bucket_idsrows_alldebug_file_after_generater  )rd  r   r   r  r   r   )	r   r   r  rb  r_  r`  ra  r  rO  s	            r   register_book_car_previewr    s      2b
I2.Hj*h &&"280 }r^ *44A1444,67qadd7(011!$$1
 ?GG74a.G)\'
   571Gs4   6B=B(B=B-$B=*B2=	B=B7!B=born_date_strreference_datec                    | sy	 d }dD ]B  }	 t        j                  t        |       j                         d d |      j	                         } n |sy|xs" t        j                         j	                         }|j                  |j                  z
  }|j                  |j                  z
  }|dk  r|dz  }|dz  }n%|dk(  r |j                  |j                  k  r|dz  }d}|dkD  r2|dkD  r| d|dk7  rd	nd d
| d|dk7  rd S d S | d|dk7  rd	 S d S |dkD  r| d|dk7  rd S d S 	 y# t
        $ r Y /w xY w# t
        $ r Y yw xY w)Nr   r  r  z%Y/%m/%dz%d-%m-%Yr  r   r   r   r  r!  r"   y r#  r$  )
r   rA  r   r   r   rB  r   rC  rD  r  )r  r  r  fmtrS  rT  rU  s          r   _student_age_labelr    s   	C 	C$--c-.@.F.F.H".MsSXXZ		 5 3 3 59>>)Y__,A:QJEbLFq[SWWy}}4QJEF19zUaZcR%@F84X^bcXcPTOlmmikOlmmWE!#!<==!<==A:XT&A+$!>??2!>??  +  &  sY   D< >D,D< B/D< D< D< D< D< &D< ,	D95D< 8D99D< <	EEsignature_rutsig_prof_idc                 Z   |xs dj                         }|s|s|S | j                  t              j                  t        j                  |k(        j                         }|s|S t        |dd       xs dj                         }|r|S t        | |      j                  xs dj                         S )Nr   r  )	r   r   rO   r   r   r   r   r   rut)r   r  r  r  r  s        r   _resolve_paci_signature_rutr    s    
 B
%
%
'C
+
88%&--.?.B.Bk.QRXXZD
40$7=2
D
D
FC

'D155;BBDDr   z/generate/{student_id}/21/fullbodyc                   K   d}	 t        |      }|j                  |       }t        |t              rD|j                  d      s|j                  d      dk(  rt	        t
        j                  dddd      S t        |t              r|j                  d	i       ni }|j                  d
      xs i }|j                  d      xs i }	|j                  d      xs dj                         }
|j                  dd       d|j                  dd       j                         }|
 d| j                         }d}|j                  d      r`|j                  t              j                  t        j                  |d   k(        j                         }|r|j                  r|j                  }d}|	j                  d      rr|j                  t              j                  t        j                  dk(  t        j                  |	d   k(        j                         }|r|j                   r|j                   }d}|	j                  d      }|r]|j                  t"              j                  t"        j                  |k(        j                         }|r|j$                  r|j$                  }|j                  d      xs d}i ddd|j&                  xs |d|j(                  xs |j                  d      xs dd|j*                  xs |xs dd|j,                  xs' t/        t1        |      t3        j4                               d|j6                  xs |xs dd|j8                  xs |xs dd|j:                  xs |xs dd |j<                  xs dd!|j>                  xs dd"|j@                  xs dd#|jB                  xs dd$|jD                  xs dd%|jF                  xs dd&|jH                  xs dd'|jJ                  xs dd(|jL                  xs g D cg c]2  }|jN                  xs d|jP                  xs d|jR                  xs dd)4 c}|jT                  xs g D cg c]2  }|jN                  xs d|jV                  xs d|jX                  xs dd*4 c}|jZ                  xs g D cg c]  }|j\                  xs d|j^                  xs d|j`                  xs d|jb                  xs g D cg c]  }|jd                  xs d|jf                  xs dti        |jj                        |jl                  xs d|jn                  ti        |jp                        ti        |jr                        ti        |jt                        |jv                  xs g D cg c]  }d+|jx                  xs di c}d,	 c}}d- c}}}|jz                  xs g D cg c]  }|j\                  xs d|j|                  xs d|j~                  xs d|j                  xs d|j                  xs d|j                  xs d|j                  xs g D cg c]F  }|j                  xs d.|j                  xs d|j
                  xs dti        |j                        d/H c}d0 c}}d1}t        j                  d2||dd34      }|j                  d      dk(  r/t	        t
        j                  d5|j                  d6|      dd      S t        |d7   |d8   d9:      S c c}w c c}w c c}w c c}}w c c}}}w c c}w c c}}w # t        $ rG}t        j                  d;       t	        t
        j                  d5t1        |      dd      cY d}~S d}~ww xY ww)<uI   Genera PDF completo del Plan de Adecuación Curricular Individual (PACI).Error generando documento.r   r   r  r  Nrf  r  r  r  r  r  r   r  r  r  r   r   r   r(  r  	paci_fullTr  student_rutr  r  r  student_neer%  student_coursereport_dateschool_backgroundevaluation_backgroundhuman_resourcesmaterial_resourcesevaluation_adaptation_criterialearning_results_evaluationevaluation_promotion_criteriaprofessionals)r   professional_rolesupport_roles)r   r  responsibilitiestext)	
level_codelevel_descriptionis_priorityadapted_descriptionadapted_level_codeis_not_adaptedoa_not_workedachievement_indicators_enabledachievement_indicators)subject_nameadaptation_type
strategiesr  oakindr}  r   show_indicators_label)r  
entry_code	date_fromdate_toresponsible_professionalsr  progress_rows)family_memberscurricular_subjectsprogress_entriesr  r   r   rc  r   rP  output_directoryr<  rg  r   r   rk  rl  generate_paci_full_pdf)Nr#   r   r=  r>  r   r   r  r   r   r{   r   r   r   rE  rz   rF  r*  r   rG  r  r  r  r  r  r   r   r  r  r%  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r}  r  r   generate_document_pdfrw  r   rB  r   	exception)r   r  r  r   MSG_ERROR_GENrJ  rK  r  rO  rP  rj  student_lastnamestudent_fullnamerE  rX  r*  rY  r+  rZ  r[  r  r  r  r"  loindra  r  	paci_datar   s                                 r   r  r  +  s     1MP
&r*(,,Z8nd+w'>+=+=h+G7+R"55#&3MW[\ 
 BLN\`Aa~))."=gi##O4:##O4: W-3::<&ll+<bAB!HLLQbdfDgChiooq*^1-=,>?EEGK(XXk*11+..LQ\D]2]^ddfF&,,$00<<$%55:KNNhWbNc<cd 
 &,,$00;<((67>>?Z?]?]ag?ghnnpCs4488LL-3	N
N
!7!7!K;KN
 4++Zx||<S/TZXZN
  !7!7!J9!J	N

 4++_/A#i.RVR\R\R^/_N
 4++=x=2N
 d11F[FBN
 d11F[FBN
 4++1rN
  !7!7!=2N
 $T%?%?%E2N
 t339rN
 !$"9"9"?RN
 -d.Q.Q.WUWN
 *4+K+K+QrN
  ,T-O-O-USU!N
"  ,,2 	 FFLb)*)<)<)B%&__%:#N
> --3 	 FFLb$%NN$8b()(:(:(@b> 228b/$ $. + %&NN$8b'('8'8'>B"#,,"4"  $%#8#8#>B,  +---*=2131E1E1K+/+?353I3I3OR242G2G.223D3D.E-1"2B2B-C>B2CdCd>e -/,E,E,K7$' "(R 87,	$V //52%!$ ! %&NN$8b"#,,"4"!"!2 yyB121L1L1RPR$%NN$8b #$//"7R&  %&FFNd+,==+>B&'hhn"59!:Q:Q5R	&!uN
	`  55#4
 ::h7*"AA#&6::i3Waef  $J'(
 	
W.7,$B&!N  
12=="s1vtD
 	

s   ^A/\. 5^6N\. 7\\. 7\\. 'A\-B\\0%\,	\5\. A1\(=A\#\(A#\. 2^3\. ^
\. \\\. #\((\. .	]>7<]93]>4^9]>>^z(/generate/{student_id}/21/progress-statec                   K   d}	 t        |      }|j                  |       }t        |t              rD|j                  d      s|j                  d      dk(  rt	        t
        j                  dddd      S t        |t              r|j                  d	i       ni }|j                  d
      xs i }|j                  d      xs i }	|j                  d      xs dj                         }
|j                  dd       d|j                  dd       j                         }|
 d| j                         }t        j                         j                         }|j                  r;	 t        j                  t        |j                        dd d      j                         }|j                  d      xs d}d}|j                  d      r`|j                  t               j#                  t         j$                  |d   k(        j'                         }|r|j(                  r|j(                  }d}|	j                  d      rr|j                  t*              j#                  t*        j,                  dk(  t*        j$                  |	d   k(        j'                         }|r|j.                  r|j.                  }d}|	j                  d      }|r]|j                  t0              j#                  t0        j$                  |k(        j'                         }|r|j2                  r|j2                  }t5        ||j6                  |j8                        }i d|j:                  d|j<                  xs dd|j>                  xs dd|j@                  xs dd|jB                  xs dd|j                  xs dd|jD                  xs dd|jF                  xs dd |jH                  xs dd!|jJ                  xs dd"|d#|jL                  xs dd$|jN                  xs g D cg c]F  }|jP                  xs d%|jR                  xs d|j
                  xs dtU        |jV                        d&H c}d'|jX                  xs |d(|jZ                  xs |j                  d)      xs dd*|j\                  xs |xs dd+|j^                  xs ta        t        |      |      |jb                  xs |xs d|jd                  xs |xs d|jf                  xs |xs dd,}ti        jj                  d-||dd./      }|j                  d      dk(  r/t	        t
        jl                  d0|j                  d1|      dd      S to        |d2   |d3   d45      S # t        $ r Y w xY wc c}w # t        $ rG}tp        js                  d6       t	        t
        jl                  d0t        |      dd      cY d}~S d}~ww xY ww)7uH   Genera PDF de estado de avance PACI para una asignatura y período (EA).r  r   r   r  r  Nrf  r  r  r  r  r  r   r  r  r  r  r  r  r   r   r   r(  r  r  r  progress_entry_idr  r  r  r  signature_namesignature_roler  signature_secreducr  r  r  r  r  r  r  r  )r  r%  r  r  r   r  r<  rg  r   r   rk  rl   generate_paci_progress_state_pdf):r#   r   r=  r>  r   r   r  r   r   r   r   r  rA  r   rB  r   r{   r   r   r   rE  rz   rF  r*  r   rG  r  r  signature_professional_idr  r  r  r  r  r  r  r  r  r  r  r  r}  r   r  r  r  r  r  r  r  r%  r  r   r  rw  r   r   r  )r   r  r  r   r  rJ  rK  r  rO  rP  rj  r  r  ref_dater  rE  rX  r*  rY  r+  rZ  r[  r  r  r  r   ra  s                              r   r  r    s     1Mj
&r*(,,Z8nd+w'>+=+=h+G7+R"55#&3MW[\ 
 BLN\`Aa~))."=gi##O4:##O4: W-3::<&ll+<bAB!HLLQbdfDgChiooq*^1-=,>?EEG<<>&&(<<#,,S->s-CZPUUW LL-3	K(XXk*11+..LQ\D]2]^ddfF&,,$00<<$%55:KNNhWbNc<cd 
 &,,$00;<((67>>?Z?]?]ag?ghnnpCs44883""D$B$B

$//
D--3
 $///R
  !7!7!=2	

 -2
 t||)r
 D--3
 ()G)G)M2
 d117R
 d117R
 ]
 !$"9"9"?R
  ,,2  FFNd#$==#6Bhhn"-1!2I2I-J	
,  !7!7!K;K-
. 4++Zx||<S/TZXZ/
0  !7!7!J9!J1
2 4++[/A#i.RZ/[3
4  ++=x=2"11F[FB"11F[FB9
	>  55#4
 ::h7*"AA#&6::i3Waef  $J'(
 	
S  VF  
;<=="s1vtD
 	

s   WA/V 5W6C)V  :U2 I.V AVD
V WV 1W2	U?;V >U??V 	W<WWWWWz1/generate/{student_id}/21/progress-state/integralc                   K   d}	 |j                   st        t        j                  dddd      S t	        |      }|j                  |       }t        |t              rD|j                  d      s|j                  d      dk(  rt        t        j                  d	d
dd      S t        |t              r|j                  di       ni }|j                  d      xs i }|j                  d      xs i }	|j                  d      xs dj                         }
|j                  dd       d|j                  dd       j                         }|
 d| j                         }t        j                         j                         }|j                   D ]K  }|j                  s	 t        j                  t        |j                        dd d      j                         } n |j                  d      xs d}d}|j                  d      r`|j#                  t$              j'                  t$        j(                  |d   k(        j+                         }|r|j,                  r|j,                  }d}|	j                  d      rr|j#                  t.              j'                  t.        j0                  dk(  t.        j(                  |	d   k(        j+                         }|r|j2                  r|j2                  }d}|	j                  d      }|r]|j#                  t4              j'                  t4        j(                  |k(        j+                         }|r|j6                  r|j6                  }g }|j                   D ]  }t9        ||j:                  |j<                        }|j>                  xs g D cg c]F  }|j@                  xs d|jB                  xs d|j                  xs dtE        |jF                        dH }}g }|jH                  rP|jH                  D ]A  }|jK                  |jB                  xs d|jL                  xs d|jN                  xs dd       C |jK                  |jP                  |jR                  xs d|jT                  xs d|jV                  xs d|jX                  xs d|j                  xs d|jZ                  xs d|j\                  xs d|j^                  xs d|j`                  xs d||jb                  xs d||d        ||jd                  xs ||jf                  xs |j                  d      xs d|jh                  xs |xs d|jj                  xs tm        t        |      |      |jn                  xs |xs d|jp                  xs |xs d|jr                  xs |xs dd}tu        jv                  d ||dd!"      }|j                  d      dk(  r/t        t        jx                  d#|j                  d$|      dd      S t{        |d%   |d&   d'(      S # t         $ r Y w xY wc c}w # t         $ rG}t|        j                  d)       t        t        jx                  d#t        |      dd      cY d}~S d}~ww xY ww)*zHGenera PDF integral de estados de avance PACI (varias asignaturas / EA).r  re  z(Seleccione al menos un estado de avance.Nrf  r  r   r   r  r  r  r  r  r  r   r  r  r  r  r  r  r   r   r   r(  r  r  )r}  ratingrating_short)r  r  r  r  r  r  r  r  r  r  r  r  r  oa_rowsr  )integral_sectionsr  r  r  r  r  r%  r  r  r   r  r<  rg  r   r   rk  rl  )generate_paci_integral_progress_state_pdf)@sectionsr   r   rp  r#   r   r=  r>  r  r   r   r   r   r  rA  r   rB  r   r{   r   r   r   rE  rz   rF  r*  r   rG  r  r  r  r  r  r}  r   r  r  r]  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r  r   r  rw  r   r   r  ) r   r  r  r   r  rJ  rK  r  rO  rP  rj  r  r  r  sectionr  rE  rX  r*  rY  r+  rZ  r[  r  r  r  r  r  r  r  r   ra  s                                    r   r  r  =  s     1MG
}}"77#&3]gkl 
 'r*(,,Z8nd+w'>+=+=h+G7+R"55#&3MW[\ 
 BLN\`Aa~))."=gi##O4:##O4: W-3::<&ll+<bAB!HLLQbdfDgChiooq*^1-=,>?EEG<<>&&(}} 	G'00W__1Ecr1JJW\\^H		 LL-3	K(XXk*11+..LQ\D]2]^ddfF&,,$00<<$%55:KNNhWbNc<cd 
 &,,$00;<((67>>?Z?]?]ag?ghnnpCs4488}} *	G7G))7+L+LM "//52  FFNd#$==#6Bhhn"-1!2I2I-J	M  G!// BNN+->>+?R&(iio2,.OO,Ar $$")"4"4$+$8$8$>B")"4"4":)0)B)B)Hb!(!2!2!8b&4"$+$8$8$>B181R1R1XVX&-&<&<&B&-&<&<&B%2*1*D*D*J%2&3*	Z "3!%!7!7!K;K++Zx||<S/TZXZ!%!7!7!J9!J++[/A#i.RZ/[++=x=2"11F[FB"11F[FB	
	  55#4
 ::h7*"AA#&6::i3Waef  $J'(
 	
} ! @F  
DE=="s1vtD
 	

s   Y<*X) Y<A/X)  Y<!C8X) :XGX) AX$'HX) ?Y< X) Y<	X!X)  X!!X) )	Y92<Y4.Y9/Y<4Y99Y<z$/generate/{student_id}/{document_id}zGID de plantilla de prueba informal (obligatorio cuando document_id=43).informal_test_template_idc                 ( K   	 d}d}t        |      }|j                  |       }t        |t              rg|j                  d      s|j                  d      dk(  rBt	        t
        j                  d|j                  d      xs |j                  dd      dd	
      S |dk(  r	|t        |xs d      dk  rt	        t
        j                  dddd	
      S |j                  t              j                  t        j                  | k(        j                         }|st	        t
        j                  d|dd	
      S t        |      j                  t        |j                   xs d      t        |      |       }	|	j                  d      dk(  rHt        |	j                  d      xs d      }
|
dvrd}
t	        |
|
|	j                  d      xs |dd	
      S |	j                  d      xs i }|j                  d      }|st	        t
        j"                  dddd	
      S t%        t'        |            }|j)                         s"t	        t
        j"                  dd| dd	
      S 	 |j+                         }|j                  d      xs d}t/        |dd| dt'        t1        |            d      S t3        |      }|j                  |      }d}t        |t              rX|j                  d      dk(  rD||v st5        ||      rd|i}n/t	        t
        j                  d|j                  dd       dd	
      S d}t        |t              r|j                  d      }|o|j                  t6              j                  t6        j                  |k(  t6        j8                  j;                  d            j                         }||j<                  }||}|d!k(  rgt?        | |      }|j                  d      dk(  r3|j                  d"d      }t	        |||j                  d|      dd	
      S tA        |d   |d   d#$      S |d%k(  r |j                  tB              j                  tB        jD                  | k(  tB        jF                  d%k(        jI                  tB        j                  jK                               j                         }d}|r|jL                  r|jL                  }nVtO        |      }|jQ                  | &      }|r7t1        |      dkD  r)t        |d   t              r|d   j                  d'      nd}|st	        t
        j                  d|dd	
      S tO        |      }|j                  |      }t        |t              r3|j                  d      dk(  rt	        t
        j                  d|dd	
      S t%        d(      d)z  }|jS                         st	        t
        j                  dd*dd	
      S d+}|j                  d,      rd|j                  tT              j                  tT        j                  |j                  d,      k(        j                         }|r|jV                  xs d+}d+} |j                  d-      rd|j                  tX              j                  tX        j                  |j                  d-      k(        j                         }!|!r|!jZ                  xs d+} d+}"d+}#|j                  d.      r|j                  t\              j                  t\        j                  |j                  d.      k(        j                         }$|$rt_        ||$      j`                  xs d+jc                         }"|$jd                  redd/l3m4}% |j                  |%      j                  |%j                  |$jd                  k(        j                         }&|&r|&jj                  r|&jj                  }#|#s|j                  d0      rv	 t        |j                  d0            }'dd/l3m4}% |j                  |%      j                  |%j                  |'k(        j                         }&|&r|&jj                  r|&jj                  }#||d1<   | |d2<   |"|d3<   |#|d4<   |j                  d5      sR|j                  d6      r@|j                  tp              j                  tp        jD                  |d6   k(        j                         }(|(r|(jr                  r|(jr                  })tu        |)d7      r|)jw                  d8      |d5<   nt'        |)      jc                         dd9 |d5<   |j                  d:      	 |d5   dd9 }*ty        jz                  |*d8      j}                         }+t}        j~                         },|,j                  |+j                  z
  |,j                  |,j                  f|+j                  |+j                  fk  z
  |d:<   d; }-d+}.|j                  d5      })|j                  d<      xs d}/|)r+	 t        |)t&              r6ty        jz                  |)jc                         dd9 d8      j}                         }0ntu        |)d=      r|)j}                         n|)}0|/r>ty        jz                  t'        |/      jc                         dd9 d8      j}                         nt}        j~                         }1|0|1k  rm|1j                  |0j                  z
  d>z  |1j                  |0j                  z
  z   }2|1j                  |0j                  k  r|2d?z  }2|2d>z  }3|2d>z  }4|4r|3 d@|4 dAn|3 dB}.|.s|j                  d:      t'        |d:         }.d+}5|j                  d1d+      }6|6r0t'        |6      j                         }7dC|7v s|7dDk(  rdD}5ndE|7v s|7dFk(  rdF}5|j                  dG      }8|8d?k(  rdHndI}9|8dJk(  rdHndI}:|8d!k(  rdHndI};|8d%k(  rdHndI}<dKdLdMdNdO}=|8r|=j                  |8d+      nd+}>|8d%k(  r,t'        |j                  dP      xs d+      jc                         }>|j                  dQ      }?|?d?k(  rdHndI}@|?r|?d?k7  rdHndI}At'        |j                  dR      xs d+      jc                         }Bt'        |j                  dS      xs d+      jc                         }C |-|j                  d5            }Dt'        |j                  dT      xs d+      jc                         }Et'        |j                  dU      xs d+      jc                         }Ft'        |j                  d2      xs d+      jc                         }Gi dRBdV|BdSCdW|Cd5DdX|Dd:|.dTEdY|EdUFdZ|Fd2|Gd[|Gd\t'        |j                  d\      xs d+      jc                         d]t'        |j                  d]      xs d+      jc                         d^t'        |j                  d^      xs d+      jc                         d3t'        |j                  d3      xs d+      jc                         i d_t'        |j                  d3      xs d+      jc                         d`t'        |j                  d^      xs d+      jc                         d4t'        |j                  d4      xs d+      jc                         dat'        |j                  d4      xs d+      jc                         dPt'        |j                  dP      xs d+      jc                         dbt'        |j                  dP      xs d+      jc                         dc|>ddt'        |j                  dd      xs d+      jc                         det'        |j                  dd      xs d+      jc                         d< |-|j                  d<            df |-|j                  df            dgt'        |j                  dg      xs d+      jc                         dht'        |j                  dg      xs d+      jc                         dit'        |j                  di      xs d+      jc                         djt'        |j                  di      xs d+      jc                         dkt'        |j                  dk      xs d+      jc                         d1t'        |j                  d1      xs d+      jc                         i dl|5dDk(  rdHndIdm|5dFk(  rdHndIdn|5dDk(  rdHndIdo|5dFk(  rdHndIdp|9dq|:dr|;ds|<dt|9du|:dv|;dw|<dx@dyAdz|@d{|Ad|t'        |j                  d\      xs d+      jc                         t'        |j                  dS      xs d+      jc                          |-|j                  d5            t'        |j                  d\      xs d+      jc                         t'        |j                  d]      xs d+      jc                         t'        |j                  d^      xs d+      jc                         t'        |j                  dT      xs d+      jc                         t'        |j                  dU      xs d+      jc                         d}}Ht%        d~      }I|Ij                  dd       t        j                  dd+|j                  dR      xs d      j                  dd      dd }JId|J dt        j                         j                  dd  dz  }Kt3        j                  t'        |      Ht'        |K            }|j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d#$      S |dk(  rt        |      }L|Lj                  |       }Mt        |Mt              r3Mj                  d      dk(  rt	        t
        j                  d|dd	
      S t%        d(      dz  }|jS                         st	        t
        j                  dddd	
      S d }-t'        Mj                  d      xs d+      jc                         }Nt'        Mj                  d      xs d+      jc                         }O |-Mj                  d            }Pt'        |Mj                  d      xs d+      jc                         }Qt'        Mj                  d      xs d+      jc                         }Rt'        Mj                  d      xs d+      jc                         }St'        Mj                  d      xs d+      jc                         }Tt'        Mj                  d]      xs d+      jc                         }Ut'        Mj                  d      xs d+      jc                         }Vt'        Mj                  d      xs d+      jc                         }Wt'        Mj                  d      xs d+      jc                         }XWsXrW dX jc                  d      nd+}Y |-Mj                  d            }Zt'        |Mj                  d      xs d+      jc                         }[t'        Mj                  d      xs d+      jc                         }\t'        Mj                  d      xs d+      jc                         }]t'        Mj                  d      xs d+      jc                         }^t'        Mj                  d      xs Mj                  d      xs d+      jc                         }_t'        Mj                  di      xs d+      jc                         }`t'        Mj                  d      xs d+      jc                         j                         }a|adv }b|adv }ct'        Mj                  d      xs d+      jc                         }dt'        Mj                  d      xs d+      jc                         }et'        Mj                  d      xs d+      jc                         }ft'        Mj                  d      xs d+      jc                         }gt'        Mj                  d      xs Mj                  d      xs d+      jc                         }ht'        Mj                  d      xs Mj                  d      xs d+      jc                         }it'        Mj                  d      xs d+      jc                         }jt'        Mj                  d      xs Mj                  d      xs d+      jc                         }kt'        Mj                  d      xs d+      jc                         }lt'        Mj                  d      xs Mj                  d      xs d+      jc                         }m |-Mj                  d            }n |-|Mj                  d            }o |-|Mj                  d            }pi dNdOdPd|PdQdRdSd|Od|Nd|Pd|Qd|Rd|Rd|Sd_Td|Td]Ui dVd|VdYdWdXdZd|Zd|Td|Ud|Vd|Yd|Yd|Zd|Zd[d\d]i d^d|^d|[d|\d|]d|^d_dj`di|`dbrdHnd+dcrdHnd+dddedfdgdhdii d|dd|ed|fd|gd|hd|id|fd|gd|fd|gd|fd|gdjdkdld|kdm|mnopd֜}Ht%        d~      }I|Ij                  dd       t        j                  dd+Nxs d׫      j                  dd      dd }JId|J dt        j                         j                  dd  dz  }Kt3        j                  t'        |      Ht'        |K            }|j                  d      dk7  rXddlPmQ}qmR}rmS}s  |st%        |d         dMj                  d      i        |rt%        |d                 |qt%        |d                |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d#$      S |dk(  rdۄ }tt        |      }u|uj                  |       }vd+}Nd+}wd+}xd+}Qd+}yd+}zd+}{d+}|d+}}d+}~d+}d+}d+}d+}d+}d+}d+}d}d}d}d}d}d}d+}d+}d+}d+}d+}d}d}d+}d+}d+}d+}d+}d}d+}d}d+}d+}t        |vt              r2vj                  d      dk7  rt'        vj                  dR      xs d+      jc                         }Nt'        vj                  dS      xs d+      jc                         }wd܄ } |vj                  d,            } ||vj                  d-            } ||vj                  dݫ            } ||vj                  dޫ            } ||vj                  d߫            } t|vj                  d5            }xt'        |vj                  dT      xs d+      jc                         }yt'        vj                  dU      xs d+      jc                         }zt'        vj                  d      xs d+      jc                         }{t'        vj                  d      xs d+      jc                         }|t'        vj                  d      xs d+      jc                         }t'        vj                  d      xs d+      jc                         }t'        vj                  d      xs d+      jc                         }t'        vj                  d      xs d+      jc                         } vj                  d            } ||vj                  d            }|vj                  d      }t'        |vj                  d      xs d+      jc                         }t'        vj                  d      xs d+      jc                         } tvj                  d            }t'        |vj                  d      xs d+      jc                         }t'        vj                  d      xs d+      jc                         }t'        vj                  d      xs d+      jc                         }~t'        vj                  d      xs d+      jc                         }t'        vj                  d      xs d+      jc                         }t'        vj                  d      xs d+      jc                         }t'        vj                  d]      xs d+      jc                         }t'        vj                  d^      xs d+      jc                         }t'        vj                  d0      xs d+      jc                         }t'        vj                  d      xs d+      jc                         } vj                  d            }|r|j                  t\              j                  t\        j                  k(        j                         }|rt_        |      j`                  xs d+jc                         }st        dd      r}dd/l3m4}% |j                  |%      j                  |%j                  jd                  k(        j                         }|r0t        dd      r#t'        jj                        jc                         }vj                  d0      }|t'              jc                         }|rj                         st        t        t        f      r	 t              }dd/l3m4}% |j                  |%      j                  |%j                  |k(        j                         }|r0t        dd      r#t'        jj                        jc                         }ns} vj                  dG            }t'        |vj                  dP      xs d+      jc                         } vj                  d            } t|vj                  d            } |t|vj                  d<            }|j                  di       xs i }|j                  di       xs i }j                  di       xs i }Ns[j                  dd+      xs d+ dj                  dd+      xs d+ dj                  dd+      xs d+ jc                         xs d|  }Nws9t'        j                  dS      xs d+      jc                         xs t'        |       }wxs tj                  d5            }xys?t'        j                  dT      xs j                  dY      xs d+      jc                         }yzs?t'        j                  dU      xs j                  dZ      xs d+      jc                         }z{s,t'        j                  d      xs d+      jc                         }{|s,t'        j                  d      xs d+      jc                         }|s,t'        j                  d      xs d+      jc                         }s-t'        j                  d       xs d+      jc                         }sj                  d      rr|rp|j                  t              j                  t        j                  d   k(        j                         }|r't'        j                  xs d+      jc                         }sj                  d      r|r|j                  t              j                  t        j                  dk(  t        j                  d   k(        j                         }|r't'        j                  xs d+      jc                         }d}|rn|j                  t              j                  t        jD                  | k(        jI                  t        j                  jK                               j                         }rn|rl|j                  t              j                  t        j                  k(        j                         }|r't'        j                  xs d+      jc                         }}}srt        dd      rv|j                  t              j                  t        j                  j                  k(        j                         }|r't'        j                  xs d+      jc                         }}~sj                  d      rt|rr|j                  t              j                  t        j                  d   k(        j                         }|r)t'        t        dd      xs d+      jc                         }~d+}Qt        vt              r%vj                  d      dk7  rvj                  d5      nd}|j                  d5      }r	 t        t&              r>ty        jz                  t'              jc                         dd9 d8      j}                         ntu        d=      rj}                         n}t}        j~                         },|,j                  |j                  z
  |,j                  |,j                  f|j                  |j                  fk  z
  }3|,j                  |j                  z
  d>z  |,j                  |j                  z
  z   }2|,j                  |j                  k  r|2d?z  }2|2d>z  }4g }|3dkD  rj                  |3 d|3d?k7  rdnd+        |4dkD  rj                  |4 d|4d?k7  rdnd+        rd	j                        nd
}Qd } j                  d,            } j                  d-            } j                  dݫ            } j                  dޫ            }d+}rn|rl|j                  tX              j                  tX        j                  k(        j                         }|r't'        jZ                  xs d+      jc                         }d+}rn|rl|j                  t              j                  t        j                  k(        j                         }|r't'        j                  xs d+      jc                         }d+}rn|rl|j                  t              j                  t        j                  k(        j                         }|r't'        j                  xs d+      jc                         }d+}d+}r|r|j                  tT              j                  tT        j                  k(        j                         }|r=jV                  r1t'        jV                        j                         jc                         nd+}6|6rWd|6v s|6dk(  s
d|6v sd|6v rt'        dH      t'        d+      }}n+d|6v s|6dk(  s
d|6v sd|6v rt'        d+      t'        dH      }}       }|dvrd}t'        d?k(  rdHnd+      }t'        dJk(  rdHnd+      }t'        d!k(  rdHnd+      }       }|dvrd}t'        d?k(  rdHnd+      }t'        dJk(  rdHnd+      }t'        d!k(  rdHnd+      }d!k(  rt'              nd+}       }|dvrd}t'        d?k(  rdHnd+      }t'        dJk(  rdHnd+      }d?k(  rd}ndJk(  rd}n
d!k(  rdN}nd+}t               }       }|Ɓd?cxk  rd!k  rn nj                  ƫ       t'        d?v rdHnd+      }t'        dJv rdHnd+      }t'        d!v rdHnd+      }ɐdt&        dt        t           fd}t               }t        t&              r4j                  d      D ]  } |̫      }|̀j                  ͫ         nt        t        t        f      rtD ]o  }t        |t        t        f      r2d?t        Ϋ      cxk  rd9k  rn nj                  t        Ϋ             K t'        Ϋ            }|̀_j                  ͫ       q t'        d?v rdHnd+      }t'        dJv rdHnd+      }t'        d!v rdHnd+      }t'        d%v rdHnd+      }t'        dv rdHnd+      }t'        dv rdHnd+      }t'        dv rdHnd+      }t'        dv rdHnd+      }t'        dv rdHnd+      }t'        d9v rdHnd+      }t%        d(      dz  }|jS                         s t	        t
        j                  dd dd	
      S i dNdwdxdQd!d"yd#zd${d%d&d'|d(}d~dddd)i d*d+d,d-ddddd.d/d0d1ēd2d?k(  rdnd+d3dJk(  rdnd+d4d!k(  rdNnd+d5Ǔd6ȓi d7ɓd8|Ǔd9|ȓd:|ɓd;ϓd<Гd=ѓd>ғd?ӓd@ԓdAՓdB֓dCדdDؓdndod_||dE}Ht%        d~      }I|Ij                  dd       t        j                  dd+Nxs dF      j                  dd      dd }JIdG|J dt        j                         j                  dd  dz  }KsdHdIgnd}t3        j                  t'        |      Ht'        K      |ِJ      }|j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d#$      S |dKk(  rd}ڐdL }ېdMt        dt&        fdN}t        |      }|j                  | dO      }|j                  d      dPk(  rj                  d      nd}|st	        t
        j                  d|dd	
      S t        ||       }t        |t              r|j                  di       ni }|j                  d      xs i }j                  d      xs i }j                  d      xs d+ dj                  d      xs d+ dj                  d      xs d+ jc                         xs j                  dQ      xs d|  }Nt'        j                  dQ      xs d+      jc                         xs N} j                  d5            }t'        j                  d:      xs d+      jc                         }Q|Qsj                  d5      r	 j                  d5      }+t        |+t&              r5ty        jz                  |+jc                         dd9 d8      j}                         }+t}        j~                         },|,j                  |+j                  z
  |,j                  |,j                  f|+j                  |+j                  fk  z
  }3|3d?k7  r|3 dRndS}Qd+}S|j                  t              j                  t        j                  | k(        j                         }|rsj                   rg|j                  t              j                  t        j                  j                   k(        j                         }|rj                  rj                  }Sd+}Rrj                  d      r|j                  t              j                  t        j                  dk(  t        j                  j                  d      k(        j                         }|rj                  rj                  }R j                  d<            }t'        |j                  di      xs d+      jc                         }` j                  dT            }t'        |j                  dU      xs d+      jc                         j                         }d+j                  dV t        j                  dW|      D              }t'        j                  dX      xs d+      jc                         }d+}d+}d+}dYv rxs dZ}nd[v rxs dZ}nd\v rxs dZ}t'        j                  d]      xs d+      jc                         }t'        j                  d^      xs d+      jc                         } j                  d_            }d+}d`}t        |߫      }rnrj                         rod}j                         r]t        }t        j                  dab      \  }}t        j                  |       t        |      r}n	 t        j                         d+} j                  dc            } ||j                  dd            } ||j                  de            } ||j                  df            } ||j                  dg            } ||j                  dh            } ||j                  di            } ||j                  dj            } ||j                  dk            } ||j                  dl            } ||j                  dm            }d+}d+}t'        |j                  d^      xs d+      jc                         }t'        j                  d0      xs d+      jc                         }j                  d      r|j                  t\              j                  t\        j                  j                  d      k(        j                         }|rQt_        |      }|j`                  xs d+jc                         }t'        j                  xs d+      jc                         }j                  dn      xs g } i }i }| D ]  }|j                  do      xs d+jc                         j                         }j                  dp      }|P	 t              }j                  dq      xs d+jc                         j                         }|sdrv sdsv sdtk(  r	<   <    du }i dNdvdwdQdSdRd<dj`dxdydzd{d]d^d_d|srt        nd+d}rd+nd~}Hi ddddddddddddvddvddvddwddwddddddddddddddi dddddddd<dd<ddjdidjddxddxddxddxdd_dd_d|d|d}d}ddcddddfdgdhdidjdldkdmded]d^d_d]d^d0d}t        d?d      D ]V  }	t        d?d      D ]C  }
d	 d|
 }j                  |	      }|r
       nd}|
k(  rdZnd+H<   E X t        dd      D ]]  }	t        d?d      D ]J  }
d	 d|
 }|	d9z
  }j                  |      }|r
       nd}|
k(  rdZnd+H<   L _ t%        d(      dz  }|jS                         s t	        t
        j                  dddd	
      S t%        d~      }I|Ij                  dd       t        j                  dd+Nxs d      j                  dd      dd }JId|J dt        j                         j                  dd  dz  }Kg d}t3        j                  t'        |      Ht'        |K      |      }|j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S |j                  d      }|r5r3t        t'              d|d       t        t'        |             nrrrt        t'                     rJrGsE	 t        t'              ګ      st        t'                     	 t        j                  ګ       n7r4t        Hj                  d}      xs d+v rst        t'                     tA        |d   |d   d#$      S |dk(  rt        |      }|jQ                  | &      }|rt1              dk(  rt	        t
        j                  d|dd	
      S d   }|j	                  d'd       |j	                  dd       t        |t              r|j                  di       ni }|j                  di       }|j                  dd+      xs d+}j                  dd+       d|j                  dd+       jc                         }| d| jc                         }|j                  dSd+      xs d+}d+}Qj                  d5d+      }|rk	 d}dD ],  }	 ty        jz                        j}                         } n r1ty        j
                         j}                         }j                  d      r;	 j                  d      }ty        jz                  |d8      j}                         }j                  j                  z
  }3|j                  |j                  z
  }4|4dk  r|3d?z  }3|4d>z  }4n(|4dk(  r#j                  j                  k  r|3d?z  }3d}4|3dkD  r7|4dkD  r!|3 d|3d?k7  rdnd+ d	|4 d|4d?k7  rdnd+ }Qn&|3 d|3d?k7  rdnd+ }Qn|4dkD  r|4 d|4d?k7  rdnd+ }Qd<   |d<   |d<   Q|d<   |d<   |j                  d      r~|j                  t              j                  t        j                  d   k(        j                         }|rj                  rj                  nd+d<   |j	                  dd       j                  d      r|j                  t              j                  t        j                  d   k(        j                         } | r j                  r j                  nd+d<   |j	                  dd       j                  d      r|j                  t              j                  t        j                  dk(  t        j                  d   k(        j                         }|rj                  rj                  nd+d<   |j	                  dd       j                  d      rt'        d         }!|!r	 !j                  d      D "cg c]=  }"|"jc                         j                         s$t        "jc                               ? }#}"t        ||#      }$|#D %cg c]  }%$j                  |%      s$%     }&}%|&rdj                  &      nd+d<   j	                  dd       t3        j                  ||dd~      }t        || ||       |d   dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  
rÐt        |      }'|'j                  |       }(t        |(t              r4(j                  d      dk(  rt	        t
        j                  d|dd	
      S (j                         })|)j	                  d'd       |)j	                  dd       |)j	                  dd       t        |t              r|j                  di       ni }|j                  d      xs i }j                  d      xs i })j                  d      xs d+jc                         saj                  d      xs d+ dj                  d      xs d+ dj                  d      xs d+ jc                         }*|*r*nd|  )d<   )j                  d      xs d+jc                         s,j                  dS      xs j                  dS      xs d+)d<   )j                  d      xs d+jc                         s&j                  d5      rj                  d5      )d<   )j                  d      xs d+jc                         s"j                  d5      r	 ty        jz                  t'        j                  d5            d8      j}                         }0ty        j
                         j}                         }1)j                  d      r3	 ty        jz                  t'        )d         d8      j}                         }1|1j                  |0j                  z
  }3|1j                  |0j                  z
  }4|4dk  r
|3d?z  }3|4d>z  }4|3dkD  r|3 d|3d?k7  rdnd+ n|4 d|4d?k7  rdnd+ )d<   )j                  d      sB)j                  d      xs d+jc                         sj                  d      }+|+r+)d<   )j                  d      s)j                  d      rj                  d      )d<   )j                  d      s)j                  d      rj                  d      )d<   )j                  d      s|j                  t              j                  t        jD                  | k(        jI                  t        j                  jK                               j                         },|,r,j                  )d<   )j                  d      r{|j                  t              j                  t        j                  )d   k(        j                         }|rj                  rj                  )d<   )j	                  dd       )j                  d      xs d+jc                         swj                  d      re|j                  t              j                  t        j                  d   k(        j                         }|rj                  rj                  )d<   )j                  d      }-|-rx|j                  t              j                  t        j                  dk(  t        j                  -k(        j                         }|rj                  rj                  nd+)d<   nd+)d<   )j	                  dd       |)j                  d      }.|.rn|j                  t              j                  t        j                  .k(        j                         } | r j                  r j                  nd+)d<   nd+)d<   )j	                  dd       |)j                  d      }/|/rT|j                  t              j                  t        j                  /k(        j                         }|rj                  xs d+ dj                  xs d+ dj                  xs d+ jc                         )d<   j                   xs d+)d<   j                  ro|j                  t              j                  t        j                  j                  k(        j                         }|rj                  rj                  nd+)d<   n]d+)d<   nU)j                  dī      xs d+)d<   d+|)d<   d+|)d<   n*)j                  dī      xs d+)d<   d+|)d<   d+|)d<   )j	                  dd       |)j	                  dd       |)j                  d      }0|0rt'        0      jc                         }1|1j                  d      D cg c]:  }|jc                         j                         s"t        jc                               < }2}ΐt        ||2      }$|2D %cg c]  }%$j                  |%      s$%     }3}%|3rdj                  3      nd+)d<   nd+)d<   )j	                  dd       dŐdƐdǐddO}4|)j                  dɫ      }5|54j                  5      nd+)d<   t3        j                  d|)|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rΐt#        |      }6|6j                  | d̫      }7t        |7t              r47j                  d      dk(  rt	        t
        j                  d|dd	
      S t        7t              r7j                  d      nd}8|8rt        8t              st	        t
        j                  d|dd	
      S t        |t              r|j                  di       ni }|j                  d      xs i }j                  d      xs i }9j                  dd+      xs d+}j                  dd+       d|j                  dd+       jc                         }| d| jc                         }t        8      }:||:d<   ||:d<   ||:d<   |j                  dSd+      xs d+:d<   j                  d5d+      xs 8j                  dd+      :d<   8j                  d      xs j                  d      xs d+};|;szj                  d      rh|j                  t              j                  t        j                  d   k(        j                         }|rj                  xs d+jc                         };8j                  d      xs* t        9t              r9j                  d      nd+xs d+}<|<s9rt        9t              r9j                  d      r{|j                  t              j                  t        j                  dk(  t        j                  9d   k(        j                         }|rj                  xs d+jc                         }<8j                  dͫ      xs d+}=|=sa9r^t        9t              rM9j                  dΫ      xs d+jc                         xs% 9j                  dϫ      xs d+jc                         }=;:d<   <|:d<   =xs  t'        8j                  dͫ      xs d+      :d<   d+}Q|:j                  dd+      }|r 	 d}dD ]8  }>	 ty        jz                  t'              dd9 >      j}                         } n rty        j
                         j}                         }1|1j                  j                  z
  }3|1j                  |j                  z
  }4|4dk  r|3d?z  }3|4d>z  }4n'|4dk(  r"|1j                  j                  k  r|3d?z  }3d}4|3dkD  r3|4r |3 d|3d?k7  rdnd+ d	|4 d|4d?k7  rdnd+ n|3 d|3d?k7  rdnd+ }Qn|4dkD  r|4 d|4d?k7  rdnd+ }QQ:d<   |:j                  dЫ      }?|?rt        ?t              r?j                  d      rx|j                  t\              j                  t\        j                  ?d   k(        j                         }|r(t_        |      j`                  xs d+jc                         nd+:d<   :j                  dҫ      xs g }@|@D ]  }t        |t              sj                  d      s)|j                  t\              j                  t\        j                  d   k(        j                         }|r(t_        |      j`                  xs d+jc                         nd+d<    t%        |      jQ                  | &      }Ag }Bt        |At              rA}Bn7t        At              r&Aj                  d      rAj                  dg       }BB:d<   t3        j                  ||:|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rFt'        |      }C|Cj                  |       }Dt        |Dt              r4Dj                  d      dk(  rt	        t
        j                  d|dd	
      S Dj                         }E|Ej	                  d'd       |Ej	                  dd       |Ej	                  dd       |Ej                  d      r{|j                  t              j                  t        j                  Ed   k(        j                         }|rj                  rj                  Ed<   Ej	                  dd       Ej                  d      r|j                  t              j                  t        j                  Ed   k(        j                         } | r! j                  r j                  Ed<   Ej	                  dd       Ej                  d      r|j                  t              j                  t        j                  dk(  t        j                  Ed   k(        j                         }|rj                  rj                  Ed<   Ej	                  dd       Ej                  dg       }F|Fr:g }GFD ](  }|j                  d      }H|j                  d      }Id+}J|Hro|j                  t\              j                  t\        j                  Hk(        j                         }$|$r)t_        ||$      j`                  xs d+jc                         }Jd+}KIrQdd/l3m4}% |j                  |%      j                  |%j                  Ik(        j                         }&|&r|&jj                  }Kj                         }LJ|Ld<   K|Ld<   Gj                  |L       + GEd<   t3        j                  |E|dd~      }t        || ||       |d   dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rt)        |      }M|Mj                  |       }Nt        |Nt              r4Nj                  d      dk(  rt	        t
        j                  d|dd	
      S Nj                         }O|Oj	                  d'd       |Oj	                  dd       |Oj	                  dd       |Oj                  d      r|j                  t              j                  t        j                  dk(  t        j                  Od   k(        j                         }|rj                  rj                  Od<   Oj	                  dd       nd+Od<   Oj                  dث      }P|Pt'        P      jc                         j                         rq	 t        P      }+|j                  t              j                  t        j                  |+k(        j                         }|rj                  rj                  Od<   Oj                  d      }0|0t        0t              r0ng }2t        0t&              r	 t+        j,                  0      }2g }Q2D ]   }5	 Qj                  t        5             " t        |Q      }$|QD %cg c]  }%$j                  |%      s$%     }3}%|3rdj                  3      nd+Od<   Oj	                  dd       t3        j                  d|O|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rt/        |      }R|Rj                  |       }St        |St              r4Sj                  d      dk(  rt	        t
        j                  d|dd	
      S t        St              rSj                         ni }O|Oj	                  d'd       |Oj	                  dd       |Oj	                  dd       |Oj                  d      r|j                  t              j                  t        j                  dk(  t        j                  Od   k(        j                         }|rj                  rj                  Od<   Oj	                  dd       nOj                  d      xs d+Od<   Oj                  dث      }P|Pt'        P      jc                         j                         rq	 t        P      }+|j                  t              j                  t        j                  |+k(        j                         }|rj                  rj                  Od<   Oj                  d      }0|0t        0t              r0ng }2t        0t&              r	 t+        j,                  0      }2g }Q2D ]   }5	 Qj                  t        5             " t        |Q      }$|QD %cg c]  }%$j                  |%      s$%     }3}%|3rdj                  3      nd+Od<   Oj	                  dd       t3        j                  d|O|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S t5        ||      rt1        |      }T|Tj                  |       }Ut        |Ut              r4Uj                  d      dk(  rt	        t
        j                  d|dd	
      S t        Ut              rUj                         ni }O|Oj	                  d'd       |Oj	                  dd       |Oj	                  dd       |Oj                  d      r|j                  t              j                  t        j                  dk(  t        j                  Od   k(        j                         }|rj                  rj                  Od<   Oj	                  dd       nOj                  d      xs d+Od<   Oj                  dث      }P|Pt'        P      jc                         j                         rq	 t        P      }+|j                  t              j                  t        j                  |+k(        j                         }|rj                  rj                  Od<   Oj                  d      }0|0t        0t              r0ng }2t        0t&              r	 t+        j,                  0      }2g }Q2D ]   }5	 Qj                  t        5             " t        |Q      }$|QD %cg c]  }%$j                  |%      s$%     }3}%|3rdj                  3      nd+Od<   Oj	                  dd       t3        j                  ||O|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rܐt3        |      }V|Vj                  |       }Wt        |Wt              r4Wj                  d      dk(  rt	        t
        j                  d|dd	
      S Wj                         }X|Xj	                  d'd       |Xj	                  dd       |Xj	                  dd       |Xj	                  dd       t        |t              r|j                  di       ni }|j                  d      xs i }j                  d      xs i }j                  d      xs d+ dj                  d      xs d+ dj                  d      xs d+ jc                         }*|*r*nd|  Xd<   j                  dS      xs j                  dS      xs d+Xd<   j                  d      }Y|Yrf|j                  t              j                  t        j                  Yk(        j                         }|rj                  rj                  nd+Xd<   nd+Xd<   j                  d      }-|-ry|j                  t              j                  t        j                  dk(  t        j                  -k(        j                         }|rj                  rj                  ndܐXd<   ndܐXd<   j                  d      }.|.rn|j                  t              j                  t        j                  .k(        j                         } | r j                  r j                  nd+Xd<   nd+Xd<   Xj                  d      }Z|ZrQ|j                  t\              j                  t\        j                  Zk(        j                         }|rt_        |      }|j`                  xs d+jc                         Xd3<   j                  xs d+Xd<   |Xj                  dޫ      xs d+jc                         }[|[r[Xd<   njd                  rpdd/l3m4}% |j                  |%      j                  |%j                  jd                  k(        j                         }\|\r\jj                  r\jj                  nd+Xd<   n.d+Xd<   n'd+xXd3<   x|Xd<   |Xd<   nd+xXd3<   x|Xd<   |Xd<   Xj	                  dd       |Xj	                  dd       |Xj	                  dd       |Xj                  d      }/d}|/rD|j                  t              j                  t        j                  /k(        j                         }sn|j                  t              j                  t        jD                  | k(        jI                  t        j                  jK                               j                         }raj                  xs d+ dj                  xs d+ dj                  xs d+ jc                         Xd<   j                   xs d+Xd<   nd+xXd<   |Xd<   Xj	                  dd       t3        j                  dِ|X|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  r/t5        |      }]|]j                  |       }^t        |^t              r4^j                  d      dk(  rt	        t
        j                  d|dd	
      S t        |t              r|j                  di       ni }|j                  d      xs i }j                  d      xs i }j                  d      xs d+ dj                  d      xs d+ dj                  d      xs d+ jc                         }*|*r*nd|  d+d+d+d+d+d+d+d}Xj                  d      }Y|Yre|j                  t              j                  t        j                  Yk(        j                         }|rj                  rj                  nd+Xd<   j                  d      }-|-rw|j                  t              j                  t        j                  dk(  t        j                  -k(        j                         }|rj                  rj                  nd+Xd<   j                  d      }.|.rm|j                  t              j                  t        j                  .k(        j                         } | r j                  r j                  nd+Xd<   |j                  t              j                  t        jD                  | k(        jI                  t        j                  jK                               j                         }|r`j                  xs d+ dj                  xs d+ dj                  xs d+ jc                         Xd<   j                   xs d+Xd<   ^j                  d      }_|_r	 t        _t&              rQt1        _      d9k\  rBty        jz                  _dd9 d8      j}                         }`|`jw                  d      Xd<   n%tu        _d7      r_jw                  d      Xd<   ^j                  d      xs d+}a^j                  d      xs d+}bar!bra db jc                         Xd<   nBar t'        a      jc                         Xd<   nt'        b      jc                         Xd<   t3        j                  dX|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rt7        |      }c|cj                  | d̫      }d|dr(dj                  d      dPk7  sdj                  d      st	        t
        j                  d|dd	
      S dd   }t        |t              r|j                  di       ni }|j                  d      xs i }|j                  d      xs d+ dj                  d      xs d+ dj                  d      xs d+ jc                         }N|Nsd|  }Nj                  dS      xs j                  dS      xs d+}j                  d5      xs j                  d5      }d+}e|r	 t'              jc                         dd9 }t1        |      d9k(  rOd%   dk(  rEd   dk(  r;ty        jz                  d8      j}                         }`|`jw                  d      }en}eNej                  d<      xs d+j                  d      xs d+j                  d      xs dj                  d      xs d+j                  d      |j                  d      xs g j                  d      xs g d
}ft3        j                  d|f|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rt9        |      }g|gj                  |       }ht        |ht              r4hj                  d      dk(  rt	        t
        j                  d|dd	
      S t        h      }it3        j                  d|i|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rt;        |      }j|jj                  |       }kt        |kt              r4kj                  d      dk(  rt	        t
        j                  d|dd	
      S t        k      }lt3        j                  d|l|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rt=        |      }m|mj                  |       }nt        |nt              r4nj                  d      dk(  rt	        t
        j                  d|dd	
      S t        n      }ot3        j                  d|o|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rt?        |      }p|pj                  |       }qt        |qt              r4qj                  d      dk(  rt	        t
        j                  d|dd	
      S t        q      }rt3        j                  d|r|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rtA        |      }s|sj                  |       }tt        |tt              r4tj                  d      dk(  rt	        t
        j                  d|dd	
      S t        t      }ut3        j                  d|u|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rtC        |      }v|vj                  |       }wt        |wt              r4wj                  d      dk(  rt	        t
        j                  d|dd	
      S t        w      }xt3        j                  d|x|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rtE        |      }y|yj                  |       }zt        |zt              r4zj                  d      dk(  rt	        t
        j                  d|dd	
      S t        z      }{t3        j                  d|{|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rtG        |      }|||j                  |       }}t        |}t              r4}j                  d      dk(  rt	        t
        j                  d|dd	
      S t        }      }~t3        j                  d|~|dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rtI        |      }|j                  |       }t        |t              r4j                  d      dk(  rt	        t
        j                  d|dd	
      S t              }t3        j                  d||dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S |dk(  rtK        |      }|j                  |       }t        |t              r4j                  d      dk(  rt	        t
        j                  d|dd	
      S t              }t3        j                  d||dd~      }t        || ||       |j                  d      dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S t        |t              r|j                  di       ni }|j                  dR      xs j                  d      xs d|  }t        |t              r|j                  d      nd}|dJk(  rsg d}d}|D ])  }t%        d(      |z  }|jS                         s&} n |s4t	        t
        j                  dddj                         dd	
      S t        |t              r|j                  di       ni }|j                  di       }|j                  dd+      xs d+}3j                  dd+      xs d+}j                  dd+      xs d+}3 d d| jc                         }d+}j                  di       }9|9r9j                  d      nd}-j                  d      }Yd+}<d+};|-rg|j                  t              j                  t        j                  dk(  t        j                  -k(        j                         }|rj                  nd+}<YrU|j                  t              j                  t        j                  Yk(        j                         }|rj                  nd+};<r;r< d; jc                  d       }n<r<}n;r;}d+}d+}d+}tM        |      }|j                  |       }|r	t        t              rj                  d      dk7  r}|j                  d      }|rX|j                  t              j                  t        j                  k(        j                         }|rj                  nd+}j                  dd+      }|j                  dd+      }|j                  dd+      }| d| d| jc                         }|j                  dSd+      xs d+}d+}r>t        t              r-j                  d      dk7  rj                  dd+      xs d+}sj                  di       }|j                  dݫ      }|rY|j                  t              j                  t        j                  k(        j                         }|rj                  xs d+}ty        j
                         }t'        |j                        }ddddddddd	d
ddd}|j                  |j                  t'        |j                              }|rjO                         nd+}t'        j                        dd }t3        jP                  t'        |      ||d+dd+d~      }|d   dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S 	 t%        |d         }|j)                         rdJ}tS        | ||jT                  d      }t%        d~      |z  }|jV                  j                  dd       |jS                         r6jY                         jY                         k7  rj                          t[        t'              t'                     t'        |      |d<   |d<   t]        || d|       tA        |d   |d   d$      S t        |t              r|j                  dd+      ni }t        |t              r|j                  d      nd}t        |t              r|j                  di       ni }|j                  di       }|j                  dd+      xs d+}j                  dd+       d|j                  dd+       jc                         }| d| jc                         }| |||||xs d| d}d| drd| d dndrj                  dd       dndd| dr'dj                  dd      j                          dndg}|D cg c]
  }|s }}d}|D ])  }t%        d(      |z  }|jS                         s&} n t3        j                  |||rt'        |      ndd~      }t        || ||       |d   dk(  r/t	        t
        j"                  d|j                  d|      dd	
      S tA        |d   |d   d$      S # t,        $ r,}t	        t
        j"                  dd| dd	
      cY d}~S d}~ww xY w# tl        tn        f$ r t'        |j                  d0d+            }#Y w xY w# t        $ r Y Mw xY w# t        $ r Y w xY w# tn        tl        f$ r Y g1w xY w# t        $ r Y _w xY w# t        $ r Y UQw xY w# t,        $ r Y Qw xY w# tn        tl        f$ r Y Ow xY w# t,        $ r Y Kw xY w# 	 t        j                  ګ       w # t,        $ r Y w w xY wxY w#  Y IxY w#  Y I2xY w# t        $ r}Y d}~Hd}~ww xY wc c}"w c c}%w # t        $ r}d+d<   Y d}~Ed}~ww xY w# t        $ r Y Bjw xY w# t        $ r Y Bw xY wc c}w c c}%w # t        $ r Y 6w xY w# t        $ r Y 5{w xY w# tl        tn        f$ r Y ,w xY w# t        $ r g }2Y ,{w xY w# tl        tn        f$ r Y ,w xY wc c}%w # tl        tn        f$ r Y )Uw xY w# t        $ r g }2Y )w xY w# tl        tn        f$ r Y )w xY wc c}%w # tl        tn        f$ r Y %w xY w# t        $ r g }2Y %w xY w# tl        tn        f$ r Y %w xY wc c}%w # t        $ r _rt'        _      dd9 nd+Xd<   Y w xY w# t        $ r rt'              dd9 nd+}eY w xY w# t        $ r Y 7w xY wc c}w # t        $ r]}t	        t
        j"                  d dt_              j`                   dt'        |      dd  ddd	
      cY d}~S d}~ww xY ww(  u   
    Genera un documento para un estudiante específico.
    Cuando document_id = 4, genera el documento de evaluación de salud desde health_evaluations.
    u/   No se encontró documento para este estudiante.r  r   r   r  rg  r  Nrf  r  +   r   re  zBSe requiere informal_test_template_id para generar este documento.http_status)re  r  i  r<  r;  r   r<  z#No se obtuvo ruta del PDF generado.z#El archivo PDF no existe en disco: z!No se pudo leer el PDF generado: r   zinformal_test.pdfrk  zattachment; filename="")zContent-DispositionzContent-Length)r  rn  rx  )r6  r7  r  r  r  r  r  r  r  r  r  r  r  r         r   r   zDocumento no encontrador6  r  r  rl  r7  )r   r   r  zhealth_evaluation.docxuP   Template de evaluación de salud no encontrado. Buscando: health_evaluation.docxr   r  r  profesional_id)CareerTypeModelprofessional_specialtygender_namenationality_nameprofessional_fullnameprofessional_specialty_namer  r   r  r  r  r  c                 4   | sy	 t        | t              r6t        j                  | j	                         d d d      j                         }nt        | d      r| j                         n| }|j                  d      S # t        $ r | rt        |       cY S dcY S w xY wNr   r  r  r   r  	r=  r   r   rA  r   r   r  r  rB  r9  r   s     r   	_fmt_datez$generate_document.<locals>._fmt_date      3!#s+%..syy{3B/?LQQS+23+?SXXZS;;z22  3'*3s8223   A4A: :BBBevaluation_dater   r   r   u    años z mesesu    añosFEMENINOF	MASCULINOMprocedence_idr  r  r5  u   Salud pública
ParticularEscuelaOtror4  procedence_otherconsultation_reason_idr  r  r  r  names_lastnamesidentificator_number
birth_dater  r  r  consultation_reason_detail"professional_identification_number professional_registration_numberprofessional_full_nameprofessional_numberprofessional_specialityanother_procedenceprofessional_procedenceprofessional_contactphone_emailreevaluation_dategeneral_assessmentgeneral_health_state	diagnosis
diagnosticindicationsgender_Fgender_Msex_fsex_mprocedence_SPprocedence_Pprocedence_Eprocedence_Oprocedence_1procedence_2procedence_3procedence_4EGSDDDconsultation_reason_1consultation_reason_2consultation_reason)RUNBDDDRutPRNOLHLr   Tr   r  r  r  r   r  evaluacion_salud_r  r  r  zfamily_report.docxz)Template family_report.docx no encontradoc                 4   | sy	 t        | t              r6t        j                  | j	                         d d d      j                         }nt        | d      r| j                         n| }|j                  d      S # t        $ r | rt        |       cY S dcY S w xY wr  r  r  s     r   r  z$generate_document.<locals>._fmt_date  r  r  r  r  r  r  r  r%  professional_social_namer  professional_phoneprofessional_emailz / report_delivery_datereceiver_full_namereceiver_identification_numberreceiver_relationshipreceiver_presence_ofevaluation_reasonapplied_instrumentsevaluation_type)	admissionu	   admisióningresor  )revaluationu   reevaluaciónr6  pedagogical_strengthspedagogical_support_needssocial_affective_strengthssocial_affective_support_needshealth_strengthsstrengths_3health_support_needssupport_needs_3collaborative_workhome_based_descriptionhome_supportschool_family_agreementsagreements_commitmentsevaluation_date_1evaluation_date_2evaluation_date_3student_birth_daterB  zNombres y ApellidoszFecha nacimientoEdadzCurso / NivelCursoEstablecimientoprofessional_job_positionprofessional_phone_email"professional_delivered_date_informNombrerE  zRol / cargou   Teléfono / E-mail de contactou   Teléfono / E-mailzFecha entrega de informezFecha entregaperson_full_nameperson_identification_numberperson_relation_studentperson_presenceperson_presence_of
evaluationreevaluationstrengths_1support_needs_1strengths_2support_needs_2fortalezas_2necesidades_apoyo_2ambito_social_fortalezasambito_social_necesidadesfortalezas_social_afectivonecesidades_social_afectivoeducational_supports_school)re  rf  rg  rh  informe_familiarinforme_familiar_)apply_familia_arial_10_font!compact_familia_narrative_spacing!fix_familia_motivo_evaluacion_rowr  c                 4   | sy	 t        | t              r6t        j                  | j	                         d d d      j                         }nt        | d      r| j                         n| }|j                  d      S # t        $ r | rt        |       cY S dcY S w xY wr  r  r  s     r   _fmt_date_icz'generate_document.<locals>._fmt_date_icZ  r  r  c                     | #t        | t              r| j                         dk(  ry 	 t        |       S # t        t
        f$ r Y y w xY wNr   r=  r   r   r   r  r  r  s    r   _to_intz"generate_document.<locals>._to_int  sD    yZ3%7AGGIO#$"1v%z2 $#$   
3 AA
commune_id	region_idresponsible_idr  citycontact_phonecontact_emaileducational_establishmentcourse_levelprogram_type_idadditional_information_idattached_documentsquestion_to_answerreferring_professionalreception_dateevaluation_summaryindications_supportestablishment_addressestablishment_communeestablishment_phoneestablishment_emailprofessional_contact_phoner   r  career_typerequired_new_control_idnew_control_dater  r  r  r  r  r  r  r  r  r   r   rH  school_addressr!  r"  r#  r$  r  u   0 añosc                     | #t        | t              r| j                         dk(  ry 	 t        |       S # t        t
        f$ r Y y w xY wr  r  rX  s    r   _int_or_nonez'generate_document.<locals>._int_or_none  sD    9As!3	R q6M!:.   r  r  r  r  r  r  r  r  r  r/  )r   r5  u   Programa de integraciónzEscuela especial permanentepartr   c                     | xs dj                         j                         }|sy |j                         rt        |      }d|cxk  rdk  r|S  d S d|v ryd|v rd|v ryd|v rd	|v ry
d|v rd|v ryd|v ryd|v ryd|v ryd|v ryd|v ryd|v ryy )Nr   r   r  	anamnesis
entrevistafamiliar5  u   observaciónescuelar6  examensaludr7  escolarr  socialr  u   neurológicor  u   psicológicor  u   fonoaudiológicor  r  )r   r   isdigitr   )r  r  r?  s      r   _attached_text_to_idz/generate_document.<locals>._attached_text_to_idn  s    ZR&&(..099;AA !Q"16$6!#1$a!Q&9>q=W\>q=!Q&!Q&%*Q;r   r  r  r  r  zinterconsultation.docxzMTemplate interconsultation.docx no encontrado en files/original_student_filesstudent_nationalitystudent_mother_languagestudent_used_languagestudent_addressstudent_communestudent_regionstudent_cityrelation_with_studentstudent_phonestudent_emailrX  rY  questionp1p2p3program_type_nameprograma_integracionescuela_especial_permanenteprogram_type_otroadditional_information_1additional_information_2additional_information_3	descartarprecisarcomplementar
document_1
document_2
document_3
document_4
document_5
document_6
document_7
document_8
document_9document_10)r"  r#  r  rL  procedence_id_1procedence_id_2procedence_id_3
procedencer  procedence_otrorequired_new_control_id_1required_new_control_id_2required_new_control_dater  interconsultainterconsulta_+   Haz clic o pulse aquí para escribir texto.*   Haz clic o pulse aquí para escribir texto)remove_literal_stringsr   c                 f   | sy	 t        | t              r6t        j                  | j	                         d d d      j                         }n7t        | d      r)t        t        | dd             r| j                         n| }n| }|j                  d      S # t        $ r | rt        |       cY S dcY S w xY wr  )r=  r   r   rA  r   r   r  callabler   r  rB  r  s     r   _fmt_date_d27z(generate_document.<locals>._fmt_date_d27
  s    	3!#s+%..syy{3B/?LQQS f-+3GC4N+OSXXZUX ;;z22  3'*3s8223s   BB B0+B0/B0r9  c                     t        | xs d      j                         }|rd|vr|S 	 ddlm}  ||d      j	                  dd      S # t
        $ r) dd	l} |j                  d
d|      j                         cY S w xY w)uU   Campos IV–VI pueden guardarse como HTML (editor enriquecido); Word usa texto plano.r   <r   )BeautifulSoupzhtml.parserrM  T)r   Nz<[^>]+>r  )r   r   bs4r  get_textrB  r  r  )r9  r"  r  r  s       r   _psychoped_html_to_plainz3generate_document.<locals>._psychoped_html_to_plain  s|    	rN((*CqLH>1(M:CCDPTCUU  >!266*c15;;==>s   A /A98A9)r   latest_onlyr  social_nameu    año(s)u   1 añodiagnosis_issue_dateadmission_typec              3   P   K   | ]  }t        j                  |      d k7  r|   yw)MnN)unicodedatacategoryr  s     r   r  z$generate_document.<locals>.<genexpr>]  s+      )''*d2 )s   $&NFKDadmission_type_other)rW  r  X)reevaluacionr6  )r  rX  3instruments_appliedschool_history_backgroundcognitive_analysisFr   )r   personal_analysismotor_analysis
conclusioncognitive_synthesispersonal_synthesismotor_synthesissuggestions_to_schoolsuggestions_to_classroom_teamsuggestions_to_familysuggestions_to_studentother_suggestionsscales
scale_typeindicator_numberr  r  comunicasocial_communicativec                 ,    | dv ry| dv ry| dv ry| dv ryy )	N)r  r   )r6  r5  )r  r6  )zN/ONOzN-Or7  r8  rX  s    r   _value_to_colz(generate_document.<locals>._value_to_col  s/    ;;;,,r   student_social_namer  
issue_dateadmission_type_1admission_type_2admission_type_3acacg)r  r  r   r  r  r  r  r  r  r  r  r$  r"  r#  r  nombre_identidad_estudiantenombre_de_identidad_estudiantenombre_identidad_del_estudiantenombre_completo_estudiante!nombre_y_apellidos_del_estudiantenombre_social_del_estudiantenombre_social_estudiantenombre_socialfecha_de_nacimientofecha_nacimientoedadedad_del_estudianteestablecimiento_educacionalestablecimientonombre_establecimientocolegiocurso_nivelcurso_o_nivelcursonivelfecha_de_evaluacionfecha_evaluaciondiagnosticofecha_de_emision_de_diagnosticofecha_emision_diagnosticofecha_emision_del_diagnosticofecha_emision_de_diagnosticoanalisis_cognitivoanalisis_cognitivo_comunicativo analisis_personal_socioemocional"analisis_motor_autonomia_sensorial)sintesis_cognitivasintesis_personalsintesis_motorasugerencias_al_establecimientosugerencias_al_equipo_de_aulasugerencias_al_estudiantesugerencias_a_la_familiaotras_sugerenciasconclusion_informeinstrumentos_aplicadosantecedentes_historia_escolarnombre_profesionalrut_profesionalregistro_profesionalespecialidad_profesionalr  scale_r  z!psychopedagogical_evaluation.docxzYPlantilla psychopedagogical_evaluation.docx no encontrada en files/original_student_filesevaluacion_psicoevaluacion_psicopedagogica_)r  r  u,   Pulse o haga clic aquí para escribir texto.u$   Haga clic aquí para escribir texto.)r  content_control_tag_aliasesg      @)width_inchesr  r   r  r  r  rj  r  r  rE  rZ  r+  r*  r  r  responsible_professionals_namesr  r  r   r   r&  r'  r(  r)  r,  r-  r.  r/  r0  r1  r2  r3  r8  r9  r  )r  r  special_educational_need_namerG  participant_professionalparticipant_professional_namesupport_team_membersprofessional_namedec_recordsr  r  career_type_nameestablishment_idr  document_descriptionestablishment_namez	Sin cursoprofessional_rutprofessional_career!professional_certification_numberr\  r  )r  rU  r,  r-  r*  r+  attendance_dateattendance_timecertificate_dater  rY  
start_timeend_timez a rZ  r  -evaluator_namerW  comments_observationstotal_scorescoresconduct_responses)
r  r  r  r  r_  rU  r`  ra  rb  rc  r      !   "   #   $   %   &   '   (   )zparent_authorization.pdfzautorizacion_padres.pdfzautorizacion.pdfu=   Template de autorización de padres no encontrado. Buscando: r0  z -enerofebreromarzoabrilmayojuniojulioagosto
septiembreoctubre	noviembre	diciembre)r   r5  r6  r7  r  r  r  r  r  r  r  r   u   ●)ri  r  parent_relationstudent_course_schoolparent_fullname
parent_rutr  r  rD  rC  parent_signature
yes_marker	no_markerr  r   z
Documento )r   r  rj  r  r   document_namedocument_title	document_r   	template_FU_z (z: ))r#   r   r=  r>  r   r   r  r   rp  r   rQ   r   r   r   r=   generate_submission_pdfr   rw  r   r   r   
read_bytesr   r   r  r   r   rL   r   r   r   rT  r   rK   r   r   r   r   r   r$   r  r   rM   r  rN   r  rO   r   r  r   r  app.backend.db.modelsr  r  r  r  r}   r  r  r  r   rA  r   r  rC  rD  r  rB  upperr   r  r  r  r  r  r  r  r,   r?  r   (app.backend.utils.familia_report_prefillr  r  r  r-   r   r  floatr{   rE  rz   rF  r*  r   ry   rI  rH  r]  r  r~   communer   regionr  r   r   r  r  r  r   r/   r  r  	normalizer5   has_table_numbershas_chart_numbersr1   rq  mkstemprv  closer6   r   r  r0   r  r3   r7   r2   r4   r%   r@  r   r   rG  r   r  r   r&   r  r  r  r  r  r9   r:   r(   r)   r  r  r;   r<   r*   r.   r8   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r'   r  ru  r   r   r   r   r   r   type__name__(  r   r   r  r   
MSG_NO_DOCr  rJ  rK  stu_rowgenerr_httpr;  fppdf_path	pdf_bytesread_errr  r   document_resultknown_generable_doc_type_id_cat_docr   codefolder_recordevaluation_idhealth_eval_serviceevaluationsevaluation_datarP  r  r  r	  r  r
  r  professionalr  r  specialty_idstudent_personalbd_valbd_strbdr  r  age_strref_valrR  rS  r  rT  rU  gender_markerr  guproc_idsp_valp_vale_valo_valproc_labelsprofessional_procedence_valcr_idegs_valddd_valfull_name_validentification_valborn_date_valnative_lang_vallang_used_valnationality_valrO  rQ  rR  rS  family_report_servicefr_datar  student_identificationstudent_bornr  r  r%  professional_fullprofessional_id_numr  phemrn  report_deliveryreceiver_fullreceiver_id_numreceiver_relationreceiver_presencerS  r/  	eval_typeis_admissionis_reevaluationrx  ry  rz  r{  r^  r`  r  rb  ra  rd  eval_date_1eval_date_2eval_date_3r  r  r  r  interconsultation_serviceic_datar  ri  r  r  r  r  r  r  r  r  r  r  r  rX  rY  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r"  r#  r  rL  r  r  r  r  r  r  rA  r  _ct	_raw_spec_raw_strr  r  rO  rP  schcrsguardianr^  born_rawr   r  r  r  r  r  commr  regr3  r4  r]  ptprogram_type_id_1program_type_id_2program_type_id_3pprocr  r  r  procedence_other_displayrncr  r  r  ai_setai_valr  r  r  r  attached_setr  vidr  r  r  r  r  r  r  r  r  r  r  remove_placeholderscognitive_chart_tmpr  r  psychoped_servicepsychoped_result	eval_datapsychoped_iv_image_pathr  r  student_objr  admission_type_rawadmission_type_keyadmission_type_other_valr  r  r  r  r  r   cognitive_chart_placeholder_textinject_ac_table	parsed_cqfdtmp_pngr  r  r   r  r  r  r  r  r  r  r  r  _pdscales_listped_by_indicatorsoc_by_indicatorr"  str  r9  r  !psychoped_content_control_aliasesr   colr  val_pedr  social_indicatorval_socpsychoped_remove_placeholdersout_pathprogress_status_serviceprogress_statusesprogress_status_datar  rj  r  r  r  r  r  date_formatr  progress_date_strra  r[  professional_ids_strr   professional_idsr<  r4  professional_namesrL  rM  rN  rQ  rV  rW  r   rZ  r\  r  ids_stridsr  r_  r`  cesp_servicecesp_resultcesp_data_rawr  	cesp_datarE  r*  r+  date_fmtparticipantsupport_listincidents_resultrQ  isp_service
isp_resultisp_datar  processed_professionalsr   r  rP  rR  processed_proffono_servicefono_resultreport_dataestabint_idsidtel_serviceidtel_resultpsico_servicepsico_resultcert_servicecert_result	cert_datar   prof_id_careerctgac_servicegac_data_cdr0  _st_etconners_serviceconners_resultr  conners_data
pe_service	pe_resultdoc_data_31pe2_service
pe2_resultdoc_data_32pe3_service
pe3_resultdoc_data_33pe4_service
pe4_resultdoc_data_34pe5_service
pe5_resultdoc_data_35pe6_service
pe6_resultdoc_data_36pe7_service
pe7_resultdoc_data_37pe8_service
pe8_resultdoc_data_38pe1s_servicepe1s_resultdoc_data_39pe2s_servicepe2s_resultdoc_data_40r   possible_template_namestemplate_name	test_pathr  r  course_school_locationrz  r|  r}  guardian_serviceguardian_resultguardian_datarH  rI  guardian_namesguardian_father_lastnameguardian_mother_lastnamer  r  r   r  	months_es	month_rawrD  rC  generated_fileparent_auth_document_idr  system_file_pathr  rc  r   s                                                                                                                                                                                                                                                                                                                                                                                                                                        r   generate_documentra	    se    b/
F
4 'r*(,,Z8nd+1C1CG1LP^PbPbckPlpwPw"55!-11':wn>P>PQZ\v>w   "(0C8Q8VUV4W[\4\# & ; ;"%#g $  &:56 
 # & 9 9'*z4P  ,B/GGG%%*+-.C
 wwx G+sww}5<=#77"H# ("*#&779#5#C $  776?(bD+&B# & E E"%#H $  CG}H##%# & E E"%%H#M $ 
$//1	 *%<)<B!,-CB4q+I&)#i.&9  ""%",,{3Yot,1D1DX1NRY1Yo-1_`kmo1p#5{"C# & 9 9"%#2#6#6yB[#\ $  '+ot,*../ABL'((K79S9S9W9WX\9]^ 
 #'88&L !6z2FFzz(#w.zz-5# $"&#)::i#G $   K(
+d  ! HH[188&&*4''1, h{~~**,-eeg 
 !M!8!8 - 7 7 '<B&?#199Z9P3{#3a#7@J;WX>[_@`KN$6$6t$<fjM # & 9 9"%#- $  #8";155mDO/40_5H5H5RV]5]# & 9 9"%#- $  !!?@C[[M '')# & 9 9"%#u $  K"";/+.55knnH[H[\gHh6hiooq"(--"52K  """#34 hh'78??@P@S@SWfWjWjk{W|@|}  D  D  F'2'>'>'D"$ %'!*,'""#34!xx(9:AABSBVBVZiZmZmn~ZB   A   G   G   I-H\-Z-d-d-jhj,q,q,s)#22I&(hh&?&F&FGYGY]i]x]xGx&y&&  'B&;+B+B:E:Q:Q7 /?3F3FG_3`	i#&':':;S'T#ULE"$((?";"B"B?CUCUYeCe"f"l"l"nK"{'>'>6A6M6M3 .9OM*2BO./7LO34=XO9: #&&{38K8KL8Y#%88,D#E#L#L,77?<;XX$%' ! $(8(B(B-77Fvz27=z7R47:6{7H7H7J3B7O4&**519!%4[%A#2%FF!)!2!26:!F!K!K!MB$(JJLE5:ZZ"''5Iekk[`[d[dMeikiqiqsusysyhzMz5{OE2

3 G$((5F%))*;<DG!&#.'001DjQVVX070Gv{{}V]d(++CL,>,>,@",EzRWWYjnjtjtjvCs{(+499(<'BciiRVR\R\F\']77TXX-(A-L , 2!-!2EKUG76(&"ATYSZZ`Qa 2259Eoe45 M $$]B7BW]]_#rSy$'M B&")$'M &))/:G#qLScF"a<CSE"a<CSE"a<CSE.<IRXYKJQ+//'2*FWY'!|.1/2E2EFX2Y2_]_.`.f.f.h+ $''(@AE"aZcSG#
cG   3 3K @ FBGMMOM!$_%8%89P%Q%WUW!X!^!^!`%o&9&9+&FGM!/"5"56G"H"NBOUUWO 3 34K L RPRSYY[M!/"5"56H"I"ORPVVXO;];!=; ();; '(:	;
 ]; m; w; "?; "?; (;  ; #O; ; -c/2E2EFb2c2igi.j.p.p.r; 5c/:M:MNr:s:ywy6z  7A  7A  7C;  3C8K8KLn8o8usu4v4|4|4~!;" (_-@-@AX-Y-_]_)`)f)f)h#;$ )#o.A.ABY.Z.`^`*a*g*g*i%;& &s?+>+>?a+b+hfh'i'o'o'q';( .s?3F3FGd3e3kik/l/r/r/t);* *3/B/BC`/a/geg+h+n+n+p+;, #C(;(;<N(O(USU$V$\$\$^-;. %c/*=*=>P*Q*WUW&X&^&^&`/;0 *+F1;2 'O,?,?@V,W,][](^(d(d(f3;4 s?#6#67M#N#TRTU[[]5;6 "9_-@-@AR-S#T7;8 $Y/B/BCV/W%X9;: %c/*=*=>R*S*YWY&Z&`&`&b;;< 'O,?,?@T,U,[Y[(\(b(b(d=;> S!4!4[!A!GRHNNP?;@ c/"5"5k"B"HbIOOQA;B s?#6#6}#E#KLRRTC;D s?#6#6}#E#KLRRTE;F =C#7CSG;H =C#7CSI;J  4#K;L  4#M;N  O;P Q;R S;T U;V W;X Y;Z [;\ ];^ w_;` wa;b (c;d (e;f &s?+>+>?[+\+b`b'c'i'i'kg;h ?../FGM2NTTV 3 3K @A/--.JKQrRXXZ?../STZXZ[aac?../QRXVXY__a/--.?@FBGMMO/--.EFL"MSSUu;L| 23GMM$M6{B1D1D[1Q1aUackkloqtuvywyzI#4YKqAQAQRTSTAU@VV[!\\H#22M"HF zz(#w.# & E E"%#)::i#G $   K(
+d  !$5b$9!+==jIG'4(W[[-Bg-M# & 9 9"%#- $  !!?@CWWM '')# & 9 9"%#N $ 
3 !$GKK0C$D$J K Q Q S%(5T)U)[Y[%\%b%b%d"$W[[1D%EFLgkk-8>B?EEGK -=!>!D"EKKMN -=!>!D"EKKMN #GKK0J$K$Qr R X X Z"%gkk2V&W&][]"^"d"d"f #GKK0C$D$J K Q Q SW[[!56<"=CCEBW[[!56<"=CCEBGIR"S~';';E'BVX$'4J(KLO,@ A GRHNNPM!'++.N"O"USUV\\^O #GKK0G$H$NB O U U W #GKK0F$G$M2 N T T V #GKK0C$D$pTiHj$pnp q w w yW[[5;<BBDJW[[):;ArBHHJQQSI$(RRL'+PPOgkk*ABHbIOOQK!'++.I"J"PbQWWYOgkk*FGM2NTTVK!'++.N"O"USUV\\^Ogkk*<=a]A[a_abhhjK!'++.D"E"mUfIg"mkmnttvO*-gkk:N.O.USU*V*\*\*^'%(5M)N)sRYR]R]^lRm)sqs%t%z%z%|"!$W[[1E%F%L"!M!S!S!U'*7;;7Q+R  ,BV]VaVabzV{  ,B  @B  (C  (I  (I  (K$#GKK0C$DEK#GKK0C$DEK#GKK0C$DEKR#%6R 01GR %l	R
 $\R {R !.R !.R -R &'8R #LR R  R R ">R" )*;#R$ +,=%R& 56I'R( ,->)R* $%6+R, +,D-R. %b/R0 %b1R2 5o3R4 '5R6 +7R8 *9R: 0;R< 12J=R> %&>?R@ +OARB  CRF #MGRH /IRJ *+<KRL "#4MRN %&7ORP %mQRR 1/SRT ():URV '(9WRZ $%6[R\ j]R^ Z_R` \craRb BcRf {gRh "?iRj {kRl "?mRn {oRp "?qRr (sRt ,_uRv -kwRx 1/yRz #K{R| '}R@ ARB &CRD +KERF ,_GRH -kIRJ .KRN ./JORP )*@QRR %&8SRT  6URX +,DYRZ +C%0%0%0cRLh 23GMM$M6{B1B1XFXZbbcfhklmpnpqI#4YKqAQAQRTSTAU@VV[!\\H#22M"HF zz(#w.  2,-)7;;7H+I 2$vk7J2KL+D1D,EFzz(#w.# & E E"%#)::i#G $   K(
+d  "
3 )?r(B%/AA*MG ",.)!#K&(#$&! OL$&!$&!$&!"$"$MMFFJI!N"O(,%!%H%'"N!#"$I!N%'"13./1,%'"!# M!&*#(*% O'4(W[[-Bg-M$'K(@(FB$G$M$M$O!03GKK@W4X4^\^0_0e0e0g-$ $GKK$<=	!(5E)F!G$W[[%>?
#GKK$<=	!(5E)F!G%1'++k2J%K"*-gkk:K.L.RPR*S*Y*Y*['(+GKK8O,P,VTV(W(](](_%"%gkk)&<&B"C"I"I"K"7;;v#6#<"=CCE #GKK$@$FB G M M O #GKK$@$FB G M M OW[[)DEKLRRTW[[8>B?EEG")'++6G*H"I,3GKK@[4\,])%,[[1E%F"w{{+?@FBGMMO),W[[9Q-R-XVX)Y)_)_)a&!-gkk:J.K!L%(5I)J)Pb%Q%W%W%Y"&)'++6K*L*RPR&S&Y&Y&[#(+GKK8O,P,VTV(W(](](_%(+GKK8O,P,VTV(W(](](_%&)'++6K*L*RPR&S&Y&Y&[#&)'++6K*L*RPR&S&Y&Y&[#58Ei9j9pnp5q5w5w5y236w{{Ce7f7ljl3m3s3s3u0),W[[9Q-R-XVX)Y)_)_)a&%(5Q)R)XVX%Y%_%_%a"w{{+<=>HH%67>>?P?S?SW[?[\bbdE2MbRW2X2b2b2hfh1o1o1q.5'%IY[_:`M"$((?";"B"B?CUCUY^YmYmCm"n"t"t"vC"wsM4'H9<S__9M9S9S9U 6#KK(@A	("9~335HX%5%5%7:iRUW\Q];^!#&y>DM"$((?";"B"B?CUCUY]C]"^"d"d"fC"wsM4'H9<S__9M9S9S9U 6 419. 'O(D E#&w{{3E'F'L"#M#S#S#U *1'++>W2X*Y',8EW9X,Y)".w{{;L/M"N)--nbAGRL#''<BH#''<BH$'/||GR'@'FB&GqVgikIlIrprHsstu}  vB  vB  CT  VX  vY  v_  ]_  u`  %a  %g  %g  %i  %G  oz  {E  zF  mG!003L4D4DE\4]4cac0d0j0j0l0pst~p-%%1(,,{2K%L"**-hll;L.M.vQYQ]Q]^oQp.vtv*w*}*}*'((+HLL9P,Q,xU]UaUabqUr,xvx(y((  )B%""%hll9&=&C"D"J"J"L"8<<#7#=2>DDF  #HLL$9$?R @ F F H  #HLL$9$?R @ F F Hl..{;hh{+22;>>\R]E^3^_eeg !6B7==?Fhll;7Bhh{+22;3P3PTU3UWbWeWeiqr}i~W~  F  F  H !6B7==?FH88$89@@AUA`A`dnAnoxx  zN  zQ  zQ  zV  zV  zX  Y  _  _  a"XX/0778I8L8LP^8^_eeg,/0@0@0FB,G,M,M,O)(X'(L^`d:eXX/0778I8L8LPXPiPi8ijppr,/0@0@0FB,G,M,M,O)(\-=-=k-Jrhh{+22;>>\R]E^3^_eeg,/=Mt0T0ZXZ,[,a,a,c)K3=gt3LQXQ\Q\]eQfjqQqw{{;/w{H#<<4]ghpru]v**3x=+>+>+@"+EzRWWY  QX  Ya  ci  Qj  ~F  ~K  ~K  ~M  pxB JJLE!JJ0U[[%))4LPRPXPXZ\Z`Z`Oa4abE$)JJ$8B#>%++PRPXPXBX#YLyy266)$))B.FEqywe5A:C23N%OPzxtFaKDR3P%QR7<%**U"3)K   (k)BC	%!-hll;K.L!M!)(,,|*DE
 (k)BC	"$"hh/0778H8K8K~8]^ddf*-coo.C*D*J*J*L' Obxx-44\__
5RSYY[&)$,,*<"&=&C&C&EONRhh{+22;>>Y3NOUUW%()9r%:%@%@%BNEERHH[)0091LMSSU67AHHS]((*002"!R'29B'UW-'*3xRu$*bCi6R<8WY>'*2wCuo.B~"I"5 #27C ; #27C ; #27C ; /E U)%;!!#<O!!#<O!!#<O@E
s+;'<PR$67C3f#4(+3!8C(D%(+3!8C(D%Qw$>!q$A!q$*!$&!UF!";<F!a6&6Q&6

6"'*!v+32'F$'*!v+32'F$'*!v+32'F$3 8C= 8 5L!-0#6 2 8 8 = 2248?(,,S12   2T5MB/ 6%a#u61A;L";L(,,SV4"6s1v">C" , 0 0 56 A$5S2>JA$5S2>JA$5S2>JA$5S2>JA$5S2>JA$5S2>JA$5S2>JA$5S2>JA$5S2>JR<%7cR@K !?@C[[M '')# & 9 9"%#r $ B#%6B/1NB %&8B {	B
 &':B *+BB ()>B "?B "?B !.B B ()>B ()>B ()>B &':B  &':!B"  #B$  %B& &'B( &)B* H+B, )*@-B. !./B0 %&81B2 &':3B4 '5B6 '7B8 '9B: $%6;B< 'bAg(BSU=B> .PRVWPW/L]_?B@ $rQwVBABB +,DCBD +,DEBF +,DGBH 5IBJ 4KBL  8MBN jOBP jQBR jSBT jUBV jWBX jYBZ j[B\ j]B^ j_B` {aBb cBd eBf )*@gBh 7Y4T*@&8#2#2#26$<#;-F-F-F#2CBLF 23GMM$M6{B1B1UoW__`cehijmkmnI>)Adjjl>N>NrPQ>R=SSX!YYH H`#PR~"  fj#223}3E|UXYaUb  |O  PFzz(#w.# & E E"%#)::i#G $   K(
+d  "153>c >c > !A D0BBjfjBk8H8L8LX8VZc8c(,,V4imI# & 9 9"%#- $  'LBPZ&[#EOP^`dEe>--nbAkmL#''8>BH#''8>BH <<(.B/q>O1P1VTV0WWXYaYeYefwYxY~|~X  A  G  G  I .==/. - 
 #&immM&B&Hb"I"O"O"Q"fUf%hll;&?@IimmE28b9??AK8<<#<!k2B!"c*%..rxxz#2
KPPR JJLE!JJ0U[[%))4LPRPXPXZ\Z`Z`Oa4abE8=
UG8"4K  N((<077:8UV\\^K{44+.55knnH]H]6]^ddff00%+%7%7NNHLL5+.55k6S6SWX6XZeZhZhltlxlx  zE  mF  [F  G  M  M  Of00%+%7%7N+IMM:K,LMOY]];7=2>DDFJ&y}}5K'LMJ "%Y]]3C%D%J!K!Q!Q!S!Y!Y![!# )$..v7IJ) "
 (+9==9O+P+VTV'W']']'_$!!!!%55#;#Bs #'<<#;#Bs #'==#;#Bs "%imm4I&J&Pb"Q"W"W"Y(+IMM:U,V,\Z\(](c(c(e%!9)--H\:]!^/1,#O7	BI&y::<"&..07H4"*"2"2&"AKBHHRL6y'J.5+!IIg. <>8 8GZ9[ \5immDT6UVN1)--2MNJ":9==I^;_"`!9)--H\:]!^6y}}EV7WXO$<Y]]Kb=c$d!,DY]]SrEs,t)$<Y]]Kb=c$d!%=immLd>e%f" 8GZ9[ \%'"13./29==Ac3d3jhj/k/q/q/s,%(7O)P)VTV%W%]%]%_"}}./xx 1299:K:N:NR[R_R_`qRr:rsyy{5b$?C.1mm.Ar-H-H-J*9<SWW]9K9Q9Q9S6 $--17RK!!  0eeL)/R668>>@ee./;c(C uuW~+224::<r>Z2%5?U9U,/$S),/$S)0"	!#%6!%':! Y! {	!
 !.! !.! "?! j! j! #$4! #$4! #$4! &':! ,-F! %&8!  /E\-ce!!" 4r:Z#!$ &7"0(':&8#2)>1N)>*@%6*@6X4T*@A!LH21-/B2102E21 23F21 -.A	21
 45H21 /0E21 +,A21  !621 &{21 #K21 21 &}21 ./?21 "#321 )*:21  +!21" /#21$  !1%21& )'21( ))21* &'8+21, #$5-21. |/210 \1212 2<3214 ,\5216 07218 /921: %&:;21< 23G=21> d?21@ uA21B 34GC21D 56FE21F '<%9#42I1P-E,C%8&2*?1L&>#G(J,Dc21-h Q| @ A; @C"3%q.C.2237G29g.tA/0CxRL%	@@ R} @ A; @C"3%q.C'*Rx$.223CDG29g.tA/0CxRL%@@ !!?@CffM '')# & 9 9"%#~ $  23GMM$M6{B1B1XFXZbbcfhklmpnpqI#>yk4::<K[K[\^]^K_J``e!ffH-) $22M"H'D,MF zz(#w.# & E E"%#)::i#G $  zz+.H38M4)@s 2#h-@o)/HyI"x8OCCMSfg9#h-H		"56 /L4D4DU4K4QrR[r1#h-@K(
+d  "&@&D# 7 ? ?: ? V$,=(>!(C# & 9 9"%#- $  $5Q#7  !$$T40 $$\48 FPP^`dEe>--nbAkmL(,,_bAM(,,Wb9?RL"/"3"34Er"J!K1]M^M^_prtMuLvw}}".q1A0BCIIK'++,CRHNBK K)--k2>M& $I'W %%(0(9(9-(U(Z(Z(\I!% !)1)<)<)>/33OD%4H4L4L_4] 1191B1BCTV`1a1f1f1h
 !/ 3 3inn D!/!5!5	!G!A:!QJE"bLF#q[^-?-?)---O!QJE%'F 19%z16uEQJSTV<WWZ[aZbbfouyzozgk  AC  gD  /E16uEQJSTV<W.X#aZ-3HD1RT8U*VK
 8H !343? 07G !342= /2= / $''4+.55knnH\]hHi6ijpprLRW]WiWif6H6Hoq$]3$((d; $''1hh:;BBC^CaCaey  {C  fD  DD  E  K  K  MTW\_\y\y33P3P  @B$Z0$((48 $''4+.55k6S6SWX6XZeZhZh  mA  BM  mN  [N  O  U  U  WLRW]WiWif6H6Hoq$]3$((d; $''(CD'*+?@[+\']$'UFZF`F`adFe+~ikiqiqisi{i{i}C
O+~(+~A"FVW>N-]RURYRYZ[R\c!f-]*-] tFRVR[R[\nRo  LN,-NO %(()DdK $99'2"!8F *&*k<Xh7*# & E E"%#)::i#G $   K(
+,  "=bAJ"44Z@I)T*y}}X/F'/Q# & 9 9"%#- $   nn&GKKd#KKd+KK- FPP^`dEe>--nbAkmL#''8>BH#''8>BHKK 34:AAC!g.4"5Qx||DU7V7\Z\6]]^_g_k_kl}_~  `E  CE  _F  G  M  M  O69sZL?Y+,KK ?@FBMMO;C<<H_;`  <Tdpdtdt  vM  eN  <T  RT78KK 34:AACU`Ha/7||K/H+,KK.4";;=(,,{B[#,,Sk1J-KZX]]_D",,.--/C{{?3!"*"3"3C8P4QS]"^"c"c"eC  HHtyy0E YY3Fz
"[`cd[dwe5A:CSU;V-Wmslttx  BH  LM  BMy}  SU  yV  kWGM* ;;{+W[[AQ5R5XVX4_4_4a"&&{3+.GK(;;23[8Q/7||K/H+,;;/0X\\B_5`,4LL9V,W();;9:((#78??(33zA(/22779:557  :A**G67 {{;'+.55knnP[H\6\]ccef00060B0BG,-K.KK 017R>>@\EUEUVaEb+.55knnU`Ha6abhhjf00060B0BG,-  $78I+.55k6S6SWX6XZeZhZhluZuv||~?E&J\J\););bd&)+&KK+T2 [[!12Fhh:;BBC^CaCaekCklrrtGJsOlOlc&C&Crt
#&(
#KK($/ "++&@AKHH1299:N:Q:QU`:`aggi67ggm_AaFWFWF][]E^^_`a`q`q`wuw_x3y33  4BG/0./.E.E.KGN+))XX&78??@Q@T@TXYXjXj@jkqqsOQVXVfVf2;K;Kln 78;= 783:;;3O3USUG/0.0GN+79G34/6{{?/K/Qr+,*,'35/0KK2D9KK. 89Bb'--//6}}S/AY!QWWYEVEVEXs1779~YY9"cB),;A
Q;;QVTYYu=M\^9:=?9:KK3T: !0O[ijM++k*C@Cm&7&7&<UWGN##99%"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  "$R=L&88QU8VK+t,1Jg1U# & 9 9'*z4P  8B+t7TKOOF3Z^M 
=$(G# & 9 9'*z4P  FPP^`dEe>--nbAkmL(,,_=CM(,,_=CM(,,Wb9?RL"/"3"34Er"J!K1]M^M^_prtMuLvw}}".q1A0BCIIK]+I,<I()(4In%,<I()'4'8'89PRT'U'[Y[Im$-:->->{B-O-}S`SdSdexz|S}I)*'++,<=fAQAQR_A`fdfK<#3#3K#@+.55knnU`Ha6abhhj#)#5#5#;"B"B"DK'++,<=  Ufpq~  AE  gF-BSBSTaBb  LN  U  SUK=Zt5TYfYjYjkvYw+.55k6S6SWX6XZeZhZhly  {F  mG  [G  H  N  N  P#)#5#5#;"B"B"DK$((7=2H*]D2Q)--.MNTRT[[]  `bobsbs  uP  cQ  cW  UW  b^  b^  b`*5I&'*5I&''/'^3}7H7H7W7][]3^Im$K%MM*=rBM $I$T %%(0(9(9#m:LSb:QS[(\(a(a(cI!% !&lln113 #9>> 9!$Y__!<!A:!QJE"bLF#q[SWWy}}-D!QJE%'F 19 EKUG5
PR8SSVW]V^^bkquvkvcg|~b  +A  TY  SZ  Z_  gl  pq  gq  `c  wy  _z  Q{K#aZ-3HD1RT8U*VK (3Im$#--(BCKz+t<QbAcxx 1299:K:N:NR]^oRp:pqwwy AE>YZ\^b>c>m>m>sqs=z=z=|  KM	9:$==)?@FBL! }a&1551B+C88$56==>O>R>RVWXiVj>jkqqsDpt.I"d.S.].].cac-j-j-lz|A)*}
  326>>*>UK*D1.,d38H8L8LV8T.2262>'2Im$#99''"!8F *&*k<Xzz(#w.# & E E'*vzz)]7[eij   K(
+,  "4R8K$66zBJ*d+
x0HG0S# & 9 9"%#- $  "(H LLt$LLt,LL. ||K(+.55knnQ\H]6]^ddff00171C1CH-.[$/ ||,-hh:;BBC^CaCaemn~eC  A  G  G  I388+.+H+HHZ(-t4 ||/0+.55k6S6SWX6XZeZhZhlt  vI  mJ  [J  K  Q  Q  Sf00.4.@.@H]+0$7 %LL"=M*,') CD&*hh/@&AO%)XX.>%?N(*%&')xx0A'B'I'IJ[J^J^bqJq'r'x'x'z'1LRQ]1^1h1h1nln0u0u0w-')$%I&(hh&?&F&FGYGY]kGk&l&r&r&t&/:/F/F,%)YY[N:KN#679IN#56+22>B)C, -D) $99'&"!8F *&*k<Xh7*# & E E"%#)::i#G $   K(
+,  !6r:L&88DK+t,1Jg1U# & 9 9"%#- $  &**,KOOD$'OOL$/OOND1 {++.55k6S6SWX6XZeZhZhlw  yD  mE  [E  F  L  L  Nf00171C1CK.T2-/M*  OO$67E SZ%5%5%7%?%?%Ae*CXXk299+..C:OPVVXF&"4"4:@:L:L$67
 !<=B~&r40bbb#&!"jjn  Cs3x0
 :"gF)0?ACGGAJQ??UZ5AQ`b=>OO7>#99)"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  !,R0M(:::FL,-,2B2B82LPW2W# & 9 9"%#- $  2<L$1O,++-UWKOOD$'OOL$/OOND1{++.55k6S6SWX6XZeZhZhlw  yD  mE  [E  F  L  L  Nf00171C1CK.T2-8__]-K-QrM*OO$67E SZ%5%5%7%?%?%Ae*CXXk299+..C:OPVVXF&"4"4:@:L:L$67 !<=B~&r40bbb#&!"jjn  Cs3x0
 :"gF)0?ACGGAJQ??UZ5AQ`b=>OO7>#99)"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  :+rJ<R@M(:::FL,-,2B2B82LPW2W# & 9 9"%#- $  2<L$1O,++-UWKOOD$'OOL$/OOND1{++.55k6S6SWX6XZeZhZhlw  yD  mE  [E  F  L  L  Nf00171C1CK.T2-8__]-K-QrM*OO$67E SZ%5%5%7%?%?%Ae*CXXk299+..C:OPVVXF&"4"4:@:L:L$67 !<=B~&r40bbb#&!"jjn  Cs3x0
 :"gF)0?ACGGAJQ??UZ5AQ`b=>OO7>#99')"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  "GKL&88DK+t,1Jg1U# & 9 9"%#- $  $((*IMM$%MM,-MM.$/MM0$7EOP^`dEe>--nbAkmL#''8>BH#''8>BH\\'*0b18<<@Q3R3XVX2YYZ[c[g[ghy[z  \A  A  [B  C  I  I  KC47S{:,=WI)*'/||4K'L'P\P`P`axPy'}Im$$((5I+.55knn	6QRXXZHNSYSeSe&2D2Dkm	./24	./ [1I+.55k6S6SWX6XZeZhZhluZuv||~AGFL^L^6+=+=do	-(+6	-(\\"?@Fhh:;BBC^CaCaekCklrrtILQTQnQn(E(Etv	*%(*	*%mm$56Gxx 1299:K:N:NRY:YZ``b5b$?C:=--:M29T9T9VI5647GGMrI01(}}-BCIrPPRG9@	"56,,IXXo6==o>P>PTXTgTg>ghnnpKMRTR`R`fh	"569;	"56z||I56|CU9VYbcvYwvxx	12xY?Q5RU^_rUsMM+T2MM=tDMM/6#--6KAHH1299:N:Q:QU`:`aggiHH1299(33zA(/22779:557  45GGMr?!ADUDUD[Y[C\\]^_^o^o^usu]v1w1}1}1	-.,-,C,C,Ir	.)MOO	-.>1JMM-.#99'"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  "<R@K"44Z@H(D)hll8.D.O# & 9 9"%#- $  FPP^`dEe>--nbAkmL#''8>BH#''8>BH\\'*0b18<<@Q3R3XVX2YYZ[c[g[ghy[z  \A  A  [B  C  I  I  KC,/S{:,5O&(%' "!#%#%	I %((5I+.55knn	6QRXXZHNSYSeSe&2D2Dkm	./ [1I+.55k6S6SWX6XZeZhZhluZuv||~AGFL^L^6+=+=df	-(\\"?@Fhh:;BBC^CaCaekCklrrtILQTQnQn(E(Etv	*%-.556J6U6UYc6cdmm  oC  oF  oF  oK  oK  oM  N  T  T  VA45GGMr?!ADUDUD[Y[C\\]^_^o^o^usu]v1w1}1}1	-.,-,C,C,Ir	.),,12CP!#s+CB$--c#2h
CHHJ78zz*7M	"34 j17:||J7O	"34 ,,|,2C,,z*0bCs25c#/?/E/E/G	+,/23x~~/?	+,/23x~~/?	+,#99'"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  ";B?O,>>zW[>\N!^%7%7%AY%NVdVhVhioVp# & 9 9"%#- $  'v.IEOP^`dEe>--nbAkmL#''8>BH#+<<#8#>B"?qN_A`Afdf@gghiqiuiu  wH  jI  jO  MO  iP  !Q  !W  !W  !Y$&1*$>!&**+BCrx||TkGlrprK||K0QL4D4D[4QH "OH++-cr2A1v|!!$--a<AAC,-JJz,B),-) &7*%6#,==1B#C#Ir"+--0@"A"GR#,==1B#C#Py)27N)O)USU(}}];#--17R%.]]3F%G%M2L $99*"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  "FrJJ"44Z@I)T*y}}X/F'/Q# & 9 9"%#- $  y/K#99)"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  "HLK$66zBJ*d+
x0HG0S# & 9 9"%#- $  z*K#99)"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  "GKK$66zBJ*d+
x0HG0S# & 9 9"%#- $  z*K#99)"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  "HLK$66zBJ*d+
x0HG0S# & 9 9"%#- $  z*K#99)"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  "GKK$66zBJ*d+
x0HG0S# & 9 9"%#- $  z*K#99)"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  "GKK$66zBJ*d+
x0HG0S# & 9 9"%#- $  z*K#99)"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  "I"MK$66zBJ*d+
x0HG0S# & 9 9"%#- $  z*K#99)"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  "HLK$66zBJ*d+
x0HG0S# & 9 9"%#- $  z*K#99)"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  "QRTUL&88DK+t,1Jg1U# & 9 9"%#- $  {+K#99)"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  "RSUVL&88DK+t,1Jg1U# & 9 9"%#- $  {+K#99)"!8F *&*k<Xzz(#w.# & E E"%#)::i#G $   K(
+,  BLN\`Aa~))."=gi#''4o8H8H8QoWbcmbnUo GQQ`bfFg?../ABmq !'# !M!8  !?@=P	##%$-M	 !# & 9 9"%%bcgclcl  nE  dF  cG  $H $  FPP^`dEe>--nbAkmL(,,_bAM "%%gr28bE+//0A2FL"O+//0A2FL"O"'/):!O;LMSSU &("(,,_bAM:G))+6TI$((5IKK +.55k6S6SWX6XZeZhZhluZuv||~4:f00 +.55knn	6QRXXZ4:f00 {,7=K=)I)O)OPT)U&)4&)4& !O OJ3B7.22:>O:ot#DI\I\]eIfjqIq / $1#4#45G#H #$&HH->$?$F$FGXG[G[_oGo$p$v$v$xMERm&A&AXZO "/!2!27B!?+8+<+<=NPR+S(+8+<+<=NPR+S(%3$4A6N5OqQiPj"k"q"q"s +../FKQr
 D :ot#DI\I\]eIfjqIq&**626<"  , 0 0" E*..|<
 hh|4;;LOOz<YZ``bG&4" ,,.Ccgg,C yWg'hYK[I
 "ciiSYY@I.7I((*RE sxx=%D $88#&}#5!1 /&< /%!# !8F" h7*# & E E"%#)::i#G $ !%f[&9!:!))+./+&J"/$&--'O (,,C'D'V$$++11$1N'..0^5K5K5MQaQiQiQk5k(//1^,c2B.CD*-.>*?F;')8F:&3J(?  K(
+,  @J/[_?`++J;fhFPQ`bfFg?../ABmq BLN\`Aa~))."=gi$(("=$(("5;+//0A2FGqIZIZ[lnpIqHrsyy{*^1-=,>?EEG % 0( 0&*+IK=/I
 }D)@Pi}A&6%7t<VZ8E}$$S#./t44}D)CPc-''S1779:$?VZ#
 5L"TDt4"T"T4 	M;<}LI! )		  55#'0=#m,44
 	&fj+|T(w&"AA!%zz)]C   $J'(
 	
I\  # & E E"%%Fxj#Q $ J #I. i25o6I6IJbdf6g2h/i:  ) ! !D ! z !*:6 ! !R ! b	 ! p  ' ! !J ":. ^ # 		"56" h%$% $& ! D ,-]$ URT,-NOOUF  ) ! ! ! R Z;p  ) %$%  ! b #I.  % ! ! '	2  @x #I.  % ! ! '	2  @r #I.  % ! ! '	2  @r ! PDG3s8CR=RI/0P~ ! O>FHcr(:B%OX  T #UH  
==+_BtAw/?/?.@3q6$3<.PQR
 	

s  HtBHr) Ht8Hr) HtA#Hr) 7Ht8BHr) HtAHr) HtAHr) HtHf3 .;Hr) )Ht*BHr) /Ht0C/Hr) Ht Hr) 3Ht4DHr) HtAHr) ,Ht-<Hr) )Ht*HHr) .A5Hg+ #C)Hr) BHh .Hr) 
D*Hh, 4`Hr) MHtMHr) MHtMA$Hr) N>HtN?<Hr) O;HtO<_Hr) oHtoHr) o,Hto-Z,Hr) JA>Hh< LXHr) d3FHi j8QHr) |B
Hr) ~C>Hr) BHtBGHr) I/HtI0Hr) JHtJBHr) LHtLEHr) QCHi" TMHr) a8Hi2 bJHr) lHjl'JHr) v6Htv7C0Hr) z'Htz(A/Hr) |-Hj( }Hj }AHr) ~&Ht~'AHr) ?Ht@ DHr) D
Hk" D'HkD4>Hk" E3:Hk F-B?Hk" I,HHr) RHl
 R%Hk>SHk>SHl
 S8HlT	HlT!Hl
 T<A7Hr) V3HtV4Hr) WHtWA+Hr) X3HtX4G5Hr) `*A2Hl= b2Hl- cA*Hl= d9W Hr) |#Hm|=Hm}Hr) }0Hm~
	Hm~C*Hr) A=HtA>Hr) BHtBA.Hr) D HtDAHr) EHtEM?Hr) S
Hm( S%3HmTC!Hm( W9C(Hr) ["Hr) [5EHr) aHtaHr) a&Hta'A+Hr) cHtcOHr) rHtr Hr) r3Htr4A*Hr) tHttD9Hr) yA0Hm8 {	?Hr) |	Hn |"
Hr) |-Hn!}	Hr) } Hn7}:	Hn7~B$Hr) @'Ht@(Hr) @;Ht@<A+Hr) B'HtB(E!Hr) H
A0Hn= I:?Hr) J:Ho K
Hr) KHo&K:Hr) LHo<L+	Ho<L4B%Hr) OHtOHr) O-HtO.A1Hr) QHtQ E!Hr) WA0Hp X2?Hr) Y2Hp Z
Hr) ZHp+Z2Hr) [	Hq[#	Hq[,B$Hr) ^Ht^Hr) ^$Ht^%A+Hr) `Ht`Y"Hr) y3Hty4Hr) zHtzA+Hr) {3Ht{4L(Hr) HBHq J$DHr) N)HtN*Hr) N=HtN>A3Hr) P1HtP2C)Hr) TA?Hq0 VDHr) Z"HtZ#Hr) Z6HtZ7A*Hr) \!Ht\"A<Hr) ^Ht^Hr) ^2Ht^3A*Hr) `Ht`A<Hr) bHtbHr) b.Htb/A*Hr) dHtdA<Hr) fHtfHr) f*Htf+A*Hr) hHthA<Hr) jHtjHr) j&Htj'A*Hr) lHtlA<Hr) nHtnHr) n"Htn#A*Hr) pHtpA<Hr) r
HtrHr) rHtrA*Hr) t	Htt
A<Hr) vHtvHr) vHtvA*Hr) xHtxA<Hr) zHtzHr) zHtzA*Hr) |Ht|A<Hr) }>Ht}?Hr) ~Ht~A*Hr) =Ht>A<Hr) A:HtA;Hr) BHtBB*Hr) D:;Hr) E5HtE6S1Hr) Y'HtY)C?Hr ](Hr) ];Ht]<E/Hr) c+	Hr#c5Hr#c:.Hr) d)A5Hr) fHtfHr) f2Htf3	Hg(f<!Hg#gHg(gHr) g"Htg#Hg(g(Hr) g+*HhhHr) hHhhHr) h	Hh)h%Hr) h(Hh)h)Hr) h,	Hh9h5Hr) h8Hh9h9Hr) h<HiiHr) iHiiHr) i	HiiHr) iHiiHr) i"	Hi/i+Hr) i.Hi/i/Hr) i2	Hi?i;Hr) i>Hi?i?Hr) jHjjHr) jHjjHr) j	Hj%j!Hr) j$Hj%j%Hr) j(Hkj*Hk j?Hkk 	Hkk	HkkHkkHkkHr) kHkkHk" kHkkHk" k"
Hk;k,Hr) k4Hk;k;Hr) k>Hl
 l

Hl*lHl#lHr) l#Hl*l*Hr) l-	Hl:l6Hl= l9Hl:l:Hl= l=	Hm
mHr) m	Hm
m
Hr) m	Hm%m!Hm( m$Hm%m%Hm( m(	Hm5m1Hr) m4Hm5m5Hr) m8HnnHr) n
HnnHr) nHnnHr) nHnnHr) n!Hn4n0Hr) n3Hn4n4	Hr) n=HooHr) oHooHr) oHo#oHr) o"Ho#o#Hr) o&Ho9o5Hr) o8Ho9o9	Hr) pHppHr) pHppHr) pHp(p$Hr) p'Hp(p(Hr) p+Hp>p:Hr) p=Hp>p>	Hr) q"Hq-q)Hr) q,Hq-q-Hr) q0HrrHr) rHrrHr) r	Hr rHr) rHr r 	Hr) r)
Htr3AHtt HttHttHttHtz/download/{filename}r   c           	      6  K   	 t        d      | z  }|j                         st        t        j                  ddd d      S t        t        |      | d      S # t        $ r5}t        t        j                  dd	t        |       d d      cY d }~S d }~ww xY ww)
Nr   r  zArchivo no encontradorf  r  rk  rl  r<  zError descargando archivo: )	r   r   r   r   r  r   r   rB  rw  )r   r   ra  s      r   download_documentrc	    s     
01H<	!"55!6   Y(
 	
  
==8QA
 	

s@   B<A  BA B	B!*BBBBBz/inspect-pdf/{template_name}rS	  c                   K   	 t        d      | z  }|j                         st        d      |  dz  }|j                         st        t        j                  dddd      S t        j                  t        |            }|d   d	k(  r/t        t        j                  d
|j                  dd      dd      S t        t        j                  dd|j                  dg       |j                  dg       |j                  dd      dd      S # t        $ r5}t        t        j                  d
dt        |       dd      cY d}~S d}~ww xY ww)u   
    Inspecciona un template PDF para identificar qué campos de formulario contiene.
    Útil para entender cómo están estructurados los campos en el template PDF.
    r  r   r  zTemplate PDF no encontradoNrf  r  r   r   r<  rg  z!Error inspeccionando template PDFr:  z'Template PDF inspeccionado exitosamenteform_fieldstext_placeholderstotal_form_fieldsr   )re	  rf	  rg	  z#Error inspeccionando template PDF: )r   r   r   r   r  r   inspect_pdf_form_fieldsr   rw  r   r  rB  )rS	  rP  r   ra  s       r   inspect_pdf_templateri	    sW    3
;<}L##% !?@m_TXCYYM##%"55!;    77M8JK(w&"AA!%zz)5XY
 
 **D#)::mR#@)/4G)L)/4G)K
 	
  
==@QI
 	

sO   EAD
 !E"AD
 6E7AD
 	E
	E*E=E>EEEz
/fill-docxam.docxr  Prueba)rS	  rO  )defaultc           	      8  K   	 | j                  dd      }| j                  dddi      }t        d      |z  }|j                         s"t        t        j
                  dd| d	d
      S t        d      }|j                  dd       |dt        j                         j                  d	d  dz  }t        j                  t        |      |t        |            }|j                  d      dk(  r/t        t        j                  d|j                  dd      d	d
      S t        t        j                  dd|j                  d      |j                  d      dd
      S # t        $ r2}t        t        j                   dt        |      d	d
      cY d	}~S d	}~ww xY ww)z
    Prueba: rellena un formulario DOCX reemplazando etiquetas.
    Body: {"template_name": "am.docx", "replacements": {"nombre": "Juan", "fecha": "28/01/2026"}}
    Formatos soportados en DOCX: {etiqueta}, [etiqueta], <<etiqueta>>
    rS	  rj	  rO  r  rk	  r  r  zTemplate no encontrado: Nrf  r  r   Tr   docx_filled_r  r  r   r   re  rg  Errorr:  zDOCX rellenado correctamenter   r   )r   r   r<  )r   r   r   r   r   r  r   r  r  r  r   r  r   rp  r  rB  rw  )	r  r  rS	  rO  rP  rQ  rS  r   ra  s	            r   r  r     s    
)<xx80DE;<}L##%"55#&5Mm_3]gkl  ./dT2|DJJL,<,<Ra,@+AGG..s=/A<QTU]Q^_::h7*"77#&6::i3Q[_`  **9%+ZZ
%;&**U`Jab
 	
  
=="s1vtD
 	

sN   FA%E )F*B1E F?E F	F%'FFFFFr  )NF)typingr   r   r  fastapir   r   r   r   r	   r
   r   r   fastapi.responsesr   r   r   #app.backend.classes.documents_classr   -app.backend.classes.docx_register_book_layoutr   r   r   r   r   r   r   r   r   r   r   r   0app.backend.classes.course_activity_record_classr   r   r   r    r!   r"   !app.backend.classes.student_classr#   +app.backend.classes.health_evaluation_classr$   1app.backend.classes.progress_status_student_classr%   <app.backend.classes.progress_status_individual_support_classr&   *app.backend.classes.student_guardian_classr'   1app.backend.classes.individual_support_plan_classr(   1app.backend.classes.fonoaudiological_report_classr)   Eapp.backend.classes.school_integration_program_exit_certificate_classr*   #app.backend.classes.anamnesis_classr+   'app.backend.classes.family_report_classr,   +app.backend.classes.interconsultation_classr-   9app.backend.classes.guardian_attendance_certificate_classr.   6app.backend.classes.psychopedagogical_evaluation_classr/   2app.backend.utils.psychoped_cognitive_quantitativer0   r1   r2   r3   r4   r5   r6   r7   4app.backend.classes.conners_teacher_evaluation_classr8   app.backend.classes.cesp_classr9   )app.backend.classes.action_incident_classr:   &app.backend.classes.idtel_report_classr;   7app.backend.classes.psychomotor_evaluation_report_classr<   0app.backend.classes.informal_test_template_classr=   Fapp.backend.classes.pedagogical_evaluation_classroom_first_grade_classr>   Gapp.backend.classes.pedagogical_evaluation_classroom_second_grade_classr?   Fapp.backend.classes.pedagogical_evaluation_classroom_third_grade_classr@   Gapp.backend.classes.pedagogical_evaluation_classroom_fourth_grade_classrA   Fapp.backend.classes.pedagogical_evaluation_classroom_fifth_grade_classrB   Fapp.backend.classes.pedagogical_evaluation_classroom_sixth_grade_classrC   Happ.backend.classes.pedagogical_evaluation_classroom_seventh_grade_classrD   Gapp.backend.classes.pedagogical_evaluation_classroom_eighth_grade_classrE   Papp.backend.classes.pedagogical_evaluation_classroom_first_grade_secondary_classrF   Qapp.backend.classes.pedagogical_evaluation_classroom_second_grade_secondary_classrG   :app.backend.classes.professional_document_assignment_classrH   app.backend.db.databaserI   r  rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   app.backend.auth.auth_userr   app.backend.schemasr   r   r   r   r   r   r   sqlalchemy.ormr   
sqlalchemyr   pathlibr   rq  rv  r  r  loggingr   r   collectionsr   &app.backend.utils.professional_displayr   r   	getLoggerr  r   r   r   r   r>  r   r   r   r   r  r  shutilr  r  r   r  r   rb  postas_formr|  r  r  rT  r  r  rd  r  r  r  r  r  r  r  r  r  ra	  rc	  ri	  r  r8  r   r   <module>r	     so      S S S B B >     ; M X m K X Y ~ > E N h c	 	 	 _ 4 I C d V A C A C A A E C T V j *< < < < < < < < < < < < < < < <z ?   #    	 	   # # s			8	$ "&;;; sm; 	;
 #; 	;2 "&VVV V sm	V
 #V 
VN  $$]]] ] 	]
 ] }] }] c]] }] ] ]@^ ^ ^UY ^+g +3 +8TW= +\  ,
	 *+ &/jHjHjH ,jHZ 	Cy+23H3P3P+QJ

J
(J
 J
X 45 Cy_ "'W	" &+K&
  %\ 
 &&=>&/3d
d
d
 d
 C=	d
 #d
 c]d
& }'d
0 1d
2 	3d
 6d
L  &&=>&/'
 '
'
 	'
 '
Rp
J# p
J7 p
Jt p
Jf)6)6)6
4c3h $d23)6X{C {W {|+ +, &/%&=>


 
 -
8 45 &/%&=>


 
 6
8 78 &/%&=>$$$ $ 9$Nc 8D> UX BEEC=E #E 		E" 01 &&=>&/	X
X

X
 X
 		X
 2X
v :; &&=>&/	r
r

%r
 r
 		r
 <r
j CD &&=>&/	O
O

-O
 O
 		O
 EO
d 56 05]0 &/o/
o/
o/
  (}o/
 	o/
 7o/
b_ %&

 '
> -.:
:
 /:
z 	HV^K_`a%&=>'

'
'
 '
r   