Riconciliazione dei pagamenti in criptovalute: abbinare le fatture in stablecoin agli ordini

Riconciliazione dei pagamenti in criptovalute: abbinare le fatture in stablecoin agli ordini

Un pagamento con carta arriva nella contabilità attraverso un report dell'acquirer che già indica l'ordine. Un trasferimento in USDC arriva con un indirizzo, un importo e un hash di transazione, e nient'altro. La riconciliazione dei pagamenti in criptovalute funziona quando la fattura riporta il riferimento aziendale, perché il trasferimento non può farlo.

Questa guida è rivolta ai team finanziari e operativi di merchant, PSP ed EMI che accettano stablecoin e regolano in euro. Elenca i campi che ogni record di fattura richiede, come gestire i pagamenti parziali e quelli in una moneta sbagliata, come webhook e API alimentano il registro contabile, e quali norme UE stabiliscono per quanto tempo conservare il tutto.

Riepilogo video, 119 secondi, in inglese.

Momenti chiave

In breve

  • Un trasferimento ERC-20 contiene solo mittente, destinatario e importo. Il riferimento dell'ordine deve risiedere nella fattura, non nel pagamento.
  • Prezzare la fattura in EUR e registrare quell'importo in euro. L'importo in criptovaluta è un dato derivato che si conserva per la traccia di audit.
  • La maggior parte del lavoro riguarda le eccezioni: pagamenti parziali, fatture scadute, la moneta sbagliata. Vanno verificate ogni giorno, non a fine mese.
  • Usa il webhook come trigger, rileggi la fattura tramite ID come fonte di verità e scarica ogni notte l'elenco delle fatture come rete di sicurezza e come fonte della tua esportazione CSV.

Perché la riconciliazione dei pagamenti in criptovalute è più difficile di quella con le carte?#

La riconciliazione dei pagamenti in criptovalute è più difficile perché un trasferimento su blockchain non ha un campo per il numero del tuo ordine. Su Ethereum, lo standard di token ERC-20 (EIP-20) definisce l'evento di trasferimento come `Transfer(address _from, address _to, uint256 _value)`: chi ha inviato, chi ha ricevuto, quanto. Non esistono memo, numero di fattura o nome del cliente.

I pagamenti bancari e con carta sono costruiti in modo opposto. Un bonifico SEPA ha un campo causale che il pagatore compila, e il report di regolamento dell'acquirer elenca ogni transazione con carta in base al riferimento del merchant. Il tuo sistema contabile effettua l'abbinamento su quel riferimento.

Con le stablecoin, altri tre fattori creano ostacoli:

  • L'importo raramente è tondo. Una fattura di 250 EUR prezzata in USDC diventa una cifra come 279,2846 USDC, quindi due fatture di dimensioni simili possono sembrare identiche.
  • Il pagamento non è definitivo subito. Ethereum produce un blocco ogni 12 secondi, ma secondo ethereum.org (pagina aggiornata a ottobre 2026) «ci vogliono circa 15 minuti perché un blocco di Ethereum venga finalizzato». Un trasferimento può essere visibile e non essere ancora valido.
  • I pagatori commettono errori. Inviano un importo insufficiente, inviano due volte, inviano una moneta diversa o pagano dopo la scadenza della fattura.

Quindi il collegamento deve esistere prima che il pagatore paghi: una fattura per ordine, con il tuo ID ordine e un proprio indirizzo di pagamento, in modo che ogni trasferimento in entrata finisca su un record che già sa a cosa si riferisce.

Quali campi deve contenere il record di ogni fattura in criptovalute?#

Ogni fattura richiede un insieme fisso di campi che collegano quattro elementi: l'ordine, il prezzo in euro, il trasferimento on-chain e lo stato finale. Se ne manca uno, qualcuno finisce per abbinare i dati a mano. La tabella seguente usa i nomi dei campi dell'API delle fatture di ItisPay; altri provider usano nomi diversi per le stesse informazioni.

