Ë
    [šzj"g  ã                   óâ   — d dl Z d dlmZmZmZmZmZ d dlmZ d dl	m	Z	m
Z
 d dlZd dlZd dlZej                  j                  d¬«        G d„ d«      Zed	k(  r e«       Zej'                  «        yy)
é    N)ÚFontÚ	AlignmentÚPatternFillÚBorderÚSide)Úget_column_letter)ÚdatetimeÚdateúutf-8©Úencodingc                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚDataCleanerAndMergerT32c           
      ó   — i dd“dd“dd“dd“dd	“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“i dd“dd“dd“dd“dd“d d!“d"d!“d#d$“d%d$“d&d'“d(d)“d*d+“d,d-“d.d/“d0d1“d2d1“d3d4“¥i d5d4“d6d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdC“dDdE“dFdG“dHdI“dJdK“dLdM“dNdO“dPdQ“dRdS“dTdU“¥i dVdW“dXdY“dZd[“d\d]“d^d_“d`da“dbdc“ddde“dfdg“dhdg“didg“djdk“dldm“dndo“dpdq“drds“dtdu“¥i dvdw“dxdy“dzd{“d|d}“d~d“d€d�“d‚dƒ“d„d…“d†d‡“dˆd‰“dŠd‹“dŒd�“dŽd�“d�d‘“d’d““d”d•“d–d—“¥i d˜d™“dšd›“dœd�“dždŸ“d d¡“d¢d£“d¤d£“d¥d¦“d§d¨“d©d¨“dªd«“d¬d­“d®d¯“d°d¯“d±d²“d³d´“dµd¶“¥d·d¸d¸d¹dºd»d¼d½d¾œ¥| _         y )¿Nu   tráº§n dÅ©ngu   Tráº§n DÅ©ngu   tráº§n dungu   tráº§n thanh dungu   Tráº§n Thanh DÅ©ngu   nguyá»…n vÄƒn tuÃ¢nu   Nguyá»…n VÄƒn TuÃ¢nu   nguyá»…n vÄƒn tuáº¥nu   Nguyá»…n VÄƒn Tuáº¥nu   nguyÃªn hÆ°u lá»£iu   Nguyá»…n Há»¯u Lá»£iu   nguyÃªn há»¯u lá»£iu   nguyá»…n hÆ°u lá»£iu   nguyá»…n há»¯u lá»£iu4   nguyÃªn há»¯u lá»£i ( kt cáº¯m táº¡i nhÃ  mÃ¡y lÃ m)u5   nguyá»…n hÆ°u lá»£i ( kt cáº¯m táº¡i nhÃ  mÃ¡y lÃ m )u1   nguyÃªn hÆ°u lÆ¡i ( kt cáº¯m táº¡i nha mÃ¡y lÃ m)u3   nguyá»…n hÆ°u lá»£i ( kt cáº¯m táº¡i nha mÃ¡y lÃ m)u9   nguyÃªn hÆ°u lá»£i ( kt cÄƒm táº¡i nha mÃ y hoÃ n thÃ nh)u   nÃ´ng Ä‘Æ°c trÆ°á»�ngu   NÃ´ng Ä�á»©c TrÆ°á»�ngu   nÃ´ng Ä‘á»©c trÆ°á»�ngu   Ä‘á»— quang thuá»·u   Ä�á»— Quang Thá»§yu   Ä‘á»— quang thá»§yu   Ä‘Ãµ quang thuá»·u   nguyá»…n vÄƒn tÃ¹ngu   Nguyá»…n VÄƒn TÃ¹ngu   Ä‘oÃ n thanh nhÃ¢nu   Ä�oÃ n Thanh NhÃ¢nu   Ä‘oÃ n thang nhÃ¢nu   dÆ°Æ¡ng táº¥n hiá»�nu   DÆ°Æ¡ng Táº¥n Hiá»�nu   dÆ°Æ¡g táº¥n hiá»�nu   trá»‹nh há»¯u háº£iu   Trá»‹nh Há»¯u Háº£iu   trinh há»¯u háº£iu   phan vÄƒn hiáº¿uu   Phan VÄƒn Hiáº¿uu   lÃª vÄƒn hoau   LÃª VÄƒn Hoau   lÃª vÄƒn hÃ²au   LÃª VÄƒn HÃ²au   bÃ¹i vÄƒn tuáº¥nu   BÃ¹i VÄƒn Tuáº¥nu   pháº¡m thanh hoÃ nu   Pháº¡m Thanh HoÃ nu   lÃª xuÃ¢n tÆ°Æ¡ngu   LÃª XuÃ¢n TÆ°Æ¡ngu   lÃª xuÃ¢n tuongu   há»“ tiáº¿n sÄ©u   Há»“ Tiáº¿n SÄ©u   há»“ tiáº¿n sá»¹u   ngá»�c dÆ°Æ¡ngu   Ngá»�c DÆ°Æ¡ngu   tráº§n vÄƒn thÆ°á»Ÿngu   Tráº§n VÄƒn ThÆ°á»Ÿngu   nguyá»…n vÄƒn hoanu   Nguyá»…n VÄƒn Hoanu   hoÃ ng phongu   HoÃ ng Phongu   há»¯u nhá»±tu   Há»¯u Nhá»±tu   há»¯u nghá»‹u   Há»¯u Nghá»‹u   xuÃ¢n tÆ°Æ¡ngu   XuÃ¢n TÆ°Æ¡ngu   thanh hoÃ nu   Thanh HoÃ nu
   phÃº vÄ©nhu
   PhÃº VÄ©nhu   vÄƒn lá»‹nhu   VÄƒn Lá»‹nhu   Ä‘Ã´ng (sÆ¡n nÆ°á»›c)u   Ä�Ã´ng (SÆ¡n NÆ°á»›c)u   Ä‘Ã´ng , thÆ°á»Ÿngu   Ä�Ã´ng , ThÆ°á»Ÿngu	   thÆ°á»Ÿngu	   ThÆ°á»Ÿngu   tráº§n vÄƒn hÃ¡tu   Tráº§n VÄƒn HÃ¡tu	   nho xuÃ¢nu	   Nho XuÃ¢nu   nguyáº¿n vÄƒn Ã¢nu   Nguyá»…n VÄƒn Ã‚nu   vÄƒn khÆ°Æ¡ngu   VÄƒn KhÆ°Æ¡ngu   nguyá»…n trÆ°á»�ng háº­nu   Nguyá»…n TrÆ°á»�ng Háº­nu   bÃ¹i hoÃ ng phongu   BÃ¹i HoÃ ng Phongu   báº£ou   Báº£oÚcoiu   CÃ²iu   dÆ°Æ¡ngu   DÆ°Æ¡ngu   hiÃªnu   HiÃªnu   hoÃ nu   HoÃ nu   khá»Ÿiu   VÃµ Quá»‘c Khá»ŸiÚkhoqiru   khÆ¡iu   khÆ°Æ¡ng duy longu   KhÆ°Æ¡ng Duy Longu   lÃª vÄƒn nhÆ°u   LÃª VÄƒn NhÆ°u   lÃª Ä‘Äƒng duyÃªnu   LÃª Ä�Äƒng DuyÃªnu   lÆ°u thanh nháº­t táº£ou   LÆ°u Thanh Nháº­t Táº£ou   nguyá»…n nhÆ° quyá»�nu   Nguyá»…n NhÆ° Quyá»�nu   nguyá»…n quá»‘c khÃ¡nhu   Nguyá»…n Quá»‘c KhÃ¡nhu   nguyá»…n thÃ¡i báº£ou   Nguyá»…n ThÃ¡i Báº£ou   nguyá»…n thá»‹ thuu   Nguyá»…n Thá»‹ Thuu   pháº¡m vÄƒn linhu   Pháº¡m VÄƒn Linhu   pháº¡m vÄƒn tÃ¹ngu   Pháº¡m VÄƒn TÃ¹ngu   trÆ°Æ¡ng cÃ´ng minhu   TrÆ°Æ¡ng CÃ´ng Minhu   trÆ°Æ¡ng vÄƒn nghÄ©au   TrÆ°Æ¡ng VÄƒn NghÄ©au   tráº§n vÄƒn tÃ¹ngu   Tráº§n VÄƒn TÃ¹ngu   Ä‘Ã o hÃ³a emu   Ä�Ã o HÃ³a Emu   huá»³nh cÃ´ng nÃ´ngu   Huá»³nh CÃ´ng NÃ´ngu   lÃ¢m vÄƒn nÃ´ngu   LÃ¢m VÄƒn NÃ´ngu   vÅ© duy háº­uu   VÅ© Duy Háº­uu   Ä‘áº¡i phÆ°á»›cu   Ä�áº¡i PhÆ°á»›cu   Ä‘áº¡tu   Ä�áº¡tu   vá»‹nhu   Vá»‹nhu   giÃ¡p vÄƒn sÃ¡uu   GiÃ¡p VÄƒn SÃ¡uu   quÃ¡ch vÄƒn vÅ©u   QuÃ¡ch VÄƒn VÅ©u   thÃ¡i thÃ nh lÆ°uu   ThÃ¡i ThÃ nh LÆ°uu   thÃ¡i vÄƒn tiáº¿nu   ThÃ¡i VÄƒn Tiáº¿nu   Ä‘Äƒng hiá»‡pu   Ä�Äƒng Hiá»‡pu   duy tÃ iu   Duy TÃ iu   nguyá»…n minh thoáº¡iu   Nguyá»…n Minh Thoáº¡iu   há»“ vÄƒn trÃ²n emu   Há»“ VÄƒn TrÃ²n Emu   vay lÆ°Æ¡ng thuáº­nu   Vay LÆ°Æ¡ng Thuáº­nu   vay lÆ°á»£ng thuáº­nu   há»“ vÄƒn viá»‡tu   Há»“ VÄƒn Viá»‡tu   lÃª vÄƒn thÃ nhu   LÃª VÄƒn ThÃ nhu   lÃª vÄƒn thÃ nh-kt má»›iu   phan vÄƒn viá»‡t-kt má»›iu   Phan VÄƒn Viá»‡tu   bÃ¹i vÄƒn giangu   BÃ¹i VÄƒn Giangu   quang khÃ¡i chá»‰nhu   Quang Kháº£iu   quang kháº£iu   thanh tuyáº¿nu   Thanh Tuyáº¿nu
   duy khÃ¡nhu
   Duy KhÃ¡nhu   nguyá»…n vÄƒn nÄƒmu   Nguyá»…n VÄƒn NÄƒmu   TrÆ°Æ¡ng VÅ© Linhu   Trá»‹nh BÃ¡ Quyá»�nu   LÃª VÄƒn Háº¡nhu   Pháº¡m VÄƒn Vá»�ngu
   Quang TÃ¢nu
   LÃª ThÃ nhu   Nguyá»…n Ngá»�c Tháº¡ch)u   trÆ°Æ¡ng vÅ© linhu   trinh bÃ¡ quyá»�nu   trá»‹nh bÃ¡ quyá»�nu   lÃª vÄƒn háº¡nhu   pháº¡m vÄƒn vá»�ngu
   quang tÃ¢nu
   lÃª thÃ nhu   nguyá»…n ngá»�c tháº¡ch)Úkythuat_map)Úselfs    úHC:\Claw 2\Bao cao - Hanh chinh\Bao cao lam mau\clean_and_merge_tuan32.pyÚ__init__z DataCleanerAndMergerT32.__init__   s4  € ðp
