§
    Ð‰¬j(  ã                  ó²  — d dl mZ 	 d dlZd dlmZ d dlmZmZmZm	Z	 d dl
mZ d dlmZ ddlmZ  ej        d	¦  «        Z e¦   «         Ze                     d
d¬¦  «         e eg d¢¦  «        ¦  «        fd.d„¦   «         Ze                     dd¬¦  «         e eg d¢¦  «        ¦  «        fd.d„¦   «         Ze                     dd¬¦  «         e eg d¢¦  «        ¦  «        fd.d„¦   «         Ze                     dd¬¦  «         e	dd¬¦  «         e eg d¢¦  «        ¦  «        fd/d!„¦   «         Ze                     d"d#¬¦  «         e eg d¢¦  «        ¦  «        fd.d$„¦   «         Ze                     d%d&¬¦  «         e eg d¢¦  «        ¦  «        fd.d'„¦   «         Ze                     d(d)¬¦  «         e eg d¢¦  «        ¦  «        fd0d-„¦   «         ZdS )1é    )ÚannotationsN)ÚAny)Ú	APIRouterÚDependsÚHTTPExceptionÚQuery)Úrequire_role)ÚErpDatabaseClienté   )ÚItemQuantitiesUpdateRequestzdscons.api.takeoff.breakdownz/{takeoff_id}/rate-breakdownuS   Báº£ng PhÃ¢n RÃ£ Ä�Æ¡n GiÃ¡ Chi Tiáº¿t (VL + NC + M) & Ä�á»‹nh Má»©c Váº­t TÆ° 2026)Úsummary)Ú
superadminÚdirectorÚmanagerÚengineerÚstaffÚ
takeoff_idÚstrÚcurrent_userúdict[str, Any]Úreturnc                ó¦   — t          ¦   «         }|                     | ¦  «        }|st          dd¬¦  «        ‚|                     | ¦  «        }||d<   |S )u“   PhÃ¢n rÃ£ Ä‘Æ¡n giÃ¡ tá»«ng cÃ´ng tÃ¡c BoQ thÃ nh 3 thÃ nh pháº§n: Chi phÃ­ Váº­t liá»‡u, NhÃ¢n cÃ´ng, Ca mÃ¡y theo Ä�á»‹nh má»©c XÃ¢y dá»±ng 2026.é”  õ1   KhÃ´ng tÃ¬m tháº¥y há»“ sÆ¡ bÃ³c tÃ¡ch báº£n váº½©Ústatus_codeÚdetailÚtakeoff)r
   Úget_drawing_takeoffr   Úget_takeoff_rate_breakdown©r   r   Úclientr   Úress        úGC:\Projects\DSCons\app\modules\takeoff\presentation\breakdown_routes.pyÚget_rate_breakdown_endpointr%      sj   € õ Ñ Ô €FØ×(Ò(¨Ñ4Ô4€GØð 
ÝØÐ$Wð
ñ 
ô 
ð 	
ð ×
+Ò
+¨JÑ
7Ô
7€CØ€Cˆ	�NØ€Jó    z$/{takeoff_id}/triple-column-varianceuW   Báº£ng So SÃ¡nh 3 Cá»™t (Báº£n Váº½ vs HSMT vs Thá»±c Táº¿) & Cáº£nh BÃ¡o PhÃ¡t Sinh VOc                ó¦   — t          ¦   «         }|                     | ¦  «        }|st          dd¬¦  «        ‚|                     | ¦  «        }||d<   |S )u«   Ä�á»‘i soÃ¡t 3 cá»™t khá»‘i lÆ°á»£ng: Khá»‘i lÆ°á»£ng Báº£n váº½ (AI), TiÃªn lÆ°á»£ng má»�i tháº§u (HSMT), vÃ  Nghiá»‡m thu thá»±c táº¿ Ä‘á»ƒ phÃ¡t hiá»‡n phÃ¡t sinh (VO).r   r   r   r   )r
   r   r   Úget_takeoff_triple_variancer!   s        r$   Úget_triple_variance_endpointr)   ,   sj   € õ Ñ Ô €FØ×(Ò(¨Ñ4Ô4€GØð 
ÝØÐ$Wð
ñ 
ô 
ð 	
ð ×
,Ò
,¨ZÑ
8Ô
8€CØ€Cˆ	�NØ€Jr&   z'/{takeoff_id}/generate-material-requestu_   1-Click Tá»•ng Há»£p & Sinh Phiáº¿u Dá»± TrÃ¹ Nhu Cáº§u Váº­t TÆ° CÃ´ng TrÆ°á»�ng (MR Schedule))r   r   r   r   c                óœ   — t          ¦   «         }|                     | ¦  «        }|st          dd¬¦  «        ‚|                     | ¦  «        }|S )u®   1-Click tá»•ng há»£p toÃ n bá»™ nhu cáº§u váº­t tÆ° chÃ­nh (CÃ¡t 710k, CÃ¡t 510k, Xi mÄƒng, ThÃ©p CB400, VÃ¡n khuÃ´n...) tá»« báº£ng BoQ Ä‘á»ƒ chuyá»ƒn sang phÃ²ng Mua sáº¯m.r   r   r   )r
   r   r   Ú!generate_takeoff_material_requestr!   s        r$   Ú"generate_material_request_endpointr,   E   sa   € õ Ñ Ô €FØ×(Ò(¨Ñ4Ô4€GØð 
ÝØÐ$Wð
ñ 
ô 
ð 	
ð ×
2Ò
2°:Ñ
>Ô
>€CØ€Jr&   z$/{takeoff_id}/statutory-cost-summaryuY   Báº£ng Tá»•ng Há»£p Chi PhÃ­ Dá»± ToÃ¡n XÃ¢y Dá»±ng 2026 (Nghá»‹ Ä�á»‹nh 206/2026/NÄ�-CP)u!   Thuáº¿ suáº¥t VAT (%) tÃ¹y chá»�n)ÚdescriptionÚvat_rateúfloat | Nonec                ó
  — t          ¦   «         }|                     | ¦  «        }|st          dd¬¦  «        ‚|                     | ¦  «        }ddlm} |                     ||                     dd¦  «        |¬¦  «        }||d	<   |S )
