-- Database schema for Excel-based Finnish accounting system
-- Based on Excelpohja.xlsx structure

-- Monthly accounting entries table
CREATE TABLE IF NOT EXISTS accounting_entries (
    id INT AUTO_INCREMENT PRIMARY KEY,
    entry_date DATE NOT NULL,
    description TEXT NOT NULL,
    entry_type ENUM('Tulo', 'Kulu') NOT NULL,
    category VARCHAR(100),
    tax_free_amount DECIMAL(12,2) DEFAULT 0.00,
    vat_percentage DECIMAL(5,2) DEFAULT 0.00,
    vat_25_5 DECIMAL(12,2) DEFAULT 0.00,
    vat_14 DECIMAL(12,2) DEFAULT 0.00,
    vat_10 DECIMAL(12,2) DEFAULT 0.00,
    total_amount DECIMAL(12,2) DEFAULT 0.00,
    net_amount DECIMAL(12,2) DEFAULT 0.00,
    vat_amount DECIMAL(12,2) DEFAULT 0.00,
    reference_number VARCHAR(50),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_entry_date (entry_date),
    INDEX idx_entry_type (entry_type),
    INDEX idx_category (category)
);

-- Accounting categories configuration
CREATE TABLE IF NOT EXISTS accounting_categories (
    id INT AUTO_INCREMENT PRIMARY KEY,
    category_code VARCHAR(20) NOT NULL,
    category_name VARCHAR(200) NOT NULL,
    category_type ENUM('Tulo', 'Kulu') NOT NULL,
    vat_percentage DECIMAL(5,2) DEFAULT 0.00,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY unique_category_code (category_code)
);

-- Monthly summaries
CREATE TABLE IF NOT EXISTS monthly_summaries (
    id INT AUTO_INCREMENT PRIMARY KEY,
    year INT NOT NULL,
    month INT NOT NULL,
    total_income DECIMAL(12,2) DEFAULT 0.00,
    total_expenses DECIMAL(12,2) DEFAULT 0.00,
    net_result DECIMAL(12,2) DEFAULT 0.00,
    vat_payable DECIMAL(12,2) DEFAULT 0.00,
    vat_deductible DECIMAL(12,2) DEFAULT 0.00,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY unique_year_month (year, month)
);

-- Expense categories (from Excel sheet structure)
CREATE TABLE IF NOT EXISTS expense_categories (
    id INT AUTO_INCREMENT PRIMARY KEY,
    category_code VARCHAR(50) NOT NULL,
    category_name VARCHAR(200) NOT NULL,
    parent_id INT NULL,
    description TEXT,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (parent_id) REFERENCES expense_categories(id) ON DELETE SET NULL,
    UNIQUE KEY unique_category_code (category_code)
);

-- Income categories (from Excel sheet structure)
CREATE TABLE IF NOT EXISTS income_categories (
    id INT AUTO_INCREMENT PRIMARY KEY,
    category_code VARCHAR(50) NOT NULL,
    category_name VARCHAR(200) NOT NULL,
    parent_id INT NULL,
    description TEXT,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (parent_id) REFERENCES income_categories(id) ON DELETE SET NULL,
    UNIQUE KEY unique_category_code (category_code)
);

