Vai al contenuto
v26.3

TSE & Agenzia delle Entrate

Dal 01.01.2020 in Germania è obbligatorio un dispositivo tecnico di sicurezza (TSE) per i sistemi di cassa (KassenSichV, §146a AO). DiKAS firma tutti i processi rilevanti ai fini di cassa con una TSE certificata secondo l'AEAO relativo al § 146a AO.

Per i verificatori fiscali:Conformità TSE — Documentazione per i verificatori fiscali (descrizione tecnica dettagliata)

Per gli utenti:Guida TSE nel manuale utente (configurazione e utilizzo)

Nessuna consulenza fiscale

Le indicazioni su scadenze, obblighi e imposte di questa pagina sono un supporto orientativo e non sostituiscono la consulenza fiscale. Chiarisca i dettagli legali con il Suo commercialista o con l'ufficio delle imposte.


Che cos'è una TSE?

Una TSE è un modulo di sicurezza certificato che firma digitalmente ogni processo di cassa. L'Agenzia delle Entrate può così verificare se i dati di cassa sono stati manipolati a posteriori.

La TSE in DiKAS

DiKAS firma tutti i processi rilevanti ai fini di cassa — non solo le fatture:

Processo ProcessType Entity Descrizione
Scontrini di cassa Kassenbeleg-V1 Receipt Ogni pagamento (vendita diretta, pagamento al tavolo)
Storni Kassenbeleg-V1 Receipt Ogni storno di scontrino
Ordini Bestellung-V1 OpenBon Ogni ordine nel servizio al tavolo
Ordini cumulativi Bestellung-V1 OpenBon Ordini in batch (firma sullo scontrino capofila)
Apertura turno SonstigerVorgang Exchange Ogni apertura di turno
Chiusura turno SonstigerVorgang Exchange Ogni chiusura di turno
Chiusure giornaliere SonstigerVorgang DayClose Ogni report Z
Spese SonstigerVorgang Spending Ogni prelievo di contanti

Architettura

Flusso di firma

Handler (z.B. ProcessDirectSaleCommand)
    → TseSigningHelper.SignReceiptAsync()
        → BackendConfig laden (TSE-fähig?)
        → ITseService.IsAvailable prüfen
        → ProcessData aufbauen
        → ClientId auflösen (CashRegisterId → BonIdServer → "1")
        → ITseService.SignReceiptAsync() [5s Timeout]
        → TSE-Felder auf Entity speichern
        → HandleOutageLogAsync() (Ausfallprotokoll)

Spese (Spendings): Vengono firmate come SonstigerVorgang; il testo del processo dipende dall'AccountMode:

AccountMode Tipo di processo TSE
1 (Spesa) AVSonstAusgabe
2 (Cassa→Banca) AVTransfer
3 (Banca→Cassa) AVSonstEinlage
4 (Bonifico) AVSonstAusgabe

Componenti

Componente Descrizione
TseSigningHelper Classe statica centrale per tutte le firme TSE
ITseService Interfaccia per l'accesso alla TSE (IsAvailable, Sign, Export)
TseServiceRouter Routing verso la TSE attiva: fiskaly-Cloud preferita, poi TSE di rete, poi hardware Swissbit locale
FiskalyTseService fiskaly Cloud-TSE (SIGN DE) — firma tramite Internet, nessun dispositivo USB necessario
SwissbitTseService TSE USB Swissbit locale
TseProxyService TSE di rete: firma tramite un'altra cassa DiKAS che funge da TSE-Host (BonIdServer)
TseInitializationService Inizializzazione iniziale della TSE
ITseDataHolder Interfaccia con 9 campi TSE su tutte le entità firmate
TseOutageLog Entità del registro delle interruzioni
TseConfig Configurazione TSE (PublicKey, Serial, SigAlg, PIN)

Formati ProcessData

Le seguenti stringhe vengono trasmesse alla TSE e co-firmate. La descrizione dettagliata, orientata ai verificatori, si trova nella documentazione per la verifica fiscale, sezione 4.

