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 è pienamente conforme alla TSE e firma tutti i processi rilevanti ai fini di cassa 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)
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:
SonstigerVorgang — sigla del processo e dati, separati da ^:
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 → Finanze → TSE mostra lo stato della TSE e le esportazioni (TSE-TAR, DSFinV-K, GDPdU). Lì sono presenti esattamente due impostazioni: l'interruttore «TSE attiva» e il campo opzionale «Server TSE». Non esiste un menu a tendina «Tipo di TSE» — quale TSE viene utilizzata risulta dalla configurazione del server. All'avvio DiKAS verifica in quest'ordine: Cloud-TSE (fiskaly) → Server TSE (rete) → TSE Swissbit locale.
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:
- Inserire la TSE Swissbit
- Indicare il percorso locale (punto di mount) della TSE nella configurazione del server
- Admin → Impostazioni → Finanze → TSE → attivare «TSE attiva»
Durante l'inizializzazione DiKAS imposta da sé i PIN/PUK (casuali per ogni dispositivo) e registra la cassa come client. L'identificativo della cassa proviene dalla licenza — non esiste un campo manuale per il numero di serie.
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.
- Admin → Impostazioni → Finanze → TSE
- Nel campo «Server TSE» inserire l'indirizzo della cassa che funge da host TSE (es.
https://kasse1.local) - 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/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:
- Admin → Impostazioni → Esportazione → DSFinV-K
- Selezionare il periodo
- „Crea esportazione"
- File ZIP con tutti i file CSV prescritti
Esportazione GDPdU¶
Per la verifica fiscale digitale:
- Admin → Impostazioni → Esportazione → GDPdU
- Selezionare il periodo
- „Crea esportazione"
- File di esportazione conforme a GDPdU
Interruzione della TSE¶
Se la TSE si interrompe (guasto, problema di rete):
- DiKAS registra automaticamente l'interruzione (
TseOutageLogcon StartTime, Reason, AffectedTransactions) - La cassa non viene bloccata — l'attività prosegue
- Il campo
TseErrorsul documento interessato viene impostato - Al ripristino della disponibilità le voci di interruzione aperte vengono chiuse (EndTime impostato)
- 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