Webapp React + Vite per simulare il valore economico dell’adozione Citrix HMC con dashboard, scenari, ipotesi di costo e dettaglio dei calcoli.
Prerequisiti: Node.js 20+.
npm install
npm run devBuild produzione:
npm run build
npm run previewIl repository include una pipeline GitHub Actions in .github/workflows/azure-webapp.yml.
Esempio con Azure CLI:
az login
az group create --name rg-citrix-roi --location westeurope
az appservice plan create --name plan-citrix-roi --resource-group rg-citrix-roi --sku B1 --is-linux
az webapp create --name <NOME_UNIVOCO_WEBAPP> --resource-group rg-citrix-roi --plan plan-citrix-roi --runtime "NODE:20-lts"az webapp config set \
--resource-group rg-citrix-roi \
--name <NOME_UNIVOCO_WEBAPP> \
--startup-file "pm2 serve /home/site/wwwroot --no-daemon --spa"Se in Azure Portal compare l’errore “Basic authentication is disabled” quando clicchi su Download publish profile, abilita temporaneamente la basic auth per il deployment:
- Portal: Web App → Deployment Center → FTPS credentials e abilita SCM Basic Auth Publishing Credentials (e, se necessario, FTP Basic Auth Publishing Credentials).
Dopo il download del profilo puoi disabilitarla di nuovo per maggiore sicurezza.
- In Azure Portal apri la tua Web App.
- Vai su Download publish profile e scarica il file.
- In GitHub: Settings → Secrets and variables → Actions → New repository secret.
- Nome secret:
AZURE_WEBAPP_PUBLISH_PROFILE. - Incolla il contenuto del profilo di pubblicazione.
Nel file .github/workflows/azure-webapp.yml sostituisci:
AZURE_WEBAPP_NAMEcon il nome reale della tua web app.
Se il deploy va a buon fine ma la Web App mostra pagina bianca o scarica index.html, verifica questi punti:
- Startup command su Azure (Linux App Service)
az webapp config set \
--resource-group rg-citrix-roi \
--name citrix-hmc-roi-webapp \
--startup-file "pm2 serve /home/site/wwwroot --no-daemon --spa"- Deploy del contenuto
dist/alla root di wwwroot
La pipeline è configurata per pubblicare esplicitamente dist/ (non l'intero workspace del job) verso Azure Web App.
- Verifica in DevTools (Network/Console)
Controlla che richieste come /assets/*.js e /assets/*.css rispondano con 200 e content-type corretto.
Fai push su main: la pipeline builda la webapp e pubblica dist/ su Azure Web App.
Assessment cliente contiene soltanto parametri As-Is: volumi, costi unitari, ciclo di rinnovo PC ed effort. Questi dati sono centralizzati: 4 host inseriti qui compaiono sia in New Business sia in Renewal. Per Renewal il perimetro include anche la quota già implementata; non inserire soltanto i volumi residui.
L'adozione si configura nelle rispettive schede, indipendentemente:
- New Business: percentuale prevista per ciascuna leva, con anteprima del saving immediata e quantità equivalenti (es. 30% di 8 host = 2,4 host equivalenti ai fini della simulazione). Non richiede adozione attuale e non utilizza le quantità inserite nel Renewal. Licenze HMC, durata e progetto base rimangono nel Profilo New Business; ogni leva può aggiungere un costo di intervento extra.
- Renewal: quantità già implementata, obiettivo totale raggiungibile e costo di completamento. L'obiettivo iniziale è il totale As-Is, modificabile in caso di vincoli tecnici. Quantità mancanti restano da compilare; 0 indica nessuna adozione. Host, utenti e dispositivi sono interi.
I dati vengono salvati automaticamente nel browser (localStorage), con stato visibile in testata, e ripristinati dopo un ricaricamento. La bozza comprende assessment condiviso, profili, piani indipendenti, lingua, percorso e verifiche. Non viene sincronizzata tra browser o dispositivi. Se il browser impedisce il salvataggio, un messaggio invita a mantenere aperta la pagina.
Al primo accesso il wizard propone obiettivo, dati propri o esempio, area da cui iniziare e durata. I dati propri partono vuoti; gli esempi sono sempre indicati come da verificare. Il pulsante “Guida iniziale” riapre il wizard e consente di riprendere la bozza o sostituirla con un nuovo scenario.
La navigazione separa Dati cliente, Profilo economico, Adozione e interventi e Risultati. L’assessment è diviso in sei gruppi, disponibili anche in vista completa. I filtri delle aree modificano soltanto la visualizzazione, mai i calcoli. La conferma di un gruppo è invalidata quando cambiano i suoi valori; la presenza di valori di esempio non implica una verifica. Vuoto e zero restano distinti. Le icone di aiuto si aprono con clic/tocco o tastiera e si chiudono con Escape o clic esterno.
Compatibilità e report conservano i dati e la posizione di scorrimento al ritorno. Le formule economiche e il contenuto dei report restano invariati. Il salvataggio è versionato e valida la struttura prima del ripristino; bozze corrotte o incompatibili riportano al wizard senza causare errori applicativi.
New Business: totale As-Is × % adozione prevista × saving unitario × quota eliminabile
Renewal: (obiettivo totale − già implementato) × saving unitario × quota eliminabile
Il saving sul periodo considera i mesi di attivazione e sottrae gli interventi extra. I benefici della quota già adottata sono stime calcolate, non valori consuntivi richiesti all'utente. Le ipotesi iniziali sono visibili e modificabili: adozione New Business 0% per le leve di sostituzione; per effort IT e servizi Security si applicano i default riportati sotto. Quota eliminabile 100%, attivazione immediata e costo extra 0. Le percentuali New Business esprimono copertura o, per effort e servizi, la riduzione delle giornate o del costo considerato.
- XenServer: core medi per host × costo core/anno.
- NetScaler: costo appliance × manutenzione annua. Solo selezionando un refresh futuro evitabile si aggiunge, una volta, quantità residua × costo appliance × quota eliminabile. Gli acquisti passati sono esclusi.
- Unicon/eLux e lifecycle: una sola leva; costo annuo prima = costo PC / ciclo As-Is; costo annuo dopo = costo sostituzione / ciclo dopo intervento. Ipotesi iniziale esplicita: ciclo As-Is + 2 anni e costo PC dell'assessment, modificabili.
- MFA/ZTNA/EDR/Posture: quantità × costo mensile × 12.
- Effort IT: giorni × costo giornata. Si tratta di capacità liberata e non necessariamente di una riduzione monetaria degli esborsi.
- SOC e opportunità CPC manuali: base annua dichiarata; il modello non inventa importi per rischi o costi privi di una base documentata.
Il modello attivo src/models/customerAssessmentModel.js alimenta input,
riepiloghi, TCO e report. Un cambio dei dati As-Is aggiorna entrambe le viste;
quantità già adottate o target non più validi vengono segnalati. I CSV di
compatibilità XenServer, eLux e NetScaler restano indipendenti.
Verifiche: npm test, npm run build, npm run validate:i18n-data.
Il riepilogo e il report mantengono la copertura del costo totale e aggiungono:
- Delta annuo = max(0, costo proposto / anni − costo precedente / anni precedenti).
- Copertura delta annuo a regime = saving aggiuntivo annuo / delta annuo × 100.
- Copertura netta delta sul periodo = (saving sul periodo − costi interventi) / (delta annuo × anni rinnovo) × 100. Include i ritardi di attivazione.
- Delta residuo = max(0, delta sul periodo − saving netto).
Con 9.720 €/anno di saving e un aumento di 10.000 €/anno la copertura è 97,2%. Se il saving supera il delta si mostra anche oltre il 100%. I benefici già implementati non sono aggiunti al nuovo saving. Senza aumento la percentuale è non applicabile; senza il prezzo precedente il confronto resta da completare.
Catalogo: src/models/newBusinessDefaults.js. Le percentuali si applicano una
sola volta al totale As-Is. Un valore esplicito di 0% le disattiva; un campo
svuotato resta incompleto. Il reset ripristina i default. Non modificano Renewal.
| Servizio | Riduzione iniziale | Natura del valore |
|---|---|---|
| IT Endpoint | 31% | Benchmark device management IDC, tabella 5 |
| IT Image / VDI | 35% | Applicazione al modello del benchmark infrastruttura IDC, tabella 3 |
| IT Support | 36% | Benchmark help desk IDC, tabella 4 |
| IT Access | 30% | Ipotesi del modello da validare |
| SOC / MSSP | 10% | Ipotesi su spesa rinegoziabile; 0% se contratto fisso |
| Remediation | 20% | Ipotesi su attività automatizzabili |
| Security Operations | 20% | Ipotesi su effort operativo |
Fonti visibili anche nelle schede e nel report: IDC 2024, caso Citrix CSG, azioni automatiche Citrix. Le ultime due fonti descrivono meccanismi operativi, non convalidano i valori 10% e 20% del modello. Nessuna percentuale è una garanzia universale. Il benchmark IDC riguarda sei organizzazioni ed è sponsorizzato da Citrix.
Esempio: 120 giornate Endpoint × 31% = 37,2 giornate liberate; residuo 82,8. Impostando manualmente 40%: 48 liberate, 72 residue. Il costo si calcola dal costo/giornata dell’assessment. Questa capacità non implica automaticamente minori esborsi. SOC, remediation e Operations devono avere basi distinte per non contare due volte le stesse attività. Leve di migrazione e sostituzione licenze (inclusi EDR e posture) restano allo 0% fino alla definizione del perimetro.
Il pulsante Report, disponibile in alto in New Business e Renewal (e anche nel riepilogo Renewal), apre un’anteprima dello scenario corrente. Da qui Stampa / Salva PDF apre la stampa del browser; scegliere la destinazione PDF. Torna allo scenario mantiene tutti i valori inseriti.
Entrambi i report includono una sintesi descrittiva generata dai dati correnti, i principali contributi al saving, il profilo economico, tutti i parametri dell’assessment e un dettaglio per leva: adozione o riduzione, stato attuale e obiettivo nel Renewal, tempi, quota eliminabile, costi e note/evidenze. I valori iniziali conservati sono documentati come valori presenti nei campi, non come dati cliente verificati. Le stime parziali e i dati mancanti sono segnalati.
New Business riporta TCO, ROI, progetto base e costi residui e descrive anche l’eventuale maggior costo. Renewal documenta entrambi i contratti, il delta annualizzato, le coperture annua e netta sul periodo e i costi ancora da coprire. La stampa usa un layout A4 dedicato, separato dai controlli della webapp.