PWA per tracciare le timbrature dei dipendenti pubblici italiani. Funziona offline, si installa come app e salva i dati solo sul dispositivo.
- 36 ore settimanali con saldo aggiornato in tempo reale
- Pausa pranzo automatica: con coppia singola lun-gio 30 minuti fissi, con multi-timbrature conta la pausa reale; venerdì nessuna pausa automatica, anche oltre 6h
- Smart working e assenze con ore precompilate
- Timbrature multiple nello stesso giorno, con aggiunta manuale guidata dalla card del giorno
- Suggerimento ingresso/uscita sull'ultimo giorno utile in sede, considerando smart e assenze gia pianificati
- Export JSON e CSV
- Funzionamento offline e installazione come PWA
- Nessun account
- Nessun backend
- Storage locale: localStorage come primario, IndexedDB come fallback
- Le settimane salvate restano disponibili dopo gli update; totali e saldi vengono ricalcolati dai dati inseriti
- Export manuale quando vuoi
Nota iOS: Safari può eliminare i dati PWA dopo 7 giorni di inutilizzo. Conviene aprire l'app almeno una volta a settimana o esportare periodicamente un backup JSON.
Installazione rapida:
- Android: apri il link in Chrome e tocca "Installa" o "Aggiungi a schermata Home"
- iPhone/iPad: apri in Safari o Chrome, poi Condividi → "Aggiungi a Home"
- Desktop: apri in Chrome o Edge e usa il pulsante Installa nella barra indirizzi
Pattern MVC + Observer + Repository, zero dipendenze:
js/
├── app.js # Bootstrap, SW registration, update flow
├── controllers/
│ └── AppController.js # Orchestrazione MVC
├── models/
│ ├── TimeEntry.js # Singola timbratura
│ └── WeekData.js # Dati settimana
├── views/
│ ├── UIManager.js # Rendering UI, toast, PWA install
│ └── ModalManager.js # Modali (edit, add, confirm, clean)
├── services/
│ ├── TimeCalculator.js # Calcoli ore, pause, delta, suggerimento orari ultimo giorno utile
│ ├── WeekNavigator.js # Navigazione settimane ISO 8601
│ └── ExportService.js # Export JSON / CSV, import
├── storage/
│ ├── StorageManager.js # Repository pattern, dual storage
│ ├── LocalStorageAdapter.js
│ └── IndexedDBAdapter.js
└── utils/
├── EventBus.js # Pub/Sub con eventi tipizzati
├── DateUtils.js # ISO 8601, formatting, parsing
└── Validators.js # Validazione orari
Stack: Vanilla JavaScript ES Modules, CSS singolo, localStorage + IndexedDB, Service Worker con app shell network-first, manifest PWA.
git clone https://github.com/VTvito/italian-pa-employee-attendance.git
cd italian-pa-employee-attendance
python -m http.server 8000http://localhost:8000/tests/Le costanti principali sono in js/services/TimeCalculator.js:
export const CONFIG = {
WEEKLY_TARGET_HOURS: 36,
PAUSE_MINUTES: 30,
SMART_HOURS_DEFAULT: 7.5,
SMART_HOURS_FRIDAY: 6,
DAILY_TARGET_HOURS: 7.5,
FRIDAY_TARGET_HOURS: 6
};Qualsiasi hosting statico va bene: GitHub Pages, Netlify, Vercel, Cloudflare Pages o un semplice server HTTP.
Pull request benvenute. Per modifiche sostanziali conviene aprire prima una issue.
Distribuito sotto licenza MIT — vedi LICENSE.
VTvito — @VTvito
