+
    Ò÷Äj-C  ã                   ó$  € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ]P                  P                  ^ ]P                  P                  ]P                  P                  ]4      4      4       ^ RIt]P                  P                  R4      t] R2t] R2t] R2tRRR	R
RRRRRRRR
RRRRRRRR
RRRR
RRRR
RR/tRRR	R RR!RR"RR#RR$RR%RR&RR'RR(RR)RR*RR+RR,RR-/tRR.RR/RR//tRR0RR1/tR2 tR3 tR4 t]R58X  d   ]P8                  ! ]! 4       4       R# R# )6uº  ç»™ ä¸‰éƒ¨é—¨é€�æœˆ_2026.json çš„å®¢æˆ·è¡Œè¡¥ã€Œå½’å±žé”€å”®å‘˜ã€�å­—æ®µï¼Œå¹¶é‡�å»ºé›†å›¢å�£å¾„æ•°ç»„ã€‚

èƒŒæ™¯ï¼ˆ2026-10-05ï¼‰ï¼š
  çœ‹æ�¿é¡µè¦�ä¸Šå·¥ä½œå�°ï¼Œå¿…é¡»å�šè¡Œçº§æ•°æ�®æŽˆæ�ƒï¼ˆé�žç®¡ç�†å‘˜å�ªèƒ½çœ‹è‡ªå·±çš„å®¢æˆ·ï¼‰ã€‚
  ä½† customers æ•°ç»„åŽŸæœ¬å�ªæœ‰ {month, dept, cust, amt, amt_2025, grp} â€”â€” **æ²¡æœ‰å½’å±žå­—æ®µ**ï¼Œ
  æƒ³æŒ‰äººè¿‡æ»¤éƒ½æ— ä»Žä¸‹æ‰‹ã€‚æ•…ä»Ž æ•°æ�®/customer_sp_map.json å¼•å…¥å½’å±žã€‚

æŽˆæ�ƒè§„åˆ™ï¼ˆå¯¹é½�æ—¢å®šçº¢çº¿ï¼‰ï¼š
  Â· é�ž admin/gmï¼šå�ªçœ‹ sales å�«è‡ªå·±å§“å��çš„å®¢æˆ·
  Â· æ— å½’å±žå®¢æˆ·ï¼ˆsales=nullï¼‰ï¼šä»… admin/gm å�¯è§�
  Â· **é›†å›¢å�£å¾„ï¼šä»… admin/gm å�¯è§�** â€”â€” å› ä¸º 49 ä¸ªé›†å›¢é‡Œæœ‰ 7 ä¸ªè·¨å¤šä¸ªé”€å”®å‘˜
    ï¼ˆå¦‚ å¤©éš†/ä½°å¥¥èŽ±å�š/ä¸½ç�  = åˆ˜å­�ç ”+åˆ˜æ–°å…ƒï¼Œåœ£æ¹˜ = æ�Žæ±Ÿè¾‰+èµµäº‘æµ©ï¼‰ï¼Œ
    æŒ‰å�•äººè¿‡æ»¤ä¼šå¾—å‡ºã€Œå�ªå±žäºŽæˆ‘çš„é‚£ä¸ªé›†å›¢ã€�è¿™ç§�ä¼šè¯¯å¯¼çš„å�‡é›†å›¢ã€‚
    â†’ customers_grp æ¯�è¡Œå¸¦ sales_listï¼ˆæˆ�å‘˜å½’å±žé›†å�ˆï¼‰ä¸Ž mixed æ ‡è®°ï¼Œä¾›å‰�ç«¯åˆ¤å®šã€‚

é“�å¾‹ï¼š
  Â· å�ªåŠ å­—æ®µï¼Œä¸�æ”¹ä»»ä½•é‡‘é¢� â†’ Î£ amt ä¸Ž Î£ amt_2025 å¿…é¡»ä¸�å�˜ï¼ˆè‡ªæ£€ï¼‰
  Â· å¹‚ç­‰ï¼šé‡�å¤�è¿�è¡Œç»“æžœä¸€è‡´

ç”¨æ³•ï¼šenv -u PYTHONPATH -u VIRTUAL_ENV /usr/bin/python3 è„šæœ¬/apply_sales_owner.py
N)ÚdefaultdictÚ~u   /Desktop/Hermesè¾“å‡º-å·¥ä½œç±»u!   /æ•°æ�®/ä¸‰éƒ¨é—¨é€�æœˆ_2026.jsonu   /æ•°æ�®/customer_sp_map.jsonu'   æ·±åœ³å¸‚é›…ä¸ºä¸–çºªç§‘æŠ€æœ‰é™�å…¬å�¸u	   é™ˆæºªå­�u   æµ™æ±Ÿå¤§å­¦u   å�´äº‘u$   æ½®å·žå‡¯æ™®ç”Ÿç‰©åŒ–å­¦æœ‰é™�å…¬å�¸u	   èµµäº‘æµ©u   æµ™æ±Ÿå†œæž—å¤§å­¦u	   æ�¨å¤©é›„u,   ä¼˜è�”ç‘žåº·(ä¸Šæµ·)åŸºå› ç§‘æŠ€æœ‰é™�å…¬å�¸u   åˆ˜æ¬£u   æµ™æ±Ÿçœ�äººæ°‘åŒ»é™¢u   ä¸­å±±å¤§å­¦u	   éŸ©è¿œæ€€u   æ�­å·žç™¾è™¹å•†è´¸æœ‰é™�å…¬å�¸u	   å®‹å­¦ä¼Ÿu   æˆ�éƒ½æ³“ç››ç”Ÿç‰©æœ‰é™�å…¬å�¸u   ä»»é‘«u$   æ�­å·žå¥•æ–‡ç”Ÿç‰©ç§‘æŠ€æœ‰é™�å…¬å�¸u,   ç”Ÿå·¥ç”Ÿç‰©å·¥ç¨‹(ä¸Šæµ·)è‚¡ä»½æœ‰é™�å…¬å�¸u	   å¼ æ–‡è�¶u   æµ™æ±Ÿä¸­åŒ»è�¯å¤§å­¦u?   æ¨ªæ¸ è¯ºä¼˜ç”Ÿç‰©ç§‘æŠ€ï¼ˆå�—é€šï¼‰æœ‰é™�å…¬å�¸ä¸Šæµ·åˆ†å…¬å�¸u   æ¸©å·žå¤§å­¦u   æˆ�éƒ½ä¸­åŒ»è�¯å¤§å­¦uö   ç”¨æˆ· 2026-10-06 æ‹�æ�¿ï¼šè°�ä¸‹å�•å½’è°�ã€‚2026 å¹´è¯¥å®¢æˆ·è®¢å�•=é™ˆæºªå­� 8.80 ä¸‡ï¼ˆ2026-09 é”€å”®æ‹“å±•éƒ¨ï¼‰+ åˆ˜æ–°å…ƒ 0.99 ä¸‡ï¼ˆ2026-06 å¤§å®¢æˆ·éƒ¨ï¼‰ï¼›å®¢æˆ·çº§å½’å±žä¸ºå�•å€¼ï¼Œæ•´æˆ·ï¼ˆ9.79 ä¸‡ï¼‰å½’é‡‘é¢�ä¸»ä¸‹å�•äºº é™ˆæºªå­�ã€‚u€   2026 ä¸‹å�•æ‹†è§£ å�´äº‘ 7.26 / å�¶ä¿¡ç¦� 2.13 / è¢�æ®¿æžœ 0.93 / ä¾¯æµ·ç‘œ 0.72 â†’ ä¸»ä¸‹å�•äºº å�´äº‘ï¼ˆç”Ÿå‘½ç§‘å­¦éƒ¨ï¼‰ã€‚uÉ   2026 ä¸‹å�•æ‹†è§£ èµµäº‘æµ© 1.64 / é»„æ–‡æ‰� 1.61 â†’ ä¸»ä¸‹å�•äºº èµµäº‘æµ©ï¼ˆå¤§å®¢æˆ·éƒ¨ï¼‰ã€‚â˜…ä½Žç½®ä¿¡åº¦ï¼šä¸¤äººé‡‘é¢�è¿‘ä¹Žå¯¹å�Šï¼ˆ1.8% å·®ï¼‰ï¼Œå½“å™ªå£°ï¼›ä»�æŒ‰è§„åˆ™åˆ¤ç»™é‡‘é¢�å¤§è€…ã€‚ur   2026 ä¸‹å�•æ‹†è§£ æ�¨å¤©é›„ 1.76 / å�´äº‘ 1.06 / å�¶ä¿¡ç¦� 0.17 â†’ ä¸»ä¸‹å�•äºº æ�¨å¤©é›„ï¼ˆé”€å”®æ‹“å±•éƒ¨ï¼‰ã€‚uÑ   2026 ä¸‹å�•æ‹†è§£ åˆ˜æ¬£ 0.77 / å¾�å�“å‡¡ 0.50 â†’ ä¸»ä¸‹å�•äºº åˆ˜æ¬£ï¼ˆé”€å”®æ‹“å±•éƒ¨Â·éƒ¨é—¨ç»�ç�†ï¼Œé�ž KPI é”€å”®å‘˜ï¼‰ã€‚â˜…ä¸»ä¸‹å�•äººä¸ºç®¡ç�†è€…ï¼šæŒ‰ç”¨æˆ·ã€Œå…¨æ”¹ã€�æŒ‡ä»¤ä»�æ”¹ï¼Œå�•ç‹¬æ ‡æ³¨ã€‚u^   2026 ä¸‹å�•æ‹†è§£ å�´äº‘ 1.01 / ä¾¯æµ·ç‘œ 0.13 â†’ ä¸»ä¸‹å�•äºº å�´äº‘ï¼ˆç”Ÿå‘½ç§‘å­¦éƒ¨ï¼‰ã€‚uu   2026 ä¸‹å�•æ‹†è§£ éŸ©è¿œæ€€ 0.61 / çŽ‹è¯—é¦™ 0.27 / é»„å»ºå�Ž 0.15 â†’ ä¸»ä¸‹å�•äºº éŸ©è¿œæ€€ï¼ˆç”Ÿå‘½ç§‘å­¦éƒ¨ï¼‰ã€‚ud   2026 ä¸‹å�•æ‹†è§£ å®‹å­¦ä¼Ÿ 0.78 / è¢�æ®¿æžœ 0.20 â†’ ä¸»ä¸‹å�•äºº å®‹å­¦ä¼Ÿï¼ˆé”€å”®æ‹“å±•éƒ¨ï¼‰ã€‚u^   2026 ä¸‹å�•æ‹†è§£ ä»»é‘« 0.77 / é™ˆæºªå­� 0.14 â†’ ä¸»ä¸‹å�•äºº ä»»é‘«ï¼ˆé”€å”®æ‹“å±•éƒ¨ï¼‰ã€‚u±   2026 ä¸‹å�•æ‹†è§£ å�´äº‘ 0.38 / å�¶ä¿¡ç¦� 0.35 â†’ ä¸»ä¸‹å�•äºº å�´äº‘ï¼ˆç”Ÿå‘½ç§‘å­¦éƒ¨ï¼‰ã€‚â˜†è¿‘ä¼¼å¹³å±€ï¼ˆå·®é¢� 7.9%ï¼Œæœªè¾¾ã€Œä½Žç½®ä¿¡åº¦ã€�é˜ˆå€¼ä½†ä¸€å¹¶æŠ«éœ²ï¼‰ã€‚ua   2026 ä¸‹å�•æ‹†è§£ å¼ æ–‡è�¶ 0.48 / æ�œå»º 0.15 â†’ ä¸»ä¸‹å�•äºº å¼ æ–‡è�¶ï¼ˆé”€å”®æ‹“å±•éƒ¨ï¼‰ã€‚u^   2026 ä¸‹å�•æ‹†è§£ å�´äº‘ 0.49 / å�¶ä¿¡ç¦� 0.06 â†’ ä¸»ä¸‹å�•äºº å�´äº‘ï¼ˆç”Ÿå‘½ç§‘å­¦éƒ¨ï¼‰ã€‚uÑ   2026 ä¸‹å�•æ‹†è§£ åˆ˜æ¬£ 0.20 / å¼ æ–‡è�¶ 0.16 â†’ ä¸»ä¸‹å�•äºº åˆ˜æ¬£ï¼ˆé”€å”®æ‹“å±•éƒ¨Â·éƒ¨é—¨ç»�ç�†ï¼Œé�ž KPI é”€å”®å‘˜ï¼‰ã€‚â˜…ä¸»ä¸‹å�•äººä¸ºç®¡ç�†è€…ï¼šæŒ‰ç”¨æˆ·ã€Œå…¨æ”¹ã€�æŒ‡ä»¤ä»�æ”¹ï¼Œå�•ç‹¬æ ‡æ³¨ã€‚u^   2026 ä¸‹å�•æ‹†è§£ å�´äº‘ 0.25 / è¢�æ®¿æžœ 0.09 â†’ ä¸»ä¸‹å�•äºº å�´äº‘ï¼ˆç”Ÿå‘½ç§‘å­¦éƒ¨ï¼‰ã€‚u°   2026 ä¸‹å�•æ‹†è§£ é™ˆæºªå­� 0.10 / ä»»é‘« 0.10 â†’ ä¸»ä¸‹å�•äºº é™ˆæºªå­�ï¼ˆé”€å”®æ‹“å±•éƒ¨ï¼‰ã€‚â˜†è¿‘ä¼¼å¹³å±€ï¼ˆå·®é¢� ~0%ï¼Œå› ä¸‡å…ƒå››èˆ�äº”å…¥ï¼›åŽŸæ•°æ�®æŒ‰å…ƒåˆ†ï¼‰ã€‚Úlow_confidenceÚowner_is_manageru+   å�´äº‘ 0.38 vs å�¶ä¿¡ç¦� 0.35ï¼ˆå·® 7.9%ï¼‰u*   é™ˆæºªå­� 0.10 vs ä»»é‘« 0.10ï¼ˆå·® ~0%ï¼‰c                 ó,   € \        \        V 4      ^4      # )é   )ÚroundÚfloat©Úxs   &ôL   /Users/liuxinyuan/Desktop/Hermesè¾“å‡º-å·¥ä½œç±»/è„šæœ¬/apply_sales_owner.pyÚr2r   p   s   € Ü”�q“˜1ÓÐó    c                 óä  € \          R2p \        P                  P                  V 4      '       dù    \        P
                  ! \        P                  ! V RR7      4      ;'       g    / P                  R4      ;'       g    / pVP                  4        UUu/ uF�  w  r#V'       g   K  V'       g   K  \        V4      P                  4       \        V4      P                  4       8w  g   KP  \        V4      P                  4       \        V4      P                  4       bKƒ  	  pppV'       d   V#   \        P
                  ! \        P                  ! \          R2RR7      4      p\        V\        4      '       d   TMVP                  R	. 4      p/ pV F¢  p\        V\         4      '       g   K  VP                  R
