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