Prototipo per il task Product Builder di Jet HR. Il criterio del task era uno: dimostrare il controllo delle logiche. Il mio modo di rispondere: ogni numero in pagina ha una formula visibile, una fonte istituzionale e un test che lo verifica.
Il metodo, in sei passi
- 1. Discovery del dominio → prima del codice, le regole 2026 dalle fonti istituzionali: scaglioni IRPEF della Legge di Bilancio, circolare INPS n. 6/2026, art. 13 TUIR, taglio del cuneo (L. 207/2024), addizionali regionali e comunali, incentivi strutturali (L. 92/2012).
- 2. Discovery Jet HR → studio del prodotto (il simulatore costi è una funzione core) e del brand: colori e font di queste pagine sono i token reali estratti dal CSS di produzione di jethr.com (nero caldo, lime, famiglia Wix Madefor).
- 3. Scouting UI/UX → best practice dei wizard: una domanda per schermata, avanzamento visibile e navigabile all'indietro, ricerca con suggerimenti, tastiera e screen reader, mobile first, e una grammatica dei colori unica (nero = selezionato, lime = azione).
- 4. Scomposizione degli input → tre passi: chi sei (il copy si adatta: al dipendente il sito dà del tu, all'HR parla del candidato), dove, quanto. Tutto il resto è calcolato, non chiesto.
- 5. Motore separato e testato → la fiscalità vive in una funzione pura senza dipendenze, verificata da 53 assert eseguibili in Node: formule di legge, un caso completo ricalcolato a mano, monotonia del netto, ripartizione delle mensilità, costo azienda e incentivi.
- 6. Audit → 8.000 combinazioni regione × RAL senza anomalie, contrasti WCAG calcolati (non stimati), e ogni link di fonte chiamato via HTTP per verificare che porti al documento giusto.
Le piccolezze ragionate
I dettagli piccoli sono quelli che raccontano se un prodotto è stato pensato o assemblato. Otto scelte minute, ognuna col suo perché:
- Fonti che non ti perdono → cliccando il numerino di una fonte la pagina apre la sezione Fonti, scorre centrando la voce e la illumina per un attimo: sai sempre dov'è finito il click, e da lì un altro click porta al documento ufficiale. Al passaggio, il tooltip anticipa quale fonte è.
- La soglia parla in RAL → l'esenzione comunale per legge vale sull'imponibile, ma l'utente conosce la sua RAL: gliela traduciamo ("con una RAL fino a ~25.300 €"), perché un numero che non riconosci non è un'informazione.
- Il copy cambia soggetto → al dipendente il sito dà del tu ("La tua RAL"), all'HR parla del candidato ("La RAL che offri"): stessi input, due persone diverse davanti allo schermo.
- Prima il totale, poi le voci → il risultato apre con la cifra delle trattenute; ogni voce si espande sulla propria spiegazione nell'ordine giusto: prima le parole, poi la formula coi tuoi numeri, poi gli scaglioni.
- Una grammatica di colore → in tutto il sito il nero è "selezionato" e il lime è "azione da compiere": tre bottoni vicini non si confondono mai su chi è uno stato e chi è un invito.
- La ricerca comune si svuota al focus → toccando il campo, il capoluogo proposto si toglie da solo e i suggerimenti si aprono subito: scrivere sopra un valore precompilato è attrito inutile.
- Il bordo intero della regione → in SVG i confini condivisi vengono coperti dalle regioni disegnate dopo: la selezionata viene portata in cima allo stack, così il suo contorno resta integro. E uscendo dalla mappa, il riquadro torna alla regione scelta, non all'ultima sfiorata.
- Il contratto si chiede solo a chi serve → indeterminato/determinato appare solo nel flusso azienda, allo step dell'offerta: sul netto del dipendente non cambia nulla, e un campo che non cambia nulla è rumore.
Cosa c'è dentro
- Due viste, un motore → dipendente (netto, cascata delle trattenute, calendario delle mensilità con la tredicesima "più leggera" spiegata) e azienda (costo totale, contributo addizionale del tempo determinato, simulatore degli incentivi strutturali).
- Dati veri, non tipici → 20 regioni dalla mappa interattiva; 7.877 comuni con aliquota, soglia di esenzione e scaglioni importati dall'elenco annuale ufficiale dell'Agenzia delle Entrate, uniti all'elenco ISTAT per codice catastale; 1.095 comuni calcolati per scaglioni veri; 33 comuni recenti con fallback dichiarato in interfaccia.
- Le logiche nel prodotto → ogni voce del risultato si apre sulla propria spiegazione: prima le parole, poi la formula coi numeri dell'utente, poi gli scaglioni. E ogni termine tecnico (addizionale, esenzione, TFR) ha la spiegazione al passaggio.
- Report stampabili → un PDF per il dipendente e uno per l'azienda, generati dal browser senza che alcun dato lasci la pagina. Deep link per condividere una simulazione con un URL.
La catena dell'affidabilità
Come un numero arriva in pagina: fonte istituzionale → dato nel motore → test che lo blinda → dichiarazione dove semplifica. E la catena è stata messa alla prova davvero: l'audit ha trovato e corretto una soglia di esenzione sbagliata (Roma: 14.000 €, non 12.000), due bug del parser dell'elenco AdE (Genova perdeva un'aliquota, un testo descrittivo inquinava Terlizzi) e due link di fonte che non rispondevano più. La fiducia in questo prototipo non è dichiarata: è testata, e gli errori trovati sono documentati invece che nascosti.
Fonti
- Legge di Bilancio 2026 (L. 199/2025), Normattiva
- Agenzia delle Entrate, aliquote e calcolo IRPEF
- INPS, circolare n. 6 del 30/01/2026
- Art. 13 TUIR (DPR 917/1986), Normattiva
- L. 207/2024, art. 1, Normattiva
- MEF, Dipartimento delle Finanze, addizionale regionale IRPEF
- MEF, ricerca addizionale comunale per comune
- Comune di Milano, addizionale comunale IRPEF
- Roma Capitale, addizionale IRPEF
- Agenzia delle Entrate, elenco annuale delle addizionali comunali (2026)
- L. 92/2012 (riforma Fornero), Normattiva
Nota finale
Il task chiedeva un prototipo di cui avere il controllo delle logiche. Questo è il mio modo di intenderlo: ogni numero ha una formula visibile, una fonte ufficiale e un test che lo verifica. Il resto lo discutiamo volentieri a voce.