Vorrei una semplice webapp statica che si prenda in pasto un foglio CSV con errori riscontrati da parte del wireframe della banca e li impagini con una buona UI che mi faciliti la consultazione di questi errori. Vorrei anche poter anche segnalare quali di questi errori ho letto (tramite uno checkmark), e vorrei poi poter scaricare il csv aggiornato che contenga anche l'informazione dei checkmark scaricati (file che potrei a sua volta ricaricare sull'applicativo successivamente). Il dataset d'esempio è già presente nella cartella del progetto
Crea webapp CSV errori
Do un'occhiata alla struttura del progetto e al CSV d'esempio, così il piano nasce dal materiale reale invece che da ipotesi. Poi ti chiedo solo le scelte che non si possono dedurre dai file.
Il progetto per ora è vuoto a parte un solo CSV, quindi qui ha senso pianificare una mini app statica autonoma. Sto leggendo intestazioni e forma del dataset per decidere parsing, colonne e UX senza inventarmi uno schema.
Ho trovato un CSV piccolo e pulito: 10 errori, 11 colonne, separatore virgola, già con date/stato/autore/tipologia. Restano due scelte di prodotto che incidono sul file esportato e sull'esperienza di consultazione.
Webapp Statica per Errori Mainframe
Summary
Creare una webapp statica, senza build e senza dipendenze esterne, composta da index.html, styles.css e app.js. L'app permetterà di caricare un CSV, consultare gli errori in una UI curata con doppia vista, segnare gli errori come letti e scaricare un CSV aggiornato ricaricabile in seguito.
Key Changes
- Aggiungere caricamento CSV tramite file picker e drag-and-drop, lasciando invariato il file originale
dataset_errori_mainframe.csv. - Implementare parsing CSV lato browser con supporto a campi quotati, virgole nei testi e re-export corretto.
- Mostrare gli errori in doppia vista:
- tabella compatta con colonne principali, ricerca, filtri per
Stato,Tipologia di Abend,Autore, contatori e checkmark; - cards leggibili con motivo, soluzione temporanea e soluzione definitiva più evidenti.
- tabella compatta con colonne principali, ricerca, filtri per
- Aggiungere una colonna CSV
Lettoin export, con valoritrue/false. - In fase di import, se la colonna
Lettoè già presente, ripristinare automaticamente i checkmark. - Aggiungere azioni rapide: "segna tutti visibili come letti", "reset checkmark", download CSV aggiornato.
Interfaces
- Input CSV atteso: le colonne presenti nel dataset d'esempio, con eventuale colonna opzionale
Letto. - Output CSV: stesse colonne importate, più
Lettose mancante; l'ordine delle colonne originali resta invariato eLettoviene aggiunta in fondo. - Stato lettura: mantenuto in memoria durante la sessione e salvato definitivamente solo nel CSV esportato.
Test Plan
- Caricare
dataset_errori_mainframe.csve verificare conteggio righe, colonne e testi lunghi. - Segnare alcuni errori come letti, scaricare il CSV e ricaricarlo: i checkmark devono riapparire.
- Provare ricerca, filtri, cambio vista tabella/cards e azioni massive.
- Verificare apertura diretta di
index.htmlnel browser senza server locale. - Controllare layout desktop e mobile, evitando sovrapposizioni e testo tagliato.
Assumptions
- La prima versione resta completamente locale: nessun backend, nessun salvataggio remoto, nessuna autenticazione.
- Il CSV usa UTF-8 e virgola come separatore, coerentemente con il dataset d'esempio.
- La colonna
Lettouserà esattamentetrueefalseper massima semplicità di ricaricamento.
Ok, procedi con l'implementazione
Perfetto, passo all'implementazione. Creo una piccola app statica autonoma: niente build, niente dipendenze, solo HTML/CSS/JS e il CSV resta intatto.
Sto per aggiungere tre file: la pagina, lo stile e la logica di parsing/export. Mi tengo su una UI operativa, con vista tabella per scansione rapida e vista schede per leggere bene motivo e soluzioni.
Created 3 files
La prima passata è dentro. Adesso faccio controlli leggeri: sintassi JS, struttura dei file e poi una verifica visiva/interattiva nel browser locale, così intercettiamo subito eventuali problemi di layout o caricamento.
I controlli sintattici sono puliti. Ho notato due piccoli ritocchi utili prima del browser test: gestire l'eventuale BOM dei CSV Excel e aggiornare subito lo stato visivo delle schede quando spunti un singolo errore.
Edited 1 file
Per testare anche il pulsante "Dataset esempio" uso un server statico temporaneo sulla cartella del progetto; l'app resta comunque apribile direttamente come file per l'uso con file picker.
Used the browser
Il caricamento via browser funziona: il dataset d'esempio entra correttamente, la tabella mostra 10 righe, il download si abilita e i contatori tornano coerenti. Ora provo filtri, checkmark, vista schede ed export CSV logico.
Used the browser
L'interazione principale è confermata: ricerca "DB2", vista schede, checkmark singolo e "segna visibili" aggiornano i contatori come previsto. Il browser integrato non supporta il download reale di blob, quindi verifico l'export CSV con un controllo diretto sulle funzioni JS invece di forzare quel percorso.
Aggiungo un controllo responsive rapido: desktop e mobile, con caricamento reale del dataset e misure DOM per beccare overflow grossolani o controlli tagliati. Poi chiudo il server temporaneo.
Used the browser
Implementazione completata.
Ho aggiunto la webapp statica in:
Funzioni incluse: caricamento CSV, drag-and-drop, doppia vista tabella/schede, ricerca e filtri, checkmark Letto, azioni massive sui risultati visibili e download del CSV aggiornato con colonna Letto.
Verifiche fatte: sintassi JS ok, caricamento del dataset d'esempio ok, filtri/checkmark/vista schede ok, export CSV validato con round-trip e colonna Letto, layout controllato su desktop/mobile, nessun errore console. Puoi aprire direttamente index.html; il pulsante "Dataset esempio" funziona quando la cartella è servita via HTTP, mentre da apertura file diretta puoi usare "Carica CSV".
+1,217 -0
Lancia il webserver per me e dammi il commando per lanciarlo da me ed arrestarlo quando mi serve
Lo avvio sulla porta 8765, così resta coerente con la verifica che ho appena fatto. Ti lascio anche i comandi esatti per riavviarlo e fermarlo quando vuoi.
Webserver avviato qui:
Per lanciarlo da te, dalla cartella del progetto:
bashcd "/Users/ig/dev/Tualba/Primo test codex 01"
python3 -m http.server 8765
Per arrestarlo: premi Ctrl+C nella finestra del terminale dove sta girando.
Se invece lo hai perso in background, puoi trovare il processo e chiuderlo così:
bashlsof -nP -iTCP:8765 -sTCP:LISTEN
kill <PID>
Per lo stato, dammi la possibilità di aggiornarlo, e di cambiarlo da aperto a chiuso e viceversa. E una volta modificato lascia un piccolo pallino blu per indicare che quel campo è stato aggiornato (così mi ricordo di riscaricare la versione aggiornata del csv).
Nella tabella, mostrami anche i campi che hai nascosto, che sono anche soluzione temporanea e definitiva. Inoltre, per i campi testuali dammi il behaviour dove clicco e il campo testuale si copia nella clipboard.
Procedo direttamente. Intervengo su logica e UI: stato modificabile, indicatore blu di modifica, colonne soluzione in tabella e copia al click per i testi.
Sto applicando il cambio in modo che lo stato diventi un controllo vero e proprio, non solo un'etichetta. Per il pallino blu lo lego alla differenza rispetto allo stato importato: se riporti il valore com'era, il pallino sparisce.
Edited 3 files
Prima verifica: ho trovato un dettaglio di styling da sistemare sui testi copiabili dentro il blocco Job. Lo correggo ora, poi passo ai test automatici e al browser.
Edited 2 files
I test di base passano: sintassi ok, export ok, e lo stato modificato finisce nel CSV. Il server che avevi chiesto è ancora attivo sulla porta 8765, quindi verifico ora la UI aggiornata in browser.
Used the browser
La logica è di nuovo pulita. Ora ricarico la pagina servita su localhost:8765 e verifico lo stato modificabile, il pallino blu e le nuove colonne nella tabella.
Used the browser
Fatto. Ho aggiornato la webapp servita su:
Cambi principali:
Statoora è modificabile con selectaperto/chiuso.- Se cambi lo stato, appare un pallino blu accanto al campo; se lo riporti al valore originale, sparisce.
- Il CSV scaricato include lo
Statoaggiornato. - In tabella ora compaiono anche
Soluzione temporaneaeSoluzione definitiva. - I campi testuali sono cliccabili e copiano il testo negli appunti.
Verifiche fatte: sintassi JS ok, export CSV ok, UI testata in browser con dataset esempio, modifica/revert stato ok, pallino blu ok, nuove colonne visibili, nessun errore console. Se hai già la pagina aperta, fai refresh.
+226 -41
Adesso vorrei integrare la possibilità di riempire un csv vuoto (ma con le colonne definite prima) con i dati di errori presenti in uno screenshot. Vorrei quindi che ci fosse un pulsante "carica immagine", che poi performasse un'estrazione OCR dei record, e che questi fossero visibili a schermo come i record importati dal foglio CSV. E ovviamente rimane la possibilità di scaricare il file CSV. Inoltre, vorrei che i campi testuali Motivo, Soluzione Temporanea e Definiva fossero modificabili direttamente nell'interfaccia. Nella cartella del progetto è presente un'immagine d'esempio. Fai le dovute prove per accertarti che OCR funzioni correttamente.
Fatto. Ho aggiunto il pulsante Carica immagine con OCR via Tesseract.js, preprocess dell'immagine per screenshot mainframe verde/nero e parsing automatico delle righe OCR in record CSV.
Ho testato l'OCR sull'immagine d'esempio: vengono estratti 15 record con job, date, orari, return code e WS/OP corretti dopo correzioni mirate agli errori OCR tipici.
Fatto. Ho aggiunto:
- pulsante Carica immagine con OCR via Tesseract.js;
- preprocess dell'immagine per screenshot mainframe verde/nero;
- parsing automatico delle righe OCR in record CSV;
- mapping verso le colonne già definite;
Motivo,Soluzione TemporaneaeSoluzione Definitivaeditabili direttamente in tabella e nelle schede;- export CSV che include sia i record OCR sia le modifiche manuali.
Ho testato l'OCR sull'immagine d'esempio: vengono estratti 15 record con job, date, orari, return code e WS/OP corretti dopo correzioni mirate agli errori OCR tipici (0/0, I/1, S/5, ecc.). Ho anche verificato la UI sul server locale: bottone immagine presente, 30 campi testuali editabili sul dataset CSV, nessun errore console.
Nota pratica: l'OCR usa Tesseract.js da CDN, quindi serve connessione internet almeno al primo caricamento del motore OCR. La webapp è ancora disponibile su:
+411 -34
Nota l'immagine dell'esempio 2. Nel job può comparire un simbolo di $ o £, che al momento viene parsato in modo errato. Correggi l'OCR pls
Vado a cercare l'immagine "esempio 2" e verifico il formato reale del job con $ / £, poi correggo parser e whitelist OCR senza toccare il resto del flusso.
Ho trovato esempio 2.png. Lo apro visivamente e poi faccio passare lo stesso OCR di test per vedere esattamente come degrada quei caratteri nel testo riconosciuto.
Visivamente il caso è chiaro: il simbolo è parte del JOBNAME, ad esempio JCCGCS0£ e JEDGBT4$. Il parser attuale usa solo alfanumerico e quindi li butta via; ora verifico anche cosa produce Tesseract sull'esempio 2.
L'OCR riconosce $ abbastanza bene, mentre £ diventa a volte ff o fE dopo il numero del job. Correggo quindi due punti: whitelist OCR con $/£ e normalizzazione del solo JOBNAME per preservare questi simboli e ripulire gli artefatti.
Edited 1 file
Il test mirato sul parser passa: JCCGCS0ff diventa JCCGCS0£, JCCGCS3fE diventa JCCGCS3£, e JEDGBT4$ resta intatto. Ora rilancio l'OCR reale su esempio 2.png.
Corretto. Ho aggiornato l'OCR per preservare $ e £ nel JOBNAME.
Cambi fatti in jsapp.js:
- aggiunti
$e£alla whitelist OCR; - introdotto parsing specifico per
JOBNAME, così non vengono più rimossi come caratteri "non alfanumerici"; - aggiunta correzione degli artefatti OCR tipici su
£, tipoJCCGCS0ff→JCCGCS0£eJCCGCS3fE→JCCGCS3£.
Ho testato l'OCR reale su esempio 2.png: estrae 15 record e ora produce correttamente job come JCCGCS0£, JCCGCS1£, JCCGCS2£, JCCGCS3£, JEDGBT4$, JEDGBK4$.
Fai refresh della pagina su 🌐 http://localhost:8765 per caricare la versione aggiornata.
+13 -2