Ø˜Nðp
à˜>ðp
ð  Ð!5ðp
ð "Ð#8ð	p
ð
 #Ð$:ðp
ð !Ð"8ðp
ð "Ð#9ðp
ð "Ð#9ðp
ð #Ð$:ðp
ð CÐDZðp
ð DÐE[ðp
ð @ÐAWðp
ð BÐCYðp
ð HÐI_ðp
ð $Ð%=ðp
ð  %Ð&>ð!p
ð" !Ð"6ñ#p
ð$ !Ð"6ð%p
ð&  Ð!5ð'p
ð( "Ð#8ð)p
ð* !Ð"6ð+p
ð, !Ð"6ð-p
ð. #Ð$:ð/p
ð0 "Ð#9ð1p
ð2 "Ð#8ð3p
ð4  Ð!6ð5p
ð6 Ð 2ð7p
ð8 ˜Nð9p
ð: ˜_ð;p
ð< Ð 2ð=p
ð> !Ð"6ð?p
ð@  Ð!4ðAp
ðB Ð2ðCp
ðD Ð0òEp
ðF Ð 1ðGp
ðH Ð.ðIp
ðJ $Ð%<ðKp
ðL !Ð"6ðMp
ðN ˜NðOp
ðP ˜NðQp
ðR ˜NðSp
ðT ˜_ðUp
ðV ˜=ðWp
ðX ˜,ðYp
ðZ ˜=ð[p
ð\ $Ð%<ð]p
ð^ !Ð"6ð_p
ð` ˜ðap
ðb Ð 2ðcp
ðd ˜ðep
ðf  Ð!4ògp
ðh ˜_ðip
ðj 'Ð(Bðkp
ðl  Ð!4ðmp
ðn �Wðop
ðp �6ðqp
ðr �yðsp
ðt �Wðup
ðv �Wðwp
ðx Ð)ðyp
ðz Ð)ð{p
ð| Ð(ð}p
ð~  Ð!4ðp
ð@ ˜_ðAp
ðB  Ð!4ðCp
ðD &Ð'@ðEp
ðF $Ð%<ðGp
ðH %Ð&>òIp
ðJ #Ð$:ðKp
ðL !Ð"6ðMp
ðN Ð 2ðOp
ðP  Ð!4ðQp
ðR "Ð#8ðSp
ðT #Ð$:ðUp
ðV  Ð!4ðWp
ðX ˜_ðYp
ðZ "Ð#8ð[p
ð\ Ð0ð]p
ð^ ˜_ð_p
ð` Ð0ðap
ðb �hðcp
ðd �hðep
ðf Ð0ðgp
ðh Ð0ðip
ðj  Ð!4òkp
ðl  Ð!4ðmp
ðn ˜_ðop
ðp ˜
ðqp
ðr $Ð%<ðsp
ðt !Ð"6ðup
ðv "Ð#8ðwp
ðx #Ð$9ðyp
ðz Ð 2ð{p
ð| Ð0ð}p
ð~ 'Ð(9ðp
ð@ (Ð);ðAp
ðB Ð0ðCp
ðD " >ðEp
ðF ˜NðGp
ðH ˜_ðIp
ðJ ˜,ðKp
ðN !Ð"6ñOp
ðP "5Ø!6Ø#8Ø0Ø"6Ø&Ø&Ø'@ò_p
ˆÕó    c                 ó~  — |€yt        |t        «      r|j                  d«      S t        |t        «      r|j                  d«      S t        |t        t
        f«      rF	 t        ddd«      }|t        d«      j                  t	        |«      ¬«      z   }|j                  d«      S t        |«      j                  «       }t        j                  d|«      r|S t        j                  d	|«      }|r7|j                  d
