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")