From 0bf09a1ebea30e0a0b13215c8562f9e2b83dc774 Mon Sep 17 00:00:00 2001 From: "Marco S." Date: Mon, 20 Oct 2025 16:08:15 +0200 Subject: [PATCH] Upgrade to Opzione A --- .gitignore | 49 ++++- README.md | 132 ++++++++++++ app.py | 141 +++++++----- gist_calculator.py | 292 +++++++++++++++++++++---- questionnaire.py | 423 +++++++++++++++++++++++++++++++++--- requirements.txt | 22 +- templates/about.html | 172 +++++++++++++++ templates/assessment.html | 321 ++++++++++++++++++++++++++++ templates/base.html | 132 ++++++++++++ templates/index.html | 280 +++++++++++++++++------- templates/results.html | 437 ++++++++++++++++++++++++++++++++++++++ 11 files changed, 2180 insertions(+), 221 deletions(-) create mode 100644 README.md create mode 100644 templates/about.html create mode 100644 templates/assessment.html create mode 100644 templates/base.html create mode 100644 templates/results.html diff --git a/.gitignore b/.gitignore index 23dd4c4..3a77dc7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +# Python __pycache__/ *.py[cod] *$py.class @@ -5,12 +6,44 @@ __pycache__/ .Python env/ venv/ -.env -.venv -instance/ +.venv/ +pip-log.txt +pip-delete-this-directory.txt +.tox/ .coverage -htmlcov/ -dist/ -build/ -*.egg-info/ -.DS_Store \ No newline at end of file +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Flask +instance/ +.webassets-cache + +# IDEs +.vscode/ +.idea/ +*.swp +*.swo +*~ +.DS_Store + +# Environment variables +.env +.env.local +.env.*.local + +# Logs +*.log + +# Database +*.db +*.sqlite +*.sqlite3 + +# Temporary files +*.tmp +*.bak diff --git a/README.md b/README.md new file mode 100644 index 0000000..fd9cdbf --- /dev/null +++ b/README.md @@ -0,0 +1,132 @@ +# GIST Framework - Digital Maturity Assessment + +Web application professionale per la valutazione della maturità digitale nel settore GDO basata sul framework GIST. + +## 🎯 Caratteristiche + +- ✅ **36 domande strutturate** su 4 dimensioni critiche +- ✅ **Calcolo GIST Score** con formula scientifica validata +- ✅ **Progress bar real-time** e validazione interattiva +- ✅ **Grafici radar e bar chart** per visualizzazione risultati +- ✅ **Raccomandazioni prioritizzate** con ROI stimato +- ✅ **Benchmark settoriale** vs media GDO italiana +- ✅ **Design responsive** con Tailwind CSS +- ✅ **Report dettagliati** con piano d'azione + +## 📊 Le 4 Dimensioni GIST + +1. **Infrastruttura Fisica (18%)** - Alimentazione, connettività, ridondanza +2. **Architettura (32%)** - Cloud, microservizi, DevOps, API +3. **Sicurezza (28%)** - Identity, network, endpoint, threat detection +4. **Conformità (22%)** - GDPR, PCI-DSS, NIS2, audit + +## 🚀 Quick Start - Locale + +```bash +# Clona il repository +git clone +cd gist-assessment + +# Installa dipendenze +pip install -r requirements.txt + +# Avvia l'app +python app.py + +# Apri browser su http://localhost:5000 +``` + +## ☁️ Deploy su Render + +1. **Push del codice su GitHub** + ```bash + git init + git add . + git commit -m "Initial commit" + git remote add origin + git push -u origin main + ``` + +2. **Configura Render** + - Vai su [render.com](https://render.com) + - New → Web Service + - Connetti repository GitHub + - Configura: + - **Build Command**: `pip install -r requirements.txt` + - **Start Command**: `gunicorn app:app` + - **Environment**: Python 3 + +3. **Deploy automatico** + - Render farà il deploy automatico ad ogni push su main + +## 📁 Struttura Progetto + +``` +gist-assessment/ +├── app.py # Flask application principale +├── gist_calculator.py # GIST Score calculator +├── questionnaire.py # 36 domande strutturate +├── requirements.txt # Dipendenze Python +├── templates/ +│ ├── base.html # Template base con navbar +│ ├── index.html # Homepage +│ ├── assessment.html # Questionario interattivo +│ ├── results.html # Pagina risultati con grafici +│ └── about.html # Informazioni framework +└── static/ # (Future: CSS, JS, images custom) +``` + +## 🎨 Tecnologie Utilizzate + +- **Backend**: Flask 3.0 +- **Frontend**: Tailwind CSS + Chart.js +- **Grafici**: Chart.js per radar e bar charts +- **Icons**: Font Awesome 6 +- **Fonts**: Google Fonts (Inter) +- **Deployment**: Gunicorn + Render + +## 📈 Roadmap Futuri Sviluppi + +### Fase 2 - Business Features +- [ ] Autenticazione utenti (email/password + OAuth) +- [ ] Database PostgreSQL per storico assessment +- [ ] Email delivery con report PDF +- [ ] Payment gateway Stripe (€49/assessment) + +### Fase 3 - Premium Features +- [ ] Generazione PDF professionale con reportlab +- [ ] Comparison tracking nel tempo +- [ ] API pubblica per integrazioni +- [ ] Dashboard amministratore + +### Fase 4 - AI & Advanced +- [ ] Raccomandazioni AI-powered personalizzate +- [ ] Predictive analytics +- [ ] Multi-lingua (EN/IT/DE) +- [ ] Mobile app nativa + +## 🔬 Validazione Scientifica + +Il framework GIST è basato su: +- Ricerca accademica validata su 234 organizzazioni +- Dataset reale settore GDO italiano +- Simulazioni Digital Twin con 10.000 iterazioni +- Intervalli di confidenza al 95% + +## 📄 Licenza + +MIT License - Open Source + +## 👤 Autore + +Sviluppato come tesi di laurea magistrale in Cybersecurity +GitHub: [gist-framework](https://github.com/gist-framework) + +## 📧 Contatti + +Per informazioni commerciali: info@gist-framework.com + +--- + +**Versione**: 1.0.0 (MVP) +**Data**: Ottobre 2025 diff --git a/app.py b/app.py index 74acc4f..061073d 100644 --- a/app.py +++ b/app.py @@ -1,60 +1,101 @@ -# app.py -from flask import Flask, render_template, request -import math +# app.py - GIST Assessment Web Application +from flask import Flask, render_template, request, jsonify, send_file +from gist_calculator import GISTCalculator +from questionnaire import QUESTIONNAIRE, COMPONENT_LABELS +import json +from datetime import datetime +import io app = Flask(__name__) - -def calcola_gist_score(scores): - """Calcola il GIST Score usando la formula completa della tesi.""" - pesi = {'fisica': 0.18, 'architetturale': 0.32, 'sicurezza': 0.28, 'conformita': 0.22} - gamma = 0.95 - - punteggio_finale = sum(pesi[c] * (s ** gamma) for c, s in scores.items()) - - return round(punteggio_finale, 2) - -def determina_livello_maturita(score): - """Determina il livello di maturità in base al punteggio.""" - if score <= 25: - return "Iniziale" - elif score <= 50: - return "In Sviluppo" - elif score <= 75: - return "Avanzato" - else: - return "Ottimizzato" +app.secret_key = 'gist-framework-2025-secure-key' @app.route('/') -def index(): - """Mostra la pagina iniziale con valori di default.""" +def home(): + """Homepage con introduzione al GIST Framework.""" return render_template('index.html') -# La rotta deve essere esattamente "/calcola" e deve accettare il metodo 'POST' -@app.route('/calcola', methods=['POST']) -def calcola(): - """Riceve i dati, calcola e mostra i risultati.""" - try: - punteggi = { - 'fisica': int(request.form['fisica']), - 'architetturale': int(request.form['architetturale']), - 'sicurezza': int(request.form['sicurezza']), - 'conformita': int(request.form['conformita']) +@app.route('/assessment') +def assessment(): + """ + Pagina assessment interattivo con questionario completo. + """ + return render_template( + 'assessment.html', + questions=QUESTIONNAIRE, + component_labels=COMPONENT_LABELS + ) + +@app.route('/api/calculate', methods=['POST']) +def calculate_gist(): + """ + API endpoint per calcolo GIST Score. + + Request body: + { + "company_name": "Nome Azienda", + "answers": { + "physical": {"power_supply": 60, ...}, + "architectural": {...}, + "security": {...}, + "compliance": {...} } + } + """ + try: + data = request.json + company_name = data.get('company_name', 'Organizzazione') + answers = data.get('answers', {}) + + # Validazione base + if not answers: + return jsonify({'error': 'Nessuna risposta fornita'}), 400 + + # Calcola GIST Score + calculator = GISTCalculator(company_name) + results = calculator.calculate_score(answers) - score_calcolato = calcola_gist_score(punteggi) - livello = determina_livello_maturita(score_calcolato) + # Aggiungi timestamp + results['timestamp'] = datetime.now().isoformat() - punteggi_per_grafico = list(punteggi.values()) - - return render_template('index.html', - risultato=score_calcolato, - livello_maturita=livello, - valori_inseriti=punteggi, - dati_grafico=punteggi_per_grafico) - except (ValueError, KeyError): - # Gestisce il caso in cui i dati non siano corretti - return "Errore nei dati inseriti. Assicurati di compilare tutti i campi con numeri.", 400 - -# Questa parte non è strettamente necessaria per Render, ma è utile per testare in locale + return jsonify(results) + + except Exception as e: + return jsonify({'error': str(e)}), 500 + +@app.route('/results') +def results(): + """ + Pagina risultati (riceve dati via query params o POST). + """ + return render_template('results.html') + +@app.route('/api/generate-pdf', methods=['POST']) +def generate_pdf(): + """ + Genera report PDF dettagliato. + TODO: implementare generazione PDF con reportlab + """ + try: + data = request.json + # Implementeremo questo dopo + return jsonify({'status': 'coming_soon'}), 501 + + except Exception as e: + return jsonify({'error': str(e)}), 500 + +@app.route('/about') +def about(): + """Pagina informativa sul framework GIST.""" + return render_template('about.html') + +@app.errorhandler(404) +def not_found(e): + return render_template('404.html'), 404 + +@app.errorhandler(500) +def server_error(e): + return render_template('500.html'), 500 + if __name__ == '__main__': - app.run(debug=True) \ No newline at end of file + # Development mode + app.run(debug=True, host='0.0.0.0', port=5000) diff --git a/gist_calculator.py b/gist_calculator.py index 252eb05..fff5080 100644 --- a/gist_calculator.py +++ b/gist_calculator.py @@ -1,55 +1,273 @@ -# app/gist_calculator.py - Integrato dalla tua tesi +# gist_calculator.py - GIST Score Calculator +# Implementazione basata sulla tesi "Framework GIST per la GDO" +# Formula: GIST = Σ(w_k * S_k^γ) dove γ=0.95 + +import math +from questionnaire import COMPONENT_WEIGHTS, SECTOR_BENCHMARKS, COMPONENT_LABELS + class GISTCalculator: - def __init__(self, org_name="Web Assessment"): - self.org_name = org_name - # Pesi calibrati dalla tua ricerca (Tabella B.5) - self.weights = { - 'physical': 0.18, # 18% - 'architectural': 0.32, # 32% - 'security': 0.28, # 28% - 'compliance': 0.22 # 22% - } - self.gamma = 0.95 # Esponente rendimenti decrescenti + """ + Calcolatore GIST Score secondo formula dalla ricerca originale. + + Formula: GIST = Σ(w_k * S_k^γ) + dove: + - w_k: peso componente k (physical, architectural, security, compliance) + - S_k: score normalizzato 0-100 della componente k + - γ: esponente per rendimenti decrescenti (0.95) + """ + def __init__(self, organization_name="Assessment"): + self.organization_name = organization_name + self.weights = COMPONENT_WEIGHTS + self.gamma = 0.95 # Esponente per rendimenti decrescenti + self.benchmarks = SECTOR_BENCHMARKS + def calculate_score(self, questionnaire_answers): """ - Converte risposte questionario in GIST Score - Formula dalla tua tesi: GIST = Σ(w_k * S_k^γ) + Calcola GIST Score da risposte questionario. + + Args: + questionnaire_answers: dict con risposte per ogni componente + formato: {component_id: {question_id: value}} + + Returns: + dict con score, component_scores, maturity_level, recommendations """ - # Converto risposte in punteggi componenti 0-100 - component_scores = self._answers_to_components(questionnaire_answers) + # 1. Converti risposte in punteggi componenti 0-100 + component_scores = self._calculate_component_scores(questionnaire_answers) - # Calcolo GIST Score con la formula originale - gist_score = 0 - for component, score in component_scores.items(): - weighted_score = self.weights[component] * (score ** self.gamma) - gist_score += weighted_score + # 2. Calcola GIST Score con formula originale + gist_score = self._calculate_gist_formula(component_scores) + + # 3. Determina livello maturità + maturity_level = self._get_maturity_level(gist_score) + + # 4. Genera raccomandazioni prioritizzate + recommendations = self._generate_recommendations(component_scores) + + # 5. Calcola benchmark vs settore + benchmarks = self._calculate_benchmarks(component_scores) return { 'gist_score': round(gist_score, 1), 'component_scores': component_scores, - 'maturity_level': self._get_maturity_level(gist_score), - 'recommendations': self._get_recommendations(component_scores), - 'benchmarks': self._get_sector_benchmarks(component_scores) + 'maturity_level': maturity_level, + 'recommendations': recommendations, + 'benchmarks': benchmarks, + 'organization': self.organization_name + } + + def _calculate_component_scores(self, answers): + """Calcola score medio 0-100 per ogni componente.""" + component_scores = {} + + for component, questions in answers.items(): + if questions: + # Media dei valori delle risposte + values = list(questions.values()) + avg_score = sum(values) / len(values) + component_scores[component] = round(avg_score, 1) + else: + component_scores[component] = 0 + + return component_scores + + def _calculate_gist_formula(self, component_scores): + """ + Applica formula GIST originale: Σ(w_k * S_k^γ) + """ + gist_score = 0 + + for component, score in component_scores.items(): + if component in self.weights: + # Formula con esponente per rendimenti decrescenti + weighted_score = self.weights[component] * (score ** self.gamma) + gist_score += weighted_score + + return gist_score + + def _get_maturity_level(self, gist_score): + """ + Determina livello maturità organizzativa. + Livelli dalla tesi (sezione 5.4.6): + - 0-25: Iniziale + - 26-50: In Sviluppo + - 51-75: Avanzato + - 76-100: Ottimizzato + """ + if gist_score < 25: + return { + 'level': 'Iniziale', + 'description': 'Architettura legacy, sicurezza reattiva, gap normativi significativi', + 'color': '#EF4444' # rosso + } + elif gist_score < 50: + return { + 'level': 'In Sviluppo', + 'description': 'Modernizzazione parziale in corso, sicurezza proattiva, conformità base', + 'color': '#F59E0B' # arancione + } + elif gist_score < 75: + return { + 'level': 'Avanzato', + 'description': 'Architettura moderna, sicurezza integrata, conformità automatizzata', + 'color': '#3B82F6' # blu + } + else: + return { + 'level': 'Ottimizzato', + 'description': 'Trasformazione completa, sicurezza adattiva, compliance-as-code', + 'color': '#10B981' # verde + } + + def _generate_recommendations(self, component_scores): + """ + Genera raccomandazioni prioritizzate basate su gap vs target. + Target dalla Tabella 5.4 della tesi. + """ + recommendations = [] + + for component, score in component_scores.items(): + target = self.benchmarks[component]['target'] + gap = target - score + + if gap > 5: # Solo se c'è un gap significativo + priority = self._calculate_priority(gap, component) + action = self._get_action_plan(component, score, target) + + recommendations.append({ + 'component': COMPONENT_LABELS[component], + 'component_id': component, + 'current_score': round(score, 1), + 'target_score': target, + 'gap': round(gap, 1), + 'priority': priority, + 'action_plan': action, + 'estimated_effort': self._estimate_effort(gap), + 'estimated_roi': self._estimate_roi(component, gap) + }) + + # Ordina per priorità (gap * peso componente) + recommendations.sort( + key=lambda x: x['gap'] * self.weights[x['component_id']], + reverse=True + ) + + return recommendations + + def _calculate_priority(self, gap, component): + """Calcola priorità basata su gap e peso componente.""" + weighted_gap = gap * self.weights[component] + + if weighted_gap > 15: + return 'CRITICA' + elif weighted_gap > 8: + return 'Alta' + elif weighted_gap > 4: + return 'Media' + else: + return 'Bassa' + + def _get_action_plan(self, component, current, target): + """Genera piano d'azione specifico per componente.""" + actions = { + 'physical': { + 'short': 'Implementare ridondanza N+1 per alimentazione e connettività critica', + 'medium': 'Deploy SD-WAN multi-path e monitoring predittivo infrastruttura', + 'long': 'Migrazione verso architettura multi-datacenter georeplicata' + }, + 'architectural': { + 'short': 'Avviare migrazione cloud ibrido per servizi non-critici', + 'medium': 'Implementare microservizi e CI/CD pipeline per nuovi sviluppi', + 'long': 'Adozione completa cloud-native con multi-cloud orchestration' + }, + 'security': { + 'short': 'Deploy MFA universale e EDR su tutti gli endpoint', + 'medium': 'Implementare Zero Trust Network Access (ZTNA) e SOC 24/7', + 'long': 'Adozione framework SASE con AI-powered threat detection' + }, + 'compliance': { + 'short': 'Automazione controlli PCI-DSS e GDPR con monitoring continuo', + 'medium': 'Implementare compliance-as-code e automated remediation', + 'long': 'Adozione piattaforma GRC integrata con AI predictive compliance' + } } + + gap = target - current + if gap > 30: + return actions[component]['long'] + elif gap > 15: + return actions[component]['medium'] + else: + return actions[component]['short'] + + def _estimate_effort(self, gap): + """Stima effort in mesi.""" + if gap > 30: + return '18-24 mesi' + elif gap > 20: + return '12-18 mesi' + elif gap > 10: + return '6-12 mesi' + else: + return '3-6 mesi' - def _get_sector_benchmarks(self, scores): - """Benchmark vs medie settore dalla tua Tabella 5.4""" - sector_averages = { - 'physical': 51.2, # Media settore GDO italiano - 'architectural': 45.8, - 'security': 48.3, - 'compliance': 52.7 + def _estimate_roi(self, component, gap): + """ + Stima ROI percentuale a 3 anni. + Basato su dati dalla sezione 5.4.9 della tesi. + """ + base_roi = { + 'physical': 280, + 'architectural': 340, + 'security': 420, + 'compliance': 310 } + # ROI scala con il gap da colmare + roi = base_roi[component] * (gap / 30) + return f"{int(roi)}% a 3 anni" + + def _calculate_benchmarks(self, component_scores): + """Calcola posizione vs media settore GDO.""" benchmarks = {} - for component, score in scores.items(): - avg = sector_averages[component] + + for component, score in component_scores.items(): + sector_avg = self.benchmarks[component]['avg'] + target = self.benchmarks[component]['target'] + + # Calcola percentile approssimato (distribuzione normale) + vs_sector = score - sector_avg + percentile = self._score_to_percentile(vs_sector) + benchmarks[component] = { - 'score': score, - 'sector_avg': avg, - 'vs_sector': score - avg, - 'percentile': self._calculate_percentile(component, score) + 'label': COMPONENT_LABELS[component], + 'score': round(score, 1), + 'sector_avg': sector_avg, + 'target': target, + 'vs_sector': round(vs_sector, 1), + 'percentile': percentile, + 'status': 'above' if vs_sector > 0 else 'below' } - return benchmarks \ No newline at end of file + return benchmarks + + def _score_to_percentile(self, vs_sector): + """Converte differenza vs settore in percentile.""" + # Approssimazione: assume std dev ~ 12 punti + if vs_sector > 20: + return 95 + elif vs_sector > 12: + return 85 + elif vs_sector > 6: + return 70 + elif vs_sector > 0: + return 55 + elif vs_sector > -6: + return 45 + elif vs_sector > -12: + return 30 + elif vs_sector > -20: + return 15 + else: + return 5 diff --git a/questionnaire.py b/questionnaire.py index f78c78e..48e4a63 100644 --- a/questionnaire.py +++ b/questionnaire.py @@ -1,73 +1,436 @@ -# app/questionnaire.py - VERSIONE COMPLETA +# questionnaire.py - GIST Framework Assessment Questions +# 36 domande totali calibrate sulla ricerca GIST + QUESTIONNAIRE = { 'physical': [ { 'id': 'power_supply', - 'question': 'Sistema di alimentazione per sistemi critici:', + 'question': 'Sistema di alimentazione per sistemi critici (POS, server, networking):', 'options': [ - {'value': 15, 'text': 'UPS basic <30min singolo'}, - {'value': 35, 'text': 'UPS esteso 1-2h singolo'}, - {'value': 60, 'text': 'Configurazione N+1'}, + {'value': 15, 'text': 'UPS basic <30min, singolo'}, + {'value': 35, 'text': 'UPS esteso 1-2h, singolo'}, + {'value': 60, 'text': 'Configurazione N+1 ridondante'}, {'value': 85, 'text': 'Configurazione 2N completa'}, - {'value': 100, 'text': 'Multi-site con generatori'} + {'value': 100, 'text': 'Multi-site con generatori backup'} ] }, { - 'id': 'connectivity', + 'id': 'connectivity_primary', 'question': 'Connettività primaria punti vendita:', 'options': [ {'value': 15, 'text': 'ADSL/fibra singola <20Mbps'}, {'value': 35, 'text': 'Fibra singola >50Mbps'}, - {'value': 55, 'text': 'Dual ISP diversi'}, - {'value': 75, 'text': 'SD-WAN multi-path'}, + {'value': 55, 'text': 'Dual ISP provider diversi'}, + {'value': 75, 'text': 'SD-WAN multi-path intelligente'}, {'value': 100, 'text': 'Fibra + 5G backup + load balancing'} ] }, - # ... continuo con le altre 6 domande Physical + { + 'id': 'cooling_systems', + 'question': 'Raffreddamento e controllo ambientale data center/server room:', + 'options': [ + {'value': 20, 'text': 'Aria condizionata standard uffici'}, + {'value': 40, 'text': 'HVAC dedicato con ridondanza'}, + {'value': 60, 'text': 'Contenimento corridoi caldi/freddi'}, + {'value': 80, 'text': 'Raffreddamento liquido + monitoraggio'}, + {'value': 100, 'text': 'AI-driven cooling optimization PUE <1.3'} + ] + }, + { + 'id': 'hardware_redundancy', + 'question': 'Ridondanza hardware per sistemi critici:', + 'options': [ + {'value': 10, 'text': 'Single point of failure - no backup'}, + {'value': 30, 'text': 'Spare parts on-site + contratti SLA'}, + {'value': 50, 'text': 'Clustering attivo-passivo'}, + {'value': 75, 'text': 'Clustering attivo-attivo bilanciato'}, + {'value': 100, 'text': 'Multi-datacenter georeplicato'} + ] + }, + { + 'id': 'infrastructure_monitoring', + 'question': 'Monitoraggio proattivo infrastruttura fisica:', + 'options': [ + {'value': 15, 'text': 'Check manuali periodici'}, + {'value': 35, 'text': 'Alert email automatici base'}, + {'value': 55, 'text': 'Dashboard 24/7 con SLA definiti'}, + {'value': 75, 'text': 'Monitoring predittivo con ML'}, + {'value': 100, 'text': 'Self-healing infrastructure automation'} + ] + }, + { + 'id': 'network_segmentation', + 'question': 'Segmentazione fisica della rete:', + 'options': [ + {'value': 20, 'text': 'Rete unica flat per tutti i servizi'}, + {'value': 40, 'text': 'VLAN separate per aree principali'}, + {'value': 60, 'text': 'Micro-segmentazione per funzioni'}, + {'value': 80, 'text': 'Software-defined networking (SDN)'}, + {'value': 100, 'text': 'Zero-trust network micro-perimetri'} + ] + }, + { + 'id': 'backup_power_testing', + 'question': 'Test e manutenzione sistemi di backup energetico:', + 'options': [ + {'value': 10, 'text': 'Test occasionali o assenti'}, + {'value': 30, 'text': 'Test annuali programmati'}, + {'value': 50, 'text': 'Test trimestrali documentati'}, + {'value': 70, 'text': 'Test mensili + load testing'}, + {'value': 100, 'text': 'Test automatizzati + simulazioni failure'} + ] + }, + { + 'id': 'environmental_monitoring', + 'question': 'Controllo ambientale (temperatura, umidità, sicurezza fisica):', + 'options': [ + {'value': 15, 'text': 'Controllo manuale sporadico'}, + {'value': 35, 'text': 'Sensori base con alert email'}, + {'value': 55, 'text': 'Sistema SCADA con dashboard'}, + {'value': 75, 'text': 'IoT sensors + predictive analytics'}, + {'value': 100, 'text': 'Digital twin + automated response'} + ] + } ], 'architectural': [ { - 'id': 'cloud_adoption', - 'question': 'Livello adozione cloud:', + 'id': 'cloud_adoption_level', + 'question': 'Livello di adozione cloud computing:', 'options': [ - {'value': 10, 'text': 'Solo on-premise legacy'}, - {'value': 30, 'text': 'Backup cloud, core on-premise'}, - {'value': 50, 'text': 'Hybrid: 30-50% servizi cloud'}, - {'value': 75, 'text': 'Cloud-first, <20% on-premise'}, + {'value': 10, 'text': 'Solo on-premise, architettura monolitica'}, + {'value': 30, 'text': 'Backup cloud, core applications on-premise'}, + {'value': 50, 'text': 'Hybrid: 30-50% servizi migrati su cloud'}, + {'value': 75, 'text': 'Cloud-first strategy, <20% on-premise'}, {'value': 100, 'text': 'Cloud-native, multi-cloud orchestrato'} ] }, - # ... continuo con le altre 10 domande Architectural + { + 'id': 'microservices_architecture', + 'question': 'Architettura applicativa predominante:', + 'options': [ + {'value': 15, 'text': 'Applicazioni monolitiche legacy'}, + {'value': 35, 'text': 'Modularizzazione iniziale, alcuni API'}, + {'value': 55, 'text': 'Microservizi per nuovi sviluppi'}, + {'value': 75, 'text': 'Microservizi + container orchestration'}, + {'value': 100, 'text': 'Serverless + event-driven architecture'} + ] + }, + { + 'id': 'automation_devops', + 'question': 'Automazione deployment e DevOps practices:', + 'options': [ + {'value': 10, 'text': 'Deploy manuali, no version control'}, + {'value': 30, 'text': 'Scripts automatizzati base'}, + {'value': 50, 'text': 'CI/CD pipeline per sviluppi principali'}, + {'value': 75, 'text': 'GitOps + Infrastructure as Code'}, + {'value': 100, 'text': 'Full DevSecOps + auto-rollback'} + ] + }, + { + 'id': 'api_management', + 'question': 'Gestione API e integrazione sistemi:', + 'options': [ + {'value': 15, 'text': 'Integrazioni point-to-point custom'}, + {'value': 35, 'text': 'API REST basic senza governance'}, + {'value': 55, 'text': 'API Gateway + basic security'}, + {'value': 75, 'text': 'API management platform completo'}, + {'value': 100, 'text': 'Mesh architecture + API versioning'} + ] + }, + { + 'id': 'data_architecture', + 'question': 'Architettura dati e analytics:', + 'options': [ + {'value': 10, 'text': 'Database relazionali isolati'}, + {'value': 30, 'text': 'Data warehouse centrale'}, + {'value': 50, 'text': 'Data lake + basic analytics'}, + {'value': 75, 'text': 'Real-time streaming + ML pipelines'}, + {'value': 100, 'text': 'Data mesh + AI-driven insights'} + ] + }, + { + 'id': 'disaster_recovery', + 'question': 'Business continuity e disaster recovery:', + 'options': [ + {'value': 15, 'text': 'Backup tradizionali, no DR testing'}, + {'value': 35, 'text': 'DR site passivo, RTO >24h'}, + {'value': 55, 'text': 'Active-passive DR, RTO 4-8h'}, + {'value': 75, 'text': 'Active-active multi-site, RTO <2h'}, + {'value': 100, 'text': 'Chaos engineering + auto-failover'} + ] + }, + { + 'id': 'scalability_elasticity', + 'question': 'Capacità di scalabilità per picchi stagionali:', + 'options': [ + {'value': 10, 'text': 'Hardware fixed, performance degradation'}, + {'value': 30, 'text': 'Scale-up manuale programmato'}, + {'value': 50, 'text': 'Auto-scaling basic per alcuni servizi'}, + {'value': 75, 'text': 'Elastic scaling + load balancing'}, + {'value': 100, 'text': 'Predictive scaling + chaos testing'} + ] + }, + { + 'id': 'edge_computing', + 'question': 'Implementazione edge computing nei punti vendita:', + 'options': [ + {'value': 10, 'text': 'Solo thin client, elaborazione centrale'}, + {'value': 30, 'text': 'Server locale per POS, no intelligence'}, + {'value': 50, 'text': 'Edge computing per analytics locali'}, + {'value': 75, 'text': 'AI/ML inference in-store'}, + {'value': 100, 'text': 'Distributed computing + fog architecture'} + ] + }, + { + 'id': 'container_orchestration', + 'question': 'Containerization e orchestrazione:', + 'options': [ + {'value': 10, 'text': 'VM tradizionali, no containerization'}, + {'value': 30, 'text': 'Docker containers base'}, + {'value': 50, 'text': 'Kubernetes per alcuni workload'}, + {'value': 75, 'text': 'Full Kubernetes + service mesh'}, + {'value': 100, 'text': 'Multi-cluster + GitOps + policy automation'} + ] + }, + { + 'id': 'performance_optimization', + 'question': 'Ottimizzazione performance e monitoring APM:', + 'options': [ + {'value': 15, 'text': 'Monitoring reattivo basic'}, + {'value': 35, 'text': 'APM tools + dashboard operative'}, + {'value': 55, 'text': 'Distributed tracing + SLI/SLO'}, + {'value': 75, 'text': 'AI-powered performance optimization'}, + {'value': 100, 'text': 'Autonomous performance management'} + ] + } ], 'security': [ { - 'id': 'identity_management', - 'question': 'Gestione identità e accessi:', + 'id': 'identity_access_management', + 'question': 'Gestione identità e controllo accessi:', 'options': [ {'value': 20, 'text': 'Password locali, accessi condivisi'}, {'value': 40, 'text': 'Active Directory centralizzato'}, - {'value': 60, 'text': 'SSO + MFA selettivo'}, + {'value': 60, 'text': 'SSO + MFA per amministratori'}, {'value': 80, 'text': 'MFA universale + conditional access'}, - {'value': 100, 'text': 'Zero Trust identity con AI/ML'} + {'value': 100, 'text': 'Zero Trust identity + behavioral analytics'} + ] + }, + { + 'id': 'network_security', + 'question': 'Sicurezza perimetrale e di rete:', + 'options': [ + {'value': 15, 'text': 'Firewall perimetrale basic'}, + {'value': 35, 'text': 'Next-gen firewall + IPS'}, + {'value': 55, 'text': 'Network segmentation + micro-perimetri'}, + {'value': 75, 'text': 'Zero Trust network + CASB'}, + {'value': 100, 'text': 'SASE + AI-powered threat detection'} + ] + }, + { + 'id': 'endpoint_protection', + 'question': 'Protezione endpoint (POS, workstation, mobile):', + 'options': [ + {'value': 15, 'text': 'Antivirus tradizionale signature-based'}, + {'value': 35, 'text': 'Endpoint protection + comportamentale'}, + {'value': 55, 'text': 'EDR (Endpoint Detection & Response)'}, + {'value': 75, 'text': 'XDR integrato + threat hunting'}, + {'value': 100, 'text': 'AI-driven autonomous response'} + ] + }, + { + 'id': 'data_encryption', + 'question': 'Crittografia e protezione dati sensibili:', + 'options': [ + {'value': 20, 'text': 'Crittografia basica per backup'}, + {'value': 40, 'text': 'Encryption at-rest per database'}, + {'value': 60, 'text': 'End-to-end encryption + key management'}, + {'value': 80, 'text': 'Hardware HSM + crypto agility'}, + {'value': 100, 'text': 'Quantum-safe cryptography ready'} + ] + }, + { + 'id': 'threat_detection_response', + 'question': 'Rilevamento minacce e incident response:', + 'options': [ + {'value': 15, 'text': 'Alerting reattivo manuale'}, + {'value': 35, 'text': 'SIEM + correlation rules'}, + {'value': 55, 'text': 'SOC 24/7 + playbook automatizzati'}, + {'value': 75, 'text': 'SOAR + machine learning detection'}, + {'value': 100, 'text': 'Autonomous threat response + AI'} + ] + }, + { + 'id': 'vulnerability_management', + 'question': 'Gestione vulnerabilità e patch management:', + 'options': [ + {'value': 10, 'text': 'Patch manuali irregolari'}, + {'value': 30, 'text': 'Vulnerability scanning mensile'}, + {'value': 50, 'text': 'Automated patching + testing'}, + {'value': 70, 'text': 'Continuous scanning + risk scoring'}, + {'value': 100, 'text': 'Predictive patching + zero-day defense'} + ] + }, + { + 'id': 'security_awareness', + 'question': 'Security awareness e formazione personale:', + 'options': [ + {'value': 15, 'text': 'Formazione sporadica generica'}, + {'value': 35, 'text': 'Training annuale obbligatorio'}, + {'value': 55, 'text': 'Phishing simulation + targeted training'}, + {'value': 75, 'text': 'Continuous education + gamification'}, + {'value': 100, 'text': 'AI-adaptive learning + behavioral change'} + ] + }, + { + 'id': 'application_security', + 'question': 'Sicurezza applicativa e DevSecOps:', + 'options': [ + {'value': 10, 'text': 'Security testing post-deployment'}, + {'value': 30, 'text': 'Vulnerability scanning pre-produzione'}, + {'value': 50, 'text': 'SAST/DAST integrato in CI/CD'}, + {'value': 70, 'text': 'Shift-left security + container scanning'}, + {'value': 100, 'text': 'Runtime protection + AI-powered testing'} + ] + }, + { + 'id': 'third_party_security', + 'question': 'Sicurezza fornitori e supply chain:', + 'options': [ + {'value': 10, 'text': 'Valutazione informale occasionale'}, + {'value': 30, 'text': 'Security questionnaire standard'}, + {'value': 50, 'text': 'Audit periodici + contratti SLA'}, + {'value': 70, 'text': 'Continuous monitoring + risk scoring'}, + {'value': 100, 'text': 'Blockchain supply chain + real-time intel'} ] }, - # ... continuo con le altre 9 domande Security + { + 'id': 'backup_recovery_security', + 'question': 'Sicurezza backup e disaster recovery:', + 'options': [ + {'value': 15, 'text': 'Backup non crittografati accessibili'}, + {'value': 35, 'text': 'Backup crittografati off-site'}, + {'value': 55, 'text': 'Immutable backup + air gap'}, + {'value': 75, 'text': 'Multi-cloud backup + regular testing'}, + {'value': 100, 'text': 'Zero-trust backup + automated validation'} + ] + } ], 'compliance': [ { - 'id': 'regulatory_framework', - 'question': 'Framework normativi implementati:', + 'id': 'regulatory_frameworks', + 'question': 'Framework normativi implementati e mantenuti:', 'options': [ - {'value': 15, 'text': 'Solo adempimenti minimi legali'}, - {'value': 35, 'text': 'PCI-DSS base + GDPR reattivo'}, + {'value': 15, 'text': 'Solo adempimenti minimi obbligatori'}, + {'value': 35, 'text': 'PCI-DSS Level 4 + GDPR reattivo'}, {'value': 55, 'text': 'PCI-DSS + GDPR + policy documentate'}, - {'value': 75, 'text': 'Multi-standard + controlli automatizzati'}, - {'value': 100, 'text': 'Compliance-as-code integrata'} + {'value': 75, 'text': 'Multi-standard (PCI/GDPR/NIS2) integrati'}, + {'value': 100, 'text': 'Compliance-as-code + continuous monitoring'} + ] + }, + { + 'id': 'audit_monitoring', + 'question': 'Audit e monitoraggio della conformità:', + 'options': [ + {'value': 20, 'text': 'Audit esterni annuali reattivi'}, + {'value': 40, 'text': 'Audit interni trimestrali + documentazione'}, + {'value': 60, 'text': 'Monitoring mensile automatizzato + KPI'}, + {'value': 80, 'text': 'Continuous compliance + real-time alerting'}, + {'value': 100, 'text': 'AI-powered predictive compliance + auto-remediation'} + ] + }, + { + 'id': 'data_governance', + 'question': 'Governance e classificazione dati personali/sensibili:', + 'options': [ + {'value': 10, 'text': 'Approccio best-effort informale'}, + {'value': 30, 'text': 'Data mapping + policy documentate'}, + {'value': 50, 'text': 'Data classification + privacy by design'}, + {'value': 70, 'text': 'Automated data discovery + minimization'}, + {'value': 100, 'text': 'Privacy-enhancing tech + zero-knowledge'} + ] + }, + { + 'id': 'risk_management', + 'question': 'Approccio al risk management:', + 'options': [ + {'value': 20, 'text': 'Valutazione qualitativa sporadica'}, + {'value': 40, 'text': 'Risk register + assessment periodici'}, + {'value': 60, 'text': 'Quantificazione rischi + scenario planning'}, + {'value': 80, 'text': 'Predictive risk modeling + simulation'}, + {'value': 100, 'text': 'AI-driven continuous risk assessment'} ] }, - # ... continuo con le altre 7 domande Compliance + { + 'id': 'incident_notification', + 'question': 'Gestione notifiche incidenti e breach:', + 'options': [ + {'value': 15, 'text': 'Processo manuale non documentato'}, + {'value': 35, 'text': 'Procedure definite + template comunicazioni'}, + {'value': 55, 'text': 'Workflow automatizzati + escalation'}, + {'value': 75, 'text': 'Real-time notification + legal automation'}, + {'value': 100, 'text': 'AI-powered severity assessment + auto-filing'} + ] + }, + { + 'id': 'privacy_rights_management', + 'question': 'Gestione diritti degli interessati (GDPR):', + 'options': [ + {'value': 10, 'text': 'Gestione manuale case-by-case'}, + {'value': 30, 'text': 'Procedure documentate + template'}, + {'value': 50, 'text': 'Self-service portal + workflow semi-auto'}, + {'value': 70, 'text': 'Automated data subject rights + API'}, + {'value': 100, 'text': 'AI-powered privacy automation + blockchain proof'} + ] + }, + { + 'id': 'training_certification', + 'question': 'Formazione e certificazione staff su compliance:', + 'options': [ + {'value': 10, 'text': 'Training generico sporadico'}, + {'value': 30, 'text': 'Formazione annuale obbligatoria'}, + {'value': 50, 'text': 'Training targeted per ruolo + testing'}, + {'value': 70, 'text': 'Continuous learning + certificazioni'}, + {'value': 100, 'text': 'Adaptive AI training + competency management'} + ] + }, + { + 'id': 'vendor_compliance', + 'question': 'Compliance management fornitori e partner:', + 'options': [ + {'value': 15, 'text': 'Clausole contrattuali generiche'}, + {'value': 35, 'text': 'Due diligence + questionnaire standard'}, + {'value': 55, 'text': 'Audit periodici + SLA compliance'}, + {'value': 75, 'text': 'Continuous monitoring + risk scoring'}, + {'value': 100, 'text': 'Shared compliance platform + real-time assurance'} + ] + } ] -} \ No newline at end of file +} + +# Pesi delle componenti calibrati dalla ricerca GIST (Tabella B.5) +COMPONENT_WEIGHTS = { + 'physical': 0.18, # 18% + 'architectural': 0.32, # 32% + 'security': 0.28, # 28% + 'compliance': 0.22 # 22% +} + +# Benchmark settore GDO italiano (dalla Tabella 5.4 della tesi) +SECTOR_BENCHMARKS = { + 'physical': {'avg': 51.2, 'target': 65}, + 'architectural': {'avg': 45.8, 'target': 70}, + 'security': {'avg': 48.3, 'target': 68}, + 'compliance': {'avg': 52.7, 'target': 75} +} + +# Labels italiani per le componenti +COMPONENT_LABELS = { + 'physical': 'Infrastruttura Fisica', + 'architectural': 'Architettura', + 'security': 'Sicurezza', + 'compliance': 'Conformità' +} diff --git a/requirements.txt b/requirements.txt index cf77d4b..ea51969 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,20 +1,4 @@ -# Core Flask -Flask==2.3.3 +Flask==3.0.0 gunicorn==21.2.0 - -# Build dependencies -setuptools==68.0.0 -wheel==0.41.2 - -# Optional - aggiungi solo se necessario -python-dotenv==1.0.0 - - -Flask==2.3.3 -gunicorn==21.2.0 -setuptools==68.0.0 -wheel==0.41.2 -python-dotenv==1.0.0 -# Quando aggiungi funzionalità: -# pandas==2.0.3 -# numpy==1.24.3 \ No newline at end of file +reportlab==4.0.7 +Pillow==10.4.0 diff --git a/templates/about.html b/templates/about.html new file mode 100644 index 0000000..f675b82 --- /dev/null +++ b/templates/about.html @@ -0,0 +1,172 @@ +{% extends "base.html" %} + +{% block title %}About - GIST Framework{% endblock %} + +{% block content %} + +
+

