# 📋 Piano di Sviluppo - Sistema Gestione Analisi Personalizzazioni ERP

## 🎯 Obiettivo
Creare un sistema web-based per la gestione standardizzata e regolamentata delle analisi relative alle personalizzazioni ERP.

---

## 🏗️ Architettura del Sistema

### Stack Tecnologico
- **Backend**: PHP 8.1+ (senza framework, vanilla PHP per semplicità iniziale)
- **Database**: SQLite 3
- **Frontend**: HTML5, CSS3, JavaScript (vanilla o jQuery leggero)
- **Server**: Apache/Nginx con PHP-FPM

---

## 📊 Struttura Database SQLite

### Tabella: `utenti`
Gestione degli analisti e ruoli
```sql
- id (INTEGER PRIMARY KEY AUTOINCREMENT)
- username (TEXT UNIQUE NOT NULL)
- password_hash (TEXT NOT NULL)
- nome (TEXT NOT NULL)
- cognome (TEXT NOT NULL)
- email (TEXT UNIQUE NOT NULL)
- ruolo (TEXT NOT NULL) -- 'analista', 'revisore', 'amministratore'
- attivo (INTEGER DEFAULT 1)
- data_creazione (DATETIME DEFAULT CURRENT_TIMESTAMP)
```

### Tabella: `tipi_personalizzazione`
Catalogo dei tipi di personalizzazione standard
```sql
- id (INTEGER PRIMARY KEY AUTOINCREMENT)
- codice (TEXT UNIQUE NOT NULL) -- 'CAMPO', 'CONNETTORE', 'STAMPA', 'ELABORAZIONE', 'MODIFICA'
- nome (TEXT NOT NULL)
- descrizione (TEXT)
- template_config (TEXT) -- JSON con struttura campi richiesti
- attivo (INTEGER DEFAULT 1)
```

### Tabella: `analisi`
Documento principale di analisi
```sql
- id (INTEGER PRIMARY KEY AUTOINCREMENT)
- codice_analisi (TEXT UNIQUE NOT NULL) -- es: 'AN-2024-001'
- titolo (TEXT NOT NULL)
- tipo_personalizzazione_id (INTEGER NOT NULL, FK)
- analista_id (INTEGER NOT NULL, FK)
- stato (TEXT NOT NULL) -- 'bozza', 'in_revisione', 'approvato', 'archiviato'
- priorita (TEXT) -- 'bassa', 'media', 'alta', 'critica'
- descrizione_breve (TEXT)
- descrizione_dettagliata (TEXT)
- requisiti_funzionali (TEXT)
- requisiti_tecnici (TEXT)
- impatto_sistema (TEXT)
- note (TEXT)
- data_creazione (DATETIME DEFAULT CURRENT_TIMESTAMP)
- data_ultima_modifica (DATETIME)
- data_approvazione (DATETIME)
- approvatore_id (INTEGER, FK)
```

### Tabella: `dettagli_personalizzazione`
Dati specifici della personalizzazione (JSON flessibile)
```sql
- id (INTEGER PRIMARY KEY AUTOINCREMENT)
- analisi_id (INTEGER NOT NULL, FK)
- chiave (TEXT NOT NULL) -- es: 'nome_campo', 'endpoint_api', 'formato_stampa'
- valore (TEXT) -- valore o JSON per strutture complesse
- tipo_dato (TEXT) -- 'string', 'number', 'boolean', 'json', 'date'
```

### Tabella: `workflow_stati`
Storico delle transizioni di stato
```sql
- id (INTEGER PRIMARY KEY AUTOINCREMENT)
- analisi_id (INTEGER NOT NULL, FK)
- stato_precedente (TEXT)
- stato_successivo (TEXT NOT NULL)
- utente_id (INTEGER NOT NULL, FK)
- commento (TEXT)
- data_transizione (DATETIME DEFAULT CURRENT_TIMESTAMP)
```

### Tabella: `allegati`
File allegati alle analisi
```sql
- id (INTEGER PRIMARY KEY AUTOINCREMENT)
- analisi_id (INTEGER NOT NULL, FK)
- nome_file (TEXT NOT NULL)
- percorso_file (TEXT NOT NULL)
- tipo_file (TEXT)
- dimensione (INTEGER)
- uploader_id (INTEGER NOT NULL, FK)
- data_upload (DATETIME DEFAULT CURRENT_TIMESTAMP)
```

