From 16282861deecdd451cd0ae20d6cc6373ede600e2 Mon Sep 17 00:00:00 2001 From: "Prayoga K. I." Date: Sun, 14 Jun 2026 10:26:15 +0700 Subject: [PATCH] up --- .env | 8 +++++--- AGENTS.md | 6 +++--- app.py | 4 ++-- expert_system.py | 10 +++++----- utils/mysql_db.py | 2 +- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/.env b/.env index bb615cb..dbdfdad 100644 --- a/.env +++ b/.env @@ -1,9 +1,11 @@ # MySQL Database Configuration +DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 -DB_USER=kali -DB_PASSWORD=asu +DB_USER=root +DB_PASSWORD= DB_NAME=deteksi_pmk # Flask Configuration -FLASK_SECRET=deteksi-pmk-secret-key-2026 \ No newline at end of file +FLASK_SECRET=deteksi-pmk-secret-key-2026 +FLASK_DEBUG=1 \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index 8333c49..1c417cc 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -232,7 +232,7 @@ expert_diseases -- Aturan forward chaining (5 aturan) expert_rules id INT AUTO_INCREMENT PK - code VARCHAR(20) UNIQUE -- FC01–FC04 + code VARCHAR(20) UNIQUE -- FC01–FC05 symptom_codes TEXT -- JSON array of symptom codes result_disease_code VARCHAR(10) FK → expert_diseases.code description TEXT @@ -262,12 +262,12 @@ expert_rules_expert_symptoms - P03 = PMK_LAKTASI (gejala ambing) - P05 = PMK_AKUT_GENERAL (gejala umum berat) -**4 Aturan (FC01–FC04):** +**5 Aturan (FC01–FC05):** - FC01 → P01 (oral): [G01, G02, G03, G04, G11, G18, G19, G20, G21] - FC02 → P02 (podal): [G01, G02, G05, G06, G15, G22, G23, G24, G25] - FC03 → P03 (laktasi): [G01, G02, G07, G08, G09, G26, G27] -- FC04 → P05 (akut umum): [G01, G02, G03, G04, G05, G06, G07, G09, G11, G12, G14, G18, G20, G22, G23, G24, G26] +- FC05 → P05 (akut umum): [G01, G02, G03, G04, G05, G06, G07, G09, G11, G12, G14, G18, G20, G22, G23, G24, G26] > **Auto-check gejala dari hasil deteksi gambar** (di `app.py:pmk_to_symptoms`): > Mapping ini digunakan saat redirect ke expert system via mode=image. Hanya gejala spesifik body part yang diikutkan (tanpa gejala umum): diff --git a/app.py b/app.py index 316ed47..5b2f8be 100644 --- a/app.py +++ b/app.py @@ -811,7 +811,7 @@ def expert_system_page(): # Jika ada hasil prediksi berbasis image processing sebelumnya, tambahkan ke konteks last_prediction = session.get('last_prediction', {}) - upload_images = session.get('upload_images_data', []) + upload_images = session.get('upload_images_data', []) if use_image_context else [] image_info = None if use_image_context and last_prediction.get('source') == 'image_processing': image_info = { @@ -839,7 +839,7 @@ def expert_system_page(): # Ambil informasi gambar dari session jika hasil sebelumnya berasal dari image processing last_prediction = session.get('last_prediction', {}) - upload_images = session.get('upload_images_data', []) + upload_images = session.get('upload_images_data', []) if use_image_context else [] image_info = None if use_image_context and last_prediction.get('source') == 'image_processing': image_info = { diff --git a/expert_system.py b/expert_system.py index d6260fa..f8a4178 100644 --- a/expert_system.py +++ b/expert_system.py @@ -167,7 +167,7 @@ class ForwardChaining: matched_rules = stats['matched_rules'] avg_coverage = stats['coverage_sum'] / matched_rules if matched_rules else 0.0 support_ratio = matched_rules / total_rules - evidence_strength = min(stats['best_matched_count'] / 4.0, 1.0) + evidence_strength = stats['best_matched_count'] / max(len(self.kb.gejala), 1) exact_bonus = 0.10 if stats['exact_rules'] > 0 else 0.0 combined_score = ( @@ -180,7 +180,7 @@ class ForwardChaining: combined_score = min(combined_score, 0.99) if combined_score >= min_score_threshold: - self.hasil[penyakit] = combined_score + self.hasil[penyakit] = (combined_score, stats['best_matched_count']) self.disease_evidence = disease_evidence @@ -203,7 +203,7 @@ class ForwardChaining: } # Urutkan hasil dari yang paling cocok - hasil_urut = sorted(hasil_inferensi.items(), key=lambda x: x[1], reverse=True) + hasil_urut = sorted(hasil_inferensi.items(), key=lambda x: (x[1][0], x[1][1]), reverse=True) # Pemetaan tingkat keparahan severity_map = { @@ -214,7 +214,7 @@ class ForwardChaining: } diagnosis = [] - for kode_penyakit, score in hasil_urut: + for kode_penyakit, (score, _matched_count) in hasil_urut: penyakit = self.kb.penyakit[kode_penyakit] relevant_aliases = DISEASE_ALIAS_MAP.get(kode_penyakit, {kode_penyakit}) evidence_rules = [rule for rule in self.matched_rules if rule['hasil'] in relevant_aliases] @@ -237,7 +237,7 @@ class ForwardChaining: 'semua_diagnosis': diagnosis # Will be populated after all diagnosis generated }) - filtered_diagnosis = diagnosis[:1] + filtered_diagnosis = diagnosis[:5] # Isi daftar hasil untuk ditampilkan ke pengguna for diag in filtered_diagnosis: diff --git a/utils/mysql_db.py b/utils/mysql_db.py index da1f679..8bfb299 100644 --- a/utils/mysql_db.py +++ b/utils/mysql_db.py @@ -273,7 +273,7 @@ DEFAULT_EXPERT_RULES = [ 'display_order': 3, }, { - 'code': 'FC04', + 'code': 'FC05', 'symptom_codes': ['G01', 'G02', 'G03', 'G04', 'G05', 'G06', 'G07', 'G09', 'G11', 'G12', 'G14', 'G18', 'G20', 'G22', 'G23', 'G24', 'G26'], 'result_disease_code': 'P05', 'description': 'PMK akut: demam, air liur berlebihan, luka mulut, nyeri setelah lepuh pecah, lepuh kaki/kuku, lepuh puting, produksi susu menurun, nafsu makan turun, lesu, lepuh moncong, luka meluas, edema/radang, bengkak celah kuku, telapak kaki longgar, dan puting retak',