§
    ÔŸ’j@  ã                  ó|   — d dl mZ d dlZd dlmZ d dlmZ ddlmZm	Z	  ej
        d¦  «        Z G d„ d	¦  «        ZdS )
é    )ÚannotationsN)ÚAny)ÚErpDatabaseClienté   )ÚQSDrillScorecardÚTakeoffItemEvaluationz#dscons.takeoff_training.synthesizerc                  óv   — e Zd ZdZe	 ddd	„¦   «         Zedd„¦   «         Zedd„¦   «         Zedd„¦   «         Z	dS )ÚQSRuleSynthesizeruo   Tá»± Ä‘á»™ng trÃ­ch xuáº¥t bÃ i há»�c kinh nghiá»‡m (Learned Rules) tá»« sai sá»‘ bÃ³c tÃ¡ch vÃ  náº¡p vÃ o DB.NÚ	scorecardr   Ú	db_clientúErpDatabaseClient | NoneÚreturnúlist[dict[str, Any]]c                ó  — |pt          ¦   «         }g }d„ |j        D ¦   «         }|dd…         D �]]}|                      |j        ¦  «        }|                      |j        |j        ¦  «        }d|j        › d|j        › d|j        › d�}	|                      |¦  «        }
d|j	        › d	|j        dd
…         › �|||	|
d|j	        ddœ}	 | 
                    |d         |d         |d         |d         |d         |d         |d         d¬¦  «        }|                     |p|¦  «         t                               d|d         ¦  «         �Œ# t          $ r;}t                               d|¦  «         |                     |¦  «         Y d}~�ŒWd}~ww xY w|S )ub   PhÃ¢n tÃ­ch cÃ¡c lá»—i sai sá»‘ vÃ  tá»± Ä‘á»™ng sinh quy táº¯c rÃºt kinh nghiá»‡m cho AI Quá»³nh.c                ó$   — g | ]}|j         d v ¯|‘ŒS ))ÚMAJOR_DEVIATIONÚMISSED)Úmatch_status)Ú.0Úitems     úWC:\Projects\DSCons\app\modules\takeoff\application\takeoff_training\rule_synthesizer.pyú
