Modulo Listini & Sconti
Gestione listini prezzi, scaglioni volume, politiche di sconto e assegnazione a soggetti
Funzioni della procedura
Elenco completo di cosa fa il modulo Listini & Prezzi.
Listini e prezzi
- Listini multipli con codice, valuta, priorità, validità e arrotondamento
- Voci di listino con prezzo, unità di misura, IVA e prezzo IVA inclusa
- Unità di misura multiple (collo, pallet) con fattore e prezzo PRO
- Scaglioni di quantità (sconti a volume per fascia)
- Modifica massiva prezzi: variazione %, arrotonda, arrotondamento psicologico (,99), imposta prezzo
- Duplica listino con variazione percentuale
- Listini derivati che seguono il listino base, con le voci fissate a mano PRO
- Listino in valuta convertito col cambio del giorno del documento PRO
Assegnazione e risoluzione
- Assegnazione per cliente, fascia commerciale, canale o predefinito
- Motore di risoluzione prezzo per specificità e priorità
- Date di validità per assegnazioni temporanee (promozioni)
- Simulatore “Verifica prezzo”: quale prezzo si applica e perché
- Ricerca incrementale di articoli e clienti
Funzioni professionali
- Prezzo a ricarico (cost-plus) dal costo d'acquisto PRO
- Listini d'acquisto fornitore multi-fornitore PRO
- Condizioni per cliente (contratti quadro) PRO
- Controllo marginalità con deroghe tracciate PRO
- Multi-valuta con tassi di cambio (aggiornamento BCE) PRO
- Prezzo per magazzino (prezzo base + prezzi per deposito) PRO
- Fasce commerciali e canali del soggetto parametrizzabili PRO
Analisi e pricing
- Controllo margini nei documenti: “perché questo prezzo” + blocco sotto soglia PRO
- Workflow deroghe con coda di approvazione + sconto max per utente PRO
- Analisi di marginalità per cliente, prodotto e periodo PRO
- Vendite sotto soglia di margine in evidenza PRO
- Prezzo suggerito da obiettivo di margine e storico PRO
- Allerta erosione del margine PRO
Costi e margini
- Colonna Margine in tempo reale sul costo effettivo
- Allarme sotto-costo e sotto-margine minimo
- Costo effettivo: fornitore preferito → migliore → catalogo
- Import costi d'acquisto da listino fornitore (CSV)
- Permesso «Vedere costi e margini»: chi non ce l'ha non li vede da nessuna parte
Campagne e sconti
- Campagne promozionali a tempo con rientro automatico
- Regole di sconto: condizioni, valori, target
- Promozioni a soglia sul totale (spesa ≥ X → sconto) PRO
- Prendi N paga M (3x2, 3+1) su articolo o categoria PRO
- Bundle multi-prodotto (A+B insieme → sconto) PRO
- Combinazione sconti (cumulativi, esclusivi, a cascata)
- Sconto catena anagrafica (es. 10+5+3)
Import/Export e governo
- Import/Export prezzi in CSV (Excel) con anteprima differenze
- Stampa listino in PDF per il cliente (senza costi né margini)
- Integrazione documenti con storicizzazione del prezzo
- Audit log delle variazioni e timeline del listino
- Cestino con ripristino e operazioni massive
- Permessi RBAC per la modifica dei listini
Riferimenti normativi
- Artt. 1341-1342 Codice Civile — Condizioni generali di contratto: disciplinano l'efficacia delle condizioni generali predisposte da uno dei contraenti, incluse le clausole relative a prezzi, sconti e listini. Le condizioni di vendita applicate tramite listino devono essere conosciute o conoscibili dal cliente al momento della conclusione del contratto. Le clausole vessatorie (limitazioni di responsabilita, penali, decadenze) devono essere specificamente approvate per iscritto.
- Art. 2 D.Lgs. 114/1998 — Disciplina del commercio (prezzi al pubblico): stabilisce le definizioni e i principi relativi all'attivita commerciale, inclusa l'indicazione dei prezzi al pubblico. I listini devono riportare i prezzi in modo chiaro, visibile e inequivocabile, comprensivi di IVA quando destinati al consumatore finale. Le variazioni di prezzo e le promozioni devono rispettare le regole di trasparenza previste dalla normativa.
- Art. 15 DPR 633/72 — Sconti, abbuoni e ribassi in fattura: disciplina il trattamento IVA degli sconti e degli abbuoni. Gli sconti incondizionati (applicati direttamente in fattura) riducono la base imponibile IVA. Gli sconti condizionati (subordinati a eventi futuri, come il raggiungimento di volumi o il pagamento anticipato) non riducono la base imponibile al momento dell'emissione e richiedono l'emissione di nota di credito al verificarsi della condizione.
Il modulo Listini & Sconti consente di definire e gestire le politiche di prezzo dell'azienda. Ogni listino rappresenta un insieme di prezzi per gli articoli in catalogo, con la possibilita di differenziare i prezzi per scaglioni di quantita (volume tiers).
I listini vengono assegnati ai soggetti secondo una gerarchia di priorita: Soggetto specifico → Fascia commerciale → Canale di vendita → Listino predefinito. Il sistema risolve automaticamente il prezzo applicabile in fase di inserimento documenti.
Le regole di sconto si sovrappongono ai listini e permettono di definire condizioni (quantita minime, importi, date, tipologie), valori (percentuale, importo fisso, prezzo netto, omaggio) e target (tutti i soggetti, singolo soggetto, fascia commerciale, gruppo). Le regole possono essere combinate secondo logiche cumulative, esclusive o a cascata.
Per creare, modificare o eliminare un listino prezzi:
- Accedere al menu Vendite → Listini & Sconti → Listini e premere + Nuovo Listino.
- Compilare i campi di testata del listino (v. tabella sotto).
- Inserire le voci di listino con prezzi, aliquote IVA e scaglioni (v. sezione 3).
- Premere Salva per confermare. Il listino sara disponibile per l'assegnazione ai soggetti.
- Per modificare, aprire il listino dalla lista e premere Modifica. Per eliminare, premere Elimina (solo se non assegnato a nessun soggetto).
| Campo | Obbligatorio | Descrizione |
|---|---|---|
| Codice listino | Si | Identificativo univoco alfanumerico (es. LST-001, PROMO-2026) |
| Nome listino | Si | Descrizione leggibile (es. “Listino Base”, “Listino Ingrosso”) |
| Valuta | Si | Valuta di riferimento (EUR predefinita). Supporto multi-valuta |
| Priorita | Si | Valore numerico: priorita piu alta prevale in caso di conflitto (1 = massima) |
| Data inizio validita | Si | Data dalla quale il listino e attivo |
| Data fine validita | No | Data di scadenza, inclusa: il listino vale per tutto quel giorno. Se vuoto, il listino resta valido a tempo indeterminato. Fuori dal periodo il listino non fa prezzi, anche se assegnato |
| Stato | Si | Attivo / Sospeso / Scaduto (calcolato automaticamente dalle date) |
Bozza e pubblicazione
Ogni listino ha uno stato di ciclo di vita: Bozza o Pubblicato. Un listino in Bozza si può preparare con comodo — aggiungere voci, correggere prezzi, definire scaglioni — senza che influisca sui prezzi: il motore di risoluzione lo ignora completamente finché non viene pubblicato. È lo strumento giusto per costruire, ad esempio, il “listino del prossimo anno” e attivarlo solo quando è pronto.
- In fase di creazione si può spuntare “Salva come bozza”; per impostazione predefinita un nuovo listino nasce già pubblicato.
- Nella lista, le bozze hanno un badge ✏️ Bozza e una riga tratteggiata; i filtri Pubblicati / Bozze permettono di isolarle.
- Il pulsante 🚀 Pubblica rende il listino attivo nel motore prezzi; ✏️ lo riporta in bozza (sospendendolo). Ogni cambio di stato è tracciato nell'audit log.
Versioni e ripristino
Dalla gestione voci, il pulsante 🕐 Versioni apre lo storico del listino. Una versione è una fotografia completa dei prezzi (voci e scaglioni) in un dato momento; serve a tre cose:
- Storico — con 📸 Salva versione attuale (etichetta facoltativa) congeli lo stato corrente prima di un intervento importante.
- Prezzo in vigore a una data — indicando una data, il sistema mostra i prezzi com'erano alla fine di quel giorno: quelli della prima versione salvata dopo quella data (le versioni automatiche si salvano proprio prima di ogni modifica) oppure, se dopo non ne è stata salvata nessuna, i prezzi attuali. Le modifiche di una sola voce non salvano una versione: se ce ne sono state nel mezzo, il risultato lo segnala.
- Ripristino (rollback) — il pulsante ↺ Ripristina riporta i prezzi a quelli di una versione precedente. Prima di sovrascrivere, il sistema salva automaticamente una versione di sicurezza dello stato attuale, così l'operazione è sempre reversibile.
Il sistema crea da sé una versione automatica prima delle operazioni più incisive — ricalcolo dai costi, import prezzi da CSV e operazioni massive sulle voci — in modo che ci sia sempre un punto di ritorno.
Aggiornamenti programmati
Il pulsante ⏰ Programmati permette di pianificare una variazione dei prezzi a una data futura, che il sistema applica da solo quel giorno. È la risposta al classico “dal 1° gennaio aumenta tutto del 3%”: non serve ricordarsi di farlo a mano.
- Si sceglie la data (da oggi in avanti), l'operazione (Variazione %, es. +3 o −5, oppure Arrotonda a uno step) ed eventualmente un'etichetta. La variazione % sposta anche gli scaglioni a prezzo fisso; quelli a sconto % seguono il prezzo base da soli. Valgono gli stessi limiti della modifica massiva (niente variazioni che porterebbero i prezzi a zero o sotto, niente passi di arrotondamento sopra 100) e le stesse regole di margine, controllate quando si programma. Un listino nel cestino non si aggiorna.
- Ogni notte un controllo automatico applica gli aggiornamenti scaduti; prima di modificare i prezzi salva una versione di sicurezza del listino, quindi l'operazione è sempre reversibile.
- Gli aggiornamenti in attesa si possono annullare; un amministratore può anche eseguirli subito con il pulsante «Ora». Lo stato (In attesa / Eseguito / Annullato) e l'esito restano visibili nell'elenco.
Ogni listino contiene una o piu voci, ciascuna associata a un articolo del catalogo. Per ogni voce e possibile definire scaglioni di quantita con prezzi differenziati.
| Campo voce | Descrizione |
|---|---|
| Articolo | Riferimento all'articolo di catalogo (codice + descrizione) |
| Prezzo unitario | Prezzo base per l'unita di misura principale |
| Aliquota IVA | Aliquota IVA applicabile (es. 22%, 10%, 4%, esente) |
| Unita di misura | UM di riferimento per il prezzo (PZ, KG, LT, MT, ecc.) |
Prezzi a quantità (scaglioni)
Chi ne compra di più paga di meno. In fondo alla scheda della voce, sotto il prezzo base, c'è la sezione Prezzi a quantità: si preme + Aggiungi fascia e si compila una riga per fascia.
| Campo | Come si compila |
|---|---|
| Da quantità | Da quanti pezzi in poi vale questa fascia. Obbligatorio. |
| Fino a | Dove finisce. Lasciandolo vuoto la fascia vale da lì in su, senza limite — ed è il modo più comune di scriverle. |
| Prezzo | Il prezzo unitario in quella fascia. |
| oppure sconto % | In alternativa al prezzo: uno sconto sul prezzo base. Scrivendo uno, l'altro si spegne: sono due modi di dire la stessa cosa. |
Il modo più comune: fasce aperte
Si scrivono solo i punti in cui il prezzo cambia, senza limite superiore. Con un prezzo base di 10,00 €:
| Da quantità | Fino a | Prezzo | Cosa vuol dire |
|---|---|---|---|
| 10 | vuoto | 9,00 € | Da 10 pezzi in poi |
| 50 | vuoto | 8,00 € | Da 50 pezzi in poi |
| 100 | vuoto | 7,00 € | Da 100 pezzi in poi |
Vince sempre la fascia più alta raggiunta: 7 pezzi → 10,00 € (prezzo base), 30 pezzi → 9,00 €, 60 → 8,00 €, 500 → 7,00 €.
Fasce chiuse: quando servono
Il campo Fino a serve per una promozione che deve finire. Una fascia «da 1 a 10 → 8,00 €» vale fino a dieci pezzi e non oltre: chi ne compra undici torna al prezzo base.
La prova prima di salvare
Sotto le fasce c'è Prova con: si scrive una quantità e si legge subito il prezzo che uscirebbe e quale fascia lo ha deciso. È lo stesso identico calcolo che farà il documento, quindi quello che si vede qui è quello che poi arriva in fattura.
I listini vengono assegnati secondo una gerarchia di priorita. Il sistema risolve il prezzo partendo dal livello piu specifico:
| Livello | Priorita | Descrizione |
|---|---|---|
| Soggetto | 1 (massima) | Listino assegnato direttamente al singolo soggetto dalla sua scheda anagrafica |
| Fascia commerciale | 2 | Listino associato alla fascia commerciale del soggetto (es. Standard, VIP, Grossista) |
| Canale di vendita | 3 | Listino associato al canale (es. E-commerce, Negozio, Agente) |
| Predefinito (default) | 4 (minima) | Listino di base applicato quando nessun listino specifico e configurato |
- Aprire la pagina Listini e premere il pulsante Assegnazioni in alto a destra: si apre il pannello con tre blocchi.
- Per assegnare un listino a una fascia commerciale, nel blocco Per fascia commerciale selezionare il listino accanto alla fascia desiderata (le fasce sono quelle scelte nelle anagrafiche, in Dati Commerciali: Standard, Premium, VIP, Grossista…).
- Per assegnare un listino a un canale, nel blocco Per Canale selezionare il listino accanto al canale (Retail, Web/E-commerce, Ingrosso, Agente, Banco).
- Il canale Banco (cassa del negozio) è quello della vendita al banco: la cassa lo usa quando non c'è un cliente o quando il cliente non ha un canale suo. Un listino assegnato a Banco fa i prezzi della cassa, della ricerca alla cassa e dei cartellini, ma non quelli delle fatture. C'è sempre e non si cancella: se non serve, si toglie la spunta Usa nel listino.
- Per impostare il listino predefinito, usare il blocco Listino Predefinito: è quello applicato quando nessuna regola più specifica corrisponde. Ogni scelta è salvata immediatamente. La spunta Listino default nella scheda del listino fa la stessa cosa: spuntarla lo rende predefinito, toglierla lo toglie (e da quel momento, per chi non ha altri listini, valgono i prezzi di catalogo).
- Accanto a fasce e canali si possono impostare le date di validità (dal/al): l'assegnazione diventa temporanea — ideale per le promozioni — e si attiva/spegne da sola. Date vuote = sempre valida. Le date sono giorni interi: «al 31» vale per tutto il 31.
- Il pulsante Verifica prezzo simula la risoluzione: scelto cliente, articolo, quantità e data, mostra quale listino vince e perché (personale → fascia commerciale → canale → predefinito), con scaglione e IVA applicati.
- Per l'assegnazione diretta al soggetto, v. sezione 9.
Le regole di sconto consentono di definire politiche commerciali flessibili che si applicano in aggiunta ai listini.
- Accedere a Vendite → Listini & Sconti → Sconti e premere + Nuova Regola Sconto.
- Assegnare un codice e una descrizione alla regola.
- Definire le condizioni di applicabilita (v. sezione 6).
- Specificare il valore dello sconto e il target dei beneficiari (v. sezione 7).
- Configurare il tipo di combinazione con altre regole (v. sezione 8).
- Impostare le date di validita e lo stato (Attivo / Sospeso).
- Premere Salva. La regola sara applicata automaticamente nei documenti che soddisfano le condizioni.
Ogni regola sconto puo avere una o piu condizioni che devono essere soddisfatte (in AND logico) per l'applicazione dello sconto:
| Tipo condizione | Codice | Descrizione | Esempio |
|---|---|---|---|
| Quantita minima | QTA_MIN | La quantita ordinata deve essere uguale o superiore al valore specificato | QTA_MIN = 50 pezzi |
| Importo minimo | IMPORTO_MIN | L'importo totale della riga o del documento deve superare la soglia | IMPORTO_MIN = 500,00 € |
| Tipo voce | TIPO_VOCE | Lo sconto si applica solo a specifiche categorie o famiglie di articoli | TIPO_VOCE = “Elettronica” |
| Intervallo date | DATA | Lo sconto e valido solo in un determinato periodo temporale | DATA = 01/03/2026 – 31/03/2026 |
| Canale di vendita | CANALE | Lo sconto si applica solo a ordini provenienti da un canale specifico | CANALE = “E-commerce” |
| Pagamento anticipato | PAG_ANTICIPATO | Lo sconto si applica se il pagamento avviene entro un termine ridotto | PAG_ANTICIPATO = entro 10 gg |
| Prima fornitura | PRIMA_FORN | Lo sconto si applica solo al primo ordine del soggetto | PRIMA_FORN = true |
Tipi di valore sconto
| Tipo valore | Codice | Descrizione | Esempio |
|---|---|---|---|
| Percentuale | PERCENTUALE | Riduzione percentuale sul prezzo di listino | -15% sul prezzo unitario |
| Importo fisso | IMPORTO_FISSO | Riduzione di un importo fisso per unita o per riga | -2,00 € per pezzo |
| Prezzo netto | PREZZO_NETTO | Sostituzione del prezzo di listino con un prezzo fisso concordato | Prezzo netto = 8,50 € |
| Omaggio | OMAGGIO | Fornitura gratuita di unita aggiuntive (es. 3+1, 10+2) | Ogni 10 pezzi, 1 omaggio |
Target beneficiari
| Target | Codice | Descrizione |
|---|---|---|
| Tutti i soggetti | TUTTI | La regola si applica a qualsiasi soggetto (promozione universale) |
| Soggetto specifico | SOGGETTO | La regola si applica solo ai soggetti esplicitamente indicati |
| Fascia commerciale | CATEGORIA | La regola si applica a tutti i soggetti della fascia commerciale indicata |
| Gruppo soggetti | GRUPPO | La regola si applica a un gruppo personalizzato di soggetti |
Quando piu regole di sconto sono applicabili contemporaneamente, il sistema utilizza il tipo di combinazione definito per ciascuna regola:
| Tipo | Codice | Comportamento | Esempio |
|---|---|---|---|
| Cumulabile | CUMULABILE | Lo sconto si somma agli altri sconti applicabili. Tutti gli sconti cumulabili vengono applicati in sequenza | Sconto 10% (listino) + 5% (promo) = prezzo con entrambi gli sconti |
| Esclusivo | ESCLUSIVO | Se applicabile, questo sconto esclude tutti gli altri. Se piu sconti esclusivi sono applicabili, prevale quello con valore maggiore per il cliente | Sconto Black Friday 30% esclude ogni altro sconto |
| A cascata | CASCATA | Gli sconti vengono applicati in sequenza sul prezzo risultante dallo sconto precedente (sconto su sconto) | Prezzo 100 € → -10% = 90 € → -5% = 85,50 € |
Dalla scheda anagrafica di un soggetto con ruolo Cliente o Fornitore, la tab Listino & Sconti consente di configurare le politiche di prezzo specifiche.
- Aprire la scheda del soggetto e selezionare la tab Listino & Sconti.
- Nel campo Listino assegnato, selezionare il listino da applicare al soggetto. Questo sovrascrive la gerarchia fascia/canale/default.
- Nella sezione Sconti incondizionati, definire eventuali percentuali fisse applicate a tutti gli articoli del soggetto.
- Nella sezione Sconti condizionati, associare le regole sconto specifiche per il soggetto.
- Nella sezione Prezzi netti personalizzati, inserire eventuali prezzi fissi per singoli articoli che sovrascrivono il listino.
- Premere Salva per confermare la configurazione.
Il modulo Listini & Sconti si integra con tutti i documenti commerciali (ordini, DDT, fatture). La tab Listino & Sconti nel documento mostra le politiche applicate.
Risoluzione automatica del prezzo
Quando si inserisce un articolo in una riga documento, il sistema esegue automaticamente:
- Identificazione del listino: il sistema cerca il listino applicabile seguendo la gerarchia Soggetto → Fascia commerciale → Canale → Default, alla data del documento (non a quella di oggi): una fattura con una data passata prende i prezzi in vigore quel giorno. Contano le date del listino, della voce, dell'assegnazione e del contratto cliente. La tab Listino & Sconti del documento mostra lo stesso listino, con il motivo (assegnato al cliente, della fascia, del canale, predefinito).
- Ricerca della voce: nel listino identificato, cerca la voce corrispondente all'articolo inserito.
- Selezione scaglione: in base alla quantita inserita, seleziona il prezzo unitario dello scaglione appropriato.
- Applicazione sconti: valuta tutte le regole sconto applicabili (per condizioni, target e combinazione) e calcola il prezzo finale.
- Calcolo IVA: applica l'aliquota IVA della voce di listino o quella predefinita del soggetto. Il prezzo sulla riga è sempre al netto dell'IVA: se il listino ha prezzi IVA inclusa, il prezzo viene scorporato (es. 21,84 € ivato al 22% → 17,901639 € sulla riga, che con l'IVA torna 21,84). Una riga esente (aliquota 0 con la sua natura) resta esente.
Ricalcolo manuale
Il pulsante Ricalcola prezzi nella toolbar del documento permette di rieseguire la risoluzione dei prezzi su tutte le righe, utile dopo la modifica di un listino o l'aggiunta di nuove regole sconto. Il ricalcolo aggiorna i prezzi unitari e gli sconti mantenendo le quantita invariate.
Ricalcolo automatico al cambio cliente
Quando durante la compilazione di un documento si cambia il cliente, il sistema rileva se il listino associato al nuovo soggetto è diverso da quello precedente e, se ci sono già righe con prezzi impostati, chiede conferma prima di sovrascriverle. Strategia safe by default:
- Nuovo documento senza righe → ricalcolo silenzioso (nulla da perdere)
- Righe già compilate → dialog di conferma con nuovo listino, numero di righe coinvolte e avviso sulla sovrascrittura di eventuali sconti manuali
- Documento già definitivo (EMESSO/CONFERMATO/INVIATO/PAGATO/ARCHIVIATO) → i prezzi non vengono mai modificati automaticamente (sono storicizzati, il contratto con il cliente è chiuso)
Questo evita di perdere trattative commerciali a causa di un cambio cliente involontario o di correzione di intestazione su un documento già inviato.
I listini possono essere esportati tramite Impostazioni → Import / Export → Listini Prezzi.
- Selezionare il modulo Listini Prezzi.
- L'export genera un file con le colonne: nome listino, codice prodotto, prezzo, data inizio, data fine, attivo.
- Premere Configura Campi per selezionare/riordinare i campi e assegnare alias personalizzati.
- L'export è disponibile in formato CSV o Excel.
Aggiornamento strutturale del modulo Listini con operazioni massive, tracciamento variazioni di prezzo e soft-delete. Particolarmente utile per il lavoro commerciale: aggiornamenti listino annuali, simulazioni di variazione %, audit dei prezzi nel tempo.
Soft-delete + Cestino
L'eliminazione di un listino e ora una cancellazione logica: il listino viene nascosto dalle liste correnti ma resta nel database. I documenti storici che lo referenziano continuano a funzionare. Se il listino è assegnato (a clienti, fasce, canali o come predefinito) il sistema chiede conferma, perché da quel momento quei clienti passano al listino successivo o ai prezzi di catalogo. Dal footer della lista Listini si apre il pulsante 🗑 Cestino che mostra i listini cancellati con:
- ↺ Ripristina: il listino torna com'era prima del cestino (attivo se era attivo, spento se era spento).
- ✗ Definitivo: eliminazione fisica irreversibile. Blocca se il listino ha ancora assegnazioni collegate.
Audit log variazioni prezzo
Ogni modifica alla testata del listino (nome, valuta, arrotondamento, priorita, validita, default) viene registrata nella tabella log_modifiche_listini. Ogni variazione di prezzo su una voce viene registrata nella tabella log_modifiche_voci_listino con prezzo vecchio, prezzo nuovo, utente e timestamp. Risponde alla domanda piu frequente del commerciale: “chi ha cambiato questo prezzo, quando e perche?” Nel registro finiscono anche la cancellazione di una voce, il cestino e il ripristino del listino, le attivazioni e le priorità cambiate in blocco e le assegnazioni aggiunte o tolte.
Endpoint: GET /api/listini/:id/audit-log (testata) e GET /api/listini/:id/voci/:voceId/audit-log (singola riga).
Timeline listino
L'endpoint GET /api/listini/:id/timeline restituisce una vista aggregata: audit modifiche testata + audit variazioni prezzo di tutte le voci + assegnazioni ai soggetti, ordinati per data decrescente.
Operazioni massive su listini (selezione multipla)
Nella lista Listini e ora disponibile una colonna checkbox. Con una o piu righe selezionate compare una barra blu in fondo con le azioni:
- Attiva / Disattiva in massa.
- Priorita: imposta la stessa priorita su N listini.
- Duplica con variazione %: crea listini derivati applicando una variazione percentuale a tutte le voci, con arrotondamento basato sul listino padre. Esempio: selezioni il listino “BASE-2025” e crei “BASE-2026” con +3%. I prezzi per magazzino restano per magazzino. Il listino creato resta derivato: segue il base (vedi sotto).
- 🗑 Cestino: soft-delete in blocco.
Gestione voci del listino (nuovo componente UI)
Dalla lista Listini, nella colonna Azioni, il pulsante 📋 apre il modal di gestione voci. Per ciascuna voce sono disponibili:
- Modifica prezzo inline (clic sulla cella prezzo).
- Rimozione dal listino.
- Selezione multipla con azioni:
- % Variazione: applica +/-N% a tutti i prezzi selezionati (con arrotondamento automatico al passo del listino).
- ≈ Arrotonda: arrotonda i prezzi a un multiplo scelto (es. 0,05 €).
- ✨ Psicologico (prezzi civetta): porta i prezzi alla terminazione scelta — ,99 · ,95 · ,90 · ,50 · ,00 — scegliendo il valore più vicino al prezzo di partenza (es. 12,34 → 11,99; 250,00 → 249,99). Utile dopo un ricalcolo dai costi per rendere i prezzi commercialmente più efficaci.
- = Imposta prezzo: imposta lo stesso prezzo su tutte le voci selezionate.
- 🗑 Elimina: rimuove le voci selezionate.
- + Aggiungi voce: la voce di catalogo si cerca con un campo a ricerca progressiva (digitando codice o descrizione, anche parole spezzate e in qualsiasi ordine, la lista si filtra mentre si scrive); poi si imposta prezzo/UM/aliquota IVA (override).
Tutte le operazioni sulle voci sono tracciate nell'audit log.
Colonna Margine e allarme sotto-costo
Nella tabella voci la colonna Margine mostra la percentuale di ricarico calcolata sul costo d'acquisto dell'articolo (campo del catalogo). Se il prezzo è IVA inclusa il costo viene scorporato prima del calcolo. Quando il prezzo di listino scende sotto il costo, la cella diventa rossa con l'icona ⚠ e il dettaglio nel tooltip. Se il costo non è censito in catalogo la colonna mostra “—”. Il margine compare anche nel simulatore Verifica prezzo.
Import / Export prezzi in CSV (Excel)
Nella barra della gestione voci:
- ⬇ Esporta CSV: scarica le voci del listino (Codice, Descrizione, Prezzo, U.M., IVA, Attiva) in un file apribile direttamente con Excel italiano (separatore “;”, virgola decimale, accenti corretti).
- ⬆ Importa CSV: ricarica un file — sia quello riesportato sia un semplice elenco
codice;prezzo. Il sistema riconosce da solo separatore, intestazione e numeri (es.1.234,56). Prima di modificare qualsiasi prezzo mostra l'anteprima delle differenze: quante voci da aggiornare (con la variazione ▲/▼), invariate, non presenti in catalogo, righe con errori. Le voci di catalogo non ancora nel listino vengono aggiunte solo se si spunta l'apposita casella; il comando non crea mai voci di catalogo nuove. Ogni modifica finisce nell'audit log. - 🖨 Stampa PDF: genera il listino prezzi in PDF, pronto da inviare al cliente o all'agente. È un documento commerciale: riporta solo i prezzi di vendita, mai costi né margini. In testata compaiono i dati dell'azienda (presi dai Parametri); la tabella elenca Codice, Descrizione, U.M., eventuale Deposito (se ci sono prezzi per magazzino), Prezzo, IVA% e Prezzo IVA inclusa, con gli scaglioni di quantità riportati sotto la riga. Di default vengono stampate solo le voci in vigore alla data odierna.
- 🧾 PDF cliente (listino personalizzato): scelto un cliente, il PDF mostra per ogni articolo il prezzo che quel cliente ottiene davvero, calcolato dal motore prezzi — eventuale contratto, poi il listino a lui assegnato (per soggetto, fascia commerciale o canale) e gli scaglioni, già applicati. Una colonna “Prezzo da” indica l'origine di ciascun prezzo. Dove nessun listino vale per quel cliente compare il prezzo di catalogo, cioè quello che avrà in fattura. Le voci spente o fuori periodo, gli articoli cestinati o spenti in catalogo e i modelli a varianti non si stampano; gli scaglioni sono scritti al netto, come la colonna Prezzo, e con valute diverse ogni prezzo porta il suo simbolo.
Costi d'acquisto (listino fornitore)
Il pulsante € Costi d'acquisto in alto nella pagina Listini gestisce i costi d'acquisto del catalogo (quelli che alimentano i margini). Si esporta il CSV dei costi, lo si aggiorna dal listino del fornitore e lo si reimporta con la stessa anteprima differenze dell'import prezzi. Il match funziona per codice interno oppure per codice fornitore (se coincidono, prevale il codice interno). L'aggiornamento è tracciato nell'audit log del catalogo e i margini si ricalcolano di conseguenza.
Campagne promozionali a tempo
Dalla lista Listini, nella colonna Azioni, il pulsante 🎯 crea una campagna promozionale a partire dal listino. Si sceglie la variazione % (es. −10), il periodo dal/al (obbligatorio: una promo è per definizione a tempo) e i destinatari (tutti / una fascia commerciale / un canale). Il sistema genera un listino derivato PROMO-… con voci e scaglioni già scontati, priorità superiore al listino base e assegnazione limitata al periodo: nel periodo vince la promo, alla scadenza tornano da soli i prezzi normali, senza dover disattivare nulla.
Valuta del listino
La valuta scelta sul listino (EUR, USD, GBP, CHF) è ora operativa: il simulatore Verifica prezzo e la gestione voci mostrano i prezzi con il simbolo corretto. Sui listini in valuta diversa dall'euro il margine viene volutamente nascosto, perché il costo d'acquisto è espresso in euro e un confronto senza tasso di cambio sarebbe fuorviante.
Listino in valuta su un documento in un'altra valuta
Quando il listino che vale per il cliente è in una valuta diversa da quella del documento, il prezzo si converte invece di essere rifiutato. La regola è una sola:
- fra la valuta del listino e l'euro vale il cambio del giorno del documento (o dell'ultimo giorno prima: la BCE non pubblica nei festivi), preso dai Tassi di cambio;
- fra l'euro e la valuta del documento vale il cambio scritto in testata del documento;
- se uno dei due manca, il prezzo non si converte e la scheda dice quale cambio serve: la riga resta col suo prezzo. Un cambio inventato è peggio di un prezzo da scrivere a mano.
Il cambio usato si legge nel messaggio che compare sulla riga e nel riquadro «perché questo prezzo». Esempio: listino in dollari a 108 USD, fattura in euro del 5 ottobre, cambio BCE dell'1 ottobre 1 € = 1,08 USD: la riga prende 100,00 €.
Listini derivati che seguono il base
Un listino creato con Duplica con variazione % o con una campagna è un derivato: è il listino base più o meno una percentuale. Quando un prezzo del base cambia — modifica di una voce, modifica massiva, import CSV, ricalcolo dai costi, aggiornamento programmato, ripristino di una versione — i listini derivati si ricalcolano da soli: prezzo del base × (1 ± percentuale), con l'arrotondamento del listino derivato, e lo stesso per gli scaglioni a prezzo fisso. Un articolo aggiunto al base compare anche nel derivato; un articolo che c'è solo nel derivato resta. Se cambia la percentuale o l'arrotondamento del derivato, si ricalcola subito. Un derivato di un derivato segue a catena.
- Un prezzo del derivato scritto a mano (o cambiato con una modifica massiva, un import o un aggiornamento fatti sul derivato) diventa ✋ fissato a mano: il ricalcolo dal base lo salta. Il pulsante ↺ sulla riga lo riallinea al base e da lì torna a seguirlo.
- Ogni ricalcolo lascia traccia: nel registro del derivato una riga «ricalcolo da listino base» con il listino base, quanti prezzi sono cambiati, quante voci fissate a mano sono rimaste, chi ha fatto la modifica; nel registro di ogni voce il prezzo vecchio e quello nuovo, con origine «ricalcolo da listino base».
- Nella gestione voci del derivato una riga in alto dice da quale listino deriva e con che percentuale; dopo una modifica al base compare l'elenco dei derivati ricalcolati.
Esempio pratico: listino 2026 da listino 2025 con +3%
- Nella lista, spunta il checkbox accanto a “LST-2025”.
- Premi Duplica con variazione % nella barra azioni.
- Inserisci
3come percentuale e-2026come suffisso. - Il sistema crea un nuovo listino “LST-2025-2026” con tutti i prezzi aumentati del 3% e arrotondati al centesimo.
- Il nuovo listino ha il riferimento
listinoPadreIdal listino originale evariazionePerc = 3per audit futuro.
Prezzo a ricarico (cost-plus)
Invece di digitare i prezzi, il listino può calcolarli dal costo d'acquisto: prezzo = costo effettivo × (1 + ricarico%). Sul form del listino c'è il campo Ricarico % su costo (vuoto = prezzi manuali). Nella gestione voci il pulsante ⚙ Ricalcola da costi apre l'anteprima: per ogni voce mostra costo, fonte del costo, prezzo attuale e nuovo prezzo; il ricarico si può correggere riga per riga (la correzione resta come override della voce) prima di applicare. Quando cambiano i costi fornitore, si ripreme il pulsante e il listino si riallinea. Le voci senza costo non vengono toccate.
Listini d'acquisto fornitore
Il pulsante € Costi d'acquisto gestisce, per ogni articolo, più offerte di fornitori: prezzo, sconto %, codice articolo del fornitore, validità e flag ⭐ preferito. Il costo effettivo usato da margini e ricalcolo è quello del fornitore preferito; in mancanza, il netto più basso tra le offerte valide; in mancanza di offerte, il costo generico di catalogo. La fonte del costo è sempre indicata.
Condizioni per cliente (contratti quadro)
Il pulsante 🤝 Condizioni cliente registra i prezzi concordati con un singolo cliente: prezzo netto oppure sconto %, su un articolo, con periodo di validità, quantità minima e riferimento contratto. Lo sconto va da 0 a 100%, il prezzo netto non può essere negativo. Nel motore prezzi vincono su tutto, anche sul listino personale: il prezzo netto è quello finale, lo sconto % si applica al prezzo di listino risolto. Essendo il motore lo stesso usato dai documenti, i contratti si applicano automaticamente in fattura/preventivo/ordine.
Controllo marginalità
Nel modale Costi d'acquisto si impostano le regole di margine valide per tutto l'ambiente: margine minimo %, blocco vendite sotto costo e sconto massimo %. Ogni modifica prezzi che le viola (modifica singola, bulk, import, ricalcolo, campagne, condizioni cliente) viene bloccata con l'elenco dettagliato delle violazioni. Un amministratore può forzare con deroga, che viene registrata nei log del server. Nella tabella voci il margine diventa arancione se sotto il minimo, rosso se sotto costo.
Multi-valuta con tassi di cambio
Nel modale Costi d'acquisto la sezione 💱 Tassi di cambio imposta quante unità di valuta valgono 1 € (USD, GBP, CHF), a mano oppure col pulsante ↻ Aggiorna da BCE, che scarica i tassi ufficiali degli ultimi 90 giorni. Ogni cambio resta col suo giorno: un cambio scritto a mano vale da quel giorno in avanti, e un documento retrodatato usa il cambio del suo giorno. Così il margine si calcola correttamente anche sui listini in valuta estera: il costo d'acquisto (in €) viene convertito nella valuta del listino. Senza tasso impostato, sui listini in quella valuta il margine resta prudentemente nascosto.
Prezzo per magazzino
Lo stesso articolo, nello stesso listino, può avere un prezzo diverso per deposito. Nella gestione voci del listino, il campo Magazzino permette di aggiungere accanto al prezzo Base (valido per tutti i magazzini) uno o più prezzi specifici per magazzino. Il prezzo di un magazzino vale solo per quel magazzino: un documento di un altro deposito usa il prezzo base, e se non c'è passa al listino successivo o al catalogo. Per ogni articolo c'è un solo prezzo base e un solo prezzo per ciascun magazzino: chi prova ad aggiungerne un secondo viene rimandato a modificare quello che c'è. La colonna Magazzino mostra “Base” o il deposito. Quando si emette un documento, il motore usa il prezzo del magazzino del documento se presente, altrimenti quello base; nel simulatore “Verifica prezzo” si può scegliere il magazzino e vedere quale prezzo viene applicato.
Storicizzazione del prezzo nei documenti
Quando un prezzo risolto entra in un documento (preventivo, ordine, DDT, fattura) viene copiato e bloccato sulla riga: riaprendo il documento il prezzo resta quello del momento dell'emissione, anche se il listino è stato modificato in seguito. Il ricalcolo dai listini avviene solo su richiesta esplicita (pulsante di ricalcolo o conferma al cambio del cliente).
Le fasce commerciali e i canali di vendita delle anagrafiche sono un elenco gestito e ampliabile, condiviso tra le anagrafiche e i listini. Si parte con quattro fasce: Standard, Premium, VIP, Grossista. La fascia dice a che prezzo si vende a un soggetto: non va confusa con i Ruoli (cliente, fornitore…) né col Tipo soggetto (professionista, ente pubblico…).
Dal pannello Assegnazioni dei Listini, il pulsante ⚙ Gestisci fasce e canali apre l'elenco dove si può:
- Aggiungere una nuova fascia o un nuovo canale;
- Rinominare (il codice interno resta invariato: le anagrafiche già classificate non si toccano), attivare/disattivare ed eliminare;
- impostare la spunta “Usa nel listino”.
La spunta Usa nel listino decide se la voce compare tra le assegnazioni del listino (motore prezzi). Nel form del soggetto compaiono invece tutte le fasce e i canali attivi: un cliente può stare in una fascia anche se quella fascia non serve per i listini. Se un soggetto ha un valore storico non più in elenco, resta comunque selezionabile in modifica e non va perso.
Tutta l'intelligenza dei listini (contratti, listini, scaglioni, costi, regole di margine) arriva dove si vende: nel documento, e diventa analisi e supporto alle decisioni.
“Perché questo prezzo” sulla riga del documento
Quando una riga prende il prezzo dal motore, accanto al prezzo compare una piccola icona che indica da dove arriva — contratto cliente (🤝), listino personale (👤), fascia commerciale (👥), canale (🏪), predefinito (⭐) o catalogo (📦) — con il margine % e il dettaglio nel tooltip (scaglione, contratto). L'icona diventa ⚠ arancione se la riga è sotto il margine minimo aziendale, rossa se sotto costo.
Blocco sotto soglia al salvataggio
Se una o più righe violano le regole di margine, al salvataggio compare l'elenco delle righe fuori soglia. Un amministratore può confermare con deroga (registrata); un venditore normale non può derogare da solo (vedi Workflow deroghe qui sotto). Nei totali del documento è presente il riepilogo margine (margine € e %, con il conteggio delle righe sotto soglia).
Workflow autorizzazione deroghe
Il controllo margini è ora vincolante anche per i venditori: solo gli amministratori possono forzare un'operazione sotto soglia. Chi non è amministratore, quando viene bloccato, può richiedere l'autorizzazione: la richiesta finisce in una coda. Dal pulsante ⚖ Deroghe nella pagina Listini (con un badge che conta le richieste in attesa) l'amministratore approva o rifiuta con una nota. Un'autorizzazione approvata è monouso: appena il venditore ripete l'operazione bloccata, viene consumata. Vale per tutte le scritture prezzi (voci listino, bulk, import, ricalcolo, campagne, condizioni) e per il salvataggio dei documenti sotto margine.
Sconto massimo per utente
Oltre allo sconto massimo aziendale (globale), un amministratore può impostare un limite personale per singolo venditore, al posto del globale, dalla sezione Sconto massimo per utente nelle Regole di margine. Il limite vale per le condizioni cliente e per le righe dei documenti di vendita (preventivi, ordini, DDT, fatture; non gli acquisti, le note di credito e le ricette): un documento con una riga più scontata del limite non si salva, e il messaggio indica la riga. Conta solo lo sconto a mano: la percentuale della riga e la parte dello sconto in euro che va oltre quello che darebbero regole, «prendi N paga M» e bundle (NOX lo ricalcola al salvataggio con le stesse regole). Una riga scontata da una promozione non viene mai bloccata. Lo stesso vale alla vendita al banco. Le righe che sul documento c'erano già con quello sconto non vengono bloccate. Per andare oltre si riduce lo sconto oppure un amministratore alza il limite.
Costo storicizzato sulla riga
Alla registrazione di un documento, il costo d'acquisto effettivo alla data del documento viene salvato sulla riga: l'analisi di marginalità resta così corretta anche se i costi fornitore cambiano in seguito. Il costo lo mette il server, non la schermata: una riga che c'era tiene il costo con cui è nata, una riga nuova prende quello del giorno del documento. Per questo funziona anche per chi non vede i costi. Per i documenti salvati prima di questa funzione l'analisi ripiega sul costo corrente.
Analisi di marginalità
Il permesso «Vedere costi e margini»
Costo d'acquisto, ricarico e margini li vede solo chi ha il permesso Vedere costi e margini (pannello Permessi per ruolo). Di serie è acceso agli amministratori e spento a utenti e operatori; si cambia dal pannello. Senza il permesso:
- il motore prezzi non manda il costo: nella scheda documento non compaiono margine di riga e riepilogo margine; le violazioni delle regole di margine si vedono lo stesso, ma senza cifre («prezzo sotto il costo d'acquisto»);
- nel catalogo la scheda non mostra prezzo d'acquisto, margini e ricarico (e un salvataggio non li tocca); le offerte dei fornitori si vedono senza prezzi e non si modificano;
- nei listini spariscono colonna Margine, Costi d'acquisto, ricarico, Ricalcola da costi, Analisi marginalità e Prezzo suggerito;
- riaprendo un documento le righe arrivano senza il costo storicizzato, che resta comunque in archivio.
Analisi di marginalità, prezzo suggerito e condizioni cliente restano in più riservati agli amministratori.
Il pulsante 📈 Analisi marginalità nella pagina Listini apre il cruscotto della redditività delle vendite in un periodo: indicatori di ricavo, costo, margine € e %, e tre viste — per cliente, per prodotto e vendite sotto soglia di margine (ordinate dalla peggiore). Il costo usato è quello storicizzato sulla riga del documento (il costo alla data della vendita); per le righe che non ce l'hanno, quello d'acquisto effettivo corrente.
Prezzo suggerito (pricing)
Nel simulatore Verifica prezzo, il pulsante ✨ Suggerisci prezzo propone, per un articolo (ed eventualmente un cliente), il prezzo per l'obiettivo di margine calcolato dal costo effettivo, confrontandolo con lo storico del venduto (prezzo medio, minimo, massimo, ultimo e margine medio). Segnala l'erosione del margine quando in media si è venduto sotto il prezzo obiettivo, e il suggerito non scende mai sotto la media storica. L'obiettivo di margine è regolabile.
Le promozioni a soglia applicano uno sconto al totale del documento quando la spesa raggiunge un importo (es. spesa ≥ 500 € → 5%). Sono diverse dalle regole di sconto, che agiscono sulla singola riga: qui conta l'imponibile dell'intero documento.
Si gestiscono da Sconti → 🎁 Promozioni a soglia:
- Ogni promozione ha una soglia di spesa, un tipo (percentuale o importo fisso) e un valore; opzionalmente un canale e un periodo di validità.
- Si possono creare più scaglioni (es. 500→5%, 1000→10%): viene applicato lo scaglione più alto raggiunto.
- Il simulatore integrato mostra, dato un totale, quale promozione scatta e quanto manca alla successiva.
Nel documento, quando l'imponibile raggiunge una soglia compare un banner “🎁 Promozione: spesa ≥ X → sconto Y” con il pulsante Applica sconto, che imposta lo sconto globale del documento. Sotto soglia, un suggerimento indica quanto manca alla prossima promozione.
Prendi N paga M (3x2 / 3+1)
Da Sconti → 🛒 3x2 / Prendi-Paga si definiscono promozioni “ogni N pezzi ne paghi M” su un articolo o un'intera categoria (opzionalmente per canale e periodo). Esempio: 3×2 (N=3, M=2) → 1 pezzo gratis ogni 3. Nel documento, quando la quantità della riga raggiunge il multiplo, viene applicato automaticamente lo sconto equivalente e la riga mostra il badge “🛒 N×M”; aumentando la quantità lo sconto si ricalcola da solo.
Bundle multi-prodotto (A+B → sconto)
Da Sconti → 📦 Bundle si crea un insieme di due o più articoli con uno sconto (percentuale o importo fisso). Quando tutti i componenti sono presenti nel documento (con la quantità minima indicata), compare un banner “📦 Bundle Nome: A + B → sconto Y” con il pulsante Applica, che applica lo sconto alle righe dei componenti. L'importo fisso vale per set ed è diviso sulle righe dei componenti al centesimo: in fattura IVA esclusa, alla vendita al banco IVA compresa. Opzionale per canale e periodo.
Unità di misura multiple (collo, pallet)
Un articolo può avere più unità di misura oltre a quella base. Nel Catalogo, in modifica dell'articolo, la sezione Unità di misura alternative permette di aggiungere UM (es. CT Cartone, PL Pallet) con un fattore (quante UM base valgono 1 di questa) e un prezzo opzionale (se assente = prezzo base × fattore). Nella riga del documento, se l'articolo ha UM alternative compare un piccolo selettore accanto all'unità: scegliendo un'UM (collo, pallet…) il prezzo si adegua automaticamente; tornando alla base si ripristina.
• il pacchetto
FATTURAZIONE è compreso nella licenza dell’azienda
• il modulo è acceso nella Aziende & Licenze, per l’azienda e per l’utente
Spento vuol dire bloccato, non solo nascosto. Dettagli in Licenza e Aziende & Licenze.
A partire dalla versione 2.2, il modulo Listini adotta lo standard di certificazione NOX con i seguenti presidi:
Cestino e soft-delete
Gli elementi cancellati non vengono rimossi fisicamente ma spostati in un cestino interno (campi cancellatoIl / cancellatoDa). Dalla toolbar il pulsante Cestino alterna tra vista attivi e vista cestino. Dal cestino è possibile:
- Ripristinare l'elemento (riportarlo nella lista attiva) — operazione riservata ad amministratori.
- Eliminare definitivamente con motivazione obbligatoria — azione irreversibile, riservata ad amministratori, tracciata nell'audit log.
Azioni massive (bulk)
È possibile selezionare più elementi con le checkbox della prima colonna. Appare una barra inferiore con le azioni disponibili: Attiva, Disattiva, Soft-delete. Voci listino con audit trail separato. La risposta indica N operazioni riuscite / M fallite; i dettagli delle fallite compaiono nella console browser (F12).
Storico modifiche (audit log)
L'icona history nelle azioni di riga apre un modal con la storia completa delle modifiche: data, campo, valore precedente, valore nuovo, operatore, eventuale motivazione. I record di audit non sono modificabili né eliminabili via UI. Conservazione: indefinita (art. 2220 c.c. — 10 anni minimo).
Mascheramento dati sensibili (GDPR art. 32)
Se i campi modificati contengono dati sensibili (IBAN, Codice Fiscale, Partita IVA, password/token), l'audit log salva il valore mascherato anziché in chiaro:
| Campo | Esempio originale | Nel log |
|---|---|---|
| IBAN | IT60X0542811101000000123456 | IT60****3456 |
| Codice Fiscale (PF) | RSSMRA80A01H501Z | RSSMRA****501Z |
| Partita IVA | 12345678901 | 123****901 |
| Password / token | (qualsiasi) | ***REDACTED*** |
Timeline aggregata
Per ciascun elemento è disponibile una vista Timeline che aggrega in ordine cronologico audit, eventi del ciclo di vita ed eventuali entità collegate (es. documenti, movimenti, storni).
RBAC uniforme
Tutte le azioni distruttive o massive (soft-delete, ripristino, eliminazione definitiva, bulk, storno) richiedono il ruolo ADMIN o superiore. Gli operatori possono continuare a creare / modificare / consultare secondo le proprie abilitazioni.