§
    G<ÃjÄG  ã                  ó`  — d Z ddlmZ ddlZddlmZmZ ddlmZm	Z	 ddl
mZ ddlZddlmZmZmZ  ee¦  «                             ¦   «         j        d         Zed	z  d
z  dz  Zed	z  d
z  dz  Zed	z  d
z  dz  Z ed¦  «        Zd\  ZZZZZZdddddœZdddddœZ dZ!dZ"dBd„Z#e G d„ d¦  «        ¦   «         Z$e G d „ d!¦  «        ¦   «         Z%e G d"„ d#¦  «        ¦   «         Z&dCd&„Z'dDd(„Z(dEd,„Z)dFd.„Z* ed/d0¬1¦  «        Z+ ed2d3¬4¦  «        Z,dGd9„Z-edfdHd>„Z.dId@„Z/e0dAk    r e/¦   «          dS dS )Ju]  Dá»±ng láº¡i dá»± toÃ¡n Cá»‘ng há»™p Ã”ng Ä�Ã¨n â€“ BÃ  Lanh tá»« há»“ sÆ¡ THáº¨M Ä�á»ŠNH vÃ  Ä‘á»‘i chiáº¿u Phá»¥ lá»¥c 01 há»£p Ä‘á»“ng.

Táº¡i sao cÃ³ cÃ´ng cá»¥ nÃ y
----------------------
Dá»± toÃ¡n ERP tá»± sinh trÆ°á»›c Ä‘Ã¢y (5.825.878.696 Ä‘) khÃ´ng dÃ¹ng Ä‘Æ°á»£c: tá»± Ä‘áº·t Ä‘Æ¡n giÃ¡, thay mÃ£ Ä‘á»‹nh má»©c
báº±ng "TT.xx", xáº¿p sai nhÃ³m. CÃ´ng cá»¥ nÃ y KHÃ”NG tÃ­nh láº¡i gÃ¬ theo Ä‘á»‹nh má»©c. NÃ³ chá»‰:
  1. Ä�á»�c nguyÃªn vÄƒn báº£ng dá»± toÃ¡n tháº©m Ä‘á»‹nh (sheet "CÃ´ng trÃ¬nh" + "THKP háº¡ng má»¥c"),
  2. Tá»± kiá»ƒm tra: tá»•ng thÃ nh tiá»�n tá»«ng dÃ²ng pháº£i khá»›p dÃ²ng A1/B1/C1 cá»§a THKP,
  3. GhÃ©p tá»«ng dÃ²ng vá»›i Phá»¥ lá»¥c 01 há»£p Ä‘á»“ng (cÃ¹ng thá»© tá»±, cÃ¹ng mÃ£) Ä‘á»ƒ tháº¥y chÃªnh khá»‘i lÆ°á»£ng/Ä‘Æ¡n giÃ¡,
  4. LÆ°á»£ng hoÃ¡ cÃ¡c rá»§i ro H1â€“H6 cá»§a bÃ¡o cÃ¡o audit, chá»‰ dÃ¹ng Ä‘Æ¡n giÃ¡ cÃ³ sáºµn trong TÄ�.

Nguá»“n (Luáº­t 1 â€“ khÃ´ng dá»¯ liá»‡u áº£o)
---------------------------------
- TÄ� : ...\Cá»‘ng há»™p Ã´ng Ä�Ã¨n Ä‘áº¿n nhÃ  bÃ  Lanh\tháº©m Ä‘á»‹nh cá»‘ng bÃ  Lanh_DÅ©ng\02. DToan thanh dinh ba Lanh.xls
       (chuyá»ƒn .xls -> .xlsx báº±ng Excel COM, khÃ´ng sá»­a ná»™i dung) -> reports/ong_den/thamdinh_ba_lanh.xlsx
- HÄ� : ...\GÃ³i TCXL\phu luc 01&02.xlsx -> reports/ong_den/phu_luc_01_02_HD.xlsx

Cháº¡y:  python -m tools.estimation.ong_den_rebuild_estimate [--td ...] [--hd ...] [--out ...]
é    )ÚannotationsN)Ú	dataclassÚfield)ÚDecimalÚInvalidOperation)ÚPath)Ú	AlignmentÚFontÚPatternFillé   ÚreportsÚong_denzthamdinh_ba_lanh.xlsxzphu_luc_01_02_HD.xlsxz#Du_toan_Ong_Den_dung_lai_tu_TD.xlsxÚ
6482295000)r   é   é   é   é   é   é   é   é   é   ©ÚvlÚvlpÚncÚmé   é   é   é   )zAF.11213zAF.12113zAF.22313)zAF.61120zAF.61321zAF.61721Úreturnr   c                óì   — | dv rt          d¦  «        S 	 t          t          | ¦  «                             ¦   «                              dd¦  «        ¦  «        S # t          $ r t          d¦  «        cY S w xY w)u[   Ã” Excel -> Decimal (Ä‘á»™ chÃ­nh xÃ¡c tÃ i chÃ­nh, khÃ´ng Ä‘i qua float khi cá»™ng dá»“n).©NÚ Ú0ú,r%   )r   ÚstrÚstripÚreplacer   )Úvs    ú?C:\Projects\DSCons\tools\estimation\ong_den_rebuild_estimate.pyÚDr-   .   su   € àˆJ€€Ý�s‰|Œ|ÐðÝ•s˜1‘v”v—|’|‘~”~×-Ò-¨c°2Ñ6Ô6Ñ7Ô7Ð7øÝð ð ð Ý�s‰|Œ|ÐÐÐðøøøs   •AA ÁA3Á2A3c                  ó²   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<    ee¬¦  «        Zded<   edd„¦   «         Zedd„¦   «         Z	dS )ÚItemr(   ÚsttÚcodeÚnameÚunitr   Úqtyúdict[str, Decimal]ÚdgÚttÚsection©Údefault_factoryú	list[str]Úexplainr"   c                ój   — t          | j                             ¦   «         t          d¦  «        ¦  «        S )u;   Ä�Æ¡n giÃ¡ trá»±c tiáº¿p (VL + VL phá»¥ + NC + M) theo TÄ�.r&   )Úsumr6   Úvaluesr   ©Úselfs    r,   Úunit_directzItem.unit_directD   s&   € õ �4”7—>’>Ñ#Ô#¥W¨S¡\¤\Ñ2Ô2Ð2ó    c                ój   — t          | j                             ¦   «         t          d¦  «        ¦  «        S )Nr&   )r>   r7   r?   r   r@   s    r,   Údirect_totalzItem.direct_totalI   s$   € å�4”7—>’>Ñ#Ô#¥W¨S¡\¤\Ñ2Ô2Ð2rC   N©r"   r   )
Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   Úlistr<   ÚpropertyrB   rE   © rC   r,   r/   r/   8   sÀ   € € € € € € à€H€H�HØ€I€I�IØ€I€I�IØ€I€I�IØ€L€L�LØÐÐÑØÐÐÑØ€L€L�LØ˜¨tÐ4Ñ4Ô4€GÐ4Ð4Ð4Ñ4àð3ð 3ð 3ñ „Xð3ð ð3ð 3ð 3ñ „Xð3ð 3ð 3rC   r/   c                  ó¨   — e Zd ZU ded<    ee¬¦  «        Zded<    ee¬¦  «        Zded<    ee¬¦  «        Z	ded	<    e
d
¦  «        Zded<   dd„ZdS )ÚPackager(   r2   r9   z
list[Item]Úitemszlist[tuple]Ú	thkp_rowsr5   Úthkpr&   r   Úrounded_totalÚkindr"   c                óÄ   ‡— ‰dk    r,t          d„ | j        D ¦   «         t          d¦  «        ¦  «        S t          ˆfd„| j        D ¦   «         t          d¦  «        ¦  «        S )Nr   c              3  óL   K  — | ]}|j         d          |j         d         z   V — Œ dS )r   r   N©r7   ©Ú.0Úis     r,   ú	<genexpr>z$Package.sum_items.<locals>.<genexpr>X   s3   è è € ÐEÐE°Q˜œ˜Tœ
 Q¤T¨%¤[Ñ0ÐEÐEÐEÐEÐEÐErC   r&   c              3  ó2   •K  — | ]}|j         ‰         V — Œd S ©NrW   )rY   rZ   rT   s     €r,   r[   z$Package.sum_items.<locals>.<genexpr>Y   s)   øè è € Ð3Ð3 1�A”D˜”JÐ3Ð3Ð3Ð3Ð3Ð3rC   )r>   rP   r   )rA   rT   s    `r,   Ú	sum_itemszPackage.sum_itemsV   s`   ø€ Ø�4Š<ˆ<ÝÐEÐE¸$¼*ÐEÑEÔEÅwÈsÁ|Ä|ÑTÔTÐTÝÐ3Ð3Ð3Ð3¨¬
Ð3Ñ3Ô3µW¸S±\´\ÑBÔBÐBrC   N)rT   r(   r"   r   )rG   rH   rI   rJ   r   rK   rP   rQ   ÚdictrR   r   rS   r^   rM   rC   r,   rO   rO   N   s¬   € € € € € € à€I€I�IØ˜¨dÐ3Ñ3Ô3€EÐ3Ð3Ð3Ñ3Ø"˜U°4Ð8Ñ8Ô8€IÐ8Ð8Ð8Ñ8Ø$˜u°TÐ:Ñ:Ô:€DÐ:Ð:Ð:Ñ:Ø$˜W S™\œ\€MÐ)Ð)Ð)Ñ)ðCð Cð Cð Cð Cð CrC   rO   c                  ó^   — e Zd ZU ded<   ded<   edd„¦   «         Zdd	„Zdd„Zdd„Zddd„Z	dS )ÚEstimatezlist[Package]Úpackagesr   Úsourcer"   r   c                óZ   — t          d„ | j        D ¦   «         t          d¦  «        ¦  «        S )Nc              3  ó$   K  — | ]}|j         V — Œd S r]   )rS   )rY   Úps     r,   r[   z'Estimate.grand_total.<locals>.<genexpr>c   s$   è è € Ð;Ð;¨�A”OÐ;Ð;Ð;Ð;Ð;Ð;rC   r&   )r>   rb   r   r@   s    r,   Úgrand_totalzEstimate.grand_totala   s)   € åÐ;Ð;¨T¬]Ð;Ñ;Ô;½WÀS¹\¼\ÑJÔJÐJrC   úlist[tuple[int, Item]]c                ó>   — d„ t          | j        ¦  «        D ¦   «         S )Nc                ó0   — g | ]\  }}|j         D ]}||f‘ŒŒS rM   ©rP   )rY   Úkrf   Úits       r,   ú
<listcomp>z&Estimate.all_items.<locals>.<listcomp>f   s/   € ÐOÐOÐO™D˜A˜qÀqÄwÐOÐOÀ��B�ÐOÐOÐOÐOrC   )Ú	enumeraterb   r@   s    r,   Ú	all_itemszEstimate.all_itemse   s    € ØOÐO¥I¨d¬mÑ$<Ô$<ÐOÑOÔOÐOrC   údict[str, float]c           	     óø   — | j         d         j        }t          t          d„ |D ¦   «         t	          d¦  «        ¦  «        ¦  «        t          t          d„ |D ¦   «         t	          d¦  «        ¦  «        ¦  «        dœS )Nr   c              3  ó@   K  — | ]}|j         t          v ¯|j        V — Œd S r]   )r1   Ú
M250_CODESr4   rX   s     r,   r[   z*Estimate.key_quantities.<locals>.<genexpr>k   s0   è è € Ð)WÐ)W°AÀ!Ä&ÍJÐBVÐBV¨!¬%ÐBVÐBVÐBVÐBVÐ)WÐ)WrC   r&   c              3  ó@   K  — | ]}|j         t          v ¯|j        V — Œd S r]   )r1   ÚREBAR_CODESr4   rX   s     r,   r[   z*Estimate.key_quantities.<locals>.<genexpr>l   s0   è è € Ð&UÐ&U°¸q¼vÍÐ?TÐ?T q¤uÐ?TÐ?TÐ?TÐ?TÐ&UÐ&UrC   )Úbe_tong_m250_m3Úcot_thep_tan)rb   rP   Úfloatr>   r   )rA   rP   s     r,   Úkey_quantitieszEstimate.key_quantitiesh   s|   € Ø”˜aÔ Ô&ˆå$¥SÐ)WÐ)W¸Ð)WÑ)WÔ)WÕY`ÐadÑYeÔYeÑ%fÔ%fÑgÔgÝ!¥#Ð&UÐ&U°eÐ&UÑ&UÔ&UÕW^Ð_bÑWcÔWcÑ"dÔ"dÑeÔeð
ð 
ð 	
rC   Úcontract_valuery   c                ó0   — t          || j        z  ¦  «        S )uU   Há»‡ sá»‘ giÃ¡ HÄ� / giÃ¡ TÄ� (thá»ƒ hiá»‡n má»©c giáº£m giÃ¡ khi kÃ½ há»£p Ä‘á»“ng).)ry   rg   )rA   r{   s     r,   Úcontract_factorzEstimate.contract_factoro   s   € å�^ dÔ&6Ñ6Ñ7Ô7Ð7rC   r%   r1   r(   Ú	name_partúItem | Nonec                ó²   — |                       ¦   «         D ]A\  }}|j        |k    r1|                     ¦   «         |j                             ¦   «         v r|c S ŒBd S r]   )rp   r1   Úlowerr2   )rA   r1   r~   Ú_rm   s        r,   ÚfindzEstimate.finds   sW   € Ø—^’^Ñ%Ô%ð 	ð 	‰EˆAˆrØŒw˜$Šˆ 9§?¢?Ñ#4Ô#4¸¼¿º¹¼Ð#GÐ#GØ�	�	�	øØˆtrC   NrF   )r"   rh   )r"   rq   )r{   r   r"   ry   )r%   )r1   r(   r~   r(   r"   r   )
rG   rH   rI   rJ   rL   rg   rp   rz   r}   rƒ   rM   rC   r,   ra   ra   \   s¦   € € € € € € àÐÐÑØ€L€L�LàðKð Kð Kñ „XðKðPð Pð Pð Pð
ð 
ð 
ð 
ð8ð 8ð 8ð 8ðð ð ð ð ð ð rC   ra   Úpathr   c                óŽ  ‡— t          j        | dd¬¦  «        }g }d}d }|d                              dd¬¦  «        D �]ÝŠt          ‰¦  «        d gdz  z   Š‰t                   ‰t
                   t          ‰t                   pd¦  «                             ¦   «         }}}|dk    r)| 	                    t          |¬	¦  «        ¦  «         d