CampoContenutoPerché serve alla contabilità
invoice_idID univoco assegnato dal providerChiave primaria per ogni ricerca e ogni riga del registro
order_idNumero del tuo ordine o contratto, univoco per ordineIl collegamento al tuo ERP, shop o CRM; il riferimento che le carte ti danno gratuitamente
order_nameBreve descrizione dell'ordinePermette a una persona di verificare un'eccezione senza aprire lo shop
fiat_amount, fiat_currencyPrezzo in EURIl dato di ricavo che registri
currency, crypto_amountMoneta fatturata e importo dovutoMostra cosa è stato chiesto al pagatore di inviare
actual_crypto_amount_paidQuanto è effettivamente arrivatoRileva pagamenti insufficienti ed eccedenti
currency_paidMoneta usata, se diversa da quella fatturataSegnala per verifica i pagamenti in una moneta sbagliata
network, addressRete blockchain e indirizzo di pagamentoDimostra dove è stato inviato il denaro; necessario per qualsiasi tracciamento o rimborso
transactions (tx_hash, amount, status)Una riga per ogni trasferimento in entrataUna fattura può ricevere più trasferimenti; ogni hash è la tua prova on-chain
statusnew, pending, completed, expired, cancelled, paid_partialDecide se registrare, spedire, sollecitare o chiudere
created_at, updated_at, expires_atMarcature temporaliLimite di chiusura a fine mese e prova di quando l'ordine è stato pagato

Due di questi campi svolgono gran parte del lavoro. `order_id` è il riferimento che un trasferimento su blockchain non può trasportare, quindi impostalo dal tuo sistema e rendilo univoco per ordine, mai per cliente. La lista `transactions` è importante perché una fattura non sempre viene pagata in un'unica soluzione: ogni trasferimento ha la propria riga con un hash e uno stato, così puoi vedere quali trasferimenti compongono l'importo pagato.

Conserva l'importo in criptovaluta con tutte le sue cifre decimali in una colonna separata. Il tuo libro mastro lavora in centesimi di euro; le colonne crypto sono prove, non valori contabili.

Elenco fatture di ItisPay che mostra, per ogni ordine, numero d'ordine, stato, importo in USDC, somma in EUR, quota ricevuta, rete e indirizzo (dati dimostrativi)

Quale importo in euro va registrato a bilancio?#

Registra a bilancio il prezzo in euro indicato in fattura. Quando la fattura è emessa in EUR, il provider converte l'importo in una cifra in criptovaluta al tasso corrente, e il pagatore invia tale importo. Se il pagamento viene regolato in euro sul tuo conto, la cifra in euro in fattura è il tuo ricavo, mentre l'importo in criptovaluta è un dettaglio tecnico di come il pagamento è arrivato.

Questo è il motivo principale per cui i team che accettano pagamenti in criptovaluta automaticamente con conversione in EUR raramente hanno bisogno di una contabilità delle criptovalute: non c'è alcuna moneta nel bilancio da valutare a fine mese.

Le cose cambiano se si detengono le stablecoin. L'IFRS Interpretations Committee ha stabilito nel giugno 2019 che le detenzioni di criptovalute rientrano nello IAS 2 (rimanenze) quando sono detenute per la vendita nel normale corso dell'attività, e nello IAS 38 (attività immateriali) negli altri casi. La sua definizione di criptovaluta esclude le attività che creano un contratto tra il detentore e un'altra parte. USDC è diverso: Circle dichiara che è «rimborsabile 1:1 in dollari statunitensi» e, dal luglio 2024, Circle emette USDC ed EURC nell'UE come token di moneta elettronica, in base a una licenza di moneta elettronica rilasciata dall'autorità di vigilanza francese ACPR. Come classificare una stablecoin detenuta è una questione da discutere con il revisore. Regolare in EUR al momento della ricezione evita il problema.

Come gestire pagamenti parziali e monete sbagliate?#

Tratta ogni fattura che non è `completed` come un'eccezione con un responsabile e una scadenza. Gran parte dello sforzo di riconciliazione dei pagamenti in criptovaluta si concentra qui; una fattura pagata integralmente si riconcilia da sola.

