TSE ve Maliye¶
01.01.2020 tarihinden bu yana Almanya'da kasa sistemleri için bir Teknik Güvenlik Donanımı (TSE) zorunludur (KassenSichV, §146a AO). DiKAS tamamen TSE uyumludur ve §146a AO'ya ilişkin AEAO uyarınca kasayla ilgili tüm işlemleri imzalar.
Vergi denetçileri için: → TSE Uyumluluğu — Vergi denetçileri için dokümantasyon (ayrıntılı teknik açıklama)
Kullanıcılar için: → Kullanım kılavuzundaki TSE talimatı (kurulum ve kullanım)
TSE nedir?¶
TSE, her kasa işlemini dijital olarak imzalayan sertifikalı bir güvenlik modülüdür. Maliye bununla kasa verilerinin sonradan manipüle edilip edilmediğini kontrol edebilir.
DiKAS'ta TSE¶
DiKAS kasayla ilgili tüm işlemleri imzalar — yalnızca faturaları değil:
| İşlem | ProcessType | Entity | Açıklama |
|---|---|---|---|
| Fişler | Kassenbeleg-V1 |
Receipt | Her ödeme (Doğrudan satış, masa ödemesi) |
| İptaller | Kassenbeleg-V1 |
Receipt | Her fiş iptali |
| Siparişler | Bestellung-V1 |
OpenBon | Masa servisindeki her sipariş |
| Toplu siparişler | Bestellung-V1 |
OpenBon | Toplu siparişler (imza Lead-Bon üzerinde) |
| Vardiya açılışı | SonstigerVorgang |
Exchange | Her vardiya açılışı |
| Vardiya kapanışı | SonstigerVorgang |
Exchange | Her vardiya kapanışı |
| Gün sonu raporları | SonstigerVorgang |
DayClose | Her Z raporu |
| Giderler | SonstigerVorgang |
Spending | Her nakit çıkışı |
Mimari¶
İmzalama akışı¶
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)
Giderler (Spendings): SonstigerVorgang olarak imzalanır; işlem metni AccountMode'a göre belirlenir:
| AccountMode | TSE işlem türü |
|---|---|
| 1 (Gider) | AVSonstAusgabe |
| 2 (Kasa→Banka) | AVTransfer |
| 3 (Banka→Kasa) | AVSonstEinlage |
| 4 (Havale) | AVSonstAusgabe |
Bileşenler¶
| Bileşen | Açıklama |
|---|---|
TseSigningHelper |
Tüm TSE imzalamaları için merkezi statik sınıf |
ITseService |
TSE erişimi için arayüz (IsAvailable, Sign, Export) |
TseServiceRouter |
Yönlendirme: Proxy tercih edilir, donanıma geri dönüş |
SwissbitTseService |
Yerel Swissbit USB-TSE |
TseProxyService |
HTTP proxy üzerinden ağ TSE'si |
TseInitializationService |
TSE ilk başlatma |
ITseDataHolder |
İmzalanan tüm varlıklarda 9 TSE alanı içeren arayüz |
TseOutageLog |
Arıza protokolü varlığı |
TseConfig |
TSE yapılandırması (PublicKey, Serial, SigAlg, PIN'ler) |
ProcessData formatları¶
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:
QR kod formatı (DSFinV-K Ek I)¶
V0;{KassenSerial};{ProcessType};{ProcessData};{TransNr};{SignZähler};{Start};{Ende};{SigAlg};{LogFormat};{Signatur};{PublicKey}
Kurulum¶
Donanım TSE'si (Swissbit)¶
Sunucuda USB bellek:
- Swissbit TSE'yi takın
- Yönetici → Ayarlar → TSE
- TSE türü: Donanım
- TSE'ye yerel yolu belirtin
- Kasa seri numarasını girin
- „Başlat" — PIN'leri ayarlar ve istemciyi kaydeder
TSE Proxy (Ağ)¶
Birden fazla kasaya sahip dağıtık sistemler için:
- TSE proxy sunucusunu kurun
- Yönetici → Ayarlar → TSE
- TSE türü: Proxy
- Proxy sunucusunun URL'sini girin
- „Etkinleştir"
API Uç Noktaları¶
| Yöntem | Uç Nokta | Açıklama |
|---|---|---|
| GET | /api/v1/tse/info |
TSE durum bilgileri (kapasite, sertifika, imzalar) |
| GET | /api/v1/tse/config |
TSE yapılandırmasını oku |
| PUT | /api/v1/tse/config |
TSE yapılandırmasını güncelle |
| POST | /api/v1/tse/initialize |
TSE'yi başlat |
| GET | /api/v1/tse/export/tar |
TSE günlük verilerini TAR olarak dışa aktar (isteğe bağlı ?startDate=&endDate=) |
Fiş üzerindeki TSE verileri¶
Her fiş, TSE verilerini içerir:
══════════════════════════════════
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]
══════════════════════════════════
QR kodu, tüm TSE verilerini DSFinV-K formatında (Ek I) içerir ve maliye tarafından taranabilir.
DSFinV-K Dışa Aktarma¶
Kasa denetimi için DiKAS, verileri DSFinV-K formatında dışa aktarır:
- Yönetici → Ayarlar → Dışa aktar → DSFinV-K
- Dönem seçin
- „Dışa aktarma oluştur"
- Zorunlu tüm CSV dosyalarını içeren ZIP dosyası
GDPdU Dışa Aktarma¶
Dijital işletme denetimi için:
- Yönetici → Ayarlar → Dışa aktar → GDPdU
- Dönem seçin
- „Dışa aktarma oluştur"
- GDPdU uyumlu dışa aktarma dosyası
TSE arızası¶
TSE arızalandığında (arıza, ağ sorunu):
- DiKAS arızayı otomatik olarak kaydeder (
TseOutageLogile StartTime, Reason, AffectedTransactions) - Ödeme alma engellenmez — işletme devam eder
- İlgili belge üzerindeki
TseErroralanı ayarlanır - Yeniden kullanılabilir olduğunda, açık arıza kayıtları kapatılır (EndTime ayarlanır)
- Arıza protokolleri maliye için saklanır
Önemli: TSE arızasında, arızayı belgelemek ve zamanında gidermekle yükümlüsünüz. DiKAS belgelemeyi otomatik olarak yapar.
Testler¶
TseSigningTests.cs içinde 17 özel TSE testi:
- Kassenbeleg-V1 için ProcessData formatı (bir/birden fazla vergi oranı, sıfır belge)
- Bestellung-V1 için ProcessData formatı (tekli, birden fazla pozisyon)
- QR kod oluşturma (V0 formatı, sıfır durumları)
- İmzalama akışı (TSE etkin, devre dışı, kullanılamaz)
- ClientId geri dönüş zinciri (CashRegisterId → BonIdServer → "1")
- Tutar biçimlendirme (InvariantCulture)
- ProcessType sabitleri
TSE ile İlgili Sık Sorulan Sorular¶
Bir TSE'ye sahip olmak zorunda mıyım? Evet, 01.01.2020 tarihinden bu yana Almanya'da zorunludur.
DiKAS hangi TSE'yi destekler? Donanım TSE'si (Swissbit USB) ve ağ tabanlı TSE proxy'leri.
Bir TSE ne kadar maliyetlidir? Donanım TSE'si: tek seferlik yaklaşık 250–300 EUR.
Maliye verilerimi denetleyebilir mi? Evet, DSFinV-K, GDPdU ve TSE-TAR dışa aktarma üzerinden. DiKAS buna hazırdır.
Bir TSE arızası kasayı engeller mi? Hayır. DiKAS arızayı kaydeder ve çalışmaya devam eder. Arıza zamanında giderilmelidir.
İleri Okuma Belgeleri¶
→ Vergi denetçileri için TSE Uyumluluğu — İşletme denetimi için ayrıntılı teknik dokümantasyon → Kullanıcılar için TSE talimatı — Kurulum ve kullanım → Maliyeye kasa bildirimi — Kasayı Mein ELSTER üzerinden bildirme (§ 146a Abs. 4 AO) → Eklenti geliştirme — Kendi modüllerinizi oluşturma