File size: 3,026 Bytes
725d1d2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6752520
725d1d2
 
 
 
 
 
 
 
 
 
 
6752520
 
 
725d1d2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
100
101
102
103
104
105
106
107
from typing import Optional

JOB_CATEGORY_MAPPING = {
    "blue_collar": "cat1",
    "housemaid": "cat1",
    "services": "cat1",
    "admin": "cat2",
    "technician": "cat2",
    "management": "cat3",
    "self_employed": "cat3",
    "entrepreneur": "cat3",
    "unemployed": "cat4",
    "student": "cat4",
}

JOB_CATEGORY_MODEL = {
    "blue-collar": "cat1",
    "housemaid": "cat1",
    "services": "cat1",
    "admin.": "cat2",
    "technician": "cat2",
    "management": "cat3",
    "self-employed": "cat3",
    "entrepreneur": "cat3",
    "unemployed": "cat4",
    "student": "cat4",
}


def map_customer_job(job_input: str) -> str:
    """

    Convert user-friendly job input → job name yang sesuai dengan model.

    """
    mapping_user_to_model = {
        "blue_collar": "blue-collar",
        "housemaid": "housemaid",
        "services": "services",
        "admin": "admin.",
        "technician": "technician",
        "management": "management",
        "self_employed": "self-employed",
        "entrepreneur": "entrepreneur",
        "unemployed": "unemployed",
        "student": "student",
    }
    return mapping_user_to_model.get(job_input.lower(), "other")


def job_category_map(job: str) -> str:
    return JOB_CATEGORY_MAPPING.get(job.lower(), "other")


def age_category_map(age):
    if age < 30:
        return "struggling"
    elif age < 50:
        return "stable"
    elif age < 60:
        return "about to retire"
    elif age < 75:
        return "old age"
    else:
        return "counting a last breathe"


def education_map(

    type: Optional[str], level: Optional[str] = None, grade: Optional[int] = None

) -> str:
    if type == "illiterate":
        return "illiterate"
    if type == "course":
        return "professional.course"
    if type == "university":
        return "university.degree"

    if type == "school":
        if level is None:
            raise ValueError("Level must be provided when type='school'")
        if grade is None:
            raise ValueError("Grade must be provided when type='school'")

        if level == "primary":
            if grade < 4:
                 raise ValueError("Primary level must be at least grade 4")
            elif grade == 4:
                return "basic.4y"
            elif grade <= 6:
                return "basic.6y"
            else:
                raise ValueError("Primary level cannot have grade above 6")

        if level == "middle":
            if 7 <= grade <= 9:
                return "basic.9y"
            else:
                raise ValueError("Middle level must have grade between 7 and 9")

        if level == "high":
            if 10 <= grade <= 12:
                return "high.school"
            else:
                raise ValueError("High level cannot have grade above 12")

    raise ValueError(
        f"Unknown education category: type={type}, level={level}, grade={grade}"
    )