| from typing import Literal, TypedDict | |
| MaintTaskType = Literal["empty_bin", "clean_brush", "clean_filter", "firmware_update", "sensor_check"] | |
| class MaintReminder(TypedDict): | |
| should_remind: bool | |
| urgency: Literal["low", "medium", "high"] | |
| reason: str | |
| def decide_maintenance_reminder(task_type: MaintTaskType, days_since_last: int) -> MaintReminder: | |
| """Heuristic for when to remind about simple maintenance tasks.""" | |
| if task_type == "empty_bin": | |
| if days_since_last >= 1: | |
| return {"should_remind": True, "urgency": "high", "reason": "Dust bin should be emptied daily."} | |
| return {"should_remind": False, "urgency": "low", "reason": "Bin recently emptied."} | |
| if task_type == "clean_brush": | |
| if days_since_last >= 7: | |
| return {"should_remind": True, "urgency": "medium", "reason": "Brush should be cleaned weekly."} | |
| return {"should_remind": False, "urgency": "low", "reason": "Brush cleaning not yet due."} | |
| if task_type == "clean_filter": | |
| if days_since_last >= 14: | |
| return {"should_remind": True, "urgency": "medium", "reason": "Filter cleaning recommended every 2 weeks."} | |
| return {"should_remind": False, "urgency": "low", "reason": "Filter cleaning not yet due."} | |
| if task_type == "sensor_check": | |
| if days_since_last >= 30: | |
| return {"should_remind": True, "urgency": "low", "reason": "Monthly sensor self-check is due."} | |
| return {"should_remind": False, "urgency": "low", "reason": "Sensor check recently performed."} | |
| if task_type == "firmware_update": | |
| if days_since_last >= 60: | |
| return {"should_remind": True, "urgency": "low", "reason": "Check for firmware updates every few months."} | |
| return {"should_remind": False, "urgency": "low", "reason": "Firmware update not yet necessary."} | |
| return {"should_remind": False, "urgency": "low", "reason": "Unknown task type."} | |
| if __name__ == "__main__": | |
| tests = [ | |
| ("empty_bin", 2), | |
| ("clean_brush", 8), | |
| ("clean_filter", 10), | |
| ("sensor_check", 31), | |
| ("firmware_update", 90), | |
| ] | |
| for t, d in tests: | |
| print(t, d, "->", decide_maintenance_reminder(t, d)) | |