\  }}Œ�|sŒ“|dvró|dvrït          t          |¦  «        t          |¦  «                             ¦   «         |t          ‰t                   pd¦  «                             ¦   «         t          ‰t                   ¦  «        ˆfd„t                               ¦   «         D ¦   «         ˆfd„t"                               ¦   «         D ¦   «         |¬¦  «        }|d         j         	                    |¦  «         �ŒŠ|r-‰t$                   dvr|�|j         	                    |¦  «         �Œ¹|r"‰t                   dv r‰t$                   dv r|d }}�Œßd}|d                              d¬¦  «        D �]nŠt          ‰¦  «        d gdz  z   Št          ‰d         pd¦  «        }	|	                     ¦   «                              d¦  «        r|dz  }Œ]|dk     s'|t-          |¦  «        k    s‰d         dv s
‰d         dv rŒ‹t          ‰d         ¦  «                             ¦   «         t          ‰d         pd¦  «                             ¦   «         t          ‰d         ¦  «        }}}
||         j         	                    ‰d         |
|‰d         ‰d         |f¦  «         |r|||         j        vr|||         j        |<   |
                     ¦   «         dk    r|||         _        �Œpt5          |t7          | ¦  «        ¬¦  «        S )NT©Ú	data_onlyÚ	read_onlyr%   u   CÃ´ng trÃ¬nhr   ©Úmin_rowÚvalues_onlyé(   ÚHM)r2   )r%   Nr$   c                óB   •— i | ]\  }}|t          ‰|         ¦  «        “ŒS rM   ©r-   ©rY   rl   ÚcÚrs      €r,   ú
