Dagoverzicht stacks one glucose trace per calendar day (small multiples via a shared 0-24h x-axis). The two event pages share a new render_event_level() helper in ui_common.py so Level 1/Level 2 hypo and hyper are rendered identically: count/avg/longest/events-per-week metrics, a time-of-day histogram, and a table of individual events. Co-Authored-By: Claude Sonnet 5 <[email protected]>
45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
import requests
|
|
import streamlit as st
|
|
|
|
from auth import require_auth
|
|
from nightscout_client import NightscoutConfigError
|
|
from reporting import HIGH, VERY_HIGH
|
|
from ui_common import (
|
|
get_colors,
|
|
load_range_data,
|
|
render_event_level,
|
|
select_period_days,
|
|
)
|
|
|
|
st.set_page_config(page_title="Glucose dashboard — Hyper events", page_icon="📊", layout="wide")
|
|
require_auth()
|
|
|
|
st.title("Hyper events")
|
|
st.caption(
|
|
"Detectie van hyperglykemie-events volgens dezelfde persistentieregel als de "
|
|
"Hypo Events-pagina (FR6), symmetrisch toegepast op de bovengrenzen."
|
|
)
|
|
|
|
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()
|
|
|
|
colors = get_colors()
|
|
|
|
render_event_level(glucose, HIGH, "above", f"Level 1 (>{HIGH} mmol/L)", days, colors)
|
|
st.divider()
|
|
render_event_level(glucose, VERY_HIGH, "above", f"Level 2 (>{VERY_HIGH} mmol/L)", days, colors)
|
|
|
|
st.caption(f"Periode: {start.strftime('%d-%m-%Y')} t/m {end.strftime('%d-%m-%Y')}")
|