Prodotto installabileSingle-tenant · nessun dato condivisoAnalisi marginalità e scoring
Il margine vero di ogni cliente, di ogni voce, di ogni fornitore.
AYXZA Score ricostruisce il conto economico di un rivenditore alla granularità della
singola riga di contratto: ricavi, costi di acquisto puntuali, quote di costi a forfait ripartite per driver,
carico di assistenza, costo finanziario del circolante, oneri da insoluto. Sopra questi numeri costruisce punteggi
nominati, sempre scomponibili nei propri componenti. Installato in casa del rivenditore.
↓ Il problema · § 01
La cella è l'unità del sistema · contratto × cliente × voce × periodo
01
Il problema
Fatturato ≠ margine
Il rivenditore conosce il fatturato per cliente. Quasi mai il margine.
Contratti a forfait che coprono un insieme di licenze, altre voci a sconto, assistenza compresa
nel canone, installazioni in presenza e da remoto, prodotti di terzi, condizioni di incasso diverse per ogni
cliente. Il costo reale di servire un cliente è disperso tra contratti fornitore, ticket, scadenzari e insoluti:
esiste, ma non è in nessun posto.
Il risultato è che le decisioni che contano — rinnovo, aumento, disdetta, rinegoziazione col
fornitore — si prendono sul fatturato, l'unico numero disponibile per cliente. AYXZA Score
riporta tutte le componenti su un'unica base di calcolo e le tiene distinte fino all'ultima vista.
Fig. 01 · Le tre domande a cui il prodotto risponde in modo difendibileSchema
Prodotto neutro
Il caso d'origine è un rivenditore di software gestionale con contratti misti forfait e sconto.
È il caso di validazione, non il perimetro: nessun concetto del caso specifico esiste nel sistema,
tutto emerge dalla configurazione del catalogo.
Ciò che non fa
Nessuna fatturazione, nessuna contabilità, nessuna gestione documentale: il sistema
legge, non emette. Nessuna gestione operativa dei ticket: l'assistenza entra come misura di carico
già avvenuto. Nessun archivio centrale fra installazioni.
02
La cella
Contratto × cliente × voce × periodo
Un solo insieme di celle. Ogni vista è una somma su quell'insieme: due viste non possono divergere.
Ogni importo prodotto dal calcolo atterra su una cella identificata da contratto, cliente, voce e
periodo: la granularità minima non si degrada mai. La tabella dei risultati è stretta — una riga
per importo, con i tre assi di natura come dati della riga. Le quantità vivono in una struttura compagna, con la
propria unità di misura, e non si sommano mai con gli importi.
Fig. 02 · Il registro delle componenti è chiuso: si estende per decisione, mai per convenzioneSchema
1
insieme di celle
tutte le viste sono aggregazioni: per contratto, cliente, voce, famiglia, fornitore, gruppo, periodo
3
assi di natura
componente, origine, fonte: dati della riga, non colonne separate
7
componenti
registro chiuso, esteso solo per decisione dichiarata
0
arrotondamenti persi
ogni ripartizione avviene in centesimi interi, per costruzione
03
Dal ricavo al margine
Un periodo · valori illustrativi
Il margine non è un numero: è una discesa di cui si vede ogni gradino.
La stessa scomposizione vale per il totale, per il singolo cliente, per la singola voce.
Le componenti tratteggiate sono allocate: nascono da un totale ripartito con un driver
dichiarato, e restano riconoscibili in ogni vista. Il costo finanziario resta una componente separata, mai
fusa nel margine operativo.
Fig. 03 · Un periodo, tre clienti. Valori illustrativi, non dati realiGrafico · euro
Diretto e allocato
La somma dei margini per cliente coincide sempre con il margine complessivo del
rivenditore. Ciò che cambia fra i clienti è quanta parte del loro costo è convenzionale: è un dato
leggibile, non una nota a piè di pagina.
Composizione del costo
Su questo periodo: 15.165 di costo diretto contro 6.990 di costo allocato.
Il rapporto è esso stesso un indicatore: dice quanto del giudizio dipende da una convenzione.
Simulazioni
Uno scenario è un livello di modifiche ipotetiche — adeguamento prezzi, disdetta,
nuovo contratto — applicato sopra i dati reali e ricalcolato dallo stesso identico motore.
Non esiste un secondo motore per le ipotesi.
04
Forfait, driver, quadratura
Ripartizione fino alla voce
Il forfait è un costo senza cliente. L'allocazione gli dà un cliente senza nascondere la convenzione.
Un contratto fornitore porta due nature di costo. Le voci puntuali hanno un costo per unità
(listino meno sconto) e raggiungono la cella per moltiplicazione: nessuna convenzione. Le componenti a forfait
sono un importo unico riferito a un insieme di voci coperte: raggiungono la cella per ripartizione, secondo un
driver dichiarato per ciascuna componente e fino al livello della singola voce, non solo del cliente.
Fig. 04 · Due percorsi, una sola cella. Il confronto fra driver alternativi sugli stessi dati è una funzione del sistemaSchema
La quadratura non è un controllo: è il metodo
Ogni ripartizione su più destinazioni avviene in centesimi interi con il
metodo del massimo resto: quote intere per difetto, resto distribuito alle frazioni decrescenti, pareggi risolti
per ordine lessicografico della chiave di cella. La somma delle quote coincide con il totale per costruzione,
non per verifica a posteriori. La stessa politica governa il riproporzionamento delle validità parziali: una riga
che cambia versione a metà periodo non produce doppi conteggi né centesimi persi.
Fig. 05 · Il centesimo non si perde e non si duplica: ha una regola, ed è deterministicaSchema
Assistenza
Stessa meccanica. L'evento porta cliente, periodo, tipo di intervento, conteggio
obbligatorio e ore facoltative: con le ore si applica il costo orario ed è reale, senza ore si applica
il costo standard del tipo ed è convenzionale. L'attribuzione alle voci usa un driver configurabile,
predefinito sui ricavi, e avviene dentro il singolo cliente.
Prezzo a corpo
Il ricavo si alloca come il costo. Se il contratto è a corpo, le righe con prezzo noto
sono bloccate e il residuo si ripartisce. Prezzi bloccati che eccedono il totale pattuito sono un
errore segnalato, mai assorbito.
Il motore riferisce
Componente a forfait senza celle nel perimetro coperto, quota che risulterebbe negativa,
riga fuori catalogo incompleta: il motore non solleva eccezioni e non corregge in silenzio. Riferisce,
e la segnalazione resta accanto ai numeri del periodo.
05
La catena di calcolo
Puro · deterministico
Stesso ingresso, stesso risultato. Byte per byte, impronte comprese.
Il motore riceve i dati di partenza e un livello facoltativo di modifiche ipotetiche, e restituisce
un insieme di celle. Non scrive: la persistenza è decisione di chi lo invoca, e avviene per riscrittura atomica del
periodo. Nessuna dipendenza da orologio, ordine di lettura o stato esterno.
Fig. 06 · Sequenza per periodo. Persistenza e lettura appartengono ad altri attori: il motore si ferma all'esitoSchema
Perché sette firme
Un'unica firma direbbe soltanto «qualcosa è cambiato». Sette dicono che cosa:
la verifica indica la famiglia divergente, e la decisione di ricalcolare resta a chi legge.
Fuori dall'impronta
La politica di prevalenza governa l'ingresso dei dati, non il calcolo: non entra
nell'impronta. Ciò che è entrato, invece, è già dentro le famiglie.
Impronte degli input · sette famiglie
Ogni periodo calcolato conserva, accanto alle celle, la data di calcolo e una firma per ciascuna
famiglia di dati che il calcolo ha visto. Le righe selezionate sono serializzate in forma canonica e sottoposte ad
hash: l'impronta descrive ciò che il calcolo ha visto, per costruzione, non una fotografia
parallela che potrebbe divergere. Quando un input cambia, i periodi che ne dipendono risultano
non aggiornati: restano leggibili, dichiarati come tali.
Famiglia
Contenuto considerato
anagrafica
Soggetti e condizioni di pagamento per lato: sono l'ingresso del costo finanziario
catalogo
Coperture, listini predefiniti, pesi dei driver, criteri di riproporzionamento
contratti
Versioni valide nel periodo su entrambi i lati, con prezzi, quantità e modalità di prezzo
assistenza
Eventi del periodo e tipi di intervento con i relativi costi standard
insoluti
Posizioni riferite al periodo, con stato e costi accessori
configurazione
Driver, tasso finanziario, costi orari, parametri di calcolo
funzioni attive
Quali componenti erano attive al momento del calcolo
Versioni, non sovrascritture
Contratti e listini vivono a versioni con validità. Il ricalcolo di un periodo passato seleziona la versione
valida allora e restituisce il risultato di allora. La data di creazione del record,
accanto alla validità, distingue una correzione retroattiva da un difetto di calcolo.
06
Le viste
Aggregazioni dello stesso insieme
Nessuna vista calcola qualcosa di proprio. Somma, e dichiara che cosa somma.
Fig. 07 · Valori illustrativiGrafico · euro
Aggregazioni ammesse
Per contratto, per cliente, per voce, per famiglia o tag, per fornitore attraverso la
copertura, per gruppo di soggetti, per periodo, e ogni combinazione. Il margine per contratto — la
vista utile al rinnovo — è una di queste, non una funzione a parte.
Dimensioni proprie
Le classificazioni dei soggetti le definisce l'utente: settore, zona, canale, ciò che serve.
Il prodotto non impone una tassonomia, la riceve.
Il parco clienti su due assi
Fig. 08 · Nessuna soglia imposta dal sistema: i quadranti li dichiara chi legge. Valori illustrativiGrafico
07
Lo scoring
Nominato · spiegabile
Un punteggio che non si scompone non è una misura: è un'opinione.
Lo scoring non è precostituito. Si costruisce: si sceglie il soggetto (cliente o fornitore), si
scelgono i parametri, si dichiara per ciascuno una regola di normalizzazione su scala 0–100 — minimo e massimo,
percentili sul parco, scaglioni — e un peso. I punteggi nominati convivono: redditività, rischio, carico, o
qualunque altra domanda il rivenditore voglia porre in modo ripetibile.
Ogni parametro dichiara la propria provenienza: calcolato dal motore,
derivato da una formula libera su altri parametri, manuale per
le valutazioni soggettive. Dal punteggio complessivo si scende sempre al contributo di ogni componente, fino al
valore grezzo del parametro e alla cella che lo ha prodotto.
Fig. 09 · Il punteggio è il totale della colonna di destra. Valori illustrativiGrafico
Scala assoluta o relativa
Ogni componente dichiara la propria scala. Le assolute si invalidano solo per il soggetto
toccato; le relative, basate su percentili, invalidano i punteggi del periodo per tutti: se cambia il
parco, cambia la posizione di ciascuno. Il punteggio complessivo eredita la natura più debole delle sue
componenti, e conserva i riferimenti di normalizzazione usati.
Parametri derivati
Una formula libera su altri parametri, definita una volta e riusabile in più punteggi:
ore per mille euro di fatturato, margine per posto coperto, insoluto sul parco. Sono parametri a tutti gli
effetti, con provenienza dichiarata.
Funzioni disattivabili
Non tutti i rivenditori hanno gli stessi dati. Alcune componenti si disattivano in
configurazione: la disattivazione esclude dal calcolo, conserva i dati inseriti, rimuove i parametri
dal costruttore ed entra nell'impronta. È impedita finché esistono punteggi che ne dipendono.
08
Ingresso dei dati
File · manuale · connettori
Qualunque gestionale può alimentare il prodotto. Nessun gestionale è dentro il prodotto.
Ogni canale d'ingresso è un'entità dichiarata, con il proprio tracciato e la propria politica.
I connettori sono adattatori esterni: traducono e spingono verso lo stesso endpoint di ricezione dell'import,
quindi passano dalla stessa validazione. Un adattatore fatto male non può corrompere il calcolo.
Fig. 10 · L'endpoint di ricezione è unico: import e connettori attraversano la stessa validazioneSchema
Configurazione nominata
L'intera configurazione — catalogo, driver, parametri di calcolo, definizioni delle sorgenti, tracciati standard —
è uno snapshot con nome, versione e data. Si prepara prima dell'installazione, si carica al
primo avvio, si riesporta dopo un aggiustamento. Una sola è attiva: il confronto fra configurazioni si fa con gli
scenari, mai facendo convivere mondi paralleli sugli stessi periodi.
09
Verifiche
In esercizio, non in collaudo
Le quadrature non sono un collaudo che finisce. Sono una pagina del prodotto.
Alcune differenze devono essere nulle per costruzione: se non lo sono, c'è un difetto. Altre sono
misure da osservare, non errori: il sistema le mostra e non impone soglie. La distinzione è dichiarata su ogni
riga, perché un cruscotto che allarma su tutto non viene più letto.
Verifica
Natura attesa
Che cosa dice
Somma delle quote
differenza nulla
Le quote allocate coincidono con il totale ripartito. Vincolo strutturale del metodo di arrotondamento.
Ricavo a corpo
differenza nulla
La somma delle righe di un contratto a corpo coincide con il totale pattuito.
Ricalcolo indipendente
differenza nulla
Un secondo percorso, che non passa dal motore, ricostruisce gli stessi totali dai dati di partenza.
Periodi non aggiornati
misura
Periodi la cui impronta non corrisponde più ai dati di partenza. Restano leggibili, dichiarati come tali.
Confronto delle impronte
azione
Ricalcolo in memoria e confronto famiglia per famiglia. Non scrive nulla: dice quale famiglia è cambiata.
Valori protetti
misura
Valori con protezione manuale attiva e divergenze rilevate negli ultimi caricamenti, per campo.
Sovrascritture registrate
misura
Quante volte un caricamento ha sostituito un valore inserito a mano. È la misura dell'appropriatezza della politica.
Corrispondenze non risolte
coda
Codici esterni senza entità: sono il motivo per cui delle righe attendono, e si risolvono senza ripetere il caricamento.
Segnalazioni del periodo
coda
Ciò che il motore ha riferito calcolando, leggibile accanto ai numeri che ha prodotto.
10
Fondamenta
Installazione singola
1
istanza per rivenditore
i dati non escono di casa
2
database, stesso codice
PostgreSQL o SQLite, schema nel sottoinsieme comune
3
ruoli utente
amministrazione, analisi, sola lettura · audit dal primo giorno
0
dati condivisi
nessun archivio centrale, nessun confronto fra installazioni
Strato
Scelta
CALCOLO
Pacchetto puro e isolato: nessun accesso al database, nessuna dipendenza dall'ambiente. Importi in centesimi interi, tassi in decimale esatto, mai virgola mobile.
DATI
SQL esplicito, senza mappatore relazionale: lo schema è l'unica fonte, la scrittura del periodo è atomica.
APPLICAZIONE
Python · FastAPI · pagine generate dal server, senza dipendenze di rete a runtime.
DISTRIBUZIONE
Container singolo, nessun servizio esterno. Installazione desktop «chiavi in mano» come traguardo finale.
USCITA
Lettura del cubo e dei punteggi già calcolati, con data di calcolo e stato: il sistema espone numeri congelati, non calcola su richiesta esterna.
Nessuna componente IA
Scelta dichiarata. Un margine che dipende da un modello statistico non è difendibile
davanti a un fornitore in rinegoziazione. Il riconoscimento delle intestazioni dei file resta un
acceleratore, mai una strategia.
Determinismo verificabile
Il pacchetto di calcolo è verificato contro un oracolo indipendente, costruito a parte
e non derivato dal codice. Se il motore e l'oracolo divergono, la divergenza è dichiarata, non
assorbita.
«Un numero che non dichiara la propria natura non è un dato: è un'opinione impaginata.»
AYXZA Score · principio di progetto
Originediretto o allocato, su ricavi e su costi
Fontereale o convenzionale, dichiarata sulla cella
Provenienzacalcolato, derivato o manuale, nei punteggi
Conseguenzaogni punteggio si scompone fino alla cella che lo ha prodotto