+ Il Framework GIST +

+ +
+
+

+ Cos'è il GIST Framework? +

+

+ GIST (Grande distribuzione - Integrazione Sicurezza e Trasformazione) + è un framework scientifico per la valutazione quantitativa della maturità digitale nel settore + della Grande Distribuzione Organizzata (GDO). +

+

+ Sviluppato come tesi di laurea magistrale in Cybersecurity e validato empiricamente + su un dataset di 234 organizzazioni, il framework fornisce un indice composito (GIST Score) + che integra quattro dimensioni critiche dell'infrastruttura digitale. +

+
+ +
+

+ Le 4 Dimensioni +

+ +
+
+

+ 1. Infrastruttura Fisica (18%) +

+

+ Valuta l'hardware, i sistemi di alimentazione, la connettività di rete, + il raffreddamento e la ridondanza. Include anche il monitoraggio proattivo + e la sicurezza fisica. +

+
+ +
+

+ 2. Architettura (32%) - Peso Maggiore +

+

+ Analizza l'adozione cloud, i pattern architetturali (microservizi, container), + le pratiche DevOps, la gestione API, l'architettura dati e le strategie + di disaster recovery. È la dimensione più pesante per il suo ruolo centrale + nella trasformazione digitale. +

+
+ +
+

+ 3. Sicurezza (28%) +

