import gradio as gr # ============================================================ # 1. Mapping for Assessment Criteria # ============================================================ CRITERIA_MAP = { "num_bodies": { "5–10 ศพ (2 คะแนน)": 2, "11–20 ศพ (4 คะแนน)": 4, ">20 ศพขึ้นไป (6 คะแนน)": 6 }, "forensic_available": { "มีแพทย์นิติเวชในจังหวัด (2 คะแนน)": 2, "ไม่มีในจังหวัด แต่มีในระดับเขต (4 คะแนน)": 4, "ไม่มีในจังหวัด/มีในเขต แต่สัดส่วนแพทย์นิติเวช:ศพ น้อยกว่า 1:5 (6 คะแนน)": 6 }, "morgue_capacity": { "มีเพียงพอในจังหวัด (1 คะแนน)": 1, "มีน้อยกว่าจำนวนศพ (2 คะแนน)": 2, "ไม่เพียงพอแม้รวมในระดับเขต (3 คะแนน)": 3 }, "body_condition": { "สภาพศพเปลี่ยนแปลง <25% (1 คะแนน)": 1, "สภาพศพเปลี่ยนแปลง 25–50% (2 คะแนน)": 2, "สภาพศพเปลี่ยนแปลง >50% (3 คะแนน)": 3 } } # ============================================================ # 2. Image Mapping by Severity Level # ============================================================ SEVERITY_IMAGES = { "ระดับรุนแรงน้อย (Minor Severity)": "assets/minor.png", "ระดับรุนแรงปานกลาง (Moderate Severity)": "assets/moderate.png", "ระดับรุนแรงมาก (Major Severity)": "assets/severe.png" } # ============================================================ # 3. Assessment Function + Safety Check # ============================================================ def assess_mass_fatality(num_bodies_input, forensic_path_input, morgue_capacity_input, body_change_input): # --------- Check required inputs (no crash) --------- if not num_bodies_input or not forensic_path_input or not morgue_capacity_input or not body_change_input: warning = """ ⚠️ **กรุณาเลือกข้อมูลให้ครบทั้ง 4 ข้อก่อนประเมินผล** """ return warning, None, None # ----------------------------------------------------- # Normal calculation score_bodies = CRITERIA_MAP['num_bodies'][num_bodies_input] score_available = CRITERIA_MAP['forensic_available'][forensic_path_input] score_morgue = CRITERIA_MAP['morgue_capacity'][morgue_capacity_input] score_condition = CRITERIA_MAP['body_condition'][body_change_input] total_score = score_bodies + score_available + score_morgue + score_condition if total_score == 6: severity = "ระดับรุนแรงน้อย (Minor Severity)" recommendation = "สามารถบริหารจัดการในระดับอำเภอหรือจังหวัดได้" elif 7 <= total_score <= 12: severity = "ระดับรุนแรงปานกลาง (Moderate Severity)" recommendation = "ใช้ทรัพยากรจากระดับเขตบริการสุขภาพ" else: severity = "ระดับรุนแรงมาก (Major Severity)" recommendation = "ต้องใช้ทรัพยากรจากเขตอื่นหรือระดับประเทศ" image_path = SEVERITY_IMAGES.get(severity, None) markdown_text = ( f"**คะแนนรวม:** {total_score}/18\n\n" f"**ระดับความรุนแรง:** {severity}\n\n" f"**คำแนะนำ:** {recommendation}" ) return markdown_text, None, image_path # ============================================================ # 4. Prepare UI Options # ============================================================ bodies_options = list(CRITERIA_MAP['num_bodies'].keys()) path_options = list(CRITERIA_MAP['forensic_available'].keys()) morgue_options = list(CRITERIA_MAP['morgue_capacity'].keys()) change_options = list(CRITERIA_MAP['body_condition'].keys()) # ============================================================ # 5. Footer # ============================================================ APP_FOOTER = """
""" # ============================================================ # 6. Build UI # ============================================================ with gr.Blocks() as demo: # Custom CSS gr.HTML(""" """) gr.HTML("