- Migration 046: ustva_kz='83'/'84' für Konten 1776/1771, Bestandsmigration für Einnahme-Buchungen - Booking::create(): USt-Kindzeile auf 1771/1776 für Einnahmen mit 7/19 % (analog VSt) - UstvaCalculator: Kz 83/84 kontobasiert via 1771/1776, KZ_ACCOUNT_MAP aktualisiert - Invoice::cancel(): nur Hauptbuchungen direkt stornieren (parent_booking_id IS NULL) - Tests 10, 27 angepasst; Test 29 neu
54 lines
2 KiB
SQL
54 lines
2 KiB
SQL
-- 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
|
|
);
|