<dictcomp>z+load_appraised_estimate.<locals>.<dictcomp>Œ   s)   ø€ Ð$IÐ$IÐ$I±D°A°q Q­¨!¨A¬$©¬Ð$IÐ$IÐ$IrC   c                óB   •— i | ]\  }}|t          ‰|         ¦  «        “ŒS rM   r�   r�   s      €r,   r“   z+load_appraised_estimate.<locals>.<dictcomp>Œ   s2   ø€ ÐNsÐNsÐNsÑ^bÐ^_ÐabÈqÕRSÐTUÐVWÔTXÑRYÔRYÐNsÐNsÐNsrC   )r0   r1   r2   r3   r4   r6   r7   r8   éÿÿÿÿu   THKP háº¡ng má»¥c)r‹   é
   r   u   Báº¢NG Tá»”NG Há»¢Pé   é   r   é   u
   LÃ€M TRÃ’N)rb   rc   )ÚopenpyxlÚload_workbookÚ	iter_rowsrK   ÚC_STTÚC_CODEr(   ÚC_NAMEr)   ÚappendrO   r/   ÚC_UNITr-   ÚC_QTYÚC_DGrP   ÚC_TTÚC_QTY_EXPLAINr<   ÚupperÚ
startswithÚlenrQ   rR   rS   ra   r   )r„   Úwbrb   r8   Úlastr0   r1   r2   rl   ÚtitleÚcontentÚsymÚvalr’   s                @r,   Úload_appraised_estimater¯   z   s¦  ø€ Ý	Ô	 °ÀÐ	EÑ	EÔ	E€Bð !€HØ€GØ€DØ�Ô×)Ò)°!ÀÐ)ÑFÔFð 'ñ 'ˆÝ�‰GŒG�t�f˜r‘kÑ!ˆØ�Eœ( A¥f¤I­s°1µV´9°?ÀÑ/CÔ/C×/IÒ/IÑ/KÔ/K�4ˆTˆØ�4Š<ˆ<Ø�OŠO�G¨Ð.Ñ.Ô.Ñ/Ô/Ð/Ø$‰MˆG�T�TØð 	'ØØ˜
Ð"Ð" t°:Ð'=Ð'=ÝÝ˜‘H”H¥3 t¡9¤9§?¢?Ñ#4Ô#4¸4ÅcÈ!ÍFÌ)È/ÐWYÑFZÔFZ×F`ÒF`ÑFbÔFbÝ�a�”h‘K”KÐ$IÐ$IÐ$IÐ$I½D¿JºJ¹L¼LÐ$IÑ$IÔ$IÐNsÐNsÐNsÐNsÕfj×fpÒfpÑfrÔfrÐNsÑNsÔNsØðñ ô ˆDð
 �RŒLÔ×%Ò% dÑ+Ô+Ð+Ñ+Øð 	'�a�Ô&¨jÐ8Ð8¸TÐ=MØŒL×Ò Ñ%Ô%Ð%Ñ%Øð 	'�a�”h *Ð,Ð,°µ=Ô1AÀZÐ1OÐ1OØ  $�TˆGùð 	€AØÐ#Ô$×.Ò.¸4Ð.Ñ@Ô@ð ,ñ ,ˆÝ�‰GŒG�t�f˜r‘kÑ!ˆÝ�A�a”D�J˜B‘”ˆØ�;Š;‰=Œ=×#Ò#Ð$9Ñ:Ô:ð 	Ø�‰FˆAØØˆqŠ5ˆ5�A�˜X™œÒ&Ð&¨!¨A¬$°*Ð*<Ð*<ÀÀ!ÄÈ
Ð@RÐ@RØÝ  !¤™IœIŸOšOÑ-Ô-­s°1°Q´4°:¸2©¬×/DÒ/DÑ/FÔ/FÍÈ!ÈAÌ$ÉÌ�c�ˆØ�ŒÔ×$Ò$ a¨¤d¨G°S¸!¸A¼$ÀÀ!ÄÀcÐ%JÑKÔKÐKØð 	(�3˜h qœkÔ.Ð.Ð.Ø$'ˆH�QŒKÔ˜SÑ!Ø�=Š=‰?Œ?˜lÒ*Ð*Ø(+ˆH�QŒKÔ%ùÝ˜X­d°4©j¬jÐ9Ñ9Ô9Ð9rC   ú
list[dict]c                óº  — t          j        | dd¬¦  «        d         }g d}}|                     dd¬¦  «        D �] }t          |¦  «        dgdz  z   }|d	         d
v r|d	         }|d	         dv s1|d         dv s't	          |d	         ¦  «                             ¦   «         sŒg|                     |t	          |d	         ¦  «        t	          |d         ¦  «                             ¦   «         t	          |d         pd¦  «        t	          |d         pd¦  «        t          |d         ¦  «        t          |d         ¦  «        t          |d         ¦  «        dœ¦  «         �Œ"|S )un   Phá»¥ lá»¥c 01: STT | MÃ£ sá»‘ | TÃªn cÃ´ng tÃ¡c | Ä�Æ¡n vá»‹ | KL | VL | NC | M | Ä�Æ¡n giÃ¡ | ThÃ nh tiá»�n.Tr†   u   phá»¥ lá»¥c 01r%   r   r‰   Né   r—   )ÚAÚBr$   r   )Nr%   r   r&   r™   r   é	   r–   )Úpartr0   r1   r2   r3   r4   Ú
unit_priceÚamount)	rš   r›   rœ   rK   r(   Úisdigitr    r)   r-   )r„   ÚwsÚrowsr¶   r’   s        r,   Úload_contract_annexr¼   ¨   s[  € å	Ô	 °ÀÐ	EÑ	EÔ	EÐFVÔ	W€BØ�Rˆ$€DØ�\Š\ !°ˆ\Ñ6Ô6ð jñ jˆÝ�‰GŒG�t�f˜r‘kÑ!ˆØˆQŒ4�:ÐÐØ�Q”4ˆDØˆQŒ4�:ÐÐ  1¤Ð);Ð!;Ð!;Å3ÀqÈÄtÁ9Ä9×CTÒCTÑCVÔCVÐ!;ØØ�Š˜T­#¨a°¬d©)¬)½SÀÀ1Ä¹Y¼Y¿_º_Ñ=NÔ=NÕX[Ð\]Ð^_Ô\`Ð\fÐdfÑXgÔXgÝ   1¤ ¨™_œ_µQ°q¸´t±W´WÍAÈaÐPQÌdÉGÌGÕ_`ÐabÐceÔafÑ_gÔ_gðið iñ 	jô 	jð 	jñ 	jà€KrC   ÚestÚhd_rowsú1list[tuple[int, tuple[Item | None, dict | None]]]c                ó   ‡
‡‡‡‡‡— ddl }g }t          | j        ¦  «        D ]Ü\  ŠŠ‰dk    rdndŠˆfd„|D ¦   «         Šd„ ‰j        D ¦   «         d„ ‰D ¦   «         }}|                     d||d¬	¦  «        }|                     ¦   «         D ]t\  }Š
}Š}	|d
k    r&|ˆ
ˆˆˆˆfd„t          |‰
z
  ¦  «        D ¦   «         z  }Œ4|ˆˆfd„t          ‰
