/* global React */
/**
* PharmacySummary — Live pharmacy ops widget (M2 data wiring)
* GET /api/v1/public/pharmacy/summary (unauthenticated, 5-min refresh)
* DATA_CONTRACTS: pharmacy.json
*/
const { useState, useEffect } = React;
const API = "https://api.conceptualhealth.com/api/v1/public/pharmacy/summary";
const REFRESH_MS = 5 * 60 * 1000;
const DEMO = { skus_on_hand: 2847, refills_pending: 14, adherence_pdc_pct: 83.2, csm_alerts_open: 0, nutrition_rxs_active: 126 };
function Tile({ label, value, sub, accent }) {
return (
{label}
{value}
{sub &&
{sub}
}
);
}
function PharmacySummary() {
const [data, setData] = useState(null);
const [live, setLive] = useState(false);
const fetch_ = () =>
fetch(API).then(r => r.ok ? r.json() : null).then(j => { if (j) { setData(j); setLive(true); } else { setData(DEMO); setLive(false); } }).catch(() => { setData(DEMO); setLive(false); });
useEffect(() => { fetch_(); const id = setInterval(fetch_, REFRESH_MS); return () => clearInterval(id); }, []);
if (!data) return null;
const badge = { display: "inline-flex", alignItems: "center", gap: 5, fontSize: 9, fontFamily: "var(--font-mono,monospace)", padding: "3px 9px", borderRadius: 20, background: live ? "rgba(16,185,129,0.12)" : "rgba(156,163,175,0.12)", color: live ? "#10b981" : "#9ca3af", border: live ? "1px solid rgba(16,185,129,0.25)" : "1px solid rgba(156,163,175,0.2)" };
return (
Pharmacy live data
{live ? "LIVE" : "DEMO"}
0 ? "#fbbf24" : undefined} sub="awaiting fill" />
0 ? "#ef4444" : undefined} sub="controlled substance" />
);
}
window.PharmacySummary = PharmacySummary;