«      › d|j                  d«      › d|j                  d«      › �S |S #  t        t	        |«      «      cY S xY w)z;Converts Excel cell date values to DD/MM/YYYY string formatNú%d/%m/%Yik  é   é   r	   )Údaysz^\d{2}/\d{2}/\d{4}$z^(\d{4})-(\d{2})-(\d{2})é   Ú/é   é   )Ú
isinstancer	   Ústrftimer
   ÚintÚfloatÚ
__import__Ú	timedeltaÚstrÚstripÚreÚmatchÚgroup)r   ÚvalÚbaseÚdÚsÚms         r   Ú
parse_datez"DataCleanerAndMergerT32.parse_date€   s  € àˆ;ØÜ�cœ8Ô$Ø—<‘< 
Ó+Ð+Ü�cœ4Ô Ø—<‘< 
Ó+Ð+Ü�cœC¤˜<Ô(ð%Ü  b¨"Ó-�Øœ: jÓ1×;Ñ;ÄÀSÃÐ;ÓJÑJ�Ø—z‘z *Ó-Ð-ô �‹H�N‰NÓˆÜ�8‰8Ð*¨AÔ.ØˆHÜ�H‰HÐ0°!Ó4ˆÙØ—g‘g˜a“j�\  1§7¡7¨1£: ,¨a°·±¸³
¨|Ð<Ð<Øˆøð%Üœ3˜s›8“}Ò$ús   ÁAD$ Ä$D<c                 ó€  — |€yt        |«      j                  «       }|syt        j                  d|t        j                  ¬«      }g }|D �]^  }|j                  «       }|sŒt        j
                  dd|«      }t        j
                  dd|«      j                  «       }|s |j                  |j                  «       «       Œut        j
                  dd|t        j                  ¬«      j                  «       }|sŒ­|j                  «       }g }|D ]{  }	|	j                  «       |	k(  r t        |	«      d	kD  r|j                  |	«       Œ6|j                  t        |	«      d	kD  r|	d
   j                  «       |	d	d z   n|	j                  «       «       Œ} |j                  dj                  |«      «       �Œa |sydj                  |«      S )z$Clean and normalize technician namesNz[,+\n/&]+|\band\b)Úflagsz\s+Ú z\(.*?\)Ú u   kt\s+c[Äƒa]m\s+t[aii].*$r    r   ú , )