uÌ   TÃ­nh toÃ¡n báº£ng tá»•ng há»£p kinh phÃ­ xÃ¢y dá»±ng chÃ­nh thá»©c theo Nghá»‹ Ä‘á»‹nh 206/2026/NÄ�-CP: Chi phÃ­ trá»±c tiáº¿p T, GiÃ¡n tiáº¿p GT, Thu nháº­p chá»‹u thuáº¿ TL, Thuáº¿ VAT, Dá»± phÃ²ng DP.r   r   r   r   )ÚStatutoryCostSummaryEngineÚdrawing_typeÚcivil_building)Úitemsr2   r.   r   )r
   r   r   Úlist_drawing_takeoff_itemsÚ:app.modules.takeoff.application.boq_statutory_cost_servicer1   Úcalculate_statutory_summaryÚget)r   r.   r   r"   r   r4   r1   r#   s           r$   Ú#get_statutory_cost_summary_endpointr9   [   s¿   € õ Ñ Ô €FØ×(Ò(¨Ñ4Ô4€GØð 
ÝØÐ$Wð
ñ 
ô 
ð 	
ð ×-Ò-¨jÑ9Ô9€Eðð ð ð ð ð ð %×
@Ò
@ØØ—[’[ Ð1AÑBÔBØð Añ ô €Cð
 €Cˆ	�NØ€Jr&   z/{takeoff_id}/audit-reportuL   BÃ¡o CÃ¡o Tháº©m Tra & Kiá»ƒm ToÃ¡n Cháº¥t LÆ°á»£ng BoQ (AI QS Audit Report)c                ó2  — t          ¦   «         }|                     | ¦  «        }|st          dd¬¦  «        ‚|                     | ¦  «        }ddlm} |                     ||                     dd¦  «        |                     dd	¦  «        ¬
