-- Migration 047: ig. Erwerb 19 % ReverseCharge über Kindzeilen (1574/1774) -- -- Hintergrund: Bisher wurden Kz 91 (USt ig.E.) und Kz 67 (VSt ig.E.) durch den -- UstvaCalculator aus betrag_netto × 0,19 der Hauptbuchung berechnet. -- Ab jetzt erzeugt Booking::create() bei steuerart='ig_erwerb_19' zwei Kindzeilen: -- - 1574 (Vorsteuer ig.E. 19 %, ustva_kz='67') für Kz 67 -- - 1774 (USt ig.E. 19 %, ustva_kz='91') für Kz 91 -- ── 1. ustva_kz für 1774 auf '91' setzen ───────────────────────────────────── UPDATE accounts SET ustva_kz = '91' WHERE kontonummer = '1774'; -- ── 2. Kindzeilen für bestehende ig_erwerb_19 Hauptbuchungen anlegen ───────── -- Idempotenz: WHERE NOT EXISTS verhindert Doppel-Einfügung -- 2a. VSt-Zeile auf 1574 (Kz 67) INSERT INTO bookings ( buchungs_nr, beleg_id, parent_booking_id, buchungs_datum, buchungstyp, kategorie_konto_id, zahlungskonto_id, betrag_netto, ust_satz, steuerart, betrag_ust, betrag_brutto, buchungstext, is_reversal, fiscal_year_id ) SELECT CONCAT('IGE-VST-', LPAD(b.id, 8, '0')), b.beleg_id, b.id, b.buchungs_datum, b.buchungstyp, a_vst.id, b.zahlungskonto_id, ROUND(b.betrag_netto * 0.19, 2), 0.00, 'normal', 0.00, ROUND(b.betrag_netto * 0.19, 2), CONCAT('VSt ig.E. zu ', b.buchungs_nr), b.is_reversal, b.fiscal_year_id FROM bookings b JOIN accounts a_vst ON a_vst.kontonummer = '1574' WHERE b.steuerart = 'ig_erwerb_19' AND b.parent_booking_id IS NULL AND b.betrag_netto != 0 AND NOT EXISTS ( SELECT 1 FROM bookings k JOIN accounts ak ON k.kategorie_konto_id = ak.id WHERE k.parent_booking_id = b.id AND ak.kontonummer = '1574' ); -- 2b. USt-Zeile auf 1774 (Kz 91) INSERT INTO bookings ( buchungs_nr, beleg_id, parent_booking_id, buchungs_datum, buchungstyp, kategorie_konto_id, zahlungskonto_id, betrag_netto, ust_satz, steuerart, betrag_ust, betrag_brutto, buchungstext, is_reversal, fiscal_year_id ) SELECT CONCAT('IGE-UST-', LPAD(b.id, 8, '0')), b.beleg_id, b.id, b.buchungs_datum, b.buchungstyp, a_ust.id, b.zahlungskonto_id, ROUND(b.betrag_netto * 0.19, 2), 0.00, 'normal', 0.00, ROUND(b.betrag_netto * 0.19, 2), CONCAT('USt ig.E. zu ', b.buchungs_nr), b.is_reversal, b.fiscal_year_id FROM bookings b JOIN accounts a_ust ON a_ust.kontonummer = '1774' WHERE b.steuerart = 'ig_erwerb_19' AND b.parent_booking_id IS NULL AND b.betrag_netto != 0 AND NOT EXISTS ( SELECT 1 FROM bookings k JOIN accounts ak ON k.kategorie_konto_id = ak.id WHERE k.parent_booking_id = b.id AND ak.kontonummer = '1774' );