Kassenbeleg-V1 — parte fiscale fissa composta da cinque slot lordi (19 % / 7 % / 10,7 % / 5,5 % / 0 %), seguita dalla parte di pagamento <Betrag>:<Bar|Unbar> (i pagamenti in contanti per primi):

Beleg^<19%>_<7%>_<10,7%>_<5,5%>_<0%>^<Zahlungen>
Beispiel: Beleg^47.60_12.40_0.00_0.00_0.00^60.00:Bar

Bestellung-V1 — una riga per ogni posizione dell'ordine; la denominazione è tra virgolette, il prezzo è il prezzo unitario lordo:

<Menge>;"<Bezeichnung>";<Brutto-Einzelpreis>
Beispiel:
2;"Cola";3.50
1;"Pizza Salami";11.50

SonstigerVorgang — sigla del processo e dati, separati da ^:

<Vorgang>^<Daten>
Beispiel: AVKassenschnitt^Tagesabschluss^1523.90

DiKAS utilizza a tale scopo sei sigle di processo: AVSichOpen (apertura turno), AVSichClose (chiusura turno), AVKassenschnitt (chiusura giornaliera), AVSonstAusgabe (uscita/prelievo di contanti), AVSonstEinlage (versamento di contanti) e AVTransfer (trasferimento di denaro). Uno storno non è un SonstigerVorgang, bensì un Kassenbeleg-V1 con importi negativi.

Formato del codice QR (DSFinV-K Allegato I)

V0;{KassenSerial};{ProcessType};{ProcessData};{TransNr};{SignZähler};{Start};{Ende};{SigAlg};{LogFormat};{Signatur};{PublicKey}

Configurazione

La maschera Admin → Impostazioni → TSE mostra stato ed esportazioni. Una TSE hardware locale viene messa in funzione con l'unica azione «Attiva TSE ora». DiKAS distingue automaticamente una TSE nuova, una già associata a DiKAS e una proveniente da un altro sistema.

Cloud-TSE (fiskaly)

