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)
|
||||
|
||||
|
||||
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:
|
||||
from utils.mysql_db import (
|
||||
save_prediction_mysql,
|
||||
|
|
|
|||
|
|
@ -36,10 +36,19 @@ class KnowledgeBase:
|
|||
)
|
||||
|
||||
def _set_fallback_knowledge(self):
|
||||
self.gejala = {}
|
||||
self.penyakit = {}
|
||||
self.aturan = []
|
||||
self.gejala_groups = self._empty_groups()
|
||||
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.penyakit = {}
|
||||
self.aturan = []
|
||||
self.gejala_groups = self._empty_groups()
|
||||
|
||||
def _load_from_database(self):
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -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([
|
||||
('umum', 'Gejala Umum / Sistemik'),
|
||||
('mulut', 'Gejala Mulut / Oral'),
|
||||
|
|
|
|||
Loading…
Reference in New Issue