4      '       g   K4  VP                  R4      ;'       g    VP                  R4      ;'       g    RP                  4       p	V	'       g   K€  \        VR
,          4      P                  4       WI&   K¤  	  V# u uppi   \         d   p\        RT R24        Rp?EL0Rp?ii ; i  \         d    / u # i ; i)uO  è¯»é›†å›¢æ˜ å°„ï¼šå®¢æˆ·å�� â†’ é›†å›¢å��ï¼ˆä¸Ž è„šæœ¬/apply_group_rollup.py å�Œæº�ï¼Œä¿�è¯�å�£å¾„ä¸€è‡´ï¼‰ã€‚

æ�ƒå¨�æº�ï¼šæ•°æ�®/diag_mappings.json çš„ cust_to_groupï¼ˆå®˜æ–¹ã€Šè¯Šæ–­åŽŸæ–™&ç”Ÿå‘½ç§‘å­¦å®¢æˆ·æ¸…å�•ã€‹
ã€Œé›†å›¢ç®€ç§° â†’ æˆ�å‘˜å®¢æˆ·ã€�ï¼ŒçœŸå½’å±ž k!=vï¼‰ã€‚å…œåº•ï¼šæ•°æ�®/pricing/_key_customers.json çš„ groupã€‚
u   /æ•°æ�®/diag_mappings.jsonúutf-8©ÚencodingÚcust_to_groupu)     âš ï¸� diag_mappings.json è¯»å�–å¤±è´¥(u   )ï¼Œå›žé€€ _key_customers.jsonNu#   /æ•°æ�®/pricing/_key_customers.jsonÚ	customersÚgroupÚnameÚcustÚ )ÚWÚosÚpathÚexistsÚjsonÚloadÚioÚopenÚgetÚitemsÚstrÚstripÚ	ExceptionÚprintÚ
isinstanceÚlistÚdict)
ÚdmÚc2gÚkÚvÚgmÚeÚkdataÚrowsÚrÚnms
             r   Ú	load_gmapr4   t   sÜ  € ô ˆ3Ð(Ð	)€BÜ	‡w�w‡~�~�b×Òð	aÜ—9’9œRŸWšW R°'Ô:Ó;×AÐA¸r×FÑFÀÓW×]Ð]Ð[]ˆCØ=@¿Y¹Y¼[ô C¹[±T°QÜô 1Üô 1Ü!$ Q£§¡£´3°q³6·<±<³>Ñ!Aô 1”#�a“&—,‘,“.¤# a£&§,¡,£.Ò0¹[ˆBñ CçØ�	ð ðÜ—	’	œ"Ÿ'š'¤Q CÐ'JÐ"KÐV]Ô^Ó_ˆÜ" 5¬$×/Ò/‰u°U·Y±Y¸{ÈBÓ5OˆØˆÛˆAÜ˜!œT×"Ô" q§u¡u¨W§~¤~Ø—e‘e˜F“m×:Ð: q§u¡u¨V£}×:Ð:¸×AÑAÓC�ß‘2Ü   7¥›_×2Ñ2Ó4�B“Fñ	 ð
 ˆ	ùóCøô ô 	aÜÐ=¸a¸SÐ@^Ð_×`Ò`ûð	aûô ô ØŠ	ðúsx   °2H7 Á#H7 Á<H7 ÂH1Â#H1Â-2H1Ã$5H1ÄH7 Ä(A7I Æ$I Æ=I ÇI Ç.I È	'I È1H7 È7IÉIÉIÉI/É.I/c                  ó4  a€ \         P                  ! \        P                  ! \        R R7      4      ;'       g    / P                  R4      ;'       g    / p V P                  4        UUu/ uFJ  w  rV'       g   K  V'       g   K  \        V4      P                  4       \        V4      P                  4       bKL  	  p pp\        4       pVP                  4        UUu0 uF  w  rW8w  g   K  VkK  	  ppp\         P                  ! \        P                  ! \        R R7      4      pVP                  R4      ;'       g    . p. pV F�  pVP                  R4      ;'       g    RP                  4       p	\        P                  V	4      ;'       g    V P                  V	4      p
