Come funzionano i sistemi ERP: moduli, flusso di dati e il registro sottostante
Una transazione seguita attraverso ogni modulo di un ERP, con le relative registrazioni contabili, e il motivo per cui il libro mastro è il registro da cui tutto il resto trae origine.
Un sistema ERP funziona memorizzando ogni evento aziendale una sola volta, in un unico database, e consentendo a ciascun modulo di leggere e scrivere su quel record condiviso. Un ordine spedito corrisponde allo stesso record, indipendentemente dal fatto che a consultarlo sia il magazzino, il team commerciale o il contabile. Il modulo che garantisce l'affidabilità dell'intero sistema è il libro mastro (general ledger): ogni evento di natura economica si conclude lì sotto forma di una registrazione contabile bilanciata, e ogni report viene derivato da tali registrazioni.
Questo articolo segue una singola vendita attraverso i moduli, mostra le registrazioni contabili prodotte e spiega perché l'integrazione con un ERP riguarda gli eventi e il libro mastro anziché le schermate.
Il database condiviso
Prima dei sistemi ERP, ogni dipartimento gestiva il proprio programma. Le giacenze vivevano in un sistema di magazzino, le fatture in un sistema di fatturazione e la contabilità in un pacchetto amministrativo. La chiusura mensile veniva trascorsa a riconciliare i tre sistemi. L'articolo Che cos'è il software ERP spiega la categoria; il meccanismo che la fa funzionare è un modello dati unificato in cui:
- un record di un partner viene utilizzato allo stesso modo da vendite, acquisti e contabilità,
- un record di un articolo contiene la quantità in magazzino, gli strati di costo FIFO, il prezzo di vendita e il conto dei ricavi,
- un documento (ordine, fattura, nota di credito, acquisto, ordine di produzione) fa riferimento a partner e articoli producendo esattamente un set di registrazioni contabili,
- una registrazione contabile fa riferimento al documento che l'ha generata, in modo che ogni cifra in un report possa essere ricondotta alla sua origine.
Quando i dati sono condivisi, non c'è nulla da riconciliare tra i vari moduli. Ciò che resta da riconciliare è il mondo esterno: gli estratti conto bancari e le dichiarazioni fiscali.
La mappa dei moduli
| Modulo | Scrive | Legge |
|---|---|---|
| Vendite | Ordini, fatture, note di credito | Partner, articoli, prezzi, regole IVA |
| Acquisti | Ordini di acquisto, fatture fornitori | Partner, articoli, conti di costo |
| Magazzino | Movimenti di magazzino, strati di costo FIFO, inventari fisici | Articoli, magazzini |
| Produzione | Ordini di produzione, consumo di componenti, prodotti finiti | Distinte base, magazzino |
| Banca | Transazioni importate, abbinamenti di pagamento | Fatture aperte, conti bancari |
| Paghe | Elaborazione paghe, contributi, denunce | Dipendenti, contratti, tabelle fiscali |
| Cespiti | Registro cespiti, piani di ammortamento | Categorie di cespiti, vite utili |
| Fisco | Dichiarazioni IVA, elenchi clienti/fornitori UE, Intrastat, fatture elettroniche | Documenti emessi e registrati |
| Libro mastro | Registrazioni contabili, chiusure di periodo | Tutto quanto sopra |
| Reportistica | Nulla | Il libro mastro e i sottoconti |
Ogni riga, tranne le ultime due, si conclude con una scrittura sul libro mastro. Questa è la regola progettuale che distingue un ERP da un insieme di strumenti interconnessi.
Un flusso di dati operativo
L'esempio seguente utilizza gli endpoint di Nordlet e i conti predefiniti del piano dei conti lituano fornito di serie. Qualsiasi ERP esegue gli stessi passaggi, sebbene i codici dei conti e i nomi degli endpoint varino.
1. Ordine
Un canale e-commerce inserisce un ordine tramite POST /v1/ecommerce/orders/create: un partner, righe con articoli e quantità, e un Paese di spedizione. Nulla viene ancora registrato nel libro mastro. Un ordine è un impegno, non una transazione.
2. Riserva di magazzino
L'endpoint orders/reserve accantona le quantità affinché un secondo ordine non possa vendere le stesse unità. Ancora nessuna registrazione contabile: le scorte riservate sono ancora di proprietà dell'azienda.
3. Evasione
orders/fulfill registra l'uscita delle merci dal magazzino. In un'unica transazione di database si verificano due cose:
- Le scorte vengono scaricate al costo FIFO: vengono utilizzati per primi i livelli di costo più vecchi per ciascun articolo, secondo il metodo descritto nella voce del glossario Valutazione delle scorte FIFO.
- Il costo di tali unità viene registrato come scrittura contabile, in dare al costo del venduto e in avere al magazzino.
| Conto | Dare | Avere |
|---|---|---|
| 6000 Costo del venduto | 600.00 | |
| 2040 Magazzino | 600.00 |
L'evasione crea inoltre una bozza di fattura per l'ordine e determina il trattamento IVA in base al Paese di destinazione utilizzando il motore IVA UE.
4. Emissione della fattura
L'emissione della fattura è il momento in cui i ricavi vengono riconosciuti per una vendita puntuale (point-in-time). Il documento riceve il suo numero progressivo senza salti e viene registrata un'unica scrittura bilanciata: il lordo nei crediti commerciali, l'IVA nel conto IVA a debito e il netto nel conto ricavi.
Per una vendita imponibile di 1.000 € con IVA lituana al 21%:
| Conto | Dare | Avere |
|---|---|---|
| 2410 Crediti verso clienti | 1.210.00 | |
| 5000 Ricavi da merci | 1.000.00 | |
| 4492 IVA a debito | 210.00 |
Se una riga prevede un metodo di competenza diverso da quello puntuale, l'importo netto confluisce invece nei ricavi anticipati (deferred income) e il motore di riconoscimento dei ricavi provvede a rilasciarlo secondo la pianificazione temporale. La registrazione di crediti e IVA rimane invariata.
La fattura può ora essere trasmessa sotto forma di PDF, di fattura elettronica Peppol BIS 3.0 o nel formato di fatturazione elettronica nazionale richiesto dal Paese dell'azienda.
5. Riconciliazione bancaria
Due settimane dopo arrivano 1.210 €. Il movimento arriva tramite un flusso bancario PSD2 o l'importazione di un estratto conto camt.053. Il modulo bancario assegna un punteggio alle fatture candidate in base all'importo, alla causale di pagamento, al nome della controparte e all'IBAN, e bank/transactions/match registra il saldo:
| Conto | Dare | Avere |
|---|---|---|
| 2710 Banca | 1.210.00 | |
| 2410 Crediti verso clienti | 1.210.00 |
Lo stato della fattura passa a pagato e viene emesso un webhook sale_invoice.paid. La voce relativa alla riconciliazione dei pagamenti spiega la logica di abbinamento in modo più dettagliato. Un pagamento in un'altra valuta contabilizza la differenza di cambio realizzata sul conto utili o perdite nello stesso passaggio.
6. Dichiarazione IVA
Alla fine del mese non è necessario reinserire alcun dato. La dichiarazione IVA viene calcolata a partire dai documenti emessi e registrati: declarations/eu/vat-return/compute per la dichiarazione nazionale (FR0600 in Lituania), declarations/eu/oss/compute per le vendite transfrontaliere a consumatori nell'ambito del regime del OSS (Union scheme). La vendita di cui sopra confluisce nel campo delle aliquote ordinarie della dichiarazione interna poiché il regime IVA applicato è domestic.
7. Chiusura del periodo
Una volta presentata la dichiarazione, ledger/periods/lock chiude il mese. Da quel momento in poi, qualsiasi registrazione datata in quel periodo, inclusa una riconciliazione bancaria tardiva o una chiamata API ritentata, viene rifiutata con un errore HTTP 409. Il blocco attiva inoltre il riconoscimento di eventuali ricavi differiti di competenza fino alla fine del periodo, impedendo così che un mese si chiuda lasciando ricavi maturati nel conto passività.
Perché il libro mastro è il sistema di riferimento ufficiale
Ciascuno dei moduli sopra citati gestisce un sottoconto (subledger): i crediti per cliente, i debiti per fornitore, le scorte per articolo, i cespiti per bene. Il libro mastro (general ledger) custodisce i totali con cui tali sottoconti devono necessariamente concordare. L'articolo Sottoconti e libro mastro approfondisce la relazione tra essi; l'aspetto pratico è che un report generato dal libro mastro e un report generato da un sottoconto devono restituire la medesima cifra, e un ERP lo garantisce producendo entrambi a partire dalle stesse registrazioni contabili.
Tre proprietà rendono il libro mastro affidabile come registro ufficiale:
- Il bilanciamento è obbligatorio. In Nordlet il database rifiuta qualsiasi registrazione in cui i dati in dare non siano uguali a quelli in avere. Un bug in un modulo non può generare una scrittura sbilanciata.
- La cronologia è di sola scrittura (append-only). Una registrazione contabilizzata non viene mai modificata. Un errore viene corretto tramite uno storno e una nuova scrittura, entrambe collegate a quella originaria. La voce sul registro immutabile spiega perché i revisori esigono questo comportamento.
- I periodi vengono chiusi. Un mese bloccato non può essere modificato, pertanto le cifre dichiarate sono quelle che rimangono fisse nel sistema.
Integrazione: eventi e idempotenza, non flussi batch notturni
Le vecchie integrazioni ERP si basavano su file scambiati di notte: esportazione degli ordini, importazione degli stessi e controllo del registro degli errori la mattina seguente. I moderni ERP espongono un'API, e l'integrazione diventa una questione di due discipline ben precise.
Eventi in uscita (Events out). Quando qualcosa cambia, l'ERP invia una notifica. Nordlet scrive ogni evento webhook in una coda di output (outbox) all'interno della stessa transazione di database della modifica, in modo che un documento oggetto di rollback non emetta mai alcun evento e nessun evento vada perduto. Le consegne sono firmate con HMAC-SHA256 e ripetute con backoff esponenziale. Il vostro sistema reagisce all'evento sale_invoice.paid anziché chiedere ogni cinque minuti se qualcosa è stato pagato.
Tentativi sicuri in entrata (Safe retries in). La rete può subire interruzioni e una richiesta ripetuta non deve creare una seconda fattura. Nordlet accetta un header Idempotency-Key su ogni chiamata di mutazione: la stessa chiave con lo stesso payload restituisce la risposta memorizzata, la stessa chiave con un payload differente viene rifiutata e le chiavi scadono dopo 24 ore. La voce del glossario sull'idempotenza e le convenzioni API descrivono il comportamento esatto.
Poiché ogni operazione consiste in una chiamata POST /v1/{module}/{resource}/{action} e l'applicazione utilizza i medesimi endpoint, un'integrazione può eseguire l'intero flusso descritto in precedenza senza che nessuno debba aprire alcuna schermata. La guida Come integrare un'API di contabilità cloud in una piattaforma SaaS illustra passo dopo passo la realizzazione di un'integrazione di questo tipo.
Cosa legge la reportistica
I report non memorizzano cifre. Sono interrogazioni (query) eseguite sul libro mastro e sui sottoconti a una specifica data:
- Bilancio di verifica, stato patrimoniale, conto economico e rendiconto finanziario leggono le registrazioni contabili aggregate per conto e periodo.
- Anzianità dei saldi (aging) legge i crediti e i debiti aperti suddivisi per data di scadenza.
- Giacenza e movimentazione di magazzino leggono il sottoconto inventariale e i relativi strati FIFO.
- Riepilogo IVA legge le righe IVA dei documenti emessi e registrati.
- Report per centri di costo leggono la dimensione del centro di costo associata a ciascuna riga contabile.
In Nordlet un report viene generato in background in formato XLSX, PDF o JSON, e un webhook segnala quando il file è pronto. Le cifre di gruppo derivano dai processi di consolidamento, che combinano i libri mastri di diverse società applicando le quote di partecipazione e la conversione valutaria.
Dove si registrano criticità nella pratica
La maggior parte dei problemi legati agli ERP deriva da violazioni del principio del record condiviso piuttosto che da difetti software. I casi più comuni includono:
- Un foglio di calcolo parallelo utilizzato per gestire attività che l'ERP "non sa fare", il quale finisce inevitabilmente per divergere dai dati contabili ufficiali.
- Registrazioni contabili manuali impiegate per correggere l'output di un modulo anziché correggere il documento d'origine, compromettendo la tracciabilità dal report alla fonte.
- Integrazioni che scrivono saldi anziché documenti, facendo sì che il libro mastro contenga totali che nessuno sa spiegare.
- Periodi contabili aperti lasciati sbloccati per mesi, causando lo scostamento delle cifre dichiarate nel trimestre precedente.
L'articolo Perché i progetti di implementazione ERP falliscono descrive come si radicano queste abitudini durante il roll-out, mentre Tempistiche realistiche per l'implementazione di un ERP mostra in quale fase del progetto tendono solitamente a manifestarsi.
FAQ
Qual è il cuore di un sistema ERP?
Il libro mastro (general ledger) e il modello dati condiviso che lo circonda. Ciascun modulo scrive documenti che generano registrazioni contabili bilanciate, e ogni report viene derivato da tali registrazioni.
Come fluiscono i dati all'interno di un ERP?
Un evento viene registrato una sola volta sotto forma di documento (ordine, fattura, movimento, elaborazione paghe). Il documento produce registrazioni contabili nel libro mastro e movimenti nel sottoconto di pertinenza. I report e le dichiarazioni fiscali vengono calcolati a partire da tali registrazioni. Nessun dato viene copiato tra i moduli.
Qual è la differenza tra un modulo e un'integrazione?
Un modulo scrive sullo stesso database e sullo stesso libro mastro del resto del sistema. Un'integrazione è un programma esterno che effettua chiamate alle API dell'ERP. Con un ERP "API-first" la distinzione è minima, poiché l'integrazione utilizza gli stessi endpoint impiegati dai moduli nativi.
Un ERP registra le scritture contabili in modo automatico?
Sì. L'emissione di una fattura, l'evasione di un ordine, la riconciliazione di un pagamento, l'elaborazione delle paghe o l'ammortamento di un cespite producono ciascuno la propria registrazione contabile senza che un operatore debba inserire manualmente dare e avere. I conti utilizzati derivano da regole di contabilizzazione configurabili per singola azienda.
Perché i sistemi ERP bloccano i periodi contabili?
Affinché le cifre dichiarate o presentate per un determinato periodo non possano subire modifiche successive. Un periodo bloccato rifiuta le nuove registrazioni, proteggendo così la pista di controllo (audit trail) e obbligando a effettuare eventuali correzioni nel periodo corrente, dove risultano visibili.