mcaoc-calculato / src /streamlit_app.py
ksmaru's picture
Update src/streamlit_app.py
80aec4f verified
Raw
History Blame Contribute Delete
2.44 kB
import streamlit as st
st.set_page_config(page_title="MCAOC-калькулятор", layout="centered")
st.title("🔴 MCAOC — Мастоцит-усиленная аллостатическая перегрузка")
st.markdown("###### Пятимерная модель Long-COVID • ME/CFS • MCS • MCAS • ноябрь 2025")
c1, c2 = st.columns(2)
with c1:
st.subheader("1. Классический allostatic load")
cortisol = st.number_input("Кортизол утренний (нмоль/л)", 50, 1000, 350)
dhea = st.number_input("DHEA-S (мкг/дл)", 20, 1000, 180)
crp = st.number_input("hs-CRP (мг/л)", 0.0, 50.0, 1.8, step=0.1)
hba1c = st.number_input("HbA1c (%)", 4.0, 12.0, 5.5, step=0.1)
hrv = st.number_input("HRV RMSSD (мс)", 5, 150, 32)
pss = st.slider("PSS-10 total", 0, 40, 15)
with c2:
st.subheader("2. Мастоцит-модуль + барьер")
tryptase = st.slider("Триптаза (нг/мл)", 1.0, 60.0, 7.5, step=0.1)
zonulin = st.slider("Зонолин (нг/мл)", 10.0, 200.0, 40.0, step=1.0)
# Расчёт
al = 0
if cortisol < 150 or cortisol > 550: al += 2.5
if dhea < 100: al += 2.0
if crp > 3: al += 1.8
if hba1c > 5.7: al += 1.2
if hrv < 30: al += 3.0
if pss > 20: al += 2.2
base_score = round(min(al, 10), 2)
mast = 0
if tryptase >= 20: mast = 6.0
elif tryptase >= 15: mast = 4.5
elif tryptase >= 11.4: mast = 2.8
zon = 2.8 if zonulin > 50 else 0
mcaoc_score = round(base_score * 0.45 + mast * 0.30 + zon * 0.15 + (1.0 if (mast + zon) > 0 else 0), 2)
mcaoc_score = min(mcaoc_score, 10.0)
# Результат
st.markdown(f"# MCAOC-score = **{mcaoc_score:.2f} / 10**")
if mcaoc_score < 3.0:
st.success("Стадия 0–1 — физиологический аллостаз")
elif mcaoc_score < 5.5:
st.warning("Стадия 2 — ранняя декомпенсация (TILT-начало)")
else:
st.error("Стадия 3–4 — тяжёлая мастоцит-усиленная перегрузка")
delta = round(mcaoc_score - base_score, 2)
if delta > 0:
st.info(f"Мастоцит-модуль добавил **+{delta}** баллов ({delta/base_score*100:+.0f} % к базовому AL)")
st.bar_chart({"Базовый AL-score": [base_score], "Полный MCAOC-score": [mcaoc_score]}, height=250)
st.caption("© 2025 PolySen • Первый в мире публичный калькулятор MCAOC")