Ecco cosa significa ogni stato per la finanza, usando gli stati di ItisPay:

StatoCosa è successoCosa fa la finanzaSpedire o rilasciare?
newFattura aperta, nulla ricevutoNulla da registrareNo
pendingUn trasferimento è visibile, non ancora definitivoAttendere il cambio di statoNo
completedPagato integralmenteRegistrare il ricavo al prezzo in EUR, rilasciare l'ordineSì
paid_partialÈ arrivata una parte dell'importoChiedere il saldo, rimborsare o chiudere di comune accordoDipende
expiredIl tempo è scaduto senza pagamento integraleChiudere l'ordine; verificare eventuali trasferimenti tardiviNo
cancelledHai annullato la fatturaNessuna registrazione; riemettere se il cliente vuole ancora pagareNo

Pagamenti parziali#

Un pagamento parziale di solito significa che il wallet o l'exchange del pagatore ha trattenuto una commissione sull'importo, oppure che il pagatore ha digitato l'importo in modo errato. ItisPay registra ogni trasferimento separatamente, quindi un secondo trasferimento può completare la fattura. La fattura ha anche un'impostazione `allowed_error_percent`: una piccola tolleranza, definita per ogni fattura, in modo che un pagamento leggermente inferiore risulti comunque pagato. Impostala una volta come policy, ad esempio a un livello che accetteresti di stornare anche su un bonifico bancario, e non modificarla caso per caso.

Se il saldo non arriva mai, decidi entro un numero fisso di giorni: accetta la differenza e stornala, rimborsa quanto ricevuto, oppure annulla l'ordine. Annota la decisione nella scheda della fattura, così il revisore vede perché un ordine pagato ha dietro meno denaro.

Moneta sbagliata o pagamento tardivo#

Quando un pagatore invia una stablecoin diversa da quella fatturata, il campo `currency_paid` lo indica. Non registrarlo automaticamente: verifica l'importo e il valore in euro, poi accettalo o rimborsalo. Un trasferimento su una fattura scaduta è simile. Il denaro è on-chain, ma il tuo ordine è chiuso, quindi qualcuno deve decidere se riaprire l'ordine o restituire i fondi. Se un ordine viene annullato da parte tua, annulla la fattura tramite API (un aggiornamento di stato), così i tuoi registri la mostrano come chiusa prima che arrivi un eventuale pagamento tardivo.

Come devono alimentare la riconciliazione i webhook e l'API?#

Usa tre livelli: il webhook ti segnala che qualcosa è cambiato, una lettura aggiornata della fattura ti dice qual è la situazione reale, e un'estrazione notturna di tutte le fatture intercetta quanto sfuggito ai primi due.

  1. Ogni fattura può includere un `callback_url`; il provider invia lì gli aggiornamenti di stato. Considera il messaggio un trigger, non una prova.
  2. A ogni webhook, chiama `GET /invoices/{invoice_id}` e agisci in base allo stato e agli importi contenuti in quella risposta. Questo ti protegge da chiamate falsificate o riprodotte verso il tuo endpoint, dato che la chiamata API richiede la tua chiave API.
  3. Rendi il gestore idempotente: lo stesso stato può arrivare due volte. Associa la registrazione contabile a `invoice_id` più lo stato, così una ripetizione non modifica nulla.
  4. Ogni notte, elenca le fatture ordinate per `updated_at`, dalla più recente, e scorri fino alla tua ultima esecuzione; ricontrolla anche ogni fattura ancora `new`, `pending` o `paid_partial`. Confrontale con i tuoi registri. Qualsiasi fattura pagata nei registri del provider ma aperta nei tuoi è un'eccezione.

Per i test, ItisPay dispone di un endpoint che simula un cambio di stato per una fattura, e di uno che rinvia l'ultimo webhook tramite `invoice_id` o `order_id`. Usa il reinvio quando il tuo server era non disponibile. I team che instradano più metodi di pagamento attraverso un unico livello di orchestrazione dei pagamenti applicano lo stesso schema a ogni canale.

