
    :*ha                         d dl mZ d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
 d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dlZd Zd	 Zd
 Zd Zd Zd Zd Z y)    )OpenAIN)Pinecone)datetime	timedelta)
BlobClient)Error)load_dotenvc                      t         j                  } 	 t        j                  j                  di | }|j                         r|S y # t        j                  j                  $ r}t        d|        Y d }~y d }~ww xY wNzError:  )
conexionesconfigmysql	connectorconnectis_connectedr   print)r   
connectionerrs      B/var/www/catia.catastroantioquia-mas.com/valormas/asistente_n8n.pyconectar_dbr      si    F__,,6v6
""$??   uo   0A A9!A44A9c                      t         j                  } 	 t        j                  j                  di | }|j                         r|S y # t        j                  j                  $ r}t        d|        Y d }~y d }~ww xY wr   )r   config3r   r   r   r   r   r   )r   r   r   s      r   conectar_db3r   '   si      G__,,7w7
""$??   uor   c                    | dk(  ry	 t               }||j                         sdddS |j                  d      }	 |j                         r!|j	                          |j                         r!|j                  d| f       |j                         }|s&dd	| d
|j                          |j                          S |d   }|j                          |j                          t               }||j                         sdddS |j                  d      }	 |j                         r!|j	                          |j                         r!|j                  d|f       |j                         }|s%ddd|j                          |j                          S |d   }|j                         r!|j	                          |j                         r!|j                  d|f       |j	                         }	|	r@t        dt        |	       d| d       d|	d|j                          |j                          S t        d| d       ddd|j                          |j                          S # |j                          |j                          w xY w# |j                          |j                          w xY w# t        $ r }
t        d|
        dd|
 dcY d }
~
S d }
~
ww xY w)Nnoy   No se puede entregar la información porque el usuario no está logiado. Debe iniciar sesión para consultar sus predios.error1No se pudo conectar a la base de datos principal.statusmessageT
dictionaryw
                SELECT `num_doc_ident`
                FROM `ciudadanos`
                WHERE `id` = %s;
            uX   La persona no se encuentra registrada. No se puede proporcionar información de predios.r"   r#   	idclientenum_doc_ident6No se pudo conectar a la base de datos de propiedades.zv
                SELECT `FICHA`
                FROM `registro_1`
                WHERE `DOCUMENTO` = %s;
            zLNo se encontraron registros en 'registro_1' para el documento proporcionado.FICHAu  
                SELECT 
                    my_row_id, TOTAL_REGISTROS, NRO_ORDEN, COD_MUNICIPIO, MNCPIO_NOMBRE, NPN, SECTOR, CORREGIMIENTO, 
                    BARRIO, MNZVER, TERRENO, NRO_CONS, FICHA, CIRULO, MATRICULA, DIRECCION, NUMERO, PUNTOS, PISOS, 
                    COCINAS, HABITACIONES, LOCALES, BAÑOS, TIP_CONST, IDUSO, VR_IDNUSO_NOMBRE, TIP_NOMBRE, EDAD, 
                    PORC_CONS, UNDPRD_COEFICIENTE, TERRENO_HA, AREA_CONSTRM2, AREA_CONSTR_TOTAL_M2, VALOR_CONSTR, 
                    AVALUO_CONSTR_TOTAL, AVALUO_TERRENO, AVALUO_TOTAL, VIGENCIA, CEDCATAS, CARACTERISTICA, TIPO_PREDIO, 
                    SECTOR2
                FROM `registro_2`
                WHERE `FICHA` = %s;
               ✅ Se encontraron z predios asociados a la ficha .successr"   datau6   ⚠️ No se encontraron predios asociados a la ficha z5No se encontraron predios con la ficha proporcionada.u,   ❌ Error general al consultar los predios: ,   Ocurrió un error al consultar los predios: )r   r   cursornextsetfetchallexecutefetchonecloser   r   len	Exception)r(   r   r2   cliente	documentoconnection2cursor2	registro1fichapredioses              r   predios_de_propietariorB   4   s   D KYb ]
Z%<%<%>%2eff""d"3	.."! .." NN  	
 oo'G%y!* LLN  0ILLN #nk&>&>&@%2jkk$$$5/	 //#  " //# OO  	
  ((*I%mB MMO; g&E //#  " //# OO 
 
 &&(G+CL>9WX]W^^_`a"+W= MMO NugUVWX")6mn MMOq LLNl MMO b<QC@A!0\]^\_.`aabs    J% J% 0I -*I  J% 8I =A J% >J% 0J  )J  + J% 5J  AJ   J% 'J  : J% "I==J%  "J""J% %	K.K	K	Kc                 ^   	 t        |       }|dk(  rdddS 	 	 t               }||j	                         sdddS |j                  d      }	 |j                         r!|j                          |j                         r!|j                  d| f       |j                         }|s&dd	| d
|j                          |j                          S |d   }|j                          |j                          t        d|z          	 t        |      }|dk(  rdddS 	 t               }||j	                         sdddS |j                  d      }	 |j                         r!|j                          |j                         r!|j                  d|f       |j                         }	|	r4t        d| d       d|	d|j                          |j                          S t        d| d       ddd|j                          |j                          S # t        t        f$ r dddcY S w xY w# |j                          |j                          w xY w# t        t        f$ r dddcY S w xY w# |j                          |j                          w xY w# t        $ r }
t        d|
        dd|
 dcY d }