+

+ Copre tutti gli aspetti di cybersecurity: identity management, network security, + endpoint protection, crittografia, threat detection, vulnerability management + e security awareness. +

+
+ +
+

+ 4. Conformità (22%) +

+

+ Integra i requisiti normativi (GDPR, PCI-DSS, NIS2) come elementi nativi + dell'architettura. Include audit, data governance, risk management e + gestione dei diritti degli interessati. +

+
+
+
+ +
+

+ Formula di Calcolo +

+

+ Il GIST Score non è una semplice media pesata, ma incorpora effetti non lineari + che riflettono i rendimenti decrescenti tipici degli investimenti in tecnologia: +

+
+ GIST = Σ(wk × Skγ) +
+

+ dove wk sono i pesi calibrati empiricamente, + Sk sono i punteggi normalizzati 0-100 per ogni componente, + e γ = 0.95 è l'esponente per i rendimenti decrescenti. +

+
+ +
+

+ Livelli di Maturità +

+
+
+ 0-25 +
+ Iniziale: Architettura legacy, sicurezza reattiva, + gap normativi significativi +
+
+
+ 26-50 +
+ In Sviluppo: Modernizzazione parziale in corso, + sicurezza proattiva, conformità base +
+
+
+ 51-75 +
+ Avanzato: Architettura moderna, sicurezza integrata, + conformità automatizzata +
+
+
+ 76-100 +
+ Ottimizzato: Trasformazione completa, sicurezza adattiva, + compliance-as-code +
+
+
+
+ +
+

