// §3.8 Rate Health Dashboard — Completeness, Expiry, Validation function RateHealth({ user, perms, onAddRate }) { const [tab, setTab] = useState("completeness"); const tabs = [ { id: "completeness", label: "Completeness" }, { id: "expiry", label: "Expiry Alerts", count: EXPIRY_ALERTS.length }, { id: "validation", label: "Quality Validation", count: VALIDATION_RESULTS.filter(r => r.severity === "Error").length }, ]; return (
| Terminal | Cost Type | Equipment | Cargo | Status | Last Updated | |
|---|---|---|---|---|---|---|
|
{TERMINAL_BY_CODE[r.terminal]?.name}
{r.terminal}
|
{COST_TYPES.find(c => c.code === r.costType)?.name} | {r.equipment} | {r.cargo} | {r.status === "Present" && ✓ Present} {r.status === "Missing" && ✕ Missing} {r.status === "Expiring" && ⚠ Expiring in {r.expiryDays}d} | {r.lastUpdated || "—"} | {r.status === "Missing" && } {r.status === "Expiring" && } |
| Rate ID | Terminal | Cost Type | Equip / Cargo | Rate | Expiry | Days Left | Assigned Focal | |
|---|---|---|---|---|---|---|---|---|
| {r.id} |
{r.terminalName}
{r.terminal}
|
{r.costType} | {r.equipment} · {r.cargo} | {fmt.num(r.rate)} {r.ccy} | {r.expiry} |
{r.days}d
|
{r.focal} |
| Rate ID | Terminal | Cost Type | Expired | Days overdue | Assigned Focal | |
|---|---|---|---|---|---|---|
| {r.id} | {r.terminal} | {r.costType} | {r.expiry} | {Math.abs(r.days)}d ago | {r.focal} |
| Rule | Severity | Terminal | Target | Detail | |
|---|---|---|---|---|---|
|
{r.rule}
{r.name}
|
{r.severity === "Error" && |
{r.terminal} | {r.target} | {r.detail} | {r.rule === "QV-02" && } |