~
S d }
~
ww xY w)Nr   r   r   r!   r    Tr$   r&   z&La persona no se encuentra registrada.r'   r)   zel documento es;   ⚠️ El usuario no tiene un documento válido registrado.Error en el documento.r*   a+  
            SELECT 
              r1.DOCUMENTO,
            
              (SELECT COUNT(DISTINCT r1_sub.FICHA)
               FROM registro_1 r1_sub
               WHERE r1_sub.DOCUMENTO = r1.DOCUMENTO
              ) AS total_predios,
            
              (SELECT SUM(r2_sub.AVALUO_TOTAL)
               FROM registro_1 r1_sub
               JOIN registro_2 r2_sub ON r1_sub.FICHA = r2_sub.FICHA
               WHERE r1_sub.DOCUMENTO = r1.DOCUMENTO
              ) AS avaluo_total,
            
              (SELECT SUM(r2_sub.TERRENO_HA * 10000)
               FROM registro_1 r1_sub
               JOIN registro_2 r2_sub ON r1_sub.FICHA = r2_sub.FICHA
               WHERE r1_sub.DOCUMENTO = r1.DOCUMENTO
              ) AS area_total_terreno_m2,
            
              (SELECT SUM(r2_sub.AREA_CONSTR_TOTAL_M2)
               FROM registro_1 r1_sub
               JOIN registro_2 r2_sub ON r1_sub.FICHA = r2_sub.FICHA
               WHERE r1_sub.DOCUMENTO = r1.DOCUMENTO
              ) AS area_total_construida_m2,
            
              (SELECT 
                 SUM(r2_sub.AVALUO_TOTAL) / NULLIF(SUM(r2_sub.AREA_CONSTR_TOTAL_M2), 0)
               FROM registro_1 r1_sub
               JOIN registro_2 r2_sub ON r1_sub.FICHA = r2_sub.FICHA
               WHERE r1_sub.DOCUMENTO = r1.DOCUMENTO
              ) AS valor_promedio_m2,
            
              (
                SELECT JSON_ARRAYAGG(
                  JSON_OBJECT(
                    'ficha', r1_det.FICHA,
                    'direccion', r1_det.DIRECCION,
                    'municipio', r1_det.MNCPIO_NOMBRE,
                    'barrio', r2_det.BARRIO,
                    'sector', r2_det.SECTOR,
                    'avaluo_total', r2_det.AVALUO_TOTAL,
                    'area_terreno_m2', r2_det.TERRENO_M2,
                    'area_construida_m2', r2_det.AREA_CONSTR_TOTAL_M2,
                    'valor_m2', IFNULL(r2_det.AVALUO_TOTAL / NULLIF(r2_det.AREA_CONSTR_TOTAL_M2, 0), 0)
                  )
                )
                FROM (
                  SELECT DISTINCT FICHA, DIRECCION, MNCPIO_NOMBRE, DOCUMENTO
                  FROM registro_1
                  WHERE DOCUMENTO = r1.DOCUMENTO
                ) AS r1_det
                JOIN (
                  SELECT 
                    FICHA,
                    MAX(BARRIO) AS BARRIO,
                    MAX(SECTOR) AS SECTOR,
                    SUM(AVALUO_TOTAL) AS AVALUO_TOTAL,
                    SUM(TERRENO_HA) * 10000 AS TERRENO_M2,
                    SUM(AREA_CONSTR_TOTAL_M2) AS AREA_CONSTR_TOTAL_M2
                  FROM registro_2
                  GROUP BY FICHA
                ) r2_det ON r1_det.FICHA = r2_det.FICHA
              ) AS detalle_predios
            
            FROM registro_1 r1
            WHERE r1.DOCUMENTO = %s
            LIMIT 1;
                        u6   ✅ Se encontró información detallada del documento r-   r.   r/   8   ⚠️ No se encontraron predios asociados al documento ?No se encontraron predios asociados al documento proporcionado./   ❌ Error general al consultar detalle_predio: 6   Ocurrió un error al consultar el detalle del predio: )int