+ Validazione Scientifica +

+
    +
  • + + Validato su 234 organizzazioni GDO italiane +
  • +
  • + + Benchmark su 47 catene con dataset completi +
  • +
  • + + Simulazioni Digital Twin con 10.000 iterazioni Monte Carlo +
  • +
  • + + Intervalli di confidenza al 95% +
  • +
  • + + Pubblicato come progetto open-source su GitHub +
  • +
+
+ + +
+
+ +{% endblock %} diff --git a/templates/assessment.html b/templates/assessment.html new file mode 100644 index 0000000..3bb0bd7 --- /dev/null +++ b/templates/assessment.html @@ -0,0 +1,321 @@ +{% extends "base.html" %} + +{% block title %}GIST Assessment - Questionario{% endblock %} + +{% block extra_head %} + +{% endblock %} + +{% block content %} + +
+
+
+

+ GIST Digital Maturity Assessment +

+

+ Rispondi alle 36 domande per ottenere il tuo GIST Score personalizzato +

+
+ + +
+
+ Progresso Totale + 0% +
+
+
+
+
+
+
Fisica
+
0/8
+
+
+
Architettura
+
0/10
+
+
+
Sicurezza
+
0/10
+
+
+
Conformità
+
0/8
+
+
+
+
+
+ +
+ + +
+

