-- Migration 046: USt-Buchungszeilen für Ausgangsrechnungen einführen -- -- Hintergrund: Bisher wurde Umsatzsteuer für Einnahmen implizit über betrag_ust -- der Hauptbuchung und ustva_kz des Kategorie-Kontos (81/86) ermittelt. -- Ab jetzt erhält jede Einnahme-Buchung mit 7 % oder 19 % USt eine explizite -- USt-Buchungszeile auf Konto 1771 (7 %) bzw. 1776 (19 %). -- Kz 83/84 werden danach kontobasiert via 1771/1776 (betrag_netto) befüllt. -- ── 1. ustva_kz für 1771 und 1776 setzen ───────────────────────────────────── UPDATE accounts SET ustva_kz = '84' WHERE kontonummer = '1771'; UPDATE accounts SET ustva_kz = '83' WHERE kontonummer = '1776'; -- ── 2. USt-Buchungszeilen für Bestandsbuchungen ─────────────────────────────── -- Kriterien: buchungstyp=Einnahme, ust_satz IN (7,19), steuerart=normal, betrag_ust!=0 -- Idempotenz: WHERE NOT EXISTS verhindert Doppel-Einfügung 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('UST-M-', LPAD(b.id, 8, '0')), b.beleg_id, b.id, b.buchungs_datum, 'Einnahme', a_ust.id, b.zahlungskonto_id, b.betrag_ust, 0.00, 'normal', 0.00, b.betrag_ust, CONCAT('USt zu ', b.buchungs_nr), b.is_reversal, b.fiscal_year_id FROM bookings b JOIN accounts a_ust ON ( (ROUND(b.ust_satz) = 19 AND a_ust.kontonummer = '1776') OR (ROUND(b.ust_satz) = 7 AND a_ust.kontonummer = '1771') ) WHERE b.buchungstyp = 'Einnahme' AND b.betrag_ust != 0 AND b.steuerart = 'normal' AND ROUND(b.ust_satz) IN (7, 19) AND b.parent_booking_id IS NULL AND NOT EXISTS ( SELECT 1 FROM bookings ust WHERE ust.parent_booking_id = b.id );