Ana içeriğe geç
v26.3

TSE Uyumluluğu — Vergi denetçileri için dokümantasyon

Bu belge vergi denetçilerine, mali makamlara ve mali müşavirlere yöneliktir ve DiKAS kasa sistemindeki TSE bağlantısının teknik uygulamasını geçerli yasal gereklilikler uyarınca açıklar.


1. Yasal Dayanaklar

DiKAS aşağıdaki düzenlemelerin gerekliliklerini karşılar:

Düzenleme İçerik
§ 146a AO Düzgün kasa yönetimi, bir TSE kullanma zorunluluğu
KassenSichV Kasa Güvenlik Yönetmeliği — TSE için teknik gereklilikler
AEAO zu § 146a AO ProcessTypes, ProcessData, QR koduna ilişkin ayrıntılı hükümler içeren uygulama yönergesi
DSFinV-K Kasa sistemleri için mali idarenin dijital arayüzü
GDPdU / GoBD Defterlerin düzgün tutulması ve saklanmasına ilişkin esaslar (dijital işletme denetimi)

2. İmzalanan İşlem Türleri (ProcessTypes)

DiKAS, §146a AO'ya ilişkin AEAO uyarınca kasayla ilgili tüm işlemleri imzalar — yalnızca fişleri değil. DSFinV-K uyarınca üç ProcessType kullanılır:

2.1 Kassenbeleg-V1

Özellik Değer
ProcessType Kassenbeleg-V1
Tetikleyen işlemler Tamamlanan her ödeme (Doğrudan satış, masa ödemesi, iptal)
Entities Receipt (DocumentType: Receipt2)

ProcessData formatı:

Beleg^{BruttoGesamt}_{MwStSatz1}:{MwStBetrag1}_{MwStSatz2}:{MwStBetrag2}_...

Örnekler:

Beleg^119.00_19.00:19.00                          # Ein Steuersatz (19%)
Beleg^50.00_19.00:5.00_7.00:2.00                  # Zwei Steuersätze (19% + 7%)
Beleg^0.00_0.00:0.00                              # Nullbeleg

Tüm tutarlar iki ondalık basamak ve ondalık ayırıcı olarak nokta ile biçimlendirilir (Invariant Culture), DSFinV-K spesifikasyonuna uygundur.

2.2 Bestellung-V1

Özellik Değer
ProcessType Bestellung-V1
Tetikleyen işlemler Masa servisindeki her sipariş verme
Entities OpenBon (DocumentType: OpenBon)

ProcessData formatı:

{Menge}^{Artikeltext}^{BruttoBetrag};{Menge}^{Artikeltext}^{BruttoBetrag};...

Örnek:

2.00^Cola^7.00;1.00^Pizza^11.50

Toplu siparişlerde (Batch) TSE imzası, partinin ilk fişine kaydedilir. ProcessData, tüm siparişin tüm pozisyonlarını içerir.

2.3 SonstigerVorgang

Özellik Değer
ProcessType SonstigerVorgang
Tetikleyen işlemler Vardiya açılışı, vardiya kapanışı, gün sonu raporu, giderler
Entities Exchange, DayClose, Spending

ProcessData formatı:

{Vorgangstyp}^{Vorgangsdaten}

Somut işlem türleri:

İşlem türü Açıklama Örnek ProcessData
AVSichOpen Vardiya açılışı AVSichOpen^Schichteroeffnung^200.00
AVSichClose Vardiya kapanışı AVSichClose^Schichtschliessung^350.00
AVKassenschnitt Gün sonu raporu (Z raporu) AVKassenschnitt^Tagesabschluss^1500.00
AVBelegabbruch İptal işlemi AVBelegabbruch^Storno
AVSons662 Gider/Nakit çıkışı AVSonstige^Ausgabe^50.00

3. Belgeler Üzerindeki TSE Veri Alanları

İmzalanan her belge, aşağıdaki 9 TSE alanını saklar (ITseDataHolder arayüzü üzerinden uygulanmıştır):

Alan Tür Açıklama
TseTransactionNumber String TSE'nin benzersiz işlem numarası
TseSignature String Dijital imza (Base64 kodlu)
TseStartTime DateTime İmzalamanın başlangıcı (UTC)
TseEndTime DateTime İmzalamanın sonu (UTC)
TseSignatureCounter UInt64 Monoton artan imza sayacı
TseProcessData String İmzalanan işlem verileri (bkz. Bölüm 2)
TseProcessType String ProcessType tanımlayıcısı
TseSerialNumber String Kullanılan TSE'nin seri numarası
TseError String İmzalama hatasında hata mesajı (başarıda null)

