
    }-j*                     
   d Z ddlZddlZddlZddlmZmZ ej                            d          Z	ej        
                    e	d          Zej                            d          ej        
                    ed          gZdZd	 Zd
 Zd Zd Zd Z eg d          Zd ZddZd Zd Zedk    rO e            Z ede            ee          \  ZZZZ e e          D ]Z! ee! dee!         dz  dd           dS dS )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                     g } t           D ]}t          j                            |          s"t          j        |          D ]t}|                    d          r]|                    d          rH|                    d          s3|                     t          j                            ||                     u| sdS | 	                    d            | d         S )u.   按 mtime 找最新的销售订单 xlsx 文件u   销售订单z.xlsx~Nc                 @    t           j                            |           S )N)ospathgetmtime)fs    I   /Users/liuxinyuan/Desktop/Hermes输出-工作类/脚本/erp_sales_core.py<lambda>z!find_latest_erp.<locals>.<lambda>&   s    RW--a00     )key)
SRC_DIRSr   r	   isdirlistdir
startswithendswithappendjoinsort)filesdr   s      r   find_latest_erpr      s    E 1 1w}}Q 	A 	1 	1A||N++ 1

70C0C 1ALLY\L]L] 1RW\\!Q//000	1  t	JJ00J1119r   c                 t   	 t          |           }d|cxk     rdk     rEn nBt          ddd          t          t          |                    z                       d          S n# t
          $ r Y nw xY wt          |           }d|v r|                    d          d	         }|                    d
