§
    ùž’jí"  ã                   ój  — d dl Z d dlmZ d dlmZmZmZ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¦   «         Ze                     d¦  «         ed	¦  «         ed¬
¦  «         e eg d¢¦  «        ¦  «        fdede
dedz  deeef         deeef         f
d„¦   «         Ze                     d¦  «         ed	¦  «         ed¬
¦  «         ed¬
¦  «         e eg d¢¦  «        ¦  «        fdedede
dedz  dedz  deeef         deeef         fd„¦   «         ZdS )é    N)ÚAny)Ú	APIRouterÚBackgroundTasksÚDependsÚFileÚFormÚHTTPExceptionÚ
UploadFile)Úrequire_role)ÚErpDatabaseClient)ÚDocumentProcessingServicezdscons.api.erp.documents_uploadz/documents/upload.)Údefault)Ú
superadminÚdirectorÚpmÚsite_engineerÚ
accountantÚbackground_tasksÚfileÚproject_codeÚcurrent_userÚreturnc                 óž  — 	 t                                ¦   «         5 }|                     ¦   «         5 }|                     d¦  «         |                     ¦   «         }|st          dd¬¦  «        ‚t          |d         ¦  «        }ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   d}|rŸt                                ¦   «         5 }|                     ¦   «         5 }|                     d|f¦  «         |                     ¦   «         }|rt          |d         ¦  «        }ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |j                             ¦   «         }	t          ¦   «         }
|
 
                    |	|j        ¦  «        \  }}}}}t                                ||j        ||¬¦  «        }d	dl}d
|                     ¦   «         j        dd…                              ¦   «         › �}t          j        |j        |j        ¦  «        }||||dd||dddœ
}t                                |¦  «        }|d         }||||dddœ}t                                ||¦  «        }|                      |
j        |||j        |¬¦  «         t-          |¦  «        |d<   |rñt          |d         ¦  «        |                     d¦  «        |                     d¦  «        |                     d¦  «        r'|                     d¦  «                             ¦   «         nd|                     dd¦  «        |                     d¦  «        dœ|d<   d|                     d¦  «        › d|                     d¦  «        › d|                     d¦  «        › d�|d <   n
d|d<   d|d <   |S # t2          $ r#}t          dt          |¦  «        ¬¦  «        ‚d}~ww xY w)!u\   Táº£i lÃªn vÄƒn báº£n cÃ³ sáºµn, cháº¡y ná»�n AI phÃ¢n loáº¡i vÃ  trÃ­ch xuáº¥t dá»¯ liá»‡u.z!SELECT id FROM companies LIMIT 1;é�  uJ   KhÃ´ng tÃ¬m tháº¥y cÃ´ng ty nÃ o trong há»‡ thá»‘ng Ä‘á»ƒ gÃ¡n vÄƒn báº£n.©Ústatus_codeÚdetailÚidNz8SELECT id FROM projects WHERE project_code = %s LIMIT 1;)Ú	file_hashÚfilenameÚfile_size_bytesÚ
project_idr   zTEMP-é   ÚCVÚincomingu7   AI Ä‘ang trÃ­ch xuáº¥t dá»¯ liá»‡u, vui lÃ²ng Ä‘á»£i...Ú
processing)
Ú
company_idr"   Údocument_codeÚdocument_titleÚdocument_typeÚcategoryÚfile_urlr   Úsummary_contentÚstatus)Ú	file_pathÚfile_formatr!   r   r.   Úverification_status©Údoc_idÚfile_path_strr    r0   Úis_duplicater(   r)   Ú
created_atÚversion_numberzv1.0Úduplicate_reason)r   r(   r)   r6   r7   r8   Úduplicate_infou]   âš ï¸� Cáº£nh bÃ¡o: VÄƒn báº£n vá»«a táº£i lÃªn bá»‹ trÃ¹ng láº·p vá»›i vÄƒn báº£n Ä‘Ã£ cÃ³ [z - z] (z).Úwarning_message)Ú
erp_clientÚget_connectionÚcursorÚexecuteÚfetchoner	   Ústrr   Úreadr   Ú	save_filer    Úcheck_duplicate_documentÚuuidÚuuid4ÚhexÚupperÚsanitize_document_titleÚcreate_documentÚupdate_documentÚadd_taskÚrun_pipelineÚboolÚgetÚ	isoformatÚ	Exception)r   r   r   r   ÚconnÚcurÚrowr'   r"   Úfile_contentÚdoc_servicer,   r/   Ú	file_sizer0   r   Úduplicate_matchrD   Ú	temp_codeÚclean_initial_titleÚdoc_payloadÚdocr3   Úsync_payloadÚes                            úKC:\Projects\DSCons\app\modules\core\presentation\documents_upload_routes.pyÚupload_documentr_      s€  € ðl<å×&Ò&Ñ(Ô(ð 		,¨DØ—’‘”ð , #Ø—’Ð?Ñ@Ô@Ð@Ø—l’l‘n”n�Øð Ý'Ø$'Økðñ ô ð õ !  T¤™^œ^�
ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð		,ð 		,ð 		,ñ 		,ô 		,ð 		,ð 		,ð 		,ð 		,ð 		,ð 		,øøøð 		,ð 		,ð 		,ð 		,ð ˆ
Øð 		4Ý×*Ò*Ñ,Ô,ð 4°Ø—[’[‘]”]ð 4 cØ—K’KØRØ%˜ñô ð ð Ÿ,š,™.œ.�CØð 4Ý%(¨¨T¬¡^¤^˜
ð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4ð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4ð ”y—~’~Ñ'Ô'ˆõ 0Ñ1Ô1ˆØAL×AVÒAVØ˜$œ-ñB
ô B
Ñ>ˆ�)˜Y¨°Yõ
 %×=Ò=ØØ”]Ø%Ø!ð	 >ñ 