<listcomp>z?QSRuleSynthesizer.synthesize_and_save_rules.<locals>.<listcomp>   s1   € ð 
ð 
ð 
àØÔ Ð$AÐAÐAð àAÐAÐAó    Né   u   BÃ³c tÃ¡ch cÃ´ng tÃ¡c 'u	   ' (Ä�VT: u   ) bá»‹ sai lá»‡ch u   % so vá»›i chuáº©n Ká»¹ sÆ°.u   Tá»± Há»�c [u   ]: Hiá»‡u chá»‰nh bÃ³c é(   gffffffî?ÚAPPROVED)Ú
rule_titleÚdrawing_typeÚrule_categoryÚtrigger_patternÚcorrection_directiveÚconfidence_scoreÚlearned_from_project_idÚstatusr   r   r   r    r!   r"   r#   z+[QS_SYNTHESIZER] Saved new learned rule: %sz'[QS_SYNTHESIZER] Failed saving rule: %s)r   Úevaluated_itemsÚ_infer_categoryÚ	task_nameÚ_infer_drawing_typeÚproject_nameÚunitÚdeviation_pctÚ_generate_correction_directiveÚproject_codeÚsave_learned_ruleÚappendÚloggerÚinfoÚ	ExceptionÚwarning)Úclsr   r   ÚclientÚsynthesizedÚmajor_errorsÚerrÚcategoryr   ÚtriggerÚ	directiveÚrule_payloadÚsavedÚexcs                 r   Úsynthesize_and_save_rulesz+QSRuleSynthesizer.synthesize_and_save_rules   s)  € ð Ð1Õ/Ñ1Ô1ˆØ,.ˆð
ð 
à!Ô1ð
ñ 
ô 
ˆð     Ô#ð %	1ñ %	1ˆCØ×*Ò*¨3¬=Ñ9Ô9ˆHØ×2Ò2Ø”˜yÔ5ñô ˆLð T°´ð  Tð  TÈÌð  Tð  TÐdgÔduð  Tð  Tð  TˆGØ×:Ò:¸3Ñ?Ô?ˆIð q¨YÔ-CÐpÐpÐ\_Ô\iÐjmÐkmÐjmÔ\nÐpÐpØ ,Ø!)Ø#*Ø(1Ø$(Ø+4Ô+AØ$ð	ð 	ˆLð1Ø×0Ò0Ø+¨LÔ9Ø!-¨nÔ!=Ø".¨Ô"?Ø$0Ð1BÔ$CØ)5Ð6LÔ)MØ%1Ð2DÔ%EØ,8Ð9RÔ,SØ%ð 1ñ 	ô 	�ð ×"Ò" 5Ð#8¨LÑ9Ô9Ð9Ý—’ØAØ  Ô.ñô ð ñ øõ ð 1ð 1ð 1Ý—’ÐHÈ#ÑNÔNÐNØ×"Ò" <Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ñ0øøøøð1øøøð Ðs   ÃA?EÅ
F
Å0FÆF
r'   Ústrc                ó¢   — |                       ¦   «         }d|v sd|v rdS d|v sd|v rdS d|v sd|v rd	S d
|v sd|v sd|v rdS d|v sd|v sd|v rdS dS )Nõ	   bÃª tÃ´ngÚbtctÚCONCRETE_VOLUMEõ   vÃ¡n khuÃ´nu	   cá»‘p phaÚFORMWORK_AREAu   cá»‘t thÃ©põ   thÃ©pÚREBAR_WEIGHTu   Ä‘Ã ou   Ä‘áº¯pu   váº­n chuyá»ƒn Ä‘áº¥tÚEARTHWORK_VOLUMEõ	   phÃ¡ dá»¡õ   Ä‘á»¥c táº©yu
   cáº¡o bá»�ÚDEMOLITION_RENOVATIONÚGENERAL_ESTIMATE©Úlower)r'   Úts     r   r&   z!QSRuleSynthesizer._infer_categoryI   s©   € à�OŠOÑÔˆØ˜!ÐÐ˜v¨˜{˜{Ø$Ð$Ø˜aÐÐ ;°!Ð#3Ð#3Ø"�?Ø˜aÐÐ 7¨a < <Ø!�>Ø˜ˆ\ˆ\˜X¨˜]˜]Ð.EÈÐ.JÐ.JØ%Ð%Ø˜AÐÐ °1Ð!4Ð!4¸ÈÐ8IÐ8IØ*Ð*Ø!Ð!r   r)   c                óº   — |                      ¦   «         }|                       ¦   «         }d|v sd|v sd|v rdS d|v sd|v sd|v rdS d	|v sd