+ Informazioni Organizzazione (opzionale) +

+ +
+ + +
+
+ Vai a: + +
+
+ + +
+ + {% for component, questions in questions.items() %} +
+
+
+ {% if component == 'physical' %} +
+ +
+ {% elif component == 'architectural' %} +
+ +
+ {% elif component == 'security' %} +
+ +
+ {% else %} +
+ +
+ {% endif %} +
+

+ {{ component_labels[component] }} +

+

+ {{ questions|length }} domande +

+
+
+ + {% for question in questions %} +
+
+

+ {{ loop.index }}. {{ question.question }} +

+ ID: {{ question.id }} +
+ +
+ {% for option in question.options %} +
+ + + {{ option.value }} pt +
+ {% endfor %} +
+
+ {% endfor %} +
+
+ {% endfor %} + + +
+

+ Completa tutte le 36 domande per calcolare il tuo GIST Score +

+ +
+ +
+ +
+ + + + +{% endblock %} + +{% block extra_scripts %} + +{% endblock %} diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..4687eca --- /dev/null +++ b/templates/base.html @@ -0,0 +1,132 @@ + + + + + + {% block title %}GIST Framework - Digital Maturity Assessment{% endblock %} + + + + + + + + + + + + + {% block extra_head %}{% endblock %} + + + + + + + +
+ {% block content %}{% endblock %} +
+ + + + + {% block extra_scripts %}{% endblock %} + + diff --git a/templates/index.html b/templates/index.html index d353c05..4cde301 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1,87 +1,213 @@ - - - - - - GIST Score Calculator - - - - -

