From 8304da91b44bf7ebace674b0ca9d35b884bd0732 Mon Sep 17 00:00:00 2001 From: DevEnv nis2-agile Date: Tue, 10 Mar 2026 12:04:01 +0100 Subject: [PATCH] [DOCS] Aggiornamento contesto sessione 2026-03-10 --- docs/CONTEXT_LAST_SESSION.md | 183 ++++++++++++++++++----------------- 1 file changed, 96 insertions(+), 87 deletions(-) diff --git a/docs/CONTEXT_LAST_SESSION.md b/docs/CONTEXT_LAST_SESSION.md index 0887548..ad0da65 100644 --- a/docs/CONTEXT_LAST_SESSION.md +++ b/docs/CONTEXT_LAST_SESSION.md @@ -1,107 +1,116 @@ -# Nis2 Agile - Contesto Ultima Sessione - -> Questo file viene aggiornato da Claude a fine di ogni sessione. -> Serve per mantenere continuita tra sessioni diverse (anche da browser/PC diversi). - -## Ultima sessione +# Contesto Ultima Sessione **Data**: 2026-03-10 -**Cosa è stato fatto**: Sistema Segnalazioni & Risoluzione AI (adattato da alltax.it) + marketing landing NIS2 (sessione precedente) +**Durata**: sessione lunga (continuazione da sessione precedente) -### Attività sessione 2026-03-10 — Sistema Feedback +--- -Implementazione completa del sistema di segnalazione bug/feedback con risoluzione AI autonoma. -Ispirato a https://alltax.it/docs/sistema-segnalazioni-standard.html (il più maturo testato con utenti reali). +## Cosa abbiamo fatto -**File creati:** +### 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` -1. `docs/sql/014_feedback.sql` — tabella `feedback_reports` (tipo, priorita, status, AI fields, attachment base64) +### 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` -2. `application/controllers/FeedbackController.php` — 6 endpoint: - - POST `/api/feedback/submit` → crea segnalazione + AI classify - - GET `/api/feedback/mine` → ultime 20 dell'utente - - GET `/api/feedback/list` → lista admin (org_admin, compliance_manager, auditor) - - GET `/api/feedback/{id}` → dettaglio (admin o autore) - - PUT `/api/feedback/{id}` → update status/nota_admin - - POST `/api/feedback/{id}/resolve` → chiusura con password gate +### 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) -3. `application/services/FeedbackService.php` — createReport, classifyWithAI, broadcastResolution +### 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` -4. `public/js/feedback.js` — FAB rosso #EF4444, modal 2 fasi (form → risposta AI → password gate), tab "Le mie segnalazioni" +### 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` -5. `scripts/feedback-worker.php` — worker cron (ogni 30 min): - - Fetch ticket in_lavorazione - - docker exec su `nis2-agile-devenv` con Claude Code CLI - - POST /api/feedback/{id}/resolve se exit_code=0 - - Log in `/var/log/nis2/feedback-worker.log` +--- -**File modificati:** +## File modificati in questa sessione -- `application/services/AIService.php` — aggiunto `classifyFeedback()` (timeout 10s, 500 token, JSON puro) -- `application/services/EmailService.php` — aggiunto `sendFeedbackResolved()` (broadcast email risoluzione) -- `application/config/config.php` — aggiunte costanti `FEEDBACK_RESOLVE_PASSWORD`, `FEEDBACK_WORKER_LOG` -- `public/js/api.js` — aggiunta sezione Feedback (6 metodi) -- `public/js/common.js` — `checkAuth()` ora chiama `initFeedbackFab()` automaticamente su pagine autenticate -- `public/css/style.css` — stili FAB, overlay, modal, badge, fase 2, tab "le mie" -- `public/index.php` — aggiunto `'feedback' => 'FeedbackController'` in controllerMap + action map +### 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 -### Variabili .env da aggiungere su Hetzner +### 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) ``` -FEEDBACK_RESOLVE_PASSWORD=Nis2Feedback2026! # password gate risoluzione -FEEDBACK_WORKER_ADMIN_EMAIL=admin@nis2.agile.software -FEEDBACK_WORKER_ADMIN_PASS=... # password dell'account super_admin -FEEDBACK_WORKER_LOG=/var/log/nis2/feedback-worker.log +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 ``` -### Crontab da aggiungere su Hetzner +Pannello mktg: https://nis2.agile.software/licenseExt.html (accesso: super_admin) -```cron -*/30 * * * * root /usr/bin/php8.4 /var/www/nis2-agile/scripts/feedback-worker.php -``` +--- -### Deploy da fare +## Prossimi passi consigliati -```bash -ssh -i docs/credentials/hetzner_key root@135.181.149.254 -cd /var/www/nis2-agile && git pull origin main - -# Applica migration DB -mysql -u nis2user -p nis2_agile_db < docs/sql/014_feedback.sql - -# Aggiungi .env vars -nano .env # aggiungi le 4 variabili feedback - -# Aggiungi crontab -crontab -e # aggiungi riga */30 - -# Crea log directory -mkdir -p /var/log/nis2 -``` - -### Attività sessione precedente (2026-03-09/10) — Marketing e fix - -- `public/index.html` — Landing marketing completa (temi rosso #EF4444, invite-only) -- `public/presentation.html` — Presentazione 11 slide nel repo NIS2 -- `application/controllers/MktgLeadController.php` — webhook proxy + fallback email -- `application/controllers/ContactController.php` — richiesta invito legacy -- AgentAI Hub: colori aggiornati a rosso, products.json con link presentation - -## Stato attuale - -- **Produzione**: https://nis2.agile.software/ — tutto funzionante -- **Simulazione**: ✓92 ⚠4 ✗0 (6 scenari, 3 aziende demo) -- **Test suite**: ✓36/36 L1-L6 - -## Problemi aperti / Note - -- `FEEDBACK_RESOLVE_PASSWORD` deve essere aggiunta al `.env` su Hetzner prima del deploy -- Il worker cron richiede che il container `nis2-agile-devenv` sia attivo e raggiungibile -- DB migration 014 va applicata manualmente su prod dopo git pull -- PHP Warning `nis2_type` in simulate-nis2.php:303 — cosmetic, da fixare - -## Prossimi passi suggeriti - -1. Deploy su Hetzner: git pull + migration 014 + .env vars + crontab -2. Test E2E: login → FAB appare → submit segnalazione → risposta AI → resolve con password -3. Eventuale Sprint RAG su normativa NIS2 (piano adaptive-marinating-tome.md, Sprint 3) +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)