V	\        9   d   VP                  V	4       \        P                  ! V
4      VR&   K‘  	  \        R 4      pV Fú  pVP                  R4      ;'       g    VP                  R4      pW¸R	,          VR
,          V3,          pTR;;,          VP                  R4      ;'       g    R,          uu&   TR;;,          VP                  R4      ;'       g    R,          uu&   VR,          P!                  VP                  R4      4       VR,          P!                  VP                  R4      ;'       g    R4       Kü  	  . pVP                  4        F›  w  w  pprÍ\#        VR,          4      pTP                  R	TR
TRTR\%        VR,          4      R\%        VR,          4      RWÄ9   d   TMRR\'        VR,          4      ^8”  d   \'        VR,          4      M^RVR\'        V4      ^8„  /	4       K�  	  VP)                  R R7       \%        \+        R V 4       4      4      p\%        \+        R V 4       4      4      p\%        \+        R V 4       4      4      p\%        \+        R V 4       4      4      pV Uu. uF  qˆP                  R4      '       g   K  VNK  	  pp\%        \+        R V 4       4      4      pTp\-        R4       \-        R\'        V 4       R24       \-        R\'        V4       R VR! R"VR! 24       \-        R#\'        V4       R VR! R"VR! 24       \-        R$\'        V4       R%\'        V4       R&VR' R(VV,          ^d,          R) R*2	4       \-        R+VV,
          R' R(VV,
          V,          ^d,          R) R,24       V Uu. uF  qˆP                  R4      '       g   K  VNK  	  ppV Uu0 uF$  qˆP                  R4      '       g   K  VR,          kK&  	  ppV Uu0 uF  qˆR,          kK  	  pp\-        R-\'        V4       R%\'        V4       R.24       \        P                  4        FÃ  w  ppV Uu. uF4  qˆP                  R4      ;'       g    RP                  4       V8X  g   K2  VNK6  	  pp\#        V Uu0 uF  qˆR,          kK  	  up4      p\%        \+        R/ V 4       4      4      p \-        R0T R1T R2\'        V4       R3T  R4V\        P                  ! V4      .8X  d   R5MR6 2