### Tabella: `versioni_analisi`
Versionamento delle analisi
```sql
- id (INTEGER PRIMARY KEY AUTOINCREMENT)
- analisi_id (INTEGER NOT NULL, FK)
- numero_versione (INTEGER NOT NULL)
- snapshot_dati (TEXT) -- JSON completo dello stato dell'analisi
- creatore_id (INTEGER NOT NULL, FK)
- data_versione (DATETIME DEFAULT CURRENT_TIMESTAMP)
- note_versione (TEXT)
```

---

## 🚀 Fasi di Sviluppo

### FASE 1: Setup e Database (Settimana 1)
**Obiettivo**: Creare l'infrastruttura base

#### Task 1.1: Setup progetto
- [ ] Creare struttura cartelle (`/config`, `/includes`, `/public`, `/database`, `/uploads`)
- [ ] Configurare file `.htaccess` per routing
- [ ] Creare file di configurazione (`config.php`)

#### Task 1.2: Database
- [ ] Creare script SQL per tutte le tabelle
- [ ] Creare classe `Database.php` per gestione connessioni SQLite
- [ ] Creare script di migrazione/installazione
- [ ] Popolare tabelle base (`tipi_personalizzazione`)

#### Task 1.3: Autenticazione base
- [ ] Creare sistema login/logout
- [ ] Implementare sessioni PHP sicure
- [ ] Creare middleware per controllo accessi

---

### FASE 2: Gestione Utenti e Ruoli (Settimana 1-2)
**Obiettivo**: Sistema completo di autenticazione e autorizzazione

#### Task 2.1: CRUD Utenti
- [ ] Pagina lista utenti (solo admin)
- [ ] Form creazione/modifica utente
- [ ] Gestione password (hash con `password_hash()`)
- [ ] Attivazione/disattivazione utenti

#### Task 2.2: Sistema ruoli
- [ ] Middleware per controllo ruoli
- [ ] Permessi differenziati per pagina
- [ ] Helper functions per check permessi

---

### FASE 3: Template e Form Personalizzazioni (Settimana 2-3)
**Obiettivo**: Form strutturati per ogni tipo di personalizzazione

#### Task 3.1: Sistema template
- [ ] Classe `TemplateManager.php` per gestione template
- [ ] Definire JSON schema per ogni tipo:
  - **CAMPO**: nome_campo, tabella, tipo_dato, obbligatorio, validazione
  - **CONNETTORE**: sistema_esterno, protocollo, endpoint, autenticazione, mapping_dati
  - **STAMPA**: nome_stampa, formato, parametri, layout, destinazione
  - **ELABORAZIONE**: tipo_elaborazione, input, output, frequenza, dipendenze
  - **MODIFICA**: modulo_erp, componente, tipo_modifica, impatto, rollback

#### Task 3.2: Form dinamici
- [ ] Pagina creazione analisi con selezione tipo
- [ ] Generazione form dinamico basato su template
- [ ] Validazione lato client (JavaScript)
- [ ] Validazione lato server (PHP)

#### Task 3.3: Salvataggio dati
- [ ] Salvataggio analisi principale
- [ ] Salvataggio dettagli personalizzazione
- [ ] Generazione automatica `codice_analisi` (es: AN-2024-001)

---

### FASE 4: Workflow di Approvazione (Settimana 3-4)
**Obiettivo**: Sistema completo di workflow

#### Task 4.1: Gestione stati
- [ ] Definire stati possibili e transizioni
- [ ] Matrice transizioni (chi può fare cosa)
- [ ] Logica validazione transizioni

#### Task 4.2: Interfaccia workflow
- [ ] Pulsanti azione in base a stato e ruolo
- [ ] Form commenti per transizioni
- [ ] Notifiche cambio stato (email o sistema)

#### Task 4.3: Storico workflow
- [ ] Visualizzazione timeline eventi
- [ ] Dettaglio transizioni con commenti
- [ ] Filtri per stato

---

### FASE 5: Dashboard e Ricerca (Settimana 4-5)
**Obiettivo**: Interfaccia principale per gestione analisi

#### Task 5.1: Dashboard principale
- [ ] Statistiche generali (analisi per stato, per tipo, per analista)
- [ ] Grafici semplici (Chart.js o simile)
- [ ] Ultime analisi modificate
- [ ] Analisi in attesa di approvazione

#### Task 5.2: Lista analisi
- [ ] Tabella con paginazione
- [ ] Filtri avanzati (stato, tipo, analista, data, priorità)
- [ ] Ricerca full-text
- [ ] Ordinamento colonne

#### Task 5.3: Dettaglio analisi
- [ ] Pagina visualizzazione completa
- [ ] Stampa/export PDF
- [ ] Modifica (solo se in bozza o in_revisione)
- [ ] Visualizzazione storico modifiche