ValueError	TypeErrorr   r   r2   r3   r4   r5   r6   r7   r   r   r9   )r(   id_numr   r2   r:   r;   docur<   r=   	resultadorA   s              r   detalle_prediorP      s   jYQ;%  2m  n  n 
Gl ]
Z%<%<%>%2eff""d"3	.."! .." NN  	
 oo'G%G!* LLN  0ILLN	)*	Ky>Dqy")5rss  #nk&>&>&@%2jkk$$$5V	 //#  " //# OO EJ (\KE+L  ((*INykYZ[\"+Y? MMO PQZP[[\]^")6wx MMOM 	" j!  .i  j  	jj< LLN I& 	K%1IJJ	K| MMO l?sCD!0fghfi.jkkls   H  J J 0H >*H ( J 	H .J =I !J 4J 0I 88I 0 J I $ J HH"IJ IJ IJ "J  J 	J,J'!J,'J,c                 <	   | dk(  ryd }d }d }d }	 t               }||j                         s;ddd|r|j                          |r"|j                         r|j                          S S S |j                  d      }|j	                         r!|j                          |j	                         r!|j                  d| f       |j                         }|s;dd	d|r|j                          |r"|j                         r|j                          S S S |d
   }|j                          |j                          t               }||j                         s;ddd|r|j                          |r"|j                         r|j                          S S S |j                  d      }|j	                         r!|j                          |j	                         r!|j                  d|f       |j                         }|s;ddd|r|j                          |r"|j                         r|j                          S S S d}|D ]J  }	|	d   }
|j	                         r!|j                          |j	                         r!|j                  d|
f       |j                         }|r|d|
 dz  }|D ]  }|j                  dd       d|j                  dd       d|j                  dd       d|j                  dd       j                         }|r|n|j                  dd      }|d|d    d|d    d|d    d|d     d!|d"    d#| d$|j                  d%d       d&|j                  d'd       d(|j                  d)d       d*z  } B|d+|
 d,z  }M |j                         dk(  r;dd-d|r|j                          |r"|j                         r|j                          S S S |j                         |r|j                          |r"|j                         r|j                          S S S # t        $ rH}dd.| dcY d }~|r|j                          |r"|j                         r|j                          S S S d }~ww xY w# |r|j                          |r"|j                         r|j                          w w w xY w)/Nr   r   r   r    r!   Tr$   za
            SELECT num_doc_ident
            FROM ciudadanos
            WHERE id = %s;
        u!   El ciudadano no está registrado.r)   r*   z`
            SELECT FICHA
            FROM registro_1
            WHERE DOCUMENTO = %s;
        z:No se encontraron fichas prediales asociadas al ciudadano. r+   a  
                SELECT 
                    r2.FICHA,
                    r2.MATRICULA,
                    r2.DIRECCION,
                    r2.AREA_CONSTR_TOTAL_M2,
                    r2.AVALUO_TERRENO,
                    r1.NOMBRE1,
                    r1.NOMBRE2,
                    r1.APELLIDO1,
                    r1.APELLIDO2,
                    r1.RAZON_SOCIAL,
                    r1.PORC_DERECHO,
                    r1.MODO_ADQUISICION,
                    r1.FECHA_REGISTRO
                FROM 
                    registro_2 r2
                INNER JOIN 
                    registro_1 r1 ON r2.NPN = r1.NPN
                WHERE 
                    r2.FICHA = %s;
            u&   
📌 Propietarios para ficha predial z:

NOMBRE1 NOMBRE2	APELLIDO1	APELLIDO2RAZON_SOCIALzN/Au   🧾 Ficha: u   
📜 Matrícula: 	MATRICULAu   
📍 Dirección: 	DIRECCIONu$   
📐 Área construida total (m²): AREA_CONSTR_TOTAL_M2u   
🌍 Avalúo terreno: AVALUO_TERRENOu   
👤 Propietario: u   
🔢 Porcentaje derecho: PORC_DERECHOu   
📝 Modo de adquisición: MODO_ADQUISICIONu   
📅 Fecha de registro: FECHA_REGISTROz.
--------------------------------------------
u5   
⚠️ No se encontraron propietarios para la ficha z.
zINo se encontraron datos de propietarios para ninguna ficha del ciudadano.u1   Ocurrió un error al consultar los propietarios: )r   r   r7   r2   r3   r4   r5   r6   r   getstripr9   )r(   r   r<   r2   r=   r:   r;   fichasrO   	ficha_rowr?   propietariospnombre_completonombre_finalrA   s                   r   propietarios_del_prediorh   '  s   D KJKFGn  ]
Z%<%<%>%2efN MMO;335 6;O ""d"3nnOO nn 	  \		
 //#%2UVr MMO;335 6;s O,	 #nk&>&>&@%2jk` MMO;335 6;a $$$5oo oo 	  \		
 !!#%2noD MMO;335 6;E 	 4	aIg&E//#  " //# OO * +, #++-LFugUSS	% A55B/0!%%	22F1Gq55b12!AEE+r4J3KMMRUW $ 7F?155Q_afKgL&qzl 3,,-kN+; <,,-kN+; <>>?@V>W=X Y1123C1D0E F--9N ;445EE.%4P3Q R667ee<NPU6V5W X334559I53Q2R SI	II& UV[U\\_``	i4	al ??"%2}~ MMO;335 6;   MMO;335 6;  g!0abcad.eff MMO;335 6;g MMO;335 6;sc    P 'AP *)P 
