--
-- Script run when an upgrade of Dolibarr is done. Whatever is the Dolibarr version.
-- EÜR Modul für Deutschland 2025
--

-- ============================================================================
-- Kontenrahmen (SKR03 basiert für EÜR)
-- ============================================================================
CREATE TABLE IF NOT EXISTS llx_steuer_konto (
    rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
    kontonummer VARCHAR(10) NOT NULL,
    bezeichnung VARCHAR(255) NOT NULL,
    kategorie VARCHAR(50) NOT NULL,           -- 'einnahme', 'ausgabe', 'ust', 'vorsteuer'
    euer_zeile INTEGER DEFAULT NULL,          -- Zeile in Anlage EÜR
    ust_kennzeichen VARCHAR(10) DEFAULT NULL, -- USt-Kennzeichen für UStVA
    aktiv TINYINT(1) DEFAULT 1,
    entity INTEGER DEFAULT 1,
    UNIQUE KEY uk_konto_nummer (kontonummer, entity)
) ENGINE=InnoDB;

-- ============================================================================
-- EÜR Buchungen
-- ============================================================================
CREATE TABLE IF NOT EXISTS llx_steuer_buchung (
    rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
    ref VARCHAR(30) NOT NULL,                  -- Buchungsnummer
    datum DATE NOT NULL,                       -- Belegdatum
    belegnummer VARCHAR(50) DEFAULT NULL,      -- Externe Belegnummer
    beschreibung VARCHAR(255) NOT NULL,
    fk_konto INTEGER NOT NULL,                 -- Verweis auf llx_steuer_konto
    betrag_netto DOUBLE(24,8) DEFAULT 0,
    betrag_ust DOUBLE(24,8) DEFAULT 0,         -- USt/VSt Betrag
    betrag_brutto DOUBLE(24,8) DEFAULT 0,
    ust_satz DOUBLE(5,2) DEFAULT 0,            -- 0, 7, 19
    typ VARCHAR(20) NOT NULL,                  -- 'einnahme', 'ausgabe'
    zahlungsart VARCHAR(30) DEFAULT NULL,      -- 'bar', 'bank', 'paypal', etc.
    fk_soc INTEGER DEFAULT NULL,               -- Verknüpfung zu Kunde/Lieferant
    fk_facture INTEGER DEFAULT NULL,           -- Verknüpfung zu Rechnung
    fk_facture_fourn INTEGER DEFAULT NULL,     -- Verknüpfung zu Lieferantenrechnung
    note_private TEXT,
    date_creation DATETIME,
    tms TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    fk_user_creat INTEGER,
    fk_user_modif INTEGER,
    status TINYINT(4) DEFAULT 1,               -- 0=Entwurf, 1=Gebucht
    entity INTEGER DEFAULT 1,
    INDEX idx_buchung_datum (datum),
    INDEX idx_buchung_konto (fk_konto),
    INDEX idx_buchung_typ (typ),
    INDEX idx_buchung_ref (ref)
) ENGINE=InnoDB;

-- ============================================================================
-- USt-Voranmeldung Perioden
-- ============================================================================
CREATE TABLE IF NOT EXISTS llx_steuer_ustva (
    rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
    jahr INTEGER NOT NULL,
    periode VARCHAR(10) NOT NULL,             -- '01'-'12' für Monat, 'Q1'-'Q4' für Quartal
    periode_typ VARCHAR(10) NOT NULL,         -- 'monat' oder 'quartal'

    -- Lieferungen und Leistungen
    kz81 DOUBLE(24,8) DEFAULT 0,              -- Steuerpfl. Umsätze 19%
    kz86 DOUBLE(24,8) DEFAULT 0,              -- Steuerpfl. Umsätze 7%
    kz35 DOUBLE(24,8) DEFAULT 0,              -- Steuerpfl. Umsätze andere Sätze
    kz36 DOUBLE(24,8) DEFAULT 0,              -- USt auf Kz35

    -- Steuerfreie Umsätze
    kz41 DOUBLE(24,8) DEFAULT 0,              -- Innergemeinschaftl. Lieferungen
    kz44 DOUBLE(24,8) DEFAULT 0,              -- Steuerfreie Ausfuhrlieferungen

    -- Vorsteuer
    kz66 DOUBLE(24,8) DEFAULT 0,              -- Vorsteuer aus Rechnungen
    kz61 DOUBLE(24,8) DEFAULT 0,              -- Vorsteuer aus igE
    kz67 DOUBLE(24,8) DEFAULT 0,              -- Vorsteuer nach § 13b

    -- Berechnung
    ust_summe DOUBLE(24,8) DEFAULT 0,         -- Summe USt
    vst_summe DOUBLE(24,8) DEFAULT 0,         -- Summe VSt
    zahllast DOUBLE(24,8) DEFAULT 0,          -- USt - VSt (positiv = Zahllast)

    status TINYINT(4) DEFAULT 0,              -- 0=Entwurf, 1=Berechnet, 2=Übermittelt
    uebermittelt_am DATE DEFAULT NULL,
    note_private TEXT,
    date_creation DATETIME,
    tms TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    fk_user_creat INTEGER,
    entity INTEGER DEFAULT 1,
    UNIQUE KEY uk_periode (jahr, periode, entity)
) ENGINE=InnoDB;

