+
    :maix'                     2    R t ^ RIHt ^ RIt ! R R4      tR# )u   
Módulo de consultas SQL para Reglas Globales (RulesGlobal).

Este módulo maneja todas las consultas relacionadas con:
- Obtención de reglas por módulo
- Obtención de reglas específicas por código
- Validación de existencia de reglas
)get_connectionNc                   d   a  ] tR t^t o Rt]R 4       t]R 4       t]R 4       t]R 4       t	Rt
V tR# )RulesGlobalSQLu   
Clase que contiene todas las consultas SQL para el módulo de Reglas Globales.
Todos los métodos son estáticos para facilitar su uso sin necesidad de instanciar la clase.
c                    \        4       pVP                  4       pRpVP                  W034       VP                  4       pVP	                  4        VP	                  4        . pV Fw  pVP                  RV^ ,          RV^,          RV^,          RV^,          RV^,          RV^,          RV^,          R	V^,          R
V^,          RV^	,          RV^
,          /4       Ky  	  RRRVRR/#   \        P                   d   pRRR. RR\        T4       2/u Rp?# Rp?i\         d   pRRR. RR\        T4       2/u Rp?# Rp?ii ; i)u*  
Obtiene todas las reglas activas de un módulo específico.

Args:
    module_id (str): ID del módulo (ej: 'FR_FlightRequest')
    
Returns:
    dict: {
        'success': bool,
        'reglas': list de dict con las reglas (si existe),
        'error': str con mensaje de error (si falla)
    }
a  
                SELECT 
                    RuleCode,
                    ModuleID,
                    RuleName,
                    RuleDescription,
                    ComparisonOperator,
                    ValueType,
                    RuleValue,
                    RuleValue2,
                    RuleUnit,
                    MessageIfViolated,
                    IsActive
                FROM RulesGlobal
                WHERE ModuleID = ?
                  AND IsActive = 1
                ORDER BY RuleCode
            RuleCodeModuleIDRuleNameRuleDescriptionComparisonOperator	ValueType	RuleValue
RuleValue2RuleUnitMessageIfViolatedIsActivesuccessTreglaserrorNFu%   Error al obtener reglas del módulo: Error inesperado: )
r   cursorexecutefetchallcloseappendpyodbcErrorstr	Exception)	module_idconnr   query
resultadosr   rowes   &       Tc:\Users\victor.cervantes\Desktop\Elep\src\Consultas_SQL\Utilities\RulesGlobalSQL.pyobtener_reglas_por_modulo(RulesGlobalSQL.obtener_reglas_por_modulo   sZ   ?	!#D[[]FE& NN5,/*JLLNJJL F!AAA%s1v(#a&QQ #a&A'QB  "  4&  || 	5"@QI 
  	5"-c!fX6 	s6   C$C' 'E<DEE"E#D<6E<Ec                x    \        4       pVP                  4       pRpVP                  W034       VP                  4       pVP	                  4        VP	                  4        V'       dl   RRRRV^ ,          RV^,          RV^,          RV^,          R	V^,          R
V^,          RV^,          RV^,          RV^,          RV^	,          RV^
,          /RR/# RRRRRRV  R2/#   \
        P                   d   pRRRRRR\        T4       2/u Rp?# Rp?i\         d   pRRRRRR\        T4       2/u Rp?# Rp?ii ; i)u  
Obtiene una regla específica por su código.

Args:
    rule_code (str): Código de la regla (ej: 'KM_MIN')
    
Returns:
    dict: {
        'success': bool,
        'regla': dict con información de la regla (si existe),
        'error': str con mensaje de error (si falla)
    }
a  
                SELECT 
                    RuleCode,
                    ModuleID,
                    RuleName,
                    RuleDescription,
                    ComparisonOperator,
                    ValueType,
                    RuleValue,
                    RuleValue2,
                    RuleUnit,
                    MessageIfViolated,
                    IsActive
                FROM RulesGlobal
                WHERE RuleCode = ?
                  AND IsActive = 1
            r   Treglar   r   r   r	   r
   r   r   r   r   r   r   r   NFzRegla "z" no encontrada o inactivazError al obtener regla: r   	r   r   r   fetchoner   r   r   r   r   )	rule_coder   r   r    	resultador#   s   &     r$   obtener_regla_por_codigo'RulesGlobalSQL.obtener_regla_por_codigoi   sd   @	!#D[[]FE$ NN5,/)ILLNJJLt"IaL"IaL"IaL)9Q<,il#Yq\#Yq\$il"IaL+Yq\"IbM T & uTwyk1KL  || 	53CF8< 
  	5-c!fX6 	s<   CC C D94DD9D9D9D4.D94D9c           
         \        4       pVP                  4       pRpVP                  W034       VP                  4       pVP	                  4        VP	                  4        V^ ,          ^ 8  pRRRVRR/#   \
        P                   d   pRRRRRR\        T4       2/u Rp?# Rp?i\         d   pRRRRRR	\        T4       2/u Rp?# Rp?ii ; i)
