+
    }-j*                        R t ^ RIt^ RIt^ RIt^ RIHtHt ]P                  P                  R4      t	]P                  P                  ]	R4      t]P                  P                  R4      ]P                  P                  ]R4      .tRtR tR	 tR
 tR tR t]! . RO4      tR tRR ltR tR t]R8X  dL   ]! 4       t]! R]4       ]! ]4      w  tttt] ! ]4       F   t!]! ]! R]]!,          R,          R R24       K"  	  R# R# )u  
ERP 销售数据核心提取模块（共享）
口径：标准销售订单 + 已审核 + 非赠品 + 剔除宝锐系
人员映射：黄明月/张立娅 → 刘子研；刘新元(代管23家客户) → 刘子研
兼容两种 ERP 导出格式：
  - 旧格式：含「销售员」列 + 「价税合计」列（含税金额）
  - 新格式：无「销售员」列（用 customer_sp_map.json 客户映射兜底）+「金额」列（不含税，需 ×(1+税率)）
供 refresh_erp.py / mcp_kpi_pipeline.py 复用。
N)datetime	timedeltau    ~/Desktop/Hermes输出-工作类u   数据u?   ~/Desktop/hermas输入-工作台数据库/月度销售额数据u   每日上传u   宝锐|宝泰|横琴c                    . p \          F  p\        P                  P                  V4      '       g   K*  \        P                  ! V4       F|  pVP                  R4      '       g   K  VP                  R4      '       g   K5  VP                  R4      '       d   KN  V P                  \        P                  P                  W4      4       K~  	  K  	  V '       g   R# V P                  R R7       V R,          # )u.   按 mtime 找最新的销售订单 xlsx 文件u   销售订单z.xlsx~Nc                 @    \         P                  P                  V 4      # )N)ospathgetmtime)fs   &I   /Users/liuxinyuan/Desktop/Hermes输出-工作类/脚本/erp_sales_core.py<lambda>!find_latest_erp.<locals>.<lambda>&   s    RWW--a0    )key)
SRC_DIRSr   r   isdirlistdir
startswithendswithappendjoinsort)filesdr
   s      r   find_latest_erpr      s    Eww}}QAA||N++