¦  «        }||d<   |S )u±   Tháº©m tra toÃ n diá»‡n danh má»¥c BoQ: kiá»ƒm tra tÆ°Æ¡ng quan bÃª tÃ´ng - vÃ¡n khuÃ´n - cá»‘t thÃ©p, Ä‘Ã o Ä‘áº¯p, Ä‘Æ¡n vá»‹ tÃ­nh vÃ  tÃ­nh Ä‘iá»ƒm cháº¥t lÆ°á»£ng há»“ sÆ¡.r   r   r   r   ©ÚBoqAuditEnginer2   r3   Údrawing_titleõ   Há»“ sÆ¡ bÃ³c tÃ¡ch báº£n váº½©r4   r2   Útakeoff_titler   )r
   r   r   r5   Ú0app.modules.takeoff.application.boq_audit_enginer<   Úaudit_takeoffr8   )r   r   r"   r   r4   r<   r#   s          r$   Úget_boq_audit_report_endpointrC   ~   s¿   € õ Ñ Ô €FØ×(Ò(¨Ñ4Ô4€GØð 
ÝØÐ$Wð
ñ 
ô 
ð 	
ð ×-Ò-¨jÑ9Ô9€EØOÐOÐOÐOÐOÐOà
×
&Ò
&ØØ—[’[ Ð1AÑBÔBØ—k’k /Ð3SÑTÔTð 'ñ ô €Cð
 €Cˆ	�NØ€Jr&   z)/{takeoff_id}/apply-audit-recommendationsuZ   1-Click Tá»± Ä�á»™ng Bá»• Sung CÃ¡c Háº¡ng Má»¥c Khuyáº¿n Nghá»‹ Tá»« BÃ¡o CÃ¡o Tháº©m Trac                óª  — t          ¦   «         }|                     | ¦  «        }|st          dd¬¦  «        ‚|                     | ¦  «        }ddlm} ddlm} |                     || 	                    dd¦  «        | 	                    d	d