u   
Verifica si una regla existe y está activa.

Args:
    rule_code (str): Código de la regla
    
Returns:
    dict: {
        'success': bool,
        'existe': bool,
        'error': str (si falla)
    }
z
                SELECT COUNT(*) AS Total
                FROM RulesGlobal
                WHERE RuleCode = ?
                  AND IsActive = 1
            r   Texister   NFz(Error al verificar existencia de regla: r   r)   )r+   r   r   r    r,   r0   r#   s   &      r$   verificar_existencia_regla)RulesGlobalSQL.verificar_existencia_regla   s    $	!#D[[]FE NN5,/)ILLNJJLq\A%F 4&  || 	5%CCF8L 
  	5%-c!fX6 	s6   A1A4 4C	B"C"C/C0C	C	Cc                     \        4       p V P                  4       pRpVP                  V4       VP                  4       pVP	                  4        V P	                  4        . pV Fw  pVP                  RV^ ,          RV^,          RV^,          RV^,          RV^,          RV^,          RV^,          R	V^,          R
V^,          RV^	,          RV^
,          /4       Ky  	  RRRVR\        V4      RR/#   \        P                   d!   pRRR. R^ RR\        T4       2/u Rp?# Rp?i\         d!   pRRR. R^ RR\        T4       2/u Rp?# Rp?ii ; i)u
  
Obtiene todas las reglas activas del sistema.
Útil para debugging o administración.

Returns:
    dict: {
        'success': bool,
        'reglas': list de dict con todas las reglas,
        'total': int cantidad de reglas,
        'error': str (si falla)
    }
a  
                SELECT 
                    RuleCode,
                    ModuleID,
                    RuleName,
                    RuleDescription,
                    ComparisonOperator,
                    ValueType,
                    RuleValue,
                    RuleValue2,
                    RuleUnit,
                    MessageIfViolated,
                    IsActive
                FROM RulesGlobal
                WHERE IsActive = 1
                ORDER BY ModuleID, RuleCode
            r   r   r   r	   r
   r   r   r   r   r   r   r   Tr   totalr   NFzError al obtener reglas: r   )r   r   r   r   r   r   lenr   r   r   r   )r   r   r    r!   r   r"   r#   s          r$   obtener_todas_reglas_activas+RulesGlobalSQL.obtener_todas_reglas_activas   sj   @	!#D[[]FE$ NN5!*JLLNJJLF!AAA%s1v(#a&QQ #a&A'QB  "  4&V	  || 	5"4SVH=	   	5"-c!fX6	 	s6   C.C1 1ED!E!E.E/E
E
E N)__name__
__module____qualname____firstlineno____doc__staticmethodr%   r-   r1   r6   __static_attributes____classdictcell__)__classdict__s   @r$   r   r      sc     
 M M^ N N` 2 2h M M    r   )r=   Consultas_SQL.conexionr   r   r   r8   rB   r$   <module>rD      s    2 j jrB   