# Generated by Django 5.2.11 on 2026-02-11 12:38

import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('tenant', '0001_initial'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='EmployeeModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('employee_code', models.CharField(db_index=True, max_length=50, verbose_name='کد پرسنلی')),
                ('first_name', models.CharField(max_length=100, verbose_name='نام')),
                ('last_name', models.CharField(max_length=100, verbose_name='نام خانوادگی')),
                ('first_name_en', models.CharField(blank=True, max_length=100, verbose_name='نام انگلیسی')),
                ('last_name_en', models.CharField(blank=True, max_length=100, verbose_name='نام خانوادگی انگلیسی')),
                ('national_code', models.CharField(db_index=True, max_length=10, verbose_name='کد ملی')),
                ('birth_certificate_number', models.CharField(blank=True, max_length=20, verbose_name='شماره شناسنامه')),
                ('date_of_birth', models.DateField(blank=True, null=True, verbose_name='تاریخ تولد')),
                ('gender', models.CharField(choices=[('MALE', 'مرد'), ('FEMALE', 'زن')], default='MALE', max_length=10, verbose_name='جنسیت')),
                ('marital_status', models.CharField(choices=[('SINGLE', 'مجرد'), ('MARRIED', 'متأهل'), ('DIVORCED', 'مطلقه'), ('WIDOWED', 'بیوه')], default='SINGLE', max_length=15, verbose_name='وضعیت تأهل')),
                ('military_status', models.CharField(choices=[('COMPLETED', 'پایان خدمت'), ('EXEMPT', 'معاف'), ('EDUCATIONAL_EXEMPT', 'معاف تحصیلی'), ('ACTIVE', 'در حال خدمت'), ('NOT_APPLICABLE', 'شامل نمی\u200cشود')], default='NOT_APPLICABLE', max_length=25, verbose_name='وضعیت نظام وظیفه')),
                ('nationality', models.CharField(default='IR', max_length=5, verbose_name='ملیت')),
                ('phone', models.CharField(blank=True, max_length=20, verbose_name='تلفن')),
                ('mobile', models.CharField(blank=True, max_length=20, verbose_name='موبایل')),
                ('email', models.EmailField(blank=True, max_length=254, verbose_name='ایمیل')),
                ('address', models.TextField(blank=True, verbose_name='آدرس')),
                ('postal_code', models.CharField(blank=True, max_length=20, verbose_name='کد پستی')),
                ('city', models.CharField(blank=True, max_length=100, verbose_name='شهر')),
                ('province', models.CharField(blank=True, max_length=100, verbose_name='استان')),
                ('emergency_contact_name', models.CharField(blank=True, max_length=200, verbose_name='نام تماس اضطراری')),
                ('emergency_contact_phone', models.CharField(blank=True, max_length=20, verbose_name='تلفن تماس اضطراری')),
                ('emergency_contact_relation', models.CharField(blank=True, max_length=50, verbose_name='نسبت تماس اضطراری')),
                ('hire_date', models.DateField(blank=True, null=True, verbose_name='تاریخ استخدام')),
                ('termination_date', models.DateField(blank=True, null=True, verbose_name='تاریخ خاتمه')),
                ('employment_status', models.CharField(choices=[('ACTIVE', 'فعال'), ('ON_LEAVE', 'در مرخصی'), ('SUSPENDED', 'تعلیق'), ('TERMINATED', 'خاتمه\u200cیافته'), ('RETIRED', 'بازنشسته'), ('PROBATION', 'آزمایشی')], db_index=True, default='PROBATION', max_length=15, verbose_name='وضعیت استخدام')),
                ('employment_type', models.CharField(choices=[('FULL_TIME', 'تمام\u200cوقت'), ('PART_TIME', 'پاره\u200cوقت'), ('CONTRACT', 'قراردادی'), ('INTERN', 'کارآموز')], default='FULL_TIME', max_length=15, verbose_name='نوع استخدام')),
                ('probation_end_date', models.DateField(blank=True, null=True, verbose_name='پایان دوره آزمایشی')),
                ('org_unit_id', models.UUIDField(blank=True, db_index=True, null=True, verbose_name='واحد سازمانی')),
                ('is_active', models.BooleanField(db_index=True, default=True, verbose_name='فعال')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('created_by', models.UUIDField(blank=True, null=True, verbose_name='ایجاد توسط')),
                ('updated_by', models.UUIDField(blank=True, null=True, verbose_name='بروزرسانی توسط')),
                ('manager', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='direct_reports', to='hrm.employeemodel', verbose_name='مدیر مستقیم')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('user', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='hrm_employee', to=settings.AUTH_USER_MODEL, verbose_name='حساب کاربری')),
            ],
            options={
                'verbose_name': 'کارمند',
                'verbose_name_plural': 'کارمندان',
                'db_table': 'hrm_employee',
            },
        ),
        migrations.CreateModel(
            name='JobFamilyModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('name', models.CharField(max_length=255, verbose_name='نام')),
                ('code', models.CharField(max_length=50, verbose_name='کد')),
                ('description', models.TextField(blank=True, verbose_name='شرح')),
                ('is_active', models.BooleanField(default=True, verbose_name='فعال')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'خانواده شغلی',
                'verbose_name_plural': 'خانواده\u200cهای شغلی',
                'db_table': 'hrm_job_family',
                'unique_together': {('tenant', 'code')},
            },
        ),
        migrations.CreateModel(
            name='JobTitleModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('title', models.CharField(max_length=255, verbose_name='عنوان')),
                ('title_en', models.CharField(blank=True, max_length=255, verbose_name='عنوان انگلیسی')),
                ('code', models.CharField(max_length=50, verbose_name='کد')),
                ('level', models.CharField(choices=[('INTERN', 'کارآموز'), ('JUNIOR', 'کارشناس مبتدی'), ('MID', 'کارشناس'), ('SENIOR', 'کارشناس ارشد'), ('LEAD', 'سرپرست'), ('MANAGER', 'مدیر'), ('DIRECTOR', 'مدیرکل'), ('VP', 'معاون'), ('C_LEVEL', 'مدیر عامل')], default='MID', max_length=15, verbose_name='سطح')),
                ('grade', models.PositiveIntegerField(default=0, verbose_name='رتبه')),
                ('description', models.TextField(blank=True, verbose_name='شرح شغل')),
                ('responsibilities', models.TextField(blank=True, verbose_name='مسئولیت\u200cها')),
                ('qualifications', models.TextField(blank=True, verbose_name='شرایط احراز')),
                ('min_experience_years', models.PositiveIntegerField(default=0, verbose_name='حداقل سابقه (سال)')),
                ('is_active', models.BooleanField(default=True, verbose_name='فعال')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('job_family', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='job_titles', to='hrm.jobfamilymodel', verbose_name='خانواده شغلی')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'عنوان شغلی',
                'verbose_name_plural': 'عناوین شغلی',
                'db_table': 'hrm_job_title',
            },
        ),
        migrations.CreateModel(
            name='LeavePolicyModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('name', models.CharField(max_length=255, verbose_name='نام')),
                ('code', models.CharField(max_length=50, verbose_name='کد')),
                ('leave_type', models.CharField(choices=[('ANNUAL', 'استحقاقی'), ('SICK', 'استعلاجی'), ('MATERNITY', 'زایمان'), ('PATERNITY', 'پدری'), ('UNPAID', 'بدون حقوق'), ('STUDY', 'تحصیلی'), ('COMPENSATORY', 'جبرانی'), ('BEREAVEMENT', 'فوت بستگان'), ('MARRIAGE', 'ازدواج'), ('PILGRIMAGE', 'حج'), ('HOURLY', 'ساعتی')], default='ANNUAL', max_length=20, verbose_name='نوع مرخصی')),
                ('annual_entitlement_days', models.DecimalField(decimal_places=2, default=26.0, max_digits=5, verbose_name='حق مرخصی سالانه (روز)')),
                ('max_carryover_days', models.DecimalField(decimal_places=2, default=10.0, max_digits=5, verbose_name='حداکثر ذخیره (روز)')),
                ('max_accumulation_days', models.DecimalField(decimal_places=2, default=36.0, max_digits=5, verbose_name='حداکثر انباشت (روز)')),
                ('min_service_days_required', models.PositiveIntegerField(default=0, verbose_name='حداقل سابقه مورد نیاز (روز)')),
                ('accrual_method', models.CharField(choices=[('ANNUAL', 'سالانه'), ('MONTHLY', 'ماهانه'), ('DAILY', 'روزانه'), ('CUSTOM', 'سفارشی')], default='MONTHLY', max_length=15, verbose_name='روش محاسبه')),
                ('requires_approval', models.BooleanField(default=True, verbose_name='نیاز به تأیید')),
                ('max_consecutive_days', models.PositiveIntegerField(default=30, verbose_name='حداکثر روز متوالی')),
                ('min_notice_days', models.PositiveIntegerField(default=1, verbose_name='حداقل اطلاع قبلی (روز)')),
                ('allow_half_day', models.BooleanField(default=True, verbose_name='مرخصی نیم\u200cروز')),
                ('allow_hourly', models.BooleanField(default=False, verbose_name='مرخصی ساعتی')),
                ('is_paid', models.BooleanField(default=True, verbose_name='با حقوق')),
                ('applicable_genders', models.JSONField(default=list, verbose_name='جنسیت\u200cهای مشمول')),
                ('applicable_employment_types', models.JSONField(default=list, verbose_name='انواع استخدام مشمول')),
                ('is_active', models.BooleanField(default=True, verbose_name='فعال')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'سیاست مرخصی',
                'verbose_name_plural': 'سیاست\u200cهای مرخصی',
                'db_table': 'hrm_leave_policy',
            },
        ),
        migrations.CreateModel(
            name='LeaveBalanceModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('leave_type', models.CharField(max_length=20, verbose_name='نوع مرخصی')),
                ('year', models.PositiveIntegerField(verbose_name='سال')),
                ('entitled_days', models.DecimalField(decimal_places=2, default=0, max_digits=6, verbose_name='حق مرخصی')),
                ('carried_over_days', models.DecimalField(decimal_places=2, default=0, max_digits=6, verbose_name='ذخیره از سال قبل')),
                ('used_days', models.DecimalField(decimal_places=2, default=0, max_digits=6, verbose_name='مصرف\u200cشده')),
                ('pending_days', models.DecimalField(decimal_places=2, default=0, max_digits=6, verbose_name='در انتظار تأیید')),
                ('adjustment_days', models.DecimalField(decimal_places=2, default=0, max_digits=6, verbose_name='تعدیل')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='leave_balances', to='hrm.employeemodel', verbose_name='کارمند')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('leave_policy', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='balances', to='hrm.leavepolicymodel', verbose_name='سیاست مرخصی')),
            ],
            options={
                'verbose_name': 'مانده مرخصی',
                'verbose_name_plural': 'مانده مرخصی\u200cها',
                'db_table': 'hrm_leave_balance',
            },
        ),
        migrations.CreateModel(
            name='LeaveRequestModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('leave_type', models.CharField(max_length=20, verbose_name='نوع مرخصی')),
                ('start_date', models.DateField(verbose_name='تاریخ شروع')),
                ('end_date', models.DateField(verbose_name='تاریخ پایان')),
                ('days_count', models.DecimalField(decimal_places=2, default=1, max_digits=5, verbose_name='تعداد روز')),
                ('is_half_day', models.BooleanField(default=False, verbose_name='نیم\u200cروز')),
                ('half_day_period', models.CharField(blank=True, max_length=15, verbose_name='بازه نیم\u200cروز')),
                ('status', models.CharField(choices=[('DRAFT', 'پیش\u200cنویس'), ('PENDING', 'در انتظار تأیید'), ('APPROVED', 'تأیید\u200cشده'), ('REJECTED', 'رد\u200cشده'), ('CANCELLED', 'لغو\u200cشده')], db_index=True, default='DRAFT', max_length=15, verbose_name='وضعیت')),
                ('reason', models.TextField(blank=True, verbose_name='دلیل')),
                ('approved_by', models.UUIDField(blank=True, null=True, verbose_name='تأیید توسط')),
                ('approved_at', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ تأیید')),
                ('rejection_reason', models.TextField(blank=True, verbose_name='دلیل رد')),
                ('attachment', models.FileField(blank=True, upload_to='hrm/leave_attachments/', verbose_name='پیوست')),
                ('notes', models.TextField(blank=True, verbose_name='یادداشت')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='leave_requests', to='hrm.employeemodel', verbose_name='کارمند')),
                ('leave_policy', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.leavepolicymodel', verbose_name='سیاست مرخصی')),
                ('substitute', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='substituted_leaves', to='hrm.employeemodel', verbose_name='جانشین')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'درخواست مرخصی',
                'verbose_name_plural': 'درخواست\u200cهای مرخصی',
                'db_table': 'hrm_leave_request',
            },
        ),
        migrations.CreateModel(
            name='LegalEntityModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('name', models.CharField(max_length=255, verbose_name='نام')),
                ('name_en', models.CharField(blank=True, max_length=255, verbose_name='نام انگلیسی')),
                ('registration_number', models.CharField(db_index=True, max_length=50, verbose_name='شماره ثبت')),
                ('national_id', models.CharField(db_index=True, max_length=20, verbose_name='شناسه ملی')),
                ('economic_code', models.CharField(blank=True, max_length=20, verbose_name='کد اقتصادی')),
                ('registration_date', models.DateField(blank=True, null=True, verbose_name='تاریخ ثبت')),
                ('entity_type', models.CharField(choices=[('COMPANY', 'شرکت'), ('BRANCH', 'شعبه'), ('REPRESENTATIVE', 'نمایندگی')], default='COMPANY', max_length=20, verbose_name='نوع')),
                ('address', models.TextField(blank=True, verbose_name='آدرس')),
                ('phone', models.CharField(blank=True, max_length=50, verbose_name='تلفن')),
                ('fax', models.CharField(blank=True, max_length=50, verbose_name='فکس')),
                ('email', models.EmailField(blank=True, max_length=254, verbose_name='ایمیل')),
                ('website', models.URLField(blank=True, verbose_name='وبسایت')),
                ('postal_code', models.CharField(blank=True, max_length=20, verbose_name='کد پستی')),
                ('city', models.CharField(blank=True, max_length=100, verbose_name='شهر')),
                ('province', models.CharField(blank=True, max_length=100, verbose_name='استان')),
                ('country', models.CharField(default='IR', max_length=5, verbose_name='کشور')),
                ('is_active', models.BooleanField(db_index=True, default=True, verbose_name='فعال')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('created_by', models.UUIDField(blank=True, null=True, verbose_name='ایجاد توسط')),
                ('updated_by', models.UUIDField(blank=True, null=True, verbose_name='بروزرسانی توسط')),
                ('parent_entity', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='children', to='hrm.legalentitymodel', verbose_name='شخصیت حقوقی مادر')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'شخصیت حقوقی',
                'verbose_name_plural': 'شخصیت\u200cهای حقوقی',
                'db_table': 'hrm_legal_entity',
            },
        ),
        migrations.AddField(
            model_name='employeemodel',
            name='legal_entity',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='employees', to='hrm.legalentitymodel', verbose_name='شخصیت حقوقی'),
        ),
        migrations.CreateModel(
            name='LocationModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('name', models.CharField(max_length=255, verbose_name='نام')),
                ('code', models.CharField(max_length=50, verbose_name='کد')),
                ('location_type', models.CharField(choices=[('HEADQUARTERS', 'دفتر مرکزی'), ('OFFICE', 'دفتر'), ('FACTORY', 'کارخانه'), ('WAREHOUSE', 'انبار'), ('BRANCH', 'شعبه'), ('REMOTE', 'دورکاری'), ('HYBRID', 'ترکیبی')], default='OFFICE', max_length=20, verbose_name='نوع مکان')),
                ('org_unit_id', models.UUIDField(blank=True, null=True, verbose_name='واحد سازمانی')),
                ('address', models.TextField(blank=True, verbose_name='آدرس')),
                ('city', models.CharField(blank=True, max_length=100, verbose_name='شهر')),
                ('province', models.CharField(blank=True, max_length=100, verbose_name='استان')),
                ('country', models.CharField(default='IR', max_length=5, verbose_name='کشور')),
                ('postal_code', models.CharField(blank=True, max_length=20, verbose_name='کد پستی')),
                ('phone', models.CharField(blank=True, max_length=50, verbose_name='تلفن')),
                ('latitude', models.FloatField(blank=True, null=True, verbose_name='عرض جغرافیایی')),
                ('longitude', models.FloatField(blank=True, null=True, verbose_name='طول جغرافیایی')),
                ('capacity', models.PositiveIntegerField(default=0, verbose_name='ظرفیت')),
                ('timezone', models.CharField(default='Asia/Tehran', max_length=50, verbose_name='منطقه زمانی')),
                ('is_active', models.BooleanField(db_index=True, default=True, verbose_name='فعال')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('legal_entity', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='locations', to='hrm.legalentitymodel', verbose_name='شخصیت حقوقی')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'مکان',
                'verbose_name_plural': 'مکان\u200cها',
                'db_table': 'hrm_location',
            },
        ),
        migrations.AddField(
            model_name='employeemodel',
            name='location',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='employees', to='hrm.locationmodel', verbose_name='مکان'),
        ),
        migrations.CreateModel(
            name='AttendanceRecordModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('attendance_date', models.DateField(db_index=True, verbose_name='تاریخ')),
                ('check_in', models.DateTimeField(blank=True, null=True, verbose_name='ورود')),
                ('check_out', models.DateTimeField(blank=True, null=True, verbose_name='خروج')),
                ('status', models.CharField(choices=[('PRESENT', 'حاضر'), ('ABSENT', 'غایب'), ('LATE', 'تأخیر'), ('EARLY_DEPARTURE', 'خروج زودهنگام'), ('ON_LEAVE', 'مرخصی'), ('HOLIDAY', 'تعطیل'), ('REMOTE', 'دورکاری'), ('BUSINESS_TRIP', 'مأموریت')], default='PRESENT', max_length=20, verbose_name='وضعیت')),
                ('scheduled_start', models.TimeField(blank=True, null=True, verbose_name='ساعت شروع برنامه')),
                ('scheduled_end', models.TimeField(blank=True, null=True, verbose_name='ساعت پایان برنامه')),
                ('late_minutes', models.PositiveIntegerField(default=0, verbose_name='تأخیر (دقیقه)')),
                ('early_departure_minutes', models.PositiveIntegerField(default=0, verbose_name='خروج زودهنگام (دقیقه)')),
                ('overtime_minutes', models.PositiveIntegerField(default=0, verbose_name='اضافه\u200cکاری (دقیقه)')),
                ('break_minutes', models.PositiveIntegerField(default=0, verbose_name='استراحت (دقیقه)')),
                ('effective_hours', models.DecimalField(decimal_places=2, default=0, max_digits=5, verbose_name='ساعات مؤثر')),
                ('source', models.CharField(choices=[('MANUAL', 'دستی'), ('BIOMETRIC', 'بیومتریک'), ('GPS', 'GPS'), ('MOBILE', 'موبایل')], default='MANUAL', max_length=15, verbose_name='منبع')),
                ('notes', models.TextField(blank=True, verbose_name='یادداشت')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attendance_records', to='hrm.employeemodel', verbose_name='کارمند')),
                ('location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.locationmodel', verbose_name='مکان')),
            ],
            options={
                'verbose_name': 'رکورد حضور',
                'verbose_name_plural': 'رکوردهای حضور',
                'db_table': 'hrm_attendance_record',
            },
        ),
        migrations.CreateModel(
            name='PayGradeModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('name', models.CharField(max_length=255, verbose_name='نام')),
                ('code', models.CharField(max_length=50, verbose_name='کد')),
                ('grade_type', models.CharField(choices=[('HOURLY', 'ساعتی'), ('MONTHLY', 'ماهانه'), ('ANNUAL', 'سالانه')], default='MONTHLY', max_length=15, verbose_name='نوع')),
                ('min_amount', models.DecimalField(decimal_places=0, default=0, max_digits=18, verbose_name='حداقل')),
                ('mid_amount', models.DecimalField(decimal_places=0, default=0, max_digits=18, verbose_name='میانه')),
                ('max_amount', models.DecimalField(decimal_places=0, default=0, max_digits=18, verbose_name='حداکثر')),
                ('currency', models.CharField(default='IRR', max_length=5, verbose_name='ارز')),
                ('step_count', models.PositiveIntegerField(default=1, verbose_name='تعداد پله')),
                ('step_increment', models.DecimalField(decimal_places=0, default=0, max_digits=18, verbose_name='افزایش هر پله')),
                ('is_active', models.BooleanField(default=True, verbose_name='فعال')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'رتبه حقوقی',
                'verbose_name_plural': 'رتبه\u200cهای حقوقی',
                'db_table': 'hrm_pay_grade',
            },
        ),
        migrations.CreateModel(
            name='CompensationRecordModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('base_salary', models.DecimalField(decimal_places=0, default=0, max_digits=18, verbose_name='حقوق پایه')),
                ('housing_allowance', models.DecimalField(decimal_places=0, default=0, max_digits=18, verbose_name='حق مسکن')),
                ('transportation_allowance', models.DecimalField(decimal_places=0, default=0, max_digits=18, verbose_name='حق ایاب و ذهاب')),
                ('food_allowance', models.DecimalField(decimal_places=0, default=0, max_digits=18, verbose_name='حق خواربار')),
                ('family_allowance', models.DecimalField(decimal_places=0, default=0, max_digits=18, verbose_name='حق عائله\u200cمندی')),
                ('overtime_rate', models.DecimalField(decimal_places=2, default=1.4, max_digits=4, verbose_name='ضریب اضافه\u200cکاری')),
                ('holiday_rate', models.DecimalField(decimal_places=2, default=1.4, max_digits=4, verbose_name='ضریب تعطیل\u200cکاری')),
                ('night_shift_rate', models.DecimalField(decimal_places=2, default=1.35, max_digits=4, verbose_name='ضریب شب\u200cکاری')),
                ('currency', models.CharField(default='IRR', max_length=5, verbose_name='ارز')),
                ('pay_grade_step', models.PositiveIntegerField(default=1, verbose_name='پله حقوقی')),
                ('effective_date', models.DateField(verbose_name='تاریخ مؤثر')),
                ('end_date', models.DateField(blank=True, null=True, verbose_name='تاریخ پایان')),
                ('is_current', models.BooleanField(db_index=True, default=True, verbose_name='فعلی')),
                ('change_reason', models.TextField(blank=True, verbose_name='دلیل تغییر')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='compensation_records', to='hrm.employeemodel', verbose_name='کارمند')),
                ('pay_grade', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.paygrademodel', verbose_name='رتبه حقوقی')),
            ],
            options={
                'verbose_name': 'سابقه حقوقی',
                'verbose_name_plural': 'سوابق حقوقی',
                'db_table': 'hrm_compensation_record',
                'ordering': ['-effective_date'],
            },
        ),
        migrations.CreateModel(
            name='PositionModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('title', models.CharField(max_length=255, verbose_name='عنوان')),
                ('code', models.CharField(max_length=50, verbose_name='کد')),
                ('org_unit_id', models.UUIDField(blank=True, db_index=True, null=True, verbose_name='واحد سازمانی')),
                ('status', models.CharField(choices=[('ACTIVE', 'فعال'), ('FROZEN', 'منجمد'), ('ABOLISHED', 'حذف شده')], db_index=True, default='ACTIVE', max_length=15, verbose_name='وضعیت')),
                ('is_key_position', models.BooleanField(db_index=True, default=False, verbose_name='پست کلیدی')),
                ('is_budgeted', models.BooleanField(default=True, verbose_name='بودجه\u200cای')),
                ('budget_amount', models.DecimalField(decimal_places=0, default=0, max_digits=18, verbose_name='مبلغ بودجه')),
                ('headcount', models.PositiveIntegerField(default=1, verbose_name='تعداد نیرو')),
                ('fte', models.DecimalField(decimal_places=2, default=1.0, max_digits=3, verbose_name='FTE')),
                ('effective_date', models.DateField(blank=True, null=True, verbose_name='تاریخ مؤثر')),
                ('end_date', models.DateField(blank=True, null=True, verbose_name='تاریخ پایان')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('functional_reports_to', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='functional_subordinates', to='hrm.positionmodel', verbose_name='گزارش\u200cدهی عملیاتی به')),
                ('incumbent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='held_positions', to='hrm.employeemodel', verbose_name='شاغل فعلی')),
                ('job_title', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='positions', to='hrm.jobtitlemodel', verbose_name='عنوان شغلی')),
                ('legal_entity', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='positions', to='hrm.legalentitymodel', verbose_name='شخصیت حقوقی')),
                ('location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='positions', to='hrm.locationmodel', verbose_name='مکان')),
                ('reports_to', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='subordinate_positions', to='hrm.positionmodel', verbose_name='گزارش\u200cدهی به')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'پست سازمانی',
                'verbose_name_plural': 'پست\u200cهای سازمانی',
                'db_table': 'hrm_position',
            },
        ),
        migrations.CreateModel(
            name='EmploymentRecordModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('contract_type', models.CharField(choices=[('PERMANENT', 'دائم'), ('TEMPORARY', 'موقت'), ('FIXED_TERM', 'مدت معین'), ('PROJECT_BASED', 'پروژه\u200cای'), ('INTERNSHIP', 'کارآموزی'), ('CONSULTANCY', 'مشاوره\u200cای')], default='PERMANENT', max_length=20, verbose_name='نوع قرارداد')),
                ('contract_number', models.CharField(blank=True, max_length=50, verbose_name='شماره قرارداد')),
                ('start_date', models.DateField(verbose_name='تاریخ شروع')),
                ('end_date', models.DateField(blank=True, null=True, verbose_name='تاریخ پایان')),
                ('title', models.CharField(blank=True, max_length=255, verbose_name='عنوان')),
                ('org_unit_id', models.UUIDField(blank=True, null=True, verbose_name='واحد سازمانی')),
                ('is_current', models.BooleanField(db_index=True, default=True, verbose_name='فعلی')),
                ('termination_reason', models.TextField(blank=True, verbose_name='دلیل خاتمه')),
                ('notes', models.TextField(blank=True, verbose_name='یادداشت')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='employment_records', to='hrm.employeemodel', verbose_name='کارمند')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('legal_entity', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.legalentitymodel', verbose_name='شخصیت حقوقی')),
                ('position', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.positionmodel', verbose_name='پست')),
            ],
            options={
                'verbose_name': 'سابقه استخدامی',
                'verbose_name_plural': 'سوابق استخدامی',
                'db_table': 'hrm_employment_record',
                'ordering': ['-start_date'],
            },
        ),
        migrations.AddField(
            model_name='employeemodel',
            name='primary_position',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='incumbent_employees', to='hrm.positionmodel', verbose_name='پست سازمانی'),
        ),
        migrations.CreateModel(
            name='ReportingLineModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('reporting_type', models.CharField(choices=[('DIRECT', 'مستقیم'), ('FUNCTIONAL', 'عملیاتی'), ('MATRIX', 'ماتریسی'), ('DOTTED', 'نقطه\u200cچین')], default='DIRECT', max_length=15, verbose_name='نوع گزارش\u200cدهی')),
                ('is_primary', models.BooleanField(default=True, verbose_name='اصلی')),
                ('effective_date', models.DateField(blank=True, null=True, verbose_name='تاریخ مؤثر')),
                ('end_date', models.DateField(blank=True, null=True, verbose_name='تاریخ پایان')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reporting_lines', to='hrm.employeemodel', verbose_name='کارمند')),
                ('manager', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='managed_reports', to='hrm.employeemodel', verbose_name='مدیر')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'خط گزارش\u200cدهی',
                'verbose_name_plural': 'خطوط گزارش\u200cدهی',
                'db_table': 'hrm_reporting_line',
            },
        ),
        migrations.CreateModel(
            name='ShiftPatternModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('name', models.CharField(max_length=255, verbose_name='نام')),
                ('code', models.CharField(max_length=50, verbose_name='کد')),
                ('cycle_days', models.PositiveIntegerField(default=7, verbose_name='روزهای دوره')),
                ('shifts', models.JSONField(default=list, help_text='آرایه\u200cای از شیفت\u200cها با روز و برنامه کاری', verbose_name='شیفت\u200cها')),
                ('is_active', models.BooleanField(default=True, verbose_name='فعال')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'الگوی شیفت',
                'verbose_name_plural': 'الگوهای شیفت',
                'db_table': 'hrm_shift_pattern',
            },
        ),
        migrations.CreateModel(
            name='TimesheetModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('period_start', models.DateField(verbose_name='شروع دوره')),
                ('period_end', models.DateField(verbose_name='پایان دوره')),
                ('status', models.CharField(choices=[('DRAFT', 'پیش\u200cنویس'), ('SUBMITTED', 'ارسال\u200cشده'), ('APPROVED', 'تأیید\u200cشده'), ('REJECTED', 'رد\u200cشده'), ('REVISED', 'بازبینی\u200cشده')], db_index=True, default='DRAFT', max_length=15, verbose_name='وضعیت')),
                ('total_regular_hours', models.DecimalField(decimal_places=2, default=0, max_digits=7, verbose_name='ساعات عادی')),
                ('total_overtime_hours', models.DecimalField(decimal_places=2, default=0, max_digits=7, verbose_name='ساعات اضافه\u200cکاری')),
                ('total_working_days', models.PositiveIntegerField(default=0, verbose_name='روزهای کاری')),
                ('submitted_at', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ ارسال')),
                ('approved_at', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ تأیید')),
                ('approved_by', models.UUIDField(blank=True, null=True, verbose_name='تأیید توسط')),
                ('rejection_reason', models.TextField(blank=True, verbose_name='دلیل رد')),
                ('notes', models.TextField(blank=True, verbose_name='یادداشت')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='timesheets', to='hrm.employeemodel', verbose_name='کارمند')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'تایم\u200cشیت',
                'verbose_name_plural': 'تایم\u200cشیت\u200cها',
                'db_table': 'hrm_timesheet',
            },
        ),
        migrations.CreateModel(
            name='WorkScheduleModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('name', models.CharField(max_length=255, verbose_name='نام')),
                ('code', models.CharField(max_length=50, verbose_name='کد')),
                ('schedule_type', models.CharField(choices=[('STANDARD', 'استاندارد'), ('SHIFT', 'شیفتی'), ('FLEXIBLE', 'شناور'), ('COMPRESSED', 'فشرده'), ('REMOTE', 'دورکاری')], default='STANDARD', max_length=15, verbose_name='نوع برنامه')),
                ('start_time', models.TimeField(blank=True, null=True, verbose_name='ساعت شروع')),
                ('end_time', models.TimeField(blank=True, null=True, verbose_name='ساعت پایان')),
                ('break_duration_minutes', models.PositiveIntegerField(default=60, verbose_name='مدت استراحت (دقیقه)')),
                ('working_days', models.JSONField(default=list, verbose_name='روزهای کاری')),
                ('daily_hours', models.DecimalField(decimal_places=2, default=8.0, max_digits=4, verbose_name='ساعت کاری روزانه')),
                ('weekly_hours', models.DecimalField(decimal_places=2, default=44.0, max_digits=5, verbose_name='ساعت کاری هفتگی')),
                ('is_night_shift', models.BooleanField(default=False, verbose_name='شیفت شب')),
                ('overtime_threshold_daily', models.DecimalField(decimal_places=2, default=8.0, max_digits=4, verbose_name='آستانه اضافه\u200cکاری روزانه')),
                ('overtime_threshold_weekly', models.DecimalField(decimal_places=2, default=44.0, max_digits=5, verbose_name='آستانه اضافه\u200cکاری هفتگی')),
                ('is_active', models.BooleanField(default=True, verbose_name='فعال')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'برنامه کاری',
                'verbose_name_plural': 'برنامه\u200cهای کاری',
                'db_table': 'hrm_work_schedule',
            },
        ),
        migrations.CreateModel(
            name='EmployeeDocumentModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('document_type', models.CharField(max_length=50, verbose_name='نوع مدرک')),
                ('title', models.CharField(max_length=255, verbose_name='عنوان')),
                ('document_number', models.CharField(blank=True, max_length=100, verbose_name='شماره مدرک')),
                ('issue_date', models.DateField(blank=True, null=True, verbose_name='تاریخ صدور')),
                ('expiry_date', models.DateField(blank=True, null=True, verbose_name='تاریخ انقضا')),
                ('file_path', models.FileField(blank=True, upload_to='hrm/documents/', verbose_name='فایل')),
                ('file_size', models.PositiveIntegerField(default=0, verbose_name='حجم فایل')),
                ('mime_type', models.CharField(blank=True, max_length=100, verbose_name='نوع فایل')),
                ('is_verified', models.BooleanField(default=False, verbose_name='تأیید شده')),
                ('verified_by', models.UUIDField(blank=True, null=True, verbose_name='تأیید توسط')),
                ('notes', models.TextField(blank=True, verbose_name='یادداشت')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='documents', to='hrm.employeemodel', verbose_name='کارمند')),
            ],
            options={
                'verbose_name': 'مدرک کارمند',
                'verbose_name_plural': 'مدارک کارمندان',
                'db_table': 'hrm_employee_document',
                'indexes': [models.Index(fields=['tenant', 'employee', 'document_type'], name='hrm_employe_tenant__0e65af_idx'), models.Index(fields=['tenant', 'expiry_date'], name='hrm_employe_tenant__c2a71f_idx')],
            },
        ),
        migrations.CreateModel(
            name='CostAllocationModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('allocation_type', models.CharField(choices=[('POSITION', 'پست'), ('DEPARTMENT', 'واحد'), ('PROJECT', 'پروژه'), ('COST_CENTER', 'مرکز هزینه')], default='DEPARTMENT', max_length=20, verbose_name='نوع تخصیص')),
                ('target_id', models.UUIDField(verbose_name='شناسه مقصد')),
                ('target_code', models.CharField(blank=True, max_length=50, verbose_name='کد مقصد')),
                ('percentage', models.DecimalField(decimal_places=2, default=100.0, max_digits=5, verbose_name='درصد')),
                ('gl_account_code', models.CharField(blank=True, max_length=50, verbose_name='کد حساب دفتر کل')),
                ('effective_date', models.DateField(blank=True, null=True, verbose_name='تاریخ مؤثر')),
                ('end_date', models.DateField(blank=True, null=True, verbose_name='تاریخ پایان')),
                ('is_active', models.BooleanField(default=True, verbose_name='فعال')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cost_allocations', to='hrm.employeemodel', verbose_name='کارمند')),
            ],
            options={
                'verbose_name': 'تخصیص هزینه',
                'verbose_name_plural': 'تخصیص\u200cهای هزینه',
                'db_table': 'hrm_cost_allocation',
                'indexes': [models.Index(fields=['tenant', 'employee'], name='hrm_cost_al_tenant__ead23b_idx'), models.Index(fields=['tenant', 'allocation_type', 'target_id'], name='hrm_cost_al_tenant__6def04_idx')],
            },
        ),
        migrations.CreateModel(
            name='BankAccountModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('bank_name', models.CharField(max_length=100, verbose_name='نام بانک')),
                ('branch_name', models.CharField(blank=True, max_length=100, verbose_name='نام شعبه')),
                ('branch_code', models.CharField(blank=True, max_length=20, verbose_name='کد شعبه')),
                ('account_number', models.CharField(max_length=50, verbose_name='شماره حساب')),
                ('sheba_number', models.CharField(blank=True, max_length=26, verbose_name='شماره شبا')),
                ('card_number', models.CharField(blank=True, max_length=16, verbose_name='شماره کارت')),
                ('account_holder_name', models.CharField(blank=True, max_length=200, verbose_name='نام صاحب حساب')),
                ('is_primary', models.BooleanField(default=False, verbose_name='حساب اصلی')),
                ('is_active', models.BooleanField(default=True, verbose_name='فعال')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bank_accounts', to='hrm.employeemodel', verbose_name='کارمند')),
            ],
            options={
                'verbose_name': 'حساب بانکی',
                'verbose_name_plural': 'حساب\u200cهای بانکی',
                'db_table': 'hrm_bank_account',
                'indexes': [models.Index(fields=['tenant', 'employee'], name='hrm_bank_ac_tenant__f472ad_idx')],
            },
        ),
        migrations.AddIndex(
            model_name='jobtitlemodel',
            index=models.Index(fields=['tenant', 'level'], name='hrm_job_tit_tenant__2ec166_idx'),
        ),
        migrations.AddIndex(
            model_name='jobtitlemodel',
            index=models.Index(fields=['tenant', 'job_family'], name='hrm_job_tit_tenant__63eab9_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='jobtitlemodel',
            unique_together={('tenant', 'code')},
        ),
        migrations.AddIndex(
            model_name='leavepolicymodel',
            index=models.Index(fields=['tenant', 'leave_type'], name='hrm_leave_p_tenant__fdff63_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='leavepolicymodel',
            unique_together={('tenant', 'code')},
        ),
        migrations.AddIndex(
            model_name='leavebalancemodel',
            index=models.Index(fields=['tenant', 'employee', 'year'], name='hrm_leave_b_tenant__931a4d_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='leavebalancemodel',
            unique_together={('tenant', 'employee', 'leave_type', 'year')},
        ),
        migrations.AddIndex(
            model_name='leaverequestmodel',
            index=models.Index(fields=['tenant', 'employee', 'status'], name='hrm_leave_r_tenant__b3daea_idx'),
        ),
        migrations.AddIndex(
            model_name='leaverequestmodel',
            index=models.Index(fields=['tenant', 'status'], name='hrm_leave_r_tenant__1497f4_idx'),
        ),
        migrations.AddIndex(
            model_name='leaverequestmodel',
            index=models.Index(fields=['tenant', 'start_date', 'end_date'], name='hrm_leave_r_tenant__c61f50_idx'),
        ),
        migrations.AddIndex(
            model_name='legalentitymodel',
            index=models.Index(fields=['tenant', 'is_active'], name='hrm_legal_e_tenant__bee068_idx'),
        ),
        migrations.AddIndex(
            model_name='legalentitymodel',
            index=models.Index(fields=['tenant', 'entity_type'], name='hrm_legal_e_tenant__0c2646_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='legalentitymodel',
            unique_together={('tenant', 'national_id')},
        ),
        migrations.AddIndex(
            model_name='locationmodel',
            index=models.Index(fields=['tenant', 'location_type'], name='hrm_locatio_tenant__b9068b_idx'),
        ),
        migrations.AddIndex(
            model_name='locationmodel',
            index=models.Index(fields=['tenant', 'is_active'], name='hrm_locatio_tenant__03a355_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='locationmodel',
            unique_together={('tenant', 'code')},
        ),
        migrations.AddIndex(
            model_name='attendancerecordmodel',
            index=models.Index(fields=['tenant', 'employee', 'attendance_date'], name='hrm_attenda_tenant__013087_idx'),
        ),
        migrations.AddIndex(
            model_name='attendancerecordmodel',
            index=models.Index(fields=['tenant', 'attendance_date', 'status'], name='hrm_attenda_tenant__1424ff_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='attendancerecordmodel',
            unique_together={('tenant', 'employee', 'attendance_date')},
        ),
        migrations.AlterUniqueTogether(
            name='paygrademodel',
            unique_together={('tenant', 'code')},
        ),
        migrations.AddIndex(
            model_name='compensationrecordmodel',
            index=models.Index(fields=['tenant', 'employee', 'is_current'], name='hrm_compens_tenant__75ca0f_idx'),
        ),
        migrations.AddIndex(
            model_name='compensationrecordmodel',
            index=models.Index(fields=['tenant', 'effective_date'], name='hrm_compens_tenant__5b3a8e_idx'),
        ),
        migrations.AddIndex(
            model_name='positionmodel',
            index=models.Index(fields=['tenant', 'status'], name='hrm_positio_tenant__c8852b_idx'),
        ),
        migrations.AddIndex(
            model_name='positionmodel',
            index=models.Index(fields=['tenant', 'org_unit_id'], name='hrm_positio_tenant__067830_idx'),
        ),
        migrations.AddIndex(
            model_name='positionmodel',
            index=models.Index(fields=['tenant', 'is_key_position'], name='hrm_positio_tenant__821180_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='positionmodel',
            unique_together={('tenant', 'code')},
        ),
        migrations.AddIndex(
            model_name='employmentrecordmodel',
            index=models.Index(fields=['tenant', 'employee', 'is_current'], name='hrm_employm_tenant__66a77e_idx'),
        ),
        migrations.AddIndex(
            model_name='employeemodel',
            index=models.Index(fields=['tenant', 'employment_status'], name='hrm_employe_tenant__7913b7_idx'),
        ),
        migrations.AddIndex(
            model_name='employeemodel',
            index=models.Index(fields=['tenant', 'is_active'], name='hrm_employe_tenant__74dd52_idx'),
        ),
        migrations.AddIndex(
            model_name='employeemodel',
            index=models.Index(fields=['tenant', 'org_unit_id'], name='hrm_employe_tenant__f8a9c1_idx'),
        ),
        migrations.AddIndex(
            model_name='employeemodel',
            index=models.Index(fields=['tenant', 'legal_entity'], name='hrm_employe_tenant__4666bb_idx'),
        ),
        migrations.AddIndex(
            model_name='employeemodel',
            index=models.Index(fields=['tenant', 'last_name', 'first_name'], name='hrm_emp_name_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='employeemodel',
            unique_together={('tenant', 'employee_code'), ('tenant', 'national_code')},
        ),
        migrations.AddIndex(
            model_name='reportinglinemodel',
            index=models.Index(fields=['tenant', 'employee'], name='hrm_reporti_tenant__b86fcf_idx'),
        ),
        migrations.AddIndex(
            model_name='reportinglinemodel',
            index=models.Index(fields=['tenant', 'manager'], name='hrm_reporti_tenant__3a46bd_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='shiftpatternmodel',
            unique_together={('tenant', 'code')},
        ),
        migrations.AddIndex(
            model_name='timesheetmodel',
            index=models.Index(fields=['tenant', 'status'], name='hrm_timeshe_tenant__c75465_idx'),
        ),
        migrations.AddIndex(
            model_name='timesheetmodel',
            index=models.Index(fields=['tenant', 'employee', 'period_start'], name='hrm_timeshe_tenant__88311e_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='timesheetmodel',
            unique_together={('tenant', 'employee', 'period_start', 'period_end')},
        ),
        migrations.AlterUniqueTogether(
            name='workschedulemodel',
            unique_together={('tenant', 'code')},
        ),
    ]
