Initial commit MKD fixes
This commit is contained in:
140
backend/migrate_legal_module.sql
Executable file
140
backend/migrate_legal_module.sql
Executable file
@@ -0,0 +1,140 @@
|
||||
-- ========= ЮРИДИЧЕСКИЙ ОТДЕЛ: ПОЛНАЯ МИГРАЦИЯ =========
|
||||
-- Миграция для создания всех таблиц юридического отдела
|
||||
|
||||
-- Договоры
|
||||
CREATE TABLE IF NOT EXISTS legal_contracts (
|
||||
id VARCHAR(50) PRIMARY KEY,
|
||||
number TEXT NOT NULL UNIQUE,
|
||||
type TEXT NOT NULL, -- Тип договора (Поставка, Услуги и т.д.)
|
||||
counterparty TEXT NOT NULL, -- Название контрагента
|
||||
counterparty_inn TEXT, -- ИНН контрагента (для связи с проверками)
|
||||
amount NUMERIC(15, 2) NOT NULL,
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'draft' CHECK (status IN ('draft', 'finance_approval', 'counterparty_approval', 'signing', 'active', 'archived')),
|
||||
start_date DATE NOT NULL,
|
||||
end_date DATE NOT NULL,
|
||||
auto_prolongation BOOLEAN DEFAULT FALSE,
|
||||
manager TEXT NOT NULL, -- Кто ведет договор
|
||||
has_disagreements BOOLEAN DEFAULT FALSE,
|
||||
contract_file_url TEXT, -- Ссылка на файл договора
|
||||
notes TEXT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_legal_contracts_status ON legal_contracts(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_legal_contracts_counterparty ON legal_contracts(counterparty);
|
||||
CREATE INDEX IF NOT EXISTS idx_legal_contracts_number ON legal_contracts(number);
|
||||
CREATE INDEX IF NOT EXISTS idx_legal_contracts_dates ON legal_contracts(start_date, end_date);
|
||||
CREATE INDEX IF NOT EXISTS idx_legal_contracts_created ON legal_contracts(created_at DESC);
|
||||
|
||||
-- Судебные дела
|
||||
CREATE TABLE IF NOT EXISTS legal_court_cases (
|
||||
id VARCHAR(50) PRIMARY KEY,
|
||||
case_number TEXT NOT NULL UNIQUE,
|
||||
type VARCHAR(20) NOT NULL CHECK (type IN ('arbitration', 'civil', 'debt_recovery')),
|
||||
role VARCHAR(20) NOT NULL CHECK (role IN ('plaintiff', 'defendant')),
|
||||
subject TEXT NOT NULL,
|
||||
debtor_name TEXT,
|
||||
address TEXT,
|
||||
amount NUMERIC(15, 2) NOT NULL,
|
||||
recovered_amount NUMERIC(15, 2) DEFAULT 0,
|
||||
amount_at_bailiffs NUMERIC(15, 2) DEFAULT 0,
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'pre_trial' CHECK (status IN ('pre_trial', 'litigation', 'decision_received', 'enforcement', 'closed')),
|
||||
fssp_status TEXT,
|
||||
bailiff_name TEXT,
|
||||
fssp_last_action_date DATE,
|
||||
next_hearing_date DATE,
|
||||
judge TEXT,
|
||||
court_name TEXT,
|
||||
case_file_url TEXT, -- Ссылка на материалы дела
|
||||
notes TEXT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_legal_court_cases_status ON legal_court_cases(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_legal_court_cases_type ON legal_court_cases(type);
|
||||
CREATE INDEX IF NOT EXISTS idx_legal_court_cases_role ON legal_court_cases(role);
|
||||
CREATE INDEX IF NOT EXISTS idx_legal_court_cases_number ON legal_court_cases(case_number);
|
||||
CREATE INDEX IF NOT EXISTS idx_legal_court_cases_hearing ON legal_court_cases(next_hearing_date);
|
||||
CREATE INDEX IF NOT EXISTS idx_legal_court_cases_created ON legal_court_cases(created_at DESC);
|
||||
|
||||
-- Доверенности (оставляем для истории, но можно использовать для других целей)
|
||||
CREATE TABLE IF NOT EXISTS legal_powers_of_attorney (
|
||||
id VARCHAR(50) PRIMARY KEY,
|
||||
number TEXT NOT NULL UNIQUE,
|
||||
issued_to TEXT NOT NULL, -- Кому выдана
|
||||
issue_date DATE NOT NULL,
|
||||
expiry_date DATE NOT NULL,
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'expired', 'revoked')),
|
||||
authority TEXT NOT NULL, -- Полномочия
|
||||
document_file_url TEXT, -- Ссылка на файл доверенности
|
||||
notes TEXT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_legal_poa_status ON legal_powers_of_attorney(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_legal_poa_expiry ON legal_powers_of_attorney(expiry_date);
|
||||
CREATE INDEX IF NOT EXISTS idx_legal_poa_number ON legal_powers_of_attorney(number);
|
||||
|
||||
-- История изменений договоров
|
||||
CREATE TABLE IF NOT EXISTS legal_contract_history (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
contract_id VARCHAR(50) NOT NULL REFERENCES legal_contracts(id) ON DELETE CASCADE,
|
||||
from_status VARCHAR(20),
|
||||
to_status VARCHAR(20) NOT NULL,
|
||||
changed_by TEXT NOT NULL,
|
||||
change_reason TEXT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_contract_history_contract ON legal_contract_history(contract_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_contract_history_date ON legal_contract_history(created_at DESC);
|
||||
|
||||
-- История изменений судебных дел
|
||||
CREATE TABLE IF NOT EXISTS legal_court_case_history (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
case_id VARCHAR(50) NOT NULL REFERENCES legal_court_cases(id) ON DELETE CASCADE,
|
||||
from_status VARCHAR(20),
|
||||
to_status VARCHAR(20) NOT NULL,
|
||||
changed_by TEXT NOT NULL,
|
||||
change_reason TEXT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_court_case_history_case ON legal_court_case_history(case_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_court_case_history_date ON legal_court_case_history(created_at DESC);
|
||||
|
||||
-- Комментарии к договорам
|
||||
CREATE TABLE IF NOT EXISTS legal_contract_comments (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
contract_id VARCHAR(50) NOT NULL REFERENCES legal_contracts(id) ON DELETE CASCADE,
|
||||
author TEXT NOT NULL,
|
||||
comment TEXT NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_contract_comments_contract ON legal_contract_comments(contract_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_contract_comments_date ON legal_contract_comments(created_at DESC);
|
||||
|
||||
-- Комментарии к судебным делам
|
||||
CREATE TABLE IF NOT EXISTS legal_court_case_comments (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
case_id VARCHAR(50) NOT NULL REFERENCES legal_court_cases(id) ON DELETE CASCADE,
|
||||
author TEXT NOT NULL,
|
||||
comment TEXT NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_court_case_comments_case ON legal_court_case_comments(case_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_court_case_comments_date ON legal_court_case_comments(created_at DESC);
|
||||
|
||||
-- Комментарии для документации
|
||||
COMMENT ON TABLE legal_contracts IS 'Договоры юридического отдела';
|
||||
COMMENT ON TABLE legal_court_cases IS 'Судебные дела';
|
||||
COMMENT ON TABLE legal_powers_of_attorney IS 'Доверенности';
|
||||
COMMENT ON TABLE legal_contract_history IS 'История изменений статусов договоров';
|
||||
COMMENT ON TABLE legal_court_case_history IS 'История изменений статусов судебных дел';
|
||||
COMMENT ON TABLE legal_contract_comments IS 'Комментарии к договорам';
|
||||
COMMENT ON TABLE legal_court_case_comments IS 'Комментарии к судебным делам';
|
||||
Reference in New Issue
Block a user