Bu alanlar aşağıdaki varlıklarda saklanır:

  • Receipt — Fişler (Satış, iptal, iade)
  • OpenBon — Sipariş pozisyonları (Toplu siparişlerde Lead-Bon)
  • Exchange — Vardiya açılışları ve kapanışları
  • DayClose — Gün sonu raporları (Z raporları)
  • Spending — Giderler ve nakit çıkışları

4. QR Kod Formatı (DSFinV-K Ek I)

Her fiş, TSE verilerini DSFinV-K Ek I uyarınca standartlaştırılmış formatta içeren bir QR kodu barındırır:

V0;{KassenSeriennummer};{ProcessType};{ProcessData};{TransaktionsNr};{SignaturZähler};{StartZeit};{EndZeit};{SigAlgorithmus};{LogZeitformat};{Signatur};{PublicKey}

Somut:

V0;KASSE-001;Kassenbeleg-V1;Beleg^29.30_19.00:4.68;12345;67890;2026-03-13T18:30:00.000Z;2026-03-13T18:30:01.000Z;ecdsa-plain-SHA256;unixTime;a8f3c2d1e5b7...;PK123...

Konum Alan Kaynak
1 Sürüm Her zaman V0
2 Kasa seri numarası BackendConfig'ten CashPointSerialNumber
3 ProcessType Belgeden TseProcessType
4 ProcessData Belgeden TseProcessData
5 İşlem numarası Belgeden TseTransactionNumber
6 İmza sayacı Belgeden TseSignatureCounter
7 Başlangıç zamanı TseStartTime (ISO 8601, UTC)
8 Bitiş zamanı TseEndTime (ISO 8601, UTC)
9 İmza algoritması TseConfig'ten SigAlg (Standart: ecdsa-plain-SHA256)
10 Günlük zaman formatı TseConfig'ten LogTimeFormat (Standart: unixTime)
11 İmza Belgeden TseSignature
12 Açık anahtar TseConfig'ten PublicKey

5. Kasa Tanımlaması (ClientId)

Kasa tanımlaması üç aşamalı bir geri dönüş zincirini izler:

Öncelik Kaynak Açıklama
1 CashPointSerialNumber Açıkça yapılandırılmış kasa seri numarası (Lisans)
2 BonIdServer BackendConfig'ten fiş sunucusu tanımlayıcısı
3 "1" Geri dönüş varsayılan değeri

Bu ClientId, her TSE imzalamasında kasa tanımlayıcısı olarak iletilir ve QR kodunda kasa seri numarası olarak görünür.


6. TSE Yapılandırması

TSE yapılandırması configTSE (TseConfig) belgesinde saklanır:

Alan Açıklama
PublicKey TSE'nin açık anahtarı
Serial TSE'nin seri numarası
SigAlg İmza algoritması (Standart: ecdsa-plain-SHA256)
LogTimeFormat TSE günlüklerinin zaman formatı (Standart: unixTime)
LocalPath Donanım TSE'sine yerel yol
SetupDate TSE devreye alma tarihi
DecomissionDate TSE devreden çıkarma tarihi
TSESerialId Dahili seri kimliği

Desteklenen TSE Bağlantıları

Tür Uygulama Açıklama
Donanım (Swissbit) SwissbitTseService Swissbit TSE'ye doğrudan USB erişimi
Proxy (Ağ) TseProxyService HTTP proxy üzerinden TSE (örn. Fiskaltrust)
Router TseServiceRouter Otomatik yönlendirme: Proxy tercih edilir, donanıma geri dönüş

7. Arıza Güvenliği ve Protokolleme

TSE Arıza Protokolü (TseOutageLog)

§146a AO'ya ilişkin AEAO uyarınca DiKAS her TSE arızasını otomatik olarak belgeler:

Alan Açıklama
StartTime Arızanın başlangıcı (UTC)
EndTime Arızanın sonu (UTC, hâlâ devam ediyorsa null)
Reason Neden (örn. „TSE not available", „TSE timeout")
AffectedTransactions Etkilenen işlem sayısı

TSE arızasında akış:

  1. TSE imzalaması başarısız olur → Belge üzerindeki TseError alanı ayarlanır
  2. Yeni bir TseOutageLog kaydı oluşturulur (StartTime ve Reason ile)
  3. Kasa işlemi engellenmez — işlem imzasız olarak saklanır
  4. Bir sonraki başarılı imzalamada tüm açık arıza kayıtları kapatılır (EndTime ayarlanır)

Timeout: Her TSE imzalamasının 5 saniyelik bir zaman aşımı vardır. Aşıldığında TseError = "TSE timeout" ayarlanır.

