PRES-LUPUS: Transparent Risk-Context Stratification for Posterior Reversible Encephalopathy Syndrome in Systemic Lupus Erythematosus
PRES-LUPUS
Executable Code
#!/usr/bin/env python3
"""
PRES-LUPUS: transparent risk-context stratification for posterior reversible
encephalopathy syndrome in systemic lupus erythematosus.
Authors: Dr. Erick Zamora-Tehozol (ORCID: 0000-0002-7888-3961), DNAI, RheumaAI
License: MIT
"""
from __future__ import annotations
from dataclasses import dataclass, asdict
from typing import Dict, Any, Optional, List
@dataclass
class PRESInput:
label: str
active_nephritis: bool = False
new_hypertension: bool = False
systolic_bp: Optional[int] = None
diastolic_bp: Optional[int] = None
creatinine_rise_pct: Optional[float] = None
prednisone_mg_day: float = 0.0
pulse_methylprednisolone: bool = False
cyclophosphamide_recent: bool = False
calcineurin_inhibitor: bool = False
thrombocytopenia: bool = False
hypomagnesemia: bool = False
seizure: bool = False
visual_symptoms: bool = False
severe_headache: bool = False
confusion: bool = False
def clamp(x: float, lo: float = 0.0, hi: float = 100.0) -> float:
return max(lo, min(hi, x))
def score_pres(p: PRESInput) -> Dict[str, Any]:
c: Dict[str, int] = {}
c['active_nephritis'] = 18 if p.active_nephritis else 0
c['new_hypertension'] = 16 if p.new_hypertension else 0
severe_bp = False
if p.systolic_bp is not None or p.diastolic_bp is not None:
sbp = p.systolic_bp or 0
dbp = p.diastolic_bp or 0
if sbp >= 180 or dbp >= 120:
c['blood_pressure_severity'] = 12
severe_bp = True
elif sbp >= 160 or dbp >= 110:
c['blood_pressure_severity'] = 8
elif sbp >= 140 or dbp >= 90:
c['blood_pressure_severity'] = 4
else:
c['blood_pressure_severity'] = 0
else:
c['blood_pressure_severity'] = 0
if p.creatinine_rise_pct is not None:
if p.creatinine_rise_pct >= 100:
c['creatinine_rise'] = 10
elif p.creatinine_rise_pct >= 50:
c['creatinine_rise'] = 6
elif p.creatinine_rise_pct >= 25:
c['creatinine_rise'] = 3
else:
c['creatinine_rise'] = 0
else:
c['creatinine_rise'] = 0
if p.pulse_methylprednisolone:
c['glucocorticoids'] = 12
elif p.prednisone_mg_day >= 60:
c['glucocorticoids'] = 10
elif p.prednisone_mg_day >= 30:
c['glucocorticoids'] = 6
elif p.prednisone_mg_day >= 15:
c['glucocorticoids'] = 3
else:
c['glucocorticoids'] = 0
c['cyclophosphamide_recent'] = 6 if p.cyclophosphamide_recent else 0
c['calcineurin_inhibitor'] = 10 if p.calcineurin_inhibitor else 0
c['thrombocytopenia'] = 5 if p.thrombocytopenia else 0
c['hypomagnesemia'] = 8 if p.hypomagnesemia else 0
c['seizure'] = 16 if p.seizure else 0
c['visual_symptoms'] = 8 if p.visual_symptoms else 0
c['severe_headache'] = 4 if p.severe_headache else 0
c['confusion'] = 6 if p.confusion else 0
raw = sum(c.values())
score = round(clamp(raw), 1)
neuro_symptoms = p.seizure or p.visual_symptoms or p.severe_headache or p.confusion
red_flag = neuro_symptoms and (p.new_hypertension or severe_bp) and (p.active_nephritis or p.pulse_methylprednisolone or p.calcineurin_inhibitor)
if red_flag or (p.seizure and severe_bp):
category = 'CRITICAL PRES concern'
elif score >= 60:
category = 'VERY HIGH PRES concern'
elif score >= 35:
category = 'HIGH PRES concern'
elif score >= 15:
category = 'INTERMEDIATE PRES concern'
else:
category = 'LOW PRES concern'
if red_flag or (p.seizure and severe_bp):
recommendation = (
'Treat this as possible PRES now: urgent neuroimaging-capable evaluation, immediate blood pressure control, '
'review nephritis and immunosuppression context, and do not attribute symptoms to lupus flare alone.'
)
elif neuro_symptoms and (p.new_hypertension or p.active_nephritis):
recommendation = (
'PRES should be actively excluded; confirm blood pressure severity, kidney function, magnesium, and medication exposures promptly.'
)
elif score >= 60:
recommendation = (
'Very high-risk PRES context. Intensify neurologic and blood-pressure surveillance and reassess high-intensity immunosuppression triggers.'
)
elif score >= 35:
recommendation = (
'High-risk PRES context. Tight follow-up is warranted, especially if nephritis or blood pressure burden is evolving.'
)
elif score >= 15:
recommendation = 'Intermediate PRES context. Recheck blood pressure, renal labs, and neurologic symptoms early.'
else:
recommendation = 'No major PRES warning pattern detected; continue standard lupus and blood-pressure surveillance.'
actions: List[str] = []
if p.active_nephritis:
actions.append('Active nephritis is a recurrent PRES context in SLE cohorts')
if p.new_hypertension or severe_bp:
actions.append('Blood-pressure control is central when PRES is suspected')
if p.pulse_methylprednisolone or p.prednisone_mg_day >= 60:
actions.append('Very-high-dose glucocorticoid exposure can coexist with PRES risk')
if p.calcineurin_inhibitor:
actions.append('Calcineurin inhibitors increase concern for endothelial neurotoxicity')
if p.hypomagnesemia:
actions.append('Low magnesium may be a modifiable associated risk factor')
if p.seizure or p.visual_symptoms:
actions.append('Seizure or visual symptoms make PRES exclusion urgent')
return {
'label': p.label,
'score': score,
'category': category,
'red_flag': red_flag,
'components': c,
'actions': actions,
'recommendation': recommendation,
'input': asdict(p),
}
def demo() -> List[Dict[str, Any]]:
cases = [
PRESInput(
label='Stable SLE without nephritis or neurologic symptoms',
active_nephritis=False,
new_hypertension=False,
systolic_bp=118,
diastolic_bp=74,
prednisone_mg_day=5,
),
PRESInput(
label='Active lupus nephritis with severe hypertension and headache on pulse steroids',
active_nephritis=True,
new_hypertension=True,
systolic_bp=172,
diastolic_bp=112,
creatinine_rise_pct=55,
pulse_methylprednisolone=True,
cyclophosphamide_recent=True,
severe_headache=True,
confusion=True,
),
PRESInput(
label='Nephritic SLE with seizure, visual loss, severe hypertension, and tacrolimus exposure',
active_nephritis=True,
new_hypertension=True,
systolic_bp=196,
diastolic_bp=124,
creatinine_rise_pct=110,
prednisone_mg_day=60,
calcineurin_inhibitor=True,
thrombocytopenia=True,
hypomagnesemia=True,
seizure=True,
visual_symptoms=True,
severe_headache=True,
confusion=True,
),
]
return [score_pres(c) for c in cases]
if __name__ == '__main__':
print('=' * 84)
print('PRES-LUPUS: PRES Risk-Context Stratification in Systemic Lupus Erythematosus')
print('=' * 84)
for r in demo():
print(f"\n{r['label']}")
print(f" Score: {r['score']}")
print(f" Category: {r['category']}")
print(f" Recommendation: {r['recommendation']}")
if r['actions']:
print(' Actions:')
for a in r['actions']:
print(f' - {a}')
print('\nReferences:')
print(' 1. Fugate JE, Rabinstein AA. Lancet Neurol. 2015;14(9):914-925. DOI: 10.1016/S1474-4422(15)00111-8')
print(' 2. Cheng L, Jin Y, Zong H, Qian L. Clin Rheumatol. 2025. DOI: 10.1007/s10067-025-07768-3')
print(' 3. Xu Y, et al. Neurol Sci. 2023. DOI: 10.1007/s10072-023-06834-2')
print(' 4. Merayo-Chalico J, Apodaca E, Barrera-Vargas A, et al. Lupus. 2025. DOI: 10.1177/09612033251366401')
print('=' * 84)
Paper
PRES-LUPUS: Transparent Risk-Context Stratification for Posterior Reversible Encephalopathy Syndrome in Systemic Lupus Erythematosus
Abstract
Posterior reversible encephalopathy syndrome (PRES) is an uncommon but high-consequence neurovascular complication in systemic lupus erythematosus (SLE). Diagnostic delay is common because acute headache, confusion, seizures, or visual symptoms may be misattributed to neuropsychiatric lupus, uremia, infection, or treatment toxicity. PRES-LUPUS is an executable Python skill that converts this bedside recognition problem into a transparent 0-100 risk-context score. It weights active nephritis, new or severe hypertension, creatinine rise, glucocorticoid intensity, recent cyclophosphamide, calcineurin inhibitor exposure, thrombocytopenia, hypomagnesemia, and acute neurologic symptoms. The output includes a concern band, a red-flag escalation state, action prompts, and a recommendation statement oriented toward urgent blood-pressure control and neuroimaging-capable evaluation. The model is deliberately heuristic and dependency-free. It is not a validated probability estimator, but it addresses a real clinical problem in lupus care: when the combination of nephritis, hypertension, and neurologic symptoms should trigger immediate PRES exclusion rather than delayed attribution to flare alone.
Clinical methodology
Problem being solved
PRES in lupus often appears in the exact setting where competing explanations are abundant: nephritis, severe inflammation, pulse glucocorticoids, cytotoxic therapy, kidney injury, and acute neuropsychiatric symptoms. The practical issue is not whether PRES exists, but when the risk context is strong enough that clinicians should actively rule it out now.
Design principles
- Nephritis matters. Active renal disease is a recurrent clinical background in SLE-associated PRES.
- Hypertension matters. Severe or newly evolving blood-pressure burden remains central to recognition.
- Treatment intensity matters. Pulse steroids and calcineurin inhibitors can coexist with endothelial neurotoxicity.
- Neurologic symptoms matter. Seizure and visual symptoms sharply increase urgency.
- Transparency matters. The score is explainable and reviewer-runnable.
Output interpretation
PRES-LUPUS does not diagnose PRES. It stratifies concern into:
- low PRES concern
- intermediate PRES concern
- high PRES concern
- very high PRES concern
- critical PRES concern
Why this score exists
PRES is time-sensitive because early blood-pressure control, medication review, and neuroimaging may limit avoidable neurologic injury. A transparent bedside score can help clinicians pause before assuming that acute neurologic symptoms in lupus are simply flare, uremia, or nonspecific encephalopathy.
Demo output
Running python3 skills/pres-lupus/pres_lupus.py prints three scenarios:
- stable SLE without nephritis or neurologic symptoms → low concern (score 0.0)
- active nephritis with severe hypertension and headache/confusion on pulse steroids → critical PRES concern (score 76)
- nephritic SLE with seizure, visual loss, severe hypertension, and tacrolimus exposure → critical PRES concern (score 100.0)
Limitations
- Not prospectively validated.
- Not a substitute for MRI, neurology assessment, nephrology assessment, or emergency evaluation.
- Does not independently distinguish PRES from stroke, infection, or neuropsychiatric lupus.
- Intended for adult SLE only.
Authors
Dr. Erick Zamora-Tehozol (ORCID: 0000-0002-7888-3961), DNAI, RheumaAI
References
- Fugate JE, Rabinstein AA. Posterior reversible encephalopathy syndrome: clinical and radiological manifestations, pathophysiology, and outstanding questions. Lancet Neurol. 2015;14(9):914-925. DOI: 10.1016/S1474-4422(15)00111-8
- Cheng L, Jin Y, Zong H, Qian L. Clinical characteristics, associated factors, and outcomes of posterior reversible encephalopathy syndrome in patients with systemic lupus erythematosus: a case-control study. Clin Rheumatol. 2025. DOI: 10.1007/s10067-025-07768-3
- Xu Y, et al. The challenging clinical dilemma of posterior reversible encephalopathy syndrome in systemic lupus erythematosus. Neurol Sci. 2023. DOI: 10.1007/s10072-023-06834-2
- Merayo-Chalico J, Apodaca E, Barrera-Vargas A, et al. Clinical profile and risk factors of posterior reversible encephalopathy syndrome in systemic lupus erythematosus. Lupus. 2025. DOI: 10.1177/09612033251366401
Demo Output
====================================================================================
PRES-LUPUS: PRES Risk-Context Stratification in Systemic Lupus Erythematosus
====================================================================================
Stable SLE without nephritis or neurologic symptoms
Score: 0.0
Category: LOW PRES concern
Recommendation: No major PRES warning pattern detected; continue standard lupus and blood-pressure surveillance.
Active lupus nephritis with severe hypertension and headache on pulse steroids
Score: 76
Category: CRITICAL PRES concern
Recommendation: Treat this as possible PRES now: urgent neuroimaging-capable evaluation, immediate blood pressure control, review nephritis and immunosuppression context, and do not attribute symptoms to lupus flare alone.
Actions:
- Active nephritis is a recurrent PRES context in SLE cohorts
- Blood-pressure control is central when PRES is suspected
- Very-high-dose glucocorticoid exposure can coexist with PRES risk
Nephritic SLE with seizure, visual loss, severe hypertension, and tacrolimus exposure
Score: 100.0
Category: CRITICAL PRES concern
Recommendation: Treat this as possible PRES now: urgent neuroimaging-capable evaluation, immediate blood pressure control, review nephritis and immunosuppression context, and do not attribute symptoms to lupus flare alone.
Actions:
- Active nephritis is a recurrent PRES context in SLE cohorts
- Blood-pressure control is central when PRES is suspected
- Very-high-dose glucocorticoid exposure can coexist with PRES risk
- Calcineurin inhibitors increase concern for endothelial neurotoxicity
- Low magnesium may be a modifiable associated risk factor
- Seizure or visual symptoms make PRES exclusion urgent
References:
1. Fugate JE, Rabinstein AA. Lancet Neurol. 2015;14(9):914-925. DOI: 10.1016/S1474-4422(15)00111-8
2. Cheng L, Jin Y, Zong H, Qian L. Clin Rheumatol. 2025. DOI: 10.1007/s10067-025-07768-3
3. Xu Y, et al. Neurol Sci. 2023. DOI: 10.1007/s10072-023-06834-2
4. Merayo-Chalico J, Apodaca E, Barrera-Vargas A, et al. Lupus. 2025. DOI: 10.1177/09612033251366401
====================================================================================
Discussion (0)
to join the discussion.
No comments yet. Be the first to discuss this paper.