deploykeempat
This commit is contained in:
parent
503df38bfa
commit
9735aa873c
28
app.py
28
app.py
|
|
@ -40,6 +40,34 @@ def get_symptom_desc(symptom_code):
|
||||||
return kb.gejala.get(symptom_code, symptom_code)
|
return kb.gejala.get(symptom_code, symptom_code)
|
||||||
|
|
||||||
|
|
||||||
|
def _serialize_knowledge_base():
|
||||||
|
"""Return the current expert knowledge in JSON-serializable form."""
|
||||||
|
return {
|
||||||
|
'source': 'mysql' if MYSQL_AVAILABLE else 'builtin',
|
||||||
|
'gejala': dict(expert_system.get_gejala_list()),
|
||||||
|
'gejala_groups': dict(expert_system.get_gejala_groups()),
|
||||||
|
'penyakit': dict(expert_system.kb.penyakit),
|
||||||
|
'aturan': list(expert_system.kb.aturan),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/api/expert-knowledge')
|
||||||
|
def api_expert_knowledge():
|
||||||
|
"""Expose PMK expert knowledge as JSON."""
|
||||||
|
return jsonify(_serialize_knowledge_base())
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/api/gejala')
|
||||||
|
def api_gejala():
|
||||||
|
"""Expose the PMK gejala master list as JSON."""
|
||||||
|
payload = _serialize_knowledge_base()
|
||||||
|
return jsonify({
|
||||||
|
'source': payload['source'],
|
||||||
|
'gejala': payload['gejala'],
|
||||||
|
'gejala_groups': payload['gejala_groups'],
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from utils.mysql_db import (
|
from utils.mysql_db import (
|
||||||
save_prediction_mysql,
|
save_prediction_mysql,
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,15 @@ class KnowledgeBase:
|
||||||
)
|
)
|
||||||
|
|
||||||
def _set_fallback_knowledge(self):
|
def _set_fallback_knowledge(self):
|
||||||
|
try:
|
||||||
|
from utils.mysql_db import get_builtin_expert_knowledge
|
||||||
|
|
||||||
|
knowledge = get_builtin_expert_knowledge()
|
||||||
|
self.gejala = knowledge.get('gejala', {})
|
||||||
|
self.penyakit = knowledge.get('penyakit', {})
|
||||||
|
self.aturan = knowledge.get('aturan', [])
|
||||||
|
self.gejala_groups = knowledge.get('gejala_groups', self._empty_groups())
|
||||||
|
except Exception:
|
||||||
self.gejala = {}
|
self.gejala = {}
|
||||||
self.penyakit = {}
|
self.penyakit = {}
|
||||||
self.aturan = []
|
self.aturan = []
|
||||||
|
|
|
||||||
|
|
@ -292,6 +292,50 @@ DEFAULT_EXPERT_RULES = [
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def get_builtin_expert_knowledge():
|
||||||
|
"""Return expert knowledge from the repository defaults when MySQL is unavailable."""
|
||||||
|
gejala = OrderedDict()
|
||||||
|
penyakit = OrderedDict()
|
||||||
|
aturan = []
|
||||||
|
grouped_codes = {k: [] for k in _GROUP_TITLES.keys()}
|
||||||
|
|
||||||
|
for item in DEFAULT_EXPERT_SYMPTOMS:
|
||||||
|
gejala[item['code']] = item['description']
|
||||||
|
category = (item.get('category') or 'umum').lower()
|
||||||
|
if category not in grouped_codes:
|
||||||
|
grouped_codes[category] = []
|
||||||
|
grouped_codes[category].append(item['code'])
|
||||||
|
|
||||||
|
for item in DEFAULT_EXPERT_DISEASES:
|
||||||
|
penyakit[item['code']] = {
|
||||||
|
'nama': item['name'],
|
||||||
|
'deskripsi': item['description'],
|
||||||
|
'solusi': list(item.get('solutions', [])),
|
||||||
|
}
|
||||||
|
|
||||||
|
for item in DEFAULT_EXPERT_RULES:
|
||||||
|
aturan.append({
|
||||||
|
'kode': item['code'],
|
||||||
|
'gejala': list(item.get('symptom_codes', [])),
|
||||||
|
'hasil': item['result_disease_code'],
|
||||||
|
'deskripsi': item.get('description', ''),
|
||||||
|
})
|
||||||
|
|
||||||
|
gejala_groups = OrderedDict()
|
||||||
|
for key, title in _GROUP_TITLES.items():
|
||||||
|
gejala_groups[key] = {
|
||||||
|
'title': title,
|
||||||
|
'codes': grouped_codes.get(key, []),
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
'gejala': dict(gejala),
|
||||||
|
'penyakit': dict(penyakit),
|
||||||
|
'aturan': aturan,
|
||||||
|
'gejala_groups': gejala_groups,
|
||||||
|
}
|
||||||
|
|
||||||
_GROUP_TITLES = OrderedDict([
|
_GROUP_TITLES = OrderedDict([
|
||||||
('umum', 'Gejala Umum / Sistemik'),
|
('umum', 'Gejala Umum / Sistemik'),
|
||||||
('mulut', 'Gejala Mulut / Oral'),
|
('mulut', 'Gejala Mulut / Oral'),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue