This document analyzes the current state of KassenSichV (German cash register security regulation) compliance for our Laravel 12 fursuit registration tool project.
The project uses Fiskaly cloud TSE integration for transaction signing and generates digital receipts. We have a solid foundation but are missing critical export functionality required by German tax law.
- ✅ Proper Fiskaly API integration (
FiskalyService.php) - ✅ TSE client management with state tracking
- ✅ Transaction signing via Fiskaly cloud TSE
- ✅ QR code generation for receipts with Fiskaly data
- ✅ Digital receipt generation as PDF
- ✅ Email delivery of receipts
- ✅ Proper receipt structure with required fields:
- Company information (Eurofurence e.V.)
- VAT ID (USt-IdNr-ID: DE219481694)
- Receipt number format (FSB-{year}-{id})
- Date and cashier information
- Itemized positions with VAT
- Payment method details
- QR code with TSE signature data
- ✅ Machine-to-TSE client mapping
- ✅ Transaction state management
- ✅ Fiskaly cloud TSE configuration
- ✅ Admin authentication for TSE operations
Status: NOT IMPLEMENTED
Priority: URGENT - Required by law
We're missing the most important compliance requirement - the DSFinV-K export functionality. This is the standardized data export format that German tax authorities use to audit transactions.
Our receipts are missing several mandatory KassenSichV fields:
- ❌ TSE serial number
- ❌ Transaction signature counter
- ❌ Start/end signature values
- ❌ TSE timestamp
- ❌ Transaction number from TSE
- ❌ No standardized export functionality for Finanzamt
- ❌ Missing GoBD-compliant data retention
- ❌ No audit trail export capability
Our current receipt template needs these additional fields:
<!-- Missing TSE Information Section -->
<div style="text-align:center; padding-top:5mm;">
<div>============= TSE DATEN =============</div>
</div>
<table width="100%">
<tr><td>TSE-Seriennummer:</td><td>{{ $tse_serial }}</td></tr>
<tr><td>Transaktions-Nr.:</td><td>{{ $transaction_number }}</td></tr>
<tr><td>Signaturzähler:</td><td>{{ $signature_counter }}</td></tr>
<tr><td>Start-Signatur:</td><td>{{ $start_signature }}</td></tr>
<tr><td>End-Signatur:</td><td>{{ $end_signature }}</td></tr>
<tr><td>TSE-Zeitstempel:</td><td>{{ $tse_timestamp }}</td></tr>
</table>Modify /resources/views/receipts/sale.blade.php to include missing TSE fields from Fiskaly response data.
Create a new service class:
namespace App\Domain\Checkout\Services;
class DSFinVKExportService
{
public function generateExport($dateFrom, $dateTo)
{
// Export all transactions in DSFinV-K format
// Required tables: transactions_v1, business_cases_v1, etc.
}
}Add to checkout migration:
$table->string('tse_transaction_number')->nullable();
$table->string('tse_signature_counter')->nullable();
$table->text('tse_start_signature')->nullable();
$table->text('tse_end_signature')->nullable();
$table->timestamp('tse_timestamp')->nullable();Update FiskalyService.php to extract and store additional TSE data:
public function updateOrCreateTransaction(Checkout $checkout)
{
$response = $this->request()->put(/* ... */)->throw();
$fiskalyData = $response->json();
$checkout->fiskaly_data = $fiskalyData;
// Extract required TSE fields
$checkout->tse_transaction_number = $fiskalyData['number'] ?? null;
$checkout->tse_signature_counter = $fiskalyData['signature']['counter'] ?? null;
$checkout->tse_start_signature = $fiskalyData['signature']['value'] ?? null;
$checkout->tse_timestamp = $fiskalyData['time_start'] ?? null;
$checkout->save();
}Current Compliance: ~70% ⚠️
- TSE Integration: ✅ Complete
- Receipt Generation: ✅ 80% (missing TSE fields)
- Data Export: ❌ 0% (Critical gap)
- Audit Trail: ❌ 0% (Critical gap)
app/Domain/Checkout/Services/FiskalyService.php- TSE integrationapp/Domain/Checkout/Models/Checkout/Checkout.php- Transaction modelresources/views/receipts/sale.blade.php- Receipt templateapp/Jobs/CreateReceiptFromCheckoutJob.php- Receipt generationdatabase/migrations/2024_09_14_200636_create_tse_clients_table.php- TSE client structure
- Update receipt template with missing TSE fields
- Enhance Fiskaly service to capture all required TSE data
- Add database fields for TSE compliance data
- Implement DSFinV-K export functionality
- Add audit trail logging
- Create tax authority export interface
- Add comprehensive data validation
- Implement backup/restore for TSE data
- Create compliance testing suite
- Test with actual tax authority export requirements
- Monitor Fiskaly API changes
- Stay updated on KassenSichV regulation changes
Based on the KassenSichV regulation:
- Mandatory since September 30, 2020 for all cash register systems
- DSFinV-K export is legally required for tax audits
- Receipt compliance with TSE data is mandatory
- Cloud TSE (like Fiskaly) requires internet connectivity but we handle offline scenarios
- Data retention must be available for tax authority export at any time
High Risk: Missing DSFinV-K export could result in:
- Tax audit failures
- Potential fines
- Business operation restrictions
Medium Risk: Incomplete receipt data could result in:
- Receipt validity questions
- Customer complaints
- Compliance warnings
Low Risk: Current TSE integration is solid and meets core signing requirements.
- Prioritize DSFinV-K export implementation
- Complete receipt template compliance
- Test full compliance workflow
- Document all compliance procedures
- Create staff training materials