¦  «        ¬¦  «        }| 	                    dg ¦  «        }|sddddœS t          |¦  «        }	d}
|D �]&}|	dz  }	|                     t           |¦   «         ¦  «        | |	| 	                    d¦  «        pd|	d›�| 	                    dd¦  «        | 	                    d¦  «        | 	                    dd¦  «        | 	                    dd¦  «        | 	                    dd¦  «        t          | 	                    d¦  «        pd¦  «        t          | 	                    d¦  «        pd¦  «        t          | 	                    d ¦  «        pd¦  «        d!œ¦  «         |
dz  }
�Œ(|                     | ¦  «        }t          d"„ |D ¦   «         ¦  «        }|                     | |d#|
› d$�d%œ¦  «         dd&|
› d'�|
t          |¦  «        |d(œS ))u‹   1-Click tá»± Ä‘á»™ng thÃªm cÃ¡c cÃ´ng tÃ¡c phá»¥ trá»£/vÃ¡n khuÃ´n/Ä‘áº¯p Ä‘áº¥t Ä‘Æ°á»£c phÃ¡t hiá»‡n thiáº¿u sÃ³t vÃ o báº£ng BoQ chÃ­nh.r   r   r   r   )Úuuid4r;   r2   r3   r=   r>   r?   Úrecommended_supplementsÚsuccessuS   Há»“ sÆ¡ bÃ³c tÃ¡ch Ä‘Ã£ hoÃ n háº£o, khÃ´ng cÃ³ háº¡ng má»¥c nÃ o cáº§n bá»• sung!)ÚstatusÚmessageÚadded_countr   Úwbs_codezSUP-Ú02dÚ	norm_codeu   Ä�M-2026Ú	item_nameÚcategoryÚcivilÚdimension_formulaÚ ÚunitÚm3Úquantityç        Úunit_price_vndÚtotal_amount_vnd)Úidr   Ú
item_indexrK   rM   rN   rO   rQ   rS   rU   rW   rX   c              3  ó^   K  — | ](}t          |                     d ¦  «        pd¦  «        V — Œ)dS )rX   rV   N)Úfloatr8   )Ú.0Úis     r$   ú	<genexpr>z7apply_audit_recommendations_endpoint.<locals>.<genexpr>Ù   s<   è è € ÐSÐSÀ•E˜!Ÿ%š%Ð 2Ñ3Ô3Ð:°sÑ;Ô;ÐSÐSÐSÐSÐSÐSr&   u+   Ä�Ã£ tháº©m tra vÃ  tá»± Ä‘á»™ng bá»• sung uF    háº¡ng má»¥c phá»¥ trá»£ / vÃ¡n khuÃ´n / Ä‘áº¯p Ä‘áº¥t hoÃ n chá»‰nh.)Útotal_estimated_cost_vndÚai_analysis_notesu)   Ä�Ã£ tá»± Ä‘á»™ng bá»• sung thÃ nh cÃ´ng u8    háº¡ng má»¥c khuyáº¿n nghá»‹ tá»« bÃ¡o cÃ¡o tháº©m tra!)rH   rI   rJ   Únew_total_itemsÚnew_total_estimated_cost_vnd)r
   r   r   r5   ÚuuidrE   rA   r<   rB   r8   ÚlenÚcreate_drawing_takeoff_itemr   r\   ÚsumÚupdate_drawing_takeoff)r   r   r"   r   r4   rE   r<   Ú	audit_resÚsupplementsÚcurrent_max_indexrJ   ÚitmÚupdated_itemsÚ	new_totals                 r$   Ú$apply_audit_recommendations_endpointro   ž   sä  € õ Ñ Ô €FØ×(Ò(¨Ñ4Ô4€GØð 