|¦  «        D ¦   «         z  }|ˆˆfd„t          ‰|	¦  «        D ¦   «         z  }ŒuŒÝ|S )u}  GhÃ©p dÃ²ng TÄ� â†” dÃ²ng Phá»¥ lá»¥c 01 theo CHUá»–I MÃƒ Ä‘á»‹nh má»©c trong tá»«ng háº¡ng má»¥c (A â†” HM1, B â†” HM2).

    KhÃ´ng ghÃ©p theo vá»‹ trÃ­ tuyá»‡t Ä‘á»‘i vÃ¬ HÄ� Ä‘Ã£ gá»™p/bá»� má»™t sá»‘ dÃ²ng (vd. "váº­n chuyá»ƒn 10m tiáº¿p theo"),
    lÃ m lá»‡ch toÃ n bá»™ pháº§n sau. difflib.SequenceMatcher tÃ¬m Ä‘oáº¡n mÃ£ trÃ¹ng dÃ i nháº¥t -> ghÃ©p 1-1 á»•n Ä‘á»‹nh.
    r   Nr³   r´   c                ó,   •— g | ]}|d          ‰k    ¯|‘ŒS )r¶   rM   )rY   Úhr¶   s     €r,   rn   z'align_with_contract.<locals>.<listcomp>Â   s'   ø€ Ð6Ð6Ð6�A A f¤I°Ò$5Ð$5ˆaÐ$5Ð$5Ð$5rC   c                ó   — g | ]	}|j         ‘Œ
