§
    ÔŸ’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  ej	        d¦  «        Z
ddd„Z G d„ d¦  «        ZdS )é    )ÚannotationsN)ÚDecimal)ÚAnyé   )ÚACTUAL_MARKET_MAPPINGSz"dscons.state_price_sync.comparisoné   Úvalr   ÚplacesÚintÚreturnr   c                óè   — | €t          d¦  «        S 	 t          t          | ¦  «        ¦  «                             t          dd|z  z   ¦  «        ¦  «        S # t          $ r t          d¦  «        cY S w xY w)Nú0.00z1.Ú0)r   ÚstrÚquantizeÚ	Exception)r	   r
   s     ú>C:\Projects\DSCons\app\services\state_price_sync\comparison.pyÚround_decimalr      sx   € Ø
€{Ý�v‰ŒÐðÝ•s˜3‘x”xÑ Ô ×)Ò)­'°$¸¸v¹Ñ2EÑ*FÔ*FÑGÔGÐGøÝð ð ð Ý�v‰ŒÐÐÐðøøøs   “AA ÁA1Á0A1c                  ó"   — e Zd ZdZ	 	 	 ddd„ZdS )ÚStatePriceComparisonMixinzQMixin for side-by-side comparison between State Price & Market Purchase Invoices.ú2026-08ÚHAI_PHONG_KHU_VUC_2NÚpublish_periodr   Úregion_codeÚmaterial_groupú
str | Noner   údict[str, Any]c                óà	  — t           }|                      ¦   «         5 }|                     ¦   «         5 }ddg}||g}|r*|                     d¦  «         |                     |¦  «         |                     dd                     |¦  «        › d�|¦  «         |                     ¦   «         }	d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |	s+|                      ¦   «          |                      |||¦  «        S g }
d}d}d}t          d¦  «        }t          d¦  «        }t          d¦  «        }d}|	D �]¡}|d	         }t          t          |d
         ¦  «        ¦  «        }||z  }|                     |¦  «        }|�rÁt          t          |d         ¦  «        ¦  «        }|d         }|d         }|                     d¦  «        }|                     d¦  «        }||z  }|dz  }||z
  }|dk    r$t          ||z  t          d¦  «        z  d¦  «        }nt          d¦  «        }||z  }|t          d¦  «        k    rd}d}d}|dz  }n*|t          d¦  «        k    rd}d}d}|dz  }nd}d}d}|dz  }|
                     i dt          |d         ¦  «        “d|d         “d	|d	         “d|d         “d |d          “d!|d!         “d
t          |¦  «        “dt          |¦  «        “d"t          |¦  «        “d#t          |¦  «        “d$|“d%|“d&|“d'|d'         “d|“d(|“d|“|p|                     d¦  «        d)d*œ¥¦  «         �Œ|dz  }|
                     i dt          |d         ¦  «        “d|d         “d	|d	         “d|d         “d |d          “d!|d!         “d
t          |¦  «        “dd “d"d “d#d “d$d+“d%d,“d&d-“d'|d'         “dd.“d(d/“dd “d0d1d*œ¥¦  «         �Œ£t          |
¦  «        } |dk    r-t          |t          t          |¦  «        ¦  «        z  d¦  «        nt          d¦  «        }!|dk    r||z
  nt          d¦  «        }"|dk    r)|dk    r#t          |"|z  t          d¦  «        z  d¦  «        nt          d¦  «        }#||d2|v rd3nd4|	r|	d         d'         nd5| ||t          |!¦  «        t          |#¦  «        t          |¦  «        t          |¦  «        t          |"¦  «        d6œ|
