Files
mkd/backend/migrate_salary_history.sql
2026-02-04 00:17:04 +05:00

43 lines
3.1 KiB
SQL
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ========= HR: ИСТОРИЯ ЗАРПЛАТ ИЗ 1С =========
-- Таблица для хранения истории зарплат по периодам
CREATE TABLE IF NOT EXISTS employee_salary_history (
id BIGSERIAL PRIMARY KEY,
employee_id VARCHAR(50) NOT NULL REFERENCES employees(id) ON DELETE CASCADE,
report_id BIGINT REFERENCES financial_reports(id) ON DELETE SET NULL,
-- Период
period_month INTEGER NOT NULL CHECK (period_month >= 1 AND period_month <= 12),
period_year INTEGER NOT NULL CHECK (period_year >= 2000 AND period_year <= 2100),
-- Зарплатные данные
base_salary NUMERIC(10, 2) DEFAULT 0, -- Оклад
actual_salary NUMERIC(10, 2) DEFAULT 0, -- Фактическая зарплата
bonuses NUMERIC(10, 2) DEFAULT 0, -- Премии
deductions NUMERIC(10, 2) DEFAULT 0, -- Удержания
net_salary NUMERIC(10, 2) DEFAULT 0, -- К выплате
-- Отработанное время
worked_days NUMERIC(5, 2), -- Отработано дней
worked_hours NUMERIC(6, 2), -- Отработано часов
vacation_days NUMERIC(5, 2) DEFAULT 0, -- Дни отпуска
sick_leave_days NUMERIC(5, 2) DEFAULT 0, -- Дни больничного
-- Дополнительные данные из 1С
metadata JSONB, -- Дополнительные поля из отчета
-- Служебные поля
imported_from_1c BOOLEAN DEFAULT true, -- Импортировано из 1С
imported_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
-- Уникальность: один сотрудник - один период
UNIQUE(employee_id, period_month, period_year)
);
CREATE INDEX IF NOT EXISTS idx_salary_history_employee ON employee_salary_history(employee_id);
CREATE INDEX IF NOT EXISTS idx_salary_history_period ON employee_salary_history(period_year, period_month);
CREATE INDEX IF NOT EXISTS idx_salary_history_report ON employee_salary_history(report_id);
-- Комментарии к таблице
COMMENT ON TABLE employee_salary_history IS 'История зарплат сотрудников по периодам, импортированная из 1С';
COMMENT ON COLUMN employee_salary_history.base_salary IS 'Оклад (базовая ставка)';
COMMENT ON COLUMN employee_salary_history.actual_salary IS 'Фактическая начисленная зарплата';
COMMENT ON COLUMN employee_salary_history.net_salary IS 'Зарплата к выплате (после всех удержаний)';
COMMENT ON COLUMN employee_salary_history.metadata IS 'Дополнительные данные из отчета 1С в формате JSON';