§
    Åô¿j  ã                  ó4  — d Z 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mZ ddlmZ ddlmZ  ej        e¦  «        Z ed	g¬
¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z eg d¢¦  «        Ze                     deeef         d¬¦  «         ee¦  «        fdd„¦   «         Ze                     deeef         d¬¦  «         ee¦  «        fdd„¦   «         Ze                     deeef         d¬¦  «         ee¦  «        fd d„¦   «         ZdS )!z§
Presentation Routes for Inverse-BIM Constraint Solver & Tri-Source Truth Grounding.
Zero raw SQL/DDL, strict schema validation, and complete real-world verification.
é    )ÚannotationsN)ÚAny)Ú	APIRouterÚDependsÚHTTPExceptionÚstatus)Ú	BaseModelÚField)Úrequire_role)Úget_drawing_takeoff_servicez(Inverse-BIM & Tri-Source Truth Grounding)Útagsc                  ó    — e Zd ZU  edd¬¦  «        Zded<    edd¬¦  «        Zded	<    ed
d¬¦  «        Zded<    edd¬¦  «        Zded<   dS )ÚInverseBimSolveRequestNu(   Ä�Æ°á»�ng dáº«n file CAD (DXF, DWG, PDF))ÚdefaultÚdescriptionú
str | NoneÚcad_source_pathé   u   Sá»‘ phÃ¢n Ä‘oáº¡n thi cÃ´ngz
int | NoneÚnum_segmentsg     €E@u$   Chiá»�u dÃ i má»—i phÃ¢n Ä‘oáº¡n (m)zfloat | NoneÚsegment_length_mu)   Há»‡ thá»‘ng cá»‘ng há»™p kÃªnh Báº¿n Kemu   TÃªn cÃ´ng trÃ¬nhÚstructure_name)	Ú__name__Ú
__module__Ú__qualname__r
   r   Ú__annotations__r   r   r   © ó    úHC:\Projects\DSCons\app\modules\takeoff\presentation\tri_source_routes.pyr   r      sª   € € € € € € Ø"' %°ÐBlÐ"mÑ"mÔ"m€OÐmÐmÐmÑmØ$˜u¨QÐ<ZÐ[Ñ[Ô[€LÐ[Ð[Ð[Ñ[Ø%* U°4ÐEkÐ%lÑ%lÔ%lÐÐlÐlÐlÑlØ!& Ø;ÐI\ð"ñ "ô "€Nð ð ð ñ ð ð r   r   c                  óV   — e Zd ZU dZded<   dZded<   dZded<   dZded<   dZded	<   dS )
ÚTriSourceReconcileRequestNr   r   Úbbs_source_pathÚhsmt_source_pathuF   XÃ‚Y Dá»°NG Há»† THá»�NG Cá»�NG Há»˜P KÃŠNH Báº¾N KEM, XÃƒ KIáº¾N MINHÚproject_nameu*   GÃ³i tháº§u sá»‘ 6: GÃ³i tháº§u xÃ¢y láº¯pÚpackage_name)	r   r   r   r   r   r!   r"   r#   r$   r   r   r   r    r    !   sh   € € € € € € Ø"&€OÐ&Ð&Ð&Ñ&Ø"&€OÐ&Ð&Ð&Ñ&Ø#'ÐÐ'Ð'Ð'Ñ'Øg€LÐgÐgÐgÑgØK€LÐKÐKÐKÑKÐKÐKr   r    )Ú
superadminÚdirectorÚmanagerÚengineerÚstaffz/ben-kem/tri-source-audituQ   Kiá»ƒm toÃ¡n chÃ©o Tri-Source Truth Grounding cÃ´ng trÃ¬nh cá»‘ng há»™p Báº¿n Kem)Úresponse_modelÚsummaryÚcurrent_userúdict[str, Any]Úreturnc                ó  — 	 t          ¦   «         }|                     ¦   «         }d|                     ¦   «         dœS # t          $ r>}t                               d¦  «         t          t          j        d|›�¬¦  «        |‚d}~ww xY w)uv  
    Thá»±c thi kiá»ƒm toÃ¡n chÃ©o 3 nguá»“n chÃ¢n lÃ½ (Tri-Source Truth Grounding):
    1. HÃ¬nh há»�c khÃ´ng gian CAD Model Space (Cá»‘ng há»™p 2.5x2.5m, L=215m, 5 phÃ¢n Ä‘oáº¡n)
    2. Báº£ng thá»‘ng kÃª cá»‘t thÃ©p káº¿t cáº¥u BBS (42.1876 táº¥n cá»‘t thÃ©p CB300-V/CB400)
    3. TiÃªn lÆ°á»£ng HSMT theo Luáº­t XÃ¢y dá»±ng 2025 & Ä�á»‹nh má»©c 2026 (39 cÃ´ng tÃ¡c)
    Úsuccess©r   Úreportz[TriSourceRoute] Audit failedu   Lá»—i kiá»ƒm toÃ¡n Tri-Source: ©Ústatus_codeÚdetailN)	r   Úrun_tri_source_reconciliationÚ
model_dumpÚ	ExceptionÚloggerÚ	exceptionr   r   ÚHTTP_500_INTERNAL_SERVER_ERROR)r,   Úservicer2   Úes       r   Úget_ben_kem_tri_source_auditr>   ,   s§   € ðÝ-Ñ/Ô/ˆØ×6Ò6Ñ8Ô8ˆàØ×'Ò'Ñ)Ô)ð
ð 
ð 	
øõ ð ð ð Ý×ÒÐ8Ñ9Ô9Ð9ÝÝÔ=Ø:°QÐ:Ð:ð
ñ 
ô 
ð ð	øøøøðøøøs   ‚8; »
BÁ9A>Á>Bz/inverse-bim/solveuZ   Giáº£i bÃ i toÃ¡n rÃ ng buá»™c hÃ¬nh há»�c nghá»‹ch Ä‘áº£o Inverse-BIM tá»« báº£n váº½ CADÚrequestc                óL  — 	 t          ¦   «         }i }| j        r
| j        |d<   | j        r
| j        |d<   | j        r
| j        |d<    |j        d	d| j        i|¤Ž}|S # t          $ r>}t                               d¦  «         t          t          j        d|›�¬¦  «        |‚d}~ww xY w)
ud   TrÃ­ch xuáº¥t rÃ ng buá»™c tham sá»‘ hÃ¬nh há»�c vÃ  tÃ­nh toÃ¡n thá»ƒ tÃ­ch Ä‘áº·c tá»« vector CAD.r   r   r   Ú
cad_sourcez[InverseBimRoute] Solve failedu   Lá»—i Inverse-BIM Solver: r3   Nr   )r   r   r   r   Úsolve_inverse_bim_constraintsr   r8   r9   r:   r   r   r;   )r?   r,   r<   ÚkwargsÚresultr=   s         r   rB   rB   I   sö   € ðÝ-Ñ/Ô/ˆØˆØÔð 	:Ø%,Ô%9ˆF�>Ñ"ØÔ#ð 	BØ)0Ô)AˆFÐ%Ñ&ØÔ!ð 	>Ø'.Ô'=ˆFÐ#Ñ$à6�Ô6ð 
ð 
ØÔ.ð
àð
ð 
ˆð ˆøÝð ð ð Ý×ÒÐ9Ñ:Ô:Ð:ÝÝÔ=Ø5°Ð5Ð5ð
ñ 
ô 
ð ð	øøøøðøøøs   ‚AA Á
B#Á%9BÂB#z/tri-source/reconcileuH   Thá»±c thi Ä‘á»‘i soÃ¡t 3 nguá»“n chÃ¢n lÃ½ theo tham sá»‘ chá»‰ Ä‘á»‹nhc                óR  — 	 t          ¦   «         }|                     | j        | j        | j        | j        pd| j        pd¬¦  «        }d|                     ¦   «         dœS # t          $ r>}t           
                    d¦  «         t          t          j        d|›�¬¦  «        |‚d}~ww xY w)	uP   Ä�á»‘i soÃ¡t khá»‘i lÆ°á»£ng CAD, Thá»‘ng kÃª thÃ©p BBS vÃ  TiÃªn lÆ°á»£ng HSMT.Ú )rA   Ú