d          }|S )Ni N  i`  ik        )daysz%Y-%m-%d r   /-)	floatr   r   intstrftime	Exceptionstrsplitreplace)vnss      r   ser2dater-   )   s    !HH1uT2r**YCFF-C-C-CCMMjYYY   AA
axxGGCLLO			#sAHs   A A$ $
A10A1c                  F   t          t          j                            t          d          d          5 } t          j        |           d         }ddd           n# 1 swxY w Y   i }|D ]:}|                    dd          }d|v rd	}nd
|v rd}n	d|v rd}n|}|||d         <   ;t          t          j                            t          d          d          5 } t          j        |           }ddd           n# 1 swxY w Y   t          d |D                       }||fS )u   返回 (person_dept, lzy_custs)zpricing/_personnel.jsonutf-8encoding	personnelNdept u	   大客户   大客户部   生命科学   生命科学部u   销售拓展   销售拓展部namezpricing/_key_customers.jsonc              3      K   | ]I}|                     d           p|                     d          pddk    2|                     d          V  JdS )salespersonsalesr4   	   刘子研r9   N)get).0cs     r   	<genexpr>z load_mappings.<locals>.<genexpr>J   sY      ooa!%%2F2F2^!%%PW..2^\^cn1n1nAEE&MM1n1n1n1noor   )	openr   r	   r   DATAjsonloadr>   set)r   r2   person_deptpr3   r   kc	lzy_custss           r   load_mappingsrK   8   s   	bgll4!:;;g	N	N	N .RSIaLL-	. . . . . . . . . . . . . . .K 
# 
#uuVR  $AAt##!AAt##!AAA!"AfI	bgll4!>??'	R	R	R VWYq\\              oo2oooooI	!!s#   AA #A C;;C?C?c                  X   t           j                            t          d          } t           j                            |           re	 t          | d          5 }t          j        |                              di           cddd           S # 1 swxY w Y   n# t          $ r i cY S w xY wi S )uU   加载「客户 → 销售员」映射（新格式 ERP 无销售员列时的兜底）zcustomer_sp_map.jsonr/   r0   mapN
r   r	   r   rC   existsrB   rD   rE   r>   r&   rH   r   s     r   load_sp_maprQ   M   s    
T122A	w~~a 	a'*** 3ay||''r223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 	 	 	III	I6   B (B?B BB BB B'&B'c                  X   t           j                            t          d          } t           j                            |           re	 t          | d          5 }t          j        |                              di           cddd           S # 1 swxY w Y   n# t          $ r i cY S w xY wi S )uV   加载「单据编号 → 销售员」映射（精确匹配，优先于客户映射）zorder_sp_map.jsonr/   r0   rM   NrN   rP   s     r   load_order_sp_maprT   X   s    
T.//A	w~~a 	a'*** 3ay||''r223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 	 	 	III	IrR   )u	   路要峰u	   刘虹晶u	   李江辉u	   杨天雄u	   宋学伟u	   冯贤平u	   黄文才u	   陈溪子u   任鑫u   林潇u	   赵云浩u	   张文蝶r=   u	   徐卓凡u	   袁殿果u	   王诗香u	   黄建华u	   侯海瑜u	   叶信福u   刘斌u   吴云u	   韩远怀c                 T    | sdS t          |           } d| v sd| v rdS d| v sd| v rdS dS )ud   根据客户采购类型/产品类型推断部门（仅用于无法映射到销售员时的兜底）Nr6   u   生物医药r7   u   分子诊断u   诊断r8   )r'   )pts    r   infer_dept_from_ptrW   i   sS     t	RB~33  x2~~  4r   r4   c                     | dk    rdS | dk    rdS | dk    r||v rdS d|                     | d          fS |                     |           }|t          |          }d|fS | t          v r| |fS d|fS )u'   返回 (kpi_person或None, dept或None)u	   黄明月)r=   r5   u	   张立娅u	   刘新元Nr8   )r>   rW   
KPI_PEOPLE)spcustrG   rJ   rV   r3   r   s          r   
map_personr\   t   s    	[,,	[,,	[900koob*;<<==??2D|r""ay	ZDz$<r   c                 	   t          j        | t                    }d|j        v }d|j        v }d|j        v }|r3t          j        |d         d                              d          |d<   n|rkt          j        |d	         d                              d          }t          j        |d         d                              d          d
|dz  z   z  |d<   n#i i i t          j                            |           fS |r8|d                             d          	                    t                    |d<   nt                      }t                      }|d         	                    t                    j                                        |d<   |d                             |                              d          |d<   |d         dk    }|j        |df         	                    t                    j                                                            |                              d          |j        |df<   d|j        v rd}	nd|j        v rd}	nd}	|d                             t                     |d<   |d         j        dd         |d<   ||d         dk    |d         dk    z  |d         dk    z           }
|
|
d         j                            t$          d                    }
|
                                }
|
d         	                    t(                    |
d<   t+                      \  }}i }i }i }|
                                D ]f\  }}|d         }|                    d           rt1          |          dk    s7t          |d                                                   }t          |d                                                   }t)          |d                   }|	rt          ||	                   nd}t3          |||||          \  }}||                    |d          |z   ||<   |                    |i            ||                             |d          |z   ||         |<   |r>|                    |i            ||                             |d          |z   ||         |<   h|||t          j                            |           fS )!ur   读 ERP 文件，返回 (monthly_total, monthly_person, monthly_dept, source_file)
    兼容新旧两种格式。dtype   价税合计   金额	   销售员coerceerrorsr   _amt   税率%   d   r4   _sp   单据编号_oid   客户   客户采购类型#   产品类型#N   合同日期_date   _month   单据类型   标准销售订单   单据状态	   已审核   是否赠品   是Fna2026pd
read_excelr'   columns
to_numericfillnar   r	   basenameastyperT   rQ   striprM   locapplyr-   containsBAORUI_PATTERNcopyr#   rK   iterrowsr   lenr\   r>   
setdefault)fpdfhas_jshjhas_amthas_sprate	order_mapsp_mapmisspt_colstdrG   rJ   monthly_totalmonthly_personmonthly_dept_rmrZ   r[   amtrV   
kpi_personr3   s                            r   	aggregater      s    
r	%	%	%B+H"*$GBJ&F  0]2n#5hGGGNNqQQ6

	 0}R	]8<<<CCAFF]2h<AAAHHKKqSWZ]S]~^6

2r27++B////  d{O**2..55c::5		%''	'..s337==??6
vJNN9--44R885	%yB fT8^4;;C@@DJJLLPPQWXX__`bcctU{ 
**&	BJ	&	& ^$**844BwKg;?2A2&BxL
b $88R=OS^=^_ceftcuy~c~  AC
s8} )).U)CCC
DC
((**Cf+$$U++CK*__KMNL W W1hKV$$ 	Q15]]  ""1X;%%''AfI%-S6^^^2%b$YKK
D<(,,Q22S8a2&&& ,Q 3 3D! < <s BQ 	W%%a,,,,:1,=,A,A*a,P,PSV,VN1j).,8H8H8L8LLLr   c           	      z   t          j        | t                    }d|j        v }d|j        v }d|j        v }|r3t          j        |d         d                              d          |d<   n|rkt          j        |d	         d                              d          }t          j        |d         d                              d          d
|dz  z   z  |d<   n%i i i i i t          j                            |           fS |r8|d                             d          	                    t                    |d<   nt                      }t                      }|d         	                    t                    j                                        |d<   |d                             |                              d          |d<   |d         dk    }|j        |df         	                    t                    j                                                            |                              d          |j        |df<   d|j        v rd}	nd|j        v rd}	nd}	|d                             t                     |d<   |d         j        dd         |d<   ||d         dk    |d         dk    z  |d         dk    z           }
|
|
d         j                            t$          d                    }
|
                                }
