§
    Ê2«j3  ã                  óv   — d dl mZ d dlZd dlmZ d dlmZ ddlmZ ddl	m
Z
 ddlmZ  G d	„ d
ee
e¦  «        ZdS )é    )ÚannotationsN)ÚAny)ÚErpDatabaseClienté   )ÚSxdPl1ParserMixin)ÚSxdPl2ParserMixin)ÚSxdRatesMixinc                  ó,   — e Zd ZdZddd„Zdd„Zdd
„ZdS )ÚOfficialSxdIngestionEngineuU   Official Department of Construction (Sá»Ÿ XÃ¢y Dá»±ng Háº£i PhÃ²ng) Ingestion Engine.Ú	Price_RefÚprice_ref_dirÚstrc                ó:   — || _         t          ¦   «         | _        d S )N)r   r   Ú	pg_client)Úselfr   s     úLC:\Projects\DSCons\app\modules\inventory\application\sxd_ingestion\engine.pyÚ__init__z#OfficialSxdIngestionEngine.__init__   s   € Ø*ˆÔÝ*Ñ,Ô,ˆŒˆˆó    Úreturnúlist[dict[str, Any]]c           	     ó  — g }t           j                             | j        d¦  «        }t           j                             |¦  «        r˜t           j                             |d¦  «        }t           j                             |d¦  «        }d}|                     |                      |d|¬¦  «        ¦  «         |                     |                      |d|¬¦  «        ¦  «         t           j                             | j        d¦  «        }t           j                             |¦  «        rMt           j                             |d¦  «        }d	}|                     |                      |d
|¬¦  «        ¦  «         ddh}	t           j                             | j        ¦  «        �rÏt          j        | j        ¦  «        D �]´}
t           j                             | j        |
¦  «        }t           j         	                    |¦  «        r|
|	v rŒL|
 
                    ¦   «                              d¦  «        sŒt|
                     dd¦  «                             ¦   «         }d|› d�}d}g }g }t          j        |¦  «        D ]—}|                     ¦   «         }t           j                             ||¦  «        }|                     d¦  «        r|                     |¦  «         Œa|                     d¦  «        r!d|v sd|v sd|v r|                     |¦  «         Œ˜|D ]-}|                     |                      |||¬¦  «        ¦  «         Œ.|D ]-}|                     |                      |||¬¦  «        ¦  «         Œ.�Œ¶|                     |                      d¬¦  «        ¦  «         |                     |                      d
¬¦  «        ¦  «         |                     |                      d¬¦  «        ¦  «         |                     |                      d
¬¦  «        ¦  «         |S )z8Parse all official SXD documents in Price_Ref directory.zTB 558zA1.-phu-luc-1-t7-10-8-17h-in-trinh-ky.signed639221316246679423.pdfz*2.-phu-luc-2-in-ky-639221316296269313.xlsxuP   ThÃ´ng bÃ¡o sá»‘ 558/TB-SXD ngÃ y 07/08/2026 cá»§a Sá»Ÿ XÃ¢y dá»±ng Háº£i PhÃ²ngz2026-08)ÚperiodÚdoc_refzTB 478z,phu-luc-1-chuan.signed639192057863514961.pdfuP   ThÃ´ng bÃ¡o sá»‘ 478/TB-SXD ngÃ y 30/06/2026 cá»§a Sá»Ÿ XÃ¢y dá»±ng Háº£i PhÃ²ngz2026-06ÚTBÚ u   ThÃ´ng bÃ¡o sá»‘ u+   /TB-SXD cá»§a Sá»Ÿ XÃ¢y dá»±ng Háº£i PhÃ²ng)z.xlsxz.xlsz.pdfz	phu-luc-1Ú	phu_luc_1Úpl1)r   )ÚosÚpathÚjoinr   ÚexistsÚextendÚ_parse_pl1_pdfÚ_parse_pl2_excelÚlistdirÚisdirÚupperÚ
startswithÚreplaceÚstripÚlowerÚendswithÚappendÚ_get_official_labor_ratesÚ_get_official_equipment_shifts)r   Ú	all_itemsÚ	tb558_dirÚpl1_pdfÚpl2_xlsxÚdoc_ref_558Ú	tb478_dirÚpl1_478Údoc_ref_478Ú
known_dirsÚentryÚfull_entry_pathÚtb_numr   r   Úpl1_candidatesÚpl2_candidatesÚfnameÚflÚfpathÚpl1_pathÚpl2_paths                         r   Úparse_all_price_ref_dataz3OfficialSxdIngestionEngine.parse_all_price_ref_data   s!  € à*,ˆ	õ ”G—L’L Ô!3°XÑ>Ô>ˆ	ÝŒ7�>Š>˜)Ñ$Ô$ð 	Ý”g—l’lØØSñô ˆGõ ”w—|’|ØÐGñô ˆHð
 cð ð ×ÒØ×#Ò# G°IÀ{Ð#ÑSÔSñô ð ð ×ÒØ×%Ò% h°yÈ+Ð%ÑVÔVñô ð õ
 ”G—L’L Ô!3°XÑ>Ô>ˆ	ÝŒ7�>Š>˜)Ñ$Ô$ð 		Ý”g—l’lØÐIñô ˆGð cð ð ×ÒØ×#Ò# G°IÀ{Ð#ÑSÔSñô ð ð
  Ð)ˆ