Cinque passaggi che abbinano un pagamento in stablecoin a un ordine: fattura con ID ordine, trasferimento on-chain, webhook, rilettura tramite ID fattura, riga contabile in EUR

Come si costruisce un export CSV per la contabilità?#

Costruisci l'export a partire dall'API dell'elenco delle fatture, con una riga per fattura e una riga per ogni trasferimento. In ItisPay, `GET /invoices` filtra per stato, moneta e data di creazione, ordina per data o importo e restituisce fino a 100 fatture per pagina insieme al numero di pagine. Un piccolo script può scorrere le pagine di un giorno o di un mese e scrivere le colonne seguendo la tabella dei campi sopra.

Due file funzionano meglio di uno:

  • `invoices.csv`: invoice_id, order_id, fiat_amount, fiat_currency, currency, crypto_amount, actual_crypto_amount_paid, status, created_at, updated_at. È il file che il contabile importa e abbina alle vendite.
  • `transfers.csv`: invoice_id, tx_hash, amount, currency, transfer status, time. È il file di prova per il revisore.

Importa il file delle fatture nello strumento contabile come faresti con un report di regolamento delle carte: una riga per ordine, in euro, con l'ID ordine come chiave di abbinamento.

Quali norme UE regolano le registrazioni dei pagamenti in cripto-attività?#

Tre norme UE definiscono il contesto. Nessuna di esse fa di un esercente un prestatore di servizi per le cripto-attività (CASP), ma stabiliscono quali dati esistono e per quanto tempo vanno conservati.

  • Regolamento sul trasferimento di fondi (UE) 2023/1113. Dal 30 dicembre 2024, il CASP del pagatore deve assicurarsi che ogni trasferimento sia accompagnato da informazioni sul pagatore e sul beneficiario, come nomi e indirizzi di registro (articolo 14). I dati viaggiano insieme al trasferimento, non al suo interno. Per i trasferimenti superiori a 1.000 EUR da o verso un portafoglio self-hosted, il prestatore sul lato interessato deve valutare se quel portafoglio appartiene al proprio cliente (articoli 14 e 16). Questo è compito del prestatore autorizzato, ed è uno dei motivi per cui un pagamento può restare in verifica.
  • Conservazione delle registrazioni. Ai sensi dell'attuale direttiva AML (UE) 2015/849, articolo 40, i soggetti obbligati conservano le registrazioni delle operazioni per cinque anni dalla fine del rapporto d'affari o dalla data dell'operazione. Il nuovo regolamento AML (UE) 2024/1624 mantiene il periodo di cinque anni (articolo 77) e si applica dal 10 luglio 2027.
  • DAC8, direttiva (UE) 2023/2226. Dal 1° gennaio 2026, i CASP comunicano alle autorità fiscali le operazioni in cripto-attività dei propri utenti. Le tue registrazioni dovrebbero corrispondere a quanto comunica il tuo prestatore.

Se lavori tramite un partner autorizzato, il partner si fa carico degli obblighi del CASP ai sensi del MiCA e di queste norme, come spiegato nella nostra guida alla licenza CASP MiCA. Tu conservi comunque le registrazioni degli ordini e la tua parte della traccia.

Dove la riconciliazione delle cripto-attività richiede ancora una persona?#

L'automazione gestisce il caso del pagamento integrale. Il resto richiede un responsabile designato e una breve policy scritta.

Dove non aiuta

  • I rimborsi sono nuovi trasferimenti in uscita, non storni. Richiedono un pagamento verso un indirizzo o un IBAN, e registrazioni proprie.
  • Un pagatore che invia da un conto presso un exchange non sempre può essere identificato dall'indirizzo mittente. Abbina sempre sulla fattura, mai sul mittente.
  • I pagamenti a una fattura scaduta, i pagamenti duplicati e le monete sbagliate richiedono tutti una decisione umana.
  • Le commissioni di rete e gli arrotondamenti producono piccole differenze. Stabilisci una volta per tutte una tolleranza e mantienila.

