-- ========= 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';