70C0CALLY\L]L]RWW\\!/0   	JJ0J19r   c                 J    \        V 4      pR Tu;8  d   R8  d:   M M7\        R^^4      \        \        V4      R7      ,           P	                  R4      #  \        V 4      pRV9   d   VP                  R4      ^ ,          pVP                  RR4      pV#   \
         d     LKi ; i)i N  i`  ik  )daysz%Y-%m-%d /-)	floatr   r   intstrftime	Exceptionstrsplitreplace)vnss   &  r   ser2dater+   )   s    !H1uT2r*YCF-CCMMjYY  	AA
axGGCLO			#sAH  s   B 5B B"!B"c                 n   \        \        P                  P                  \        R4      RR7      ;_uu_ 4       p \
        P                  ! V 4      R,          pRRR4       / pX F@  pVP                  RR4      pRV9   d   R	pMR
V9   d   RpMRV9   d   RpMTpWRVR,          &   KB  	  \        \        P                  P                  \        R4      RR7      ;_uu_ 4       p \
        P                  ! V 4      pRRR4       \        R X 4       4      pW'3#   + '       g   i     L; i  + '       g   i     L8; i)u   返回 (person_dept, lzy_custs)zpricing/_personnel.jsonutf-8encoding	personnelNdept u	   大客户   大客户部   生命科学   生命科学部u   销售拓展   销售拓展部namezpricing/_key_customers.jsonc              3      "   T FP  qP                  R 4      ;'       g    VP                  R4      ;'       g    RR8X  g   K=  VP                  R4      x  KR  	  R# 5i)salespersonsalesr2   	   刘子研r7   N)get).0cs   & r   	<genexpr> load_mappings.<locals>.<genexpr>J   sE     o2a%%2F2^2^!%%PW.2^2^\^cn1nMAEE&MM2s   AAAA)	openr   r   r   DATAjsonloadr<   set)r
   r0   person_deptpr1   r   kc	lzy_custss           r   load_mappingsrJ   8   s    	bggll4!:;g	N	NRSIIaL-	 
OKuuVR $At#!At#!AA!"AfI  
bggll4!>?'	R	RVWYYq\ 
So2ooI!!# 
O	N 
S	Rs   DD$D!	$D4	c                 t   \         P                  P                  \        R4      p \         P                  P	                  V 4      '       dH    \        V RR7      ;_uu_ 4       p\        P                  ! V4      P                  R/ 4      uuRRR4       # / #   + '       g   i     / # ; i  \         d    / u # i ; i)uU   加载「客户 → 销售员」映射（新格式 ERP 无销售员列时的兜底）zcustomer_sp_map.jsonr-   r.   mapN
r   r   r   rB   existsrA   rC   rD   r<   r$   rG   r
   s     r   load_sp_maprP   M   s    
T12A	ww~~a	a'**ayy|''r2 +* I	 +* I  	I	0   B'  &B
B' B$	B' $B' 'B76B7c                 t   \         P                  P                  \        R4      p \         P                  P	                  V 4      '       dH    \        V RR7      ;_uu_ 4       p\        P                  ! V4      P                  R/ 4      uuRRR4       # / #   + '       g   i     / # ; i  \         d    / u # i ; i)uV   加载「单据编号 → 销售员」映射（精确匹配，优先于客户映射）zorder_sp_map.jsonr-   r.   rL   NrM   rO   s     r   load_order_sp_maprS   X   s    
T./A	ww~~a	a'**ayy|''r2 +* I	 +* I  	I	rQ   c                p    V '       g   R# \        V 4      p RV 9   g   RV 9   d   R# RV 9   g   RV 9   d   R# R# )ud   根据客户采购类型/产品类型推断部门（仅用于无法映射到销售员时的兜底）Nr4   u   生物医药r5   u   分子诊断u   诊断r6   )r%   )pts   &r   infer_dept_from_ptrV   i   s7    	RB~3 x2~ r   c                    V R8X  d   R# V R8X  d   R# V R8X  d   W9   d   R# RVP                  V R4      3# VP                  V 4      pVf   \        V4      pRV3# V \        9   d   W3# RV3# )u'   返回 (kpi_person或None, dept或None)u	   黄明月u	   张立娅u	   刘新元Nr6   )r;   r3   )r<   rV   
KPI_PEOPLE)spcustrF   rI   rU   r1   r   s   &&&&&  r   
map_personr[   t   s    	[,,	[,,	[00koob*;<==??2D|r"ay	Zz$<r   c                	   \         P                  ! V \        R7      pRVP                  9   pRVP                  9   pRVP                  9   pV'       d3   \         P                  ! VR,          RR7      P                  ^ 4      VR&   MV'       dv   \         P                  ! VR,          RR7      P                  ^ 4      p\         P                  ! VR,          RR7      P                  ^ 4      ^V^d,          ,           ,          VR&   M#/ / / \        P                  P                  V 4      3# V'       d0   VR,          P                  R	4      P                  \        4      VR
&   M\        4       p\        4       pVR,          P                  \        4      P                  P                  4       VR&   VR,          P                  V4      P                  R	4      VR
&   VR
,          R	8H  pVP                  VR3,          P                  \        4      P                  P                  4       P                  V4      P                  R	4      VP                  VR
3&   RVP                  9   d   Rp	MRVP                  9   d   Rp	MRp	VR,          P                  \         4      VR&   VR,          P                  R,          VR&   WR,          R8H  VR,          R8H  ,          VR,          R8g  ,          ,          p
WR,          P                  P#                  \$        RR7      ( ,          p
V
P'                  4       p
V
R,          P                  \(        4      V
R&   \+        4       w  r/ p/ p/ pV
P-                  4        EF]  w  ppVR,          pVP/                  R4      '       d   \1        V4      ^8X  g   K9  \        VR
,          4      P                  4       p\        VR,          4      P                  4       p\)        VR,          4      pV	'       d   \        VV	,          4      MR	p\3        VVWV4      w  ppVf   K  VP5                  V^ 4      V,           VV&   VP7                  V/ 4       VV,          P5                  V^ 4      V,           VV,          V&   V'       g   EK!  VP7                  V/ 4       VV,          P5                  V^ 4      V,           VV,          V&   EK`  	  WV\        P                  P                  V 4      3# )un   读 ERP 文件，返回 (monthly_total, monthly_person, monthly_dept, source_file)
兼容新旧两种格式。dtype   价税合计   金额	   销售员coerceerrors_amt   税率%r2   _sp   单据编号_oid   客户   客户采购类型#   产品类型#N   合同日期_dateN   N_month   单据类型   标准销售订单   单据状态	   已审核   是否赠品   是Fna2026pd
read_excelr%   columns
to_numericfillnar   r   basenameastyperS   rP   striprL   locapplyr+   containsBAORUI_PATTERNcopyr!   rJ   iterrowsr   lenr[   r<   
setdefault)fpdfhas_jshjhas_amthas_sprate	order_mapsp_mapmisspt_colstdrF   rI   monthly_totalmonthly_personmonthly_dept_rmrY   rZ   amtrU   
kpi_personr1   s   &                        r   	aggregater      s    
r	%B+H"**$GBJJ&F ]]2n#5hGNNqQ6
	}}R	]8<CCAF]]2h<AHHKqSWZ]S]~^6