Denetimde Doğrulama

TseError != null olan her belgede, belgelenmiş bir imzalama hatası mevcuttur. İlgili TseOutageLog kaydı, arızanın dönemini ve nedenini kanıtlar.


8. İşletme Denetimi için Veri Dışa Aktarma

8.1 DSFinV-K Dışa Aktarma

DiKAS, tüm kasa verilerini DSFinV-K formatında (Kasa sistemleri için mali idarenin dijital arayüzü) dışa aktarır:

  • DSFinV-K spesifikasyonu uyarınca zorunlu tüm CSV dosyaları
  • Döneme bağlı dışa aktarma mümkün
  • İçerir: Tekil kayıtlar, ana veriler, TSE verileri, kasa kesimleri

8.2 TSE-TAR Dışa Aktarma

TSE günlük verilerinin doğrudan TAR arşivi olarak dışa aktarımı:

  • Tam dışa aktarma: TSE'nin saklanan tüm işlemleri
  • Filtreli dışa aktarma: Döneme göre (startDate/endDate)
  • API uç noktası: GET /api/v1/tse/export/tar

8.3 GDPdU Dışa Aktarma

GDPdU/GoBD uyarınca dijital işletme denetimi için:

  • Vergi açısından ilgili tüm verileri içeren yapılandırılmış dışa aktarma dosyası
  • Denetim yazılımları için makine tarafından okunabilir (IDEA, AIS, etc.)

8.4 DATEV Dışa Aktarma

Mali müşavirde devam eden muhasebe için:

  • 7 dışa aktarma modu (Gün sonu raporu, ProBon, ProÖffnungstag, WGR, WGR2, NachRechnung, Giderler)
  • Doğru BU anahtarlarıyla EXTF formatı v13 (USt 3/2/40, VSt 9/8/40)
  • İsteğe bağlı şifreli (AES-256 ZIP) ve e-posta ile gönderilebilir

9. İmzalama Sürecinin Ayrıntıları

9.1 Bir imzalamanın akışı

Kassenvorgang → TseSigningHelper → ITseService → TSE (Hardware/Proxy)
                     │                                    │
                     │  1. BackendConfig laden             │
                     │  2. Prüfen: TSE verfügbar?          │
                     │  3. ProcessData aufbauen             │
                     │  4. ClientId auflösen                │
                     │  5. SignReceiptAsync aufrufen ───────→│
                     │  6. Ergebnis auf Entity speichern ←──│
                     │  7. OutageLog aktualisieren          │
                     └──────────────────────────────────────┘

9.2 Hangi Handler'lar imzalar?

Handler İşlem ProcessType
ProcessDirectSaleCommand Doğrudan satış Kassenbeleg-V1
ProcessTablePaymentCommand Masa ödemesi Kassenbeleg-V1
VoidReceiptCommand İptal Kassenbeleg-V1
CreateOpenBonCommand Tekil sipariş Bestellung-V1
CreateOpenBonsBatchCommand Toplu sipariş Bestellung-V1
OpenExchangeCommand Vardiya açılışı SonstigerVorgang
CloseExchangeCommand Vardiya kapanışı SonstigerVorgang
PerformDayCloseCommand Gün sonu raporu SonstigerVorgang
CreateSpendingCommand Gider/Nakit çıkışı SonstigerVorgang

9.3 Hata İşleme

TSE imzalaması engellemeyen olarak uygulanmıştır:

  • TSE hataları TseError alanında belgelenir, işlem yine de saklanır
  • Tüm imzalama sürecini saran bir try/catch, TSE sorunlarının kasa işletmesini aksatmasını engeller
  • HandleOutageLogAsync metodu, her imzalamadan sonra arıza protokolünü günceller (başarı veya hata)

10. Kayıtların Eksiksizliği

Kesintisiz İmzalama

DiKAS, kasayla ilgili tüm işlemlerin kesintisiz imzalanmasını şu şekilde garanti eder:

  1. Merkezi imzalama mantığı: Tüm imzalamalar TseSigningHelper üzerinden çalışır — kasayla ilgili bir işlemi TSE çağrısı olmadan tamamlamanın hiçbir yolu yoktur
  2. Monoton imza sayacı: TseSignatureCounter TSE tarafından yönetilir ve monoton olarak artar. Sayaçtaki boşluklar, TseOutageLog içinde belgelenen arızalara işaret eder
  3. İşlem numaraları: Her TSE işlemi benzersiz bir TseTransactionNumber alır
  4. Zaman damgaları: Her imzalamanın başlangıç ve bitiş zamanı saklanır