r'   r(   r)   ÚsplitÚ
IGNORECASEÚsubÚappendÚupperÚlenÚjoin)
r   Únamer/   ÚpartsÚnormalized_partsÚpartÚ
part_cleanÚwordsÚnormalized_wordsÚws
             r   Únormalize_kythuatz)DataCleanerAndMergerT32.normalize_kythuat—   sz  € àˆ<ØÜ�‹I�O‰OÓˆÙØô —‘Ð-¨q¼¿¹ÔFˆØÐÜˆDØ—:‘:“<ˆDÙØÜ—6‘6˜& # tÓ,ˆDÜŸ™ 
¨B°Ó5×;Ñ;Ó=ˆJÙØ ×'Ñ'¨¯
©
«Ô5ØäŸ™Ð ;¸RÀÔSU×S`ÑS`Ôa×gÑgÓiˆJÙØà×$Ñ$Ó&ˆEØ!ÐÛ�Ø—7‘7“9 ’>¤c¨!£f¨q¢jØ$×+Ñ+¨AÕ.à$×+Ñ+ÄCÈÃFÈQÂJ¨A¨a©D¯J©J«L¸1¸Q¸R¸5Ò,@ÐTU×T[ÑT[ÓT]Õ^ð	 ð
 ×#Ñ# C§H¡HÐ-=Ó$>Ö?ð+ ñ.  ØØ�z‰zÐ*Ó+Ð+r   c                 ó°  — |€y|j                  «       j                  «       }|| j                  v r| j                  |   S |j                  d«      D �cg c]  }|j                  «       ‘Œ }}g }|D ]P  }|j                  «       }|| j                  v r|j	                  | j                  |   «       Œ@|j	                  |«       ŒR dj                  |«      S c c}w )z9Map cleaned technician names using standard/extended dictNÚ,r6   )Úlowerr(   r   r7   r:   r=   )r   r>   Ú
name_lowerÚpr?   Úmapped_partsÚp_lowers          r   Úapply_kythuat_mapz)DataCleanerAndMergerT32.apply_kythuat_map½   sÆ   € àˆ<ØØ—Z‘Z“\×'Ñ'Ó)ˆ
Ø˜×)Ñ)Ñ)Ø×#Ñ# JÑ/Ð/ð %)§J¡J¨s¤OÓ4¡O˜q�—‘• OˆÐ4ØˆÛˆAØ—g‘g“iˆGØ˜$×*Ñ*Ñ*Ø×#Ñ# D×$4Ñ$4°WÑ$=Õ>à×#Ñ# AÕ&ð ð �z‰z˜,Ó'Ð'ùò 5s   ÁCc                 óê
  — t        j                  |d¬«      }|j                  }g }d}t        ||j                  dz   «      D �]  }|j                  |d«      j                  }	|j                  |d«      j                  }
|j                  |d«      j                  }|j                  |d«      j                  }|j                  |d«      j                  }|j                  |d	«      j                  }|j                  |d
«      j                  }|j                  |d«      j                  }|j                  |d«      j                  }|j                  |d«      j                  }|j                  |d«      j                  }|j                  |d«      j                  }|j                  |d«      j                  }|j                  |d«      j                  }|j                  |d«      j                  }|j                  |d«      j                  }|j                  ||«      j                  }|	€|
€|€|€|€|€|€|€|€
|€|€|€|€�Œü|
�t        |
«      j                  «       nd}|j                  «       dv r�Œ-|r|}d}d}|�t        |«      j                  «       nd}|�t        |«      j                  «       nd}|�t        |«      j                  «       nd}|j                  «       dk(  rd}n/|j                  «       dk(  rd}n|r|j                  «       dk7  rd}|}d} |�t        |«      j                  «       nd}!|�t        |«      j                  «       nd}"|�t        |«      j                  «       nd}#|#j                  «       dk(  rd} n+|"j                  «       dk(  rd} n|!j                  «       dk(  rd} |r| j                  |«      nd}$|$r| j                  |$«      n|$}%| j                  |«      }&| j                  |«      }'|r|n|}(d})|�,t        |«      j                  «       j                  «       dk(  rd})|}*|*�Pt        |*t        «      r4	 t        t        |*j!                  dd«      j                  «       «      «      }*n	 t        |*«      }*|	}+|	�.	 t        t        t        |	«      j!                  dd«      «      «      }+|�t        |«      j                  «       nd},|,dv rd},|�t        |«      j                  «       nd}-|-dv rd}-|�t        |«      j                  «       nd}.|.dv rd}.|,d v r|.s|,}.d},|+�|(r|,s|-s|s
|s|*s|%s|.sd!}.|j#                  |+|(|,|-||&|'|||*|%| |)|.d"œ«       �Œ |S #  Y ŒâxY w#  Y ŒéxY w#  Y Œ¾xY w)#z8Cleans a single weekly report file and returns data rowsT©Ú	data_onlyNr    r   r   é   é   é   é   é   é	   é
   é   r   é   é   é   é   r5   )u   Tá»”NGu   Tá»”NG Cá»˜NGÚXõ   Má»›iõ   NhÃ¢nõ   Bá»™ÚDKÚHTõ   Ä�LrH   Ú=)ÚNoner5   )u   KHÃ”NG CÃ“ MáºªUõ   KHÃ”NG LÃ€M MáºªUrg   ©ÚsttÚnha_mayÚma_ptÚma_nmÚ