4       KÅ  	  \/        VV,
          4      R78  \/        VV,
          4      R78  p"p!\-        R8V!'       d   R9MR: 24       \-        R;V"'       d   R9MR: 24       V!'       d	   V"'       g   \-        R<4       ^# WeR&   WåR=&   R>R?R@RARB\'        V4      RC\'        V4      RD\%        VV,
          4      RE\'        V4      /VP1                  RF/ 4      RG&   \        '       Ed   R>RHR@RIRJRKRL\        P                  4        UUu/ uFt  w  rTRM\        P                  ! V4      RNV P                  V4      ;'       g    RRO\        P                  ! V P                  V4      4      RP\2        P                  VR4      /bKv  	  uppRQ\         Uau/ uF  oS\+        V3RR lV 4       4      bK  	  upRS\'        \        4      RTRURV\5        \6        4      RW\5        \8        4      /	VRF,          RX&   \:        P<                  ! \        \        RY,           4       \        P                  ! \        RZR R7      P?                  \         P@                  ! VR[R_R\7      4       \-        R]\         R^24       ^ # u uppi u uppi u upi u upi u upi u upi u upi u upi u uppi u upi )`r   r   Úmapr   r   r   Úsalesc            	      ó6   € R RRRR\        4       R\        4       /# )Úamtç        Úamt_2025ÚmembersÚowners)Úset© r   r   Ú<lambda>Úmain.<locals>.<lambda>¦   s   €  %¨¨j¸#¸yÌ#Ë%ÐQYÔ[^Ó[`Ñ!ar   ÚgrpÚmonthÚdeptr9   r:   r;   r<   r=   u   (æ— å½’å±ž)NÚmergedÚ