d7œS )8Nzpublish_period = %szregion_code = %szmaterial_group = %saX  
                    SELECT 
                        id, publish_period, region_code, material_group, material_code,
                        material_name, specifications, unit, state_unit_price_vnd,
                        document_reference, effective_date, notes
                    FROM erp_state_published_prices
                    WHERE z AND zU
                    ORDER BY material_group ASC, material_code ASC;
                r   r   Úmaterial_codeÚstate_unit_price_vndÚmarket_unit_price_vndÚsupplier_nameÚinvoice_refÚmarket_dateÚnotesr   z100.00r   z15.00ÚHIGH_PROFITu   LÃƒI CAO (An toÃ n)zbadge-successÚNORMAL_PROFITu   LÃƒI Vá»ªA (Kiá»ƒm soÃ¡t)zbadge-warningÚ	LOSS_RISKu   NGUY CÆ  Lá»– (VÆ°á»£t giÃ¡)zbadge-dangerÚidr   Úmaterial_nameÚspecificationsÚunitÚvariance_vndÚprofit_margin_percentÚ
risk_levelÚ
risk_labelÚbadge_classÚdocument_referenceÚinvoice_referenceT)r%   Úhas_real_invoiceÚPENDING_DATAu   CHÆ¯A Ä�á»�I SOÃ�T HÄ�zbadge-secondaryu#   ChÆ°a cÃ³ HÄ� mua sáº¯m thá»±c táº¿u-   Cáº§n bá»• sung HÄ� mua sáº¯m / Tra cá»©u WebuG   ChÆ°a cÃ³ dá»¯ liá»‡u hÃ³a Ä‘Æ¡n Ä‘á»‘i tÃ¡c thá»±c táº¿ trong CSDL GDTFÚ2uP   Khu vá»±c II: Kiáº¿n Thá»¥y, TiÃªn LÃ£ng, An LÃ£o, Thá»§y NguyÃªn (Háº£i PhÃ²ng)u'   Khu vá»±c I: Trung tÃ¢m TP Háº£i PhÃ²nguT   ThÃ´ng bÃ¡o sá»‘ 558/TB-SXD ngÃ y 07/08/2026 cá»§a Sá»Ÿ XÃ¢y dá»±ng TP. Háº£i PhÃ²ng)Útotal_itemsÚprofitable_countÚloss_risk_countÚaverage_margin_percentÚoverall_margin_percentÚtotal_state_value_vndÚtotal_market_value_vndÚtotal_variance_vnd)Úperiodr   Úregion_nameÚdocument_titleÚkpisÚitems)r   Úget_connectionÚcursorÚappendÚexecuteÚjoinÚfetchallÚseed_official_state_pricesÚget_price_comparisonr   r   Úgetr   ÚfloatÚlen)$Úselfr   r   r   Úactual_market_mappingsÚconnÚcurÚwhere_clausesÚparamsÚstate_itemsÚcomparison_listr8   r9   Úunmatched_countÚtotal_state_sumÚtotal_market_sumÚ
margin_sumÚbenchmarked_countÚsÚm_codeÚp_stateÚm_dataÚp_marketÚsupplierÚinv_refÚm_dateÚm_notesr-   Úprofit_margin_pctr/   r0   r1   r7   Ú
avg_marginÚtotal_varianceÚoverall_margins$                                       r   rK   z.StatePriceComparisonMixin.get_price_comparison   sj  € õ "8Ðð × Ò Ñ"Ô"ð 	) d¨D¯KªK©M¬Mð 	)¸SØ2Ð4FÐGˆMØ$ kÐ2ˆFØð .Ø×$Ò$Ð%:Ñ;Ô;Ð;Ø—’˜nÑ-Ô-Ð-à�KŠKðð #Ÿ<š<¨Ñ6Ô6ðð ð ð ñô ð ð Ÿ,š,™.œ.ˆKð'	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð, ð 	Ø×+Ò+Ñ-Ô-Ð-Ø×,Ò,Ø ¨^ñô ð ð ˆØÐØˆØˆÝ! &™/œ/ˆÝ" 6™?œ?ÐÝ˜V‘_”_ˆ
ØÐàð ]	ñ ]	ˆAØ�Ô'ˆFÝ�c !Ð$:Ô";Ñ<Ô<Ñ=Ô=ˆGØ˜wÑ&ˆOð ,×/Ò/°Ñ7Ô7ˆFØñ VÝ"¥3 vÐ.EÔ'FÑ#GÔ#GÑHÔH�Ø! /Ô2�Ø  Ô/�ØŸš MÑ2Ô2�Ø Ÿ*š* WÑ-Ô-�à  HÑ,Ð Ø! QÑ&Ð!ð  '¨Ñ1�Ø˜Q’;�;Ý(5Ø%¨Ñ/µ7¸8Ñ3DÔ3DÑDÀañ)ô )Ð%Ð%õ )0°©¬Ð%àÐ/Ñ/�
ð %­°Ñ(8Ô(8Ò8Ð8Ø!.�JØ!6�JØ"1�KØ$¨Ñ)Ð$Ð$Ø&­'°&©/¬/Ò9Ð9Ø!0�JØ!<�JØ"1�KØ$¨Ñ)Ð$Ð$à!,�JØ!?�JØ"0�KØ# qÑ(�Oà×&Ò&ðØ�c ! D¤'™lœlðà(¨!Ð,<Ô*=ðð (¨¨?Ô);ðð (¨¨?Ô);ð	ð
 )¨!Ð,<Ô*=ðð   &¤	ðð /µ°g±´ðð 0µ°x±´ðð '­¨lÑ(;Ô(;ðð 0µÐ7HÑ1IÔ1Iðð % jðð % jðð & {ðð -¨aÐ0DÔ.Eðð (¨ðð  ,¨Wð!ð" & vð#ð$ ")Ð!:¨A¯EªE°'©N¬NØ,0ð'ð ð ñô ð ñ ð2   1Ñ$�Ø×&Ò&ðØ�c ! D¤'™lœlðà(¨!Ð,<Ô*=ðð (¨¨?Ô);ðð (¨¨?Ô);ð	ð
 )¨!Ð,<Ô*=ðð   &¤	ðð /µ°g±´ðð 0°ðð '¨ðð 0°ðð % nðð %Ð&>ðð &Ð'8ðð -¨aÐ0DÔ.Eðð (Ð)Nðð  ,Ð-\ð!ð" & tð#ð$ "kØ,1ð'ð ð ñô ð ñ õ0 ˜/Ñ*Ô*ˆð ! 1Ò$Ð$õ ˜*¥w­sÐ3DÑ/EÔ/EÑ'FÔ'FÑFÈÑJÔJÐJå˜‘”ð 	ð ! 1Ò$Ð$ð Ð.Ñ.Ð.å˜‘”ð 	ð  Ò"Ð"Ð'8¸1Ò'<Ð'<õ ˜>¨OÑ;½wÀxÑ?PÔ?PÑPÐRSÑTÔTÐTå˜‘”ð 	ð %Ø&à�kÐ!Ð!ð nÐmà:àðh˜k¨!œnÐ-AÔBÐBàgà*Ø$4Ø#2Ý*/°
Ñ*;Ô*;Ý*/°Ñ*?Ô*?Ý).¨Ñ)?Ô)?Ý*/Ð0@Ñ*AÔ*AÝ&+¨NÑ&;Ô&;ð	ð 	ð %ð'
ð 
ð 	
s5   œC
±A6B3Â'C
Â3B7	Â7C
Â:B7	Â;C
Ã
CÃC)r   r   N)r   r   r   r   r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rK   © ó    r   r   r      sE   € € € € € Ø[Ð[ð (Ø0Ø%)ð	r
ð r
ð r
ð r
ð r
ð r
ð r
rn   r   )r   )r	   r   r
   r   r   r   )Ú
__future__r   ÚloggingÚdecimalr   Útypingr   Úcomparison_market_datar   Ú	getLoggerÚloggerr   r   rm   rn   r   ú<module>rv      s¾   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à :Ð :Ð :Ð :Ð :Ð :à	ˆÔ	Ð?Ñ	@Ô	@€ðð ð ð ð ðu
ð u
ð u
ð u
ð u
ñ u
ô u
ð u
ð u
ð u
rn   