S rM   ©r1   rX   s     r,   rn   z'align_with_contract.<locals>.<listcomp>Ã   s   € Ð8Ð8Ð8¨˜aœfÐ8Ð8Ð8rC   c                ó   — g | ]
}|d          ‘ŒS rÄ   rM   ©rY   rÂ   s     r,   rn   z'align_with_contract.<locals>.<listcomp>Ã   s   € Ð:QÐ:QÐ:QÈ¸1¸V¼9Ð:QÐ:QÐ:QrC   F)ÚautojunkÚequalc                óJ   •— g | ]}‰‰j         ‰|z            ‰‰|z            ff‘Œ S rM   rk   )rY   ÚjÚa0Úb0Úhdrl   Úpkgs     €€€€€r,   rn   z'align_with_contract.<locals>.<listcomp>Ç   s6   ø€ ÐUÐUÐUÀ˜˜SœY r¨A¡vÔ.°°2¸±6´
Ð;Ð<ÐUÐUÐUrC   c                ó2   •— g | ]}‰‰j         |         d ff‘ŒS r]   rk   )rY   Úarl   rÎ   s     €€r,   rn   z'align_with_contract.<locals>.<listcomp>É   s)   ø€ ÐIÐIÐI°a˜˜SœY qœ\¨4Ð0Ð1ÐIÐIÐIrC   c                ó(   •— g | ]}‰d ‰|         ff‘ŒS r]   rM   )rY   ÚbrÍ   rl   s     €€r,   rn   z'align_with_contract.<locals>.<listcomp>Ê   s&   ø€ ÐBÐBÐB¨q˜˜T 2 a¤5˜MÐ*ÐBÐBÐBrC   )Údifflibro   rb   rP   ÚSequenceMatcherÚget_opcodesÚrange)r½   r¾   rÓ   ÚoutÚtd_codesÚhd_codesÚsmÚopÚa1Úb1rË   rÌ   rÍ   rl   r¶   rÎ   s             @@@@@@r,   Úalign_with_contractrÞ   ·   so  øøøøøø€ ð €N€N€Nà=?€CÝ˜CœLÑ)Ô)ð 
Cð 
C‰ˆˆ3Ø˜1’f�fˆsˆs #ˆØ6Ð6Ð6Ð6˜Ð6Ñ6Ô6ˆØ8Ð8¨c¬iÐ8Ñ8Ô8Ð:QÐ:QÈbÐ:QÑ:QÔ:Q�(ˆØ×$Ò$ T¨8°XÈÐ$ÑNÔNˆØ"$§.¢.Ñ"2Ô"2ð 	Cð 	CÑˆB��B˜˜BØ�WŠ}ˆ}ØÐUÐUÐUÐUÐUÐUÐUÐUÅeÈBÐQSÉGÁnÄnÐUÑUÔUÑU��àÐIÐIÐIÐIÐI½5ÀÀR¹=¼=ÐIÑIÔIÑI�ØÐBÐBÐBÐBÐBµE¸"¸b±M´MÐBÑBÔBÑB��ð	Cð €JrC   ú
list[list]c                ó¢  — |                       dd¦  «        }|                       d¦  «        |                       d¦  «        }}|                       dd¦  «        }g }|r|j        d         nt          d¦  «        }t          d¦  «        d	z  }t          d
¦  «        }|r|j        n|dz  |z  }	||z  |z  }
|                     dddd|d›d|› d|r|j        nd› d�t          |	¦  «        t          |
¦  «        t          |
|	z
  ¦  «        g¦  «         t          d¦  «        }|r|j        nd|r|j        ndz   }|                     dddddt          ||z  ¦  «        t          ||z  ¦  «        g¦  «         |r|j        nt          d¦  «        }t          d¦  «        t          d¦  «        z  }|                     ddd d!|› d"|d#›d$�t          |r|j        nd¦  «        t          ||z  ¦  «        t          ||z  |r|j        ndz
  ¦  «        g¦  «         |                     g d%¢¦  «         |                     g d&¢¦  «         |                     g d'¢¦  «         |S )(u~   H1â€“H6 cá»§a bÃ¡o cÃ¡o audit. Chá»‰ dÃ¹ng Ä‘Æ¡n giÃ¡ TÄ�; má»�i giáº£ Ä‘á»‹nh ghi rÃµ trong cá»™t 'CÆ¡ sá»Ÿ / giáº£ Ä‘á»‹nh'.ÚTTu   Cá»« thÃ©p thuÃªzAC.22111zAC.23420u   BÆ¡m nÆ°á»›cr   Ú2000Ú7030r™   Ú230éZ   ÚH1Úhighut   ThuÃª cá»« chá»‰ tÃ­nh 90 ngÃ y; theo Gantt HÄ� cá»« náº±m trong Ä‘áº¥t â‰ˆ 230 ngÃ y (Ã©p PÄ�1 â†’ rÃºt 30/05/2027)z