-- ============================================================================
-- Gewerbesteuer
-- ============================================================================
CREATE TABLE IF NOT EXISTS llx_steuer_gewerbe (
    rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
    jahr INTEGER NOT NULL,
    gewinn_euer DOUBLE(24,8) DEFAULT 0,       -- Gewinn aus EÜR
    hinzurechnungen DOUBLE(24,8) DEFAULT 0,   -- § 8 GewStG
    kuerzungen DOUBLE(24,8) DEFAULT 0,        -- § 9 GewStG
    gewerbeertrag DOUBLE(24,8) DEFAULT 0,     -- Nach Freibetrag
    freibetrag DOUBLE(24,8) DEFAULT 24500,    -- Freibetrag Einzelunternehmen
    hebesatz DOUBLE(5,2) DEFAULT 400,         -- Gemeinde-Hebesatz in %
    steuermessbetrag DOUBLE(24,8) DEFAULT 0,
    gewerbesteuer DOUBLE(24,8) DEFAULT 0,
    anrechnung_est DOUBLE(24,8) DEFAULT 0,    -- Anrechnung auf ESt
    status TINYINT(4) DEFAULT 0,
    note_private TEXT,
    date_creation DATETIME,
    tms TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    fk_user_creat INTEGER,
    entity INTEGER DEFAULT 1,
    UNIQUE KEY uk_jahr (jahr, entity)
) ENGINE=InnoDB;

-- ============================================================================
-- Standard EÜR-Konten nach SKR03 einfügen
-- ============================================================================

-- EINNAHMEN
INSERT IGNORE INTO llx_steuer_konto (kontonummer, bezeichnung, kategorie, euer_zeile, ust_kennzeichen) VALUES
('8400', 'Erlöse 19% USt', 'einnahme', 14, '81'),
('8300', 'Erlöse 7% USt', 'einnahme', 14, '86'),
('8100', 'Steuerfreie Umsätze Inland', 'einnahme', 10, NULL),
('8120', 'Steuerfreie igL', 'einnahme', 11, '41'),
('8150', 'Steuerfreie Ausfuhrlieferungen', 'einnahme', 12, '44'),
('8200', 'Erlöse ohne USt §19', 'einnahme', 14, NULL),
('8500', 'Provisionserlöse', 'einnahme', 14, '81'),
('8600', 'Sonstige Erlöse', 'einnahme', 16, '81'),
('8700', 'Erlöse aus VuV', 'einnahme', 17, NULL),
('8800', 'Zinserträge', 'einnahme', 18, NULL),
('8900', 'Privatentnahmen Sachen', 'einnahme', 19, '81'),
('8910', 'Private Kfz-Nutzung', 'einnahme', 19, '81'),
('8920', 'Private Telefonnutzung', 'einnahme', 19, '81');

-- AUSGABEN - Wareneinkauf
INSERT IGNORE INTO llx_steuer_konto (kontonummer, bezeichnung, kategorie, euer_zeile, ust_kennzeichen) VALUES
('3400', 'Wareneingang 19% VSt', 'ausgabe', 26, '66'),
('3300', 'Wareneingang 7% VSt', 'ausgabe', 26, '66'),
('3100', 'Wareneingang steuerfrei', 'ausgabe', 26, NULL);

-- AUSGABEN - Personal
INSERT IGNORE INTO llx_steuer_konto (kontonummer, bezeichnung, kategorie, euer_zeile, ust_kennzeichen) VALUES
('4100', 'Löhne und Gehälter', 'ausgabe', 31, NULL),
('4130', 'Gesetzliche Sozialaufwendungen', 'ausgabe', 32, NULL),
('4140', 'Freiwillige Sozialaufwendungen', 'ausgabe', 33, NULL);