sales_listÚmixedc                 ó8   € V R ,          V R,          V R,          ) 3# )rC   rD   r9   r?   r
   s   &r   r@   rA   º   s   € ˜Q˜w�Z¨¨6­°Q°uµX°IÑ>r   )Úkeyc              3   óV   "  € T F  qP                  R 4      ;'       g    ^ x € K!  	  R# 5i©r9   N©r!   ©Ú.0Úcs   & r   Ú	<genexpr>Úmain.<locals>.<genexpr>½   s!   é € Ð2©E q—‘�u“×"Ð" Ô"«Eùó   ‚)ž)c              3   ó2   "  € T F  qR ,          x € K  	  R# 5irK   r?   rM   s   & r   rP   rQ   ¾   s   é € Ð(¡4˜a�5—’£4ùó   ‚c              3   óV   "  € T F  qP                  R 4      ;'       g    ^ x € K!  	  R# 5i©r;   NrL   rM   s   & r   rP   rQ   ¿   s"   é € Ð7±¨A—‘�zÓ"×'Ð' aÔ'³ùrR   c              3   ó2   "  € T F  qR ,          x € K  	  R# 5irV   r?   rM   s   & r   rP   rQ   À   s   é € Ð-© 1�:—’«ùrT   c              3   óF   "  € T F  qR ,          ;'       g    ^ x € K  	  R# 5irK   r?   rM   s   & r   rP   rQ   Â   s   é € Ð2©E q�u•X—]�] ”]«Eùs   ‚!–!u.   ================ è‡ªæ£€é—¨ç¦� ================u*     å½’å±žæ˜ å°„æº�: customer_sp_map.jsonï¼ˆu    æ�¡ï¼‰u     å®žä½“å�£å¾„ u    è¡Œ ï½œ Î£ä»Šå¹´ z,.2fu    ï½œ Î£åŽ»å¹´ u     é›†å›¢å�£å¾„ u     æœ‰å½’å±žå®¢æˆ·: Ú/u    è¡Œ ï½œ é‡‘é¢� z,.1fu    ä¸‡ (z.1fz%)u     æ— å½’å±žé‡‘é¢�: u   %) â†’ ä»… admin/gm å�¯è§�u     è·¨é”€å”®å‘˜çš„é›†å›¢: u    â†’ ä»… admin/gm å�¯è§�c              3   óV   "  € T F  qP                  R 4      ;'       g    ^ x € K!  	  R# 5irK   rL   rM   s   & r   rP   rQ   Ò   s!   é € Ð7±¨A—e‘e˜E“l×'Ð' aÔ'³ùrR   u	     è¦†ç›–[u   ] â†’ u   ï¼ˆu
    è¡Œï¼ŒÎ£ u    ä¸‡ï¼‰ ÚOKÚMISMATCHgš™™™™™©?u     â‘  Î£ä»Šå¹´å®ˆæ�’ -> ÚPASSÚFAILu     â‘¡ Î£åŽ»å¹´å®ˆæ�’ -> u$     â�Œ é‡‘é¢�ä¸�å®ˆæ�’ï¼Œæ‹’ç»�å†™ç›˜Úcustomers_grpÚruleuk   é�ž admin/gm ä»…è§� sales å�«æœ¬äººå§“å��çš„å®¢æˆ·ï¼›æ— å½’å±žå®¢æˆ·ä»… admin/gmï¼›é›†å›¢å�£å¾„ä»… admin/gmÚsourceuO   æ•°æ�®/customer_sp_map.json çš„ mapï¼ˆmethod: æœ€è¿‘æœˆä»½æœ€å¸¸è§�é”€å”®å‘˜ï¼‰Ú
