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 (CashPointSerial → 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: proxy preferito, fallback su hardware |
SwissbitTseService |
TSE USB Swissbit locale |
TseProxyService |
TSE di rete tramite proxy HTTP |
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¶
Kassenbeleg-V1:
Beleg^{BruttoGesamt}_{MwStSatz1}:{MwStBetrag1}_{MwStSatz2}:{MwStBetrag2}
Beispiel: Beleg^50.00_19.00:5.00_7.00:2.00
Bestellung-V1:
{Menge}^{Artikeltext}^{BruttoBetrag};{Menge}^{Artikeltext}^{BruttoBetrag}
Beispiel: 2.00^Cola^7.00;1.00^Pizza^11.50
SonstigerVorgang:
Formato del codice QR (DSFinV-K Allegato I)¶
V0;{KassenSerial};{ProcessType};{ProcessData};{TransNr};{SignZähler};{Start};{Ende};{SigAlg};{LogFormat};{Signatur};{PublicKey}
Configurazione¶
TSE hardware (Swissbit)¶
Chiavetta USB sul server:
- Inserire la TSE Swissbit
- Admin → Impostazioni → TSE
- Tipo di TSE: Hardware
- Indicare il percorso locale della TSE
- Inserire il numero di serie della cassa
- „Inizializza" — imposta i PIN e registra il client
TSE Proxy (rete)¶
Per sistemi distribuiti con più casse:
- Configurare il server TSE Proxy
- Admin → Impostazioni → TSE
- Tipo di TSE: Proxy
- Inserire l'URL del server proxy
- „Attiva"
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.
Test¶
17 test TSE dedicati in TseSigningTests.cs:
- Formato ProcessData per Kassenbeleg-V1 (una/più aliquote fiscali, giustificativo a zero)
- Formato ProcessData per Bestellung-V1 (singola, più posizioni)
- Generazione del codice QR (formato V0, casi nulli)
- Flusso di firma (TSE attiva, disattivata, non disponibile)
- Catena di fallback per ClientId (CashRegisterId → BonIdServer → "1")
- Formattazione degli importi (InvariantCulture)
- Costanti ProcessType
Domande frequenti sulla TSE¶
Devo avere una TSE? Sì, dal 01.01.2020 è obbligatoria in Germania.
Quale TSE supporta DiKAS? TSE hardware (Swissbit USB) e TSE Proxy basate su rete.
Quanto costa una TSE? TSE hardware: ca. 250–300 EUR una tantum.
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