assertEquals('VSt19', $kto4650['steuercode'] ?? null, 'Konto 4650 hat steuercode=VSt19'); $kto4651 = \Steuerkram\Database::fetchOne( "SELECT steuercode FROM accounts WHERE kontonummer = '4651'" ); $this->assertEquals('VSt7', $kto4651['steuercode'] ?? null, 'Konto 4651 hat steuercode=VSt7 (oder null)'); $kto8400 = \Steuerkram\Database::fetchOne( "SELECT steuercode FROM accounts WHERE kontonummer = '8400'" ); $this->assertEquals('USt19', $kto8400['steuercode'] ?? null, 'Konto 8400 hat steuercode=USt19'); // ── USt-Mapping prüfen (Frontend-Logik serverseitig validiert) ─ $mapping = ['VSt19' => 19, 'USt19' => 19, 'VSt7' => 7, 'USt7' => 7]; $kontenMitSteuercode = \Steuerkram\Database::fetchAll( "SELECT kontonummer, steuercode FROM accounts WHERE steuercode IS NOT NULL AND steuercode != '' LIMIT 20" ); $this->assertNotEmpty($kontenMitSteuercode, 'Konten mit Steuercode vorhanden'); foreach ($kontenMitSteuercode as $kto) { $erwarteterUst = $mapping[$kto['steuercode']] ?? null; $this->assert( $erwarteterUst !== null, 'Steuercode ' . $kto['steuercode'] . ' auf Konto ' . $kto['kontonummer'] . ' ist im Mapping' ); } // ── Buchung mit VSt19-Konto mit 19% USt ─────────────────────── $datum = date('Y-m-d'); $bankId = $this->findAccountId('1200'); $kto4650Id = $this->findAccountId('4650'); if (!$bankId || !$kto4650Id) { $this->assert(false, 'Konten 1200 und 4650 müssen vorhanden sein'); return; } $belegId = \Steuerkram\Models\Beleg::create([ 'beleg_nr' => 'TEST-AUTOUST-' . uniqid(), 'filename' => 'test.pdf', 'storage_path' => '', 'mime_type' => 'application/pdf', 'file_hash' => hash('sha256', 'autoust' . uniqid()), 'beleg_datum' => $datum, 'belegtyp' => 'Eingangsrechnung', ]); $bookingId = \Steuerkram\Models\Booking::create([ 'beleg_id' => $belegId, 'buchungs_datum' => $datum, 'buchungstyp' => 'Ausgabe', 'kategorie_konto_id' => $kto4650Id, 'zahlungskonto_id' => $bankId, 'betrag_netto' => 100.0, 'ust_satz' => 19.0, // sollte durch Steuercode VSt19 vorgegeben sein 'buchungstext' => 'Test Automatikkonto VSt19', ]); $booking = \Steuerkram\Models\Booking::find($bookingId); $this->assertEquals(19.0, (float)$booking['ust_satz'], 'Buchung auf VSt19-Konto hat ust_satz=19'); $this->assertEquals(19.0, (float)$booking['betrag_ust'], 'Buchung auf VSt19-Konto hat betrag_ust=19'); } }