-- Statistika příjezdů EV (den v týdnu × hodina); plní telemetry_collector při přechodu available → nabíjení. CREATE TABLE ems.ev_arrival_stats ( id SERIAL PRIMARY KEY, site_id INT NOT NULL REFERENCES ems.site(id), vehicle_id INT REFERENCES ems.asset_vehicle(id), charger_id INT NOT NULL REFERENCES ems.asset_ev_charger(id), day_of_week INT NOT NULL, arrival_hour INT NOT NULL, sample_count INT NOT NULL DEFAULT 0, last_updated TIMESTAMPTZ NOT NULL DEFAULT now(), CONSTRAINT chk_ev_arrival_stats_dow CHECK (day_of_week >= 0 AND day_of_week <= 6), CONSTRAINT chk_ev_arrival_stats_hour CHECK (arrival_hour >= 0 AND arrival_hour <= 23), UNIQUE (site_id, charger_id, day_of_week, arrival_hour) ); CREATE INDEX idx_ev_arrival_stats_site_charger ON ems.ev_arrival_stats (site_id, charger_id); COMMENT ON TABLE ems.ev_arrival_stats IS 'Statistika příjezdů EV dle dne v týdnu a hodiny (časová zóna Europe/Prague). Plní se z ev_session / telemetrie při detekci připojení (available → preparing/charging). Po ~4 týdnech dat lze odhadovat typickou hodinu příjezdu.'; -- Nejvýše jedna otevřená session na nabíječku (pro INSERT … ON CONFLICT při startu session). CREATE UNIQUE INDEX uidx_ev_session_charger_open ON ems.ev_session (charger_id) WHERE session_end IS NULL; GRANT SELECT ON ems.ev_arrival_stats TO ems_anon;