
    6j                        % S r SSKJr  SSKrSSKJr  SSSSSS.rS	\S
'   Sr\R                  " S\R                  5      rSrSS jrSS jrSS jrg)uE   Validación de fidelidad del JSON de análisis vs contenido del Word.    )annotationsN)AnyP      x   )resultados_evaluacionambito_pedagogicoambito_social_afectivotrabajo_colaborativoapoyos_hogarzdict[str, int]_FAMILIA_MIN_CHARS   zAtres compromisos|compromiso compartido escuela|escuela, familia y)z...u   …c                   ^ U R                  5       mT(       d  g[        U4S j[         5       5      (       a  gTR                  S5      (       a  gg)NTc              3  ,   >#    U  H	  oT;   v   M     g 7f)N ).0markerstrippeds     ]C:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\utils\agent_analisis_validation.py	<genexpr> _is_truncated.<locals>.<genexpr>   s     
@,?&X,?s   >F)stripany_TRUNCATION_MARKERSendswith)textr   s    @r   _is_truncatedr      s@    zz|H

@,?
@@@    c           	         [        U5      (       a  [        SU  S35      eUbJ  [        UR                  5       5      U:  a,  [        SU  S[        UR                  5       5       SU S35      eg g )N
secciones.ug    parece truncado o resumido. Debe contener el texto íntegro que va en el Word, sin '...' ni extractos.z es demasiado corto (u    caracteres; mínimo ~u9   ). Copia el párrafo completo del informe, no un resumen.)r   
ValueErrorlenr   )keyvalue	min_charss      r   _check_string_sectionr'   &   s    U Y Y
 	
 U[[]!3i!?23u{{}3E2F G!{"[]
 	
 "@r   c           	     :   U R                  S5      n[        U[        5      (       a  U(       d  [        S5      eU R                  S5      =(       d    SR	                  5       R                  5       nUR                  5        GH  u  p4[        U[        5      (       a  US:X  a  [        R                  U5      OSn[        X4U5        US:X  aR  US:X  aJ  [        R                  U5      (       a.  [        UR	                  5       5      [        :  a  [        S5      eM  M  M  M  [        U[        5      (       d  M  U(       d  [        S	U S
35      e[        U5       H>  u  pg[        U[        5      (       d  M  [!        U5      (       d  M.  [        S	U SU S35      e   GM     g)uG   Exige que secciones reflejen el texto completo del Word, no resúmenes.	seccioneszPsecciones debe ser un objeto con el texto completo de cada apartado del informe.tipo_informe familiaNacuerdosu   secciones.acuerdos debe incluir los 3 compromisos redactados por completo (escuela, familia y compartido), no una frase genérica.r!   u    no puede estar vacío.[uB   ] parece truncado. Cada ítem debe ser el texto completo del Word.)get
isinstancedictr"   r   loweritemsstrr   r'   _VAGUE_ACUERDOSsearchr#   _FAMILIA_ACUERDOS_MINlist	enumerater   )payloadr)   tipor$   r%   r&   iitems           r   validate_analisis_payloadr>   3   sj   K(Ii&&i^
 	
 KK'-2446<<>Doo'
eS!!7;y7H*..s3dI!#i8j TY%6"))%00S5GJ_5_$S  6`0 &7  t$$ :cU2I!JKK$U+!$,, &&$$SE1# .J J 	 , (r   )r   r4   returnbool)r$   r4   r%   r4   r&   z
int | Noner?   None)r:   zdict[str, Any]r?   rA   )__doc__
__future__r   retypingr   r   __annotations__r7   compile
IGNORECASEr5   r   r   r'   r>   r   r   r   <module>rI      sh    K " 	   !& N   **HMM
 % 

r   