// 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 (
D
Grievance Redressal — Case Registry
PostgreSQL 16 · 5 tables · 240,793 rows · Healthy
{/* Sidebar: tables */}
Tables
{D.dbTables.map(t => ( ))}
Views
{['High-priority open', 'SLA breach — last 30d', 'By department (agg.)'].map(v => ( ))}
Forms
{['New grievance', 'Escalation form', 'Resolution notes'].map(v => ( ))}
{/* Main */}
{/* Tab bar */}
{[ {id:'table', l:'Table', ic:'table'}, {id:'query', l:'Query', ic:'formula'}, {id:'form', l:'Form', ic:'fileText'}, {id:'schema',l:'Schema',ic:'db'}, ].map(v => ( ))}
{view === 'table' && (
{D.dbGrievances.map((row, i) => ( ))}
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]}
{/* Footer */}
Showing 1–8 of 18,470
{[1,2,3,4,'…',2308].map((p,i)=>( ))}
)} {view === 'query' && (
{/* AI prompt bar */}
K
Ask in plain English — I'll generate the SQL
"Show me high-priority open grievances filed this month, grouped by department, with SLA breaches highlighted"
{/* SQL editor */}
Generated SQL
{`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;`}
                
{/* Results */}
✓ Query completed in 84 ms · 6 rows
{[ ['Public Distribution', 341, 47, 8.2], ['Revenue', 289, 31, 6.7], ['Housing', 211, 24, 9.1], ['Social Welfare', 184, 12, 4.4], ['UIDAI', 142, 9, 3.8], ['Education', 89, 4, 5.1], ].map((r, i) => ( ))}
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]}
)} {view === 'form' && (
Form Designer

File a new grievance

All fields marked * are required. Your data is protected under the DPDP Act, 2023.

{[ {l:'Full name (as per Aadhaar)', req:true, kind:'text', ph:'e.g. Bharti Devi'}, {l:'Aadhaar last 4 digits', req:true, kind:'text', ph:'XXXX XXXX 1234'}, {l:'Mobile', req:true, kind:'text', ph:'+91'}, {l:'Category', req:true, kind:'select', opts:['Ration Card','Land Records','Pension','Aadhaar Correction','Other']}, {l:'Department', req:true, kind:'select', opts:['Public Distribution','Revenue','Social Welfare','UIDAI']}, {l:'Describe your grievance', req:true, kind:'textarea'}, {l:'Upload supporting documents',req:false, kind:'file'}, ].map((f, i) => (
{f.kind === 'textarea' ? (