// Database — Visual database builder function ModuleDB() { const [view, setView] = React.useState('table'); const D = KS_DATA; const statusPill = (s) => { const map = { 'Open': 'info', 'In Review': 'warn', 'Resolved': 'ok', 'Escalated': 'err', }; return map[s] || ''; }; return (
| Case ID | Citizen | Category | Status | Priority | Filed | Department | ||
|---|---|---|---|---|---|---|---|---|
| {row[0]} | {row[1]} | {row[2]} | {row[3]} | {row[4] === 'High' && ● High} {row[4] === 'Med' && ● Med} {row[4] === 'Low' && ● Low} | {row[5]} | {row[6]} |
{`SELECT `}d.name{` AS department,
COUNT(*) AS total_open,
SUM(CASE WHEN g.sla_breached THEN 1 ELSE 0 END) AS breached,
ROUND(AVG(EXTRACT(EPOCH FROM (NOW() - g.filed_at))/86400), 1) AS avg_days_open
`}FROM{` grievances g
`}JOIN{` departments d ON d.id = g.department_id
`}WHERE{` g.status = 'Open'
`}AND{` g.priority = 'High'
`}AND{` g.filed_at >= date_trunc('month', CURRENT_DATE)
`}GROUP BY{` d.name
`}ORDER BY{` breached DESC, total_open DESC;`}
| Department | Total Open | Breached | Avg. days open |
|---|---|---|---|
| {r[0]} | {r[1]} | 30 ? 'var(--err)' : r[2] > 15 ? 'var(--warn)' : 'var(--ink-800)', fontWeight: r[2] > 30 ? 600 : 400}}>{r[2]} | {r[3]} |
All fields marked * are required. Your data is protected under the DPDP Act, 2023.