§
    t�’j[  ã                  ól   — d dl mZ d dlZd dlmZ d dlmZ  ej        d¦  «        Z G d„ d¦  «        Z	dS )é    )ÚannotationsN)ÚDecimal)ÚAnyzdscons.autonomous.projectsc                  ó   — e Zd ZdZdd„ZdS )	ÚHealProjectsMixinzKSelf-healing routines for project EVM metrics and financial recalculations.Ú
session_idÚstrÚreturnúdict[str, Any]c              ƒ  ój  K  — t                                d¦  «         d}d}g }	 | j                             ¦   «         5 }|                     ¦   «         5 }|                     d¦  «         |                     ¦   «         }ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   t          |¦  «        }|D �] }t          |d         ¦  «        }	| j                             ¦   «         5 }|                     ¦   «         5 }|                     d|	f¦  «         | 	                    ¦   «         }
ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |
�r}t          t          |
                     d¦  «        pd¦  «        ¦  «        }t          t          |
                     d¦  «        pd¦  «        ¦  «        }t          t          |
                     d	¦  «        pd¦  «        ¦  «        }|dk    rä|dk    rÞt          ||z  d
¦  «        }t          ||z  d
¦  «        }|t          d¦  «        k     rI|                     dddt          |
d         ¦  «        d|                     d¦  «        › d|d›d�dœ¦  «         |t          d¦  «        k     rI|                     dddt          |
d         ¦  «        d|                     d¦  «        › d|d›d�dœ¦  «         �Œ"nO# t          $ rB}t                                d|¦  «         |                     dddd|› �dœ¦  «         Y d}~nd}~ww xY wdd|||d œS )!un   Tá»± chuáº©n hÃ³a báº£ng projects & EVM: TÃ­nh toÃ¡n láº¡i CPI/SPI, phÃ¡t hiá»‡n Ä‘Æ°á»�ng gÄƒng cháº­m trá»….uS   [AUTONOMOUS] AI Quá»³nh & PhÃºc báº¯t Ä‘áº§u quÃ©t phÃ¢n há»‡ Dá»± Ã�n & WBS/EVM...r   zö
                        SELECT id, project_code, project_name, contract_value, status, progress_percent
                        FROM projects
                        ORDER BY created_at DESC
                        LIMIT 50;
                    NÚidaD  
                            SELECT id, planned_value_pv, earned_value_ev, actual_cost_ac, cpi, spi
                            FROM erp_project_evm_snapshots
                            WHERE project_id = %s
                            ORDER BY period_date DESC
                            LIMIT 1;
                        Úplanned_value_pvÚearned_value_evÚactual_cost_acé   z0.9000ÚquynhÚwarningÚerp_project_evm_snapshotsu
   Dá»± Ã¡n [Úproject_codeu   ] vÆ°á»£t chi phÃ­ (CPI = z.3fz	 < 0.90).)ÚagentÚseverityÚtableÚ	record_idÚmessagez0.8500Úphucu-   ] cháº­m tiáº¿n Ä‘á»™ nghiÃªm trá»�ng (SPI = z	 < 0.85).u/   [AUTONOMOUS] Lá»—i heal_projects_evm_module: %sÚerrorÚprojectsu   Lá»—i quÃ©t EVM dá»± Ã¡n: )r   r   r   r   Ú
quynh_phucÚprojects_evm)r   ÚmoduleÚscannedÚhealedÚfindings)ÚloggerÚinfoÚ_erp_clientÚget_connectionÚcursorÚexecuteÚfetchallÚlenr	   Úfetchoner   ÚgetÚroundÚappendÚ	Exceptionr   )Úselfr   r!   r"   r#   ÚconnÚcurr   ÚprojÚproj_idÚevmÚpvÚevÚacÚcalc_cpiÚcalc_spiÚexcs                    úBC:\Projects\DSCons\app\services\autonomous_engine\heal_projects.pyÚheal_projects_evm_modulez*HealProjectsMixin.heal_projects_evm_module   s»  è è € å�ŠØañ	
ô 	
ð 	
ð ˆØˆØ)+ˆðF	ØÔ!×0Ò0Ñ2Ô2ð .°dØ—[’[‘]”]ð . cØ—K’Kð !ñ ô ð ð  #Ÿ|š|™~œ~�Hð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .õ ˜(‘m”mˆGØ ð /ñ /�Ý˜d 4œj™/œ/�ð Ô%×4Ò4Ñ6Ô6ð -¸$ØŸš™œð -¨#ØŸšðð %˜Jñ	ô 	ð 	ð "Ÿlšl™nœn˜ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð ñ Ý ¥ S§W¢WÐ-?Ñ%@Ô%@Ð%EÀAÑ!FÔ!FÑGÔG�BÝ ¥ S§W¢WÐ->Ñ%?Ô%?Ð%DÀ1Ñ!EÔ!EÑFÔF�BÝ ¥ S§W¢WÐ-=Ñ%>Ô%>Ð%CÀ!Ñ!DÔ!DÑEÔE�Bà˜A’v�v " q¢& &Ý#(¨¨b©°!Ñ#4Ô#4˜Ý#(¨¨b©°!Ñ#4Ô#4˜à#¥g¨hÑ&7Ô&7Ò7Ð7Ø$ŸOšOà-4Ø09Ø-HÝ14°S¸´Y±´ð 0H¸D¿HºHÀ^Ñ<TÔ<Tð  0Hð  0HÐpxð  0Hð  0Hð  0Hð  0Hð!"ð !"ñô ð ð $¥g¨hÑ&7Ô&7Ò7Ð7Ø$ŸOšOà-3Ø09Ø-HÝ14°S¸´Y±´ð 0[¸D¿HºHÀ^Ñ<TÔ<Tð  0[ð  0[ð  DLð  0[ð  0[ð  0[ð  0[ð!"ð !"ñô ð ùðO/øõb ð 		ð 		ð 		Ý�LŠLÐJÈCÑPÔPÐPØ�OŠOà$Ø 'Ø'ØA¸CÐAÐAð	ð ñô ð ð ð ð ð ð øøøøð		øøøð "Ø$ØØØ ð
ð 
ð 	
s¨   ¤K ½BÁ*BÁ<BÂB	ÂBÂB	ÂBÂK ÂB#Â#K Â&B#Â'AK Ã,EÄ,D9Ä-EÄ9D=Ä=EÅ D=ÅEÅK ÅE	ÅK ÅE	ÅFK Ë
L*Ë(8L%Ì%L*N)r   r	   r
   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r>   © ó    r=   r   r   
   s4   € € € € € ØUÐUðW
ð W
ð W
ð W
ð W
ð W
rD   r   )
Ú
__future__r   ÚloggingÚdecimalr   Útypingr   Ú	getLoggerr$   r   rC   rD   r=   ú<module>rJ      s“   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à	ˆÔ	Ð7Ñ	8Ô	8€ðZ
ð Z
ð Z
ð Z
ð Z
ñ Z
ô Z
ð Z
ð Z
ð Z
rD   