AP AP 	)P )=P 'D+P 	P 	Q QQ  Q# Q  Q# #8Rc                    	 t        d|  d|        	 t        |       }|dk(  rdddS 	 |dvrdd	dS t	               }||j                         sdd
dS |j                  dd      }	 |j                  d| f       |j                         }|s4t        d|  d       ddd|j                          |j                          S t        dt        |       d|  d       |dk(  r%d|d|j                          |j                          S |dk(  rg }|D ]  }|j                  d      }|j                  d      }	|r_|	r]|j                  d||	f       |j                         }
||
r|
ng d}|j                  |       t        d| d|	 dt        |
       d       |j                  |g d       t        d        t        d t        |       d!       d|t        |      d"|j                          |j                          S 	 |j                          |j                          y # t        t        f$ r dddcY S w xY w# |j                          |j                          w xY w# t        $ r }t        d#|        dd$| dcY d }~S d }~ww xY w)%Nu   📋 Documento: z | Tipo consulta: r   r   rD   r!   rE   )simple	combinadaz4El tipo de consulta debe ser 'simple' o 'combinada'.r*   Tr%   bufferedzP
                SELECT * FROM registro_1 r WHERE r.DOCUMENTO = %s;
            rF   r-   rG   r,   z predios para el documento rj   r.   r/   rk   r+   NPNz
                            SELECT * 
                            FROM registro_2 r 
                            WHERE r.FICHA = %s AND r.NPN = %s;
                        )prediodetallesu$     ✓ Detalles obtenidos para FICHA=, NPN=z: z
 registrosu(     ⚠️ Predio sin FICHA o NPN válidosu#   ✅ Consulta combinada completada: z predios con detalles.)r"   r0   total_prediosu,   ❌ Error general al consultar all_predios: r1   )r   rJ   rK   rL   r   r   r2   r5   r4   r7   r8   r`   appendr9   )r;   tipo_consultarN   r<   r=   r@   predios_con_detallesro   r?   npnrp   predio_completorA   s                r   all_prediosrx     s   Vb +=m_MN	Ky>Dqy")5rss   77%2hii #nk&>&>&@%2jkk$$t$D=	 OO  &&(GPQZP[[\]^")6wxd MMOc 'G~5PQZP[[\]^ ("+W=X MMOU +')$% KF"JJw/E **U+C ) $S\	+ $+#3#3#5 '-4<"+ -33OD DUG6RUQVVXY\]eYfXggqrs -33&,(*5   HJ9K< ;C@T<U;VVlmn'0%()=%> MMOU ,R MMOU I& 	K%1IJJ	KR MMO b<QC@A!0\]^\_.`aabs   I H 	I  I I (8H9   I $H9 % I CH9  I > I H63I 5H66I 9"II 	J'J<JJc                 8   	 t               }||j                         sdddS |j                  dd      }	 |j                  d| |f       |j	                         }|r7t        d|  d	| d
       d|d|j                          |j                          S t        d|  d	| d
       ddd|j                          |j                          S # |j                          |j                          w xY w# t        $ r }t        d|        dd| dcY d}~S d}~ww xY w)up   
    Consulta detalles de un predio específico.
    Esta función se mantiene para consultas individuales.
    Nr   r*   r!   Trl   z}
                SELECT * 
                FROM registro_2 r 
                WHERE r.FICHA = %s AND r.NPN = %s;
            u*   ✅ Se encontró detalle del predio FICHA=rq   r-   r.   r/   u*   ⚠️ No se encontró detalle para FICHA=uI   No se encontraron detalles del predio con los parámetros proporcionados.rH   rI   )r   r   r2   r5   r4   r   r7   r9   )r?   rv   r<   r=   rO   rA   s         r   detalles_prediosrz   H  s=   
l"nk&>&>&@%2jkk$$t$D	 OO  	  ((*IB5'PSuTUVW"+Y? MMO B5'PSuTUVW")  7B  C MMO MMO l?sCD!0fghfi.jkklsE    C0 C0 <C 3 C0 C * C0 "C--C0 0	D9DDD)!openair   jsontimerepineconer   r   r   azure.storage.blobr   base64astr   
a_env_varsmysql.connectorr   r   sysrequests	tracebackrandomtiktokendotenvr	   osr   r   rB   rP   rh   rx   rz   r       r   <module>r      sv        	  ( )  
     ! 
      	]b@Olfw NWbt!lr   