---

### FASE 6: Versionamento e Allegati (Settimana 5-6)
**Obiettivo**: Tracciamento versioni e gestione file

#### Task 6.1: Sistema versionamento
- [ ] Creazione snapshot automatico ad ogni modifica importante
- [ ] Visualizzazione versioni storiche
- [ ] Confronto tra versioni
- [ ] Ripristino versione precedente

#### Task 6.2: Gestione allegati
- [ ] Upload file con validazione tipo/dimensione
- [ ] Storage sicuro in `/uploads`
- [ ] Download protetto
- [ ] Anteprima immagini/documenti

---

### FASE 7: Refinement e Testing (Settimana 6-7)
**Obiettivo**: Pulizia, ottimizzazione e test

#### Task 7.1: Ottimizzazioni
- [ ] Indici database per performance
- [ ] Caching query frequenti
- [ ] Ottimizzazione query SQL

#### Task 7.2: Sicurezza
- [ ] Sanitizzazione input
- [ ] Protezione SQL injection (prepared statements)
- [ ] Protezione XSS
- [ ] CSRF tokens
- [ ] Validazione upload file

#### Task 7.3: Testing
- [ ] Test funzionali principali
- [ ] Test workflow
- [ ] Test permessi e ruoli

---

## 📁 Struttura File Progetto

```
ProvaAnalisti/
├── config/
│   ├── config.php          # Configurazione generale
│   └── database.php        # Configurazione DB
├── database/
│   ├── schema.sql          # Schema completo database
│   ├── init.sql            # Dati iniziali
│   └── analisi.db          # File SQLite (generato)
├── includes/
│   ├── Database.php        # Classe gestione DB
│   ├── Auth.php            # Classe autenticazione
│   ├── TemplateManager.php # Gestione template
│   ├── Workflow.php        # Logica workflow
│   └── helpers.php         # Funzioni utility
├── public/
│   ├── index.php           # Entry point
│   ├── login.php
│   ├── dashboard.php
│   ├── analisi/
│   │   ├── lista.php
│   │   ├── crea.php
│   │   ├── modifica.php
│   │   └── dettaglio.php
│   ├── utenti/
│   │   └── gestione.php
│   ├── css/
│   │   └── style.css
│   ├── js/
│   │   └── main.js
│   └── .htaccess
├── uploads/                # File allegati (protetto)
└── README.md
```

---

## 🎨 Considerazioni UI/UX

### Design
- Interfaccia pulita e moderna
- Responsive design (mobile-friendly)
- Colori distintivi per stati workflow
- Icone intuitive per azioni

### Esperienza Utente
- Feedback immediato su azioni
- Conferme per azioni critiche
- Messaggi di errore chiari
- Tooltip informativi

---

## 🔒 Sicurezza

### Implementazioni chiave
1. **Password**: Hash con `password_hash()` e `password_verify()`
2. **SQL Injection**: Sempre prepared statements
3. **XSS**: `htmlspecialchars()` su tutti gli output
4. **CSRF**: Token su form critici
5. **File Upload**: Validazione tipo, dimensione, scan antivirus (opzionale)
6. **Session**: Configurazione sicura, timeout automatico

---

## 📈 Metriche e Report

### Dashboard statistiche
- Analisi per stato (grafico a torta)
- Analisi per tipo personalizzazione
- Analisi per analista (performance)
- Tempo medio approvazione
- Analisi per priorità

---

## 🚀 Deploy e Manutenzione

### Requisiti server
- PHP 8.1+
- SQLite 3
- Apache/Nginx
- Estensioni PHP: PDO, SQLite3, JSON, mbstring

### Backup
- Script backup automatico database SQLite
- Backup file uploads
- Cron job settimanale

---

## 📝 Note Implementative

### Convenzioni codice
- PSR-12 coding standard
- Nomi variabili in italiano (dato contesto)
- Commenti in italiano
- Funzioni con prefisso namespace (es: `Analisi::crea()`)

### Performance
- Indici su colonne FK e campi ricerca frequente
- Paginazione risultati (max 50 per pagina)
- Lazy loading per dati pesanti

---

## ✅ Checklist Pre-Lancio

- [ ] Database popolato con dati iniziali
- [ ] Utente amministratore creato
- [ ] Template personalizzazioni configurati
- [ ] Test workflow completo
- [ ] Backup automatico configurato
- [ ] Documentazione utente base
- [ ] Training analisti

---

**Tempo stimato sviluppo**: 6-7 settimane (1 sviluppatore full-time)

**Prossimi passi**: Iniziare con FASE 1 - Setup e Database