owned_rowsÚ
total_rowsÚunowned_amountÚmixed_groupsÚmetaÚsales_scopeu\   å®¢æˆ·çº§å½’å±žè¦†ç›–ï¼šé”®=å®¢æˆ·å��ï¼Œå€¼=å½’å±žé”€å”®å‘˜ï¼›ä¼˜å…ˆäºŽ customer_sp_map.jsonu§   è„šæœ¬/apply_sales_owner.py çš„ CUSTOMER_OWNER_OVERRIDEï¼ˆå”¯ä¸€æŒ�ä¹…è¦†ç›–ç‚¹ï¼Œæ¯�æ¬¡é‡�è·‘ç®¡é�“éƒ½ä¼šé‡�æ–°ç”Ÿæ•ˆ â†’ é‡�å»º customer_sp_map ä¹Ÿä¸�ä¼šè¢«æŽ¨ç¿»ï¼‰Ú
decided_byu-   ç”¨æˆ· 2026-10-06 æ‹�æ�¿ï¼ˆè°�ä¸‹å�•å½’è°�ï¼‰ÚappliedÚtoÚfrom_rawÚfrom_effectiveÚreasonÚrows_touchedc              3   ó†   <"  € T F6  qP                  R 4      ;'       g    RP                  4       S8X  g   K2  ^x € K8  	  R# 5i)r   r   N)r!   r$   )rN   rO   r,   s   & €r   rP   rQ   ó   s2   øé € Ð#[©u¨!¿¹¸v»×9LÐ9LÈ"×8SÑ8SÓ8UÐYZÑ8Z§A¢A«uùs   ƒAŸA·
AÚoverride_countÚtarget_ruleu¯   å¯¹æ¯�ä¸ªå®¢æˆ·ï¼Œåœ¨å…¶ 2026 å¹´é�žèµ å“�Â·æ ‡å‡†é”€å”®è®¢å�•Â·å·²å®¡æ ¸é‡Œï¼ŒæŒ‰å½’å¹¶å�Žé”€å”®å‘˜æ±‡æ€»é‡‘é¢�ï¼Œå�–é‡‘é¢�æœ€å¤§è€…ä¸ºå½’å±žäººï¼›å�•å€¼å½’å±žï¼Œä¸�æ‹†åˆ†ã€‚Ú
edge_flagsÚnear_tie_notesÚcustomer_owner_overridez.bak-pre-salesownerÚwF)Úensure_asciiÚ
separatorsu   
âœ… å·²å†™å›ž u    ï¼ˆå¤‡ä»½ .bak-pre-salesownerï¼‰)Ú,Ú:)!r   r   r   r    ÚSPMAPr!   r"   r#   r$   r4   ÚDATAÚCUSTOMER_OWNER_OVERRIDEÚappendÚ_spmÚmerge_spr   ÚaddÚsortedr   ÚlenÚsortÚsumr&   ÚabsÚ
setdefaultÚOVERRIDE_REASONr)   Ú
EDGE_FLAGSÚNEAR_TIE_NOTESÚshutilÚcopy2ÚwriteÚdumps)#Úspmr,   r-   ÚgmapÚgrpsetÚJÚcustsÚ_ov_hitrO   r3   ÚrawÚbucketrI   ÚbÚcgrpÚmÚdr=   Úe26Úg26Úe25Úg25ÚownedÚown_amtÚtot_amtrG   ÚgkÚmixedkÚ_cnÚ_toÚ_rowsÚ_gotÚ_amtÚg1Úg2s#    `                                 r   Úmainrª   ’   s·  ø€ Ü�9Š9”R—W’WœU¨WÔ5Ó6×<Ð<¸"×
AÑ
AÀ%Ó
H×
NÐ
NÈB€CØ69·i±i´kÔ
M±k©d¨aÄQÔ)Ì1Ô)Œ3ˆq‹6�<‰<‹>œ3˜q›6Ÿ<™<›>Ò)±k€CÑ
Mä‹;€DØ ŸJ™JœLÔ3™L‘D�A¨A©F�aˆa™L€FÑ3Ü�	Š	”"—'’'œ$¨Ô1Ó2€AØ�E‰E�+Ó×$Ð$ "€Eð €GÛˆØ�e‰e�F‹m×!Ð!˜r×(Ñ(Ó*ˆÜ%×)Ñ)¨"Ó-×<Ð<°·±¸³ˆØÔ(Ô(Ø�N‰N˜2ÔÜ—]’] 3Ó'ˆˆ'‹
ñ ô ÑaÓb€FÛˆØ�e‰e�E‹l×+Ð+˜aŸe™e F›mˆØ�g•J  &¥	¨3Ð/Õ0ˆØ	ˆ%��A—E‘E˜%“L×'Ð' CÕ'‹Ø	ˆ*�˜Ÿ™˜zÓ*×1Ð1¨cÕ1‹Ø	ˆ)�×Ñ˜Ÿ™˜v›Ô'Ø	ˆ(��‰˜Ÿ™˜g›×7Ð7¨-Ö8ñ ð €DØ Ÿ,™,ž.‰‰ˆˆAˆsÜ˜˜(�Ó$ˆØ�‰Ø�Q˜  6¨3Ø”2�a˜•h“< ¬R°°*µÓ->Ø˜#œ-‘3¨TØ¬3¨q°­|Ó+<¸qÔ+@”c˜!˜I�,Ô'ÀaØ˜&Ø”S˜“[ 1‘_ð
ö 	ñ )ð 	‡I�IÑ>€IÔ?ô ŒSÑ2©EÓ2Ó2Ó
3€CÜ
ŒSÑ(¡4Ó(Ó(Ó
)€CÜ
ŒSÑ7±Ó7Ó7Ó
8€CÜ
ŒSÑ-©Ó-Ó-Ó
.€CÙÓ0™�1§¡ w§�QˆQ™€EÐ0Ü”Ñ2©EÓ2Ó2Ó3€GØ€GÜ	Ð
:Ô;Ü	Ð6´s¸3³x°jÀÐ
HÔIÜ	ˆOœC ›J˜<Ð'9¸#¸d¸À>ÐRUÐVZÐQ[Ð
\Ô]Ü	ˆOœC ›I˜;Ð&8¸¸T¸
À.ÐQTÐUYÐPZÐ
[Ô\Ü	Ð¤ E£
˜|¨1¬S°«Z¨LÐ8HÈÐQUÈÐV\Ð]dÐelÕ]lÐmpÕ]pÐqtÐ\uÐuwÐ
xÔyÜ	Ð ¨¥°Ð5°V¸WÀW½_ÈgÕ<UÐVYÕ<YÐZ]Ð;^Ð^xÐ
yÔzÙÓ/™�1§¡ g§�QˆQ™€EÐ/Ù!Ó	2™T˜§U¡U¨5§\Œ)ˆ!ˆF�)ˆ)™T€BÐ	2Ù!&Ó'¡˜A��iˆi¡€FÐ'Ü	Ð%¤c¨&£k ]°!´C¸³G°9Ð<TÐ
UÔVä+×1Ñ1Ö3‰ˆˆSÙ!ÓJ™E�q§e¡e¨F£m×&9Ð&9°r×%@Ñ%@Ó%BÀcÑ%I—�™EˆÐJÜ©5Ó1©5 a˜—z�z©5Ñ1Ó2ˆÜ”#Ñ7±Ó7Ó7Ó8ˆÜ�	˜#˜˜f T F¨#¬c°%«j¨\¸ÀDÀ6ð JØ¤4§=¢=°Ó#5Ð"6Ô6‘$¸JÐGðIö 	Jñ	 4ô ��s•‹^˜dÑ"¤C¨¨c­	£N°TÑ$9ˆ€BÜ	Ð$¯r¡V°vÐ$>Ð
?Ô@Ü	Ð$¯r¡V°vÐ$>Ð
?Ô@ß—2ÜÐ4Ô5Ùà€k�NØ€oÑàÐ}ØÐcØ”c˜%“j ,´°E³
Øœ"˜W wÕ.Ó/°ÄÀVÃð	/€A‡L�L�˜Ó˜]Ñ+÷ ÔàÐrØð oàÐIØô 6×;Ñ;Ô=ôñ >‘d�að Øœ$Ÿ-š-¨Ó*Ø §¡¨£×!3Ð!3¨tØ$¤d§m¢m°C·G±G¸A³JÓ&?Øœo×1Ñ1°!°RÓ8ð	ò ñ
 >òð Ý&=ô?Ù&= ð ¤Ô#[©uÓ#[Ó [Ò[Ù&=ñ?àœcÔ"9Ó:Øð ~àœ$œzÓ*Øœd¤>Ó2ð'0