khach_hangÚ	ngay_nhanÚngay_htÚloai_mauÚspÚso_luongÚky_thuatÚ
trang_thaiÚco_dhÚghi_chu)ÚopenpyxlÚload_workbookÚactiveÚrangeÚmax_rowÚcellÚvaluer'   r(   r;   rF   rN   r1   r!   r#   r$   Úreplacer:   )/r   Ú	file_pathÚ	start_rowÚghi_chu_colÚwbÚwsÚ	data_rowsÚcurrent_nha_mayÚrri   rj   rk   rl   rm   rn   ro   Úloai_moiÚ	loai_nhanÚloai_borr   rs   Útrang_thai_dkÚtrang_thai_htÚtrang_thai_dlru   rv   Únha_may_strrp   rq   Úloai_moi_strÚloai_nhan_strÚloai_bo_strrt   Ú	tt_dk_strÚ	tt_ht_strÚ	tt_dl_strÚky_thuat_cleanÚky_thuat_mappedÚngay_nhan_cleanÚngay_ht_cleanÚnha_may_finalÚco_dh_finalÚsl_finalÚ	stt_finalÚma_pt_finalÚma_nm_finalÚghi_chu_finals/                                                  r   Úclean_source_filez)DataCleanerAndMergerT32.clean_source_fileÐ   sb  € ä×#Ñ# I¸Ô>ˆØ�Y‰Yˆàˆ	Øˆä�y "§*¡*¨q¡.×1ˆAØ—'‘'˜!˜Q“-×%Ñ%ˆCØ—g‘g˜a “m×)Ñ)ˆGØ—G‘G˜A˜q“M×'Ñ'ˆEØ—G‘G˜A˜q“M×'Ñ'ˆEØŸ™  A›×,Ñ,ˆJØŸ™  1›×+Ñ+ˆIØ—g‘g˜a “m×)Ñ)ˆGà—w‘w˜q !“}×*Ñ*ˆHØŸ™  1›×+Ñ+ˆIØ—g‘g˜a “n×*Ñ*ˆGà—w‘w˜q "“~×+Ñ+ˆHØ—w‘w˜q "“~×+Ñ+ˆHàŸG™G A r›N×0Ñ0ˆMØŸG™G A r›N×0Ñ0ˆMØŸG™G A r›N×0Ñ0ˆMà—G‘G˜A˜r“N×(Ñ(ˆEØ—g‘g˜a Ó-×3Ñ3ˆGà�  °E°MÀeÀmØÐ" yÐ'8¸W¸_ØÐ  YÐ%6¸7¸?ØÐ  XÐ%5¸'¸/Ùà29Ð2Eœ#˜g›,×,Ñ,Ô.È2ˆKà× Ñ Ó"Ð&AÑAÙáØ"-�àˆHØˆBØ4<Ð4Hœ3˜x›=×.Ñ.Ô0ÈbˆLØ6?Ð6KœC 	›N×0Ñ0Ô2ÐQSˆMØ29Ð2Eœ#˜g›,×,Ñ,Ô.È2ˆKà×!Ñ!Ó# sÒ*Ø"‘Ø×$Ñ$Ó&¨#Ò-Ø"‘Ù ×!2Ñ!2Ó!4¸Ò!;Ø!�Ø �àˆJØ6CÐ6Oœ˜MÓ*×0Ñ0Ô2ÐUWˆIØ6CÐ6Oœ˜MÓ*×0Ñ0Ô2ÐUWˆIØ6CÐ6Oœ˜MÓ*×0Ñ0Ô2ÐUWˆIà�‰Ó  CÒ'Ø!‘
Ø—‘Ó" cÒ)Ø!‘
Ø—‘Ó" cÒ)Ø"�
áAI˜T×3Ñ3°HÔ=ÈtˆNÙHV˜d×4Ñ4°^ÔDÐ\jˆOà"Ÿo™o¨iÓ8ˆOØ ŸO™O¨GÓ4ˆMá+6™K¸OˆMàˆKØÐ ¤S¨£Z×%5Ñ%5Ó%7×%=Ñ%=Ó%?À3Ò%FØ!�àˆHØÐ#Ü˜h¬Ô,ðÜ#&¤u¨X×-=Ñ-=¸cÀ2Ó-F×-LÑ-LÓ-NÓ'OÓ#P™ðÜ#& x£=˜ð ˆIØˆðÜ #¤E¬#¨c«(×*:Ñ*:¸3ÀÓ*CÓ$DÓ E�Ið 16Ð0Aœ#˜e›*×*Ñ*Ô,ÀtˆKØ˜lÑ*Ø"�à05Ð0Aœ#˜e›*×*Ñ*Ô,ÀtˆKØ˜lÑ*Ø"�à4;Ð4GœC ›L×.Ñ.Ô0ÈTˆMØ Ñ,Ø $�àÐGÑGÙ$Ø$/�MØ"�àÐ$©¹{ÑS^Ñgqñ  {Cñ  LTñ  ]lÙ$Ø$7�Mà×ÑØ Ø(Ø$Ø$Ø(Ø,Ø(Ø$ØØ$Ø+Ø(Ø$Ø(ñö ði 2ðJ ÐøðkÙûðÙûðÙús$   Ñ2U Ñ7U'Ò-U.Õ U$Õ'U+Õ.U2c                 ó  — t        j                  |d¬«      }|d   }g }d}d}d}t        ||dz   «      D �]Ð  }t        d|j                  dz   «      D �	cg c]  }	|j	                  ||	«      j
                  ‘Œ  }
}	t        d„ |
D «       «      rŒW|
d	   }|
d   }|
d
   }|
