import requests import streamlit as st from auth import require_auth from nightscout_client import NightscoutConfigError from reporting import LOW, VERY_LOW from ui_common import ( get_colors, load_range_data, render_completeness_warning, render_event_level, select_period_days, ) st.set_page_config(page_title="Glucose dashboard — Hypo events", page_icon="📊", layout="wide") require_auth() st.title("Hypo events") st.caption( "Detectie van hypoglykemie-events volgens de persistentieregel (FR5): een event " "telt pas na >=15 minuten ononderbroken onder de drempel, en eindigt pas na " ">=15 minuten ononderbroken herstel." ) start, end, days = select_period_days(default_label="90 dagen") try: glucose, _treatments = load_range_data(start, end) except NightscoutConfigError as exc: st.error(str(exc)) st.stop() except (requests.RequestException, ValueError) as exc: st.error(f"Kon geen data ophalen van Nightscout: {exc}") st.stop() if glucose.empty: st.info("Geen glucosemetingen gevonden in deze periode.") st.stop() render_completeness_warning(glucose, start, end) colors = get_colors() render_event_level(glucose, LOW, "below", f"Level 1 (<{LOW} mmol/L)", days, colors) st.divider() render_event_level(glucose, VERY_LOW, "below", f"Level 2 (<{VERY_LOW} mmol/L)", days, colors) st.caption(f"Periode: {start.strftime('%d-%m-%Y')} t/m {end.strftime('%d-%m-%Y')}")