Senza dispositivo USB — la firma avviene tramite la fiskaly-Cloud certificata (SIGN DE) su Internet. Le credenziali di accesso (API-Key, API-Secret, TSS-ID, Client-ID) si trovano nella configurazione del server (Tse:* in appsettings ovvero variabili d'ambiente), con ambiente Test o Live selezionabile. Nei pacchetti DiKAS-Cloud con Cloud-TSE inclusa questo è già preconfigurato — non c'è altro da fare.

Non appena è configurata una Cloud-TSE, questa ha automaticamente la priorità.

TSE hardware (Swissbit)

Chiavetta USB sul computer di cassa o sull'appliance:

  1. Inserire la TSE Swissbit
  2. Indicare il percorso locale (punto di mount) della TSE nella configurazione del server
  3. Admin → Impostazioni → TSE → fare clic su «Attiva TSE ora»

Per una TSE configurata ma sconosciuta DiKAS si ferma senza tentare l'accesso. Il salvataggio delle credenziali modificate del sistema precedente avvia esattamente un tentativo. Dopo una presa in carico riuscita, DiKAS imposta le credenziali DiKAS e registra la cassa come client.

Rete TSE (più casse, una TSE)

Per gli esercizi con più casse che condividono una sola TSE: una cassa è l'host TSE, le altre firmano tramite questa nella rete locale.

  1. Admin → Impostazioni → Finanze → TSE
  2. Nel campo «Server TSE» inserire l'indirizzo della cassa che funge da host TSE (es. https://kasse1.local)
  3. Attivare «TSE attiva»

Disattivazione automatica in caso di guasto

Se l'inizializzazione della TSE fallisce più volte all'avvio, la TSE si disattiva automaticamente e nell'intestazione della cassa compare «TSE disattivata». Dettagli per gli utenti: La TSE nell'uso quotidiano della cassa.

Endpoint API

Metodo Endpoint Descrizione
GET /api/v1/tse/info Informazioni sullo stato della TSE (capacità, certificato, firme)
GET /api/v1/tse/config Leggere la configurazione TSE
PUT /api/v1/tse/config Aggiornare la configurazione TSE
POST /api/v1/tse/activate Rilevare, configurare e attivare atomicamente la TSE locale dopo il successo
POST /api/v1/tse/initialize Inizializzare la TSE
GET /api/v1/tse/export/tar Esportare i dati di log TSE come TAR (opzionale ?startDate=&endDate=)

Dati TSE sullo scontrino

Ogni scontrino di cassa contiene i dati TSE:

══════════════════════════════════
  BON Nr. 20260313-0042
──────────────────────────────────
  ...Artikel...
──────────────────────────────────
  TSE-Information:
  Signatur:   a8f3c2d1e5...
  Trans.-Nr:  12345
  Sign.-Zäh:  67890
  Start:      2026-03-13T18:30:00
  Ende:       2026-03-13T18:30:01
  Seriennr:   ABCDEF1234567890

  [QR-Code]
══════════════════════════════════

Il codice QR contiene tutti i dati TSE nel formato DSFinV-K (Allegato I) e può essere scansionato dall'Agenzia delle Entrate.

Esportazione DSFinV-K

Per la verifica fiscale della cassa, DiKAS esporta i dati nel formato DSFinV-K:

  1. Admin → Impostazioni → Esportazione → DSFinV-K
  2. Selezionare il periodo
  3. „Crea esportazione"
  4. File ZIP con tutti i file CSV prescritti

Esportazione GDPdU

Per la verifica fiscale digitale:

  1. Admin → Impostazioni → Esportazione → GDPdU
  2. Selezionare il periodo
  3. „Crea esportazione"
  4. File di esportazione conforme a GDPdU

Interruzione della TSE

Se la TSE si interrompe (guasto, problema di rete):

  1. DiKAS registra automaticamente l'interruzione (TseOutageLog con StartTime, Reason, AffectedTransactions)
  2. La cassa non viene bloccata — l'attività prosegue
  3. Il campo TseError sul documento interessato viene impostato
  4. Al ripristino della disponibilità le voci di interruzione aperte vengono chiuse (EndTime impostato)
  5. I registri delle interruzioni vengono conservati per l'Agenzia delle Entrate

Importante: In caso di interruzione della TSE si è tenuti a documentare l'interruzione e a risolverla tempestivamente. DiKAS si occupa automaticamente della documentazione.

Garanzia di qualità

La firma TSE è garantita da test automatizzati. Vengono verificati tra l'altro:

  • i formati ProcessData per Kassenbeleg-V1 (una/più aliquote fiscali, scontrino a zero) e Bestellung-V1
  • la generazione del codice QR (formato V0)
  • il flusso di firma (TSE attiva, disattivata, non disponibile)
  • la formattazione degli importi e il comportamento in caso di interruzione della TSE

Domande frequenti sulla TSE

Devo avere una TSE? Sì, dal 01.01.2020 è obbligatoria in Germania.

Quale TSE supporta DiKAS? La TSE hardware Swissbit (USB, in sede), la TSE cloud fiskaly (SIGN DE, tramite Internet) e la rete TSE (più casse condividono una TSE).

Quanto costa una TSE? Dipende dalla variante scelta: una TSE hardware è un acquisto una tantum, una TSE cloud viene fatturata in modo continuativo. Le condizioni attuali sono disponibili presso DiKAS.

L'Agenzia delle Entrate può verificare i miei dati? Sì, tramite esportazione DSFinV-K, GDPdU e TSE-TAR. DiKAS è predisposto a tale scopo.

Un'interruzione della TSE blocca la cassa? No. DiKAS registra l'interruzione e prosegue. L'interruzione deve essere risolta tempestivamente.


Documenti di approfondimento

Conformità TSE per i verificatori fiscali — Documentazione tecnica dettagliata per la verifica fiscale → Guida TSE per gli utenti — Configurazione e utilizzo → Notifica di cassa all'ufficio delle imposte — Notificare il registratore di cassa tramite Mein ELSTER (§ 146a comma 4 AO) → Sviluppo di plugin — Creare moduli propri