-- AUSGABEN - Raumkosten
INSERT IGNORE INTO llx_steuer_konto (kontonummer, bezeichnung, kategorie, euer_zeile, ust_kennzeichen) VALUES
('4200', 'Raumkosten/Miete', 'ausgabe', 34, '66'),
('4210', 'Miete Geschäftsräume', 'ausgabe', 34, '66'),
('4230', 'Heizung', 'ausgabe', 34, '66'),
('4240', 'Gas, Strom, Wasser', 'ausgabe', 34, '66'),
('4250', 'Reinigung', 'ausgabe', 34, '66'),
('4260', 'Instandhaltung Räume', 'ausgabe', 34, '66');

-- AUSGABEN - Sonstige Betriebsausgaben
INSERT IGNORE INTO llx_steuer_konto (kontonummer, bezeichnung, kategorie, euer_zeile, ust_kennzeichen) VALUES
('4500', 'Fahrzeugkosten', 'ausgabe', 51, '66'),
('4510', 'Kfz-Steuer', 'ausgabe', 51, NULL),
('4520', 'Kfz-Versicherung', 'ausgabe', 51, NULL),
('4530', 'Kraftstoff', 'ausgabe', 51, '66'),
('4540', 'Kfz-Reparaturen', 'ausgabe', 51, '66'),
('4580', 'Sonstige Kfz-Kosten', 'ausgabe', 51, '66'),

('4600', 'Werbekosten', 'ausgabe', 53, '66'),
('4610', 'Geschenke abzugsfähig', 'ausgabe', 54, '66'),
('4630', 'Geschenke nicht abzugsfähig', 'ausgabe', 55, '66'),
('4650', 'Bewirtungskosten 70%', 'ausgabe', 56, '66'),
('4660', 'Reisekosten Unternehmer', 'ausgabe', 57, NULL),
('4670', 'Reisekosten Arbeitnehmer', 'ausgabe', 58, '66'),

('4700', 'Porto', 'ausgabe', 49, '66'),
('4710', 'Telefon', 'ausgabe', 49, '66'),
('4750', 'Bürobedarf', 'ausgabe', 49, '66'),
('4780', 'Fremdleistungen', 'ausgabe', 49, '66'),
('4790', 'Sonstige Betriebsausgaben', 'ausgabe', 49, '66'),

('4800', 'Reparatur/Instandhaltung', 'ausgabe', 39, '66'),
('4830', 'Versicherungen', 'ausgabe', 46, NULL),
('4840', 'Beiträge IHK/Verbände', 'ausgabe', 47, NULL),
('4850', 'Fortbildungskosten', 'ausgabe', 48, '66'),
('4900', 'Rechts- und Beratungskosten', 'ausgabe', 50, '66'),
('4910', 'Buchführungskosten', 'ausgabe', 50, '66'),
('4920', 'Jahresabschlusskosten', 'ausgabe', 50, '66'),
('4940', 'Bankgebühren', 'ausgabe', 48, NULL),
('4950', 'Nebenkosten Geldverkehr', 'ausgabe', 48, NULL),
('4960', 'Miete für Einrichtungen', 'ausgabe', 38, '66'),
('4970', 'Leasing', 'ausgabe', 38, '66'),
('4980', 'Software/Lizenzen', 'ausgabe', 39, '66');

-- AUSGABEN - AfA
INSERT IGNORE INTO llx_steuer_konto (kontonummer, bezeichnung, kategorie, euer_zeile, ust_kennzeichen) VALUES
('4820', 'AfA Sachanlagen', 'ausgabe', 36, NULL),
('4822', 'AfA immaterielle WG', 'ausgabe', 37, NULL),
('4824', 'AfA GWG', 'ausgabe', 38, NULL),
('4826', 'Sonderabschreibungen', 'ausgabe', 38, NULL);

-- AUSGABEN - Zinsen
INSERT IGNORE INTO llx_steuer_konto (kontonummer, bezeichnung, kategorie, euer_zeile, ust_kennzeichen) VALUES
('2100', 'Zinsaufwendungen', 'ausgabe', 45, NULL),
('2110', 'Zinsen langfristige Darlehen', 'ausgabe', 45, NULL);