ô 
ˆð 	ˆˆˆà:˜DŸJšJ™LœLÔ,¨R¨a¨RÔ0×6Ò6Ñ8Ô8Ð:Ð:ˆ	Ý7ÔOØŒM˜4œ=ñ
ô 
Ðð
 %Ø$Ø&Ø1Ø!Ø"Ø Ø"ØXØ"ð
ð 
ˆõ ×(Ò(¨Ñ5Ô5ˆØ�T”ˆð #Ø&Ø(Ø"Ø"Ø#/ð
ð 
ˆõ ×(Ò(¨°Ñ>Ô>ˆð 	×!Ò!ØÔ$ØØ#Ø”]Ø#ð 	"ñ 	
ô 	
ð 	
õ # ?Ñ3Ô3ˆˆNÑØð 	*å˜/¨$Ô/Ñ0Ô0Ø!0×!4Ò!4°_Ñ!EÔ!EØ"1×"5Ò"5Ð6FÑ"GÔ"Gà"×&Ò& |Ñ4Ô4ð˜o×1Ò1°,Ñ?Ô?×IÒIÑKÔKÐKàØ"1×"5Ò"5Ð6FÈÑ"OÔ"OØ$3×$7Ò$7Ð8JÑ$KÔ$Kð	%ð 	%ˆCÐ Ñ!ð oÐp÷  qDò  qDð  ETñ  qUô  qUð  oð  oð  Zi÷  Zmò  Zmð  n~ñ  Zô  Zð  oð  oð  DS÷  DWò  DWð  Xjñ  Dkô  Dkð  oð  oð  oð Ð!Ñ"Ð"ð %)ˆCÐ Ñ!Ø%)ˆCÐ!Ñ"àˆ
øÝð <ð <ð <Ý¨µC¸±F´FÐ;Ñ;Ô;Ð;øøøøð<øøøs¨   ‚N ›B%°ABÂB%ÂB	ÂB%ÂB	ÂB%ÂN Â%B)Â)N Â,B)Â- N ÃEÃ"AD1Ä%EÄ1D5	Ä5EÄ8D5	Ä9EÄ<N ÅEÅN ÅEÅIN Î
OÎ)OÏOz"/documents/{doc_id}/upload-versionÚdraftr3   Úchange_summaryÚsignature_statusc              ƒ   óþ  K  — 	 t                                | ¦  «        }|st          dd¬¦  «        ‚|                     ¦   «         ƒ d{V —†}t	          ¦   «         }|                     ||j        ¦  «        \  }	}
}}}d}|                     d¦  «        r0|                     |d         |                     dd¦  «        ¦  «        }|                     |
|¦  «        }	 | 	                    |p|                     d	d¦  «        |pd
|                     dd¦  «        |j        ¬¦  «        ƒ d{V —†}n# t          $ r |pdddg dœ}Y nw xY wt	          j        |j        |j        ¦  «        }|	|
|||||pd|p|                     dd¦  «        |dddœ}t                                | |¬¦  «        }|                     |j        |d         |
|j        |¬¦  «         |S # t          $ r#}t          dt          |¦  «        ¬¦  «        ‚d}~ww xY w)uo   Táº£i lÃªn phiÃªn báº£n má»›i / báº£n sá»­a Ä‘á»•i / báº£n Ä‘Ã£ kÃ½ Ä‘Ã³ng dáº¥u thay tháº¿ cho vÄƒn báº£n cÅ©.i”  u$   KhÃ´ng tÃ¬m tháº¥y vÄƒn báº£n gá»‘c.r   NÚ r/   r0   Úpdfr-   u   Ná»™i dung phiÃªn báº£n má»›ir)   u	   báº£n_cÅ©)Úold_textÚnew_textÚfilename_oldÚfilename_newu#   Táº£i lÃªn báº£n cáº­p nháº­t má»›iu   KhÃ´ng phÃ¡t hiá»‡n thay Ä‘á»•iu   Chá»� rÃ  soÃ¡t)Úsummary_of_changesÚfinancial_impactÚlegal_impactÚkey_differencesr`   rj   Úpending_review)r,   r/   r!   r0   r   r)   rb   ra   Údiff_analysisr.   r1   )Úparent_doc_idÚpayloadr   r2   r   )r;   Úget_documentr	   rA   r   rB   r    rN   Úextract_textÚcompare_document_versionsrP   rH   Úcreate_document_versionrK   rL   r@   )r3   r   r   ra   rb   r   Ú
parent_docrT   rU   r,   r/   rV   r0   r   rf   rg   Údiff_resÚclean_version_titleÚversion_payloadÚnew_version_docr]   s                        r^   Úupload_document_versionr{   �   sª  è è € ðF<Ý×,Ò,¨VÑ4Ô4ˆ
Øð 	`Ý¨CÐ8^Ð_Ñ_Ô_Ð_ð "ŸYšY™[œ[Ð(Ð(Ð(Ð(Ð(Ð(ˆÝ/Ñ1Ô1ˆØAL×AVÒAVØ˜$œ-ñB
ô B
Ñ>ˆ�)˜Y¨°Yð
 ˆØ�>Š>˜+Ñ&Ô&ð 	Ø"×/Ò/Ø˜;Ô'¨¯ª¸ÀuÑ)MÔ)Mñô ˆHð ×+Ò+¨I°{ÑCÔCˆð	Ø(×BÒBØ!ÐJ Z§^¢^Ð4EÀrÑ%JÔ%JØ!ÐDÐ%DØ'Ÿ^š^Ð,<¸kÑJÔJØ!œ]ð	 Cñ ô ð ð ð ð ð ð ˆHˆHøõ ð 	ð 	ð 	à&4Ð&]Ð8]Ø$EØ 1Ø#%ð	ð ˆHˆHˆHð	øøøõ 8ÔOØŒM˜4œ=ñ
ô 
Ðð !Ø"Ø(Ø&Ø"Ø1Ø 0Ð ;°GØ,ð YØ�|Š|Ð0Ð2WÑXÔXØ%Ø&Ø#3ð
ð 
ˆõ %×<Ò<Ø ¨/ð =ñ 
ô 
ˆð
 	×!Ò!ØÔ$Ø" 4Ô(Ø#Ø”]Ø#ð 	"ñ 	
ô 	
ð 	
ð ÐøÝð <ð <ð <Ý¨µC¸±F´FÐ;Ñ;Ô;Ð;øøøøð<øøøs>   „CG ÃAD) Ä(G Ä)D?Ä<G Ä>D?Ä?BG Ç
G<ÇG7Ç7G<)ÚloggingÚtypingr   Úfastapir   r   r   r   r   r	   r
   Ú"app.modules.auth.presentation.authr   Úapp.core.postgres.erp_clientr   Ú8app.modules.core.application.document_processing_servicer   Ú	getLoggerÚloggerÚrouterr;   Úpostr@   Údictr_   r{   © ó    r^   ú<module>r‰      s“  ðØ €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð <Ð ;Ð ;Ð ;Ð ;Ð ;Ø :Ð :Ð :Ð :Ð :Ð :Ø ^Ð ^Ð ^Ð ^Ð ^Ð ^à	ˆÔ	Ð<Ñ	=Ô	=€Ø	ˆ‰Œ€ØÐÑ Ô €
ð ‡‚Ð Ñ!Ô!ð �t˜C‘y”yØ#˜t¨DÐ1Ñ1Ô1Ø#* 7ØˆÐTÐTÐTÑUÔUñ$ô $ð	u<ð u<Ø%ðu<à
ðu<ð ˜‘*ðu<ð �s˜C�x”.ð	u<ð 
ˆ#ˆsˆ(„^ðu<ð u<ð u<ñ "Ô!ðu<ðp ‡‚Ð1Ñ2Ô2ð �t˜C‘y”yØ!% ¨dÐ!3Ñ!3Ô!3Ø#' 4°Ð#8Ñ#8Ô#8Ø#* 7ØˆÐTÐTÐTÑUÔUñ$ô $ðQ<ð Q<ØðQ<à%ðQ<ð ðQ<ð ˜$‘Jð	Q<ð
 ˜D‘jðQ<ð �s˜C�x”.ðQ<ð 
ˆ#ˆsˆ(„^ðQ<ð Q<ð Q<ñ 3Ô2ðQ<ð Q<ð Q<rˆ   