Manipülasyona Karşı Koruma

  • İmza algoritması: SHA-256 ile ECDSA (ecdsa-plain-SHA256)
  • TSE donanımı BSI sertifikalıdır (Common Criteria)
  • TSE'nin açık anahtarı TseConfig içinde saklanır ve imza doğrulaması için kullanılabilir
  • İmzalanan belgelerdeki sonraki değişiklikler, kriptografik imza sayesinde tespit edilebilir

11. Vergi denetçileri için denetim notları

TSE verilerini nerede bulursunuz?

Veri kaynağı Erişim
Belgeler üzerindeki TSE alanları Her Receipt/OpenBon/Exchange/DayClose/Spending belgesinde
QR kodları Basılı fişlerde
TSE arıza protokolü Veritabanındaki TseOutageLog belgeleri
TSE yapılandırması configTSE belgesi
DSFinV-K Dışa Aktarma Yönetici → Ayarlar → Dışa aktar → DSFinV-K
TSE-TAR Dışa Aktarma Yönetici → Ayarlar → TSE → Dışa aktar
GDPdU Dışa Aktarma Yönetici → Ayarlar → Dışa aktar → GDPdU

İmzaları nasıl denetlersiniz?

  1. QR kodunu tarayın: Her fiş, V0 formatında bir QR kodu içerir (DSFinV-K Ek I)
  2. TSE-TAR dışa aktarın: TAR dosyası tüm TSE günlük verilerini içerir ve denetim araçlarıyla doğrulanabilir
  3. İmza sayacını kontrol edin: Monoton artan sayaç, açıklanamayan boşluklar içermemelidir
  4. Arıza protokolü: İmza sayacındaki boşluklar TseOutageLog kayıtlarıyla açıklanmalıdır
  5. Açık anahtar: TseConfig içinde bulunur ve tekil imzaların hesaplamalı denetimi için kullanılabilir

Kasa denetimi için kontrol listesi

  • TSE seri numarası, maliyeye bildirilenle eşleşir
  • İmza sayacı kesintisizdir (Boşluklar arıza protokolleriyle açıklanabilir)
  • ProcessTypes, AEAO hükümlerine uygundur (Kassenbeleg-V1, Bestellung-V1, SonstigerVorgang)
  • ProcessData formatları DSFinV-K uyumludur
  • QR kod formatı DSFinV-K Ek I'e uygundur (V0 formatı)
  • Zaman damgaları makuldür (Başlangıç < Bitiş, kronolojik artan)
  • TSE arıza süreleri belgelenmiş ve izlenebilirdir
  • Kasayla ilgili tüm işlem türleri imzalanır (yalnızca fişler değil)
  • DSFinV-K dışa aktarımı eksiksiz ve makine tarafından okunabilirdir
  • TSE sertifikası denetim döneminde geçerliydi

12. Teknik Temel Veriler

Özellik Değer
İmza algoritması SHA-256 ile ECDSA (ecdsa-plain-SHA256)
QR kod formatı DSFinV-K Ek I, Sürüm V0
Zaman formatı ISO 8601, UTC (yyyy-MM-ddTHH🇲🇲ss.fffZ)
Tutar formatı Invariant Culture, 2 ondalık basamak (örn. 119.00)
TSE-Timeout İmzalama başına 5 saniye
Desteklenen TSE Swissbit (USB), ağ proxy'si
Arıza davranışı Engellemeyen, otomatik protokolleme
Veritabanı CouchDB veya SQLite/SQL Server (yapılandırılabilir)
API tabanı .NET 10, Clean Architecture, MediatR ile CQRS
Test kapsamı 17 özel TSE testi (İmzalama, ProcessData, QR kod, geri dönüş)

Ek: İşlem türü → Belge → Veritabanı eşlemesi

Kasa işlemi ProcessType Entity DocumentType Veritabanı koleksiyonu
Doğrudan satış (nakit/kart) Kassenbeleg-V1 Receipt Receipt2 receipt2
Masa ödemesi Kassenbeleg-V1 Receipt Receipt2 receipt2
İptal Kassenbeleg-V1 Receipt Receipt2 receipt2
Sipariş (Masa) Bestellung-V1 OpenBon OpenBon openbon
Toplu sipariş Bestellung-V1 OpenBon OpenBon openbon
Vardiya açılışı SonstigerVorgang Exchange Exchange2 exchange2
Vardiya kapanışı SonstigerVorgang Exchange Exchange2 exchange2
Gün sonu raporu (Z raporu) SonstigerVorgang DayClose DayClose2 dayclose2
Gider/Nakit çıkışı SonstigerVorgang Spending CashPointSpending cashpointspending