27 lines
1.4 KiB
MySQL
27 lines
1.4 KiB
MySQL
|
|
CREATE TABLE accounts (
|
||
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
organization_id UUID NOT NULL REFERENCES organizations(id) ON DELETE CASCADE,
|
||
|
|
outlet_id UUID REFERENCES outlets(id) ON DELETE CASCADE,
|
||
|
|
chart_of_account_id UUID NOT NULL REFERENCES chart_of_accounts(id) ON DELETE RESTRICT,
|
||
|
|
name VARCHAR(255) NOT NULL,
|
||
|
|
number VARCHAR(50) NOT NULL,
|
||
|
|
account_type VARCHAR(20) NOT NULL CHECK (account_type IN ('cash', 'wallet', 'bank', 'credit', 'debit', 'asset', 'liability', 'equity', 'revenue', 'expense')),
|
||
|
|
opening_balance DECIMAL(15,2) DEFAULT 0.00,
|
||
|
|
current_balance DECIMAL(15,2) DEFAULT 0.00,
|
||
|
|
description TEXT,
|
||
|
|
is_active BOOLEAN DEFAULT true,
|
||
|
|
is_system BOOLEAN DEFAULT false,
|
||
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||
|
|
UNIQUE(organization_id, outlet_id, number),
|
||
|
|
UNIQUE(organization_id, number) -- For organization-level accounts
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX idx_accounts_organization_id ON accounts(organization_id);
|
||
|
|
CREATE INDEX idx_accounts_outlet_id ON accounts(outlet_id);
|
||
|
|
CREATE INDEX idx_accounts_chart_of_account_id ON accounts(chart_of_account_id);
|
||
|
|
CREATE INDEX idx_accounts_number ON accounts(number);
|
||
|
|
CREATE INDEX idx_accounts_account_type ON accounts(account_type);
|
||
|
|
CREATE INDEX idx_accounts_is_active ON accounts(is_active);
|
||
|
|
CREATE INDEX idx_accounts_is_system ON accounts(is_system);
|