ERP_Preprocessor / mappers /mapping_utils.py
hariqueen's picture
Upload 6 files
a47e303 verified
"""
νŒ€λͺ… λ§€ν•‘ κ΄€λ ¨ μœ ν‹Έλ¦¬ν‹° λͺ¨λ“ˆ
"""
import json
import pandas as pd
from typing import Dict, List, Any
def load_mapping_file(mapping_file: str) -> Dict[str, Dict[str, str]]:
"""
λ§€ν•‘ νŒŒμΌμ„ λ‘œλ“œν•˜μ—¬ λ”•μ…”λ„ˆλ¦¬ ν˜•νƒœλ‘œ λ°˜ν™˜
Args:
mapping_file: λ§€ν•‘ 파일 경둜
Returns:
λ§€ν•‘ λ”•μ…”λ„ˆλ¦¬: {νŒ€λͺ…: {present: ν˜„μž¬νŒ€λͺ…, CD_ACCT: κ³„μ •μ½”λ“œ, CD_PJT: ν”„λ‘œμ νŠΈμ½”λ“œ}}
"""
try:
with open(mapping_file, 'r', encoding='utf-8') as f:
mapping_list = json.load(f)
# λ§€ν•‘ λ”•μ…”λ„ˆλ¦¬ 생성
mapping_dict = {}
for item in mapping_list:
mapping_dict[item['past']] = {
'present': item['present'],
'CD_ACCT': item['CD_ACCT'],
'CD_PJT': item['CD_PJT']
}
print(f"λ§€ν•‘ 정보 λ‘œλ“œ μ™„λ£Œ: {len(mapping_dict)}개 ν•­λͺ©")
return mapping_dict
except Exception as e:
print(f"λ§€ν•‘ 파일 λ‘œλ“œ 쀑 였λ₯˜ λ°œμƒ: {e}")
return {}
def apply_mapping(team_name: str, mapping_dict: Dict[str, Dict[str, str]]) -> Dict[str, str]:
"""
νŒ€λͺ…에 λ§€ν•‘ 정보 적용
Args:
team_name: 원본 νŒ€λͺ…
mapping_dict: λ§€ν•‘ λ”•μ…”λ„ˆλ¦¬
Returns:
λ§€ν•‘λœ 정보: {present: ν˜„μž¬νŒ€λͺ…, CD_ACCT: κ³„μ •μ½”λ“œ, CD_PJT: ν”„λ‘œμ νŠΈμ½”λ“œ}
"""
if pd.isna(team_name) or team_name == "":
return {"present": "", "CD_ACCT": "", "CD_PJT": ""}
if team_name in mapping_dict:
return mapping_dict[team_name]
# μ—†λŠ” 경우 빈 κ°’ λ°˜ν™˜
return {"present": team_name, "CD_ACCT": "", "CD_PJT": ""}
def get_unmapped_teams(df: pd.DataFrame) -> List[str]:
"""
λ§€ν•‘λ˜μ§€ μ•Šμ€ νŒ€λͺ… λͺ©λ‘ μΆ”μΆœ
Args:
df: λ°μ΄ν„°ν”„λ ˆμž„
Returns:
λ§€ν•‘λ˜μ§€ μ•Šμ€ νŒ€λͺ… λͺ©λ‘
"""
unmapped_df = df[(df["CD_ACCT"] == "") | (df["CD_PJT"] == "")]
return unmapped_df["μ›λ³ΈνŒ€λͺ…"].unique().tolist()
def get_mapping_summary(df_filtered: pd.DataFrame, mapping_dict: Dict[str, Dict[str, str]]) -> Dict[str, Any]:
"""
λ§€ν•‘ κ²°κ³Ό μš”μ•½ 정보 생성
Args:
df_filtered: ν•„ν„°λ§λœ λ°μ΄ν„°ν”„λ ˆμž„
mapping_dict: λ§€ν•‘ λ”•μ…”λ„ˆλ¦¬
Returns:
λ§€ν•‘ μš”μ•½ 정보: {mapped_teams: λ§€ν•‘λœ νŒ€λͺ… λͺ©λ‘, unmapped_teams: λ§€ν•‘λ˜μ§€ μ•Šμ€ νŒ€λͺ… λͺ©λ‘}
"""
mapped_teams = []
for team in df_filtered["μ›λ³ΈνŒ€λͺ…"].unique():
mapped_info = mapping_dict.get(team, {})
mapped_teams.append({
'original': team,
'mapped': mapped_info.get('present', team),
'acct': mapped_info.get('CD_ACCT', ''),
'pjt': mapped_info.get('CD_PJT', '')
})
return {
'mapped_teams': mapped_teams,
'mapped_count': len(mapped_teams)
}