40 lines
1.7 KiB
PHP
40 lines
1.7 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
use Steuerkram\Services\ElsterXmlService;
|
||
|
||
class ElsterXmlKz39Test extends TestCase
|
||
{
|
||
protected string $testName = 'Test 13: UStVA XML – Kz83 Vorauszahlung/Überschuss';
|
||
|
||
public function run(): void
|
||
{
|
||
$service = new ElsterXmlService();
|
||
|
||
// Fall 1: Zahllast positiv → Kz83 muss vorhanden und positiv sein
|
||
$kzZahllast = ['83' => ['steuer' => 150.00]];
|
||
$xml = $service->generate(2026, 1, $kzZahllast);
|
||
$this->assert(str_contains($xml, '<Kz83>'), 'Kz83 bei Zahllast vorhanden');
|
||
$this->assert(str_contains($xml, '<Kz83>150.00</Kz83>'), 'Kz83 enthält korrekten Betrag bei Zahllast');
|
||
|
||
// Fall 2: Erstattung (negativ) → Kz83 muss vorhanden sein (Überschuss)
|
||
$kzErstattung = ['83' => ['steuer' => -50.00]];
|
||
$xml = $service->generate(2026, 1, $kzErstattung);
|
||
$this->assert(str_contains($xml, '<Kz83>'), 'Kz83 bei Erstattung vorhanden');
|
||
$this->assert(str_contains($xml, '<Kz83>-50.00</Kz83>'), 'Kz83 enthält negativen Betrag bei Erstattung');
|
||
|
||
// Fall 3: Zahllast = 0 → Kz83 weglassen
|
||
$kzNull = ['83' => ['steuer' => 0.0]];
|
||
$xml = $service->generate(2026, 1, $kzNull);
|
||
$this->assert(!str_contains($xml, '<Kz83>'), 'Kz83 bei Nullbetrag nicht vorhanden');
|
||
|
||
// Fall 4: Kz39 (Sondervorauszahlung) darf NICHT mehr als Zahllast exportiert werden
|
||
$this->assert(!str_contains($xml, '<Kz39>'), 'Kz39 (Sondervorauszahlung) wird nicht exportiert');
|
||
|
||
// Fall 5: XML ist valides XML
|
||
$doc = new \DOMDocument();
|
||
$loaded = @$doc->loadXML($xml);
|
||
$this->assert($loaded !== false, 'Generiertes XML ist wohlgeformt');
|
||
}
|
||
}
|