|
d         	                    t(                    |
d<   t+                      \  }}i }i }i }i }i }i }|
                                D ]E\  }}t          |d                                                   }t          |d                                                   }|                    d           rt1          |          dk    s}t          |d                                                   }t          |d                                                   }t)          |d                   }|	rt          ||	                   nd}t3          |||||          \  }}||                    |d          |z   ||<   |                    |d          |z   ||<   |                    |i            ||                             |d          |z   ||         |<   |                    |i            ||                             |d          |z   ||         |<   |r||                    |i            ||                             |d          |z   ||         |<   |                    |i            ||                             |d          |z   ||         |<   G||||||t          j                            |           fS )!u   按天聚合 ERP 金额（供订单管理页按周/月/季/年统计）
    返回 (daily_total, daily_person, monthly_total, monthly_person, monthly_dept, source_file)
    daily_total: {日期YYYY-MM-DD: 金额}
    r^   r`   ra   rb   rc   rd   r   rf   rg   rh   ri   r4   rj   rk   rl   rm   rn   ro   Nrp   rq   rr   rs   rt   ru   rv   rw   rx   ry   Frz   r|   r}   )r   r   r   r   r   r   r   r   r   r   r   rG   rJ   daily_totaldaily_personr   r   r   customer_monthlyr   r   r   r   rZ   r[   r   rV   r   r3   s                                r   aggregate_dailyr      sw   
 
r	%	%	%B+H"*$GBJ&F 8]2n#5hGGGNNqQQ6

	 8}R	]8<<<CCAFF]2h<AAAHHKKqSWZ]S]~^6

2r2r27#3#3B#7#777 d{O**2..55c::5		%''	'..s337==??6
vJNN9--44R885	%yB fT8^4;;C@@DJJLLPPQWXX__`bcctU{
**&	BJ	&	& ^$**844BwKg;?2A2&BxL
b $88R=OS^=^_ceftcuy~c~  AC
s8} )).U)CCC
DC
((**Cf+$$U++CK*__KKLMNL W W1'
OO!!##(""$$V$$ 	Q15]]  ""1X;%%''AfI%-S6^^^2%b$YKK
D<$A..4A(,,Q22S8a2&&& ,Q 3 3D! < <s BQ##Ar***$4Q$7$;$;D!$D$Ds$JD! 	W##Ar****6q/*=*=j!*L*Ls*RLOJ'%%a,,,,:1,=,A,A*a,P,PSV,VN1j)m^\Scegeleueuvxeyeyyyr   __main__u   最新ERP文件:z: g     @z.2fu   万)r4   )"__doc__rD   r   pandasr~   r   r   r	   
expanduserBASEr   rC   r   r   r   r-   rK   rQ   rT   rF   rY   rW   r\   r   r   __name__r   printmtmpmdfnsortedr    r   r   <module>r      s         ( ( ( ( ( ( ( (	w<==	w||D(## GXYYGLL~&& (    " " "*	 	 		 	 	 S     
	 	 	   &CM CM CMLKz Kz KzZ z			B	E
b!!!Yr]]NBBVBZZ * *((beCi(((()))) * *r   