VigilanzaTurni/replit.md
marco370 133be08785 Update shift creation to ensure correct date objects are used
Adjust the `Shifts` component to correctly format `startTime` and `endTime` as Date objects before submitting to the `createMutation`, preventing potential issues with date parsing on the backend.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 99f0fce6-9386-489a-9632-1d81223cab44
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/6d543d2c-20b9-4ea6-93fe-70fe9b1d9f80/99f0fce6-9386-489a-9632-1d81223cab44/nGJAldO
2025-10-11 09:51:15 +00:00

217 lines
5.9 KiB
Markdown

# VigilanzaTurni - Sistema Gestione Turni per Istituti di Vigilanza
## Overview
Sistema professionale di gestione turni 24/7 per istituti di vigilanza con:
- Autenticazione multi-ruolo (Admin, Coordinatore, Guardia, Cliente)
- Gestione anagrafica guardie con skill matrix e certificazioni
- Pianificazione turni con calendario 24/7
- Gestione siti/commesse con tipologie servizio
- Dashboard operativa con KPI live
- Reportistica ore lavorate
- Sistema notifiche
## Project Architecture
### Stack Tecnologico
- **Frontend**: React + TypeScript + Tailwind CSS + Shadcn UI
- **Backend**: Express.js + TypeScript
- **Database**: PostgreSQL (Neon) con Drizzle ORM
- **Autenticazione**: Replit Auth (OIDC)
- **State Management**: TanStack Query v5
- **Routing**: Wouter
### Design System
- **Font Principale**: Inter (sans-serif)
- **Font Monospace**: JetBrains Mono (per matricole, ID)
- **Colori**:
- Primary: Blue (210, 100%, 45-50%) - operativo, affidabile
- Status Active: Green (140, 60%, 45%)
- Status Late/Warning: Orange (25, 90%, 55%)
- Status Emergency: Red (0, 70%, 55%)
- Status Inactive: Gray (220, 15%, 50%)
- **Tema**: Dark mode di default con supporto light mode
- **Componenti**: Shadcn UI con design operativo
## Database Schema
### Core Tables
**users** (Replit Auth):
- id, email, firstName, lastName, profileImageUrl
- role: admin | coordinator | guard | client
- createdAt, updatedAt
**guards**:
- id, userId (FK), badgeNumber (unique), phoneNumber
- Skills: isArmed, hasFireSafety, hasFirstAid, hasDriverLicense
- languages: array
**certifications**:
- id, guardId (FK), type, name
- issueDate, expiryDate
- status: valid | expiring_soon | expired
**sites**:
- id, name, address, clientId (FK)
- shiftType: fixed_post | patrol | night_inspection | quick_response
- minGuards, requiresArmed, requiresDriverLicense
- isActive
**shifts**:
- id, siteId (FK)
- startTime, endTime
- status: planned | active | completed | cancelled
**shift_assignments**:
- id, shiftId (FK), guardId (FK)
- checkInTime, checkOutTime
**notifications**:
- id, userId (FK), title, message, type
- isRead, relatedEntityId
## API Endpoints
### Authentication
- `GET /api/login` - Inizia flow OIDC
- `GET /api/callback` - Callback OIDC
- `GET /api/logout` - Logout
- `GET /api/auth/user` - Current user (protected)
### Guards
- `GET /api/guards` - Lista guardie con certificazioni
- `POST /api/guards` - Crea guardia
### Sites
- `GET /api/sites` - Lista siti
- `POST /api/sites` - Crea sito
### Shifts
- `GET /api/shifts` - Lista tutti i turni
- `GET /api/shifts/active` - Solo turni attivi
- `POST /api/shifts` - Crea turno
### Notifications
- `GET /api/notifications` - Lista notifiche utente
- `PATCH /api/notifications/:id/read` - Segna come letto
## Frontend Routes
| Route | Accesso | Descrizione |
|-------|---------|-------------|
| `/` | Public/Protected | Landing page o Dashboard |
| `/guards` | Admin, Coordinator | Gestione guardie |
| `/sites` | Admin, Coordinator, Client | Gestione siti |
| `/shifts` | Admin, Coordinator, Guard | Pianificazione turni |
| `/reports` | Admin, Coordinator, Client | Reportistica |
| `/notifications` | Admin, Coordinator, Guard | Notifiche |
## User Roles
### Admin
- Accesso completo a tutte le funzionalità
- Gestione guardie, siti, turni
- Visualizzazione reportistica completa
### Coordinator
- Pianificazione turni
- Assegnazione guardie
- Gestione siti operativi
- Reportistica
### Guard
- Visualizzazione turni assegnati
- Timbratura (future)
- Notifiche
- Profilo personale
### Client
- Visualizzazione siti di competenza
- Reportistica servizi
- KPI e SLA
## Key Features
### Dashboard Operativa
- KPI Cards: Turni attivi, Guardie totali, Siti attivi, Certificazioni in scadenza
- Live status turni in corso
- Alert certificazioni in scadenza (< 30 giorni)
### Gestione Guardie
- Anagrafica completa con foto profilo
- Skill matrix (armato, antincendio, primo soccorso, patente)
- Gestione certificazioni con scadenze automatiche
- Badge number univoco
### Gestione Siti/Commesse
- Tipologie servizio: Presidio fisso, Pattugliamento, Ispettorato notturno, Pronto intervento
- Requisiti minimi (n° guardie, armato, patente)
- Geolocalizzazione (future)
### Pianificazione Turni
- Calendario 24/7
- Assegnazione manuale guardie
- Vincoli base (future: riposi, orari massimi)
- Stati turno: pianificato, attivo, completato, annullato
### Reportistica
- Ore totali lavorate
- Ore mensili per guardia
- Statistiche turni completati
- Export dati (future)
## Development
### Setup
```bash
npm install
npm run db:push # Setup database
npm run dev # Start application
```
### Environment Variables
- `DATABASE_URL` - PostgreSQL connection string
- `SESSION_SECRET` - Session encryption key
- `REPLIT_DOMAINS` - Authorized domains for OIDC
- `ISSUER_URL` - OIDC provider URL (default: https://replit.com/oidc)
- `REPL_ID` - Replit application ID
### Testing
All interactive elements have `data-testid` attributes for automated testing.
## Recent Changes
### 2025-10-11
- Implementato schema database completo
- Creato frontend con tutte le pagine operative
- Configurato Replit Auth per autenticazione multi-ruolo
- Implementati endpoint API per CRUD completo
- Aggiunto sistema notifiche
- Fix bug conversione date nei turni
- Aggiunto SEO completo (title, meta description, Open Graph)
## Future Enhancements
### Priorità Alta
- App mobile guardie con geofencing e timbratura GPS
- Motore ottimizzazione turni con vincoli avanzati
- Sistema ronde con checkpoint NFC/QR
- Panic button e incident reporting
### Priorità Media
- Portale clienti dedicato
- Gestione dotazioni (armi, bodycam, radio)
- Integrazione payroll (Zucchetti/Teamsystem)
- Export reportistica avanzata
### Priorità Bassa
- Dashboard analytics avanzata
- Audit trail completo
- API pubblica per integrazioni terze
## User Preferences
- Interfaccia in italiano
- Dark mode di default
- Design operativo e funzionale (non decorativo)
- Focus su efficienza e densità informativa