ÝØÐ$Wð
ñ 
ô 
ð 	
ð ×-Ò-¨jÑ9Ô9€EØÐÐÐÐÐàOÐOÐOÐOÐOÐOà×,Ò,ØØ—[’[ Ð1AÑBÔBØ—k’k /Ð3SÑTÔTð -ñ ô €Ið
 —-’-Ð 9¸2Ñ>Ô>€KØð 
àØlØð
ð 
ð 	
õ ˜E™
œ
ÐØ€KØð ñ ˆØ˜QÑÐØ×*Ò*å˜%˜%™'œ'‘l”lØ(Ø/ØŸGšG JÑ/Ô/ÐQÐ3QÐ:KÐ3QÐ3QÐ3QØ ŸWšW [°*Ñ=Ô=Ø ŸWšW [Ñ1Ô1ØŸGšG J°Ñ8Ô8Ø%(§W¢WÐ-@À"Ñ%EÔ%EØŸš ¨Ñ-Ô-Ý! #§'¢'¨*Ñ"5Ô"5Ð"<¸Ñ=Ô=Ý"'¨¯ªÐ0@Ñ(AÔ(AÐ(HÀSÑ"IÔ"IÝ$)¨#¯'ª'Ð2DÑ*EÔ*EÐ*LÈÑ$MÔ$Mðð ñ	
ô 	
ð 	
ð  	�qÑˆ‰à×5Ò5°jÑAÔA€MÝÐSÐSÀ]ÐSÑSÔSÑSÔS€IØ
×!Ò!Øà(1ð "cÈ{ð  "cð  "cð  "cð	
ð 	
ñô ð ð ð E¸{ð  Eð  Eð  EØ"Ý˜}Ñ-Ô-Ø(1ðð ð r&   z/items/{item_id}/quantitiesuc   Cáº­p Nháº­t Khá»‘i LÆ°á»£ng TiÃªn LÆ°á»£ng HSMT hoáº·c Khá»‘i LÆ°á»£ng Thá»±c Táº¿ cá»§a DÃ²ng BoQÚitem_idÚreqr   c                ó”   — t          ¦   «         }|                     | |j        |j        ¬¦  «        }|st	          dd¬¦  «        ‚dd|dœS )u¢   Cáº­p nháº­t khá»‘i lÆ°á»£ng HSMT / Thá»±c táº¿ cá»§a má»™t cÃ´ng tÃ¡c Ä‘á»ƒ há»‡ thá»‘ng tá»± Ä‘á»™ng tÃ­nh tá»· lá»‡ chÃªnh lá»‡ch vÃ  tráº¡ng thÃ¡i phÃ¡t sinh.)rp   Úhsmt_quantityÚactual_quantityr   uF   KhÃ´ng tÃ¬m tháº¥y háº¡ng má»¥c BoQ Ä‘á»ƒ cáº­p nháº­t khá»‘i lÆ°á»£ngr   rG   uM   Ä�Ã£ cáº­p nháº­t khá»‘i lÆ°á»£ng vÃ  tÃ­nh toÃ¡n chÃªnh lá»‡ch thÃ nh cÃ´ng.)rH   rI   Úitem)r
   Úupdate_takeoff_item_quantitiesrs   rt   r   )rp   rq   r   r"   Úupdateds        r$   Úupdate_item_quantities_endpointrx   ë   sy   € õ Ñ Ô €FØ×3Ò3ØØÔ'ØÔ+ð 4ñ ô €Gð
 ð 
ÝØÐ$lð
ñ 
ô 
ð 	
ð
 ØbØðð ð r&   )r   r   r   r   r   r   )r   r   r.   r/   r   r   r   r   )rp   r   rq   r   r   r   r   r   )Ú
__future__r   ÚloggingÚtypingr   Úfastapir   r   r   r   Ú"app.modules.auth.presentation.authr	   Úapp.core.postgres.erp_clientr
   Úschemasr   Ú	getLoggerÚloggerÚrouterr8   r%   r)   Úpostr,   r9   rC   ro   Úputrx   © r&   r$   ú<module>r†      sª  ðØ "Ð "Ð "Ð "Ð "Ð "à mà €€€Ø Ð Ð Ð Ð Ð à <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø :Ð :Ð :Ð :Ð :Ð :à 0Ð 0Ð 0Ð 0Ð 0Ð 0à	ˆÔ	Ð9Ñ	:Ô	:€Ø	ˆ‰Œ€ð ‡‚Ø"Øað ñ ô ð $+ 7ØˆØFÐFÐFñ	
ô 	
ñ$ô $ðð ð ð ñ	ô ðð* ‡‚Ø*Øeð ñ ô ð $+ 7ØˆØFÐFÐFñ	
ô 	
ñ$ô $ðð ð ð ñ	ô ðð* ‡‚Ø-Ømð ñ ô ð $+ 7ØˆÐFÐFÐFÑGÔGñ$ô $ðð ð ð ñ	ô ðð$ ‡‚Ø*Øgð ñ ô ð #˜U 4Ð5XÐYÑYÔYØ#* 7ØˆØFÐFÐFñ	
ô 	
ñ$ô $ðð ð ð ñ	ô ðð> ‡‚Ø ØZð ñ ô ð $+ 7ØˆØFÐFÐFñ	
ô 	
ñ$ô $ðð ð ð ñ	ô ðð8 ‡‚Ø/Øhð ñ ô ð $+ 7ØˆÐFÐFÐFÑGÔGñ$ô $ðFð Fð Fð Fñ	ô ðFðR ‡‚Ø!Øqð ñ ô ð $+ 7ØˆÐFÐFÐFÑGÔGñ$ô $ðð ð ð ñ	ô ðð ð r&   