ˆˆ&�	Ð+Ñ,ô* ‡L‚L””tÐ3Õ3Ô4Ü‡G‚GŒD�# Ô(×.Ñ.¬t¯zªz¸!È%Ð\fÔ/gÔhÜ	ÐœT˜FÐ"BÐ
CÔDÙùóU Nùó 4ùòT 1ùò 0ùÚ	2ùÚ'ùò KùÚ1ùó4ùò?ss   Á(c%Á9c%Â5c%Ã
c+Ã'c+Ðc1Ð/c1Ô#c6Õ c6Õc;Õ)c;Õ<d ×d×-dØdØd

Þ6dÞ;AdàdÚ__main__)Ú__doc__r   r   r   rŠ   ÚsysÚcollectionsr   r   ÚinsertÚdirnameÚabspathÚ__file__Úsp_merger~   Ú
expanduserÚHOMEr   r{   rz   r|   r‡   rˆ   r‰   r   r4   rª   Ú__name__Úexitr?   r   r   Ú<module>r¸      sË  ðñó* 
Û Û 	Û Û 
Ý #à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Û à	‡w�w×Ñ˜#Ó€Ø€fÐ+Ð,€Ø
ˆÐ-Ð.€Øˆ#Ð)Ð*€ð  .¨{ð �HØ*¨KØ˜+Ø2°HØ˜XØ�KØ$ kØ$ hØ*¨HØ2°KØ˜XØEÀxØ�HØ˜[ð'Ð ð0 .ð 0uð ð  WØ*ð -Kàð  OØ2ð 5\ð Ð}Øð  LØ$ð  'MØ$ð  'GØ*ð -và2ð  5XØÐ}ØEð Hhð ÐtØð hð/€ð: +Ð,<Ø2Ð4FØEÐGYð€
ð +Ð,YØÐIð€òòò<lð^ ˆzÔØ‡H‚H‰T‹VÖñ r   