🧾 Preventivi
Tutti i preventivi generati dagli utenti. dettaglio/modifica apre il preventivo esatto (tutte le voci, come nel Word/PDF) per correggerlo; invia lo manda al cliente via email.
Caricamento listini
Dopo l'upload la card si libera subito: l'elaborazione (OCR/prezzi) continua sul worker in background e puoi caricare altri file. L'indicizzazione parte da sola a coda svuotata (reindex serializzato).
I file oltre 14MB vengono caricati direttamente nello storage (con avanzamento) ed elaborati a pagine — nessun limite di dimensione. Richiede la CORS del bucket impostata (una tantum, vedi runbook).
Stato dati & copertura listini
Premi per verificare quali listini (interni e competitor) sono caricati e indicizzati.
Stato indicizzazione KB
Stato per-file dell'ultimo indexing job (🟢 indicizzato · ⏳ in attesa · ❓ sconosciuto). Il reindex è non distruttivo e non sovrappone i job.
Diagnostica sistema
Stato di microservizio, licenze e agente AI.
Playground agente AI
Interroga l'agente (es. "equivalente Marazzi Treverkhome") senza generare un preventivo. Utile per validare la KB dopo un caricamento listino.
🧩 Settori (verticali)
Un settore = come il preventivatore capisce i prodotti di un mercato: attributi (finitura, tensione…), sinonimi, prompt dell'agente. Il settore bagno è Villa. Un nuovo settore si crea qui, senza toccare codice — poi lo si assegna a un tenant.
📊 Consumi (TWIZA Licenses)
Token e costo reali del tenant dal ledger metered di TWIZA Licenses. Si popola quando il provisioning gateway è attivo (vedi RUNBOOK_provisioning.md); prima è vuoto.
Impostazioni Villa
Personalizzazioni parametrizzabili (niente hardcode): contatti della modale limite, limite di default, brand/oggetto email, logo filigrana.
Una riga per tipo, formato valore | etichetta (o solo etichetta). Adatta i tipi al tuo settore. La prima riga è di solito l'auto-rilevamento. Es. bagno: progetto | Progetto architetto; elettronica: datasheet | Scheda tecnica.
Logo filigrana (export Word/PDF)
Carica il logo (PNG/JPG/WebP): sostituisce assets/villa-logo.png, usato come filigrana negli export. Se non caricato, gli export funzionano senza filigrana.
Email di invio preventivo (modificabile e brandizzabile)
HTML dell'email che riceve il cliente. Segnaposto: {{logo}} {{brand}} {{brand_color}} {{client_name}} {{quote_url}} (link al PDF) {{total}} {{contact_email}} {{contact_url}}. {{quote_table}} inserisce il preventivo inline (opzionale — di default si manda il link al PDF).
Limiti preventivi per utente
Un utente privato può generare fino al limite indicato (default 3); un professionista è illimitato. Imposta qui il tipo — è legato all'account (login), non aggirabile dal form.
Equivalenze competitor
Mappature competitor → interno (la logica "Coca/Pepsi"). Dataset gestito qui ed esportabile. Nota: il collegamento all'agente/KB è uno step separato lato microservizio.
Prezzi & margini
Prodotti (modifica prezzo)
Cerca per brand o testo per modificare i prezzi.
Regole di pricing (sconti / margini)
Applicate dal Pricing Engine: prezzo × (1−sconto) × (1+margine). La più specifica per brand/categoria/tipo cliente con priorità minore vince.
Condizioni commerciali (sconti fornitore → margini)
Dalle Condizioni commerciali.doc di ogni brand. Costo V&A = prezzo listino × moltiplicatore netto. Vengono compilate da sole quando carichi i doc; qui le correggi.
Adeguamenti listino (es. Alpi +5%)
Adeguamenti percentuali da lettera fornitore (es. Alpi +5% dal 01/04/2026). Si applicano al prezzo base senza riscrivere i listini; attivi dalla decorrenza.
Margini per prodotto
Prezzo listino (con adeguamenti), costo netto V&A (catena sconti) e margine.
Mostra il margine per brand (richiede condizioni commerciali caricate).
Storico listini
Cronologia dei caricamenti listino (brand, data listino, prodotti aggiornati, esito).
Utenti web-app (accesso magic link)
Gli utenti elencati possono accedere alla web-app Quote Generator ricevendo un link via email (nessuna password). Solo le email registrate qui ricevono il link.
La license key lega l'utente alla licenza del suo cliente (presa dal wizard "Nuova licenza" su Licenses). Serve per l'enforcement: se scaduta/assente, l'accesso viene bloccato o avvisato secondo la config.
Import massivo (una riga per utente: email,nome)
Magic link recenti
Registro attività
Caricamenti, indicizzazioni, gestione utenti, magic link, equivalenze.