2r277++B/// {O**2.55c:5	%'	'..s377==?6
vJNN9-44R85	%yB ffT8^4;;C@DDJJLPPQWX__`bctU{ 

*&	BJJ	& ^$**84BwKg;??2&BxL
 $88R=OS^=^_ceftcuy~c~  AC
8}  )).U)CC
DC
((*Cf+$$U+CK*_KMNL1hKV$$Q15]  "1X;%%'AfI%S6^2%b$K
D<(,,Q2S8a2& ,Q 3 3D! <s BQ:%%a,,:1,=,A,A*a,PSV,VN1j)! $ ,8H8H8LLLr   c           	     z   \         P                  ! V \        R7      pRVP                  9   pRVP                  9   pRVP                  9   pV'       d3   \         P                  ! VR,          RR7      P                  ^ 4      VR&   MV'       dv   \         P                  ! VR,          RR7      P                  ^ 4      p\         P                  ! VR,          RR7      P                  ^ 4      ^V^d,          ,           ,          VR&   M%/ / / / / \        P                  P                  V 4      3# V'       d0   VR,          P                  R	4      P                  \        4      VR
&   M\        4       p\        4       pVR,          P                  \        4      P                  P                  4       VR&   VR,          P                  V4      P                  R	4      VR
&   VR
,          R	8H  pVP                  VR3,          P                  \        4      P                  P                  4       P                  V4      P                  R	4      VP                  VR
3&   RVP                  9   d   Rp	MRVP                  9   d   Rp	MRp	VR,          P                  \         4      VR&   VR,          P                  R,          VR&   WR,          R8H  VR,          R8H  ,          VR,          R8g  ,          ,          p
WR,          P                  P#                  \$        RR7      ( ,          p
V
P'                  4       p
V
R,          P                  \(        4      V
R&   \+        4       w  r/ p/ p/ p/ p/ p/ pV
P-                  4        EF(  w  pp\        VR,          4      P                  4       p\        VR,          4      P                  4       pVP/                  R4      '       d   \1        V4      ^8X  g   Kp  \        VR
,          4      P                  4       p\        VR,          4      P                  4       p\)        VR,          4      pV	'       d   \        VV	,          4      MR	p\3        VVWV4      w  ppVf   K  VP5                  V^ 4      V,           VV&   VP5                  V^ 4      V,           VV&   VP7                  V/ 4       VV,          P5                  V^ 4      V,           VV,          V&   VP7                  V/ 4       VV,          P5                  V^ 4      V,           VV,          V&   V'       g   EK  VP7                  V/ 4       VV,          P5                  V^ 4      V,           VV,          V&   VP7                  V/ 4       VV,          P5                  V^ 4      V,           VV,          V&   EK+  	  WVVVV\        P                  P                  V 4      3# )u   按天聚合 ERP 金额（供订单管理页按周/月/季/年统计）
返回 (daily_total, daily_person, monthly_total, monthly_person, monthly_dept, source_file)
daily_total: {日期YYYY-MM-DD: 金额}
r]   r_   r`   ra   rb   rc   re   rf   r2   rg   rh   ri   rj   rk   rl   Nrm   rn   ro   rq   rr   rs   rt   ru   rv   rw   Frx   rz   r{   )r   r   r   r   r   r   r   r   r   r   r   rF   rI   daily_totaldaily_personr   r   r   customer_monthlyr   r   r   r   rY   rZ   r   rU   r   r1   s   &                            r   aggregate_dailyr      s   
 
r	%B+H"**$GBJJ&F]]2n#5hGNNqQ6
	}}R	]8<CCAF]]2h<AHHKqSWZ]S]~^6
2r2r277#3#3B#777{O**2.55c:5	%'	'..s377==?6
vJNN9-44R85	%yB ffT8^4;;C@DDJJLPPQWX__`bctU{

*&	BJJ	& ^$**84BwKg;??2&BxL
 $88R=OS^=^_ceftcuy~c~  AC
8}  )).U)CC
DC
((*Cf+$$U+CK*_KKLMNL1'
O!!#(""$V$$Q15]  "1X;%%'AfI%S6^2%b$K
D<$A.4A(,,Q2S8a2& ,Q 3 3D! <s BQ##Ar*$4Q$7$;$;D!$Ds$JD!:##Ar**6q/*=*=j!*Ls*RLOJ'%%a,,:1,=,A,A*a,PSV,VN1j)- 0 m^\Scegeleleueuvxeyyyr   __main__u   最新ERP文件:z: g     @z.2fu   万)u	   路要峰u	   刘虹晶u	   李江辉u	   杨天雄u	   宋学伟u	   冯贤平u	   黄文才u	   陈溪子u   任鑫u   林潇u	   赵云浩u	   张文蝶r;   u	   徐卓凡u	   袁殿果u	   王诗香u	   黄建华u	   侯海瑜u	   叶信福u   刘斌u   吴云u	   韩远怀)r2   )"__doc__rC   r   pandasr|   r   r   r   
expanduserBASEr   rB   r   r   r   r+   rJ   rP   rS   rE   rX   rV   r[   r   r   __name__r   printmtmpmdfnsortedr    r   r   <module>r      s     (	ww<=	ww||D(# GGXYGGLL~& ("*		   
	&CMLKzZ z		B	
b!r]NBBBZ2beCi_C() 	 r   