-- جدول السلف على الراتب (طلب → موافقة موارد بشرية → صرف من الصرفيات مع ربط وصل Buy)
-- نفّذ على قاعدة البيانات مرة واحدة بعد النسخ الاحتياطي.

CREATE TABLE IF NOT EXISTS `salary_advances` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `employee_id` INT UNSIGNED NOT NULL,
  `employee_name_snapshot` VARCHAR(255) NULL DEFAULT NULL COMMENT 'يُملأ عند الصرف من Emp',
  `amount` BIGINT NOT NULL COMMENT 'مبلغ السلفة (دينار) كما في الصرفيات',
  `installments_count` INT UNSIGNED NOT NULL DEFAULT 1,
  `monthly_deduction` BIGINT NOT NULL DEFAULT 0 COMMENT 'قيمة الاستقطاع المعيارية (تقريب متساوٍ)',
  `remainder_first_installments` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'عدد الأشهر الأولى التي تأخذ +1 دينار عند عدم القسمة التامة',
  `deduction_months_json` LONGTEXT NULL COMMENT 'JSON: [{ym,amount_iqd},...] يُبنى عند الصرف',
  `installments_remaining` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'يُقل عند تسجيل استقطاع راتب',
  `repaid_complete` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 عند انتهاء الأقساط',
  `notes` TEXT NULL,
  `status` VARCHAR(24) NOT NULL DEFAULT 'pending' COMMENT 'pending|approved|rejected|disbursed',
  `entered_by_user_id` INT UNSIGNED NULL DEFAULT NULL,
  `approved_by_user_id` INT UNSIGNED NULL DEFAULT NULL,
  `approved_by_name_snapshot` VARCHAR(255) NULL DEFAULT NULL,
  `approved_at` DATETIME NULL DEFAULT NULL,
  `buy_id` INT UNSIGNED NULL DEFAULT NULL,
  `disbursement_date` DATE NULL DEFAULT NULL,
  `disbursement_month` TINYINT UNSIGNED NULL DEFAULT NULL,
  `disbursement_year` SMALLINT UNSIGNED NULL DEFAULT NULL,
  `disbursed_by_user_id` INT UNSIGNED NULL DEFAULT NULL,
  `disbursed_by_name_snapshot` VARCHAR(255) NULL DEFAULT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_salary_adv_status` (`status`),
  KEY `idx_salary_adv_emp` (`employee_id`),
  KEY `idx_salary_adv_buy` (`buy_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
