Compliance System
Levine Act (SB 1429) Compliance — City of Escondido
Role-based compliance dashboard for California's Levine Act and related government ethics requirements. Four user roles with distinct access levels, 22 routes, live MuniCode agenda integration, and evidence-based attorney investigation tools. Configured for Escondido City Council.
User Roles
Four distinct roles control what each user sees in the compliance dashboard. Access is enforced at both the route level (ComplianceRoleGuard) and the sidebar level (ComplianceDashboardLayout). Officers under investigation cannot see attorney tools.
Officer
12 pagesMayor, Councilmembers & Commissioners
Elected officials and appointed commissioners who are subject to the Levine Act and other compliance requirements. Officers see a personal compliance experience focused on their own status, deadlines, and self-service tools.
Attorney
18 pagesCity Attorney's Office
The City Attorney and designated legal staff who conduct compliance investigations, review contribution relationships, and provide legal guidance. Attorneys have the most powerful investigative tools, including evidence-based data exploration and AI-assisted legal research.
Clerk
12 pagesCity Clerk's Office
The City Clerk and administrative staff who manage data ingestion, user onboarding, and system configuration. Clerks handle the operational side — importing Netfile contributions, managing data sources, and assigning compliance roles to new users.
Admin
20 pagesSystem Administrators
Full system access for ForaCity platform administrators. Admins see everything — all attorney investigative tools and all clerk administrative tools. The only role that bridges both the City Attorney and City Clerk tool sets.
Compliance Site Map
All 22 compliance routes organized by category. Each route shows which roles can access it and what data sources it reads from.
| Route | Page | Access |
|---|---|---|
/compliance | Dashboard | officerattorneyclerkadmin |
/compliance/overview | Role Overview | officerattorneyclerkadmin |
/compliance/tour | Guided Tour | officerattorneyclerkadmin |
| Route | Page | Access |
|---|---|---|
/compliance/pay-to-play | 1. Pay-to-Play | officerattorneyclerkadmin |
/compliance/form-700 | 2. Form 700 | officerattorneyclerkadmin |
/compliance/conflicts | 3. Conflict of Interest | officerattorneyclerkadmin |
/compliance/ethics-training | 4. Ethics Training | officerattorneyclerkadmin |
/compliance/fiscal-training | 5. Fiscal Training | officerattorneyclerkadmin |
/compliance/harassment | 6. Harassment Prevention | officerattorneyclerkadmin |
/compliance/open-meetings | 7. Open Meetings | officerattorneyclerkadmin |
/compliance/campaign-finance | 8. Campaign Finance | officerattorneyclerkadmin |
| Route | Page | Access |
|---|---|---|
/compliance/my-dashboard | My Compliance | officer |
| Route | Page | Access |
|---|---|---|
/compliance/attorney-review | Attorney Review | attorneyadmin |
/compliance/investigations | Investigations | attorneyadmin |
/compliance/ai-assistant | Legal AI Assistant | attorneyadmin |
/compliance/knowledge-base | Knowledge Base | attorneyadmin |
/compliance/audit | Audit Trail | attorneyadmin |
/compliance/netfile-explorer | Netfile Explorer | attorneyadmin |
/compliance/agenda-recusal | Agenda Recusal | attorneyadmin |
| Route | Page | Access |
|---|---|---|
/compliance/data-sources | Data Sources | clerkadmin |
/compliance/onboarding | Onboarding & Invites | clerkadmin |
| Route | Page | Access |
|---|---|---|
/compliance/setup | Change City | officerattorneyclerkadmin |
External Integrations
City Council agenda scraping
Weekly (Monday 7 AM)Campaign finance contribution data
On-demand syncLegal AI assistant, agenda item classification
Per-requestQuick Links
Architecture Notes
- Compliance routes live under
/compliance/*in the main App.tsx router - Role enforcement uses
ComplianceRoleGuardat the route level and sidebar filtering inComplianceDashboardLayout - Backend procedures are gated by
complianceRolefield on the user record, checked via tRPC middleware - MuniCode scraping runs server-side via
node-cronevery Monday at 7:00 AM Pacific - Evidence-based contribution links use
contribution_evidence_linkstable with typed evidence categories - Attorney research dossiers are stored in
research_itemslinked tocompliance_investigations