Steuerkram/migrations/047_ige_rc_buchungszeilen.sql

82 lines
2.7 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 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'
);