GIST Framework - Calcolatore di Maturità Digitale

+{% extends "base.html" %} + +{% block content %} + + +
+
+
+

+ Valuta la Maturità Digitale
della Tua Organizzazione GDO +

+

+ Il GIST Framework è uno strumento scientifico validato per misurare e migliorare + la sicurezza, l'architettura e la conformità della Grande Distribuzione Organizzata. +

+ +
+
+
+ + +
+
+

+ Cosa Ottieni dall'Assessment +

+

+ Un'analisi completa su 4 dimensioni critiche con raccomandazioni prioritizzate e confronto con il settore. +

+
-
-
-

Inserisci i punteggi (0-100) per calcolare il GIST Score.

-
-
- - -
-
- - +
+ +
+
+ +
+

Infrastruttura Fisica

+

+ Alimentazione, connettività, ridondanza hardware, monitoraggio e sicurezza fisica. +

+
+ Peso: 18% +
+
+ + +
+
+ +
+

Architettura

+

+ Cloud adoption, microservizi, DevOps, API management, disaster recovery e scalabilità. +

+
+ Peso: 32% (massimo) +
+
+ + +
+
+ +
+

Sicurezza

+

+ Identity management, network security, endpoint protection, threat detection e vulnerability management. +

+
+ Peso: 28% +
+
+ + +
+
+ +
+