Una routine giornaliera di riconciliazione dei pagamenti in cripto-attività in cinque passaggi#

Una breve routine quotidiana rende la chiusura di fine mese una formalità:

  1. Recupera dall'API le fatture create o aggiornate dall'ultima esecuzione e aggiorna i file di fatture e trasferimenti.
  2. Verifica che ogni fattura `completed` abbia un ordine pagato corrispondente nel tuo shop o ERP, e viceversa.
  3. Lavora l'elenco delle eccezioni: `paid_partial`, pagamenti a fatture scadute, monete sbagliate. Chiudi ciascuna con una decisione scritta.
  4. Confronta il regolamento in euro sul tuo conto bancario con la somma delle fatture completate nel periodo. Il regolamento su un IBAN è il punto in cui gli IBAN virtuali aiutano a separare i flussi per linea di business.
  5. Archivia entrambi i file per almeno cinque anni.

Se vuoi accettare stablecoin e ricevere euro senza costruire tu stesso questa infrastruttura, ItisPay fornisce API, fatturazione e dati di riconciliazione: ID di fattura e ordine, hash per ogni trasferimento, stati e webhook. Licenze, KYC e regolamento sul tuo IBAN passano attraverso il nostro partner autorizzato nell'UE come CASP + istituto di pagamento, e la maggior parte dei team passa da KYB alla prima transazione in meno di una settimana.

Questo articolo è solo a scopo informativo e non costituisce consulenza legale o regolamentare.

Domande frequenti

Un cliente può inserire un numero d'ordine in un trasferimento USDC?

Non in un normale trasferimento ERC-20: porta con sé solo mittente, destinatario e importo. Inserisci il numero d'ordine nella fattura e assegna a ogni fattura un proprio indirizzo di pagamento.

Cosa succede se un cliente paga due volte la stessa fattura?

Il secondo trasferimento compare come operazione aggiuntiva sulla fattura, quindi l'importo pagato è superiore al prezzo. Trattalo come un'eccezione di pagamento in eccesso: conferma con il cliente, poi rimborsa l'importo in più come nuovo trasferimento in uscita e registralo sulla stessa fattura.

Dobbiamo registrare l'importo in cripto-attività o quello in euro?

Registra il prezzo in euro dalla fattura quando il pagamento è regolato in euro. Conserva l'importo in cripto-attività, la moneta, la rete e l'hash della transazione in colonne separate come prova. Se invece detieni le stablecoin, concorda prima il trattamento contabile con il tuo revisore.

Per quanto tempo vanno conservate le registrazioni dei pagamenti in cripto-attività?

Pianifica almeno cinque anni. È il periodo che le norme UE antiriciclaggio fissano per le registrazioni delle operazioni conservate dai soggetti obbligati, e la normativa fiscale nazionale può richiedere periodi più lunghi. Conserva insieme il file delle fatture, il file dei trasferimenti e le decisioni sulle eccezioni.

I pagamenti in stablecoin possono confluire in Xero, NetSuite o QuickBooks?

Sì, come file importato. Esporta una riga per ogni fattura pagata in euro con il tuo ID ordine, e importalo come faresti con un report di regolamento delle carte. Gli hash delle transazioni vanno in un file di prove separato.

Nik Perkov

Nik Perkov

Founder, ItisPay

Share this article:

The newsletter for crypto entrepreneurs

Join founders and innovators exploring crypto payments. Get insights, product updates, and stories from businesses building the future of digital commerce.

Unsubscribe anytime. By entering your email, you agree to receive marketing emails from ItisPay. By proceeding, you agree to the Terms and Conditions and Privacy Policy.

Ready to launch stablecoin-first payments under your brand?

Stablecoin-first infrastructure with 1:1 EUR/USD backing. Deploy in 1 week. Built for high-volume PSPs and neobanks with zero volatility risk.