VigilanzaTurni/replit.md
marco370 7fca0e991e Fix date conversion errors in shift scheduling and add testing attributes
Correctly handles date conversions for shifts by implementing robust validation on both frontend and backend, and adds data-testid attributes to interactive elements for automated testing.

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

6.3 KiB

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

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 definitivo conversione date nei turni:
    • Implementato insertShiftFormSchema con zodResolver
    • Validazione robusta: string → refine (check valid date) → transform to Date
    • Frontend: form validation client-side con messaggi errore chiari
    • Backend: validazione ISO strings prima di conversione a Date
    • Test e2e passati con successo
  • Aggiunto SEO completo (title, meta description, Open Graph)
  • Tutti i componenti testabili con data-testid attributes

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