
    NIj&                        S r SSKJr  SSKrSrSr\R                  " S\R                  5      rSS jr	SS jr
SS	 jrS
R                  5       rSR                  5       rg)zSAjusta el prompt del agente para el chat: omite secciones que el sistema reemplaza.    )annotationsN)zsalida esperadazguardado de informesu   confirmación de guardadozconfirmacion de guardado)reporte_interactivozreporte interactivoz.xlsz.xlsxexcelfilesarchivoarchivosfuentefuentes	apoderadonominau   nóminaprofesional	normativadecretoglosarioantecedenteszinforme psicopedprioriz
obligatorizdebes zdebe z^##\s+(.+)$c                r   ^ U R                  5       R                  5       m[        U4S j[         5       5      $ )Nc              3  ,   >#    U  H	  oT;   v   M     g 7fN ).0keyword
normalizeds     \C:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\utils\agent_v2_prompt_sanitize.py	<genexpr>'_should_omit_section.<locals>.<genexpr>/   s     K4J*$4J   )striplowerany_OMIT_SECTION_KEYWORDS)titler   s    @r   _should_omit_sectionr$   -   s)    $$&JK4JKKK    c                   U =(       d    SR                  5       nU(       d  U$ [        [        R                  U5      5      nU(       d  U$ / nUSUS   R	                  5        R                  5       nU(       a  UR                  U5        [        U5       H  u  pVUR                  S5      n[        U5      (       a  M(  UR	                  5       nUS-   [        U5      :  a  X%S-      R	                  5       O
[        U5      n	UR                  XU	 R                  5       5        M     SR                  U5      R                  5       $ )uO   Elimina secciones como «Salida esperada» antes de enviar el prompt al modelo. Nr      z

)r   list_SECTION_HEADERfinditerstartappend	enumerategroupr$   lenjoin)
textrawmatchespartsprefixindexmatchr#   r,   ends
             r   #sanitize_role_instructions_for_chatr:   2   s   :2


C
?++C01G
E%71:##%&,,.FV!'*A&&,1AIG,Dgai &&(#c(Ss^))+, + ;;u##%%r%   c                Z  ^ U =(       d    SR                  5       nU(       d  g[        5       n/ nUR                  5        H  nUR                  5       nU(       a  UR                  S5      (       a  M2  UR	                  5       m[        U4S j[         5       5      (       d  Mb  [        R                  " SSU5      n[        U5      S:  a  M  UR	                  5       nXr;   a  M  UR                  U5        UR                  U5        M     U(       d  gSSR                  S US	S
  5       5      -   $ )u   
Extrae del prompt del creador las reglas operativas (archivos, fuentes, apoderado, etc.)
para reforzarlas después del contexto de Files.
r'   #c              3  ,   >#    U  H	  oT;   v   M     g 7fr   r   )r   markerlows     r   r   :extract_priority_directives_from_prompt.<locals>.<genexpr>]   s     F/EVS=/Er   u   ^[-*•]\s+   u\   ## Directrices del creador del agente (OBLIGATORIAS — prevalecen sobre brevedad del chat)

c              3  ,   #    U  H
  nS U 3v   M     g7f)z- Nr   )r   bs     r   r   r@   m   s     3lbHls   N(   )r   set
splitlines
startswithr    r!   _PRIORITY_LINE_MARKERSresubr0   addr-   r1   )	r2   r3   seenbulletslinestrippedcleanedkeyr?   s	           @r   'extract_priority_directives_from_promptrS   L   s    
 :2


CUDG ::<8..s33nnF/EFFF&&X6w<"mmo;w !   	h
))3gcrl3
3	4r%   u  
## Formato de entrega en PIE360 (solo esto reemplaza «Salida esperada»)

Estas reglas aplican únicamente a CÓMO se entrega el resultado, no a qué archivos consultar
ni a cómo redactar según las instrucciones del agente.