7.030/3 = z.1fu    m Ã— u    Ä‘/m/ngÃ y; TÄ� ú?uL    mÂ·ngÃ y; Gantt: â‰ˆ230 ngÃ y (Æ°á»›c tÃ­nh tá»« Gantt, cáº§n chá»‘t láº¡i)z6.74r   ÚH2Úmediumu>   Ä�oáº¡n TC1â€“C4 dÃ¹ng cá»« 8 m (BPTC) nhÆ°ng KL TÄ� tÃ­nh 5 muY   â‰ˆ 674 m cá»« Ä‘Ã³ng + nhá»• thÃªm Ã— Ä‘Æ¡n giÃ¡ trá»±c tiáº¿p TÄ� (AC.22111 + AC.23420)g        r&   Ú2Ú215ÚH3uZ   BÆ¡m nÆ°á»›c chá»‰ 50 ca; BPTC cam káº¿t 2 mÃ¡y bÆ¡m 24/24 suá»‘t giai Ä‘oáº¡n Ä‘Ã o/Ä‘á»•u3   Ká»‹ch báº£n tháº¥p: 2 mÃ¡y Ã— 215 ngÃ y Ã— 1 ca = u    ca Ã— ú,.0fu    Ä‘/ca (Ä‘Æ¡n giÃ¡ TÄ�))ÚH4rê   ud   Gantt xáº¿p TC1â€“C4 vÃ o PÄ�2, nhÆ°ng Ä‘Ãª quai PÄ�2 Ä‘áº·t á»Ÿ Km0+97,98 â†’ TC1â€“C4 thuá»™c PÄ�3uM   Máº·t báº±ng DWG (Ä‘Ãª quai Km0+50,48 & Km0+97,98) â€“ cáº§n sá»­a Gantt/BPTCNNN)ÚH5rê   ua   Gantt chá»‰ cÃ³ 1 Ä‘á»£t rÃºt cá»« 16/05â€“30/05/2027, mÃ¢u thuáº«n 'cá»« luÃ¢n chuyá»ƒn 3 láº§n'u2   áº¢nh hÆ°á»Ÿng trá»±c tiáº¿p H1 (sá»‘ ngÃ y thuÃª)NNN)ÚH6Úlowup   Nhá»• cá»« Ã¡p AC.23420 'dÆ°á»›i nÆ°á»›c' cho cÃ´ng trÃ¬nh trÃªn cáº¡n; cá»�c tre L=2,5 m Ã¡p AC.12121 '> 2,5 m'u8   CÃ³ thá»ƒ bá»‹ cáº¯t giáº£m khi tháº©m tra quyáº¿t toÃ¡nNNN)rƒ   r6   r   rE   r    r4   ry   rB   )r½   ÚrentÚdriveÚpullÚpumpr×   Ú
rent_priceÚm_in_groundÚ
days_ganttÚtd_costÚ
gantt_costÚ
extra_100mÚupÚpump_upÚca_bptcs                  r,   Ú	risk_rowsr   Î   s  € à�8Š8�DÐ,Ñ-Ô-€DØ—(’(˜:Ñ&Ô&¨¯ª°Ñ(<Ô(<ˆ4€EØ�8Š8�D˜.Ñ)Ô)€DØ
€Cð #'Ð;�”˜”�­G°F©O¬O€JÝ˜&‘/”/ AÑ%€KÝ˜‘”€JØ#'ÐJˆdÔÐ¨[¸2Ñ-=À
Ñ-J€GØ˜zÑ)¨JÑ6€JØ‡J‚J��fð  Uð y˜[ð  yð  yð  y°Jð  yð  yÐ]aÐQjÐQUÔQYÐQYÐgjð  yð  yð  yÝ�g‘”¥ jÑ 1Ô 1µ5¸ÀgÑ9MÑ3NÔ3NðPñ Qô Qð Qõ
 ˜‘”€JØ$Ð
+ˆ%Ô
Ð
¨!ÀDÐ0O°Ô0@Ð0@ÈaÑ	P€BØ‡J‚J��hÐ `ØkØ•U˜:¨™?Ñ+Ô+­U°:À±?Ñ-CÔ-CðEñ Fô Fð Fð
 #'Ð8ˆdÔÐ­G°C©L¬L€GÝ�c‰lŒl�W U™^œ^Ñ+€GØ‡J‚J��hÐ |Ø{ÀgÐ{Ð{ÐV]Ð{Ð{Ð{Ð{Ý¨4Ð6�dÔ'Ð'°QÑ7Ô7½¸wÈÑ?PÑ9QÔ9QÝ�g Ñ'ÀÐ+K¨4Ô+<Ð+<È!ÑLÑMÔMðOñ Pô Pð Pð
 ‡J‚Jð sð sð sñ tô tð tà‡J‚Jð Xð Xð Xñ Yô Yð Yà‡J‚Jð ^ð ^ð ^ñ _ô _ð _à€JrC   TÚFFFFFF)ÚboldÚcolorÚsolidÚ1E293B)ÚfgColorÚcolsr;   Úwidthsú	list[int]c                óh  — |                       |¦  «         t          |d¦  «        D ]g\  }}|                      | j        |¬¦  «        }t          t
          t          dd¬¦  «        c|_        |_        |_	        || j
        |j                 _        Œh|                      | j        dz   d¬¦  «        | _        d S )Nr—   )ÚrowÚcolumnTÚcenter)Ú	wrap_textÚvertical)r    ro   ÚcellÚmax_rowÚHEADÚFILLr	   ÚfontÚfillÚ	alignmentÚcolumn_dimensionsÚcolumn_letterÚwidthÚfreeze_panes)rº   r  r  rZ   Úwr‘   s         r,   Ú_headerr  û   sŸ   € Ø‡I‚Iˆd�O„O€OÝ˜& !Ñ$Ô$ð 8ð 8‰ˆˆ1Ø�GŠG˜œ
¨1ˆGÑ-Ô-ˆÝ&*­Dµ)ÀdÐU]Ð2^Ñ2^Ô2^Ð#ˆŒ�”˜œØ67ˆÔ˜Qœ_Ô-Ô3Ð3Ø—g’g "¤*¨q¡.¸�gÑ;Ô;€B„O€O€OrC   r×   r{   ÚannexúPath | Nonec                óD  ‡— t          |¦  «        }|j                             dd¬¦  «         t          j        ¦   «         }|j        }d|_        t          |g d¢g d¢¦  «         |                      ¦   «         D ]™\  }Š| 	                    |dz   ‰j
        ‰j        ‰j        ‰j        ‰j        t          ‰j        ¦  «        gˆfd„dD ¦   «         ¢ˆfd	„dD ¦   «         ¢t          ‰j        ¦  «        ‘d
                     ‰j        ¦  «        ‘¦  «         Œš|                     ddd¬¦  «        D ]}|D ]}|j        dk    rdnd|_        ŒŒ|                     d¦  «        }t          |g d¢g d¢¦  «         | j        D ]I}	|	j        D ]?\  }
}}}}}| 	                    |	j        d d…         |
||||t          |¦  «        g¦  «         Œ@ŒJ| 	                    g ¦  «         | 	                    dd d d d d t          | j        ¦  «        g¦  «         |                     ddd¬¦  «        D ]}d|d         _        Œ|                     d¦  «        }|                      |¦  «        }| 	                    dt          |¦  «        g¦  «         | 	                    dt          | j        ¦  «        g¦  «         | 	                    d|g¦  «         | 	                    g ¦  «         t          |g d¢g d¢¦  «         |r0t          |¦  «                             ¦   «         rt;          |¦  «        ng }|                      ¦   «         }t=          | |¦  «        D �]¿\  }\  Š}‰€w| 	                    |dz   |d         d |d         |d         |d          d t          |d!         ¦  «        d d t          |d"         ¦  «        t          |d#         ¦  «        d$g¦  «         Œ‚g }|€| 	                    d%¦  «         nCt?          |d!         ‰j        z
  ¦  «        tA          d&¦  «        k    r| 	                    d'¦  «         | 	                    |dz   ‰j        ‰j        |r|d         nd ‰j        ‰j        t          ‰j        ¦  «        |rt          |d!         ¦  «        nd |rt          |d!         ‰j        z
  ¦  «        nd t          ‰j!        ¦  «        |rt          |d"         ¦  «        nd |rt          |d#         ¦  «        nd d(                     |¦  «        pd)g¦  «         �ŒÁtE          d*„ |D ¦   «         tA          d+¦  «        ¦  «        }| 	                    g ¦  «         | 	                    d d d d d,d d d d d d t          |¦  «        g¦  «         |                     d-¦  «        }t          |g d.¢g d/¢¦  «         tG          | ¦  «        D ]}| 	                    |¦  «         Œ|                     dd0d¬¦  «        D ]}|D ]	}d|_        Œ
Œ|                     d1¦  «        }d2tI          | j%        j        ¦  «        d3gd4|r!tI          t          |¦  «        j        ¦  «        nd5d6gg d7¢g d8¢fD ]}| 	                    |¦  «         Œd9\  |j&        d:         _'        |j&        d;         _'        |j&        d<         _'        | (                    |¦  «         |S )=NT)ÚparentsÚexist_okz
Du toan TD)r�   u   Má»¥cÚSTTu   MÃ£ Ä�Mu   TÃªn cÃ´ng tÃ¡cõ   Ä�Vu   Khá»‘i lÆ°á»£ngu   Ä�G VLu   Ä�G VL phá»¥u   Ä�G NCu   Ä�G MÃ¡yzTT VLu   TT VL phá»¥zTT NCu   TT MÃ¡yu   Cá»™ng trá»±c tiáº¿pu   Diá»…n giáº£i KL (TÄ�))r   r    r   é   é<   é   r²   é   r$  r'  r'  r   r'  r   r   r   éF   r—   c                óD   •— g | ]}t          ‰j        |         ¦  «        ‘ŒS rM   )ry   r6   ©rY   Úxrm   s     €r,   rn   z#export_workbook.<locals>.<listcomp>  s%   ø€ ÐGÐGÐG¨•U˜2œ5 œ8‘_”_ÐGÐGÐGrC   r   c                óD   •— g | ]}t          ‰j        |         ¦  «        ‘ŒS rM   )ry   r7   r*  s     €r,   rn   z#export_workbook.<locals>.<listcomp>  s*   ø€ ÐJ}ÐJ}ÐJ}Ð_`Í5ÐQSÔQVÐWXÔQYÉ?Ì?ÐJ}ÐJ}ÐJ}rC   z | r   r˜   r   )rŠ   Úmin_colÚmax_colz	#,##0.000z#,##0ÚTHKP)u   Háº¡ng má»¥cr"  u   Ná»™i dung chi phÃ­u
   KÃ½ hiá»‡uu   CÃ¡ch tÃ­nhu	   Há»‡ sá»‘u   GiÃ¡ trá»‹ (Ä‘))rŒ   r   é7   r–   r    r&  r   r%  u2   Tá»”NG Dá»° TOÃ�N TÄ� (2 háº¡ng má»¥c, lÃ m trÃ²n)r   zDoi chieu HDu%   GiÃ¡ HÄ� (Phá»¥ lá»¥c 01, lÃ m trÃ²n)u   Dá»± toÃ¡n TÄ� (lÃ m trÃ²n)u   Há»‡ sá»‘ HÄ�/TÄ�)r�   r"  u   MÃ£ TÄ�u   MÃ£ HÄ�u   TÃªn cÃ´ng tÃ¡c (TÄ�)r#  u   KL TÄ�u   KL HÄ�u	   ChÃªnh KLu   Ä�G trá»±c tiáº¿p TÄ�u/   Ä�G HÄ� (Ä‘Ã£ gá»“m chi phÃ­ chung, TL, VATâ€¦)u   ThÃ nh tiá»�n HÄ�u   Ghi chÃº)r   r   r$  r$  r%  r&  r²   r²   r$  r   r   r   é   r0   r1   r2   r3   r4   r·   r¸   u   chá»‰ cÃ³ trong HÄ�u$   chá»‰ cÃ³ trong TÄ� (HÄ� gá»™p/bá»�)z0.0005u   KL khÃ¡cz, u   khá»›pc              3  ó&   K  — | ]}|d          V — ŒdS )r¸   NrM   rÆ   s     r,   r[   z"export_workbook.<locals>.<genexpr>8  s&   è è € Ð/Ð/ !�!�H”+Ð/Ð/Ð/Ð/Ð/Ð/rC   r&   u6   Tá»•ng thÃ nh tiá»�n cÃ¡c dÃ²ng HÄ� (chÆ°a lÃ m trÃ²n)zRui ro H1-H6)u   MÃ£u   Má»©cu   Váº¥n Ä‘á»�u   CÆ¡ sá»Ÿ / giáº£ Ä‘á»‹nhu%   Chi phÃ­ trá»±c tiáº¿p trong TÄ� (Ä‘)u-   Chi phÃ­ trá»±c tiáº¿p theo ká»‹ch báº£n (Ä‘)u+   ChÃªnh (Ä‘, trÆ°á»›c chi phÃ­ chung/TL/VAT))r   r&  r%  r(  r   r   r   r   ÚNguonu   Dá»± toÃ¡n TÄ�uO   02. DToan thanh dinh ba Lanh.xls (chuyá»ƒn xlsx báº±ng Excel COM, khÃ´ng sá»­a)u   Phá»¥ lá»¥c 01 HÄ�ú-u   GÃ³i TCXL\phu luc 01&02.xlsx)u
   Kiá»ƒm trau&   Tá»•ng TT tá»«ng dÃ²ng = A1/B1/C1 THKPz&tests/test_ong_den_estimate_rebuild.py)u   LÆ°u Ã½u|   CÃ¡c con sá»‘ ká»‹ch báº£n H1â€“H3 lÃ  Æ°á»›c tÃ­nh Ä‘á»ƒ chuáº©n bá»‹ phÃ¡t sinh, khÃ´ng pháº£i giÃ¡ trá»‹ Ä‘Æ°á»£c duyá»‡tr%   )r   r%  r(  r³   r´   ÚC))r   ÚparentÚmkdirrš   ÚWorkbookÚactiver«   r  rp   r    r8   r0   r1   r2   r3   ry   r4   rE   Újoinr<   rœ   r  Únumber_formatÚcreate_sheetrb   rQ   rg   r}   Úexistsr¼   rÞ   Úabsr   rB   r>   r   r(   rc   r  r  Úsave)r½   r×   r{   r  r©   rº   rl   r  r‘   rf   r0   r¬   r­   ÚhowÚcoefr®   r¾   Útd_itemsÚpkrÂ   ÚnoteÚhd_sumÚlinerm   s                          @r,   Úexport_workbookrG    s®  ø€ Ý
ˆs‰)Œ)€CØ„J×Ò˜T¨DÐÑ1Ô1Ð1Ý	Ô	Ñ	Ô	€Bà	Œ€BØ€B„HÝˆBð oð oð oàMÐMÐMñOô Oð Oð —’‘”ð Dð D‰ˆˆ2Ø
�	Š	�1�q‘5˜"œ* b¤f¨b¬g°r´wÀÄÍÈrÌvÉÌð CØGÐGÐGÐGÐ.FÐGÑGÔGðCØJ}ÐJ}ÐJ}ÐJ}Ðd|ÐJ}ÑJ}ÔJ}ðCå˜œÑ)Ô)ðCà+0¯:ª:°b´jÑ+AÔ+AðCñ 	Dô 	Dð 	Dð 	Dð �|Š| A¨q¸"ˆ|Ñ=Ô=ð Hð HˆØð 	Hð 	HˆAØ-.¬X¸ª]¨]˜k˜kÀˆAŒOˆOð	Hð 
�Š˜Ñ	 Ô	 €BÝˆBÐ{Ð{Ð{ð  ~Xð  ~Xð  ~Xñ  Yô  Yð  YØŒ\ð Oð OˆØ12´ð 	Oð 	OÑ-ˆC�˜#˜s D¨#Ø�IŠI�q”v˜c˜r˜c”{ C¨°#°s¸DÅ%ÈÁ*Ä*ÐMÑNÔNÐNÐNð	Oà‡I‚Iˆb�M„M€MØ‡I‚IÐCÀTÈ4ÐQUÐW[Ð]aÕchÐilÔixÑcyÔcyÐzÑ{Ô{Ð{Ø�|Š| A¨q¸!ˆ|Ñ<Ô<ð 'ð 'ˆØ&ˆˆAŒÔÐà	�Š˜Ñ	(Ô	(€BØ×Ò˜NÑ+Ô+€AØ‡I‚IÐ6½¸nÑ8MÔ8MÐNÑOÔOÐOØ‡I‚IÐ,­e°C´OÑ.DÔ.DÐEÑFÔFÐFØ‡I‚IÐ" AÐ&Ñ'Ô'Ð'Ø‡I‚Iˆb�M„M€MÝˆBð eð eð eà=Ð=Ð=ñ?ô ?ð ?ð -2ÐRµd¸5±k´k×6HÒ6HÑ6JÔ6JÐRÕ! %Ñ(Ô(Ð(ÐPR€GØ�}Š}‰Œ€HÝ*¨3°Ñ8Ô8ð {ñ {‰ˆ‰GˆR�Øˆ:Ø�IŠI�r˜A‘v˜q œx¨¨q°¬y¸!¸F¼)ÀQÀvÄYÐPTÕV[Ð\]Ð^cÔ\dÑVeÔVeÐgkÐmqÝ˜Q˜|œ_Ñ-Ô-­u°Q°x´[Ñ/AÔ/AÐCXðZñ [ô [ð [àØˆØˆ9Ø�KŠKÐ>Ñ?Ô?Ð?Ð?Ý��5”˜BœFÑ"Ñ#Ô#¥g¨hÑ&7Ô&7Ò7Ð7Ø�KŠK˜
Ñ#Ô#Ð#Ø
�	Š	�2˜‘6˜2œ6 2¤7¸Ð,D¨A¨f¬I¨IÀÀbÄgÈrÌwÕX]Ð^`Ô^dÑXeÔXeØ&'Ð1•5˜˜5œ‘?”?�?¨TÈqÐ3Zµ5¸¸5¼ÀBÄFÑ9JÑ3KÔ3KÐ3KÐVZÕ\aÐbdÔbpÑ\qÔ\qØ-.Ð8•5˜˜<œÑ)Ô)Ð)°DÐPQÐ:[½%ÀÀ(ÄÑ:LÔ:LÐ:LÐW[Ð]a×]fÒ]fÐgkÑ]lÔ]lÐ]xÐpxðzñ 	{ô 	{ð 	{ñ 	{õ Ð/Ð/ wÐ/Ñ/Ô/µ¸±´Ñ>Ô>€FØ‡I‚Iˆb�M„M€MØ‡I‚Iˆt�T˜4 Ð'_ÐaeÐgkÐmqÐswÐy}ð  @Dõ  FKð  LRñ  FSô  FSð  Tñ  Uô  Uð  Uà	�Š˜Ñ	(Ô	(€BÝˆBð @ð @ð @ØA[ÐA[ÐA[ñ]ô ]ð ]å˜‰~Œ~ð ð ˆØ
�	Š	�#‰ŒˆˆØ�|Š| A¨q¸!ˆ|Ñ<Ô<ð &ð &ˆØð 	&ð 	&ˆAØ%ˆAŒOˆOð	&ð 
�Š˜Ñ	!Ô	!€Bà	�3˜sœzœÑ/Ô/ð  2Cð  	DØ	¸ÐF�s¥4¨¡;¤;Ô#3Ñ4Ô4Ð4À3ÐHgÐhØjÐjÐjð 	Xð  	Xð  	Xð	ð ð ˆð 	�	Š	�$‰ŒˆˆØhrÑe€BÔ˜ÔÔ# RÔ%9¸#Ô%>Ô%DÀbÔFZÐ[^ÔF_ÔFeà‡G‚GˆC�L„L€LØ€JrC   ÚNonec                 ó|  — t          j        t                               ¦   «         d         ¬¦  «        } |                      dt
          t          ¬¦  «         |                      dt
          t          ¬¦  «         |                      dt
          t          ¬¦  «         |  	                    ¦   «         }t          |j        ¦  «        }t          ||j        |j        ¬¦  «        }|                     ¦   «         }t!          d|j        d	›d
|                     t&          ¦  «        d›d|d         d›d|d         d›d|› �
¦  «         d S )Nr   )Údescriptionz--td)ÚtypeÚdefaultz--hdz--out)r  u   TÄ�: rî   u    Ä‘ | HÄ�/TÄ� = z.6fz | M250 rw   z.3fu    m3 | thÃ©p rx   z t | -> )ÚargparseÚArgumentParserÚ__doc__Ú
splitlinesÚadd_argumentr   Ú
DEFAULT_TDÚ
DEFAULT_HDÚDEFAULT_OUTÚ
parse_argsr¯   ÚtdrG  r×   rÍ   rz   Úprintrg   r}   ÚCONTRACT_VALUE)ÚaprÐ   r½   r×   Úqs        r,   Úmainr[  S  sJ  € Ý	Ô	 ­W×-?Ò-?Ñ-AÔ-AÀ!Ô-DÐ	EÑ	EÔ	E€BØ‡O‚O�F¥­z€OÑ:Ô:Ð:Ø‡O‚O�F¥­z€OÑ:Ô:Ð:Ø‡O‚O�G¥$µ€OÑ<Ô<Ð<Ø
�Š‰Œ€AÝ
! !¤$Ñ
'Ô
'€CÝ
˜#˜qœu¨A¬DÐ
1Ñ
1Ô
1€CØ×ÒÑÔ€AÝ	ð ]�#”/Ð
dð ]ð ]¸×8KÒ8KÍNÑ8[Ô8[Ð
dð ]ð ]ØÐ%Ô&Ð
\ð]ð ]Ø89¸.Ô8IÐ
\ð]ð ]ØWZð]ð ]ñ ^ô ^ð ^ð ^ð ^rC   Ú__main__rF   )r„   r   r"   ra   )r„   r   r"   r°   )r½   ra   r¾   r°   r"   r¿   )r½   ra   r"   rß   )r  r;   r  r	  )
r½   ra   r×   r   r{   r   r  r  r"   r   )r"   rH  )1rO  Ú
__future__r   rM  Údataclassesr   r   Údecimalr   r   Úpathlibr   rš   Úopenpyxl.stylesr	   r
   r   Ú__file__Úresolver   ÚROOTrR  rS  rT  rX  r�   rž   rŸ   r¡   r¥   r¢   r£   r¤   rt   rv   r-   r/   rO   ra   r¯   r¼   rÞ   r   r  r  r  rG  r[  rG   rM   rC   r,   ú<module>re     sô  ððð ð& #Ð "Ð "Ð "Ð "Ð "à €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø Ð Ð Ð Ð Ð à €€€Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8à€tˆH�~„~×ÒÑÔÔ'¨Ô*€Ø�IÑ 	Ñ)Ð,CÑC€
Ø�IÑ 	Ñ)Ð,CÑC€
Ø�YÑ Ñ*Ð-RÑR€Ø�˜Ñ&Ô&€ð 7IÑ 3€€vˆv�v˜}¨eØ˜ 2¨BÐ/Ð/€Ø˜ 2¨BÐ/Ð/€ð 2€
Ø2€ðð ð ð ð ð3ð 3ð 3ð 3ð 3ñ 3ô 3ñ „ð3ð* ð
Cð 
Cð 
Cð 
Cð 
Cñ 
Cô 
Cñ „ð
Cð ðð ð ð ð ñ ô ñ „ðð:+:ð +:ð +:ð +:ð\ð ð ð ðð ð ð ð.&ð &ð &ð &ðR €t�˜XÐ&Ñ&Ô&€Ø€{�7 HÐ-Ñ-Ô-€ð<ð <ð <ð <ð IWÐmqð Lð Lð Lð Lð Lð^
^ð 
^ð 
^ð 
^ð ˆzÒÐØ€D�F„F€F€F€Fð ÐrC   