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

5.9 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 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