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}" )