ÝŒ7�>Š>˜$Ô,Ñ-Ô-ñ 	Ýœ DÔ$6Ñ7Ô7ð ñ �Ý"$¤'§,¢,¨tÔ/AÀ5Ñ"IÔ"I�Ý”w—}’} _Ñ5Ô5ð ¸À*Ð9LÐ9LØØ—{’{‘}”}×/Ò/°Ñ5Ô5ð ØàŸš t¨RÑ0Ô0×6Ò6Ñ8Ô8�Øa¨fÐaÐaÐa�Ø"�ð "$�Ø!#�ÝœZ¨Ñ8Ô8ð 5ð 5�EØŸš™œ�BÝœGŸLšL¨¸%Ñ@Ô@�EØ—{’{Ð#4Ñ5Ô5ð 5Ø&×-Ò-¨eÑ4Ô4Ð4Ð4ØŸš VÑ,Ô,ð 5°+ÀÐ2CÐ2CÀ{ÐVXÐGXÐGXÐ\aÐegÐ\gÐ\gØ&×-Ò-¨eÑ4Ô4Ð4øà .ð ð �HØ×$Ò$Ø×+Ò+¨H¸VÈWÐ+ÑUÔUñô ð ð ð !/ð ð �HØ×$Ò$Ø×-Ò-¨h¸vÈwÐ-ÑWÔWñô ð ð ñð 	×Ò˜×7Ò7¸yÐ7ÑIÔIÑJÔJÐJØ×Ò˜×7Ò7¸yÐ7ÑIÔIÑJÔJÐJð 	×Ò˜×<Ò<ÀIÐ<ÑNÔNÑOÔOÐOØ×Ò˜×<Ò<ÀIÐ<ÑNÔNÑOÔOÐOàÐr   Úintc                ó   — |                       ¦   «         }|sdS d}| j                             ¦   «         5 }|                     ¦   «         5 }|D ]}|                     d|d         |d         |d         |d         |d         |                     dd	¦  «        |d
         |d         |d         |                     dd	¦  «        f
¦  «         |dz  }Œ€|                     ¦   «          ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |S )zBExecute full ingestion into PostgreSQL erp_state_published_prices.r   a~  
                        INSERT INTO erp_state_published_prices (
                            id, publish_period, region_code, material_group, material_code,
                            material_name, specifications, unit, state_unit_price_vnd,
                            document_reference, effective_date, notes, created_at, updated_at
                        ) VALUES (
                            gen_random_uuid(), %s, %s, %s, %s,
                            %s, %s, %s, %s,
                            %s, NOW(), %s, NOW(), NOW()
                        )
                        ON CONFLICT (publish_period, region_code, material_code)
                        DO UPDATE SET
                            material_name = EXCLUDED.material_name,
                            specifications = EXCLUDED.specifications,
                            unit = EXCLUDED.unit,
                            state_unit_price_vnd = EXCLUDED.state_unit_price_vnd,
                            document_reference = EXCLUDED.document_reference,
                            notes = EXCLUDED.notes,
                            updated_at = NOW();
                    Úpublish_periodÚregion_codeÚmaterial_groupÚmaterial_codeÚmaterial_nameÚspecificationsr   ÚunitÚstate_unit_price_vndÚdocument_referenceÚnotesr   N)rC   r   Úget_connectionÚcursorÚexecuteÚgetÚcommit)r   r0   Úupserted_countÚconnÚcurÚrows         r   Úingest_to_postgresz-OfficialSxdIngestionEngine.ingest_to_postgresj   s¨  € à×1Ò1Ñ3Ô3ˆ	Øð 	Ø�1àˆØŒ^×*Ò*Ñ,Ô,ð &	°Ø—’‘”ð % #Ø$ð #(ð #(�CØ—K’Kðð*  Ð 0Ô1Ø Ô.ØÐ 0Ô1Ø Ô0Ø Ô0ØŸGšGÐ$4°bÑ9Ô9Ø œKØÐ 6Ô7ØÐ 4Ô5ØŸGšG G¨RÑ0Ô0ðñ+!ô !ð !ðD # aÑ'�N�NØ—’‘”�ðK%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð&	ð &	ð &	ñ &	ô &	ð &	ð &	ð &	ð &	ð &	ð &	øøøð &	ð &	ð &	ð &	ðP Ðs6   ´DÁ	BC,Ã DÃ,C0	Ã0DÃ3C0	Ã4DÄDÄ
DN)r   )r   r   )r   r   )r   rD   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rC   rY   © r   r   r   r      sc   € € € € € ð
 `Ð_ð-ð -ð -ð -ð -ðPð Pð Pð Pðd/ð /ð /ð /ð /ð /r   r   )Ú
__future__r   r   Útypingr   Úapp.core.postgres.erp_clientr   Úsxd_pl1_parserr   Úsxd_pl2_parserr   Ú	sxd_ratesr	   r   r^   r   r   ú<module>re      s¿   ðØ "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø Ð Ð Ð Ð Ð à :Ð :Ð :Ð :Ð :Ð :à -Ð -Ð -Ð -Ð -Ð -Ø -Ð -Ð -Ð -Ð -Ð -Ø $Ð $Ð $Ð $Ð $Ð $ðLð Lð Lð Lð LØØØñLô Lð Lð Lð Lr   