d   }|
d   }|
d   }|
d   }|
d   }|
d   }|
d   }|
d   }|
d   }|
d   }|
d   }|
d   }|�2t        |«      j                  «       rt        |«      j                  «       }d}|€|€|€
|€|€|€|€d}d}|s‘|�-t        |«      j                  «       j                  «       dk(  rd}nb|�-t        |«      j                  «       j                  «       dk(  rd}n3|�-t        |«      j                  «       j                  «       dk(  rd}n|�d}d}|sx|r't        |«      j                  «       j                  «       nd}|r't        |«      j                  «       j                  «       nd}|dk(  rd}n|dk(  rd}n|dk(  rd }n
|d!k(  rd }nd}|r| j                  |«      nd}|r| j                  |«      nd} |j                  d|d|�t        |«      j                  «       nd|�t        |«      j                  «       nd| j                  |«      | j                  |«      ||�t        |«      j                  «       nd|sdnd| |d|�t        |«      j                  «       ndd"œ«       �ŒÓ |S c c}	w )#u0   Cleans W32.xlsx sheet nháº­p from row 476 to 489TrP   u   nháº­piÜ  ié  Nr    c              3   ó`   K  — | ]&  }|d u xs t        |«      j                  «       dk(  –— Œ( y ­w)Nr5   )r'   r(   )Ú.0Úxs     r   Ú	<genexpr>z9DataCleanerAndMergerT32.clean_w32_file.<locals>.<genexpr>l  s,   è ø€ ÐG¹h¸�1˜�9Ò4¤ A£§¡£°"Ñ 4Ó4¹hùs   ‚,.r   r   r   rS   rU   rW   rX   rY   r   rZ   r]   é   é   é   Fr^   r_   r`   r5   rb   ÚXONGrc   u
   Ä�ANG LÃ€Mrd   u
   CHÆ¯A LÃ€Mrh   )rw   rx   rz   Ú
max_columnr|   r}   Úallr'   r(   r;   rF   rN   r:   r1   )!r   r   r‚   rƒ   r„   r€   Úend_rowr…   r†   ÚcolÚrow_valsri   rn   rj   Ú	ma_so_maurm   Ú
hien_trangr‡   rˆ   Úloai_dcÚloai_lailairv   Úgo_valrs   Ú	ngay_xongÚ	status_kyÚis_support_onlyrp   rt   Úhien_trang_strÚstatus_ky_strÚ
tech_cleanÚtech_normalizeds!                                    r   Úclean_w32_filez&DataCleanerAndMergerT32.clean_w32_file_  si  € ä×#Ñ# I¸Ô>ˆØ�‰\ˆàˆ	Øˆ	Øˆàˆä�y '¨A¡+×.ˆAÜ9>¸qÀ"Ç-Á-ÐRSÑBSÔ9TÓUÑ9T°#˜Ÿ™  3›×-Ó-Ð9TˆHÐUÜÑG¹hÓGÔGØà˜1‘+ˆCØ  ™ˆIØ˜q‘kˆGØ  ™ˆIà! !™ˆJØ! !™ˆJà ‘{ˆHØ  ™ˆIØ˜r‘lˆGØ" 2™,ˆKà˜r‘lˆGØ˜b‘\ˆFØ ‘|ˆHØ  ™ˆIØ  ™ˆIàÐ"¤s¨7£|×'9Ñ'9Ô';Ü"% g£,×"4Ñ"4Ó"6�à#ˆOØÐ  ZÐ%7¸HÐ<LÐQZÐQbÐgnÐgvð  |Gð  |Oð  T\ð  TdØ"&�àˆHÙ"ØÐ'¬C°«M×,?Ñ,?Ó,A×,GÑ,GÓ,IÈSÒ,PØ&‘HØÐ*¬s°9«~×/CÑ/CÓ/E×/KÑ/KÓ/MÐQTÒ/TØ&‘HØÐ(¬S°«\×-?Ñ-?Ó-A×-GÑ-GÓ-IÈSÒ-PØ&‘HØ Ð,Ø&�HàˆJÙ"ÙDN¤ Z£×!6Ñ!6Ó!8×!>Ñ!>Ô!@ÐTV�ÙBK¤ I£× 4Ñ 4Ó 6× <Ñ <Ô >ÐQS�à  CÒ'Ø!%‘JØ# vÒ-Ø!%‘JØ# |Ò3Ø!&‘JØ# |Ò3Ø!&‘Jà!%�Já=E˜×/Ñ/°Ô9È4ˆJÙDN˜d×4Ñ4°ZÔ@ÐTXˆOà×ÑØØ*ØØ3<Ð3Hœ˜Y›×-Ñ-Ô/ÈdØ9CÐ9Oœc *›o×3Ñ3Ô5ÐUYØ!Ÿ_™_¨YÓ7ØŸ?™?¨9Ó5Ø$Ø-3Ð-?”c˜&“k×'Ñ'Ô)ÀTÙ%4™A¸$Ø+Ø(ØØ3:Ð3Fœ3˜w›<×-Ñ-Ô/ÈDñö ð{ /ð\ Ðùò[ Vs   Á#L
c                 ót
  — d}d}d}t        d|«       | j                  |dd¬«      }t        dt        |«      › d	�«       t        d
|«       | j                  |dd¬«      }t        dt        |«      › d�«       t        d|«       | j                  |«      }t        dt        |«      › d�«       g }d}d }	|D ]5  }
|
d   �|
d   |	k7  r
|dz  }|
d   }	||
d<   nd |
d<   |j	                  |
«       Œ7 d }	|D ]5  }
|
d   �|
d   |	k7  r
|dz  }|
d   }	||
d<   nd |
d<   |j	                  |
«       Œ7 i }|D ]5  }
|
d   sŒ	|
d   €Œ|
d   ||
d   j                  «       j                  «       <   Œ7 |D ]_  }
|
d   r!|
d   j                  «       j                  «       nd}|r||v r	||   |
d<   n|dz  }|||<   ||
d<   nd |
d<   |j	                  |
«       Œa |}t        d|› dt        |«      › �«       d}t        j                  |d¬«       t        j                  j                  |d«      }t        j                  «       }|j                  }d|_        g d¢}t        dd¬«      }t!        ddd ¬!«      }t#        d"d"d¬#«      }t%        t'        d$¬%«      t'        d$¬%«      t'        d$¬%«      t'        d$¬%«      ¬&«      }t)        |d«      D ]4  \  }}|j+                  d||«      }||_        ||_        ||_        ||_        Œ6 t)        |d'«      D ]›  \  }}
|
d   |
d   |
d(   |
d)   |
d*   |
d+   |
d,   |
d-   |
d.   |
d/   |
d0   |
d1   |
d2   |
d3   g}t)        |d«      D ]M  \  }}|j+                  |||«      }||_        |dk(  rt#        d"¬4«      |_        Œ7|d5k(  sŒ=t#        d"¬4«      |_        ŒO Œ� g d6¢}t)        |d«      D ]"  \  }}||j4                  t7        |«         _        Œ$ |j;                  |«       t        d7|› �«       t        j                  j                  |d8«      } ddddd9œ}!ddddd:œ}"d}#|D ]m  }
|
d-   }$|
d1   }%|
d/   }&|$|!v r|!|$xx   dz  cc<   n|!j=                  |$d«      dz   |!|$<   |%|"v r|"|%xx   dz  cc<   n|"j=                  |%d«      dz   |"|%<   |&sŒi|#|&z  }#Œo d;t?        j@                  «       jC                  d<«      › d=|› d>t        |«      › d?|#› d@|!dA   › dB|"dC   › dD|!dE   › dF|"dG   › dH|!dI   › dJ|"dK   › dL|!d    › dM|"d    › dN|› dO�}'tE        | dPdQ¬R«      5 }(|(jG                  |'«       d d d «       t        dS| › �«       y # 1 sw Y   ŒxY w)TNu   TUáº¦N 32 (03.08-09.08).xlsxu   KQM TUáº¦N 32.xlsxzW32.xlsxzCleaning file 1:r   r¥   )r€   r�   zCleaned z rows from file 1zCleaning file 2:rS   é   z rows from file 2zCleaning file 3 (W32):z rows from file 3r   ri   r    rj   r5   z Combined data. Total factories: z, Total rows: zda lam sachT)Úexist_okz$Tuan_32_03.08-09.08_DA-LAM-SACH.xlsxu   LÃ m sáº¡ch)ÚSttu	   NhÃ  mÃ¡yu	   MÃ£ PT/KHu   MÃ£ NMu   KhÃ¡ch hÃ ngu   NgÃ y nháº­nu   NgÃ y HTu   Loáº¡i máº«uÚSPu   Sá»‘ lÆ°á»£ngu   Ká»¹ thuáº­tu   Tráº¡ng thÃ¡iu   CÃ³ Ä�Hu   Ghi chÃºrY   )ÚboldÚsizeÚD9E1F2Úsolid)Ústart_colorÚ	end_colorÚ	fill_typeÚcenter)Ú
horizontalÚverticalÚ	wrap_textÚthin)Ústyle)ÚleftÚrightÚtopÚbottomr   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   )rÈ   rX   )rS   r¥   r¥   r¦   r¥   r[   r[   rX   é   rV   r   rX   rV   é(   z"Cleaned and merged data saved to: zBao_cao_lam_sach_Tuan32.md)r_   r`   ra   N)rb   rc   rd   NuY  # BÃ�O CÃ�O LÃ€M Sáº CH Dá»® LIá»†U - TUáº¦N 32

