| SEVERITY_WEIGHTS = { | |
| "comedone": 1, | |
| "papules": 2, | |
| "pustules": 2, | |
| "nodules": 3, | |
| } | |
| def calculate_severity(summary): | |
| total_score = sum( | |
| count * SEVERITY_WEIGHTS.get(cls, 1) | |
| for cls, count in summary.items() | |
| ) | |
| if total_score == 0: | |
| level = "clear" | |
| description = "Wajah bersih dari jerawat" | |
| elif total_score <= 9: | |
| level = "mild" | |
| description = "Jerawat ringan, dapat diatasi dengan skincare rutin" | |
| elif total_score <= 19: | |
| level = "moderate" | |
| description = "Jerawat sedang, disarankan menggunakan obat topikal" | |
| else: | |
| level = "severe" | |
| description = "Jerawat parah, segera konsultasi ke dokter kulit" | |
| return { | |
| "score": total_score, | |
| "level": level, | |
| "description": description, | |
| } | |
| def get_degree(severity_level: str) -> str: | |
| """Map severity level ke degree (Ringan/Sedang/Berat) sesuai jurnal.""" | |
| mapping = { | |
| "clear": "bersih", | |
| "mild": "ringan", | |
| "moderate": "sedang", | |
| "severe": "berat", | |
| } | |
| return mapping.get(severity_level, "ringan") | |