Conformità

+

+ Framework normativi (GDPR, PCI-DSS, NIS2), audit, data governance e risk management. +

+
+ Peso: 22% +
+
+
+
+ + +
+
+
+

+ Come Funziona +

+

+ Un processo semplice e veloce per ottenere il tuo GIST Score +

+
+ +
+
+
+ 1
-
- - +

Rispondi al Questionario

+

+ 36 domande strutturate sulle 4 dimensioni critiche. Tempo stimato: 15-20 minuti. +

+
+ +
+
+ 2
-
- - +

Ottieni il GIST Score

+

+ Calcolo immediato con formula scientifica validata. Score da 0 a 100 con benchmark settoriale. +

+
+ +
+
+ 3
- - +

Ricevi Raccomandazioni

+

+ Report dettagliato con piano d'azione prioritizzato, ROI stimato e roadmap implementativa. +

+
+ + +
+
- {% if risultato %} -
-

Profilo di Maturità

- + +
+
+
+

+ Framework Validato Scientificamente +

+

+ Basato su ricerca accademica con validazione empirica +

+
+ +
+
+
234
+
Organizzazioni
Analizzate
+
+
+
4
+
Dimensioni
Valutate
+
+
+
36
+
Domande
Qualitative
+
+
+
0-100
+
GIST Score
Normalizzato
+
+
+ +
+
+
+ +
+
+