## ThÃ´ng tin chung
- **File gá»‘c 1 (ChÃ­nh)**: TUáº¦N 32 (03.08-09.08).xlsx
- **File gá»‘c 2 (KhÃ¡ch láº»)**: KQM TUáº¦N 32.xlsx
- **File gá»‘c 3 (Nháº­t kÃ½ W32)**: W32.xlsx (Sheet: nháº­p, DÃ²ng 476-489)
- **File sáº¡ch Ä‘áº§u ra**: Tuan_32_03.08-09.08_DA-LAM-SACH.xlsx
- **NgÃ y xá»­ lÃ½**: r   u@   

## Thá»‘ng kÃª dá»¯ liá»‡u gá»™p
- **Tá»•ng sá»‘ nhÃ  mÃ¡y**: u&   
- **Tá»•ng sá»‘ dÃ²ng dá»¯ liá»‡u**: u6   
- **Tá»•ng sáº£n lÆ°á»£ng sáº£n pháº©m lÃ m máº«u**: uˆ    cÃ¡i

| Loáº¡i máº«u | Sá»‘ lÆ°á»£ng | Tráº¡ng thÃ¡i | Sá»‘ lÆ°á»£ng |
|----------|----------|------------|----------|
| Máº«u Má»›i | r_   u    | Ä�Ã£ KÃ½ (DK) | rb   u    |
| Máº«u NhÃ¢n | r`   u    | HoÃ n ThÃ nh (HT) | rc   u    |
| Máº«u Bá»™ | ra   u    | Ä�ang lÃ m (Ä�L) | rd   u    |
| ChÆ°a rÃµ | u    | ChÆ°a rÃµ | uH   |

## CÃ¡c thao tÃ¡c Ä‘Ã£ thá»±c hiá»‡n
1. **Gá»™p vÃ  chuáº©n hÃ³a 3 file nguá»“n**: Ä�á»�c dá»¯ liá»‡u tá»« file chÃ­nh (tá»« dÃ²ng 12), file khÃ¡ch láº» (tá»« dÃ²ng 5) vÃ  file W32 (tá»« dÃ²ng 476 Ä‘áº¿n 489).
2. **Ä�Ã¡nh láº¡i sá»‘ thá»© tá»± (Stt) nhÃ  mÃ¡y**: Ä�áº£m báº£o sá»‘ thá»© tá»± tÄƒng liÃªn tá»¥c tá»« 1 Ä‘áº¿n u?  .
3. **Chuáº©n hÃ³a ká»¹ thuáº­t viÃªn**: Sá»­ dá»¥ng bá»™ quy táº¯c chuáº©n hÃ³a tÃªn ká»¹ thuáº­t viÃªn (bao gá»“m cÃ¡c ká»¹ thuáº­t viÃªn má»›i cá»§a tuáº§n 32).
4. **PhÃ¢n tÃ¡ch cá»™t Loáº¡i máº«u vÃ  Tráº¡ng thÃ¡i**: Ã�nh xáº¡ Ä‘Ãºng cÃ¡c trÆ°á»�ng tÆ°Æ¡ng á»©ng tá»« cá»™t ban Ä‘áº§u vá»� Ä‘á»‹nh dáº¡ng chuáº©n.
rE   r   r   zMarkdown report written to: )$ÚprintrŸ   r<   rº   r:   r(   r;   ÚosÚmakedirsÚpathr=   rw   ÚWorkbookry   Útitler   r   r   r   r   Ú	enumerater|   ÚfontÚfillÚ	alignmentÚborderÚcolumn_dimensionsr   ÚwidthÚsaveÚgetr	   Únowr"   ÚopenÚwrite))r   Úf1Úf2Úf3Úrows1Úrows2Úrows3Úcombined_rowsÚcurrent_new_sttÚlast_seen_orig_sttr†   Úfactory_to_sttÚnm_keyÚtotal_factoriesÚ
output_dirÚoutput_pathÚwb_outÚws_outÚheadersÚheader_fontÚheader_fillÚheader_alignmentÚthin_borderÚcol_idxÚhr|   Úrow_idxÚrow_datar,   Ú
col_widthsÚirE   Úreport_pathÚtypes_countÚstatus_countÚ	total_qtyÚlmÚttÚqtyÚreport_contentÚfs)                                            r   ÚrunzDataCleanerAndMergerT32.runº  sV  € Ø+ˆØ!ˆØˆäÐ  "Ô%Ø×&Ñ& r°RÀRÐ&ÓHˆÜ�œ˜U›˜Ð$5Ð6Ô7äÐ  "Ô%Ø×&Ñ& r°QÀBÐ&ÓGˆÜ�œ˜U›˜Ð$5Ð6Ô7äÐ&¨Ô+Ø×#Ñ# BÓ'ˆÜ�œ˜U›˜Ð$5Ð6Ô7àˆØˆð "ÐÛˆAØ�‰xÐ#Ø�U‘8Ð1Ò1Ø# qÑ(�OØ)*¨5©Ð&Ø*��%’à��%‘Ø× Ñ  Õ#ð ð "ÐÛˆAØ�‰xÐ#Ø�U‘8Ð1Ò1Ø# qÑ(�OØ)*¨5©Ð&Ø*��%’à��%‘Ø× Ñ  Õ#ð ð ˆÛˆAØ�‹|  %¡Ñ 4Ø?@À¹x�˜q ™|×1Ñ1Ó3×9Ñ9Ó;Ò<ð ó ˆAØ56°y²\�Q�y‘\×'Ñ'Ó)×/Ñ/Ô1ÀrˆFÙØ˜^Ñ+Ø-¨fÑ5�A�e’Hà# qÑ(�OØ-<�N 6Ñ*Ø.�A�e’Hà��%‘Ø× Ñ  Õ#ð ð *ˆÜÐ0°Ð0AÀÔPSÐTaÓPbÐOcÐdÔeà#ˆ
Ü
�‰�J¨Õ.Ü—g‘g—l‘l :Ð/UÓVˆä×"Ñ"Ó$ˆØ—‘ˆØ$ˆŒò IˆÜ ¨2Ô.ˆÜ!¨hÀ(ÐV]Ô^ˆÜ$°À8ÐW[Ô\ÐÜÜ˜FÔ#Ü˜VÔ$Ü˜6Ô"Ü˜fÔ%ô	
ˆô $ G¨QÖ/‰JˆG�QØ—;‘;˜q '¨1Ó-ˆDØ#ˆDŒIØ#ˆDŒIØ-ˆDŒNØ%ˆD�Kð 0ô $ M°1Ö5‰JˆG�Qà�%‘Ø�)‘Ø�'‘
Ø�'‘
Ø�,‘Ø�+‘Ø�)‘Ø�*‘Ø�$‘Ø�*‘Ø�*‘Ø�,‘Ø�'‘
Ø�)‘ðˆHô  !*¨(°AÖ 6‘�˜Ø—{‘{ 7¨G°SÓ9�Ø)�”Ø˜a’<Ü%.¸(Ô%C�D•NØ “]Ü%.¸(Ô%C�D•Nñ !7ð# 6ò2 Kˆ
Ü˜j¨!Ö,‰DˆAˆqØCDˆF×$Ñ$Ô%6°qÓ%9Ñ:Õ@ð -ð 	�‰�KÔ ÜÐ2°;°-Ð@ÔAô —g‘g—l‘l :Ð/KÓLˆà !¨A°qÀÑBˆØ q°¸!Ñ<ˆØˆ	ÛˆAØ�:‘ˆBØ�<‘ˆBØ�J‘-ˆCØ�[Ñ Ø˜B“ 1Ñ$”à"-§/¡/°"°aÓ"8¸1Ñ"<�˜B‘Ø�\Ñ!Ø˜RÓ  AÑ%Ô à#/×#3Ñ#3°B¸Ó#:¸QÑ#>�˜RÑ ÚØ˜SÑ ‘	ð ðô  —|‘|“~×.Ñ.¨zÓ:Ð;ð <ð .Ð.ð /&Ü&)¨-Ó&8Ð%9ð :6Ø6?°[ð Að ˜WÑ%Ð&Ð&9¸,ÀtÑ:LÐ9Mð NØ˜WÑ%Ð&Ð&=¸lÈ4Ñ>PÐ=Qð RØ˜FÑ#Ð$Ð$:¸<ÈÑ;NÐ:Oð PØ˜4Ñ Ð! °¸dÑ1CÐ0Dð Esð tCð  sDð Dð/ˆô6 �+˜s¨WÕ5¸Ø�G‰G�NÔ#÷ 6äÐ,¨[¨MÐ:Õ;÷ 6Ð5ús   ÔT.Ô.T7N)
Ú__name__Ú
__module__Ú__qualname__r   r1   rF   rN   rŸ   rº   r	  © r   r   r   r      s-   „ òr
òhò.$,òL(ò&Mò^Yóvn<r   r   Ú__main__)rw   Úopenpyxl.stylesr   r   r   r   r   Úopenpyxl.utilsr   r	   r
   r)   rÔ   ÚsysÚstdoutÚreconfigurer   r
  Úcleanerr	  r  r   r   Ú<module>r     s_   ðÛ ß FÕ FÝ ,ß #Û 	Û 	Û 
à ‡
�
× Ñ  Ð Ô (÷]	<ñ ]	<ð~ ˆzÒÙ%Ó'€GØ‡K�K…Mð r   