-- Insert default expense categories
INSERT IGNORE INTO expense_categories (category_code, category_name, description) VALUES
('333', 'Ostot ja ulkopuoliset palvelut', 'Purchases and external services'),
('334', 'Henkilöstökulut', 'Personnel costs'),
('335', 'Poistot, edustuskulut ja vuokrat', 'Depreciation, representation and rental costs'),
('336', 'Muut vähennyskelpoiset kulut', 'Other deductible expenses'),
('337', 'Rahoituskulut', 'Financing costs'),
('341', 'Varausten muutokset', 'Asset changes'),
('343', 'Varausten myynnit', 'Asset sales'),
('344', 'Matkakulut', 'Travel expenses'),
('344 Matka-auto', 'Matkakulut - Car', 'Car travel expenses'),
('344 Ajoneuvo', 'Matkakulut - Vehicle', 'Vehicle travel expenses'),
('344 Muu', 'Matkakulut - Other', 'Other travel expenses'),
('344 Kokous', 'Matkakulut - Meeting', 'Meeting travel expenses'),
('346', 'Muut kulut', 'Other expenses'),
('349', 'Poistot', 'Depreciation'),
('353', 'Varainsiirrot', 'Asset transfers'),
('354', 'Vähennyskelvottomat kulut', 'Non-deductible expenses'),
('365', 'Vakuutukset', 'Insurance'),
('366', 'Verot ja maksut', 'Taxes and fees'),
('367', 'Yhtiölainat ja muut rahoituskulut', 'Company loans and other financing costs');

-- Insert default income categories
INSERT IGNORE INTO income_categories (category_code, category_name, description) VALUES
('300', 'Myynti - EU 0 %', 'Sales - EU 0% VAT'),
('301', 'Myynti - Muut maat', 'Sales - Other countries'),
('302', 'Myynti - Käänteinen vero', 'Sales - Reverse VAT'),
('303', 'Myynti - Suomi 0 %', 'Sales - Finland 0% VAT'),
('308', 'Myyntitavarat', 'Sales of fixed assets'),
('309', 'Osuuskorvaukset', 'Share compensation'),
('310', 'Korkotulot ja muut rahoitustuotot', 'Interest income and other financial income'),
('311', 'Voitonjako', 'Profit distribution'),
('312', 'Sijoitustoiminnan tuotot', 'Investment income'),
('313', 'Apurahat ja muut avustukset', 'Grants and other subsidies'),
('314', 'Muu tuotto', 'Other income');

-- Insert accounting categories
INSERT IGNORE INTO accounting_categories (category_code, category_name, category_type, vat_percentage) VALUES
('333', 'Ostot ja ulkopuoliset palvelut', 'Kulu', 24.00),
('334', 'Henkilöstökulut', 'Kulu', 0.00),
('335', 'Poistot, edustuskulut ja vuokrat', 'Kulu', 24.00),
('336', 'Muut vähennyskelpoiset kulut', 'Kulu', 24.00),
('337', 'Rahoituskulut', 'Kulu', 0.00),
('341', 'Varausten muutokset', 'Kulu', 0.00),
('343', 'Varausten myynnit', 'Kulu', 0.00),
('344', 'Matkakulut', 'Kulu', 24.00),
('346', 'Muut kulut', 'Kulu', 24.00),
('349', 'Poistot', 'Kulu', 0.00),
('353', 'Varainsiirrot', 'Kulu', 0.00),
('354', 'Vähennyskelvottomat kulut', 'Kulu', 0.00),
('365', 'Vakuutukset', 'Kulu', 24.00),
('366', 'Verot ja maksut', 'Kulu', 0.00),
('367', 'Yhtiölainat ja muut rahoituskulut', 'Kulu', 0.00),
('300', 'Myynti - EU 0 %', 'Tulo', 0.00),
('301', 'Myynti - Muut maat', 'Tulo', 0.00),
('302', 'Myynti - Käänteinen vero', 'Tulo', 0.00),
('303', 'Myynti - Suomi 0 %', 'Tulo', 0.00),
('308', 'Myyntitavarat', 'Tulo', 0.00),
('309', 'Osuuskorvaukset', 'Tulo', 0.00),
('310', 'Korkotulot ja muut rahoitustuotot', 'Tulo', 0.00),
('311', 'Voitonjako', 'Tulo', 0.00),
('312', 'Sijoitustoiminnan tuotot', 'Tulo', 0.00),
('313', 'Apurahat ja muut avustukset', 'Tulo', 0.00),
('314', 'Muu tuotto', 'Tulo', 0.00);
