File size: 2,967 Bytes
a47e303
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
"""
νŒ€λͺ… λ§€ν•‘ κ΄€λ ¨ μœ ν‹Έλ¦¬ν‹° λͺ¨λ“ˆ
"""
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)
    }