Ignora instrucciones del prompt sobre:
- presentar informes largos en el chat como entrega final;
- generar archivos .docx/.pdf descargables manualmente;
- crear ZIP o paquetes comprimidos;
- subir a Google Drive o usar herramientas MCP de guardado;
- confirmaciones de guardado con rutas de Drive.

La entrega técnica SIEMPRE es:
1. Consultar las fuentes indicadas en las instrucciones del agente y en ARCHIVOS DE CONTEXTO.
2. Producir el contenido para rellenar la plantilla del documento PIE360 activo.
3. El backend completa la plantilla Word o PDF y guarda el archivo en la base de datos del estudiante.

En el chat: resumen breve de lo analizado, archivos usados y datos faltantes.
No pegues el informe completo en el chat si corresponde generar documento Word.

Generación del archivo Word:
- El backend genera y guarda el .docx SOLO cuando el usuario lo pide explícitamente en su mensaje
  (p. ej. «genera el informe», «elabora el documento»).
- En preguntas, aclaraciones o seguimiento sin esa petición, responde en el chat sin afirmar que el Word fue generado.

Identificación del estudiante:
- Si aún no hay estudiante identificado, pide el RUT o IPE antes de afirmar que el Word fue generado.

Descarga:
- Cuando el backend genere el archivo, el chat mostrará el botón «Descargar archivo generado».
u  
## Relleno del documento Word/PDF (extractor — prioridad máxima)

Genera el texto COMPLETO que se imprimirá en cada campo de la plantilla.
NO resumas. NO uses frases telegráficas. NO te quedes con el resumen breve del chat.

Fuentes (en este orden):
1. Archivos de contexto (Files) — fuente principal y obligatoria cuando existan
2. Mensaje del usuario
3. Respuesta del asistente — solo orientación; si es breve, expande con los archivos

Campos narrativos (p. ej. diagnostic, applied_instruments, pedagogical_field_1,
pedagogical_field_2, social_field_1, social_field_2, collaborative_work, supports,
agreements y campos equivalentes de otros informes):
- Redacta párrafos completos, claros y profesionales según las Normas de redacción del agente.
- Desarrolla fortalezas, necesidades, antecedentes, apoyos y acuerdos con detalle basado en evidencia.
- Cuando haya información en los archivos, escribe al menos 3–8 oraciones por campo narrativo.
- No dejes un campo narrativo en una sola frase corta si los antecedentes lo permiten.

Campos de identificación (nombre, RUT/IPE, curso, establecimiento, edad, fecha de nacimiento, etc.):
- Solo el dato puntual, sin párrafos extensos.

Checkboxes (apoderado titular/suplente, poder simple sí/no, evaluación ingreso/reevaluación):
- Marca solo si hay dato explícito en archivos o mensaje (guardian_type, has_power_of_attorney, evaluation_type).
- Si no hay información verificable, deja el checkbox SIN marcar (cadena vacía o false; no uses «x», «1» ni «sí» por defecto).

Datos del apoderado / receptor y del profesional que entrega el informe:
- Obedece las directrices del creador del agente sobre qué archivo usar (p. ej. REPORTE_INTERACTIVO*.xls).
- Búscalos en ARCHIVOS DE CONTEXTO, DATOS EXTRAÍDOS DE EXCEL y datos de ficha PIE360 del estudiante.
- Si el prompt del agente indica un archivo concreto, priorízalo para apoderado y contacto.
- Si tras revisar esas fuentes no hay dato verificable, deja el campo vacío (no inventes).

Formato:
- Español formal de informes psicopedagógicos ministeriales chilenos.
- Fechas en dd/mm/aaaa cuando corresponda.
- Si no hay datos verificables para un campo, usa cadena vacía.
)r#   strreturnbool)r2   rT   rU   rT   )__doc__
__future__r   rJ   r"   rI   compile	MULTILINEr*   r$   r:   rS   r   CHAT_OUTPUT_OVERRIDEDOCUMENT_FIELD_EXTRACTION_GUIDEr   r%   r   <module>r]      sn    Y " 	  4 **^R\\:L
&4"J> 
EG? D$#H 
EGI  r%   