cdss / rules.py
spriambada3's picture
save new rule integrated with cdss
6fa1fee
from models import PatientState
def rule_based_cdss(state: PatientState) -> str:
v = state.vitals
labs = state.labs
alerts = []
if state.patient_type == 'Mother':
if v.sbp < 100 and v.hr > 110 and ('Hb' in labs and labs['Hb'] <= 9):
alerts.append('PPH suspected: lakukan uterotonik, massage uterus, siapkan transfusi, monitoring 5 menit.')
if v.sbp >= 150 or v.dbp >= 110:
alerts.append('Preeklampsia')
if v.temp_c >= 38.5 and v.sbp <= 100:
alerts.append('Sepsis maternal: kultur darah & luka, antibiotik spektrum luas dalam 1 jam, monitor MAP & urine.')
if state.patient_type == 'Neonate':
if labs.get('BB', 9999) < 2500 or labs.get('UsiaGestasi_mgg', 99) < 37:
alerts.append('Prematurity/BBLR')
if v.spo2 < 90 or v.hr < 100:
alerts.append('Asfiksia: resusitasi neonatal sesuai NRP, ventilasi tekanan positif, evaluasi setiap 30 detik.')
if v.temp_c >= 38.0 and labs.get('CRP', 0) >= 10:
alerts.append('Sepsis neonatal: kultur darah, antibiotik empiris NICU, monitor tanda vital ketat.')
if state.patient_type == 'Gyn':
if labs.get('UrineOutput_ml_hr', 9999) < 20:
alerts.append('Komplikasi pasca bedah (curiga ureter): evaluasi segera, USG/CT urografi, konsult urologi.')
if v.temp_c >= 38.0 or labs.get('Luka') == 'bengkak+kemerahan':
alerts.append('Infeksi pasca-bedah: kultur luka, antibiotik, pertimbangkan debridement.')
if labs.get('PapSmear', '').startswith('abnormal'):
alerts.append('Pap smear abnormal tanpa follow-up: lakukan kolposkopi & biopsi, aktifkan notifikasi rujukan.')
if not alerts:
return 'Tidak ada alert prioritas tinggi. Lanjutkan pemantauan dan dokumentasi.'
return '\n- '.join(['ALERT:'] + alerts)