- Migration 044: Konten 1574 (VSt i.g.E. 19%) und 1774 (USt i.g.E. 19%) anlegen - Migration 045: Konten 1571/1576 anlegen, ustva_kz='61'/'62' setzen, altes DATEV-Routing (ustva_kz '61'/'62' auf Betriebsausgabe-Konten) entfernen, parent_booking_id-Spalte, VSt-Buchungszeilen für Bestandsbuchungen migrieren - Booking::create(): automatisch VSt-Zeile auf 1576/1571 für Ausgaben mit 7/19 % - Booking::reverse(): VSt-Zeilen beim Storno mitaufheben (reversed_by setzen) - BookingController::destroy(): VSt-Kindzeilen beim Löschen (Testmodus) mit löschen - UstvaCalculator: Kz 61/62 jetzt kontobasiert via 1576/1571 (betrag_netto), Step 2 (buchungsbasiert via ust_satz) entfernt - Beleg::all/find: betrag_brutto-Aggregation und Suche schließen VSt-Zeilen aus - Tests 12, 18 angepasst; Test 28 neu
78 lines
3.5 KiB
SQL
78 lines
3.5 KiB
SQL
-- Migration 045: Vorsteuerkonten aktivieren und VSt-Buchungszeilen einführen
|
|
--
|
|
-- Hintergrund: Bisher wurden Vorsteuerbeträge direkt in betrag_ust der Ausgabe-Buchung
|
|
-- geführt. Ab jetzt erhält jede Ausgabe-Buchung mit ust_satz 7/19 (steuerart=normal)
|
|
-- eine eigene VSt-Buchungszeile auf Konto 1571 (7%) bzw. 1576 (19%).
|
|
--
|
|
-- Änderungen:
|
|
-- 1. Konten 1571 und 1576 anlegen (nach Reset in Migration 013 nicht mehr vorhanden)
|
|
-- 2. ustva_kz: 1576→'61', 1571→'62' (bisher '66' Sammelkennzahl)
|
|
-- 3. ustva_kz von Betriebsausgabe-Konten mit '61'/'62' leeren (DATEV-Altmapping)
|
|
-- 4. Neue Spalte parent_booking_id in bookings (VSt-Zeile → Hauptbuchung)
|
|
-- 5. VSt-Buchungszeilen für alle bestehenden qualifizierten Ausgabe-Buchungen
|
|
|
|
-- ── 1. Konten anlegen ────────────────────────────────────────────────────────
|
|
|
|
INSERT INTO accounts (kontonummer, bezeichnung, kontenart, steuercode, ustva_kz, euer_zeile, is_system, aktiv) VALUES
|
|
('1571', 'Abziehbare Vorsteuer 7 %', 'Zahlungskonto', 'VSt7', '62', NULL, 1, 1),
|
|
('1576', 'Abziehbare Vorsteuer 19 % (Eingangsrechnungen)', 'Zahlungskonto', 'VSt19', '61', NULL, 1, 1)
|
|
ON DUPLICATE KEY UPDATE ustva_kz = VALUES(ustva_kz), aktiv = 1;
|
|
|
|
-- ── 3. Altes DATEV-Routing von Betriebsausgabe-Konten entfernen ─────────────────
|
|
-- Diese Konten hatten historisch ustva_kz='61'/'62' für direkte Kz-Zuordnung.
|
|
-- Kz 61/62 werden ab jetzt ausschließlich über VSt-Buchungszeilen auf 1571/1576 befüllt.
|
|
|
|
UPDATE accounts
|
|
SET ustva_kz = NULL
|
|
WHERE kontenart = 'Betriebsausgabe' AND ustva_kz IN ('61', '62');
|
|
|
|
-- ── 2. ustva_kz für 1574 auf '67' setzen (Vorsteuer ig. Erwerb, für späteres RC) ─
|
|
|
|
UPDATE accounts SET ustva_kz = '67' WHERE kontonummer = '1574' AND (ustva_kz IS NULL OR ustva_kz = '');
|
|
|
|
-- ── 3. Spalte parent_booking_id ──────────────────────────────────────────────
|
|
|
|
ALTER TABLE bookings
|
|
ADD COLUMN IF NOT EXISTS parent_booking_id INT UNSIGNED NULL COMMENT 'ID der Hauptbuchung (für VSt-Buchungszeilen)' AFTER beleg_id;
|
|
|
|
-- ── 4. VSt-Buchungszeilen für Bestandsbuchungen ──────────────────────────────
|
|
-- Kriterien: buchungstyp=Ausgabe, 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('VST-M-', LPAD(b.id, 8, '0')),
|
|
b.beleg_id,
|
|
b.id,
|
|
b.buchungs_datum,
|
|
'Ausgabe',
|
|
a_vst.id,
|
|
b.zahlungskonto_id,
|
|
b.betrag_ust,
|
|
0.00,
|
|
'normal',
|
|
0.00,
|
|
b.betrag_ust,
|
|
CONCAT('Vorsteuer zu ', b.buchungs_nr),
|
|
b.is_reversal,
|
|
b.fiscal_year_id
|
|
FROM bookings b
|
|
JOIN accounts a_vst ON (
|
|
(ROUND(b.ust_satz) = 19 AND a_vst.kontonummer = '1576')
|
|
OR
|
|
(ROUND(b.ust_satz) = 7 AND a_vst.kontonummer = '1571')
|
|
)
|
|
WHERE b.buchungstyp = 'Ausgabe'
|
|
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 vst
|
|
WHERE vst.parent_booking_id = b.id
|
|
);
|