
    j                        S r SSKJr  SSKrSSKrSSKJr  \" \R                  R                  S5      =(       d    \" \	5      R                  S-  5      r/ SQrSrSS	 jr\S
:X  a  \" 5         gg)aw  
Migration -- agrega columnas a daily_log para soportar el parser de bitacora.

Ejecutar:
    cd 02_HERRAMIENTAS/db
    python migrate_parser_bitacora.py

Idempotente: usa pragma table_info para chequear si la columna existe antes
de intentar el ALTER. Corre varias veces sin efecto secundario.

Columnas agregadas:
  - parse_estado          TEXT   null|pending|proposed|confirmed|skipped|error
  - parse_borrador        TEXT   JSON del borrador que devolvio el parser
  - acciones_derivadas    TEXT   JSON de las filas creadas al confirmar
  - parse_procesado_at    TEXT   ISO timestamp UTC cuando corrio el parser
  - parse_confirmado_at   TEXT   ISO timestamp UTC cuando el usuario confirmo
  - parse_confirmado_por  TEXT   nombre de usuario que confirmo

Rollback: SQLite 3.35+ soporta DROP COLUMN; igualmente recomendado backup
antes de correr cualquier cambio estructural en prod.
    )annotationsN)PathDATABASE_PATHzergon.db))parse_estadoTEXT)parse_borradorr   )acciones_derivadasr   )parse_procesado_atr   )parse_confirmado_atr   )parse_confirmado_porr   )idx_daily_log_parse_estadozZCREATE INDEX IF NOT EXISTS idx_daily_log_parse_estado ON daily_log (obra_id, parse_estado)c                    [         R                  5       (       d  [        S[          35      e[        R                  " [        [         5      5      n U R                  S5         U R                  S5      R                  5        Vs1 s H  oS   iM	     nn[        S[        U5       35        Sn[         HG  u  pEXB;   a  [        SU S35        M  S	U S
U 3nU R                  U5        [        SU 35        US-  nMI     U R                  [        S   5        [        S[        S    35        U R                  5         U R                  S5      R                  5        Vs1 s H  oS   iM	     nn[         VV	s1 s H  u  pUiM	     sn	nU-
  n
U
(       a  [        SU
 35      e[        SU S[        U5       35        [        S5        U R                  5         g s  snf s  snf s  sn	nf ! U R                  5         f = f)Nzergon.db no encontrada en zPRAGMA foreign_keys = ONzPRAGMA table_info(daily_log)   z(  [migrate_parser] columnas existentes: r   z	  [skip] z (ya existe)z!ALTER TABLE daily_log ADD COLUMN  z	  [ok]   z-  [ERROR] columnas faltantes tras migracion: z  [migrate_parser] agregadas z columnas. Total: z  [migrate_parser] OK)DB_PATHexists
SystemExitsqlite3connectstrexecutefetchallprintsortedNEW_COLUMNS	NEW_INDEXcommitlenclose)connrowcols_existentes	agregadascol_namecol_typesqlcols_finalesc_	faltantess              "/app/db/migrate_parser_bitacora.pymainr,   .   s   >>5gY?@@??3w<(DLL+,<<(FGPPRTR '*q6R 	 T89P8QRS	"-H*	(<895hZq
KCLLIcU#$NI #. 	Yq\"	)A,() %CDMMOQO $'AO 	 Q#./;41Q;/,>	LYKXYY-i[8J3|K\J]^_%&

;T*Q/ 	

s8   !!G# GC
G# G(G# 3GAG# G# #G5__main__)returnNone)__doc__
__future__r   osr   pathlibr   environget__file__parentr   r   r   r,   __name__     r+   <module>r;      sk   * # 	  
rzz~~o.V4>3H3H:3U
W	$N zF r:   