|v sd|v sd|v sd|v rdS dS )Nu   cá»‘ngu   mÆ°Æ¡ngu   kÃªnhÚIRRIGATION_HYDRAULICu	   Ä‘Æ°á»�ngu   giao thÃ´ngu   ná»�nÚROAD_INFRASTRUCTUREu   káº¿t cáº¥uu   mÃ³ngu   cá»™tu   dáº§mu   sÃ nÚSTRUCTURAL_CONCRETEÚARCHITECTURAL_CIVILrN   )r'   r)   ÚprP   s       r   r(   z%QSRuleSynthesizer._infer_drawing_typeX   sŸ   € à×ÒÑ Ô ˆØ�OŠOÑÔˆØ�qˆ=ˆ=˜I¨˜N˜N¨g¸¨l¨lØ)Ð)Ø˜AÐÐ °!Ð!3Ð!3°wÀ!°|°|Ø(Ð(Ø˜aÐÐ 7¨a < <°7¸a°<°<À7ÈaÀ<À<ÐSYÐ]^ÐS^ÐS^Ø(Ð(Ø$Ð$r   r8   r   c                óÒ   — | j                              ¦   «         }d|v sd|v sd|v rd| j         › d�S d|v rd| j         › d�S d	|v rd
| j         › d�S d|v rd| j         › d�S d| j         › d�S )NrJ   rK   u   cáº¡ou1   BÃ³c tÃ¡ch cÃ´ng tÃ¡c hoÃ n thiá»‡n cáº£i táº¡o 'uß   ': Chia tÃ¡ch theo tá»«ng diá»‡n tÃ­ch bá»� máº·t (sÃ¢n kháº¥u, há»™i trÆ°á»�ng, chÃ¢n mÃ³ng, tráº§n hiÃªn), trá»« chÃ­nh xÃ¡c diá»‡n tÃ­ch cá»­a Ä‘i/cá»­a sá»• vÃ  Ã¡p dá»¥ng tá»· lá»‡ % hÆ° há»�ng thá»±c táº¿ (10% - 90%).rB   u   Khi bÃ³c bÃª tÃ´ng 'u±   ': TÃ­nh toÃ¡n hÃ¬nh há»�c chi tiáº¿t tá»«ng cáº¥u kiá»‡n (DÃ i * Rá»™ng * Cao * Sá»‘ lÆ°á»£ng) vÃ  báº¯t buá»™c trá»« thá»ƒ tÃ­ch pháº§n cá»�c bÃª tÃ´ng/cáº¥u kiá»‡n giao nhau.rE   u   Khi bÃ³c vÃ¡n khuÃ´n 'u•   ': TÃ­nh diá»‡n tÃ­ch tiáº¿p xÃºc thá»±c táº¿ giá»¯a bÃª tÃ´ng vÃ  vÃ¡n khuÃ´n, bá»• sung vÃ¡n khuÃ´n thÃ nh bÃªn vÃ  vÃ¡n khuÃ´n Ä‘áº§u mang cá»‘ng.rG   u   Khi bÃ³c cá»‘t thÃ©p 'u˜   ': TÃ­nh tá»•ng chiá»�u dÃ i bao gá»“m Ä‘oáº¡n neo 30d/40d vÃ  Ä‘oáº¡n ná»‘i chá»“ng 30d, nhÃ¢n trá»�ng lÆ°á»£ng riÃªng kg/m theo Ä‘Æ°á»�ng kÃ­nh thanh.u&   Hiá»‡u chá»‰nh bÃ³c tÃ¡ch cÃ´ng tÃ¡c 'u‡   ': Ã�p dá»¥ng cÃ´ng thá»©c phÃ¢n rÃ£ chi tiáº¿t kÃ­ch thÆ°á»›c theo Ä‘Ãºng Ä‘á»‹nh má»©c ThÃ´ng tÆ° 12/2021/TT-BXD vÃ  ThÃ´ng tÆ° 2026.)r'   rO   )r8   rP   s     r   r,   z0QSRuleSynthesizer._generate_correction_directived   sû   € àŒM×ÒÑ!Ô!ˆØ˜!ÐÐ˜~°Ð2Ð2°gÀ°l°lð vÀsÄ}ð  vð  vð  vð  vØ˜AÐÐð k¨#¬-ð  kð  kð  kð  kØ˜aÐÐð Q¨C¬Mð  Qð  Qð  Qð  QØ˜ˆ\ˆ\ð T¨C¬Mð  Tð  Tð  Tð  Tð O¸¼ð  Oð  Oð  Oð  	Or   )N)r   r   r   r   r   r   )r'   r@   r   r@   )r'   r@   r)   r@   r   r@   )r8   r   r   r@   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr?   Ústaticmethodr&   r(   r,   © r   r   r
   r
      s©   € € € € € ØyÐyàð /3ð6ð 6ð 6ð 6ñ „[ð6ðp ð"ð "ð "ñ „\ð"ð ð	%ð 	%ð 	%ñ „\ð	%ð ð
Oð 
Oð 
Oñ „\ð
Oð 
Oð 
Or   r
   )Ú
__future__r   ÚloggingÚtypingr   Úapp.core.postgres.erp_clientr   Úmodelsr   r   Ú	getLoggerr0   r
   r^   r   r   ú<module>re      sµ   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð à :Ð :Ð :Ð :Ð :Ð :à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;à	ˆÔ	Ð@Ñ	AÔ	A€ðbOð bOð bOð bOð bOñ bOô bOð bOð bOð bOr   