bbs_sourceÚhsmt_sourcer#   r$   r0   r1   z![TriSourceRoute] Reconcile failedu   Lá»—i Ä‘á»‘i soÃ¡t Tri-Source: r3   N)r   r6   r   r!   r"   r#   r$   r7   r8   r9   r:   r   r   r;   )r?   r,   r<   r2   r=   s        r   Úreconcile_tri_source_endpointrI   j   sÚ   € ðÝ-Ñ/Ô/ˆØ×6Ò6ØÔ.ØÔ.ØÔ0Ø Ô-Ð3°Ø Ô-Ð3°ð 7ñ 
ô 
ˆð  Ø×'Ò'Ñ)Ô)ð
ð 
ð 	
øõ ð ð ð Ý×ÒÐ<Ñ=Ô=Ð=ÝÝÔ=Ø:°QÐ:Ð:ð
ñ 
ô 
ð ð	øøøøðøøøs   ‚AA Á
B&Á(9B!Â!B&)r,   r-   r.   r-   )r?   r   r,   r-   r.   r-   )r?   r    r,   r-   r.   r-   ) Ú__doc__Ú
__future__r   ÚloggingÚtypingr   Úfastapir   r   r   r   Úpydanticr	   r
   Ú"app.modules.auth.presentation.authr   Ú7app.modules.takeoff.application.drawing_takeoff_servicer   Ú	getLoggerr   r9   Úrouterr   r    Ú_AUTHENTICATED_ROLEÚgetÚdictÚstrr>   ÚpostrB   rI   r   r   r   ú<module>rY      sg  ððð ð
 #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð à =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à ;Ð ;Ð ;Ð ;Ð ;Ð ;ðð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€à	ˆÐCÐDÐ	EÑ	EÔ	E€ðð ð ð ð ˜Yñ ô ð ðLð Lð Lð Lð L 	ñ Lô Lð Lð #�lÐ#]Ð#]Ð#]Ñ^Ô^Ð ð ‡‚ØØ˜˜S˜”>Ø_ð ñ ô ð $+ 7Ð+>Ñ#?Ô#?ðð ð ð ñô ð
ð0 ‡‚ØØ˜˜S˜”>Øhð ñ ô ð $+ 7Ð+>Ñ#?Ô#?ðð ð ð ñô ð
ð8 ‡‚ØØ˜˜S˜”>ØVð ñ ô ð $+ 7Ð+>Ñ#?Ô#?ðð ð ð ñô ð
ð ð r   