# Contesto Ultima Sessione **Data**: 2026-03-10 **Durata**: sessione lunga (continuazione da sessione precedente) --- ## Cosa abbiamo fatto ### 1. Fix feedback.js — bottone FAB non visibile - `common.js`: aggiunto auto-inject di `feedback.js` su tutte le pagine autenticate - `feedback.js`: icona cambiata in `fa-comment-medical`, label testo "Segnala / Feedback" - `style.css`: FAB ridisegnato come pill cyan (#06B6D4) con animazione pulse, stile lg231 - Commit: `4143dd3` ### 2. Fix register.html — P.IVA e invite token - P.IVA: aggiunta validazione locale checksum IVA italiana (cifra di controllo) - Messaggio: se P.IVA valida → verde "✓ P.IVA valida" anche se CertiSource offline - Parametro URL: ora legge `?invite=` (oltre a `?invite_token=` e `?token=`) - Placeholder campo invite aggiornato: `inv_a1b2c3d4e5f6...` - `OnboardingController.php`: lookup-piva con CertiSource fallisce → 404 graceful (non 500) - Commit: `d603f35`, `67560e1` ### 3. Fix utente presidenza@agile.software - Email già esistente (cristiano.benassati@gmail.com, id=4) bloccava registrazione - Creato nuovo account: `presidenza@agile.software` / Silvia Garretto / org_admin (id=103) - Password resettata a: `Presidenza2026!` - Invite token inv_f25a41... (id=4) ancora pending (non usato — bisogna fare onboarding) ### 4. FEAT: invite con dati destinatario (pre-compilazione form) - `InviteController.php`: accetta `recipient_first_name/last_name/email/vat`, salva in `metadata` JSON - `InviteController.php`: `show()` parsa metadata e espone `metadata_recipient` - `InviteController.php`: `invite_url` ora punta a `register.html?invite=` (era onboarding.html) - `AuthController.php` validateInvite: ritorna `recipient` con dati del destinatario - `register.html`: dopo validazione invite, pre-compila nome/cognome/email/piva dal recipient - Commit: `7bb92b1` ### 5. licenseExt.html — aggiornamento completo - Aggiunta sezione "Dati destinatario" con campi: Nome, Cognome, Email, P.IVA - `generateLicense()`: include `recipient_*` nel payload API - `renderGenResult()`: mostra link pronto da inviare + riga verde con dati destinatario - `resetForm()`: pulisce anche i campi recipient - `showDetail()`: mostra box verde con dati destinatario (metadata_recipient) - `revokeInvite()`: già funzionante via DELETE /api/invites/{id} - Commit: `e02e0e2` --- ## File modificati in questa sessione ### Backend - `application/controllers/OnboardingController.php` — lookup-piva: 500→404 graceful - `application/controllers/InviteController.php` — recipient data in metadata, invite_url fix, show() con metadata_recipient - `application/controllers/AuthController.php` — validateInvite ritorna recipient ### Frontend - `public/js/common.js` — auto-inject feedback.js - `public/js/feedback.js` — icona + label pill button - `public/css/style.css` — FAB cyan pill con pulse animation - `public/register.html` — validazione P.IVA locale, ?invite= param, pre-fill da recipient - `public/licenseExt.html` — sezione dati destinatario, link pronto, modale aggiornato ### Docs - `docs/prompts/big-simulation-prompt.md` — CREATO: prompt per simulate-nis2-big.php (10 aziende, 18 fasi, ✓200+) --- ## Utenti demo attivi (dopo ultima simulazione) | Email | Password | Ruolo | Org | |-------|----------|-------|-----| | admin@datacore-srl.demo | NIS2Demo2026! | org_admin | DataCore S.r.l. | | admin@medclinic-spa.demo | NIS2Demo2026! | org_admin | MedClinic Italia S.p.A. | | admin@enernet-srl.demo | NIS2Demo2026! | org_admin | EnerNet Distribuzione S.r.l. | | consultant@nis2agile.demo | NIS2Demo2026! | consultant | tutte e 3 | | presidenza@agile.software | Presidenza2026! | org_admin | nessuna org ancora | --- ## Problemi aperti / TODO ### Urgenti - `presidenza@agile.software`: ha account ma nessuna org → deve fare onboarding su https://nis2.agile.software/onboarding.html - Invite token `inv_f25a41...` (id=4, label "Presidenza"): ancora pending, non applicato all'utente ### Noti - `POST /api/auth/validate-invite` esiste ma non è nel router pubblico (solo via InviteController) - P.IVA lookup (CertiSource `/api/company/enrich`) risponde 404 — endpoint cambiato, da investigare - Rate limiter register: 3 tentativi/10min — causa problemi se si riprova velocemente - `Content-Type: application/json` da curl CLI esterno fallisce (body non letto) — solo via PHP curl o browser fetch funziona correttamente ### Sprint futuri - `simulate-nis2-big.php`: da implementare seguendo `docs/prompts/big-simulation-prompt.md` - RAG su normativa NIS2, benchmark settoriale (Piano Adaptive Sprint 3) --- ## Flusso licenze B2B (aggiornato) ``` mktg → licenseExt.html → genera licenza con dati destinatario → invite_url: register.html?invite=inv_xxx → cliente clicca link → form pre-compilato (nome/cognome/email/piva) → cliente inserisce password → Crea Account → onboarding ``` Pannello mktg: https://nis2.agile.software/licenseExt.html (accesso: super_admin) --- ## Prossimi passi consigliati 1. Fare onboarding con `presidenza@agile.software` per testare flusso completo 2. Implementare `simulate-nis2-big.php` da `docs/prompts/big-simulation-prompt.md` 3. Verificare/correggere endpoint CertiSource per P.IVA lookup 4. Aggiungere `POST /api/auth/validate-invite` al router pubblico (è già implementato)