Files
MyClub/database/migrations/20250112000001_financial_tables.up.sql
T
Tomas Dvorak dfc079288f hot fix #1
2026-01-26 08:13:18 +01:00

148 lines
4.9 KiB
SQL

-- Financial management tables
-- Budgets table
CREATE TABLE budgets (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT,
category VARCHAR(100) NOT NULL,
yearly_limit DECIMAL(12,2),
monthly_limit DECIMAL(12,2),
current_spend DECIMAL(12,2) DEFAULT 0,
fiscal_year INTEGER NOT NULL,
start_date TIMESTAMP NOT NULL,
end_date TIMESTAMP NOT NULL,
active BOOLEAN DEFAULT true,
alert_threshold DECIMAL(5,2) DEFAULT 80.00,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by INTEGER,
updated_by INTEGER
);
-- Sponsorships table
CREATE TABLE sponsorships (
id SERIAL PRIMARY KEY,
sponsor_name VARCHAR(255) NOT NULL,
sponsor_logo VARCHAR(500),
contact_person VARCHAR(255),
contact_email VARCHAR(255),
contact_phone VARCHAR(50),
contract_number VARCHAR(100) UNIQUE,
contract_type VARCHAR(100),
total_value DECIMAL(12,2),
payment_schedule VARCHAR(100) DEFAULT 'Měsíčně',
currency VARCHAR(3) DEFAULT 'CZK',
start_date TIMESTAMP NOT NULL,
end_date TIMESTAMP NOT NULL,
auto_renewal BOOLEAN DEFAULT false,
renewal_notice INTEGER DEFAULT 90,
benefits TEXT,
obligations TEXT,
status VARCHAR(50) DEFAULT 'active',
last_payment_date TIMESTAMP,
next_payment_date TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by INTEGER,
updated_by INTEGER
);
-- Sponsorship payments table
CREATE TABLE sponsorship_payments (
id SERIAL PRIMARY KEY,
sponsorship_id INTEGER NOT NULL REFERENCES sponsorships(id) ON DELETE CASCADE,
amount DECIMAL(12,2) NOT NULL,
currency VARCHAR(3) DEFAULT 'CZK',
payment_date TIMESTAMP NOT NULL,
payment_method VARCHAR(100),
reference_number VARCHAR(255),
status VARCHAR(50) DEFAULT 'received',
notes TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by INTEGER,
updated_by INTEGER
);
-- Sponsorship documents table
CREATE TABLE sponsorship_documents (
id SERIAL PRIMARY KEY,
sponsorship_id INTEGER NOT NULL REFERENCES sponsorships(id) ON DELETE CASCADE,
name VARCHAR(255) NOT NULL,
type VARCHAR(100),
file_name VARCHAR(500),
file_path VARCHAR(500),
file_size BIGINT,
mime_type VARCHAR(100),
description TEXT,
version VARCHAR(20) DEFAULT '1.0',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by INTEGER,
updated_by INTEGER
);
-- Expenses table
CREATE TABLE expenses (
id SERIAL PRIMARY KEY,
title VARCHAR(255) NOT NULL,
description TEXT,
category VARCHAR(100) NOT NULL,
subcategory VARCHAR(100),
amount DECIMAL(12,2) NOT NULL,
currency VARCHAR(3) DEFAULT 'CZK',
vat_rate DECIMAL(5,2) DEFAULT 21.00,
vat_amount DECIMAL(12,2),
total_amount DECIMAL(12,2),
expense_date TIMESTAMP NOT NULL,
payment_method VARCHAR(100),
has_receipt BOOLEAN DEFAULT false,
receipt_data TEXT,
receipt_image VARCHAR(500),
status VARCHAR(50) DEFAULT 'pending',
approved_by INTEGER,
approved_at TIMESTAMP,
rejection_reason TEXT,
budget_id INTEGER REFERENCES budgets(id),
team_id INTEGER,
project_id INTEGER,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by INTEGER NOT NULL,
updated_by INTEGER
);
-- Expense documents table
CREATE TABLE expense_documents (
id SERIAL PRIMARY KEY,
expense_id INTEGER NOT NULL REFERENCES expenses(id) ON DELETE CASCADE,
name VARCHAR(255) NOT NULL,
type VARCHAR(100),
file_name VARCHAR(500),
file_path VARCHAR(500),
file_size BIGINT,
mime_type VARCHAR(100),
ocr_data TEXT,
ocr_accuracy DECIMAL(5,2),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by INTEGER,
updated_by INTEGER
);
-- Indexes for performance
CREATE INDEX idx_budgets_category ON budgets(category);
CREATE INDEX idx_budgets_fiscal_year ON budgets(fiscal_year);
CREATE INDEX idx_budgets_active ON budgets(active);
CREATE INDEX idx_expenses_category ON expenses(category);
CREATE INDEX idx_expenses_status ON expenses(status);
CREATE INDEX idx_expenses_expense_date ON expenses(expense_date);
CREATE INDEX idx_expenses_budget_id ON expenses(budget_id);
CREATE INDEX idx_expenses_created_by ON expenses(created_by);
CREATE INDEX idx_sponsorships_status ON sponsorships(status);
CREATE INDEX idx_sponsorships_contract_number ON sponsorships(contract_number);
CREATE INDEX idx_sponsorship_payments_sponsorship_id ON sponsorship_payments(sponsorship_id);
CREATE INDEX idx_sponsorship_documents_sponsorship_id ON sponsorship_documents(sponsorship_id);
CREATE INDEX idx_expense_documents_expense_id ON expense_documents(expense_id);