PWA per agenti di vendita: calcola sconti commerciali (Sconto 1, Sconto 2, sconto cliente equivalente) e margini partendo da listini in formato CSV o Excel.
- Import CSV o Excel (.csv, .xlsx, .xlsm, .xls)
- Riconoscimento intelligente colonne (italiano/inglese, varianti case-insensitive)
- Calcolo prezzo netto, margine percentuale, sconto equivalente cliente
- Trasporto e installazione opzionali
- Memoria locale (IndexedDB): l'ultimo listino caricato resta disponibile
- Export report TXT e WhatsApp
- Offline-first: funziona senza connessione dopo il primo caricamento
- Privacy first: nessun account, nessun tracker, nessuna telemetria, nessuna richiesta a servizi esterni. Listini e preventivi restano sul dispositivo
PWA completamente statica: nessun build, nessun npm, nessun Worker o Function.
- Genera/usa
CSVXpressSmart-Cloudflare-Ready.zip(index.html alla radice dello ZIP) - Cloudflare Pages → Create project → Direct Upload → trascina lo ZIP
Il file _headers applica CSP, header di sicurezza e le regole di cache
(service-worker.js e index.html sempre rivalidati, vendor/ e icon/ a cache lunga).
Ad ogni nuova pubblicazione ricordarsi di:
- incrementare
CACHE_VERSIONinservice-worker.js - incrementare
data-verinindex.html
Così il service worker installa la nuova shell, elimina le cache vecchie e la pagina si aggiorna da sola.
Richiedono Google Chrome installato e un server statico locale:
python3 -m http.server 8899 --bind 127.0.0.1 # oppure: node tests/serve-with-headers.mjs 8898
node tests/logic.test.js # calcoli, report, export, parsing
node tests/browser.test.mjs # end-to-end in Chrome headless (import, TXT, offline, responsive)
node tests/update.test.mjs # aggiornamento PWA e pulizia cacheCSVXpressSmart è disponibile anche come app nativa per iPhone su App Store: 👉 https://apps.apple.com/it/app/csvxpresssmart-pezzali/id6774046371
Campi obbligatori:
- Codice (alias: code, codiceArt, codArticolo, id)
- Prezzo (alias: prezzo, prezzoLordo, prezzo_EUR, price, importo, listino)
Campi opzionali:
- Descrizione (alias: description, desc, articolo)
- CostoTrasporto (alias: trasporto, shipping, spedizione)
- CostoInstallazione (alias: installazione, installation, montaggio)
- Famiglia, Categoria, Pagine (preparati per futuri filtri)
Tutti i nomi sono riconosciuti senza maiuscole/minuscole e con o senza spazi.
MIT — vedi LICENSE.
Alessandro Pezzali — https://www.alessandropezzali.it