Ricerca Accademica

+

+ Il framework GIST è stato sviluppato come tesi di laurea magistrale in Cybersecurity, + validato su dataset reali del settore GDO italiano e pubblicato come progetto open-source. +

+
+
- {% endif %}
- - {% if risultato %} -
-

Risultati

-

GIST Score Calcolato: {{ risultato }} / 100

-

Livello di Maturità: {{ livello_maturita }}

+
+ + +
+
+

+ Pronto a Valutare la Tua Maturità Digitale? +

+

+ Inizia l'assessment gratuito e scopri come migliorare sicurezza, architettura e conformità. +

+ + Inizia l'Assessment +
- {% endif %} +
- - - \ No newline at end of file +{% endblock %} diff --git a/templates/results.html b/templates/results.html new file mode 100644 index 0000000..e3ecac0 --- /dev/null +++ b/templates/results.html @@ -0,0 +1,437 @@ +{% extends "base.html" %} + +{% block title %}GIST Score - Risultati{% endblock %} + +{% block extra_head %} + + +{% endblock %} + +{% block content %} + +
+
+ + +
+

Il Tuo GIST Score

+
+
--
+
/100
+
+
--
+

--

+
+ + +
+
+
+
+ +
+
+
--
+
/100
+
+
+

Infrastruttura Fisica

+
+ vs Settore: + -- +
+
+ +
+
+
+ +
+
+
--
+
/100
+
+
+

Architettura

+
+ vs Settore: + -- +
+
+ +
+
+
+ +
+
+
--
+
/100
+
+
+

Sicurezza

+
+ vs Settore: + -- +
+
+ +
+
+
+ +
+
+
--
+
/100
+
+
+

Conformità

+
+ vs Settore: + -- +
+
+
+ + +
+ +
+

+ Profilo Maturità +

+ +
+ + +
+

+ Confronto con il Settore +

+ +
+
+ + +
+

+ Raccomandazioni Prioritizzate +

+
+ +
+
+ + +
+

+ Benchmark Settoriale +

+
+ +
+
+ + +
+ + + + Nuova Valutazione + +
+ +
+
+ +{% endblock %} + +{% block extra_scripts %} + +{% endblock %}